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