Почему в 1С:УНФ обработка «Формирование цен» подставляет неверные значения и откуда берутся эти цифры?

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

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

Проблема: фантомные значения в формулах

Рассмотрим ситуацию: в регистре сведений Цены номенклатуры зафиксирована цена 26 евро. Однако при открытии обработки Формирование цен и использовании переменной [ОптоваяЕвро] система упорно подставляет значение 34. Самое странное начинается, когда поведение меняется от контекста: если мы меняем саму цену в USD, подставляется верное значение 157.95, но если на основе этой же цены мы хотим рассчитать рублевый эквивалент, переменная внезапно возвращает 140.

Для решения этой загадки нам потребуется пройти путь от простых настроек интерфейса до анализа программного кода и запросов Системы компоновки данных (СКД).

Шаг 1. Проверка истории цен и даты актуальности

Первым делом проанализируем самый очевидный источник данных — регистр сведений Цены номенклатуры. Важно понимать, что обработка Формирование цен делает «срез последних» на определенную дату.

  1. Проверим Дату цен в шапке помощника формирования цен. Если там установлена дата, отличная от текущей, система возьмет цены, актуальные именно на тот момент.
  2. Выясним, нет ли записей «будущим числом». Часто цены устанавливаются документом Установка цен, дата которого случайно оказалась в будущем. В истории цен карточки номенклатуры такие записи могут быть не сразу заметны, если установлен фильтр по текущей дате.
  3. Проанализируем время записи. Если цена была установлена сегодня в 12:00, а обработка была открыта в 10:00 и не обновлялась, данные могут быть неактуальны.

Шаг 2. Влияние наценок и правил в «Видах цен»

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

Перейдем в раздел Продажи — Виды цен и откроем интересующий нас вид цены. Обратим внимание на следующие настройки:

Шаг 3. Кросс-курсовые разницы и валютные пересчеты

Это один из самых сложных и неочевидных механизмов УНФ. Выясним причину, по которой цена в валюте при расчете рублевой цены может «искажаться».

Когда мы используем в формуле переменную [Цена в USD] для расчета Цены в РУБ, система не просто берет цифру из регистра. Она выполняет следующую цепочку:

  1. Берет цену из регистра Цены номенклатуры в валюте ее установки.
  2. Пересчитывает эту цену в валюту управленческого учета (задается в настройках предприятия) по курсу на дату установки этой цены.
  3. Полученный результат конвертирует в целевую валюту (в нашем случае рубли) по текущему курсу на дату формирования цен.

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

Шаг 4. Анализ программного кода и СКД

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


&НаСервере
Процедура ИзменитьКолонкиНовыхЦенНаСервере(Результат)
    ТаблицаФормыНоменклатуры = РеквизитФормыВЗначение("ТЧНоменклатура", Тип("ТаблицаЗначений"));
    // Именно здесь в ТЧНоменклатура уже лежат "неверные" данные
КонецПроцедуры

Выясним, откуда данные попадают в ТЧНоменклатура. Они формируются с помощью Схемы компоновки данных (СКД), которая зашита внутри обработки. Рассмотрим основные причины «глюков» на уровне запроса:

Шаг 5. Как исправить ситуацию?

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

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

Подводя итог, можно сказать, что 1С:УНФ — это гибкая, но сложная система. Значение «140» или «34» не берется из ниоткуда. Это всегда результат математического пересчета, завязанного на курсы валют, коэффициенты единиц измерения или настройки приоритетов источников данных в СКД. Тщательный аудит этих трех областей позволит вам полностью контролировать процесс ценообразования.

← На главную