Как в 1С:УТ 11.5 настроить установку цен в единицах хранения вместо упаковок при закупке?

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

В последних версиях 1С:Управление торговлей 11.5 (начиная с релиза 11.5.18 и выше), а также в актуальных сборках ERP 2.5 и КА 2.5, многие пользователи столкнулись с изменением привычного алгоритма работы. Если раньше при создании документа Установка цен номенклатуры на основании Приобретения товаров и услуг система автоматически пересчитывала все цены в базовые единицы хранения (например, в «штуки»), то теперь она оставляет те единицы измерения, которые были указаны в приходе (коробки, упаковки, паллеты). В этой статье мы подробно разберем, почему это произошло, и рассмотрим несколько способов вернуть удобный вам механизм работы.

Выясним причину изменений: проблема «потерянных копеек»

Проанализируем ситуацию с точки зрения разработчиков 1С. Основная причина перехода на фиксацию цен в единицах поставки — борьба с ошибками округления. Рассмотрим классический пример: вы закупаете коробку товара из 3 штук за 1000 рублей. Если система принудительно пересчитает цену в единицы хранения, то цена за 1 штуку составит 333,3333... рубля. При записи в базу число будет округлено до двух или четырех знаков. Когда в дальнейшем потребуется восстановить стоимость всей коробки (например, для возврата поставщику или складской отчетности), обратное умножение даст 999,99 рубля. Разница в одну копейку создает проблемы в регламентированном учете и взаиморасчетах.

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

Способ 1: Использование схемы компоновки данных (СКД) от старых версий

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

  1. Откроем старую версию программы (например, УТ 11.5.17) в режиме Толстый клиент.
  2. Перейдем в раздел CRM и маркетинг — Настройки и справочники — Виды цен.
  3. Найдем вид цены, отвечающий за закупку (например, «Цена поступления»).
  4. В карточке вида цены включим возможность редактирования реквизитов (через меню Еще).
  5. Перейдем к пункту Правило заполнения — Редактировать — Редактировать схему компоновки.
  6. Выгрузим текущую схему в XML-файл, нажав кнопку Сохранить схему в файл.
  7. В вашей текущей (обновленной) базе создадим новый вид цены или отредактируем существующий, импортировав этот XML-файл в настройки правила заполнения.

Таким образом, система начнет использовать старый алгоритм запроса к базе данных, который игнорирует упаковки из документа-основания и всегда обращается к базовой единице хранения Номенклатура.ЕдиницаИзмерения.

Способ 2: Штатный механизм «Изменить цены» (без программирования)

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

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

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

Способ 3: Разработка расширения для автоматизации процесса

Для компаний с большим документооборотом ручной пересчет каждой установки цен неприемлем. В этом случае программисту 1С целесообразно создать небольшое расширение. Проанализируем техническую сторону вопроса. Основная логика заполнения документа на основании находится в обработке ПомощникУстановкиЦенНоменклатуры и общем модуле Ценообразование. В качестве готовой альтернативы собственной разработке можно использовать обработку для заполнения установки цен напрямую из поступлений.

Нам потребуется перехватить процедуру, отвечающую за загрузку данных из документов закупки. В коде расширения необходимо принудительно установить признак использования базовых единиц. Пример логики, которую можно реализовать в процедуре ПередЗаполнениемДанных (условно):


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

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

Рекомендации по настройке точности цен

Разберем ситуацию, упомянутую в обсуждении: когда деление цены упаковки на количество дает бесконечную дробь. Если ваш бизнес-процесс требует обязательной расценки в штуках, мы рекомендуем изменить параметры учета в разделе НСИ и администрирование — Номенклатура — Единицы измерения.

Увеличьте точность хранения цены. По умолчанию в 1С используется 2 знака после запятой. Если установить точность до 3 или 4 знаков, погрешность округления при пересчете из упаковок в штуки станет пренебрежимо малой, что снимет большинство вопросов при сопоставлении документов закупки и продажи. Помните, что изменение точности цены — это серьезный шаг, который повлияет на отображение цен во всех печатных формах и отчетах, поэтому предварительно протестируйте это на копии базы.

Резюме

Выбор способа решения зависит от ваших ресурсов:

  1. Если вы хотите решить вопрос быстро и без кода — используйте штатную кнопку Изменить цены — Пересчитать в единицы хранения в каждом документе.
  2. Если нужно автоматическое заполнение «как раньше» — воспользуйтесь методом подмены СКД в настройках Вида цены.
  3. Для полной автоматизации и кастомизации под специфические нужды — закажите разработку небольшого расширения, которое будет корректировать поведение Помощника установки цен.
← На главную