Создание движений документа ПриходнаяНакладная
Начнем с простого: доработаем движения документа "ПриходнаяНакладная". Для этого нам достаточно будет воспользоваться конструктором движений документа и заменить старые движения документа на новые, по трем регистрам.
Откроем конфигуратор. В окне редактирования объекта конфигурации Документ "ПриходнаяНакладная", на закладке "Движения" запустим конструктор движений документа.
В список регистров добавим регистр "РегистрБухгалтерии.Управленческий". В качестве источника данных выберем табличную часть документа "ПриходнаяНакладная" – "Материалы". Счет дебета установим равным "ПланыСчетов.Основной.Товары" (41), а счет кредита – "ПланыСчетов.Основной.РасчетыСПоставщиками" (60).[303]
Нажмем кнопку "Заполнить выражения". У вас должен получиться следующий результат:
Нажмем "ОК" и посмотрим, какой текст платформа добавила в обработчик проведения документа "ПриходнаяНакладная":
Процедура ОбработкаПроведения(Отказ, Режим)
//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
Для Каждого ТекСтрокаМатериалы Из Материалы Цикл
// регистр ОстаткиМатериалов Приход
Движение = Движения.ОстаткиМатериалов.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Материал = ТекСтрокаМатериалы.Материал;
Движение.НаборСвойств = ТекСтрокаМатериалы.НаборСвойств;
Движение.Склад = Склад;
Движение.Количество = ТекСтрокаМатериалы.Количество;
КонецЦикла;
Для Каждого ТекСтрокаМатериалы Из Материалы Цикл
// регистр СтоимостьМатериалов Приход
Движение = Движения.СтоимостьМатериалов.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход; [304]
Движение.Период = Дата;
Движение.Материал = ТекСтрокаМатериалы.Материал;
Движение.Стоимость = ТекСтрокаМатериалы.Сумма;
КонецЦикла;
Для Каждого ТекСтрокаМатериалы Из Материалы Цикл
// регистр Управленческий
Движение = Движения.Управленческий.Добавить();
Движение.СчетДт = ПланыСчетов.Основной.Товары;
Движение.СчетКт = ПланыСчетов.Основной.РасчетыСПоставщиками;
Движение.Период = Дата;
Движение.Сумма = ТекСтрокаМатериалы.Сумма;
Движение.КоличествоДт = ТекСтрокаМатериалы.Количество;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Материалы] = ТекСтрокаМатериалы.Материал;
КонецЦикла;
// записываем движения регистров
Движения.ОстаткиМатериалов.Записать();
Движения.СтоимостьМатериалов.Записать();
Движения.Управленческий.Записать();
//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры
Дело в том, что количество субконто как по дебету, так и по кредиту у каждой записи движения регистра будет различное, в зависимости от того, как определены счета в используемом плане счетов. Поэтому для каждой записи движения регистра бухгалтерии платформа хранит две коллекции значений: коллекцию субконто дебета и коллекцию субконто кредита. Каждая из этих коллекций содержит ровно столько элементов, сколько указано использовать видов субконто для соответствующего счета (дебета или кредита) в плане счетов. Обратиться к элементу коллекции можно, указав в квадратных скобках ссылку на соответствующий вид характеристик, либо указав через точку имя предопределенного вида характеристик. [305]
Другими словами, запись:
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Материалы]
равносильна записи:
Движение.СубконтоДт.Материалы
Запустим 1С:Предприятие в режиме отладки, откроем документ ПриходнаяНакладная №1 и перепроведем его.
Посмотрим, какие движения сформировал документ в регистре бухгалтерии Управленческий:
Обратите внимание, что, поскольку, на счете 60 ("РасчетыСПоставщиками") отсутствует аналитика и ведется только суммовой учет, в записях движений регистра "СубконтоКт1", "СубконтоКт2" и "КоличествоКт" не указаны.
После этого перепроведем документ ПриходнаяНакладная №2 и посмотрим, какие движения сформирует он.
Теперь перейдем к более сложной задаче – добавлению движений по регистру "Управленческий" в документ "ОказаниеУслуги".[306]