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