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