Почему в 1С:УНФ после переноса документов не проводится количество по складу и как это исправить

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

Мы часто сталкиваемся с ситуацией, когда после переноса данных между конфигурациями документы ведут себя нетипично. Одной из наиболее распространенных и неочевидных проблем является перенос приходных накладных из конфигурации «1С:Бухгалтерия предприятия» (БП) в «1С:Управление нашей фирмой» (УНФ). На первый взгляд, документы выглядят абсолютно корректно: в табличной части «Запасы» заполнены номенклатура, количество, цена и сумма. Однако при проведении документа мы обнаруживаем критическую ошибку — проводки по складу формируются без количества. Суммовой учет при этом работает правильно, а количественные остатки на складах остаются нулевыми. Из-за этого отчеты по остаткам товаров выводятся пустыми.

В этой статье мы подробно разберем, почему возникает этот сбой, проанализируем архитектуру учета единиц измерения в 1С:УНФ и предоставим пошаговые инструкции по исправлению накопленных ошибок и доработке механизма обмена.

Архитектурная особенность учета единиц измерения в 1С:УНФ

Для того чтобы понять природу этой ошибки, нам необходимо заглянуть во внутреннее устройство метаданных конфигурации «1С:Управление нашей фирмой». В отличие от таких крупных ERP-решений, как «1С:ERP Управление предприятием» или «1С:Управление торговлей», в табличных частях документов УНФ (например, в табличной части Запасы приходных и расходных накладных) физически отсутствует реквизит «Коэффициент».

Все пересчеты количества из дополнительных единиц измерения в базовые (в которых ведется учет на складах и формируются движения по регистрам накопления) происходят динамически «на лету» непосредственно в программном коде проведения документа. Запрос проведения анализирует тип значения в поле ЕдиницаИзмерения:

Именно поэтому при проведении документа формируются движения, в которых есть рублевая сумма, но отсутствует количество.

Почему в документе количество видно, а в движениях его нет?

Пользователи часто сталкиваются с иллюзией: открывая приходную накладную на экране, они видят заполненное количество и единицу измерения (например, «шт.»), но отчеты по остаткам остаются пустыми. Давайте разберем, почему так происходит:

  1. Форма документа маскирует пустоту: При открытии формы документа срабатывают встроенные обработчики платформы и конфигурации. Они визуально подставляют базовую единицу измерения из карточки номенклатуры на форму, если в самой табличной части документа это поле не заполнено. При этом в самой базе данных (в табличной части документа) поле ЕдиницаИзмерения физически остается пустым.
  2. Перекрестные ссылки на единицы измерения: При некорректном переносе в табличную часть документа может записаться единица измерения, принадлежащая другой номенклатуре. Визуально на форме она может отображаться нормально, но при проведении система не может связать ее с текущим товаром и получить коэффициент, из-за чего количество в движениях обнуляется.

В «1С:Бухгалтерии предприятия» учет единиц измерения устроен проще. Там номенклатура чаще всего жестко привязана к одной единице из классификатора ОКЕИ, и механизмы индивидуальных упаковок с коэффициентами не используются так активно. При переносе данных через универсальный формат EnterpriseData или правила конвертации КД 2.0 правила обмена могут не сопоставить типы данных, оставляя реквизит ЕдиницаИзмерения в УНФ незаполненным.

Как выявить проблему с помощью отладки и консоли запросов

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

Если мы встанем в режиме отладки (точке останова) в самом конце процедуры проведения документа в модуле менеджера или объекта, мы увидим, что в коллекции движений по регистру «Запасы на складах» (или «Запасы») колонка Количество имеет значение NULL. Это происходит из-за конструкции в запросе проведения, которая выглядит примерно следующим образом:


ВЫБОР
    КОГДА ТИПЗНАЧЕНИЯ(ПриходнаяНакладнаяЗапасы.ЕдиницаИзмерения) = ТИП(Справочник.КлассификаторЕдиницИзмерения)
        ТОГДА ПриходнаяНакладнаяЗапасы.Количество
    ИНАЧЕ ПриходнаяНакладнаяЗапасы.Количество * ПриходнаяНакладнаяЗапасы.ЕдиницаИзмерения.Коэффициент
КОНЕЦ

Когда реквизит ЕдиницаИзмерения не заполнен, проверка типа значения возвращает ложь, управление переходит в ветку ИНАЧЕ, где происходит умножение на незаполненный реквизит Коэффициент пустого значения, что приводит к результату NULL.

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


ВЫБРАТЬ
    Ссылка,
    Номенклатура,
    Количество,
    ЕдиницаИзмерения
ИЗ
    Документ.ПриходнаяНакладная.Запасы
ГДЕ
    ЕдиницаИзмерения ИЛИ ЕдиницаИзмерения = ЗНАЧЕНИЕ(Справочник.ЕдиницыИзмерения.ПустаяСсылка)

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

Способ 1. Исправление уже перенесенных документов в базе

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

  1. Перейдем в раздел Компания — Администрирование — Обслуживание — Корректировка данных — Групповое изменение реквизитов (в некоторых версиях путь может отличаться: Настройки — Еще больше возможностей — Системные функции).
  2. В поле «Выбирать элементы» укажем объект: Приходная накладная (табличная часть "Запасы"). Если проблема затронула и другие документы (например, «Расходная накладная»), операцию нужно будет повторить и для них.
  3. Настроим отбор, чтобы изменить только поврежденные документы. Добавим условие: Единица измерения не заполнено.
  4. В списке реквизитов для изменения найдем строку Единица измерения. В колонке «Новое значение» нам необходимо указать ссылку на базовую единицу измерения номенклатуры. Для этого воспользуемся возможностью подстановки пути к реквизиту: выберем значение Запасы.Номенклатура.ЕдиницаИзмерения (базовая единица из карточки товара).
  5. Нажмем кнопку «Изменить реквизиты». Программа обойдет все выбранные строки документов и заполнит пустые поля реальными ссылками на классификатор или справочник единиц измерения.
  6. После успешного изменения запустим процедуру группового перепроведения документов за пострадавший период. Это можно сделать через обработку «Проведение документов» или перепровести их непосредственно из списка документов.

После проведения документов количество в проводках и складских отчетах мгновенно появится.

Способ 2. Предотвращение проблемы при последующих переносах данных

Чтобы новые накладные при последующих сеансах обмена данными не загружались с пустыми единицами измерения, нам необходимо скорректировать логику загрузки документов на стороне «1С:УНФ».

Если вы используете правила обмена, разработанные в «1С:Конвертация данных», или типовую синхронизацию через формат EnterpriseData, вам следует добавить программный код в обработчик, срабатывающий после загрузки документа. Рассмотрим пример реализации такого алгоритма.

В обработчик ПриЗагрузке (или ПослеЗагрузки) табличной части Запасы документа ПриходнаяНакладная в УНФ добавим проверку на заполненность:


Для Каждого СтрокаТЧ Из Объект.Запасы Цикл
    Если Не ЗначениеЗаполнено(СтрокаТЧ.ЕдиницаИзмерения) Тогда
        // Подставляем базовую единицу из карточки загружаемой номенклатуры
        Если ЗначениеЗаполнено(СтрокаТЧ.Номенклатура) Тогда
            СтрокаТЧ.ЕдиницаИзмерения = СтрокаТЧ.Номенклатура.ЕдиницаИзмерения;
        КонецЕсли;
    КонецЕсли;
КонецЦикла;

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

Также рекомендуется убедиться, что конфигурации БП и УНФ обновлены до актуальных релизов. В старых версиях правил конвертации действительно существовала зарегистрированная ошибка сопоставления единиц измерения при односторонней синхронизации, которая впоследствии была исправлена разработчиками фирмы «1С».

← На главную