Как реализовать указание подразделения построчно в документе поступления товаров в 1С?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

В типовой конфигурации «1С:Бухгалтерия предприятия КОРП» реквизит ПодразделениеОрганизации задается в шапке документа «Поступление (акт, накладная, УПД)». При проведении документа все проводки по счетам учета ТМЦ (счета 10, 41 и другие) формируются в разрезе единого подразделения из шапки. Однако в практической деятельности часто возникает задача: поставщик привозит ТМЦ по единой накладной сразу для нескольких подразделений или складов, и пользователям необходимо распределять номенклатурные позиции по разным подразделениям прямо в табличной части.

Проанализируем технические сложности этой задачи, разберем быстрое решение с помощью расширения конфигурации, а также выясним скрытые методологические риски и альтернативные архитектурные варианты реализации.

В чем сложность типового механизма проведения

Попытка переопределить движения при проведении документа стандартным путем наталкивается на сложную архитектуру общего модуля УчетТоваров (в частности, процедуру СформироватьДвиженияПоступлениеТоваров):

  1. Данные для проводок собираются сложными пакетными запросами во временные таблицы. В этих запросах подразделение берется непосредственно из реквизита шапки документа.
  2. Таблицы движений передаются между процедурами уже в свернутом виде без сквозной привязки к номерам строк исходной табличной части Товары.
  3. Корректировка проводок «постфактум» затруднена, так как в сформированном наборе записей регистра бухгалтерии невозможно однозначно сопоставить строку проводки со строкой табличной части документа.

Вариант 1. Формирование внутренних перемещений в расширении (&После «ОбработкаПроведения»)

Один из самых быстрых способов реализации без снятия типовой конфигурации с поддержки — добавление реквизита подразделения в табличную часть через расширение и доначисление проводок внутреннего перемещения в процедуре ОбработкаПроведения.

Разберем по шагам логику этого подхода:

  1. В расширение добавляется реквизит табличной части Товары.ПодразделениеОрганизации (а также при необходимости в ТЧ Оборудование и Материалы).
  2. Форма документа выносится в расширение, куда выводится добавленная колонка.
  3. В модуле документа через аннотацию &После перехватывается процедура ОбработкаПроведения.
  4. Типовой алгоритм отрабатывает штатно, формируя приход с подразделением из шапки документа (например, Дт 10.01 — Кт 60.01).
  5. В добавленном коде расширения мы обходим табличную часть и для строк, где подразделение отличается от подразделения шапки, добавляем корректирующие проводки перемещения вида Дт 10 (новое подразделение) — Кт 10 (подразделение из шапки).

Посмотрим на пример реализации обработчика в расширении:


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

Подводные камни и риски искусственных проводок перемещения

Хотя приведенное выше решение пишется быстро и не затрагивает типовой код, на практике в конфигурации «1С:Бухгалтерия КОРП» оно несет ряд серьезных методологических и технических проблем:

  1. Обособленные подразделения на отдельном балансе (счет 79): в КОРП-версии подразделения могут быть филиалами. Прямая проводка Дт 10 — Кт 10 между филиалами нарушает баланс каждого из них. Межфилиальное перемещение обязано проходить через счет 79.03 («Внутрихозяйственные расчеты по текущим операциям») с выпиской авизо.
  2. Рассинхронизация с регистрами подсистемы НДС: поступление делает записи в регистры накопления НДС предъявленный и Раздельный учет НДС. Там подразделение фиксируется из шапки. В итоге бухгалтерский баланс по счету 10/41 разойдется с аналитикой НДС. При последующем списании или распределении входного НДС возникнут трудноуловимые ошибки.
  3. Проблемы при регламентной операции «Закрытие месяца»: операция Корректировка стоимости номенклатуры рассчитывает себестоимость с учетом остатков и партий. Мгновенное списание и оприходование внутри одной секунды одним и тем же регистратором может приводить к отрицательным остаткам в партиях и некорректным корректирующим суммам.
  4. Документы-исправления и возвраты: документы Возврат товаров поставщику и Корректировка поступления читают шапку исходного поступления. При попытке вернуть товар программа попытается списать его с подразделения шапки, где фактически остатка уже нет, что вызовет ошибку проведения по контролю отрицательных остатков.

Вариант 2. Автоматическое расщепление на типовые документы поступления

Рассмотрим альтернативное архитектурное решение, полностью исключающее ошибки в регистрах учета и закрытии периода. Вместо модификации проводок создается промежуточный интерфейс или специальный документ ввода (АРМ):

  1. Пользователь заполняет единую накладную, указывая подразделение в каждой строке.
  2. При проведении или по нажатию сервисной кнопки обработчик группирует строки документа по уникальным подразделениям.
  3. Программно создается пакет типовых документов Поступление (акт, накладная, УПД) — отдельный документ на каждое подразделение с одинаковым входящим номером и датой накладной поставщика.
  4. Каждый типовой документ проводится штатным образом.

Преимущество подхода: сохраняется абсолютная типовая целостность всех регистров бухгалтерии, НДС и партионного учета, корректно оформляются печатные формы (М-4, ТОРГ-12) и регламентные процедуры закрытия месяца.

Вариант 3. Двухэтапная схема (Поступление + Перемещение товаров)

Если требуется сохранить единый финансовый документ расчетов с контрагентом на всю сумму накладной:

  1. Документ поступления приходует всю номенклатуру на головное подразделение (или центральный склад) без доработки проводок.
  2. Подпиской на событие ПриЗаписи или регламентным заданием по строкам с альтернативными подразделениями автоматически формируется связанный документ Перемещение товаров.
  3. Документ перемещения перемещает номенклатуру по нужным точкам учета штатными механизмами системы, включая правильные проводки по счету 79 при необходимости.

Вариант 4. Переопределение выборки данных через «&Вместо» или «&ИзменениеИКонтроль»

Если бизнес-процесс категорически требует иметь только один документ и без промежуточных проводок перемещения, доработку следует переносить на этап выборки исходных данных:

  1. В расширении через &ИзменениеИКонтроль или &Вместо переопределяется процедура общего модуля формирования движений.
  2. В тексте запроса формирования движений по запасам поле Подразделение заменяется с поля шапки на поле строки табличной части (ТЧ.ПодразделениеОрганизации).
  3. Обязательно: в этом же расширении аналогичным образом корректируются запросы формирования движений по регистрам подсистемы НДС, чтобы исключить расхождения аналитики между регистрами накопления и планом счетов.
← На главную