Как исправить ошибку «Обнаружено нулевое количество при пересчете в единицу измерения хранения» в 1С:ERP?

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

При переносе данных из «1С:Бухгалтерия предприятия 3.0» в более сложные системы, такие как 1С:ERP Управление предприятием, 1С:Комплексная автоматизация 2 или 1С:Управление торговлей 11, разработчики часто сталкиваются со специфической ошибкой при попытке проведения документа ПриобретениеТоваровУслуг. Сообщение системы гласит: «Обнаружено нулевое количество при пересчете в единицу измерения хранения в строке № списка "Товары"».

На первый взгляд ситуация кажется странной: в табличной части документа визуально заполнены и номенклатура, и количество, и единица измерения. Однако при программной загрузке (например, через «Конвертацию данных 2.1») этого недостаточно. Разберем подробно причины возникновения этой ошибки и методы её решения.

Выясним причину: почему ERP «не видит» количество?

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

  1. КоличествоУпаковок: Это основной реквизит, по которому система делает движения по регистрам. Если вы заполнили только реквизит Количество, а КоличествоУпаковок оставили равным нулю, система при проведении не сможет рассчитать объем операции.
  2. Коэффициент: Числовой множитель, указывающий, сколько базовых единиц хранения содержится в выбранной единице измерения (упаковке). Для базовой единицы он должен быть равен 1. Если он равен 0 или не заполнен, любой пересчет даст нулевой результат.
  3. Упаковка: Ссылка на справочник упаковок (или единиц измерения). Даже если упаковки не используются, это поле должно быть корректно инициализировано ссылкой на единицу хранения номенклатуры.

Рассмотрим ситуацию: при интерактивной работе пользователя (ввод документа вручную) срабатывают обработчики событий формы (например, ПриИзменении количества или номенклатуры). Эти обработчики автоматически копируют значение из Количество в КоличествоУпаковок и устанавливают Коэффициент = 1. При программной загрузке через КД 2.1 или через код, эти обработчики формы не вызываются, и документ записывается с «пустыми» техническими полями.

Решение 1: Прямое заполнение реквизитов в ПКС (Конвертация данных 2.1)

Самый простой и надежный способ — это прописать правила заполнения технических реквизитов непосредственно в ПКС (Правила конвертации свойств) для табличной части Товары. Проанализируем, какие именно поля нам нужно добавить в правила:

Пример настройки ПКС для табличной части Товары в «Конвертации данных»:


// В обработчике "ПередВыгрузкой" для свойства КоличествоУпаковок
Значение = ОбъектКоллекции.Количество;

// В обработчике "ПередВыгрузкой" для свойства Коэффициент
Значение = 1;

Решение 2: Использование обработчика «ПослеЗагрузки» в ПКО

Если структура документа сложная или вы хотите максимально имитировать поведение типовой формы, можно воспользоваться обработчиком ПослеЗагрузки в Правилах конвертации объектов (ПКО). В этом случае мы циклом пройдем по строкам документа и заполним все недостающие данные, используя программный интерфейс самой ERP.

Рассмотрим пример кода, который можно разместить в обработчике ПослеЗагрузки:


Для Каждого СтрокаТовары Из Объект.Товары Цикл
    
    // Если КоличествоУпаковок не заполнено, инициализируем его
    Если СтрокаТовары.КоличествоУпаковок = 0 Тогда
        СтрокаТовары.КоличествоУпаковок = СтрокаТовары.Количество;
    КонецЕсли;
    
    // Устанавливаем коэффициент, если он не перенесся
    Если СтрокаТовары.Коэффициент = 0 Тогда
        СтрокаТовары.Коэффициент = 1;
    КонецЕсли;
    
    // Если в конфигурации ERP/УТ используются обязательные статусы
    // Например, для документа ПриобретениеТоваровУслуг
    Объект.Статус = Перечисления.СтатусыПриобретенийТоваровУслуг.Подтверждено;
    
    // Полезно также заполнить ХозяйственнуюОперацию, если она не пришла из источника
    Если Объект.ХозяйственнаяОперация.Пустая() Тогда
        Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщика;
    КонецЕсли;

КонецЦикла;

Этот подход гарантирует, что даже если в источнике (БП 3.0) не было понятия «упаковка», в приемнике (ERP) все технические поля будут корректно заполнены значениями по умолчанию.

Решение 3: Проверка настроек номенклатуры

Иногда причина кроется глубже — в самих данных справочника Номенклатура. Проанализируем ситуацию: если у номенклатуры в ERP не задана единица хранения или единица для отчетов, то любые попытки системы рассчитать количество в базовых единицах приведут к ошибке «нулевое количество при пересчете».

Посмотрим, на что обратить внимание при переносе справочника номенклатуры:

  1. ЕдиницаИзмерения: В ERP этот реквизит ссылается на справочник УпаковкиЕдиницыИзмерения. Убедитесь, что при переносе номенклатуры создается соответствующая запись в этом подчиненном справочнике.
  2. Набор упаковок: Если для номенклатуры установлен признак «Использовать упаковки», но сами упаковки не созданы или не перенесены, документ может «ругаться» на коэффициент пересчета.

Важные нюансы заполнения реквизитов шапки

Как отметил автор темы, в ERP для корректного проведения и заполнения данных часто требуются реквизиты, которых нет в БП 3.0. Чтобы избежать ошибок при пересчете и проведении, рекомендуем всегда программно устанавливать следующие значения (в дополнение к тем, что вы уже заполнили):


Объект.ХозяйственнаяОперация  = Перечисления.ХозяйственныеОперации.ЗакупкаУПоставщика;
Объект.ВариантПриемкиТоваров  = Перечисления.ВариантыПриемкиТоваров.РазделенаПоЗаказамИНакладным;
Объект.НалогообложениеНДС     = Перечисления.ТипыНалогообложенияНДС.ПродажаОблагаетсяНДС;

Резюме: Ошибка пересчета в единицу хранения — это следствие «пустого» реквизита КоличествоУпаковок или Коэффициент в табличной части. Всегда проверяйте заполнение этих полей при программном создании документов в ERP. Использование прямого назначения значений в ПКС или обход табличной части в обработчике ПослеЗагрузки полностью решает данную проблему.

← На главную