- если параметр 3начен - это группа справочника, то осуществляется проверка вхождения в
группу;
- если параметр 3начен - это простой элемент справочника или другой тип значения, то
осуществляется просто фильтрация по значению;
- для списка значений осуществляется проверка вхождения в список; - если пустое значение
или пустой список значений, то условие не проверяется.
Метод УстановитьФильтр(Измерение1,Измерение2...,Рекв1,Рекв2) позволяет установить Фильтры по всем измерениям и реквизитам регистра. Измерен1,Измерен2... - значения измерений
134 1С:Предприятие. Практика программирования на платформе V7
регистра. Измерения могут задаваться с пропусками (неуказанное значение - просто запятая), фиксируются только указанные измерения. Рекв1,Рекв2... - необязательные параметры. Выражения со значениями реквизитов регистра. Заданные значения реквизитов будут влиять только на отбор движений регистра.
Обратите внимание на вариант 2 метода УстановитьЗначениеФильтра, благодаря которому этим методом можно установить фильтр на множество значений измерения или реквизита в отличие от метода УстановитьФильтр.
Возможность установки фильтра по значению реквизита регистра существенно упрощает редактирование отлаженных чужих конфигураций, так как создание нового измерения регистра — это, по сути дела, создание нового разреза учета, и может повлечь изменение всей структуры учета на предприятии. Для решения частных задач иногда можно обойтись созданием дополнительного реквизита регистра и установкой фильтра по нему при выборке движений или итогов по регистру. При этом следует учитывать, что в записях регистра остатки и итоги ресурсов по реквизиту не накапливаются, и такой фильтр будет работать гораздо дольше.
Регистр. Амортизация . ВыбратьДвижения (ДатаНач, ДатаКон);
Пока Регистр.Амортизация.ПолучитьДвижение() =1 Цикл
ЗначениеПартии= Регистр.Амортизация.Партия;
// и прочие атрибуты регистра
КонецЦикла;
Метод ВыбратьДвижения(ДатаНачала,ДатаКонца,ГрафаОтбора) позволяет выбрать все движения регистра по датам в заданном интервале дат. ДатаНачала - дата, документ или позиция начала временного интервала выбора движений регистра; ДатаКонца - дата, документ или позиция конца временного интервала выбора движений регистра (если не указана или 0, то конец - ТА). ГрафаОтбора - необязательный параметр. Строковое выражение. Идентификатор графы отбора -установка использования определенной графы отбора. "*" - автоматический выбор графы отбора. Пустая строка - не использовать графу отбора. Если не указан - автоматический выбор графы отбора.
Движения можно выбрать также методами ВыбратьДвиженияДокумента(Документ) и ВыбратьДвиженияСОстатками(ДатаКонца, ГрафаОтбора).
Метод ПолучитьДвижение() позволяет выбрать очередное движение регистра. Возвращает: 1 - если следующее движение регистра выбрано, 0 - иначе. Метод можно использовать только для объектов, созданных функцией СоздатьОбъект.
Рег=СоздатьОбъект("Регистр.Амортизация");
Per.ВыбратьИтоги();
Пока Рег.ПолучитьИтог()=1 Цикл
ЗначениеПартии= Peг.Партия;
ЗначениеСтоимости= Peг.Стоимость;
IX. Основы построения Оперативного учёта в системе 1С:Предприятие 135
//
КонецЦикла;
Перед вызовом метода ВыбратьИтоги() можно также установить фильтры и порядок выборки. Метод ВыбратьИтоги() можно использовать только для переменной определенной с помощью метода СоздатьОбъект.
На платформе V77 можно выгрузить итоги в таблицу значений.
ТабЗн=Создать0бъект("ТаблицаЗначений");
Регистр.Амортизация.ВыгрузитьИтоги(ТабЗн) ;
Метод ВыгрузитьИтоги(ТаблЗнач,ВклФильтр,Очищать) позволяет выгрузить все итоги регистра с текущим фильтром в таблицу значений. ТаблЗнач - объект типа "ТаблицаЗначений", куда система выгрузит все итоги регистра, колонки таблицы создаются в соответствии с типами и идентификаторами атрибутов регистра. ВклФильтр - необязательный параметр. Число: 1 - в получаемую таблицу включаются измерения, закрепленные фильтром ; 0 - не включаются. Значение по умолчанию - 0. Очищать - необязательный параметр.Число:1 - пере выгрузкой таблица значений очищается;0 - не очищается.Значение по умолчанию -1.
Метод ВыгрузитьИтоги() можно использовать непосредственно для регистра в отличие от методов ВыбратьИтоги() и ПолучитьИтог(). Таблицу значений можно дописывать (см. параметр Очищать) - это позволяет выгрузить, например, в таблицу итоги из нескольких регистров, а отсортировать её или свернуть.
Метод Свернуть(ГруппКолонки,СуммКолонки) позволяет свернуть таблицу значений по соответствующим значениям колонок, т.е. заменяет на одну строку все дублирующие (по значениям группировочных колонок) строки, суммируя значения по суммируемым колонкам. ГруппКолонки -группировочные колонки (номера или идентификаторы колонок через запятую), по которым группировать данные. СуммКолонки - суммируемые колонки (номера или идентификаторы колонок через запятую), по которым суммировать данные.
136 1С:Предприятие. Практика программирования на платформе V7
9.3.1. Методы регистров остатков
Метод ОстаткиПолучить() позволяет получить все ресурсы по регистру. Измерения записываются в атрибуты, полученные ресурсы считываются из атрибутов регистра. Метод используется только для регистров остатков.
Регистр.Амортизация.Оборудование= Оборудование; Регистр.Амортизация.ОстаткиПолучить(); ЗначениеСтоимости= Регистр.Амортизация.Стоимость;
Методы Остатки(?) и СводныеОстатки(?) также позволяют получить остатки по всем ресурсам регистра. Параметры: [Значение измерения1, Значение измерения2,...] . При вызове метода Остатки (?) необходимо указать значения всех измерений регистра. Для метода СводныеОстатки(?) можно указать значения только необходимых измерений, а остальные опустить, поставив соответствующие запятые.
Регистр. Амортизация.СводныеОстатки(ЗначениеОборудования,); ЗначениеСтоимости= Регистр.Амортизация.Стоимость; ЗначениеКолл_во= Регистр.Амортизация.Количество;
Методы Остаток(?, ) и СводныйОстаток(?, ) возвращают значение остатка заданного ресурса регистра. Параметры:[3начение измерения1, Значение измерения2,... , Имя ресурса в кавычках]. При вызове метода Остаток(?,) необходимо указать значения всех измерений регистра. Метод СводныйОстаток(?, ) возвращает значение сводного остатка заданного ресурса регистра по неполному списку значений измерений, как и метод СводныеОстатки(?).
IX. Основы построения Оперативного учёта в системе 1С:Предприятие 137
ЗначениеСтоимости=
Регистр.Амортизация.СводныйОстаток(ЗначениеОборудования , ,"Стоимость ");
ЗначениеКолл_во=
Регистр. Амортизация.СводныйОстаток(ЗначениеОборудования , , "Количество");
9.3.2. Методы оборотных регистров
Методы получения значений ресурсов оборотных регистров имеют списки параметров и назначения аналогичные соответствующим методам регистров остатков. Перед получением итогов необходимо указать за какой период надо получить значения ресурсов с помощью метода ИспользоватьПериод(?). Список параметров этого метода зависит от Периодичности оборотного регистра, которая задается при конфигурировании регистра. Для регистра с периодичностью Месяц и аналогичными атрибутами справедлива запись:
Регистр.Обортный.ИспользоватьПериод(2001,ЗначениеМесяца);
ЗначениеОборота=Регистр.Обортный.СводныйИтог(Зн_еИзмерения, "ИдентификаторРесурса");
9.4. Списание по партиям
Партионный учет подразумевает ведение учета с аналитикой по партиям. Как правило, партии формируются приходными документами по каждой позиции учитываемого объекта. Списание учитываемого объекта при этом производится также в разрезе сформированных партий.
В зависимости от порядка списания партий выбирается очередная партия для списания и списывается или требуемое количество, уменьшая остаток партии, либо весь текущий остаток партии, если требуемое количество больше остатка партии.
При учете по партиям списание производится не из общего количества или стоимости объекта списания, а по сформированным партиям, что позволяет более точно вычислять себестоимость продукции. Партии могут формироваться
138 1C:Предприятие. Практика программирования на платформе V7
• приходными документами, когда каждая строка документа формирует
новую партию,
• в зависимости от свойств объекта списания: например по сроку
реализации.
Порядок списания также может быть различный:
ушел), LIFO (последний пришел - первый ушел),
• по размеру партии — по максимальному или минимальному остатку
партии и прочее.
В нашем примере мы рассмотрим списание по методам FIFO и LIFO.
При списании по партиям, в отличие от списания по средней себестоимости, необходимо сначала сформировать список партий, подлежащих списанию, для выбранного объекта списания, а затем организовать списание по партиям.
Списание партии производится следующим образом:
Создадим переменную, в которой будет храниться списываемое с партии значение. Первоначально оно должно быть равно полному значению списания.
IX. Основы построения Оперативного учёта в системе 1СПредприятие 139
Проверим остаток по партии.
В этом случае партию списали целиком, но имеются другие несписанные партии, с которых можно списать остаток списания. В этом случае остаток списания полностью списан с текущей партии. Остаток по партии уменьшился на величину списания.
Перед завершением цикла, обязательно проверим - всё ли мы списали?
140 1C:Предприятие. Практика программирования на платформе V7
Так строится любой алгоритм списания по партии.
Упражнение 25. Предусмотрите в документе Амортизация выбор типа списания По средней себестоимости, FIFO или LIFO типа перечисление. Предусмотрите ввод значения типа списания по умолчанию при создании нового документа.
Не забудьте создать и реквизит объекта (формата хранения), и соответствующий элемент формы.
Сформируем записи движений списания оборудования по партиям, в модуле документа Амортизация, в регистр Амортизация.
Установим флажок Оперативный учет в окне редактирования документа Амортизация.
Войдем в модуль документа Амортизация.
Чтобы документ можно было вводить задним числом с нарушением последовательности, создадим временный объект типа Регистр .Амортизация и рассчитаем его на текущий документ.
Партии запишем в таблицу значений.
Метод ИтогиАктуальны() возвращает флаг актуальности итогов: 1 - итоги актуальны, 0 - иначе. Метод доступен только в Модуле документа в предопределенной процедуре ОбработкаПроведения.
Рег=Создать0бъект("Регистр.Амортизация"); ТаблицаПартий=Создать0бъект("ТаблицаЗначений");
Если ИтогиАктуальны()=0 Тогда
IX. Основы построения Оперативного учёта в системе 1С:Предприятие 141
Рег.ВременныйРасчет() ; РассчитатьРегистрыНа(ТекущийДокумент());
КонецЕсли;
Организуем цикл выборки строк документа, определим списываемое значение и проверим остатки оборудования по стоимости.
РазделительСтрок - символ перевода строки текста.
ВыбратьСтроки();
Пока ПолучитьСтроку() =1 Цикл
ВсегоСписать=Результат; // определим списываемое значение
Дефицит=Рег.СводныйОстаток(Оборудование,,"Стоимость")-ВсегоСписать;
Если Дефицит0 Тогда
Предупреждение("Дефицит по оборудованию "+Оборудование+" = "+ Дефицит +РазделительСтрок+" Документ нельзя проводить!!");
// Отмена проведения документа
СтатусВозврата(0);
Возврат;
КонецЕсли;
КонецЦикла;
Сформируем партии оборудования. С помощью метода ВыбратьСтроку удобно просмотреть созданную таблицу значений.
Peг.УстановитьФильтр(Оборудование,);
Peг.ВыгрузитьИтоги(ТаблицаПартий,1,1);//Создали партии
оборудования //ТаблицаПартий.ВыбратьСтроку(); //отладка
Партии отсортируем в зависимости от выбранного в документе типа списания.
Метод таблицы значений Сортировать(Колонки,ДокумПоДате) позволяет сортировать таблицу значений по колонкам.
Колонки - строковое выражение, которое определяет колонки, порядок и направление сортировки. Формат передаваемой строки - это разделенные запятыми номера или идентификаторы колонок со знаком направления сортировки ( "+" - сортировать по возрастанию; "- " - сортировать по Убыванию; "*" - сортировать по внутреннему значению). Знак направления сортировки можно Указывать до или после обозначения колонки через пробел или без пробела. По умолчанию направление сортировки принимается по возрастанию. ДокумПоДате - необязательный параметр. Имеет смысл только в том случае, если значениями таблицы значений являются документы. В этом случае можно задавать сортировку документов по их хронологии. Число: 1 - сортировка по хронологии Документов; 0 - нет. Значение по умолчанию - 0.
Если ТипСписания=Перечисление.ТипыСписания.FIFO Тогда
142 1С:Предприятие. Практика программирования на платформе V7
ТаблицаПартий.Сортировать("Партия",1);
ИначеЕсли ТипСписания=Перечисление.ТипыСписания.LIFO Тогда
ТаблицаПартий.Сортировать("Партия -" ) ;
Иначе // по средней себестоимости
//Алгоритм списания по средней себестоимости
КонецЕсли;
Организуем цикл выборки партий оборудования из таблицы значений по каждой строке документа.
// Списание по партиям
ТаблицаПартий.ВыбратьСтроки();
Пока ТаблицаПартий.ПолучитьСтроку()=1 Цикл
//Алгоритм списания по парииям
КонецЦикла;
В цикле выборки партий сформируем условие списание партии.
Если ТаблицаПартий.Стоимость=ВсегоСписать Тогда
//Партию списываем целиком и уменьшим списываемое значение
Иначе
//С партии списываем списываемое значение целиком и обнуляем его
КонецЕсли;
//Поверяем: всё ли списали?
Если ВсегоСписать =0 Тогда
Прервать;
КонецЕсли;
Для определения списываемого количества разделим списываемую стоимость на себестоимость оборудования.
При списании по средней себестоимости:
Результат*Рег.СводныйОстаток(Оборудование,,"Количество")/ Peг.СводныйОстаток(Оборудование,,"Стоимость")
При списании по партии: если партию списываем целиком, то количество списываем из парии, иначе пересчитываем его через себестоимость
IX. Основы построения Оперативного учёта в системе 1С:Предприятие 143
партии:
ВсегоСписать* ТаблицаПартий.Количество/ТаблицаПартий.Стоимость
Запишем движения по регистру Амортизация.
Процедура ОбработкаПроведения()
Рег=Создать0бъект("Регистр.Амортизация");
ТаблицаПартий=Создать0бъект("ТаблицаЗначений");
Если ИтогиАктуальны()=0 Тогда
Peг.ВременныйРасчет();
РассчитатьРегистрыНа(ТекущийДокумент());
КонецЕсли;
ВыбратьСтроки();
Пока ПолучитьСтроку() =1 Цикл
// Списание по Оперативному учету
ВсегоСписать=Результат; // определим списываемое значение
Дефицит=Рег.СводныйОстаток(Оборудование,,"Стоимость")-ВсегоСписать;
Если Дефицит0 Тогда
Предупреждение("Дефицит по оборудованию "+Оборудование+" = "+ Дефицит +РазделительСтрок+" Документ нельзя проводить!!!");
// Отмена проведения документа СтатусВозврата(0) ;
Возврат;
КонецЕсли;
Регистр.Амортизация.Оборудование = Оборудование;
Регистр.Амортизация.ПривязыватьСтроку(НомерСтроки);
Peг.УстановитьФильтр(Оборудование,);
Peг.ВыгрузитьИтоги(ТаблицаПартий,1,1);//Создали партии оборудования
//ТаблицаПартий.ВыбратьСтроку(); //отладка
Если ТипСписания=Перечисление.ТипыСписания.FIFО Тогда
ТаблицаПартий.Сортировать("Партия", 1);
ИначеЕсли ТипСписания=Перечисление.ТипыСписания.LIFO Тогда
ТаблицаПартий.Сортировать("Партия -") ;
Иначе // по средней себестоимости
//Алгоритм списания по средней себестоимости Регистр.Амортизация.Количество =
144 1С:Предприятие. Практика программирования на платформе V7
Результат*Рег.СводныйОстаток(Оборудование,,"Количество")/ Per.СводныйОстаток(Оборудование,,"Стоимость");
Регистр.Амортизация.Стоимость= Результат;
Регистр.Амортизация.ДвижениеРасходВыполнить();
Продолжить;
КонецЕсли;
// Списание по партиям ТаблицаПартий.ВыбратьСтроки();
Пока ТаблицаПартий.ПолучитьСтроку()=1 Цикл
Регистр.Амортизация.Партия = ТаблицаПартий.Партия;
Если ТаблицаПартий.Стоимость=ВсегоСписать Тогда
//Партию списываем целиком и уменьшим списываемое значение
Регистр.Амортизация.Количество = ТаблицаПартий.Количество;
Регистр.Амортизация.Стоимость= ТаблицаПартий.Стоимость;
ВсегоСписать=ВсегоСписать-ТаблицаПартий.Стоимость;
Иначе
//С партии списываем списываемое значение целиком и обнуляем его
Регистр.Амортизация.Количество - ВсегоСписать* ТаблицаПартий.Количество/ТаблицаПартий.Стоимость;
Регистр.Амортизация.Стоимость = ВсегоСписать;
ВсегоСписать=0;
КонецЕсли;
Регистр.Амортизация.ДвижениеРасходВыполнить();
//Проверим: всё ли списали?
Если ВсегоСписать = 0 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
9.5. Особенности временного расчета регистров оперативного учета
Если мы откроем форму объекта, например: отчета, который создает временный расчет по регистру Амортизация, и, не закрывая эту форму, откроем документ Амортизация, который тоже создает временный расчет по регистру Амортизация, то, при неправильном конфигурировании,
/X. Основы построения Оперативного учёта в системе 1С:Предприягие 145
программа может сообщить об ошибке. Такая ситуация возникает, если переменная типа регистр создана в глобальном модуле или объявлена в модуле формы и после выполнения временного расчета продолжает существовать. Чтобы избежать таких ситуаций следует либо использовать переменные создаваемые непосредственно в момент выполнения процедуры, либо отключать регистр от временного расчета, после, того как он был использован.
Еще одну особенность временных расчетов следует учитывать при проведении документов. Если в алгоритме проведения документа анализируются остатки и выполняются движения регистра, то при использовании текущих итогов регистра после записи каждого движения итоги изменяются, чтобы поддерживать временный расчет регистров в актуальном состоянии необходимо использовать метод Актуальность() со значением параметра равным 1 - Актуальность( 1).
Упражнение 26. В Форме списка справочника Оборудование вывести текущие остатки по стоимости конкретного оборудования (элементу справочника) из регистра Амортизация.
В ФормеСписка справочника Оборудование, в табличной его части создадим реквизит типа текст с заголовком Ост., а в поле формула на закладке Дополнительные выше описанного реквизита введем соответствующее выражение. Напоминаю, что получить элемент по строке формы списка можно с помощью метода ТекущийЭлемент().
Упражнение 27. (Необязательное) В выше описанном поле показать остатки по элементам и суммарные остатки по группам справочника.
Метод ЭтоГруппаО для справочников возвращает флаг группы: 1 - если элемент является группой, 0 -если это обычный элемент.
Вопросы для самоконтроля
На какой момент времени возвращаются остатки по регистрам, если не задан временный расчет регистров?
Когда необходимо для получения остатков выполнить временный расчет регистров?
В каких текстовых модулях определен метод ИтогиАктуальны(). В чем отличия регистров остатков от оборотных регистров?
146 1С:Предприятие. Практика программирования на платформе V7
Что произойдет с базой данных, если изменить тип реквизита документа, участвующего в формировании аналитики по регистру?
Что произойдет с базой данных, если изменить тип измерения регистра? Назовите преимущества и недостатки партионного учета.
X. Основы построения Бухгалтерского учёта в системе 1С:Предприятие 147
X. Основы построения Бухгалтерского учёта в системе 1С:Предприятие
10.1. Принцип двойной записи. Баланс
Двойная запись — прием учета, когда сумма и др. атрибуты каждой хозяйственной операции фиксируются дважды:
по дебету одного счета записывается изменение актива или обязательства,
по кредиту другого (корреспондирующего) счета указывается источник, за счет которого произошло это изменение.
Дебет - он должен Кредит - он верит
Впервые описана Лукой Пачоли в 1494 г. в книге Сумма арифметики, геометрии, учения о пропорциях и отношениях, в разделе Трактат о счетах и записях , посвященной применению математики в коммерции.
Баланс
Слово баланс происходит от латинского выражения bi lanx — две чашки и означает равновесие.
Баланс — система показателей, отражающая поступление и расходование средств путем их сопоставления на определенную дату.
Бухгалтерский баланс состоит из двух частей: пассива и актива.
Актив Пассив
Имущества Источники
Права Обязательства к уплате
Обязательства к получению
Таким образом, общий принцип двойной записи заключается в том, что каждая операция одновременно фиксируется как изменение активов (приход) и пассивов (расход). Если после суммирования записей в каждом разделе суммы не совпадают, следует искать ошибку.
Равновесие бухгалтерского баланса - это равенство итогов актива и пассива, так как в активе баланса показываются хозяйственные средства предприятия, а в пассиве - источники этих средств, т.е. те же самые средства, но сгруппированные по другому признаку - по источникам их формирования.
148 1С:Предприятие. Практика программирования на платформе V7
10.2. Бухгалтерские счета
Все хозяйственные операции находят свое отражение на счетах бухгалтерского учета. Если зафиксировать показатели учета на определенную дату, они будут представлены в виде остатков (сальдо) по счетам. При рассмотрении показателей во времени, принято оперировать понятием отчетного периода, в котором можно выделить начальные остатки, обороты и конечные остатки по счетам.
Другими словами бухгалтерский счет - это "регистр", на котором ведется учет некоторого разреза хозяйственной деятельности предприятия. Отличие от регистров оперативного учета в том, что балансовые счета — это взаимосвязанные разрезы учета. Взаимосвязь счетов обусловлена корреспонденциями — то есть двойными записями.
Сальдо и обороты по счетам бухгалтерского учета (самолетики)
Оборот - приход или расход объекта учета на счете за определенный период времени.
Сальдо — остаток объекта учета на счете на дату сальдирования (расчета остатка).
Балансовые счета можно разделить на активные, пассивные и активно-пассивные. Активные счета имеют дебетовое сальдо (остаток), пассивные кредитовое сальдо (остаток). Красным неправильным сальдо называют ненулевое конечное кредитовое сальдо на активном счете или конечное дебетовое сальдо на пассивном счете в конце балансового периода. Активно-пассивные счета позволяют в одном разрезе учета вести и активные, и пассивные статьи баланса.
СНД — сальдо начальное дебетовое, СКД — сальдо конечное дебетовое, ДО — дебетовый оборот, КО — кредитовый оборот, СНК — сальдо конечное кредитовое, СКК — сальдо конечное кредитовое.
X. Основы построения Бухгалтерского учёта в системе 1С:Предприятие 149
10.3. Виды метаданных компоненты Бухгалтерский учет
План счетов - представляет собой таблицу, каждая строка которой отражает определенный счет или субсчет бухгалтерского учета.
Бухгалтерский счет — (далее Счет) это "регистр", на котором ведется учет некоторого разреза хозяйственной деятельности предприятия. Счета бывают Активные, Пассивные и Активно-Пассивные.
Виды Субконто предназначены для определения объектов аналитического учёта по счетам, могут принимать значения справочников, документов, перечислений и базовых типов данных.
Проводка (корреспоненция) — это связь счетов б/у обусловленная одной хозяйственной операцией. Она предназначена для изменения состояния средств, отражаемых в бухгалтерском учёте. Содержит корреспондирующие счета, сумму, информацию по синтетическому и аналитическому учёту, а также дополнительные реквизиты.
Операция - совокупность проводок, отражающих в бухгалтерском учёте хозяйственную операцию.
В системе 1С: Предприятие счета предназначены для хранения планов счетов бухгалтерского учета, то есть объектов синтетического учета средств предприятия. Если в конфигурации не определены планы счетов - нельзя создать бухгалтерский документ.
150 1С:Предприятие. Практика программирования на платформе V7
Представленные в окне планов счетов свойства устанавливаются для любого плана счетов, создан ного в конфигурации.Например, нельзя создать два плана счетов с различным набором реквизитов счета или с различными разделителями учета.
В качестве разделителя учета можно выбрать любой реквизит журнала проводок.
Интерактивные формы тоже являются общими для всех планов счетов. Обычно, для различных планов счетов, настраивают формы списка с различными наборами элементов формы и при открытии плана счетов жестко (программно) указывают, какую форму списка открывать для данного плана счетов.
Для ведения валютного учета (вычисления рублевого покрытия валютных сумм) необходимо предусмотреть в конфигурации Справочник с реквизитами Курс и Кратность, а в документах, формирующих бухгалтерские проводки, реквизит, ссылающийся на этот справочник.
Чтобы можно было вести на счете аналитический учет в разрезе субконто, необходимо установить значение Макс. Количество субконто больше нуля.
Очень важный параметр Количественный учет Только по аналитике. Если он установлен, Вы не получите ни сальдо, ни обороты по количеству в разрезе счетов. В этом случае количественный учет возможен только в разрезе субконто. Если Вашему бухгалтеру необходимо видеть количественные сальдо и обороты по субсчетам, необходимо снять этот флажок и перепровести документы бухгалтерского учета.
Операции и проводки
Х. Основы построения Бухгалтерского учёта в системе 1С:Предприятие 151
Создадим реквизит проводки ТипУчета типа перечисление ТипыУчета и разделитель учета в свойствах планов счетов.
В нашем примере мы создадим структуру бухгалтерского учета для списания оборудования по партиям, аналогичную структуре оперативного учета.
Создадим два вида субконто, аналогичные измерениям регистра Амортизация. Эту операцию можно сделать методом drag drop в дереве метаданных. Перетащим последовательно измерения регистра на ветку Виды Субконто.
В окне планов счетов создадим План счетов Учебный и определим максимальное количество субконто — 2. В учебном плане счетов создадим группу счетов с субсчетами. Иерархия в плане счетов определяется шаблоном кода.
Новый счет удобно вводить клавишей Ins или через меню Действия - Новая строка. Учет не списанного оборудования будем вести на Активном счете, а списанного - на Пассивном. Количественный учет и Субконто1-
152_ 1С:Предприятие. Практика программирования на платформе V7
Оборудование определим по группе счетов, а Субконто2 — Партия только на активном счете.
При создании бухгалтерских запросов надо внимательно просмотреть, как заданы параметры счета в плане счетов. Если параметр счета задан только на субсчете, как Субконто2 — Партия, то итоговые значения сальдо и оборотов по группе счетов для этого параметра не накапливаются.
Важной особенностью бухгалтерских счетов является возможность создания счетов, как в конфигурации, так и в самой информационной базе. Последние не помечены красной галочкой и могут редактироваться в режиме Предприятие, даже если по ним сформированы проводки ручными операциями или бухгалтерскими документами. После такого редактирования, необходимо перепровести всю базу; итоги при этом изменятся.
10.3.1. Виды субконто
Термин субконто используется для обозначения набора значений, используемых для ведения аналитического учета по счету. Buд субконто идентифицирует совокупность объектов конкретного типа, которые могут использоваться для ведения аналитического учета. Значение субконто в проводке - это ссылка на объект аналитики.
Созданные виды субконто указываются при настройке аналитического учета по счетам. Для каждого счета допускается использование до 5 видов субконто, что позволяет вести многомерный аналитический учет. Ведение многоуровневого аналитического учета реализуется путем использования многоуровневых справочников.
X Основы построения Бухгалтерского учёта в системе 1С:Предприятие 153
Свойства объекта аналитики: тип значения, свойство отбора, ссылки на его цены и представления объекта, настраиваются при конфигурировании вида субконто
В нашем примере установим признак отбора для субконто Оборудование.
Свойства количественного, валютного и суммового учета по субконто определяются непосредственно на счетах.
Субконто на счетах имеют назначение аналогичное измерениям оборотного регистра. Отличие заключается в том, что в корреспонденции мы задаем одну и ту же ссылку на объект аналиZики на разных счетах, что позволяет получить обороты между корреспондирующими счетами по объекту аналитики.
10.3.2. Атрибуты операции и проводки
Бухгалтерская операция имеет аналогию с документом, это просто другое представление документа.
Атрибуты операции — это реквизиты шапки, они, как правило, и берутся из Шапки бухгалтерского документа:
ДатаОперации (Дата, обычно это дата документа), Содержание (обычно произвольная строка),
154 1С:Предприятие. Практика программирования на платформе V7
СуммаОперации (Число, обычно это итог по сумме — Итог(Сумма)),
Документ (ссылка на документ, создавший операцию). Атрибуты проводки — это реквизиты многострочной части.
Количество (Число),
Валюта (элемент справочника, определенный в свойствах планов счетов для валютного учета),
ВалСумма (Число),
Сумма (Число, для валютных счетов — это рублевое покрытие).
Параметры синтетического и аналитического учета задаются в проводке по дебету и кредиту:
Атрибуты Дебета и Кредита:
• Счет,
Субконто (виды и количество субконто определяются выбранным счетом).
Упражнение 28 В документе Приход создайте реквизит шапки ТипУчета типа перечисление ТипыУчета. Предусмотрите ввод его значения по умолчанию -текущее значение константы ТекТипУчета, при создании нового документа в информационной базе.
Х Основы построения Бухгалтерского учёта в системе 1С:Предприятие 155
В зависимости от значения этого реквизита мы будем выполнять движения по документу. У этого перечисления три значения: Красное, Белое и Черное. Определим условия проведения документа.
В результате если значение перечисления Красное — документ будет проведен и по оперативному, и по бухгалтерскому учету.
Описание алгоритма Операции в модуле документа.
После того, как мы сконфигурировали объекты бухгалтерского учета можно создать в модуле приходного документа операцию с проводками.
Проводки по документу создаются через атрибут Операция.
Упражнение 29. Создадим алгоритм формирования операции по документу Приход с учетом формирования партии приходным документом и условия списания по бухгалтерскому или оперативному учету.
В окне редактирования документа установим флаг Бухгалтерский учет, а в модуле документа отредактируем предопределенную процедуру ОбработкаПроведения(). Операцию также можно создать с помощью конструктора формирования операций, но процедуру ОбработкаПроведения() надо будет потом отредактировать.
156 1С:Лрвдприятие. Практика программирования на платформе V7
В конструкторе заполним атрибуты операции и проводки. Определяемый атрибут проводки выеляем в нижней таблице. Формулу, вычисляющую его значения, определяем по значению или берем из данных документа.
После редактирования модуль документа должен выглядеть примерно так:
// ********************
Процедура ОбработкаПроведения()
ВыбратьСтроки();
Пока ПолучитьСтроку() =1 Цикл
// Запись истории периодического реквизита справочника
Если НовЦенаоОборудование. Цена. Получить (ТекудийДокумент () ) Тогда
ПривязыватьСтроку(НомерСтроки);
УстановитьРеквизитСправочника(Оборудование,"Цена",НовЦена);
КонецЕсли;
Если ТипУчетаоПеречисление.ТипыУчета.Бел Тогда
//}}ДВИЖЕНИЯ_РЕГИСТРОВ
Регистр.Амортизация.Оборудование = Оборудование; Регистр.Амортизация.Партия = ТекущийДокумент(); Регистр.Амортизация.Количество = Количество* Единица.Коэффициент;
Регистр.Амортизация.Стоимость = Сумма;
Х Основы построения Бухгалтерского учёта в системе 1С:Предприятие 157
Регистр.Амортизация.ПривязыватьСтроку(НомерСтроки);
Регистр.Амортизация.ДвижениеПриходВыполнить();
//}}ДВИЖЕНИЯ_РЕГИСТРОВ
КонецЕсли;
Если ТипУчетаоПеречисление.ТипыУчета.Чер Тогда
//{{Ф0РМИР0ВАНИЕ_ОПЕРАЦИИ
Операция.НоваяПроводка();
Операция.Дебет.Счет =СчетПоКоду("ОБ.ПР",ПланыСчетов.Учебный);
Операция.Дебет.Оборудование = Оборудование;
Операция.Дебет.Партия = ТекущийДокумент();
Операция.Кредит.Счет=СчетПоКоду("ОБ.СП",ПланыСчетов.Учебный); Операция.Кредит.Оборудование = Оборудование;
Операция.Количество = Количество*Единица.Коэффициент;
Операция.Сумма = Сумма;
Операция.ТипУчета = ТипУчета;
КонецЕсли;
КонецЦикла;
Если ТипУчетаоПеречисление.ТипыУчета.Чер Тогда
Операция.Содержание = "Приход оборудования";
Операция.СуммаОперации = Итог("Сумма");
Операция.Записать();
//}}ФОРМИРОВАНИЕ_ОПЕРАЦИИ
КонецЕсли;
КонецПроцедуры
Обратите внимание, что, в отличие от движений регистров, для которых записывается каждое движение по строке документа, проводки по документу записываются в информационную базу все сразу при записи операции. Если возникает необходимость записать сформированные проводки, например, Чтобы посмотреть бухгалтерские итоги, используется метод Операция.ЗаписатьПроводки(). Метод может использоваться только для атрибута "Операция" документа в момент проведения (в процедуре ОбработкаПроведения). При этом происходит обновление бухгалтерских итогов. Это позволяет при проведении документа обращаться к бухгалтерским итогам, уже измененным проводками, записанными этим документом. После
158 1С:Предприятие. Практика программирования на платформе V7
выполнения метода ЗаписатьПроводки() и до окончания процедуру ОбработкаПроведение уже невозможно изменять или удалять проводки добавленные до вызова этого метода. Данный метод имеет смысл использовать, только в том случае, если существует необходимость обращения к итогам, измененным проводками записываемой операции. При записи сложной проводки, если у главной корреспонденции сложной проводки не указана сумма (равна 0), то она автоматически вычисляется на основании подчиненных корреспонденции.
При добавлении нового субконто или валютного учета (+) по счёту в плане счетов, в модулях документов, по которым проводки формируются интерактивно, необходимо прописать движения по созданным атрибутам счёта: тип субконто или ВалСумма.
Операция. ВалСумма=...;
10.4. Бухгалтерские итоги
Бухгалтерские Итоги (далее БИ) - это служебный объект позволяющий читать и отбирать информацию из объектов метаданных бухгалтерского учета. Он имеет два режима: режим итогов и режим бухгалтерского запроса.
10.4.1. Режим
В режиме Итогов выводится информация текущего периода или любого произвольного периода. В последнем случае БИ надо рассчитать на нужный период с помощью метода Рассчитать(ДатаНачала, ДатаКонца)
БИ.Рассчитать(НачалоПериода,КонецПериода,ФильтрПоСчетам,ТолькоСинтетика,
ПланСчетов,РазделительУчета);
ФильтрПоСчетам - необязательный параметр. Счета, для которых будет выполняться временный расчет
итогов. Задается значением типа "Счет" или объектом типа ''СписокЗначений", содержащим значения
типа "Счет", либо строкой, содержащей список кодов счетов, разделенных символом "," или ";"
("АМ.ПР;АМ.СП") .
ТолькоСинтетика - необязательный параметр: 1 - рассчитывать сальдо только по счетам; 0 - или не
указан - рассчитывать сальдо по счетам и по субконто.
Метод БИ. ОсновныеИтоги() переводит БИ в режим работы с итогами текущего периода
(основными итогами). Вызов этого метода имеет смысл тогда, когда ранее был выполнен расчет
временных итогов или запрос, и нужно вернуть объект к работе с основными итогами. При этом
результаты запроса или расчета временных итогов теряются.
X. Основы построения Бухгалтерского учёта в системе 1С:Предприятие 159
БИ.СНД(Счет,ТипСуммы,Валюта,Субконто1...)
Возвращает дебетовое сальдо по счету на начало периода.
Счет - значение типа "Счет" или строка - код счета.
ТипСуммы - необязательный параметр.
Значения: 1 ("С") - сумма(по умолчанию);
2 ("В") - валютная сумма;
3("К") - количество.
Валюта - необязательный параметр.
Субконто1... - необязательные параметры. Значения субконто. Если параметры не указаны, то итоги
выдаются без учета аналитики.
Список параметров остальных бухгалтерских функций в режиме итогов такой же, кроме оборотов между счетами:
БИ.ОБ(СчетДеб,СчетКр,ТипСуммы,Валюта). Возвращает число - оборот с дебета счета СчетДеб в кредит счета СчетКред
Упражнение 30. В Форме списка справочника Оборудование вывести текущее конечное дебетовое сальдо по сумме конкретного оборудования (элемента справочника), по счету Приход оборудования.
10.4.2. Режим
В режиме запроса с помощью метода БИ.ВыполнитьЗапрос(ДатаН,ДатаК) можно построить в оперативной памяти таблицу выборки и затем выбирать из нее необходимые данные.
БИ.ВыполнитьЗапрос(НачалоПериода,КонецПериода,Счет,КоррСчет,
Валюта,ТипИтогов,Периодичность,ТипСуммы)
ТипИтогов - число - тип отбираемых итогов. Значения: 1 - остатки и обороты по счету в цепом; 2 -
обороты между счетами; 3 - первое и второе вместе. По умолчанию: 1.
Периодичность - число или символьная строка (см. документацию).Позволяет получить
Дополнительный разрез итогов по периодам. По умолчанию периодичность не задана. Значения:
1("Период"); 2("Операция"); З("Проводка"); 4 ("День"); 5 ("'Неделя'); 6 ("Декада"); 7 ("Месяц");
8 ("Квартал"); 9 ("Год").
ТипСуммы - число или строка - тип рассчитываемых итогов. Значения: 1("С") рассчитывать суммы;2
("В") рассчитывать валютные суммы; 4 ("К") рассчитывать количество. Если требуется одновременно
Рассчитывать разные суммы, значение параметра получается путем сложения допустимых значений,
например: 5 (1+4) - рассчитывать суммы и количество.
Перед вызовом этого метода можно установить признак отбора по субсчетам, определить фильтры по субконто и опции запроса.
БИ.Опции(ВклЗабалансовСуммы,ВклОборСубкСуммы)
160 1С:Предприятие. Практика программирования на платформе \/7
Значения: 0 - суммы не включаются;
1 - суммы включаются.
БИ.ВключатьСу6счета(ФлагСчета,ФлагКоррСчета)_Устанавливает режим отбора итогов
методом "ВыполнитьЗапрос" по субсчетам.
ФлагСчета - необязательный параметр. Признак развертывания сальдо по субсчетам основного счета
Значение:О - не разворачить по субсчетам (по умолчанию); 1 - разворачивать по субсчетам; -1 (минус
единица) - не выдавать итоги по счетам-группам.
При установке признака отбора по субсчетам следует иметь в виду, что при установленном флажке Количественный учет Только по аналитике в свойствах Счетов при выборке субсчетов Вы не получите сальдо и обороты по количеству.
БИ.ИспользоватьСубконто(ВидСубконто,Субконто, ТипФильтра,ПоГруппам)
ВидСубконто - значение типа "ВидСубконто" (ВидСубконто.ВидСубконто)- расчет итогов будет
выполнен только для субконто указанного вида.
Субконто - значение Субконто, по которому будут отобраны итоги по аналитике. Если параметр не
задан - то считается пустым значением субконто.
ТипФильтра - Значения: 1 - разворачивать по данному субконто (по умолчанию), 2 - отбирать по
данному субконто, 3 - не учитывать это субконто вообще. ПоГруппам - число - группировка итогов по
субконто. Значения: 0 - не показывать итоги по группам справочника (по умолчанию);
1 - показывать итоги по группам справочника.
При установке фильтров по субконто надо обратить внимание на порядок их установки. Вложенность циклов выборки по субконто должна соответствовать порядку фильтров.
Тип фильтра 2 - отбор по субконто, имеет смысл использовать только для видов субконто с установленным флагом отбора (закладка Дополнительные свойств вида субконто).
X. Основы построения Бухгалтерского учёта в системе 1С:Предприятие 161
Порядок вложенности циклов выборки
Обращение к результатам запроса
Данные из бухгалтерского запроса выбираются в циклах выборки. На рисунке ниже показаны правила вложенности циклов выборки бухгалтерских итогов из запроса.
При обращении к атрибутам выборки, в отличие от методов, не надо ставить скобки - ().
162 1С:Предприятив. Практика программирования на платформе V7
При обращении в запросе к остаткам, оборотам и развернутому сальдо указывается только один параметр - ТипСуммы:
Если параметр не указан, метод возвращает сумму.
Создание таблицы партий с помощью бухгалтерского запроса
Сформируем в модуле документа Амортизация бухгалтерский запрос и заполним таблицу бухгалтерских партий.
Обратите внимание на порядок вызова методов ИспользоватьСубконто() -он должен соответствовать иерархии субконто на счетах указанных в методе ВыполнитьЗапрос(). Порядок вложенности циклов выборки бухгалтерских итогов методами ВыбратьСубконто() и ПолучитьСубконто() должен соответствовать последовательности установки фильтров по субконто методом ИспользоватьСубконто().
В процедуре Партии(ЗначениеОборудования) мы сформируем таблицу партий оборудования, по которым конечное сальдо больше нуля. При вызове процедуры в параметр надо передать значение оборудования, по которому необходимо получить партии.
Перем ТаблицаБухгПартий, Ит;
Процедура Партии(ЗначениеОборудования)
Если ПустоеЗначение(ТаблицаБухгПартий)=0 Тогда
ТаблицаБухгПартий.УдалитьСтроки();
КонецЕсли;
Ит = СоздатьОбъект("БухгалтерскиеИтоги");
Ит.ИспользоватьСубконто(ВидыСубконто.Оборудование, ЗначениеОборудования, 2);// Отбор
Ит.ИспользоватьСубконто(ВидыСубконто.Партия,, 1);
Ит.ВыполнитьЗапрос(НачКвартала(ДатаДок),ДатаДок,"ОБ.ПР",,,1,,"СК");
X. Основы построения Бухгалтерского учёта в системе 1С:Предприятие 163
// Цикл по субконто 1 (Оборудование) не делаем,
// т.к. указан отбор по субконто
Ит.ВыбратьСубконто(2);
Пока Ит.ПолучитьСубконто(2) = 1 Цикл
ТаблицаБухгПартий.НоваяСтрока();
ТаблицаБухгПартий.Партия=Ит.Субконто(2);
// Сальдо конечное дебетовое;
ТаблицаБухгПартий.СКДСум = Ит.СКД();
ТаблицаБухгПартий.СКДКол = Ит.СКД(З);
КонецЦикла;
КонецПроцедуры
Ит=СоздатьОбъект("БухгалтерскиеИтоги); Ит.ИспользоватьПланСчетов(ПланыСчетов.Учебный); ТаблицаБухгПартий=Создать0бъект("ТаблицаЗначений"); ТаблицаБухгПартий.НоваяКолонка("Партия"); ТаблицаБухгПартий.НоваяКолонка("СКДСум"); ТаблицаБухгПартий.НоваяКолонка("СКДКол");
164 1С:Предприятие. Практика программирования не платформе V7
Упражнение 31. Создадим алгоритм формирования операции по документу Амортизация с учетом списания оборудования по партиям.
Отредактируем процедуру ОбработкаПроведения() в документе Амортизация. В цикле выборки строк документа, для списания по бухгалтерским партиям, будем вызывать процедуру Партии(), в цикле выбирать партии из таблицы значений и списывать их по соответствующим счетам.
Так как Оборудование списывается и по оперативному и по бухгалтерскому учету, запрет на списание, если имеется дефицит, надо снять.
Процедура ОбработкаПроведения()
Перем Сообщение1;
Рег=Создать0бъект ( "Регистр. Амортизация" ) ;
ТаблицаПартий=Создать0бъект ( "ТаблицаЗначений" ) ;
Если ИтогиАктуальны()=0 Тогда
Peг.ВременныйРасчет() ;
РассчитатьРегистрыНа(ТекущийДокумент());
КонецЕсли;
ВыбратьСтроки();
Пока ПолучитьСтроку() = 1 Цикл
// Списание по Оперативному учету
// определим списываемое значение
ВсегоСписать=Результат;
X. Основы построения Бухгалтерского учёта в системе 1С:Предприятие 165
Дефицит=Рег.СводныйОстаток(Оборудование,,"Стоимость")-ВсегоСписать;
Если Дефицит0 Тогда
Сообщение1="Дефицит по остаткам "+Оборудование+" = "+Дефицит+"!";
Предупреждение(Сообщение1);
Перейти ~БухгалтерскийУчет; // Переход по метке
// Отмена проведения документа //
СтатусВозврата(0);
//Возврат;
КонецЕсли;
Регистр.Амортизация.Оборудование = Оборудование; Регистр.Амортизация.ПривязыватьСтроку(НомерСтроки); Peг.УстановитьФильтр(Оборудование,);
Рег.ВыгрузитьИтоги(ТаблицаПартий,1,1);//Создали партии оборудования
//ТаблицаПартий.ВыбратьСтроку(); //отладка
Если ТипСписания=Перечисление.ТипыСписания.F1FО Тогда
ТаблицаПартий.Сортировать("Партия",1) ;
ИначеЕсли ТипСписания=Перечисление.ТипыСписания.LIFO Тогда
ТаблицаПартий.Сортировать("Партия -") ;
Иначе // по средней себестоимости
//Алгоритм списания по средней себестоимости Регистр.Амортизация.Количество =
Результат*Рег.СводныйОстаток(Оборудование,,"Количество")/ Peг.СводныйОстаток(Оборудование,,"Стоимость") ;
Регистр.Амортизация.Стоимость= Результат;
Регистр.Амортизация.ДвижениеРасходВыполнить();
Продолжить;
КонецЕсли;
// Списание по партиям оперативного учета
ТаблицаПартий.ВыбратьСтроки();
Пока ТаблицаПартий.ПолучитьСтроку()=1 Цикл
Регистр.Амортизация.Партия = ТаблицаПартий.Партия;
Если ТаблицаПартий.Стоимость=ВсегоСписать Тогда
//Партию списываем целиком и уменьшим списываемое значение
Регистр.Амортизация.Количество = ТаблицаПартий.Количество;
Регистр.Амортизация.Стоимость= ТаблицаПартий.Стоимость; ВсегоСписать=ВсегоСписать-ТаблицаПартий.Стоимость;
166 1С:Предприятие. Практиа программирования на платформе V7
Иначе
//С партии списываем списываемое значение целиком и обнуляем его
Регистр.Амортизация.Количество = ВсегоСписать* ТаблицаПартий.Количество/ТаблицаПартий.Стоимость; Регистр.Амортизация.Стоимость = ВсегоСписать;
ВсегоСписать=0;
КонецЕсли;
Регистр.Амортизация.ДвижениеРасходВыполнить();
//Проверим: всё ли списали?
Если ВсегоСписать =0 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
// Списание по Бухгалтерскому учету
// определим списываемое значение
// Установим метку безусловного перехода
~БухгалтерскийУчет: Списать=Результат;
Партии(Оборудование);
// Проверим Сальдо по сумме
Дефицит=ТаблицаБухгПартий.Итог("СКДСум")-Списать;
Если Дефицит0 Тогда
Сообщить("Бухгалтерский дефицит по оборудованию " + Оборудование+" = "+Дефицит ) ;
// Операцию не формировать
Продолжить;
КонецЕсли;
Если ТипСписания=Перечисление.ТипыСписания.FIFO Тогда
ТаблицаБухгПартий.Сортировать("Партия",1);
ИначеЕсли ТипСписания=Перечисление.ТипыСписания.LIFO Тогда
ТаблицаВухгПартий.Сортировать("Партия -") ;
Иначе // по средней себестоимости
//Алгоритм списания по средней себестоимости Операция.НоваяПроводка();
X. Основы построения Бухгалтерского учёта в системе 1С:Предприятие 167
Операция.Кредит.Счет=СчетПоКоду("ОБ.ПР",ПланыСчетов.Учебный);
Операция.Кредит.Оборудование = Оборудование;
Операция.Кредит.Партия = ТекущийДокумент();
Операция.Дебет.Счет=СчетПоКоду("ОБ.СП".ПланыСчетов.Учебный);
Операция.Дебет.Оборудование = Оборудование;
Операция.Количество=Результат* ТаблицаБухгПартий.Итог("СКДКол")/ ТаблицаБухгПартий.Итог("СКДСум");
Операция.Сумма = Результат;
Продолжить;
КонецЕсли;
// Списание по партиям Бухгалтерского учета ТаблицаБухгПартий.ВыбратьСтроки();
Пока ТаблицаБухгПартий.ПолучитьСтроку()=1 Цикл
Операция.НоваяПроводка();
Операция.Кредит.Счет=СчетПоКоду("ОБ.ПР", ПланыСчетов.Учебный);
Операция.Кредит.Оборудование = Оборудование;
Операция.Кредит.Партия = ТаблицаБухгПартий.Партия;
Операция.Дебет.Счет=СчетПоКоду("ОБ.СП".ПланыСчетов.Учебный);
Операция.Дебет.Оборудование = Оборудование;
Операция.ТипУчета = ТаблицаБухгПартий.Партия.ТипУчета;
Если ТаблицаБухгПартий.СКДСум =Списать Тогда
Операция.Количество= ТаблицаБухгПартий.СКДКол;
Операция.Сумма = ТаблицаБухгПартий. СКДСум;
Списать = Списать -ТаблицаБухгПартий. СКДСум;
Иначе
Операция.Количество= Списать*
ТаблицаБухгПартий.СКДКол/ТаблицаБухгПартий.СКДСум;
Операция. Сумма = Списать;
Списать = 0;
168 1С:Предприятив. Практика программирования на платформе V7
КонецЕсли;
//Проверим: всё ли списали?
Если Списать =0 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Операция.Содержание = "Списание оборудования";
Операция.СуммаОперации = Итог("Результат");
Операция.Записать();
КонецПроцедуры
Вопросы для самоконтроля
Что общего у бухгалтерского и оперативного учета?
Чем отличается бухгалтерский учет от учета на оборотных регистрах?
Чем отличается бухгалтерский учет от учета на регистрах остатков?
Что представляет из себя служебный объект Бухгалтерские Итоги?
XI. Основы построения объектов компоненты Расчет 169
XI. Основы построения объектов компоненты Расчет
Виды метаданных, используемые компонентой Расчёт
Журналы расчетов предназначены для хранения записей сложных периодических расчетов и их предыстории.
Календари предназначены для вычисления интервалов времени по различным графикам учета времени.
Виды расчетов - предназначены для написания алгоритмов расчетов в системе и определения приоритетов расчета и вытеснения для записи расчета.
Группы расчетов - предназначены для объединения видов расчетов, по каким - либо признакам для облегчения дальнейшей работы с ними.
11.1. Журналы расчетов
Журнал расчетов служит для просмотра и редактирования расчетов, произведенных в системе. В журнале расчетов накапливаются записи расчетов. Каждый журнал предназначен для выполнения расчетов по одному типу объектов - определенному справочнику системы. Для каждой записи журнала расчетов в качестве объекта указывается один из элементов этого справочника. Обязательно определяется вид расчета, а также как правило, указывается дата начала и дата окончания действия записи, рассчитанное значение записи записывается в атрибут Результат.
Для одного справочника могут быть созданы несколько журналов расчетов, каждый из которых будет содержать данные определенной предметной области.
Дата отсчета журнала расчетов определяет точку отсчета периода, заданного в журнале расчетов.
Если журнал расчетов уже содержит записи, система не позволяет изменить периодичность журнала расчетов.
В одной конфигурации может быть произвольное количество журналов расчетов. После создания журнала расчетов необходимо вставить в меню регламентную процедуру смены расчетного периода журнала.
Каждая строка Журнала расчетов содержит результат расчета для одного из объектов. Такие записи называются строками журнала расчетов и характеризуются следующими данными:
Объектом, для которого произведен расчет,
170 1С:Предприятие. Практика программирования на платформе V7
Видом расчета - определенным алгоритмом расчета, записанным в модуле вида расчета (начисление или удержание при расчете заработной платы),
Документом, который породил данную запись журнала расчетов с помощью методов ВвестиРасчет(?,,,,) или ЗаписатьРасчет(?,,„). Например: документ начала месяца, отпуск, больничный и т.д.,
Родительским документом, который ввел данную запись журнала расчетов
методом ВвестиРасчетНаОсновании(?,,,,,) или
ЗаписаZьРасчетНаОсновании(?,,,,,).
Протяженностью действия записи журнала расчетов (определяется датой начала и датой окончания данного расчета),
Периодом регистрации (в каком периоде журнала расчетов зарегистрирована данная запись) и периодом действия записи журнала расчетов (запись может действовать (рассчитываться) в нескольких подряд идущих периодах). Периоды журнала расчетов — это агрегатные объекты, характеризующиеся в свою очередь датой начала и датой окончания данного периода.
Результатом расчета, который рассчитывается по алгоритму, предусмотренному в модуле вида расчета, соответствующего данной записи или устанавливается при вводе записи расчета. Результат может быть исправлен пользователем.
Первичной записью, которая указывает на запись журнала расчетов, перерасчетом которой является данная запись.
Статус записи можно прочитать по значениям флажков типа число, с возможными значениями 0 и 1.
Перерасчет - показывает, что запись является перерасчетом другой (первичной) записи прошлого периода, и введена методом методом ВвестиПерерасчет() или ВвестиПерерасчетНаОсновании()
Эти методы вводят копию первичной записи, не заполняя атрибут Результат. При расчете записи перерасчета Результат будет вычислен за вычетом значения результата первичной записи.
Сторно — показывает, что запись была сторнирована. Признак 'сторно' равен 1 не только для простых сторно-записей, но и для рассчитанных, отредактированных вручную или зафиксированных (не подлежащих редактированию) сторно-записей. Если сторнирующая запись введена программным образом, т.е. атрибут Сторно задан применением метода
XI. Основы построения объектов компоненты Расчет 171
УстановитьРеквизит () или непосредственным присвоением,
ЖрнРаcчета = СоздатьОбъект("ЖурналРасчета.Зарплата"); ЖрнРасчета.Сторно = 1;
тогда он может быть переопределен программным образом. Рассчитана — указывает, что запись рассчитана. Исправлена — указывает, что запись исправлена вручную.
Фиксирована — указывает, что результат расчета записи защищен от исправления.
Период расчетов
Журнал расчетов предназначен для проведения повторяющихся через равные промежутки времени расчетов. Все записи журнала расчетов расположены во времени в том или ином временном интервале, называемом расчетным периодом. Расчетный период, как говорилось выше, — это агрегатный объект, характеризующиеся в свою очередь датой начала и датой окончания периода.
Величина расчетного периода может принимать одно из следующих значений: день, неделя,
месяц,
квартал,
172 1С:Предприятие. Практика программирования на платформе V7
год.
Если журнал расчетов уже содержит записи, система не позволяет изменить периодичность журнала расчетов.
Предопределенные процедуры модуля формы журнала расчетов
ПриИсправленииРезультата - процедура, которая отрабатывает в момент исправления результата расчета записи журнала расчетов пользователем.
ПриОтменеИсправления - процедура, которая отрабатывает в момент отказа пользователя от редактирования.
ПриРасчете - процедура, которая отрабатывает в момент выполнения одной из трех команд РасечитатъЗапись, РассчитатьОбъект или РассчитатъДокумент.
ПриУстановкеОтбора - процедура, которая отрабатывает в момент установки отбора в форме журнала расчетов.
ПриУстановкеГраницыПросмотра - процедура, которая отрабатывает в момент установки границы просматриваемых в журнале расчетов записей.
ПриУстановкеПредставления - процедура, которая отрабатывает в момент установки представления журнала расчетов (по всем объектам расчетов, по одному объекту расчета, по одному документу расчета).
11.2. Конфигурирование объектов компоненты Расчет
11.2.1. Объекты метаданных - Календарь
Календари хранят данные о структуре периода расчетов. При конфигурировании календарей описывается порядок их автозаполнения.
В дереве метаданных выделим ветвь Календари, в главном меню выберем пункт Действие и в появившемся подменю пункт Новый элемент. В появившейся форме на закладке Общие введем идентификатор Пятидневка, а на закладке Календарь график работы оборудования семидневку с 10-ти часовым рабочим днем и двумя выходными, стартовую
XI. Основы построения объектов компоненты Расчет 173
дату, начиная с которой будет вестись расчет по календарю, установим на любой понедельник. Нажав на кнопку ОК, сохраним объект.
Упражнение 32. Создайте два календаря: для сменной работы: - 12 часов и два выходных и для оборудования, которое работает постоянно - не выключается. Введите все три календаря в пользовательский интерфейс.
В жизни иногда случаются праздники. В системе 1С:Предприятие праздники можно задать программно,
Праздник=Создать0бъект("Праздники");
Праздник.Новый('01.01.02',КоличествоРабочихЧасов);
Подробнее смотрите 1С:Предприятие Версия 7.7 Описание встроенного языка Часть 2,стр.607-609. Также можно создать пункт меню в пользовательском интерфейсе, который позволит вводить праздники. Создадим такой пункт меню.
Откроем свойства нового элемента меню, Выберем объект Календари, Выберем команду Календари.Праздники, Отредактируем Название и Подсказку.
174 1С:Предприятие. Практика программирования на платформе V7
11.2.2. Создание объектов метаданных - Группа расчетов и Вид расчета.
Виды расчетов служат для описания алгоритмов, по которым выполняются те или иные вычисления по строке журнала Расчетов. Объект вид расчета не имеет интерактивной формы, но, аналогично документу, у которого есть модуль документа, имеет модуль расчета, в котором доступны атрибуты и реквизиты записи журнала расчетов.
Группы расчетов служат для того, чтобы можно было оперировать не только результатами расчетов по конкретным видам, но и результатами по нескольким видам расчетов
При проведении документ Приход будет вводить новые записи журнала расчетов по каждой строке документа, нужно определить объекты типа вид расчета, в модулях которых будут описаны алгоритмы расчетов соответствующих записей журнала расчетов
В дереве метаданных выделим ветвь Группы расчетов, в главном меню выберем пункт Действие и в появившемся подменю пункт Новый элемент. В появившейся форме введем идентификатор ДляОборудования. Отработанное время мы будем рассчитывать в днях и в часах. Аналогично, выделив в дереве метаданных ветвь Виды расчетов, создадим виды расчетов Вчасах с синонимом часов и Вднях с синонимом дней, и включим их в группу ДляОборудования с помощью стрелки.
XI. Основы построения объектов компоненты Расчет 175
Упражнение 33. Создайте в справочнике Оборудование реквизит Расчет типа ВидРасчета для элемента справочника. Отредактируйте интерактивные формы и заполните все реквизиты в существующих записях справочника.
11.2.3. Конфигурирование журнала расчетов
Создадим журнал расчетов Амортизация с объектом расчетов типа справочник Оборудование, с периодичностью расчетов 1 месяц, для которой характерна дата начала отсчета 1-е число месяца, размерность Результата зададим: длина -12, точность-2. В журнале создадим реквизиты типа число Часов с синонимом Часов/Дней, длина 3, точность 0 и Стоимость , длина 12, точность 2.
176 1С:Предприятие. Практика программирования на платформе V7
Отредактируем форму списка журнала.
Графы отбора позволяют отбирать записи журнала расчетов по значению реквизита элемента справочника-объекта. В качестве графы отбора выберем реквизит справочника Оборудование - График.
11.3. Создание записей в Журнале расчетов
Записи журнала расчетов формируются документами расчета. Алгоритм создания записей журнала расчетов, как и другие движения в системе, описывается в модуле документа расчета.
XI. Основы построения объектов компоненты Расчет 177
Упражнение 34. Установите флаг расчета в свойствах документа Приход и создайте в нем реквизит табличной части Расчет типа ВидРасчета, чтобы можно было откорректировать вид расчета перед вводом записи в журнал расчетов. Опишите в свойствах сооветствующего поля диалога документа выражение для ввода из справочника Оборудование значения по умолчанию для реквизита Расчет.
Метод ВвестиРасчет() позволяет ввести одним документом несколько записей в журнал расчетов по одному объекту.
Метод ЗаписатьРасчетО вводит документом только одну запись по объекту и виду расчета в одном периоде журнала расчетов. Если документом вводится запись по такому же объекту с таким же видом расчета, которая уже есть в данном периоде журнала расчетов, то существующая запись будет замещена новой записью.
Списки параметров для обоих методов одинаковы.
ВвестиРасчет(Объект, ВидРасчета ,ДатаНачала,ДатаОкончания,Результат) позволяет
ввести запись в журнал расчетов.
Объект - объект расчета - элемент справочника, заданного при конфигурировании журнала расчетов.
ВидРасчета - вид вводимого расчета - ссылка на агрегатный обьект ВидРасчета.
ДатаНачала - дата начала действия вводимого расчета. По умолчанию - дата начала текущего
периода журнала расчетов.
ДатаОкончания - дата окончания действия вводимого расчета. По умолчанию - дата окончания
текущего периода журнала расчетов.
Результат - результат расчета. По умолчанию - ноль.
Возвращаемое значение:
1 - если операция успешно выполнена, и 0 - в противном случае.
178 1С:Предприятие. Практика программирования на платформе V7
Для ввода записей расчета на основании существуют методы ВвестиРасчетНаОсновании() и ЗаписатьРасчетНаОсновании() с аналогичными различиями.
ВвестиРасчетНаОсновании(Основание,Объект,ВидРасчета,ДатаНачала,ДатаОкончания,Результат)
позволяет ввести запись в журнал расчетов на основании произвольного документа.
Основание - документ, на основании которого вводится запись (или записи) в журнал расчетов.
Объект - объект расчета - элемент справочника, заданного при конфигурировании журнала расчетов.
ВидРасчета - вид вводимого расчета - ссылка на агрегатный объект ВидРасчета.
ДатаНачала - дата начала действия вводимого расчета. По умолчанию - дата начала текущего
периода журнала расчетов.
ДатаОкончания - дата окончания действия вводимого расчета. По умолчанию - дата окончания
текущего периода журнала расчетов.
Результат - результат расчета. По умолчанию - ноль.
Возвращаемое значение:
1 - если операция успешно выполнена, и 0 - в противном случае.
Параметр Основание попадает в атрибут РодительскийДокумент записи журнала расчетов.
Для ввода значений реквизитов журнала расчетов используется метод УстановитьРеквизит().
УстановитьРеквизит(ИмяРеквизита,Значение) устанавливает значение реквизита журнала расчетов для записи.ИмяРеквизита - наименование реквизита журнала расчетов. 3начение -знHчение, устанавливаемое для записи в реквизит ИмяРеквизита.
Откроем Модуль документа Приход и пропишем создание записей журнала расчетов по каждой строке документа. Для этого, в отличие от регистров и бухгалтерской операции, необходимо создать объект "ЖурналРасчетов.Амортизация" и в цикле перебора строк документа вызвать метод журнала расчетов ВвестиРасчет().
// ********************************************
Процедура ОбработкаПроведения()
ЖурнРасчетов=Создать0бъект("ЖурналРасчетов.Амортизация"); ВыбратьСтроки();
Пока ПолучитьСтроку() =1 Цикл
// Создать запись журнала расчетов
ЖурнРасчетов.УстановитьРеквизит("Стоимость",Сумма); ЖурнРасчетов.ВвестиРасчет(оборудование,Расчет,Датадок,,);
КонецЦикла;
КонецПроцедуры
XI. Основы построения объектов компоненты Расчет 179
Сохраните изменения, и откройте Предприятие. Перевведите оборудование в приходных документах, чтобы ввести вид расчета, перепроведите их и откройте журнал расчетов.
Вы увидите в нем записи созданные документами, они пока ещё не рассчитываются. Чтобы научить систему рассчитывать записи, рассмотрим подробнее свойства объектов метаданных ВидРасчета.
11.4. Особенности работы с видами расчетов
11.4.1. Очередность расчета записей журнала расчетов
Записи журнала расчетов могут рассчитываться не только по одной, но также и группами: по документу или по объекту Порядок группового расчета записей журнала расчетов определяет приоритет вида расчета. Если у записей одинаковый приоритет - они рассчитываются в порядке ввода, если приоритеты разные, то расчеты производятся в порядке возрастания приоритета.
Рекомендуется оставлять промежутки между значениями приоритетов на случай введения в конфигурацию новых видов расчетов.
180 1С:Првдприятие. Практика программирования на платформе V7
11.4.2. Вытеснение записей журнала расчетов
Понятие вытесняющего расчета служит для исключения введения в одном и том же интервале дат двух или нескольких расчетов, которые исключают друг друга, например нельзя рассчитывать оклад, если в этом периоде введен больничный. Расчет с большим приоритетом вытеснения вытесняет расчет с меньшим приоритетом.
Настройка вытеснения позволяет изменить период действия вытесняемых записей журнала расчетов. В одном периоде действия не может быть двух записей журнала расчетов по одному объекту расчета с одинаковыми приоритетами вытеснения.
Разберем небольшой пример.
Сотруднику была начислена зарплата за 1-ый и 2-ой месяц. В 1-ом месяце он заболел. После болезни он вышел на работу и принес больничный лист.
Та часть вытесняющей записи по больничному листу, период действия которой более ранний, чем перод регистрации, сторнирует запись по зарплате. Если период действия позже или совпадает с периодом регистрации вытесняющей записи, то период действия вытесненной записи по зарплате уменьшится на величину периода вытесняющей записи.
XI. Основы построения объектов компоненты Расчет 181
Откроем окно свойств вида расчетов Вднях и установим приоритет вытеснения так, записи с видом расчета Вднях вытеснялись записями с видом расчета Вчасах.
11.4.3. Описание алгоритма расчета записи журнала расчетов в модуле вида расчета
Откроем модуль вида расчета Вднях. В модуле вида расчета доступны атрибуты и реквизиты рассчитываемой записи журнала расчетов.
С помощью метода вида метаданных Календари - Дней(), определим количество дней отработанных оборудованием и запишем выражение для реквизита Журнала расчетов - Часов.
Метод Дней(ДатаНачала,ДатаОкончания)позволяет получить количество "ненулевых" дней за
период.
Возвращает: целое положительное число - количество дней.
ДатаНачала - дата начала периода, в котором определяется количество дней.
ДатаОкончания - дата окончания периода, в котором определяется количество дней. Если
ДатаНачала больше, чем ДатаОкончания, будет выведено сообщение об ошибке.
Коэффициент амортизации оборудования задается у нас в процентах в час. Примем что в день у нас 10 рабочих часов для оборудования.
Процедура ПровестиРасчет()
Часов=Объект.График.Дней (ПериодДействия. ДатаНачала,
ПериодДействия.ДатаОкончания);
Результат=Стоимость* Часов *Объект.КоэффАморт/10 ;
КонецПроцедуры
182 1С:Предприятие. Практика программирования на платформе V7
Упражнение 35. Создайте алгоритм расчета записи для вида расчета Вчасах, используя метод календарей Часов(ДатаНачала.ДатаКонца). Рассчитайте записи в режиме Предприятия.
Определим остаточную стоимость оборудования, чтобы определить момент полного списания оборудования. Мы его списываем по бухгалтерскому и по оперативному учету. Полная остаточная стоимость, таким образом, складывается из конечного дебетового сальдо по счету ОБ.ПР по разделителю учета Белое и остатков по Оперативному учету.
Упражнение 36. Создайте в глобальном модуле функцию ОстаточнаяСтоимость(КонДата,Объект), которая будет возвращать полную остаточную стоимость оборудования на заданную дату. Организуйте вызов функции из текстовой колонки Ост. табличной части формы списка журнала расчетов Амортизация.
Функция ОстаточнаяСтоимость(КонДата,Объект,Документ) Экспорт Рег=Создать0бъект("Регистр.Амортизация");
БИ=Создать0бъект("БухгалтерскиеИтоги");
БИ.ИспользоватьРазделительУчета(Перечисление.ТипыУчета.Бел);
Если КонДатаПолучитьДатуТА() Тогда Peг.ВременныйРасчет();
РассчитатьРегистрыНа(КонДата);
КонецЕсли;
БИ.Рассчитать(,КонДата,"ОБ.ПР",,Перечисление.ТипыУчета.Бел);
Возврат БИ.СКД("ОБ.ПР",,,Объект,Документ) + Рег.СводныйОстаток(Объект,Документ,"Стоимость");
КонецФункции //ОстаточнаяСтоимость()
В этот остаток не вошли суммы списания по себестоимости по оперативному и бухгалтерскому учету, там в Партию записано значение документа списания.
XI. Основы построения объектов компоненты Расчет 183
11.5. Методы выборки записей из журнала расчетов
Методы выборки записей из журнала расчетов делятся на две группы: методы осуществляющие выборку по периоду действия записи, вспомним, что запись может действовать в нескольких периодах, и методы осуществляющие выборку по периоду регистрации записи, период регистрации для записи всегда один.
11.5.1. Методы выборки записей по периоду действия
• Метод ВыбратьЗаписи(Начало,Окончание) - открывает выборку
записей журнала расчетов. Выбираются все записи, период действия которых хоть на один день затрагивается тем периодом, который задан параметрами Начало и Окончание.
• Метод ВыбратьЗаписиПоОбъекту(Объект,Начало,Окончание)
отличается от метода ВыбратьЗаписи() тем, что в первом случае в выборку попадают записи по одному конкретному объекту расчета, заданного параметром Объект, а во втором — по всем объектам расчета.
• Метод ВыбратьЗаписиПоДокументу(Документ) — открывает выборку всех
записей, порожденных документом.
11.5.2. Методы выборки записей по периоду регистрации
• Методы ВыбратьПериод(Дата), ВыбратьПериодПоОбъекту(Объект,
Дата) и ВыбратьПоЗначению (ГрафаОтбора, ЗначениеОтбора, НачПериод, КонПериод) отличаются от вышеописанных методов тем, что осуществляют выборку в другом временном разрезе. Выбираются те записи, которые введены в том расчетном периоде, в который попадает Дата или периоды отбора, но не записи, имеющие дату начала и дату окончания, лежащие в этом периоде. Эти методы выбирают записи по времени их появления (регистрации) в системе.
Методы работают только для переменных, созданных функцией СоздатьОбъект, и, как правило, применяются перед циклом, выполняющим перебор записей журнала расчетов при помощи метода ПолучитьЗапись().
Упражнение 37. В модуле формы документа Амортизация создадим процедуру РассчитатьКалендари() для автозаполнения календарей по дату документа и функцию ВыполнитьРасчет (объект) для расчета амортизации по записям журнала расчетов. Процедуру РассчитатьКалендари() выполнять при создании нового документа в информационной базе. Процедуру ВыполнитьРасчет() вызывать для расчета результирующей суммы списания по
184 1С:Предприятие. Практика программирования на платформе V7
выбранному элементу справочника Оборудование.
Метод Автозаполнение(ДатаНачала,ДатаКонца) выполняет автозаполнение календаря в заданном периоде. Возвращает число: 1 - получилось; 0 - не получилось ДатаНачала - дата начала периода автозаполнения. ДатаКонца - дата конца периода автозаполнения.
Функция ВыполнитьРасчет(объект)
Сум= 0;
ЖурнРасчетов=Создать0бъект("ЖурналРасчетов.Амортизация");
Если ЖурнРасчетов.ВыбратьЗаписиПоОбъекту(объект, ЖурнРасчетов.НачалоПериодаПоДате(ДатаДок), ЖурнРасчетов.КонецПериодаПоДате(ДатаДок)) =1 Тогда
Пока ЖурнРасчетов.ПолучитьЗапись()=1 Цикл
Если ЖурнРасчетов.Рассчитана=0 Тогда
ЖурнРасчетов.Рассчитать();
КонецЕсли;
Сум = Сум + ЖурнРасчетов.Результат;
КонецЦикла;
Иначе
Сообщить(" Записи по объекту "+объект+" отсутствуют !") ;
КонецЕсли;
Возврат Сум;
КонецФункции / / ВыполнитьРасчет
//
Процедура РассчитатьКалендари ()
Н= 1 ;
Пока Метаданные.Календарь(Н).Выбран()=1 Цикл
Календарь=Создать0бъект(Метаданные.Календарь(Н). ПолныйИдентификатор());
Если Календарь.Часов(НачМесяца(ДатаДок),КонМесяца(ДатаДок))=0 Тогда
Календарь.Автозаполнение(НачМесяца(ДатаДок),ДатаДок);
КонецЕсли;
Н=Н+1;
КонецЦикла;
XI. Основы построения объектов компоненты Расчет 185
КонецПроцедуры // РассчитатьКалендари
В форме диалога добавим в свойствах колонки табличной части Оборудование на закладке Дополнительные формулу
Результат= ВыполнитьРасчет (Оборудование).
Вызов процедуры РассчитатьКалендари () можно поместить в предопределенные процедуры ВводНового() и ВводНаОсновании().
Процедура ВводНового()
РассчитатьКалендари();
ТипСписания=Константа.ТипСписания.Получить(ДатаДок);
УстановитьНовыйНомер("А"); КонецПроцедуры
11.6. Служебный объект Запрос. Создание регламентного документа Расчета
Создадим процедуру автоматического заполнения табличной части документа Амортизация по записям текущего периода журнала расчетов. Выборку записей можно осуществить, используя служебный объект Запрос.
Преимущество использования этого объекта заключается в том, что при выполнении запроса к информационной базе производится комплексная выборка данных и формируется таблица выборки в оперативной памяти, после чего программа может не обращаться к таблицам информационной базы, и работать непосредственно с таблицей выборки, что существенно в многопользовательском режиме работы информационной базы.
Служебный объект Запрос, имеет свой собственный язык запросов для описания создаваемой таблицы выборки. Для создания таблицы выборки текст на языке запросов передается в параметр метода Выполнить(ТекстЗапроса) объекта типа Запрос.
186 1С:Предприятие. Практика программирования на платформе V7
Метод Выполнить(ТекстЗапроса) выполняет запрос и создает таблицу выборки по запросу. Возвращает: 1 - если запрос выполнен, 0 • иначе. ТекстЗапроса - строка с текстом запроса на языке генерации запросов.
Описание внутренних переменных запроса — полей таблицы выборки.
ИмяПеременной = ОписаниеПеременной[, ОписаниеПеременной...];
ОписаниеПеременной - указывает на конкретный реквизит документа, справочника, измерение или