При сопровождении и доработке конфигурации «1С:Управление производственным предприятием 1.3» разработчики нередко сталкиваются с непонятным поведением документа «Требование-накладная»: документ успешно проведен, в форме списка отображаются бухгалтерские проводки, однако при попытке отладить процедуру ОбработкаПроведения коллекция Движения.Хозрасчетный в конце модуля оказывается абсолютно пустой. Бывают и обратные ситуации: движения по партионным регистрам формируются корректно, а бухгалтерские проводки отсутствуют вовсе. Разберем архитектуру механизма партионного учета в УПП 1.3, выясним причину такого поведения и определим, как правильно локализовать запись проводок.
В типовой конфигурации УПП 1.3 при традиционном партионном учете списание себестоимости вынесено в отдельный специализированный общий модуль УправлениеЗапасамиПартионныйУчет. В отличие от стандартной схемы платформы 1С, где движения формируются непосредственно в коллекции документа Движения.Хозрасчетный и автоматически записываются платформой по завершении транзакции проведения, партионный механизм работает через явные наборы записей.
Рассмотрим, как именно платформа и типовой код обрабатывают проводки:
ОбработкаПроведения документа формируются оперативные движения по регистрам накопления (например, учет затрат, складские остатки).УправлениеЗапасамиПартионныйУчет.РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей().Записать().Поскольку запись в регистр бухгалтерии выполняется через сторонний экземпляр объекта РегистрБухгалтерииНаборЗаписей.Хозрасчетный, встроенная коллекция объекта документа Движения.Хозрасчетный остается неинициализированной в оперативной памяти текущего сеанса объекта. Если поставить точку останова в самом конце процедуры ОбработкаПроведения, вызов Движения.Хозрасчетный.Количество() закономерно возвращает ноль, хотя физически в базе данных проводки уже зафиксированы.
Посмотрим на пример кода, который иллюстрирует этот механизм в модулях партионного учета:
НаборЗаписейХозрасчетный = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
НаборЗаписейХозрасчетный.Отбор.Регистратор.Установить(СсылкаНаДокумент);
// Заполнение строк проводками по результатам списания партий...
НаборЗаписейХозрасчетный.Записать();
Если требуется проанализировать логику формирования проводок, отследить расчет сумм или найти место возникновения ошибки, ставить точку останова в модуле документа бессмысленно. Проанализируем правильный подход к отладке:
Хозрасчетный.ПередЗаписью.
Если ЭтотОбъект.Отбор.Регистратор.Значение = ДокументСсылка Тогда
// Здесь доступен весь стек вызовов и строки набора записей
Сообщить("Точка останова перед записью набора");
КонецЕсли;
При срабатывании точки останова в стеке вызовов будет наглядно видна цепочка вызовов из общего модуля УправлениеЗапасамиПартионныйУчет, где рассчитываются партии и транслируются движения партий в проводки бухгалтерского и налогового учета.
Частая проблема пользователей и программистов — ситуация, когда в документе «Требование-накладная» движения по регистрам партий сформированы (например, по регистрам «Партии товаров на складах»), суммы рассчитаны, но в регистре бухгалтерии Хозрасчетный проводок нет совсем.
Выясним причину такого поведения. В процедурах формирования движений заложен жесткий алгоритмический фильтр типовой конфигурации: проводка создается только при условии, что счет дебета не равен счету кредита. В коде проверяется условие вида СчетУчета <> СчетЗатрат.
Если бухгалтер в табличной части документа или на закладке «Материалы» в поле «Счет затрат» указывает тот же самый счет учета ТМЦ, на котором числится номенклатура (например, счет 10.01 списывается на счет 10.01 или 10.08), алгоритм считает такую операцию некорректной для списания на затраты и полностью пропускает генерацию бухгалтерской проводки. При этом движения по регистрам партий могут успешно сформироваться, что порождает опасную рассинхронизацию между бухгалтерскими остатками на счетах и аналитическими остатками в партионных регистрах.
Методология документа «Требование-накладная» рассчитана исключительно на передачу ценностей в производство или на общехозяйственные нужды. В качестве счета затрат должны использоваться расходные счета: 20, 23, 25, 26, 44, 91. Использование счетов учета МПЗ в качестве затратных в типовом функционале документа разработчиками не предусмотрено.
Если требуется отразить операцию, в которой материал передается без списания на затратные счета, разберем по шагам альтернативные варианты решения:
10.01 на 10.07), следует использовать документ «Перемещение товаров». В нем корректно обрабатываются внутрисчетные проводки по счету 10, а также движение аналитики по субконто «Склады».20.01 (с указанием номенклатурной группы и статьи затрат), а оприходование готовой продукции или полуфабриката выполняется документом «Отчет производства за смену».25 или 26) вместо счета МПЗ.Если счета затрат указаны корректно, однако проводки все равно не формируются, проанализируем настройки программы и хронологию проведения: