March 1
Автоматическая запись бухгалтерских проводок
Примерно раз лет в 10 возникает эта простая задача. Помнить это естественно невозможно, поэтому решил записать (в том числе для себя), чтобы больше не разгребать странные советы из поисковиков...
Итак, нужно у автоматически создаваемых документов подправить стандартные проводки и добавить еще несколько новых. Больше всего для решения подходит вполне себе типовой механизм ручной корректировки. Тут 1С-ники использовали неудачный термин. Вручную делать это вовсе необязательно...
//Сначала заполненный программно документ проводим как обычно, //чтобы кроме проводок записались все необходимые регистры НовыйДокумент.Записать(РежимЗаписиДокумента.Проведение); //Затем меняем реквизит ручной корректировки и записываем уже без проведения НовыйДокумен.РучнаяКорректировка = Истина; НовыйДокумен.Записать(РежимЗаписиДокумента.Запись); //Перебираем существующие проводки, заменяем счет и субконто Для Каждого Движение из НовыйДокумен.Движения.Хозрасчетный Цикл Если Движение.СчетКт = НеправильныйСчет Тогда Движение.СчетКт = ПравильныйСчет; //Перед установкой субконто обязательно очищаем имеющуюся коллекцию //и виды, и значения Движение.СубконтоКт.Очистить(); //Устанавливаем нужные субконто (допустим счет у нас взаиморасчетный) Движение.СубконтоКт.Контрагенты = НужныйКонтрагент; Движение.СубконтоКт.Договоры = НужныйДоговорКонтрагента; Движение.СубконтоКт.ДокументыРасчетовСКонтрагентами = НужныйДокумент; КонецЕсли; КонецЦикла; //Фрмируем новые проводки (например нужно частично сторнировать поступление) Для Каждого СтрокаНачислений из МассивСтрокНачислений Цикл НовоеДвижение = НовыйДокумен.Движения.Хозрасчетный.Добавить(); НовоеДвижение.Период = НовыйДокумен.Дата; НовоеДвижение.Регистратор = НовыйДокумен.Ссылка; НовоеДвижение.Активность = Истина; НовоеДвижение.СчетДт = Счет20_01; НовоеДвижение.ПодразделениеДт = НужноеПодразделениеЗатрат; НовоеДвижение.СубконтоДт.НоменклатурныеГруппы = СтрокаНачислений.НоменклатурнаяГруппа; НовоеДвижение.СубконтоДт.СтатьиЗатрат = СтрокаНачислений.СтатьяЗатрат; НовоеДвижение.СчетКт = Счет60_01; НовоеДвижение.СубконтоКт.Контрагенты = НужныйКонтрагент; НовоеДвижение.СубконтоКт.Договоры = НужныйДоговорКонтрагента; НовоеДвижение.СубконтоКт.ДокументыРасчетовСКонтрагентами = НужныйДокумент; НовоеДвижение.Организация = НужнаяОрганизация; СуммаБезНДС = СтрокаНачислений.СуммаБезНДС; НовоеДвижение.Сумма = -СуммаБезНДС; НовоеДвижение.СуммаНУДт = -СуммаБезНДС; НовоеДвижение.СуммаНУКт = -СуммаБезНДС; НовоеДвижение.Содержание = "Реализация услуг"; КонецЦикла; //Записываем проводки НовыйДокумен.Движения.Хозрасчетный.Записать();
Вот и все. В результате получается проведенный документ с нужными нетиповыми проводками. Иногда, сейчас уже очень редко, это нужно. А ломать стандартный механизм проведения или создавать новый вид документов не пришлось.
←40 | заметка 41