Атрибуты объекта метаданных типа «Справочник»
![](image/image063.gif)
Атрибут или Реквизит - это некое хранилище информации определенного типа. Каждый введенный нами реквизит позволит вводить в объект данного вида некоторые значения.
Для объектов некоторых видов характерны атрибуты, например: код и наименование для справочников. Ввод атрибутов обеспечивается системой автоматически, наименования идентификаторов атрибутов не изменяются.
Атрибуты Код и Наименование характерны для любого справочника. По ним можно производить сортировку элементов справочника. Тип Наименования - строка. Тип Кода можно задать — или число, или строка.
Атрибут Родитель определен для элементов или групп справочника подчиненных какой-либо группе справочника и возвращает ссылку на неё.. Доступ к значению родительской группы выбранного элемента справочника осуществляет Метод ИспользоватьРодителя(<Группа >), устанавливающий выборку элементов по группе справочника.
Метод ПринадлежитГруппе(<Группа>) проверяет, принадлежит ли указанной группе текущий элемент справочника (независимо на каком нижележащем уровне он находится). Метод возвращает: 1 - если элемент принадлежит указанной группе , 0 - если нет.
Атрибут Владелец определен для элементов подчиненного справочника и возвращает ссылку на сопряженный элемент справочника владельца. Доступ к владельцу выбранного элемента справочника в связанном справочнике осуществляет Метод ИспользоватьВладельца(<Элемент>). <Элемент> - это значение элемента связанного справочника, которому подчинен данный
62_______________________ 1С:Предприятие. Практика программирования на платформе V7
справочник. Метод устанавливает выборку по элементу связанного справочника и возвращает значение текущего владельца для справочника (на момент до исполнения метода). В контексте Модуля формы списка справочника метод относится ко всему текущему справочнику.
Реквизиты это дополнительные свойства справочника, создаваемые при конфигурировании. Реквизиты можно создавать и для элемента, и для группы справочника. Они предоставляют доступ к одному из свойств объекта.
Редактирование структуры справочника
Упражнение 5. Создадим два вида справочников: «Оборудование» и «Единицы», причем справочник «Единицы» сделаем подчиненным справочнику «Оборудование», Справочник «Оборудование» сделаем иерархическим, и определим в нем периодический реквизит элемента справочника, изменяемый документами «Цена», реквизит «График», тип реквизита — Календарь», предназначенный для вычисления интервалов времени по различным графикам работы, и реквизит «КоэффАморт», тип реквизита — Число, а также реквизит группы справочника «ГрЦена», тип реквизита — Число.
В дереве метаданных выделим ветвь «Справочники», далее в главном меню выберем пункт «Действие» и в появившемся подменю пункт «Новый элемент».
![](image/image064.jpg)
VII Справочники______________________________________________________________ 63
Появится окно редактирования структуры справочника (или конструктор справочника, если установлен флажок «Использовать конструкторы для создания новых объектов»), в которой редактируются свойства объекта.
![](image/image065.gif)
Чтобы к объекту можно было обращаться, ему надо задать идентификатор, который не может содержать пробелов и специальных символов, кроме подчеркивания, и не должен начинаться с цифры, его длина не должна превышать 128 символов; кроме идентификатора, можно также задать комментарий и синоним. В отличие от идентификатора, на них не накладывается никаких ограничений. Синоним описывает пользовательское представление объекта, если он не задан, то для представления используется идентификатор. В комментариях обычно записывают текст, Расшифровывающий идентификатор или поясняющий назначение создаваемого объекта. Для подчиненных справочников задается свойство подчинения (связь со справочником владельцем типа «много к одному»). Для справочников любого вида характерны реквизиты «Код» и «Наименование», названия которых не изменяются, длина кода (не более 24 символов) и наименования (не более 100 символов). Также здесь задаются основные параметры для нумерации и сортировки элементов - «Контроль уникальности» и «Серии кодов». Из данной формы доступны различные формы представления справочника: форма элемента (индивидуальная карточка), форма группы, Формы списков и устанавливаются формы для редактирования элемента справочника: «в списке», «в диалоге» - в индивидуальной карточке или «обоими
64_______________________ 1С:Предприятие. Практика программирования на платформе V7
способами».
По умолчанию справочнику дается идентификатор «Новый1», изменим его на - «Оборудование», установим тип кода — «Текстовый».
Создание нового реквизита
![](image/image066.gif)
Создание нового реквизита справочника может осуществляться как из дерева метаданных, через контекстное меню конкретного справочника, так и из вышеописанной формы нажатием кнопки «Новый». При этом на экране появляется окно палитры свойств - «Свойства реквизита». В верхней части закладки «Общие» следует ввести идентификатор нового реквизита. Идентификатор реквизита является некоторым уникальным словом, которое позволит отличить данный реквизит от других реквизитов данного объекта. При создании нового рекви-зита программа сама подставляет идентификатор «новый1». Целесообразно вводить идентифика-торы, отражающие назначение реквизита. Введем в справочник «Оборудование» реквизит «Цена» Тип вводимого реквизита указывается выбором из списка возможных типов в поле «Тип значения». Стандартными типами являются «Число», «Строка», «Дата». Они позволяют вводить, соответственно, числовое значение, произвольную строку символов или календарную дату. Установим тип значения реквизита «Число», который располагается вы-ше типа «Строка».
Для числовых реквизитов, кроме самого типа «Число», нужно также указать длину и точность (количество знаков после запятой). Обратите вни-мание, что длина числового реквизита указывается с учетом целой части, дробной и десятичной точки, на платформе 7.5 максимальная точность чисел - 5 знаков.
VII. Справочники_____________________________________________________________ 65
на платформе 7.7-9 знаков, максимальная длина чисел -19 знаков. На закладке «Дополнительные» можно задать разделение представления числа на триады -флажок «Разделять триады»,- которое не влияет на формат хранения чисел, то есть символ разделителя не включается в длину числа. Полностью данное свойство объекта метаданных можно именовать «Разделять триады цифр при показе числового значения объекта метаданных». Это свойство доступно для редактирования только для объектов метаданных с типом значения «число». Если это свойство включено, то при вводе и показе значения объекта метаданных будут автоматически вставляться разделители между тройками цифр, разделяя тысячи, миллионы, миллиарды и так далее. Здесь же можно установить флажок «Неотрицательный», который не позволит Вам интерактивно ввести отрицательное значение реквизита, причем при вводе отрицательного значения в «неотрицательный реквизит» система запишет положительное
значение.
Укажем для реквизита «Цена» длину 10 и точность 2, это значит, что максимальное число, которое можно будет ввести в реквизит количество, составит 9999999.99, то есть, в целой части количества мы сможем вводить 10-2-1 = 7 разрядов. При выборе длины и точности нужно ориентироваться на текущие потребности, оценив, какие при-мерно максимальные значения цены и с какой точностью встре-чаются в хозяйственных операциях. В дальнейшем можно легко увеличить и длину, и точность для любого реквизита. Максимальная точность числового значения - 9 знаков.
Уменьшение длины и точности реквизита может привести к потере существующих значе-ний в уже введенных элементах, но программа предупредит вас об этом.
На закладке «Дополнительные» свойств реквизита установим флажки «Неотрицательный», «Периодический», чтобы сохранялись все значения реквизита с привязкой к дате изменения, и «Изменяется документами», чтобы
66_______________________ 1С:Предприятие. Практика программирования на платформе V7
можно было отслеживать историю изменения значения по документам; флажок «Ручное изменение» устанавливается системой и служит для обеспечения возможности ручного ввода или изменения значений в истории реквизита.
![](image/image067.gif)
Для подтверждения введенных нами данных нужно нажать кнопку «ОК.». При этом палитра свойств будет закрыта, а введенный реквизит будет располагаться в списке реквизитов, в окне редактирования реквизитов.
При необходимости использования выборки или поиска по реквизиту у последнего должен быть установлен на закладке «Дополнительные» флаг «Сортировка», а для возможности отбора элементов по значению реквизита -флаг «Отбор по реквизиту». Установим флаг сортировки для реквизита «График».
![](image/image068.gif)
V//. Справочники_____________________________________________________________ 67
Вернемся в окно редактирования свойств справочника «Оборудование» и создадим возможность группировать элементы справочника по группам. Для этого установим значение поля ввода «Кол-во, уровней» больше единицы.
![](image/image069.gif)
Свойство реквизита многоуровенного справочника «Использовать» позволяет определить, для каких записей будет использоваться данный реквизит: «для элемента», «для группы» или «для обоих».
![](image/image070.gif)
68_______________________ 1С:Предприятие. Практика программирования на платформе V7
Далее нажмем последовательно кнопки «Формы списка» и «Редактировать». Форм списка может быть несколько. Две из них можно определить для просмотра каталога и для подбора значений по умолчанию.
![](image/image071.gif)
![]() |
![]() |
VII. Справочники_____________________________________________________________ 69
Напомню, что форма включает в себя:
1. Диалоговое окно, в котором мы задаем расположение реквизитов, кнопок
и информационных полей (создаем визуальное представление объекта для пользователя);
2. Модуль формы, в который мы помещаем те процедуры и функции, которые
выполняются в момент интерактивного открытия, заполнения, сохранения и изменения объекта;
3. Табличный шаблон, в котором мы создаем, если это необходимо, шаблон
печатной формы данного объекта.
Упражнение 6. Самостоятельно создайте Форму списка для подбора элементов справочника «Оборудование»,которая будет содержать дерево групп, а в таблице атрибуты код и наименование.
![](image/image074.gif)
Чтобы можно было установить вручную нужную ширину колонок многострочной части, следует сначала отключить режим автоматического определения ширины колонок (в 7.7 этот режим по умолчанию отключен). Автоматическое определение ширины колонок отключается в палитре свойств многострочной части документа, для этого нужно дважды щелкнуть мышью в многострочную часть. В палитре свойств следует щелкнуть мышью флажок «Автоматическая настройка ширины колонок» и нажать кнопку «ОК», чтобы подтвердить произведенные изменения. После этого можно перетаскиванием вертикальных границ колонок табличной части установить для них желаемую Ширину. Для перетаскивания границ колонок необходимо поместить указатель Мыши над линией, разделяющей колонки в табличной части, чтобы курсор мыши принял соответствующую форму, затем нажать правую кнопу мыши и, не опуская ее, перетащить разделитель колонок в новое место.
70_______________________ 1С:Предприятие. Практика программирования на платформе V7
Если все колонки не помещаются в видимой области табличной части, то, для «прокрутки» колонок по горизонтали, следует щелкать мышью в левую или правую стрелку горизонтальной полосы прокрутки у нижней границы табличной части.
Можно изменить порядок следования колонок, перетаскивая их в пределах табличной части. Для перетаскивания колонки её следует выделить, щелкнув мышью в ее заголовок, и переместить указатель мыши, при нажатой левой кнопке, в то место, где должна располагаться колонка, при этом выделенной, т.е. редактируемой, колонкой останется та же колонка по номеру позиции; например, была выделена 5-я колонка и перемещена в 3-ю позицию, но выделенной станет колонка в 5-ой позиции, то есть та, которая была 4-ой.
Упражнение 7. Создайте диалоговую Форму для элементов справочника «Оборудование».
Редактирование формы в основном выполняется мышью. Основным приемом работы является «перетаскивание». При перетаскивании щелкают левой кнопкой мыши в элемент, который нужно перетащить и, не отпуская левую кнопку, ведут указатель мыши к тому месту, куда перетаскивается элемент, а затем кнопка мыши отпускается. Все элементы диалога размещаются в пределах шаблона окна диалога. Также можно поместить элемент и вне шаблона, но тогда при работе с диалогом этот элемент будет невиден и недоступен. Сначала отодвинем вниз нижнюю границу диалога. Щелкните мышью в пустое серое пространство диалога (в любое место). При этом граница формы будет выделена пунктирной линией, на которой будут размещены маркеры. Эта линия показывает тот элемент диалога, над которым будут выполняться какие-либо действия. Для изменения вертикального размера диалога нужно перетащить мышью маркер на пунктирной линии обозначающей нижнюю границу диалога. При этом в нижней части диалога образуется пустое место. Теперь нужно перетащить ближе к нижней границе две кнопки: «ОК» и «Закрыть». Кнопки можно перетащить по одной, а можно выделить их обе и перетащить две одновременно. Для выделения кнопок щелкните мышью од-ну кнопку, затем нажмите клавишу Shift и, не отпуская ее, щелкните мышью другую кнопку. Вокруг каждой кнопки будет нарисована синяя пунктирная линия с маркерами. Перетащить такую группу элементов можно, перетаскивая любой элемент. Выделять элементы диалога можно также, просто «обводя» их мышью - границу выделяемой области будет показывать тонкая пунктирная линия. Но таким образом можно выделять только элементы, расположенные рядом. Выделенные элементы можно отформатировать по шаблону. Для выбора
VIl. Справочники______________________________________________________________ 71
шаблона, нажав клавишу Ctrl, щелкните левой кнопкой мыши нужный элемент формы диалога.
![](image/image075.gif)
В форме элемента желательно увидеть, к какой группе справочника принадлежит данный элемент. Причем, элемент может находиться на верхнем (первом) уровне справочника и не иметь родительской группы. Создадим в форме реквизит с соответствующим текстом. Выберем в меню «Вставить» или в панели инструментов инструмент «Текст» и наметим курсором место в форме, куда мы поместим реквизит формы. Для этого нужно поместить курсор в левый верхний угол предполагаемой области формы диалога, в которую предполагается их поместить, нажать левую кнопку мыши, не отпуская ее, переместить курсор к правому нижнему углу предполагаемой области размещения реквизита, и отпустить кнопку мыши. Так как текст в реквизите мы будем выводить с помощью выражения на встроенном языке в поле «Формула» на закладке «Дополнительные», то текст заголовка реквизита надо удалить.
![](image/image076.gif)
72_______________________ 1С:Предприятие. Практика программирования на платформе V7
Запишем выражение в поле «Формула» свойств текста, используя, оператор конкатенации строк:
![](image/image077.gif)
Метод ?(<Логич_выраж>,<Выраж1>,<Выраж2>) возвращает значение первого выражения, если условие истинно, иначе - значение второго выражения.
Метод Выбран( ) возвращает флаг выбора элемента справочника; 1 - если элемент справочника выбран, О - если не выбран.
Шрифт отредактирован на закладке «Шрифт» текстового реквизита.
![](image/image078.gif)
Создадим предопределенную процедуру ВводНового() в модуле формы элемента справочника, в которой будем вводить значение цены по группе справочника в реквизит элемента «Цена» по умолчанию. Форму элемента справочника мы открываем для просмотра и редактирования существующих записей справочника, а также для создания новых записей в справочнике.
Метод Уровень() возвращает номер уровня записанного в базу данных текущего элемента справочника.
В последнем случае во время работы в форме элемент ещё не записан, поэтому метод Уровень() вернет значение 0. Поэтому для определения принадлежности элемента группе справочника используем знакомый нам метод Выбран() для атрибута Родитель.
VII. Справочники_____________________________________________________________ 73_
Процедура ВводНового()
Если Родитель.Выбран()=1 Тогда
Цена=Родитель.ГрЦена; КонецЕсли;
КонецПроцедуры
Предопределенная процедура при интерактивном вводе нового элемента справочника
ВводНового(<ПризнКопирования>,<ОбъектКопирования>).
Параметры:<ПризнКопирования> - признак того, что объект введен копированием. Число: 1 - объект
введен копированием, 0 - просто новый объект. Данный признак может быть использован для анализа
необходимости инициализации реквизитов нового объекта.<ОбъектКопирования> - объект, который
был скопирован.
При копировании записей справочника копируются все реквизиты, кроме кода записи справочника. Отредактируем принудительно атрибут элемента «Наименование», используя параметры предопределенной процедуры ВводНового() и метод ВвестиСтроку().
Метод ВвестиСтроку(<Строка>,<Подсказка>,<ДлинаСтроки>,<Признак>,<Таймаут>) Вызывает окно
интерактивного диалога для ввода строки. Возвращает:
1 - если в диалоге нажата кнопка ОК;
О - если нажата кнопка Отмена;
-1 - если закончилось время ожидания ответа.
Параметры: <Строка> - имя переменной, объявленной в модуле для приема вводимого значения;
<Подсказка> - текст заголовка окна диалога ввода; <ДлинаСтроки> - длина вводимой строки;
<Признак> - если 0 или опущен - ввод одной строки, если 1 - ввод многострочного текста с
разделителями строк; <Таймаут> - число секунд времени ожидания ответа (если опущен или 0, то без
ограничения).
Процедура ВводНового(признак,копируемый)
Если признак=1 Тогда
ВвестиСтроку(Наименование,”Введите наименование”,25);
КонецЕсли;
Если Родитель.Выбран()=1 Тогда Цена=Родитель.ГрЦена;
КонецЕсли; КонецПроцедуры
Запишем аналогичный алгоритм в форме списка справочника. В этом контексте свой список предопределенных процедур. Для ввода цены по Умолчанию используем предопределенную процедуру ПриРедактированииНовойСтроки(). Проверить операцию копирования в форме списка мы не можем.
Процедура ПриРедактированииНовойСтроки () Если Родитель.Выбран()=1 Тогда
Цена=Родитель.ГрЦена; КонецЕсли;
КонецПроцедуры
74_______________________ 1С:Предприятив. Практика программирования на платформе V7
Упражнение 8. Создайте справочник «Единицы». В окне редактирования справочника «Единицы» установите подчинение (в поле ввода «Подчинен») справочнику «Оборудование» и создайте реквизит «Коэффициент», в который будут записываться значения коэффициентов пересчета соответствующие единицам измерений. В форме элемента и в форме списка справочника в текстовом реквизите формы покажите владельца элемента справочника.
Для вставки в табличную часть формы списка текстового реквизита щелкнем мышью кнопку с синей буквой «Т» в панели элементов диалога или соответствующую строку в меню «Вставить», установим его на табличную часть, курсор мыши при этом примет специальный вид, и ещё раз щелкнем левой кнопкой мыши. Появится дополнительная колонка без названия в самой правой позиции табличной части формы, чтобы её увидеть, как правило, надо прокрутить табличную часть стрелкой вправо. Для ввода формулы нужно активизировать свойства колонки. Сначала щелчком мыши в табличную часть мы должны активизировать табличную часть, а затем двойным щелчком в заголовок колонки активизировать свойства этой колонки. При этом появляется палитра свойств колонки. Зададим колонке название в поле «Заголовок», а в поле «Формула» напишем — Владелец.
Атрибуты операции и проводки
Бухгалтерская операция имеет аналогию с документом, это просто другое представление документа.
Атрибуты операции — это реквизиты шапки, они, как правило, и берутся из Шапки бухгалтерского документа:
ДатаОперации (Дата, обычно это дата документа), Содержание (обычно произвольная строка),
154______________________ 1С:Предприятие. Практика программирования на платформе V7
СуммаОперации (Число, обычно это итог по сумме — Итог(«Сумма»)),
Документ (ссылка на документ, создавший операцию). Атрибуты проводки — это реквизиты многострочной части.
Количество (Число),
Валюта (элемент справочника, определенный в свойствах планов счетов для валютного учета),
ВалСумма (Число),
Сумма (Число, для валютных счетов — это рублевое покрытие).
Параметры синтетического и аналитического учета задаются в проводке по дебету и кредиту:
Атрибуты Дебета и Кредита:
• Счет,
Субконто (виды и количество субконто определяются выбранным счетом).
![](image/image153.gif)
Упражнение 28 В документе Приход создайте реквизит шапки ТипУчета типа перечисление ТипыУчета. Предусмотрите ввод его значения по умолчанию -текущее значение константы ТекТипУчета, при создании нового документа в информационной базе.
Х Основы построения «Бухгалтерского учёта» в системе 1С:Предприятие_________ 155
В зависимости от значения этого реквизита мы будем выполнять движения по документу. У этого перечисления три значения: Красное, Белое и Черное. Определим условия проведения документа.
![](image/image154.gif)
В результате если значение перечисления Красное — документ будет проведен и по оперативному, и по бухгалтерскому учету.
Описание алгоритма Операции в модуле документа.
После того, как мы сконфигурировали объекты бухгалтерского учета можно создать в модуле приходного документа операцию с проводками.
Проводки по документу создаются через атрибут «Операция».
Упражнение 29. Создадим алгоритм формирования операции по документу «Приход» с учетом формирования партии приходным документом и условия списания по бухгалтерскому или оперативному учету.
В окне редактирования документа установим флаг «Бухгалтерский учет», а в модуле документа отредактируем предопределенную процедуру ОбработкаПроведения(). Операцию также можно создать с помощью конструктора формирования операций, но процедуру ОбработкаПроведения() надо будет потом отредактировать.
156______________________ 1С:Лрвдприятие. Практика программирования на платформе V7
В конструкторе заполним атрибуты операции и проводки. Определяемый атрибут проводки выделяем в нижней таблице. Формулу, вычисляющую его значения, определяем по значению или берем из данных документа.
![](image/image155.gif)
После редактирования модуль документа должен выглядеть примерно так:
// ********************
Процедура ОбработкаПроведения()
ВыбратьСтроки();
Пока ПолучитьСтроку() =1 Цикл
// Запись истории периодического реквизита справочника
Если НовЦенаоОборудование. Цена. Получить (ТекудийДокумент () ) Тогда
ПривязыватьСтроку(НомерСтроки);
УстановитьРеквизитСправочника(Оборудование,"Цена",НовЦена);
КонецЕсли;
Если ТипУчетаоПеречисление.ТипыУчета.Бел Тогда
//}}ДВИЖЕНИЯ_РЕГИСТРОВ
Регистр.Амортизация.Оборудование = Оборудование; Регистр.Амортизация.Партия = ТекущийДокумент(); Регистр.Амортизация.Количество = Количество* Единица.Коэффициент;
Регистр.Амортизация.Стоимость = Сумма;
Х Основы построения «Бухгалтерского учёта» в системе 1С:Предприятие_________ 157
Регистр.Амортизация.ПривязыватьСтроку(НомерСтроки);
Регистр.Амортизация.ДвижениеПриходВыполнить();
//}}ДВИЖЕНИЯ_РЕГИСТРОВ
КонецЕсли;
Если ТипУчетаоПеречисление.ТипыУчета.Чер Тогда
//{{Ф0РМИР0ВАНИЕ_ОПЕРАЦИИ
Операция.НоваяПроводка();
Операция.Дебет.Счет =СчетПоКоду("ОБ.ПР",ПланыСчетов.Учебный);
Операция.Дебет.Оборудование = Оборудование;
Операция.Дебет.Партия = ТекущийДокумент();
Операция.Кредит.Счет=СчетПоКоду("ОБ.СП",ПланыСчетов.Учебный); Операция.Кредит.Оборудование = Оборудование;
Операция.Количество = Количество*Единица.Коэффициент;
Операция.Сумма = Сумма;
Операция.ТипУчета = ТипУчета;
КонецЕсли;
КонецЦикла;
Если ТипУчетаоПеречисление.ТипыУчета.Чер Тогда
Операция.Содержание = "Приход оборудования";
Операция.СуммаОперации = Итог("Сумма");
Операция.Записать();
//}}ФОРМИРОВАНИЕ_ОПЕРАЦИИ
КонецЕсли;
КонецПроцедуры
Обратите внимание, что, в отличие от движений регистров, для которых записывается каждое движение по строке документа, проводки по документу записываются в информационную базу все сразу при записи операции. Если возникает необходимость записать сформированные проводки, например, Чтобы посмотреть бухгалтерские итоги, используется метод Операция.ЗаписатьПроводки(). Метод может использоваться только для атрибута "Операция" документа в момент проведения (в процедуре ОбработкаПроведения). При этом происходит обновление бухгалтерских итогов. Это позволяет при проведении документа обращаться к бухгалтерским итогам, уже измененным проводками, записанными этим документом. После
158 ____________________ 1С:Предприятие. Практика программирования на платформе V7
выполнения метода ЗаписатьПроводки() и до окончания процедуру ОбработкаПроведение уже невозможно изменять или удалять проводки добавленные до вызова этого метода. Данный метод имеет смысл использовать, только в том случае, если существует необходимость обращения к итогам, измененным проводками записываемой операции. При записи сложной проводки, если у главной корреспонденции сложной проводки не указана сумма (равна 0), то она автоматически вычисляется на основании подчиненных корреспонденции.
При добавлении нового субконто или валютного учета («+») по счёту в плане счетов, в модулях документов, по которым проводки формируются интерактивно, необходимо прописать движения по созданным атрибутам счёта: <тип субконто> или <ВалСумма>.
Операция. ВалСумма=...;
Бухгалтерские итоги
Бухгалтерские Итоги (далее БИ) - это служебный объект позволяющий читать и отбирать информацию из объектов метаданных бухгалтерского учета. Он имеет два режима: режим итогов и режим бухгалтерского запроса.
Бухгалтерские счета
Все хозяйственные операции находят свое отражение на счетах бухгалтерского учета. Если зафиксировать показатели учета на определенную дату, они будут представлены в виде остатков (сальдо) по счетам. При рассмотрении показателей во времени, принято оперировать понятием отчетного периода, в котором можно выделить начальные остатки, обороты и конечные остатки по счетам.
Другими словами бухгалтерский счет - это "регистр", на котором ведется учет некоторого разреза хозяйственной деятельности предприятия. Отличие от регистров оперативного учета в том, что балансовые счета — это взаимосвязанные разрезы учета. Взаимосвязь счетов обусловлена корреспонденциями — то есть двойными записями.
Сальдо и обороты по счетам бухгалтерского учета (самолетики)
Оборот - приход или расход объекта учета на счете за определенный период времени.
Сальдо — остаток объекта учета на счете на дату сальдирования (расчета остатка).
Балансовые счета можно разделить на активные, пассивные и активно-пассивные. Активные счета имеют дебетовое сальдо (остаток), пассивные кредитовое сальдо (остаток). Красным «неправильным» сальдо называют ненулевое конечное кредитовое сальдо на активном счете или конечное дебетовое сальдо на пассивном счете в конце балансового периода. Активно-пассивные счета позволяют в одном разрезе учета вести и активные, и пассивные статьи баланса.
![](image/image145.gif)
СНД — сальдо начальное дебетовое, СКД — сальдо конечное дебетовое, ДО — дебетовый оборот, КО — кредитовый оборот, СНК — сальдо конечное кредитовое, СКК — сальдо конечное кредитовое.
X. Основы построения «Бухгалтерского учёта» в системе 1С:Предприятие________ 149
Движения документа Создание записей периодического реквизита Справочника по документу
Документы в системе «1С:Предприятие» являются инструментом для записи движений в учетные базы данных, в которых ведутся записи по различным разрезам учета. Эти записи вводятся только программно в модуле документа в предопределенной процедуре ОбработкаПроведения().
Простейшим примером такой базы является совокупность записей периодических реквизитов справочников, создаваемая документами.
Для записи движений при создании документа необходимо в окне редактирования установить флажок «Разрешить проведение документа» и определить типы учетных баз, в которых данный документ будет создавать записи: Оперативный учет, Бухгалтерский учет или Расчет.
Модуль документа открывается из окна редактирования документа (не формы Документа) или через контекстное меню документа в дереве метаданных. Следует обратить внимание, что контекст модуля документа не связан с контекстом формы документа, поэтому в контексте модуля документа Доступны только атрибуты (реквизиты) документа.
Если в окне редактирования документа установлен флажок «Автоматическое
112______________________ 1С:Предприятие. Практика программирования на платформе V7
удаление движений», то при удалении или пометке к удалению документа движения созданные в учетных базах по данному документу удаляются.
Упражнение 20. Создадим в модуле документа алгоритм формирования записей истории периодического реквизита справочника «Оборудование» «Цена».
Новую цену оборудования мы задаем в приходном документе, определяя значение реквизита «ЦенаНов», поэтому создадим в модуле документа записи истории периодического реквизита справочника оборудование по каждой строке документа. Чтобы не записи в истории периодического реквизита справочника не дублировались, нужно проверить была ли изменена цена в документе.
Метод
УстановитьРеквизитСправочника(ОлементСправочника>,<НазваниеРеквизита>,<Значение>,
<ДатаУстановки>,<ИмяТипа>,<Длина>,<Точность>) позволяет записать значение периодического
реквизита справочника с привязкой к проведению документа.
<ЭлементСправочника> - элемент справочника, в который будет запись;
<НазваниеРеквизита> - название периодического реквизита справочника;
<3начение> - новое значение периодического реквизита;
<ДатаУстановки> - дата установки нового значения периодического реквизита. Дата установки имеет
смысл только для не оперативных документов.
<ИмяТипа> - необязательный параметр. Строковое выражение - название типа данных (или Вид
субконто);
<Длина> - необязательный параметр. Число - длина числового или строкового значения;
<Точность> - необязательный параметр. Число знаков после десятичной точки.
Параметры <ИмяТипа>, <Длина> и <Точность> следует указывать при установке значения
периодического реквизита справочника, имеющего неопределенный тип. Метод доступен только в
Модуле документа в предопределенной процедуре ОбработкаПроведения.
Метод ПривязыватьСтроку(<НомерСтроки>) позволяет записывать номер строки документа в
движениях документа. <НомерСтроки> - номер строки Документа.
Метод устанавливает номер строки для всех последующих движений регистров, при записи значений
периодических реквизитов справочников с привязкой к документу, а также при записи бухгалтерских
проводок. Метод доступен только в Модуле документа в предопределенной процедуре
ОбработкаПроведения.
Процедура ОбработкаПроведения()
ВыбратьСтроки();
Пока ПолучитьСтроку() =1 Цикл
Если НовЦенаоОборудование.Цена.Получить(ТекущийДокумент()) Тогда
ПривязыватьСтроку(НомерСтроки);
УстановитьРеквизитСправочника (Оборудование , "Цена" , НовЦена) ;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Глобальный контекст
Глобальный контекст доступен из модуля любого объекта и позволяет оптимизировать алгоритмическую структуру и уменьшить объём конфигурации. В состав Глобального контекста входят:
Глобальный модуль
\/ Формат исходных текстов программных модулей._____________________________ 41
Общие таблицы
Библиотека картинок Константы Перечисления Группы расчетов
Предположим, что счет-фактура у нас распечатывается из различных документов, тогда можно создать один шаблон печатной формы счета-фактуры в Общих таблицах и одну процедуру печати счет-фактуры в Глобальном модуле.
Глобальный модуль
![](image/image046.gif)
Глобальный модуль имеет такую же структуру, как и любой другой модуль. В нём помещаются процедуры и функции, которые необходимо выполнять при запуске системы «1С:Предприятие», а также глобальные переменные, процедуры и функции, к которым можно обращаться из модуля любого объекта. Для этого при их описании указывается ключевое слово Экспорт.
Передача контекста объекта
Контекст - это элемент данных, на котором в данный момент интерактивно или программно спозиционирован объект. По значению контекста доступна вся совокупность значений атрибутов объекта. Для передачи контекста объекта в Глобальный контекст служит ключевое слово Контекст, которое используется в качестве фактического параметра при вызове процедур и
42_______________________ 1С:Предприятие. Практика программирования на платформе V7
функций Глобального модуля, в описании которых есть ключевое слово Экспорт.
![]() |
![]() |
Различают контекст объекта и контекст интерактивной формы объекта. Контекст формы можно передавать через параметр КонтФормы в формы других объектов, открываемые методами ОткрытьФорму() и ОткрытьПодбор(), а также через параметр предопределенной процедуры ОбработкаПодбора(). Этот параметр позволяет управлять реквизитами первой формы, из которой была открыта вторая форма, в контексте второй формы.
IIIСтруктура системы :Предприятие
![]() |
Система «1С:Предприятие» является совокупностью двух тесно связанных частей: технологической платформы и конфигурации. |
![]() |
Система «1С:Предприятие» предназначена для решения задач по автоматизации учёта товарных и материальных средств, взаиморасчётов с контрагентами, расчёта заработной платы, расчёта амортизационных средств, бухгалтерского учёта по любым разделам и других необходимых предприятию разрезов учёта. Она представляет собой систему управления различными объектамив предметной области и позволяющих записывать, корректировать и получать информацию в заданном виде и формате. Существует четыре режима запуска системы: собственно Предприятие, где вводятся конкретные значения элементов данных, т.е. производится заполнение базы данных, Конфигуратор, описывающий структуру системы и алгоритмы обработки данных, Отладчик - для отладки алгоритмов в пошаговом режиме и хронометрирования времени выполнения операторов программы, и Монитор - для контроля над деятельностью пользователей в системе.
Технологическая платформа разрабатывается фирмой «1С». Конфигурация, в отличие от технологической платформы, может произвольно изменяться конечным пользователем. В конфигураторе системы настраиваются конкретный набор объектов и особенности учёта. К ним относятся основные свойства плана счетов, виды аналитического учёта, состав и структура используемых справочников, документов, отчётов, система хранения
/// Структура системы 1С:Предприятие________________________________________ 19
оперативных итогов и т.д. На уровне системы «1С:Предприятие» определены сами понятия и стандартные операции по их обработке. Средства конфигурирования позволяют описать конкретные структуры информации (объекты) и алгоритмы (процедуры и функции), описывающие специфику их обработки, для отражения различных особенностей учёта.
Конфигуратор позволяет записать в конфигурацию информацию об авторе конфигурации и его логотип, и, если необходимо, защитить эту информацию паролем от несанкционированного изменения. Просмотр информации об авторе конфигурации выполняется при помощи пункта «О программе» из меню «Помощь» главного меню системы 1С:Предприятие - как в режиме запуска «1С:Предприятие», так и в режиме Конфигуратора. Кроме этого, Конфигуратор позволяет также заменить центральную часть заставки системы в режиме запуска «1С:Предприятие».
IIОсновные понятия системы
Ключевым понятием системы 1С: Предприятие является объект.
Представьте себе, что мы хотим описать машину, состоящую из множества узлов, в процессе работы. В алгоритмических системах свойства машины мы можем представить в виде элементов данных, описываемых простыми типами данных: число, дата и строка, изменяя которые можно управлять машиной в целом или отдельными её узлами.
В нашей системе, для описания машины, мы можем создать структуру, состоящую из отдельных взаимосвязанных узлов и агрегатов машины, а так же их свойств. Элементами системы будут как сама машина, так и её составные части, и их свойства. В отдельные объекты выделяются группы элементов данных с одинаковыми параметрами и предназначением. При описании автомобиля можно выделить следующие объекты: автомобиль в целом, система подачи топлива, карбюратор, жиклеры, другие агрегаты системы подачи топлива с детализацией, ходовая часть и её узлы с детализацией, другие части машины с детализацией. К этим объектам можно обращаться, как к элементам данных, а не только к их свойствам, описываемым простыми типами данных. Для объекта необходимо определить соответствующие методы, которые характерные только для него. В самом деле, очевидно, что методы управления карбюратором не будут работать для передней подвески или рулевой колонки. Такая система позволяет создавать новые типы данных с характерными для них методами обработки и управления, что, в свою очередь, позволяет абстрагироваться от элементарных свойств описываемого предмета, и создавать более глубокие и разветвленные связи в реляционной структуре данных.
Таким образом, объект - это инкапсуляция данных и алгоритмов их обработки (от английского encapsulation - пакетирование). Другими словами - это формальное описание совокупности понятий, характеризующих элементы данных с одинаковыми свойствами (синий и красный — это различные значения одного и того же свойства - «цвет») и предназначением, в котором объединяются как свойства этих данных, так и методы обработки, характерные для типа данных. В контексте баз данных объект — совокупность данных с
14_______________________ 1C:Предприятие. Практика программирования на платформе V7
одинаковыми свойствами и предназначением, имеющих общие структуры хранения и интерактивного представления, и методами их обработки.
![](image/image008.gif)
Объектная архитектура - это архитектура, в которой процессы, структуры данных (файлы), операции ввода/вывода информации и любые другие составные части архитектуры представляются как объекты.
В системе "1С:Предприятие" нельзя создать любой объект с заданными свойствами. Эта система изначально содержит в себе типовые наборы свойств и методов объектов, и можно создавать в системе объекты, используя эти наборы, называемые видами метаданных их можно представить в виде некоторых шаблонов объектов, создаваемых в "1С:Предприятии".
![](image/image009.gif)
Это те "кирпичики" и "шестеренки" из которых создаются объекты системы. Таким образом мы будем создавать не любые объекты, а объекты метаданных.
Благодаря такой структуре существенно уменьшается время разработки БД. Экономится время на описание объектов: в "1С:Предприятии" связанный объект с двумя - тремя десятками реквизитов (связей) можно "накидать" за 5-7 минут. Основное время разработки при этом уделяется описанию
//, Основные понятия системы________________________________________________ 15
алгоритмов управления данными и их обработки средствами системы. Используя реляционную структуру полученной базы, можно создавать всевозможные выборки для генерации отчетов.
Другими словами, метаданные - это "информация о данных", представляющая виды данных, характерные для системы "1С:Предприятие".
![](image/image010.gif)
Объекты метаданных определяются видами метаданных, которые мы видим в корне дерева метаданных: это константы, перечисления, отчеты, обработки, справочники, документы и пр.. Свойства вида метаданных определены в самой системе " 1С:Предприятие" и распространяются на любой объект метаданных данного вида. Для объектов метаданных вида Перечисление, Справочник, Документ, Регистр, ЖурналРасчетов, Календарь и Счет идентификатор вида объекта метаданных возвращается методом Вид().
Объект метаданных - это объект определенного в конфигурации вида метаданных.
Таким образом:
• Объекты метаданных, создаваемые при конфигурировании, подразделяются
по видам.
• Свойства вида метаданных определены в самой системе «1С:Предприятие»
и распространяются на любой объект метаданных данного вида.
• Мы можем создать объект только определенного на платформе вида
метаданных.
•Объектом в системе "1С:Предприятие" является как сама конфигурация, так и любой объект метаданных, являющийся элементом конфигурации.
16_______________________ 1С:Предприятие. Практика программирования на платформе V7
Объект метаданных, имеющий в своем составе подчиненные объекты, называется агрегатным объектом, например объекты типа Справочники или Документы. Доступ к подчиненным объектам осуществляется через атрибуты агрегатного объекта.
![](image/image011.gif)
Примерами объектов метаданных являются конкретные объекты определенного вида метаданных, создаваемые пользователем в процессе конфигурирования:
Справочник.Номенклатура, Документ.РасходнаяНакладная, а также атрибуты и реквизиты агрегатных объектов метаданных: например цена в справочнике Номенклатура или в документе расхода товаров.
Таким образом, при создании нового объекта метаданных основные его свойства: ключевые поля, методы и др., задаются системой в соответствии со свойствами выбранного вида метаданных. Система "1С:Предприятие", однако, позволяет присоединять объекты, созданные в других средах разработки, с помощью директивы ЗагрузшпьВнешнююКомпоненту("<Имя файла>").
Индексация БД
Для облегчения поиска элемента данных по БД создаются таблицы индексов, в которых содержатся первичные ключи — значения ключевых полей БД, и описание очередности записей. Таблица БД остается неупорядоченной. Таблица индексов, как правило, гораздо меньше таблицы БД, поэтому поиск и сортировка записей таблицы индексов происходит гораздо быстрее, чем поиск и сортировка по таблице БД.
Наряду с первичным индексом таблица индексов может содержать индексы по другим полям таблицы БД, что позволяет упорядочить БД по значению индексированного поля. Записи индексных таблиц можно сортировать.
![](image/image004.gif)
Использование периодических реквизитов справочников
Использование периодических реквизитов существенно облегчает реализацию многих прикладных моментов конфигурации, однако, использование периодических реквизитов требует при конфигурировании особого внимания. Во-первых, не следует злоупотреблять этим свойством. Установка свойства «периодический» для каждого реквизита должна быть обоснованным и хорошо продуманным шагом, иначе это просто усложнит работу пользователей со справочниками, но не даст большого выигрыша. Во-вторых, при конфигурировании следует всегда помнить, что для использования значения периодического реквизита справочника необходимо обязательно указывать дату, на которую потребуется выбрать или
78 ___________________ 1С:Предприятие. Практика программирования на платформе V7
записать значение. Установка даты использования периодических реквизитов
задается либо методом ИспользоватьДату ( [Дата] ) , либо методами
Получить([Дату])и Установить ([Дата] , [Значение]) (через точку
после самого реквизита). Одновременно использовать оба эти способа задания
даты для одного и того же объекта типа Справочник нельзя. Если метод
ИспользоватьДату! [Дата] ) не вызывался, то к периодическому реквизиту
справочника следует обращаться с помощью методов Получить ( [Дату] ) и
Установить ( [Дата] , [Значение] ). Если метод
ИспользоватьДату ( [Дата] ) был вызван, то можно обращаться только непосредственно к значениям реквизитов.
На платформе 7.7 можно не указывать значение даты для метода Получить(), по умолчанию устанавливаются следующие значения: значение точки актуальности - если используется компонента "Оперативный учет", или Рабочая дата - если компонента "Оперативный учет"не используется.
Вызов метода ИспользоватьДату([Дата]) должен располагаться обязательно до позиционирования объекта на определенный элемент.
Примером, целесообразного использования метода ИспользоватьДату ( [Дата] ) может являться печать справочника с большим количеством периодических реквизитов. В этом случае, один раз вызвав в самом начале этот метод, Вы сможете получать значения всех реквизитов непосредственно, без вызова метода Получить ( [Дату] ).
Форма элемента справочника открывается с определенной датой. Если элемент открывается из списка справочника, то дата берется из списка. Если список в свою очередь открыт для выбора реквизита документа, то его дата будет совпадать с датой документа. Даты в формах списка и элемента справочника выводятся в заголовке окна и используются только для вывода и записи периодических реквизитов. По умолчанию это Рабочая дата, но её можно изменить из встроенного языка в модуле формы списка или элемента (группы). При записи элемента редактируемого в форме, если существуют периодические реквизиты, то выдается специальный запрос, в котором пользователь отмечает какие значения периодических реквизитов нужно установить на дату формы, вызов и вид запроса можно откорректировать методом модуля формы элемента справочника СохранениеПериодическихРеквизитов().
При интерактивном редактировании формы элемента (группы) или формы списка справочника периодические реквизиты могут записываться или не записываться на дату формы, но не могут быть записаны на другую дату.
По умолчанию изменения реквизитов выставляются на основании сравнения значений со значениями, записанными на ближайшую предыдущую дату. Данный запрос выдается только для реквизитов, непосредственно
VII. Справочники______________________________________________________________ 79
включаемых в форму. Если некоторый периодически реквизит непосредственно в форму не включен, а изменяется из встроенного языка, то он не будет выдаваться в этом запросе и сохраняться. Для того, чтобы в реквизит участвовал в запросе о записи периодических реквизитов можно вставить его в форму, установив ему признак «Сделать невидимым». Периодические реквизиты содержат значения только начиная с даты первой записи истории значений реквизита, однако и в историю реквизита можно записать «пустое значение» на какую-либо дату. Например, если самая первая запись периодического реквизита «Цена» отмечена датой '02.12.94' со значением 48.00, а мы в программном модуле запросили значение этого реквизита на '30.11.94', то система вам вернет «пустое значение», т.е. ноль; если «пустое значение» установлено на дату '04.12.94', а следующее не пустое значение на '14.12.94', то с 04 по 13.12.94 система также вернет вам «пустое значение».
Пример записи значения периодического реквизита справочника:
Словарь = СоздатьОбъект(«Справочник.Оборудование»);
Если Словарь.НайтиЭлемент(Элемент) = 1 Тогда
Периодич = СоздатьОбъект(«Периодический»);
Периодич.ИспользоватьОбъект(«Цена», Словарь.ТекущийЭлемент());
Периодич.Значение= 2 5;
Периодич.ДатаЗнач = '17.05.00';
Периодич.Записать();
КонецЕсли;
Здесь «Элемент» - переменная или реквизит объекта с типом значения Справочник. Оборудование.
Использование подчиненных справочников
При создании конкретных конфигураций довольно часто возникают задачи, когда надо реализовать для каждого конкретного элемента справочника -список относящихся к нему объектов (отношение один-ко-многим). В нашем примере имеется справочник оборудования, и каждый элемент справочника может иметь произвольный список единиц измерения данного оборудования. Для того чтобы ввести новый или отредактировать существующий элемент справочника «Единицы», сначала откройте форму списка справочника владельца «Оборудование», выберите в нем курсором нужный элемент. Затем откройте форму списка подчиненного справочника «Единицы», он будет отображать список единиц измерения данного оборудования. Теперь можно добавлять, редактировать или удалять записи в справочнике «Единицы». Выбор элементов подчиненного справочника, в форме, при условии, что в форме существует элемент диалога, в котором выбран элемент справочника владельца, для которого производится выбор, реализуется в конфигурации при помощи указания в палитре свойств реквизита формы, предназначенного для выбора элемента подчиненного справочника, параметра «Связан с». В нем вводится имя идентификатора реквизита формы, который содержит элемент родительского справочника. В этом случае при выборе элемента подчиненного справочника автоматически будет производиться выбор из элементов, подчиненных выбранному элементу справочника-родителя. Другим способом установки элемента справочника владельца, по значению которого должен выполняться выбор подчиненного справочника является вызов метода ИспользоватьВладельца(<?>) для объекта подчиненного
VII. Справочники_____________________________________________________________ 75
справочника. Это позволяет определить выбор подчиненного справочника даже в том случае, когда в форме нет элемента диалога имеющего тип справочника - владельца. Для выборки элементов подчиненного справочника по владельцу, после метода ИсполъзоватьВладельца(< ?>) надо вызвать метод ВыбратьЭлементы() и далее методы ПолучитьЭлемент() или НайтиЭлемент(< ?>), НайтиПоКоду(< ?>), НайтиПоНаименованию(< ?>).
Упражнение 9. (Необязательное) Создайте в форме элемента и форме списка справочника «Оборудование» алгоритм, позволяющий при создании нового элемента программно создавать подчиненный элемент в справочнике «Единицы» с Наименованием «шт.» и Коэффициентом равным 1.
Опишем для этого предопределенные процедуры ПриЗакрытии() в модуле формы и в модуле формы списка справочника «Оборудование», потому что последовательность директив в кнопке «ОК» в форме следующая: #3аписать? Закрыть.
Метод ТекущийЭлемент() возвращает значение записанного в базу данных позиционированного текущего элемента справочника.
В модуле формы:
Перем ФлагНового;
Процедура ВводНового(признак,копируемый)
Если признак=1 Тогда
ВвестиСтроку(Наименование,"Введите наименование",25);
КонецЕсли;
Если Родитель.Выбран()=1 Тогда
Цена=Родитель.ГрЦена;
КонецЕсли;
ФлагНового-1;
КонецПроцедуры
Процедура ПриЗакрытии()
Если ФлагНового=1 Тогда
Ед=Создать0бъект("Справочник.Единицы");
Ед.ИспользоватьВладельца(ТекущийЭлемент());
Ед.Новый();
Ед.Наименование="шт.";
Ед.Коэффициент=1;
Ед.Записать();
КонецЕсли;
76 ______________________ 1C:Предприятие. Практика программирования на платформе V7
КонецПроцедуры ФлагНового=0;
В модуле формы списка мы можем создать несколько элементов, поэтому создадим список значений новых значений.
Метод РазмерСписка( ) возвращает число элементов в списке значений.
Метод ПолучитьЗначение(<Позиция>,<Строка>) позволяет получить значение из указанной
позиции списка. Возвращает значение из списка.
<Позиция> - номер позиции в списке, из которой возвращается значение (изменяется от 1 до
РазмерСписка); <Строка> - идентификатор переменной, в которой возвращается символьное
представление получаемого значения.
Метод НаЙтиПоКоду(<Код>,<ФлагПоиска>) позволяет найти элемент справочника по коду.
Возвращает: 1 - если действие выполнено;
О - если действие не выполнено (элемент не найден).
<Код> - выражение со значением искомого кода,
<флагПоиска> - флаг поиска (необязателен):
0 - поиск во всем справочнике вне зависимости от родителя;
1 - поиск внутри установленного подчинения (родителя);
2 - поиск по полному коду через разделитель.
Значение по умолчанию:
О - если код уникален во всем справочнике; 2 - если код уникален только'в группе. Его можно использовать только для объектов, созданных функцией СоздатьОбъект.
Перем СписокНовых;
Процедура ПриРедактированииНовойСтроки ()
Если Родитель.Выбран()=1 Тогда
Цена=Родитель.ГрЦена;
КонецЕсли;
СписокНовых.ДобавитьЗначение(Код,Наименование);
КонецПроцедуры
Процедура ПриЗакрытии()
Перем Стр;
Если СписокНовых.РазмерСписка()>0 Тогда
Новый=СоздатьОбъект("Справочник.Оборудование");
Для i=1 по СписокНовых.РазмерСписка() Цикл
Если Новый.НайтиПоКоду (СписокНовых.ПолучитьЗначение (i, Стр),0) =1 Тогда
Ед=СоздатьОбъект("Справочник.Единицы"); Ед.ИспользоватьВладельца(Новый.ТекущийЭлемент());
Ед.Новый();
Ед.Наименование="шт.";
Ед.Коэффициент = 1;
Ед.Записать();
КонецЕсли;
VII. Справочники_____________________________________________________________ 77
КонецЦикла;//
КонецЕсли;
КонецПроцедуры СписокНовых=Создать0бъект("СписокЗначений");
На приведенном ниже рисунке показано, как выглядят формы списков обоих справочников и форма элемента справочника «Единицы». В форме списка справочника «Единицы» отключен режим иерархии, но благодаря текстовому реквизиту «Владелец» можно различить единицы измерения с одинаковыми наименованиями и кодами , принадлежащие разным владельцам, в форме списка.
![](image/image079.gif)
IX Основы построения «Оперативного учёта» в системе :Предприятие
![](image/image121.gif)
Регистры, используемые компонентой Оперативный учёт, предназначены для накопления и хранения информации о наличии и движении различных объектов учёта. Регистры оперируют понятиями «Измерение», «Ресурс», «Реквизит» и «Точка актуальности». Движения регистров записываются в «модуле документа» в предопределённой процедуре ОбработкаПроведения(). При записи движений регистров происходит накопление численных значений Ресурсов и записи значений Реквизитов в узлах некоторой многомерной таблицы, параметрическими координатами которой являются значения Измерений, причем соблюдается порядок вложенности Измерений.
В системе предусмотрено два типа регистров: оборотные регистры и регистры остатков. Для оборотных регистров характерен параметр «Периодичность», который задает период, для выбора итогов методом ИспользоватьПериод(). Для регистров остатков характерны типы движений «Приход» и «Расход», и параметр «Период актуальности», задающий период, в течение которого хранятся или восстанавливаются, для временного объекта, созданного методом СоздатьОбъект(), движения регистра. «Период актуальности» регистров остатков задается и редактируется, в отличие от оборотных регистров, в режиме «Предприятие», меню «Операции», пункт «Управление оперативными итогами...».
Оборотные регистры предназначены для хранения и оперативной выборки информации об общем объеме (обороте) учитываемого параметра за определенный период. Можно сказать, что оборотные регистры хранят информацию о том, как накапливались остатки.
Регистры остатков предназначены для хранения и оперативной выборки информации об остатках учитываемого параметра на определенный момент времени.
124______________________ 1С:Предприятие. Практика программирования на платформе V7
На платформе V7.7 предусмотрена «Быстрая обработка движений», позволяющая ускорить операции чтения из регистров - запросы, временные расчеты итогов, обход движений регистров, однако установка этого признака замедляет запись движений данного регистра.
Точка актуальности, последовательность документов
Точка Актуальности (ТА) — это момент времени, определяемый позицией документа, на который системой по умолчанию выдаются значения остатков и итогов по регистрам, и периодические значения. Позиция документа формируется при его записи и представляет собой метку на оси времени. Если документ проводится после точки актуальности, и нет более поздних проведенных документов, то точка актуальности сдвигается на позицию этого документа. Система предполагает, что все документы оперативного учета вводятся последовательно, в хронологическом порядке.
![](image/image122.gif)
Нарушение последовательности документов происходит из-за неправильногс вода хозяйственных операций. Если последовательность записи все; документов соответствовала фактической последовательности хозяйственных операций, то ввод Документа5, отражающего реальную хоз. операцию, которая была совершена, но не записана своевременно, не нарушит стройности учета Если же были и другие нарушения записи хоз. операций, например: некоторый приход был введен после того, как часть товаров из него была уже продана, то в промежутке между Документом 5 и ТА может быть обнаружен расходный документ, в котором недостаточно товаров для списания.
Для корректировки последовательности надо перепровести документы за период от введенного с нарушением последовательности документа до ТА:
Меню "Операции" - "Проведение документов".
Точка актуальности, период итогов
На приведенном ниже рисунке показано, как формируются записи остатков или оборотов для регистров остатков или оборотных регистров соответственно. При переходе на следующий период фиксируется запись конечного остатка по периоду для регистра остатков или оборот за период
/X. Основы построения «Оперативного учёта» в системе 1С:Предприятие_________ 125
оборотного регистра. Имя таблицы (файла) остатков/оборотов имеет префикс RG***.dbf.
![](image/image123.gif)
В журнале документов ТА отображается красной галочкой с подчеркиванием.
После ТА записи в регистрах недоступны ни для чтения, ни для записи. При попытке рассчитать регистры или провести документ после проведенных документов, расположенных после ТА (они помечены сиреневой галочкой в журнале документов), система выдаст сообщение: «Существуют более ранние проведенные документы::...».
![](image/image124.gif)
126______________________ 1С:Предприятие. Практика программирования на платформе V7
Структура записей регистра
Записи накапливаемых значений ресурсов группируются по значениям измерений, причем существенен порядок измерений регистров, так как группировка значений ресурсов по второму измерению является вложенной в группировку по первому измерению. Другими словами, множество записей второго измерения является подмножеством множества записей первого измерения.
![](image/image125.gif)
В нашем примере в регистре «Амортизация» по каждому элементу справочника «Оборудование» накапливаются записи по приходным документам, а не наоборот, как в документе. В результате, мы можем получить из регистра, например, количество и стоимость элемента оборудования, или список партий для выбранного элемента справочника «Оборудование» с ненулевыми значениями количества или стоимости, или текущую
стоимость оборудования, оприходованного определенным документом (не путать с итоговой суммой по документу, так как в регистр мы сможем не только приходовать, но и списывать оборудование из регистра).
Создание регистра
При конфигурировании регистра измерения создаются как типизированные объекты, на закладке Дополнительные можно обозначить свойство отбора записей измерений по значению измерения. Для ресурсов определяются параметры числового значения: длина и точность, которые должны соответствовать параметрам реквизитов документов, записывающих в них значения приращений при записи движений.
При создании оборотного регистра обратите внимание на его периодичность. Изменить периодичность оборотного регистра, имеющего записи движений, нельзя.
![](image/image126.gif)
IX. Основы построения «Оперативного учёта» в системе 1С:Предприятие_________ 127
Упражнение 23. Создадим Регистр остатков «Амортизация» с измерениями «Оборудование» типа Справочник.Оборудование и «Партия» типа документ.Приход, ресурсами «Количество» и «Стоимость» и движение Приход по каждой строке документа «Приход».
![](image/image127.gif)
Элементы встроенного языка
Процедуры и функции
Действия, заданные в диалоге, оформляются в модуле как процедуры. Процедурой является некоторый отдельный алгоритм, имеющий имя - имя процедуры. Процедура оформляется строкой начала процедуры и строкой конца процедуры.
Процедура МояПроцедура()
<Тело процедуры> КонецПроцедуры
Между этими строками располагается тело процедуры - алгоритм, описывающий действия, которые процедура будет выполнять. В процедуре можно определить список передаваемых параметров, значения которым передаются при вызове процедуры и используются в теле процедуры. По умолчанию параметру процедуры всегда передается ссылка на значение. Для передачи самого значения используется ключевое слово Знач.
• Передача параметров по ссылке
Процедура Моя(а)
а = 12;
КонецПроцедуры Процедура А1(а)
а=10 ;
б = а ;
Моя(б); КонецПроцедуры
В конце процедуры А1 переменная «б» равна 12, потому что и переменная «б», и параметр процедуры Моя «а» идентифицируют один и тот же адрес.
\/ Формат исходных текстов программных модулей._____________________________ 33_
¦ Передача параметров по значению
Процедура Моя(а)
а=12;
КонецПроцедуры Процедура А1(а)
а=10 ;
б = а ;
Моя ( Знач б); КонецПроцедуры
В конце процедуры А1 переменная «б» равна 10 , потому что при вызове процедуры Моя() передавалась не ссылка, а значение.
Функция отличается тем, что возвращает значение, используя, оператор «Возврат».
Функция МояФункция()
··················
Возврат Авс; КонецФункции
Поэтому функции можно ставить в правой части операции присваивания и в поле «формула» элемент а диалоговой формы типа «Текст».
В языке также определено предварительное описание процедур и функций с помощью ключевого слова Далее
Процедура Моя(а) Далее Процедура al(a)
Моя(б) ;
КонецПроцедуры Процедура Моя(а)
а=12; КонецПроцедуры
Переменная — это строка идентификатора, определяющая область оперативной памяти, в которую записываются значения объекта.
Переменные могут определяться явно, с помощью ключевого слова Перем перед именем переменной, или неявно при присваивании им значения.
Область действия переменной определяется контекстом, в котором она создана. Это может быть локальный контекст процедуры или функции,
![](image/image038.gif)
Функция С1()
Перем а, б, в;
·················
Г=а; Возврат г;
КонецФункции
контекст модуля объекта или глобальный контекст.
Перем а,б,в;
Функция С1{)
·················
КонецФункции
Выражение — это текст на встроенном языке.
Оператор это логически завершенная последовательность выражений.
Операторы в тексте разделяются точкой с запятой. Отдельно стоящая точка с запятой воспринимается системой, как пустой оператор.
Для объединения частей выражения — операндов, используются операции. Операнды должны иметь тип, соответствующий операции (см. Таблицу). Порядок выполнения операций в выражении соответствует общепринятому, с учетом скобок и приоритетов операций.
Операция определенные во встроенном языке
![](image/image039.gif)
V Формат исходных текстов программных модулей._____________________________ 35
Компонентная структура :Предприятия
Система «1С:Предприятие» имеет компонентную структуру. Основные объекты: Текст, Таблица, Запрос, Отчёты, Обработки, Константы, Справочники, Документы, Журналы документов и Перечисления, и базовые типы данных поставляются с любой компонентой. В отдельные компоненты выделены объекты учета.
Компонента «Бухгалтерский учёт»
Компонента «Бухгалтерский учёт» включает типы метаданных Бухгалтерские счета, Виды субконто, Операции, Проводки и Бухгалтерские итоги, что позволяет отразить (описать и анализировать) хозяйственную деятельность предприятия с точки зрения бухгалтерского учёта.
Компонента «Оперативный учёт»
Компонента «Оперативный учёт» включает типы метаданных регистры и понятие точка актуальности итогов, позволяющие регистрировать и получать информацию о движениях и остатках товарных, материальных, денежных и других средств предприятия в реальном времени.
Компонента «Расчёт»
Компонента «Расчёт» включает типы метаданных календари, виды и группы расчётов, и журналы расчётов и предназначена для автоматизации сложных периодических расчётов, в том числе - с пересчётом результатов «задним числом» и ведением архива расчётов за прошедшие периоды.
20 _____________________ 1С:Предприятие. Практика программирования на платформе V7
Конфигурирование журнала расчетов
Создадим журнал расчетов «Амортизация» с объектом расчетов типа справочник «Оборудование», с периодичностью расчетов 1 месяц, для которой характерна дата начала отсчета 1-е число месяца, размерность Результата зададим: длина -12, точность-2. В журнале создадим реквизиты типа число «Часов» с синонимом «Часов/Дней», длина 3, точность 0 и «Стоимость» , длина 12, точность 2.
176______________________ 1С:Предприятие. Практика программирования на платформе V7
![]() |
Отредактируем форму списка журнала. |
![]() |
Графы отбора позволяют отбирать записи журнала расчетов по значению реквизита элемента справочника-объекта. В качестве графы отбора выберем реквизит справочника «Оборудование» - «График».
Константы
Константы - предназначены для хранения информации, относящейся ко всему предприятию, необходимой для многократного использования в печатных Формах, расчетах и т. д. Информация может быть постоянной или
46_______________________ 1С:Предприятие. Практика программирования на платформе V7
периодически меняющейся. Использование констант облегчает изменение величин, которые используются в разных местах конфигурации.
Константы могут сохранять историю изменения значения по датам. Для этого необходимо на закладке «Дополнительные» панели свойств константы установить флажок «Периодический».
Для работы с периодическими значениями используются методы Получить() и Установить().
Получить(<Дата>)возвращает значение периодической константы на заданную дату. Параметры:<Дата> - необязательный параметр. Выражение типа дата или значение типа документ или позиция документа. Этот параметр задает момент времени, на который требуется получить значение периодической константы. Значение по умолчанию: ТА - если используется компонента "Оперативный учет", Рабочая дата - если компонента "Оперативный учет" не используется.
Установить(<Дата>,<Значение>)- установить значение периодической константы на дату. Параметры:<Дата> - дата, на которую требуется установить значение периодической константы; <3начение> - новое значение константы.
Примеры записи значения периодической константы:
Константа.ТипУчета.Установить(Дата_зн, зн_е);
Используется так же служебный объект Периодический, предназначенный для работы с периодическими объектами, и имеющий атрибуты Значение и ДатаЗнач для чтения и редактирования истории изменения их значению.
Метод объекта периодический ИспользоватьОбъект(<ИмяРеквизита>,<Объект>) сопоставляет
объект типа 'Периодический' периодической константе или периодическому реквизиту справочника.
Возвращает: 1 - если вызов метода закончился успешно, 0 - иначе.
<ИмяРеквизита> - строка с названием периодического реквизита справочника или периодической
константы;
<Объект> - значение элемента справочника, для которого задается применение периодического
реквизита (для констант не нужен).
Если наименование реквизита пустая строка и передан объект типа справочник, то выборка будет
осуществляться по всем реквизитам справочника.
ТипУч = Константа.ТипУчета;
ТипУч = СоздатьОбъект(«Периодический») ;
ТипУч.ИспользоватьОбъект(«ТипУчета»);
ТипУч.Значение= зн_е;
ТипУч.ДатаЗнач = Дата_зн;
ТипУч.Записать();
Упражнение 1. Создайте перечисление «ТипыУчета», задайте несколько значений типов учета, не забудьте определить пользовательские представления значений, необходимые для интерактивного выбора значения типа перечисление.
Встаньте на ветвь метаданных «Перечисления», по правой кнопке мыши выберите пункт контекстного меню «Новое перечисление». В появившемся
VI Пример создания простой реляционной структуры____________________________ 47
окне с помощью кнопки «Новый» введите возможные значения созданного вами перечисления. В поле «Идентификатор» укажите имя, по которому вы будете обращаться к данному значению программно из текстовых модулей.
![](image/image050.gif)
«Идентификатор» - это строка, начинающаяся с буквы или знака подчеркивания и не содержащая пробелов и служебных символов.
В поле «Представление» укажите пользовательское представление данного значения.
![](image/image051.gif)
Упражнение 2. Создайте периодическую константу «ТекТипУчета» типа Перечисление.ТипыУчета. Сохраните изменения, запустите режим Предприятие и, используя меню Операции, введите значения константы на разные даты.
48_______________________ 1С:Предприятие. Практика программирования на платформе V7
В Конфигураторе:
![](image/image052.gif)
На закладке «Дополнительные» установим флажок — «Периодический».
![](image/image053.jpg)
В Предприятии обратите внимание, что строка, записанная при конфигурировании в поле «Комментарий», отображается в поле «Наименование» константы — это характерно только для констант. Историю периодических элементов можно посмотреть по клавише F5 или щелкнув
иконку
![](image/image054.jpg)
![](image/image055.gif)
Метод СоздатьОбъект и основные методы позиционирования объектов Операторы передачи управления
Обратим внимание на метод СоздатьОбъект,
0б= СоздатьОбъект("<ИмяОбъектаМетаданных>");
который передает переменной «Об» ссылку на объект типа «ИмяОбъектаМетаданных» в оперативной памяти. Имя объекта метаданных должно в точности соответствовать идентификатору вида объекта с учетом регистра букв. После определения переменной «Об», если объект «ИмяОбъектаМетаданных» имеет структуру хранения, её надо спозиционировать на конкретное значение элемента данных, например, с помощью метода, начинающегося со слова Найти - «Об.Найти***», который возвращает значение 1, если значение найдено, и 0 в противном случае. В результате исполнения этого метода происходит копирование значения элемента данных с дисковой памяти в оперативную.
Другие способы позиционирования объектов основаны на методах Выбрать ***(), который определяет множество значений поля выборки (записей в БД), и Получить ***(), возвращающем значение 1, если найдено следующее значение в поле выборки. Методом
Об.Выбрать***();
определим множество перебираемых значений, которое затем последовательно перебираем в цикле
Пока Об.Получить***()=1 Цикл
<Тело цикла: операторы выполняющиеся периодически, пока верно условие цикла >
КонецЦикла;
V Формат исходных текстов программных модулей._____________________________ 37_
Если значения атрибутов объекта были изменены, и им были присвоены некоторые значения.
Об.Атрибут=3нач_е;
Для сохранения новых значений атрибутов объекта его необходимо записать с помощью метода «Записать».
Об.Записать();
В языке описана ещё одна конструкция для организации цикла.
Для
ПараметрЦикла=НачальноеЗначениеПараметраЦикла
По КонечноеЗначениеПараметраЦикла Цикл
<Тело цикла: операторы выполняющиеся периодически>
КонецЦикла;
Передача управления по условию
Если <Условие> Тогда
<Операторы, исполняемые если Условие верно ИначеЕсли <Условие1> Тогда
< Операторы, исполняемые если Условие
неверно, а Условие1 верно>
Иначе
< Операторы, исполняемые если ни одно из
условий неверно
КонецЕсли;
Конструкции «ИначеЕсли» и «Иначе» необязательны. Конструкций «ИначеЕсли» может быть несколько.
Безусловная передача управления на исполняемый оператор программного блока
Перейти <Метка>;
Условный оператор
Переменная = ?(<Условие >,<Выражение, значение которого будет присвоено переменной если условие выполняется>.< Выражение, значение которого будет присвоено переменной если условие не выполняется >);
Методы оборотных регистров
Методы получения значений ресурсов оборотных регистров имеют списки параметров и назначения аналогичные соответствующим методам регистров остатков. Перед получением итогов необходимо указать за какой период надо получить значения ресурсов с помощью метода ИспользоватьПериод(<?>). Список параметров этого метода зависит от Периодичности оборотного регистра, которая задается при конфигурировании регистра. Для регистра с периодичностью Месяц и аналогичными атрибутами справедлива запись:
Регистр.Обортный.ИспользоватьПериод(2001,ЗначениеМесяца);
ЗначениеОборота=Регистр.Обортный.СводныйИтог(Зн_еИзмерения, "ИдентификаторРесурса");
Методы выборки записей из журнала расчетов
Методы выборки записей из журнала расчетов делятся на две группы: методы осуществляющие выборку по периоду действия записи, вспомним, что запись может действовать в нескольких периодах, и методы осуществляющие выборку по периоду регистрации записи, период регистрации для записи всегда один.
Методы выборки записей по периоду действия
• Метод ВыбратьЗаписи(<Начало>,<Окончание>) - открывает выборку
записей журнала расчетов. Выбираются все записи, период действия которых хоть на один день затрагивается тем периодом, который задан параметрами <Начало> и <Окончание>.
• Метод ВыбратьЗаписиПоОбъекту(<Объект>,<Начало>,<Окончание>)
отличается от метода ВыбратьЗаписи() тем, что в первом случае в выборку попадают записи по одному конкретному объекту расчета, заданного параметром <Объект>, а во втором — по всем объектам расчета.
• Метод ВыбратьЗаписиПоДокументу(<Документ>) — открывает выборку всех
записей, порожденных документом.
Методы выборки записей по периоду регистрации
• Методы ВыбратьПериод(<Дата>), ВыбратьПериодПоОбъекту(<Объект>,
<Дата>) и ВыбратьПоЗначению (<ГрафаОтбора>, <ЗначениеОтбора>, <НачПериод>, <КонПериод>) отличаются от вышеописанных методов тем, что осуществляют выборку в другом временном разрезе. Выбираются те записи, которые введены в том расчетном периоде, в который попадает <Дата> или периоды отбора, но не записи, имеющие дату начала и дату окончания, лежащие в этом периоде. Эти методы выбирают записи по времени их появления (регистрации) в системе.
Методы работают только для переменных, созданных функцией СоздатьОбъект, и, как правило, применяются перед циклом, выполняющим перебор записей журнала расчетов при помощи метода ПолучитьЗапись().
Упражнение 37. В модуле формы документа «Амортизация» создадим процедуру РассчитатьКалендари() для автозаполнения календарей по дату документа и функцию ВыполнитьРасчет (объект) для расчета амортизации по записям журнала расчетов. Процедуру РассчитатьКалендари() выполнять при создании нового документа в информационной базе. Процедуру ВыполнитьРасчет() вызывать для расчета результирующей суммы списания по
184______________________ 1С:Предприятие. Практика программирования на платформе V7
выбранному элементу справочника «Оборудование».
Метод Автозаполнение(<ДатаНачала>,<ДатаКонца>) выполняет автозаполнение календаря в заданном периоде. Возвращает число: 1 - получилось; 0 - не получилось <ДатаНачала> - дата начала периода автозаполнения. <ДатаКонца> - дата конца периода автозаполнения.
Функция ВыполнитьРасчет(объект)
Сум= 0;
ЖурнРасчетов=Создать0бъект("ЖурналРасчетов.Амортизация");
Если ЖурнРасчетов.ВыбратьЗаписиПоОбъекту(объект, ЖурнРасчетов.НачалоПериодаПоДате(ДатаДок), ЖурнРасчетов.КонецПериодаПоДате(ДатаДок)) =1 Тогда
Пока ЖурнРасчетов.ПолучитьЗапись()=1 Цикл
Если ЖурнРасчетов.Рассчитана=0 Тогда
ЖурнРасчетов.Рассчитать();
КонецЕсли;
Сум = Сум + ЖурнРасчетов.Результат;
КонецЦикла;
Иначе
Сообщить(" Записи по объекту "+объект+" отсутствуют !") ;
КонецЕсли;
Возврат Сум;
КонецФункции / / ВыполнитьРасчет
//_______________________________
Процедура РассчитатьКалендари ()
Н= 1 ;
Пока Метаданные.Календарь(Н).Выбран()=1 Цикл
Календарь=Создать0бъект(Метаданные.Календарь(Н). ПолныйИдентификатор());
Если Календарь.Часов(НачМесяца(ДатаДок),КонМесяца(ДатаДок))=0 Тогда
Календарь.Автозаполнение(НачМесяца(ДатаДок),ДатаДок);
КонецЕсли;
Н=Н+1;
КонецЦикла;
XI. Основы построения объектов компоненты «Расчет»__________________________ 185
КонецПроцедуры // РассчитатьКалендари
В форме диалога добавим в свойствах колонки табличной части «Оборудование» на закладке Дополнительные формулу
Результат= ВыполнитьРасчет (Оборудование).
Вызов процедуры РассчитатьКалендари () можно поместить в предопределенные процедуры ВводНового() и ВводНаОсновании().
Процедура ВводНового()
РассчитатьКалендари();
ТипСписания=Константа.ТипСписания.Получить(ДатаДок);
УстановитьНовыйНомер("А"); КонецПроцедуры
Объекты метаданных - «Календарь»
Календари хранят данные о структуре периода расчетов. При конфигурировании календарей описывается порядок их автозаполнения.
В дереве метаданных выделим ветвь «Календари», в главном меню выберем пункт «Действие» и в появившемся подменю пункт «Новый элемент». В появившейся форме на закладке «Общие» введем идентификатор «Пятидневка», а на закладке «Календарь» график работы оборудования семидневку с 10-ти часовым рабочим днем и двумя выходными, стартовую
XI. Основы построения объектов компоненты «Расчет»__________________________ 173
дату, начиная с которой будет вестись расчет по календарю, установим на любой понедельник. Нажав на кнопку «ОК», сохраним объект.
![](image/image165.gif)
![](image/image166.gif)
В жизни иногда случаются праздники. В системе 1С:Предприятие праздники можно задать программно,
Праздник=Создать0бъект("Праздники");
Праздник.Новый('01.01.02',КоличествоРабочихЧасов);
Подробнее смотрите «1С:Предприятие Версия 7.7 Описание встроенного языка Часть 2,стр.607-609. Также можно создать пункт меню в пользовательском интерфейсе, который позволит вводить праздники. Создадим такой пункт меню.
Откроем свойства нового элемента меню, Выберем объект «Календари», Выберем команду «Календари.Праздники», Отредактируем Название и Подсказку.
![](image/image167.gif)
174______________________ 1С:Предприятие. Практика программирования на платформе V7
Обращение к позиционированному документу в журнале документов
Обращение к записи журнала документов отличается от аналогичной операции в форме списка справочника, потому что в журнале документов могут располагаться записи различных объектов — видов документов. В каталоге справочника располагаются записи одного объекта. Обращение к записи журнала документов производится с помощью атрибута журнала ТекущийДокумент, который дает доступ к выбранному в журнале документу (только для чтения). Его можно использовать только в локальном контексте Модуля формы журнала документов. Чтобы возвратить значение типа документ по значению атрибута, надо применить метод ТекущийДокумент():
ТекущийДокумент.ТекущийДокумент()
Создадим, для примера, в форме списка журнала документов кнопку, по нажатию на которую будет производиться проведение позиционированного в журнале документа. Используем следующие методы:
НайтиДокумент(<Документ>) позволяет найти документ по значению типа 'Документ'. Возвращает: 1 - если действие выполнено (документ найден);
О - если действие не выполнено. <Документ> - выражение со значением типа 'Документ'. Метод можно использовать только для объектов, созданных функцией СоздатьОбъект. Провести(<Режим>,<Знач>) позволяет выполнить проведение документа. Возвращает: 1 - если проведение документа выполнено, 0 - иначе.
<Режим> - необязательный параметр. Число: 0 - проводить документ без сдвига ТА; 1 - проводить непроведенный документ реальным временем (со сдвигом ТА); 2 - перепроводить проведенный документ реальным временем (со сдвигом ТА); 3 - проводить любой (непроведенный, проведенный) документ реальным временем (со сдвигом ТА). Значение по умолчанию - 0. <3нач> - выражение произвольного типа, которое передается при запуске предопределенной процедуры ОбработкаПроведения (необязателен, по умолчанию - пусто).
Метод нельзя использовать в теле предопределенной процедуры ОбработкаПроведения. Если этот метод применяется в Модуле формы документа непосредственно к документу локального контекста, то данный метод отрабатывает те же действия, как интерактивное нажатие пользователем кнопки с формулой "#Провести". В этом случае, если параметр <Режим> опущен, то документ проводится в режиме, соответствующем установкам системы меню Сервис-Параметры.
Обратим внимание, что метод провести работает, как процедура — выполняет действие, и как функция возвращает значение. Воспользуемся этим свойством, чтобы показать пользователю, что документ действительно провёлся или нет. Это удобно особенно при перепроведении уже проведенных документов.
Алгоритм проведения приводится ниже.
Процедура ПровестиДок()
Если ТекущийДокумент.Выбран()=1 Тогда
Док=Создать0бъект("Документ");
VIII. Документы и журналы документов_________________________________________ 121
Док.НайтиДокумент(ТекущийДокумент.ТекущийДокумент());
Если Док.Провести()=1 Тогда
Предупреждение("Документ "+ Док + "проведен.");
Иначе
Предупреждение("Документ "+Док+ * НЕ ПРОВЕДЕН!!!!!!!!!");
КонецЕсли;
КонецЕсли;
КонецПроцедуры //ПровестиДок
![](image/image120.gif)
Различия в использовании Общих реквизитов документов и Граф отбора
Общие реквизиты документов в основном предназначены для упрощения процесса создания нового документа и представляют собой набор реквизитов автоматически встраиваемых в новый документ.
Графы отбора это реквизиты документов, кроме Общих реквизитов - Общий реквизит не может быть Графой отбора, по которым ведётся сортировка и отбор документов. При включении реквизита документа в графу отбора по нему строится индекс в индексном файле, что существенно ускоряет сортировку документов и формирование запроса по этому реквизиту (см. 1 т. Конфигурирование и администрирование 1С:Предприятия 7.7, стр. 186-187).
Вопросы для самоконтроля
Какие отличия в структуре, в упорядочивании и в формах документов по сравнению со справочниками?
122______________________ 1С:Предприятие. Практика программирования на платформе V7
С помощью, каких объектов метаданных можно просмотреть существующие документы?
Чем отличается подчинение документов от справочников?
Какие реквизиты формы можно использовать в модуле документа?
Какие реквизиты и переменные можно использовать в шаблоне печатной формы?
Какой метод выводит на экран результирующую печатную форму?
/Х. Основы построения «Оперативного учёта» в системе 1С:Предприятие_________ 123
Очередность расчета записей журнала расчетов
Записи журнала расчетов могут рассчитываться не только по одной, но также и группами: по документу или по объекту Порядок группового расчета записей журнала расчетов определяет приоритет вида расчета. Если у записей одинаковый приоритет - они рассчитываются в порядке ввода, если приоритеты разные, то расчеты производятся в порядке возрастания приоритета.
![](image/image174.gif)
Рекомендуется оставлять промежутки между значениями приоритетов на случай введения в конфигурацию новых видов расчетов.
180______________________ 1С:Првдприятие. Практика программирования на платформе V7
Описание алгоритма расчета записи журнала расчетов в модуле вида расчета
Откроем модуль вида расчета «Вднях». В модуле вида расчета доступны атрибуты и реквизиты рассчитываемой записи журнала расчетов.
С помощью метода вида метаданных Календари - Дней(), определим количество дней отработанных оборудованием и запишем выражение для реквизита Журнала расчетов - «Часов».
Метод Дней(<ДатаНачала>,<ДатаОкончания>)позволяет получить количество "ненулевых" дней за
период.
Возвращает: целое положительное число - количество дней.
<ДатаНачала> - дата начала периода, в котором определяется количество дней.
<ДатаОкончания> - дата окончания периода, в котором определяется количество дней. Если
<ДатаНачала> больше, чем <ДатаОкончания>, будет выведено сообщение об ошибке.
Коэффициент амортизации оборудования задается у нас в процентах в час. Примем что в день у нас 10 рабочих часов для оборудования.
Процедура ПровестиРасчет()
Часов=Объект.График.Дней (ПериодДействия. ДатаНачала,
ПериодДействия.ДатаОкончания);
Результат=Стоимость* Часов *Объект.КоэффАморт/10 ;
КонецПроцедуры
182______________________ 1С:Предприятие. Практика программирования на платформе V7
Упражнение 35. Создайте алгоритм расчета записи для вида расчета «Вчасах», используя метод календарей Часов(ДатаНачала.ДатаКонца). Рассчитайте записи в режиме Предприятия.
Определим остаточную стоимость оборудования, чтобы определить момент полного списания оборудования. Мы его списываем по бухгалтерскому и по оперативному учету. Полная остаточная стоимость, таким образом, складывается из конечного дебетового сальдо по счету «ОБ.ПР» по разделителю учета «Белое» и остатков по Оперативному учету.
Упражнение 36. Создайте в глобальном модуле функцию ОстаточнаяСтоимость(КонДата,Объект), которая будет возвращать полную остаточную стоимость оборудования на заданную дату. Организуйте вызов функции из текстовой колонки «Ост.» табличной части формы списка журнала расчетов «Амортизация».
Функция ОстаточнаяСтоимость(КонДата,Объект,Документ) Экспорт Рег=Создать0бъект("Регистр.Амортизация");
БИ=Создать0бъект("БухгалтерскиеИтоги");
БИ.ИспользоватьРазделительУчета(Перечисление.ТипыУчета.Бел);
Если КонДата<ПолучитьДатуТА() Тогда Peг.ВременныйРасчет();
РассчитатьРегистрыНа(КонДата);
КонецЕсли;
БИ.Рассчитать(,КонДата,"ОБ.ПР",,Перечисление.ТипыУчета.Бел);
Возврат БИ.СКД("ОБ.ПР",,,Объект,Документ) + Рег.СводныйОстаток(Объект,Документ,"Стоимость");
КонецФункции //ОстаточнаяСтоимость()
В этот остаток не вошли суммы списания по себестоимости по оперативному и бухгалтерскому учету, там в Партию записано значение документа списания.
![](image/image177.gif)
XI. Основы построения объектов компоненты «Расчет»__________________________ 183
Основные принципы обработки информации
С точки зрения управления информацией, различают два типа памяти, к которым производится обращение из системы управления. Первый тип — это постоянная память, формат хранения информации — файлы на жестком диске или другом носителе. Эта память, как правило, энергонезависимая, позволяющая хранить большие объемы информации и относительно медленная. Второй тип — это оперативная память, в которой формируются
10_______________________ 1С:Предприятие. Практика программирования на платформе V7
интерактивные образы и выполняются алгоритмы обработки информации. Оперативная память — энергозависима, то есть при выключении питания её состояние не сохраняется, это быстрая и постоянно обновляемая из формата хранения память.
Таким образом, процесс обработки информации состоит из следующих основных этапов:
¨ Чтение информации из формата хранения в оперативную память,
¨ Интерактивное отображение и изменение информации,
¨ Запись информации в формат хранения.
![](image/image005.gif)
Особенности временного расчета регистров оперативного учета
Если мы откроем форму объекта, например: отчета, который создает временный расчет по регистру «Амортизация», и, не закрывая эту форму, откроем документ «Амортизация», который тоже создает временный расчет по регистру «Амортизация», то, при неправильном конфигурировании,
/X. Основы построения «Оперативного учёта» в системе 1С:Предприягие__________ 145
программа может сообщить об ошибке. Такая ситуация возникает, если переменная типа регистр создана в глобальном модуле или объявлена в модуле формы и после выполнения временного расчета продолжает существовать. Чтобы избежать таких ситуаций следует либо использовать переменные создаваемые непосредственно в момент выполнения процедуры, либо отключать регистр от временного расчета, после, того как он был использован.
Еще одну особенность временных расчетов следует учитывать при проведении документов. Если в алгоритме проведения документа анализируются остатки и выполняются движения регистра, то при использовании текущих итогов регистра после записи каждого движения итоги изменяются, чтобы поддерживать временный расчет регистров в актуальном состоянии необходимо использовать метод Актуальность() со значением параметра равным 1 - Актуальность( 1).
Упражнение 26. В Форме списка справочника «Оборудование» вывести текущие остатки по стоимости конкретного оборудования (элементу справочника) из регистра «Амортизация».
В ФормеСписка справочника «Оборудование», в табличной его части создадим реквизит типа текст с заголовком «Ост.», а в поле формула на закладке «Дополнительные» выше описанного реквизита введем соответствующее выражение. Напоминаю, что получить элемент по строке формы списка можно с помощью метода ТекущийЭлемент().
Упражнение 27. (Необязательное) В выше описанном поле показать остатки по элементам и суммарные остатки по группам справочника.
Метод ЭтоГруппаО для справочников возвращает флаг группы: 1 - если элемент является группой, 0 -если это обычный элемент.
![](image/image144.gif)
Вопросы для самоконтроля
На какой момент времени возвращаются остатки по регистрам, если не задан временный расчет регистров?
Когда необходимо для получения остатков выполнить временный расчет регистров?
В каких текстовых модулях определен метод ИтогиАктуальны(). В чем отличия регистров остатков от оборотных регистров?
146______________________ 1С:Предприятие. Практика программирования на платформе V7
Что произойдет с базой данных, если изменить тип реквизита документа, участвующего в формировании аналитики по регистру?
Что произойдет с базой данных, если изменить тип измерения регистра? Назовите преимущества и недостатки партионного учета.
X. Основы построения «Бухгалтерского учёта» в системе 1С:Предприятие________ 147
Отладка текстов программ
Для удобства написания тестов программ с в системе "1С:Предприятие"
38_______________________ 1С:Предприятие. Практика программирования на платформе V7
существует «Синтакс-Помощник»,
![](image/image041.jpg)
/lCv77/BIN/lcv7Lang.als и lcv7tOpr.als.
Предусмотрены методы вставки конструкций языка из Синтакс-Помощника в текстовые модули. Панель свойств Синтакс-Помощника, как обычно, вызывается щелчком правой кнопки мыши.
![](image/image042.gif)
Синтакс-Помощник позволяет также настраивать собственные шаблоны пользователя, которые записываются в файл с расширением *.st. В типовых конфигурациях это файл 1cv7scrt.st. Этот файл можно присоединить к конфигурации через меню «Сервис» - «Параметры», закладка «Синтакс-Помощник».
![](image/image043.gif)
V Формат исходных текстов программных модулей._____________________________ 39_
Отладка текстов программ производится с помощью «Отладчика», в котором доступны: стек вызова исполняемых процедур и функций, пошаговое исполнение алгоритма вычислений, возможность контроля вычислений, а также замеры производительности.
![](image/image044.gif)
Список действий меню «Отладка» приводится на следующем рисунке.
![](image/image045.jpg)
40_______________________ 1С:Предприятие. Практика программирования на платформе V7
К сожалению, «Отладчик» не позволяет редактировать алгоритмы, поэтому отладка алгоритмов часто производится во внешнем текстовом файле (при запущенном Конфигураторе), в который переносится весь текст модуля объекта. Этот прием позволяет отредактировать отдельный текстовый блок, и тут же проверить правильность его работы в режиме "1С:Предприятия". Синтакс-Помошник не доступен из текстового файла, открытого в режиме Предприятие, поэтому его лучше открывать из Конфигуратора.
Для переключения загрузки программного модуля на загрузку из текстового файла используется директива «#ЗагрузитьИзФайла», которая должна записываться слева в первой строке программного модуля с первой позиции. Имя файла, содержащего исходный текст программного модуля, записывается без кавычек и скобок.
Пример: #ЗагрузитьИзФайла textMod.txt
Палитра свойств
Палитру свойств можно открыть, если щелкнуть правой кнопкой мыши на выбранном объекте и выбрать пункт «Свойства» из открывшегося контекстного меню.
![](image/image031.gif)
Для некоторых объектов палитра свойств может быть вызвана также двойным щелчком мыши на объекте.
Основное отличие палитры свойств от других окон программы заключается в том, что в этом окне редактируется информация о свойствах объекта, выбранного в каком-либо другом окне. Если нажать кнопку («Прикрепить»), палитра свойств постоянно будет присутствовать на экране, и, в зависимости от того, какой объект выбран, состав информации в ней будет изменяться. Палитра свойств всегда присутствует на экране в единственном «экземпляре».
В конфигураторе существует несколько палитр свойств:
1) для объекта метаданных - позволяет ввести идентификатор объекта, «всплывающий» комментарий, а также права доступа по категориям прав, и правила миграции данных в распределенных базах.
![](image/image032.gif)
IVЭлементы конфигурирования на платформе 7.7________________________________ 29_
2) для реквизитов позволяет ввести также тип объекта, форматирование для базовых типов и дополнительные свойства в зависимости типа объекта.
![](image/image033.gif)
3) для полей ввода элементов формы, позволяющих вводить не только реквизиты объекта, но и справочные поля.
![](image/image034.gif)
Перечисления
Перечисления являются внутренними константами, присущими данной конфигурации. Они записываются не в отдельную таблицу, а непосредственно в файл конфигурации 1cv7.md и могут редактироваться только в конфигураторе. Это не агрегатные объекты, потому что содержат статичный (неизменяемый) набор значений. Они предназначены для создания некоторого постоянного списка возможных значений для выбора. Перечисления удобны в тех случаях, когда возникает необходимость в ограничении количества возможных вариантов значений константы, реквизита справочника или документа и т. д.
Пример выбора значения перечисления по его номеру:
Спис=Создать0бъект(«СписокЗначений»);
Всего = Перечисление.ТипыУчета.КоличествоЗначений();
Для Ном = 1 По Всего Цикл
Спис.ДобавитьЗначение.(Перечисление.ТипыУчета.ЗначениеПоНомеру (Ном)
, Перечисление.ТипыУчета.Идентификатор());
КонецЦикла;
Служебный объект метаданных типа «СписокЗначений» позволяет работать с одномерными массивами , в том числе создавать список с пометками и с интерактивным представлением объекта, поэтому при записи значения в список надо задать строковое представление значения для возможности интерактивной работы со списком значений.
Метод ДобавитьЗначение(<Значение>,<Строка>)
Добавляет значение в список значений.
<Значение> - значение, которое добавляется в список;
<Строка> - символьное представление значения (необязателен, по умолчанию - стандартное
символьное представление объекта).
Подчиненные документы
Система «1С:Предприятие» позволяет устанавливать между документами отношения подчиненности типа «много ко многим». Использование механизма подчиненности дает пользователю возможность автоматически Формировать список документов, подчиненных выбранному документу. Кроме того, к списку подчиненных документов можно обращаться на встроенного
90_______________________ 1С:Предприятие. Практика программирования на платформе \/7
языка системы «1С:Предприятие».
Чтобы сделать какой-либо документ (назовем его условно «Документ2») подчиненным другому документу («Документ 1»), необходимо:
• при конфигурировании в структуре документа «Документ2» создать
реквизит типа «документ», указав конкретный вид документов или «документ вообще»;
• при использовании конфигурации при вводе документа «Документ2» в
качестве значения этого реквизита выбрать документ «Документ1».
Говорят, что Документ2 подчинен Документу 1, если Документ1 упомянут в каком-либо реквизите Документа2.
Для работы со списком документов, подчиненных какому-либо документу, используется журнал специального типа - журнал подчиненных документов.
Правила адресации объектов
Переменные типа объект метаданных могут использоваться только с именами или ссылками на объекты метаданных или с их методами, между которыми ставится операция точка, имена видов объектов метаданных могут использоваться только с именами объектов метаданных: <Объект>.[<Атрибут>|<Метод()>]
Спр=Создать0бъект(«Справочник.Товары»); Спр.НайтиПоКоду(1); Спр.Цена.Получить('01.04.00'); Кнст=Константа.ОсновнойСклад;
Встроенный язык "1С:Предприятия" можно охарактеризовать как «язык с поздним связыванием», в котором связь между объектами формируется в момент выполнения кода программы, поэтому ошибки в программе, вызванные неправильным доступом к объектам проявляются только при запуске неправильного алгоритма из модуля соответствующего объекта.
Предопределенные процедуры Флаг статуса возврата
Предопределенные процедуры вызываются при выполнении пользователем определенных интерактивных действий над объектами системы: запуск или выход из системы, открытие или закрытие формы объекта и т.д.
Для каждого текстового модуля определен свой список предопределенных процедур.
Для предопределенных процедур системой зарезервированы имена и определены списки параметров.
В предопределенных процедурах определен флаг статуса возврата, текущее значение которого можно установить или прочитать с помощью метода CmamycBo3epama(). Флаг статуса возврата используется системой при завершении предопределенной процедуры. Начальное значение, устанавливаемое системой при вызове предопределенной процедуры, равно 1 (выполнить действие). Если в предопределенной процедуре установить значение флага статуса возврата равным 0, то все действия, предусмотренные данной процедурой, выполнены не будут. Чтобы выйти из процедуры до её завершения, используется оператор «Возврат».
Предопределенные процедуры глобального модуля
Для каждого модуля существуют предопределенные процедуры (действия), которые выполняются при определенных действиях пользователя. Для глобального модуля предусмотрены следующие процедуры:
ПриНачалеРаботыСистемы - отрабатывает в момент загрузки программы
ПриЗавершенииРаботыСистемы - отрабатывает в момент закрытия программы
ПриУдаленииДокумента - отрабатывает в момент удаления документов или постановки пометки на удаление документа
ПриУдаленииЭлемента - отрабатывает в момент удаления или постановки пометки на удаление элемента справочника
ПриЗаписиИстории - отрабатывает в момент записи истории значения периодического элемента
ПриУдаленииИстории - отрабатывает в момент удаления из списка истории значения периодического элемента
ПриЗаписи Константы - отрабатывает в момент записи значения константы
ПриОтменеПроведенияДокумента - отрабатывает в момент отмены проведения документа
V Формат исходных текстов программных модулей._____________________________ 43
ПриИзмененииВремениДокумента - отрабатывает в момент изменения времени существующего документа
ПриУстановкеОтбора - отрабатывает в момент установления отбора
ПриСменеРасчетного Периода - отрабатывает в момент смены расчетного периода журналов расчетов.
Вопросы для самоконтроля Что такое контекст?
Чем отличаются процедуры и функции?
Как определяются переменные во встроенном языке «1С:Предприятия»?
Как производится вызов процедур, функций и переменных модуля?
Как осуществляется доступ к свойствам агрегатных объектов метаданных?
Чем отличается контекст объекта от контекста формы объекта?
Чем отличаются предопределенные процедуры от остальных процедур?
Какова область действия переменных, процедур и функций?
Постановка учебной задачи
Создать механизм списания оборудования по амортизации. Списание производить с остаточной стоимости оборудования ежемесячно с учетом фактически отработанного времени в часах. Для каждого вида оборудования сохранять все закупочные цены, вводимые приходными документами, коэффициент амортизации в час и график работы. Предусмотреть ввод рекомендованной цены по группе элементов справочника. Для любого вида оборудования предусмотреть возможность оприходования в различных единицах измерения с соответствующим коэффициентом пересчета к наименьшей единице измерения. Предусмотреть возможность подчинения Документов друг другу с помощью общего реквизита «Основание». Предусмотреть возможность задавать в документах тип учета. При вводе новых Документов указывать текущее значение типа учета. При копировании Документов, реквизиту «Основание» задать значение копируемого документа. Документ списания сделать регламентным, с проверкой на наличие соответствующих документов в текущем месяце. Предусмотреть возможность корректировки графиков работы оборудования по фактически отработанному времени. Алгоритм расчета суммы списания определять при оприходовании
44_______________________ 1С:Предприятие. Практика программирования на платформе V7
новой партии оборудования. Создать движения по регистру остатков и по бухгалтерским счетам с аналитикой по оборудованию и по приходным партиям.
![](image/image049.gif)
VI Пример создания простой реляционной структуры____________________________ 45_
Предопределенные процедуры модуля формы документа
Для модуля формы документа существует перечень предопределенных процедур:
ВводНового - процедура, которая отрабатывает в момент начала ввода пользователем нового документа.
ВводНаОсновании - процедура, которая отрабатывает в момент начала ввода пользователем данного документа на основании другого документа.
ПриЗаписи - процедура, которая отрабатывает в момент записи документа.
ПриНачалеРедактированияСтроки - процедура, которая отрабатывает в момент начала редактирования существующей строки в табличной части документа.
ПриВводеСтроки - процедура, которая отрабатывает в момент ввода пользователем новой строки табличной части документа.
ПриРедактированииНовойСтроки - процедура, которая отрабатывает в момент начала редактирования новой строки табличной части документа (после процедуры «ПриВводеСтроки»}.
ПриУдаленииСтроки - процедура, которая отрабатывает в момент удаления пользователем одной из строк табличной части документа.
Предопределенные процедуры модуля формы и модуля формы списка справочника
ВводНового - процедура, которая вызывается в момент ввода пользователем нового элемента справочника.
ПриЗаписи - процедура, которая вызывается перед записью элемента в справочник.
ПриВводеСтроки - процедура, которая вызывается в момент ввода новой строки в форме списка справочника.
ПриРедактированииНовойСтроки - процедура, которая вызывается в момент начала редактирования новой строки в форме Списка Справочника (после Отработки Процедуры ПриВводеНовой Строки).
VII.Справочники______________________________________________________________ 61
ПриНачалеРедактированияСтроки - процедура, которая вызывается в момент начала редактирования существующей строки в форме списка справочника.
ПриПереносеЭлементаВДругуюГруппу - процедура, которая вызывается в момент переноса элемента справочника из одной группы в другую. Осуществляется посредством атрибута Родитель.
Метод «ОткрытьПодбор» и предопределенная процедура модуля формы ОбработкаПодбора()
Рассмотрим другой метод заполнения форм объектов на примере заполнения табличной части документа «Приход».
Если Вы хотите при открытии формы списка выбирать сразу несколько значений, а не открывать её по каждой строке документа, можно использовать метод «ОткрытьПодбор», который открывает форму списка для множественного подбора и передает выбранное значение предопределенной процедуре ОбработкаПодбора().
Метод
ОткрытьПод6ор(<Объект>,<ИмяФормы>,<Контекстформы>,<ФлагМножВыбора>,<ТекЗнач>)
открывает форму для подбора значений.
<Объект> - строка с именем объекта агрегатного типа для подбора. Можно указывать:
"Справочник.ХХХХХ" или "Документ.ХХХХХ" или "Журнал.ХХХХХ" или "Журнал.Подчиненные" или
"ЖурналОпераций.ХХХХХ", "ПланСчетов.ХХХХХ" (если ХХХХХ не задан, то открывается подбор из
любого(всех) плана счетов) или "Отчет.ХХХХХХ' или, "Обработка.ХХХХХХ", где ХХХХХ - имя вида
соответствующего объекта, как он задан в конфигураторе.
<Имяформы> - строка с именем Формы подбора;
<Контекстформы> - необязательный параметр. Имя переменной, куда можно задать значение любого
типа для передачи в открываемую форму. Данное значение будет доступно в открытой форме как
атрибут Форма.Параметр. После исполнения данного метода система вернет в данную переменную
контекст формы подбора. С помощью значения этого контекста можно затем произвольно
манипулировать формой подбора, пока она открыта. Пока форма открыта, тип значения данного
параметра равен 100 (см. ТипЗначения), если закрыта - 0.
<ФлагМножВыбора> - число: 1 - выбор нескольких значений; 0 - выбор одного значения, после чего
окно закрывается;
<ТекЗнэч> - необязательный параметр. В случае выбора из списка, здесь можно передать значение, на
которое следует изначально установить курсор при открытии формы подбора.
Доступ к методу возможен только в контексте Модуля формы.
Предопределенная процедура обработки подбора значения
ОбработкаПодбора(<Элемент>,<КонтФормы>)
<Элемент> - элемент справочника подбора или документ, передаваемый для обработки.
<КонтФормы> - контекст той формы, из которой шел подбор. Процедура может располагаться только в
программном модуле формы.
//Пример использования метода «ОткрытьПодбор» в форме документа «Приход».
Перем НомСтроки,СписокРасчетов;
Перем СписокРасчетов, НомСтр;
// В шапке модуля
//___________________________________________
Процедура Подбор()
СписокРасчетов=Создать0бъект("СписокЗначений");
Для н=1 по ГруппаРасчетов. ДляОборудования.Количество() Цикл
расч= ГруппаРасчетов. ДляОборудования.ПолучитьРасчет(н);
Приложение 1________________________________________________________________ 205
СписокРасчетов.ДобавитьЗначение(расч, расч.Наименование); КонецЦикла;
ОткрытьПодбор("Справочник.Оборудование", " ДляПодбора " , , 1, ); КонецПроцедуры //Подбор
//------
Процедура ОбработкаПодбора(ВыбранноеЗначение)
Перем ЗначениеРасчета, Позиция;
Если ВыбранноеЗначение.Выбран()=1 Тогда
Если ВыбранноеЗначение.Вид()="Оборудование" Тогда
НоваяСтрока();
НомСтр=НомерСтроки; Оборудование=ВыбранноеЗначение;
Контф_мы=ВыбранноеЗначение;
ОткрытьПодбор("Справочник.Единицы","",Контф_мы,0);
Иначе
ПолучитьСтрокуПоНомеру(НомСтр;
Единица=ВыбранноеЗначение;
цена_=Оборудование.Цена.Получить(ДатаДок);
Кол_во=1;
Если ВвестиЧисло(Кол_во,"Введите количество",6,2)=1 Тогда
Количество=Кол_во;
Если ВвестиЧисло(цена_,"Введите цену",10,2)=1 Тогда
НовЦена=цена_;
КонецЕсли;
КонецЕсли;
Сумма=Кол_во*цена_*Единица. Коэффициент;
Если СписокРасчетов.ВыбратьЗначение(ЗначениеРасчета,
"Выберите расчет".Позиция,,0)=1 Тогда
Расчет= ЗначениеРасчета;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
206______________________ 1С:Предприятие. Практика программирования на платформе V7
Процедуру Подбор() надо поместить в соответствующую кнопку, аналогично кнопке «Печать».В форме списка справочника Единицы надо определить Владельца при её программном открытии методом ОткрытьПодбор("Справочник.Единицы", «», Контф_мы, 0). Значение Владельца передается через параметр Контф_мы.
Для этого опишем в модуле формы списка справочника Единицы предопределенную процедуру ПриОткрытии(). Значение параметра формы в открываемой форме списка равно значению «Контекста формы» (Контфмы), ТипЗначения()=11 — это справочник.
Процедура ПриОткрытии()
Если (ТипЗначения(Форма.Параметр)=11) Тогда
//Для метода ОткрытьПодбор из документа
// Передаём значение типа справочник ИспользоватьВладельца(Форма.Параметр,0);
КонецЕсли;
КонецПроцедуры //ПриОткрытии
Приложение 2________________________________________________________________ 207
Некоторые ошибки, выдаваемые системой
Возвращаемые коды ошибок:
Код Причина ошибки
-10 Ошибка закрытия файла
-20 Ошибка создания файла
-30 Ошибка определения длины файла
-40 Ошибка установки длины файла
-50 Ошибка при попытке заблокировать файл
-56 Ошибка захвата файла. В течение 60 сек. система не смогла захватить файл.
Машина, на которой запущена система 1C:Предприятие - не база,
перегружена другими задачами.
-60 Ошибка при открытии файла
-70 Ошибка чтения файла
-80 Ошибка удаления файла
-90 Ошибка переименования файла
-100 Ошибка позиционирования в файле
-110 Ошибка снятия блокировки с файла
-120 Ошибка записи в файл
-200 Файл не является базой данных DBF-формата
-210 Неопознанное имя поля
-220 Неопознанный тип поля
-230 Запись слишком длинная
-300 Индексный файл не содержит информации о за-писи
-310 Ссылки в индексном файле или разрушены, или указывают на
несуществующие элементы базы данных
-920 Не достаточно оперативной памяти
210______________________ 1С:Предприятие. Практика программирования на платформе V7
ДЛЯ ЗАМЕТОК
Отпечатано в ИПО -Лев Толстой.» Зак.304
![](image/image185.jpg)