В современных прикладных решениях, таких как 1С:Комплексная автоматизация 2 и 1С:ERP Управление предприятием, разработчики применили архитектурный подход с разделением оперативного (управленческого) и регламентированного (бухгалтерского и налогового) учета. Первичные документы проводятся операторами по оперативным регистрам быстро и без создания записей в плане счетов, а бухгалтерские проводки формируются позже — по расписанию или в рамках закрытия месяца. Однако бухгалтерам часто требуется видеть проводки сразу после проведения документа. Рассмотрим, почему приняты такие архитектурные решения и какими способами можно организовать оперативное формирование проводок.
Проанализируем причины, по которым 1С вынесла формирование проводок из транзакции проведения документа:
Рассмотрим самый простой штатный вариант, не требующий вмешательства в программный код. В форме просмотра проводок регламентированного учета предусмотрена специальная настройка.
Посмотрим на вариант с настройкой фоновой обработки. В системе за формирование проводок отвечает регламентное задание Отражение документов в регламентированном учете.
30 секунд).При такой настройке проводки будут формироваться практически сразу после проведения документа оператором, не вызывая задержек в интерфейсе при нажатии кнопки «Провести и закрыть».
Разберем ситуацию, когда требуется жестко привязать вызов процедуры формирования проводок к транзакции записи/проведения документа. Для этого можно внести доработку в общий модуль через расширение конфигурации.
Проанализируем пример кода для процедуры ПослеЗаписиНаСервере в модуле ОбщийМодуль.МодификацияКонфигурацииПереопределяемый:
// Автоматическое отражение в регламентированном учете при проведении документа
Если ПараметрыЗаписи.Свойство("РежимЗаписи") Тогда
Если ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение
И Метаданные.Обработки.ОтражениеДокументовВРеглУчете.Команды.ПроводкиРеглУчета.ТипПараметраКоманды.СодержитТип(ТипЗнч(ТекущийОбъект.Ссылка))
Тогда
// Проверим, что по документу есть запись в регистре в статусе "К отражению"
мЗаписи = РегистрыСведений.ОтражениеДокументовВРеглУчете.СоздатьНаборЗаписей();
мЗаписи.Отбор.Регистратор.Установить(ТекущийОбъект.Ссылка);
мЗаписи.Прочитать();
Для каждого мЗапись Из мЗаписи Цикл
Если мЗапись.Статус = Перечисления.СтатусыОтраженияДокументовВРеглУчете.КОтражениюВРеглУчете Тогда
СтруктураРеквизиты = Новый Структура("Ссылка, Дата, Организация", ТекущийОбъект.Ссылка, ТекущийОбъект.Дата, Неопределено);
РеглУчетПроведениеСервер.ОтразитьДокумент(СтруктураРеквизиты, Истина);
КонецЕсли;
Прервать;
КонецЦикла;
КонецЕсли;
КонецЕсли;
Важное предупреждение: Использование принудительного отражения в момент проведения увеличивает время проведение документов пользователями и в высоконагруженных базах может приводить к транзакционным блокировкам. Перед внедрением такого решения рекомендуется оценить объем документооборота и число одновременно работающих пользователей.