Почему программно созданный документ «Перемещение товаров» не формирует проводки и движения по партиям в УПП 1.3?

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

При программном создании документов конфигурации «Управление производственным предприятием 1.3» разработчики нередко сталкиваются с ситуацией, когда документ, созданный вручную, успешно делает движения по всем регистрам (регистр бухгалтерии, регистры партий и НДС), а сформированный программным кодом делает запись только в регистр накопления ТоварыОрганизаций либо выдает ошибку «Не списано по партиям» со счетами учета 41.01, 003.01.

Разберем детально архитектуру проведения документа «Перемещение товаров», проанализируем причины подобного поведения и рассмотрим практические способы решения проблемы.

Причина 1. Служебный реквизит «РаспределениеОстатковТоваровОрганизацийПоСкладам»

В типовой конфигурации УПП 1.3 процедура проведения документа содержит специальное ветвление. Обратим внимание на типовой фрагмент модуля документа:


Процедура ДвиженияПоРегистрам(РежимПроведения, СтруктураШапкиДокумента, ТаблицаПоТоварам, ТаблицаПоТаре, Отказ, Заголовок)
    Если СтруктураШапкиДокумента.РаспределениеОстатковТоваровОрганизацийПоСкладам Тогда
        ДвиженияПоРегиструТоварыОрганизаций(РежимПроведения, СтруктураШапкиДокумента, ТаблицаПоТоварам, ТаблицаПоТаре, Отказ, Заголовок);
    Иначе
        ДвиженияПоРегистрамУпр(РежимПроведения, СтруктураШапкиДокумента, ТаблицаПоТоварам, ТаблицаПоТаре, Отказ, Заголовок);
        ДвиженияПоРегиструТоварыОрганизаций(РежимПроведения, СтруктураШапкиДокумента, ТаблицаПоТоварам, ТаблицаПоТаре, Отказ, Заголовок);
        ДвиженияПоРегиструСписанныеТовары(РежимПроведения, СтруктураШапкиДокумента, ТаблицаПоТоварам, ТаблицаПоТаре, Отказ, Заголовок);
    КонецЕсли;
КонецПроцедуры

Если в реквизите РаспределениеОстатковТоваровОрганизацийПоСкладам установлено значение Истина, документ выполняет движения исключительно по регистру накопления ТоварыОрганизаций. Вся ветка управленческого, бухгалтерского и партийного учета просто игнорируется.

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

Причина 2. Флаги отражения в учете

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

  1. ОтражатьВУправленческомУчете — если по условиям задачи управленческий учет не ведется, флаг оставляется равным Ложь.
  2. ОтражатьВБухгалтерскомУчете — должен быть установлен в значение Истина.
  3. ОтражатьВНалоговомУчете — должен быть установлен в значение Истина.

Если реквизит ОтражатьВБухгалтерскомУчете окажется ложным, движения по регистру бухгалтерии ЖурналПроводокБУ и регистру накопления ПартииТоваровНаСкладахБухгалтерскийУчет формироваться не будут.

Причина 3. Ошибка списания партий из-за незаполненной аналитики

Сообщение «Не списано по партиям 1 шт товара..., счета учета 41.01, 003.01» сообщает о том, что механизм проведения попытался списать остатки со склада-отправителя, но не обнаружил свободной партии в регистре ПартииТоваровНаСкладах (бухгалтерский учет) с указанными в строке параметрами.

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

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

Причина 4. Несовпадение момента времени

Проанализируем время проведения документов. Если программный документ создается на дату без указания конкретного времени (например, 07.12.2016 00:00:00), то по моменту времени он окажется раньше документа поступления, оформленного в тот же день.

Списание партий в оперативном и неоперативном режиме выполняется строго на МоментВремени() документа. Если на эту секунду партия еще не поступила, проведение прерывается с ошибкой нехватки остатка.

Причина 5. Настройка отложенного списания партий

В учетной политике или настройках параметров учета УПП может быть снят признак «Списывать партии при проведении документов». В таком сценарии:

  1. Документ при проведении фиксирует только движения по количественным регистрам.
  2. Движения по партиям и проводки по счетам 41, 19, 003 формируются специализированной регламентной обработкой «Проведение по партиям».

Пример корректного программного создания документа

Посмотрим на пример правильного заполнения реквизитов документа «Перемещение товаров» в УПП 1.3:


НовыйДок = Документы.ПеремещениеТоваров.СоздатьДокумент();
НовыйДок.Дата = ТекущаяДата(); // Устанавливаем точное время
НовыйДок.Организация = ВыбраннаяОрганизация;
НовыйДок.СкладОтправитель = СкладОтправитель;
НовыйДок.СкладПолучатель = СкладПолучатель;

// Настройка флагов учета
НовыйДок.ОтражатьВУправленческомУчете = Ложь;
НовыйДок.ОтражатьВБухгалтерскомУчете = Истина;
НовыйДок.ОтражатьВНалоговомУчете = Истина;
НовыйДок.РаспределениеОстатковТоваровОрганизацийПоСкладам = Ложь;

// Заполнение табличной части
СтрокаТЧ = НовыйДок.Товары.Добавить();
СтрокаТЧ.Номенклатура = ТекущаяНоменклатура;
СтрокаТЧ.Количество = 1;
СтрокаТЧ.Коэффициент = 1;
СтрокаТЧ.ЕдиницаИзмерения = ТекущаяНоменклатура.БазоваяЕдиницаИзмерения;
СтрокаТЧ.Качество = Справочники.Качества.Новый;

// Заполнение счетов учета
СтрокаТЧ.СчетУчетаБУ = ПланыСчетов.Хозрасчетный.ТоварыНаСкладах; // 41.01
СтрокаТЧ.СчетУчетаНУ = ПланыСчетов.Налоговый.ТоварыНаСкладах;

Попытка
    НовыйДок.Записать(РежимЗаписиДокумента.Проведение);
Исключение
    Сообщить("Ошибка проведения: " + ОписаниеОшибки());
КонецПопытки;

Порядок диагностики проблемы

Если ошибка сохраняется, выполним следующие шаги диагностики:

  1. Сформируем отчет «Ведомость по партиям товаров на складах (бухгалтерский учет)» на точный момент времени создаваемого документа.
  2. Установим группировки по полям: Номенклатура, Склад, Качество, Счет учета, Характеристика, Серия.
  3. Сравним значения аналитики из отчета с реквизитами созданной строки документа.
  4. Убедимся, что остаток на складе-отправителе больше или равен списываемому количеству.
← На главную