March 1

Автоматическая запись бухгалтерских проводок

Примерно раз лет в 10 возникает эта простая задача. Помнить это естественно невозможно, поэтому решил записать (в том числе для себя), чтобы больше не разгребать странные советы из поисковиков...

Итак, нужно у автоматически создаваемых документов подправить стандартные проводки и добавить еще несколько новых. Больше всего для решения подходит вполне себе типовой механизм ручной корректировки. Тут 1С-ники использовали неудачный термин. Вручную делать это вовсе необязательно...

//Сначала заполненный программно документ проводим как обычно,
//чтобы кроме проводок записались все необходимые регистры
НовыйДокумент.Записать(РежимЗаписиДокумента.Проведение);

//Затем меняем реквизит ручной корректировки и записываем уже без проведения
НовыйДокумен.РучнаяКорректировка = Истина;
НовыйДокумен.Записать(РежимЗаписиДокумента.Запись);

//Перебираем существующие проводки, заменяем счет и субконто
Для Каждого Движение из НовыйДокумен.Движения.Хозрасчетный Цикл
	Если Движение.СчетКт = НеправильныйСчет Тогда
		Движение.СчетКт = ПравильныйСчет;
		
		//Перед установкой субконто обязательно очищаем имеющуюся коллекцию
		//и виды, и значения
		Движение.СубконтоКт.Очистить();
		
		//Устанавливаем нужные субконто (допустим счет у нас взаиморасчетный)
		Движение.СубконтоКт.Контрагенты = НужныйКонтрагент;
		Движение.СубконтоКт.Договоры = НужныйДоговорКонтрагента;
		Движение.СубконтоКт.ДокументыРасчетовСКонтрагентами = НужныйДокумент;
	КонецЕсли;
КонецЦикла;

//Фрмируем новые проводки (например нужно частично сторнировать поступление)
Для Каждого СтрокаНачислений из МассивСтрокНачислений Цикл
	НовоеДвижение = НовыйДокумен.Движения.Хозрасчетный.Добавить();
	НовоеДвижение.Период = НовыйДокумен.Дата;
	НовоеДвижение.Регистратор = НовыйДокумен.Ссылка;
	НовоеДвижение.Активность = Истина;
	НовоеДвижение.СчетДт = Счет20_01;
	НовоеДвижение.ПодразделениеДт = НужноеПодразделениеЗатрат;
	НовоеДвижение.СубконтоДт.НоменклатурныеГруппы = СтрокаНачислений.НоменклатурнаяГруппа;
	НовоеДвижение.СубконтоДт.СтатьиЗатрат = СтрокаНачислений.СтатьяЗатрат;
	НовоеДвижение.СчетКт = Счет60_01;
	НовоеДвижение.СубконтоКт.Контрагенты = НужныйКонтрагент;
	НовоеДвижение.СубконтоКт.Договоры = НужныйДоговорКонтрагента;
	НовоеДвижение.СубконтоКт.ДокументыРасчетовСКонтрагентами = НужныйДокумент;
	НовоеДвижение.Организация = НужнаяОрганизация;
	СуммаБезНДС = СтрокаНачислений.СуммаБезНДС;
	НовоеДвижение.Сумма = -СуммаБезНДС;
	НовоеДвижение.СуммаНУДт = -СуммаБезНДС;
	НовоеДвижение.СуммаНУКт = -СуммаБезНДС;
	НовоеДвижение.Содержание = "Реализация услуг";
КонецЦикла;

//Записываем проводки
НовыйДокумен.Движения.Хозрасчетный.Записать();

Вот и все. В результате получается проведенный документ с нужными нетиповыми проводками. Иногда, сейчас уже очень редко, это нужно. А ломать стандартный механизм проведения или создавать новый вид документов не пришлось.

←40 | заметка 41