Разбор от сообщества: «Учитывать МРЦ» включено, а цена не подставляется: куда на с
На первый взгляд, ситуация тривиальна: в документе реализации установлен флаг «Учитывать МРЦ», но при подборе номенклатуры минимальная розничная цена не подставляется в колонку «Цена». Специалист с 5-15 годами опыта первым делом проверит регистр сведений «Цены номенклатуры», наличие записи с типом цены «МРЦ» и права доступа. Всё это есть, а цена — пустая. Статья не про то, как включить флаг — это очевидно. Она про механику, которая скрыта внутри: почему платформа игнорирует запись МРЦ, если она не «последняя» по определённым правилам отбора, и как это связано с историей изменения цен и виртуальными таблицами регистров.
Контекст и ситуация
Проблема воспроизводится в типовых конфигурациях «Управление торговлей» (ред. 11.5) и «Бухгалтерия предприятия» (ред. 3.0) на платформе 8.3.25+. Пользователь включает флаг «Учитывать МРЦ» в шапке документа «Реализация товаров и услуг», подбирает номенклатуру — и видит, что колонка «Цена» остаётся пустой. При этом в регистре сведений «Цены номенклатуры» есть актуальная запись с типом цены «МРЦ» на текущую дату.
Ключевой тезис: Проблема не в отсутствии записи МРЦ, а в том, что механизм подбора цены использует не «последнюю по дате» запись, а запись, которая является «последней по дате и времени» в разрезе конкретного периода действия цены. Если у цены МРЦ не заполнен реквизит «Период действия» (или он заполнен некорректно), платформа считает такую запись неприменимой для текущей даты документа.
Технический разбор механики подбора
В типовых конфигурациях подбор цены по флагу «Учитывать МРЦ» реализован через запрос к виртуальной таблице регистра сведений «Цены номенклатуры.СрезПоследних». Но есть нюанс: для типа цены «МРЦ» в конфигурации может быть настроено измерение «Период действия» (дата начала действия цены). Если это измерение не заполнено при записи цены, то запись попадает в срез с датой «01.01.0001», и при отборе по текущей дате документа она не выбирается.
// Пример запроса, который выполняется при подборе (упрощённо)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Цены.Цена КАК Цена
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
| &ДатаДокумента,
| ТипЦены = &ТипЦеныМРЦ И Номенклатура = &Номенклатура) КАК Цены";
// Если в регистре есть запись с ПериодДействия = '00010101',
// а дата документа, например, '2026-03-15', то запись не попадёт в срез
// потому что виртуальная таблица считает её "недействующей" на дату документа.
В результате запрос возвращает пустую цену, хотя запись в регистре физически существует. Это не ошибка платформы, а особенность работы виртуальной таблицы СрезПоследних с периодическими регистрами сведений, где период задаётся не только датой, но и дополнительным измерением.
Практическое руководство: как диагностировать и исправить
Ниже приведён алгоритм, который позволяет за 10 минут найти причину и устранить её без изменения конфигурации.
Шаг 1. Проверка структуры регистра «Цены номенклатуры»
Откройте в конфигураторе регистр сведений «Цены номенклатуры» и посмотрите его измерения. Если среди измерений присутствует «Период действия» (или аналогичное по смыслу), то проблема, скорее всего, в нём.
Предупреждение: Не удаляйте измерение «Период действия» из регистра — это может привести к массовому сбою подбора цен во всех документах. Вместо этого корректируйте записи.
Шаг 2. Проверка конкретной записи МРЦ
Выполните в режиме «Все функции» или через произвольный запрос:
// Проверка: есть ли запись с корректным периодом действия
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Цены.Период,
| Цены.Номенклатура,
| Цены.Цена,
| Цены.ПериодДействия
|ИЗ
| РегистрСведений.ЦеныНоменклатуры КАК Цены
|ГДЕ
| Цены.ТипЦены = &ТипЦеныМРЦ
| И Цены.Номенклатура = &Номенклатура
|УПОРЯДОЧИТЬ ПО
| Цены.Период УБЫВ";
Если в результате запроса вы видите, что ПериодДействия равен NULL или 0001.01.01, а Период (дата записи) — актуальная дата, то причина найдена.
Шаг 3. Исправление записи
Самый безопасный способ — перезаписать цену МРЦ через документ «Установка цен номенклатуры», указав дату начала действия равной дате документа (или более ранней). Если такой документ уже существует, можно выполнить обработку через встроенный язык:
// Корректировка периода действия для существующей записи
МенеджерЗаписи = РегистрыСведений.ЦеныНоменклатуры.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Период = ТекущаяДата(); // дата записи
МенеджерЗаписи.ПериодДействия = ТекущаяДата(); // дата начала действия
МенеджерЗаписи.Номенклатура = СсылкаНаНоменклатуру;
МенеджерЗаписи.ТипЦены = СсылкаНаТипЦеныМРЦ;
МенеджерЗаписи.Цена = 1500; // значение цены
МенеджерЗаписи.Записать();
После этого флаг «Учитывать МРЦ» в документе реализации начнёт корректно подставлять цену.
Типичные ошибки и как их избежать
На основе опыта сообщества (источник: Infostart) собраны три самые частые ошибки, которые допускают даже опытные специалисты.
Ошибка 1: Игнорирование измерения «Период действия»
Многие считают, что раз запись в регистре есть, то она должна подбираться. Но если регистр содержит измерение «Период действия», то для виртуальной таблицы СрезПоследних запись без периода действия — это запись, которая «не действует никогда». Платформа не выдаёт ошибку, она просто не включает такую запись в результат.
Ошибка 2: Путаница между «Период» и «Период действия»
В регистре сведений есть два разных реквизита: Период (дата, когда запись была сделана) и ПериодДействия (дата, с которой цена считается актуальной). Если при загрузке цен из внешнего источника (например, Excel) заполняется только Период, а ПериодДействия остаётся пустым, то подбор по флагу «Учитывать МРЦ» работать не будет.
Ошибка 3: Исправление через прямое изменение регистра
Некоторые специалисты пытаются исправить ситуацию, удаляя измерение «Период действия» из регистра в конфигураторе. Это приводит к тому, что все существующие записи теряют привязку к дате начала действия, и подбор цен начинает работать некорректно для всех типов цен, а не только для МРЦ.
Предупреждение: Никогда не изменяйте структуру регистра сведений в рабочей базе без предварительного анализа всех зависимостей. Вместо этого используйте корректировку записей через документы или обработки.
План действий
- Проверьте структуру регистра «Цены номенклатуры» в конфигураторе — есть ли измерение «Период действия».
- Выполните запрос на проверку записей МРЦ для проблемной номенклатуры — убедитесь, что
ПериодДействиязаполнен. - Если период действия пустой — перезапишите цену через документ «Установка цен номенклатуры» с указанием даты начала действия.
- Проверьте обновления — в некоторых релизах типовых конфигураций (например, УТ 11.5.12+) добавлена проверка на заполнение периода действия при записи цен. Если ваша версия старая, рассмотрите обновление.
- Настройте контроль — добавьте в регламентное задание проверку на наличие записей МРЦ с пустым периодом действия и отправляйте уведомление ответственному.
Выводы
Проблема «Учитывать МРЦ включено, а цена не подставляется» — это классический пример того, как «очевидная» причина (отсутствие записи) оказывается ложной. Реальная причина — в несоответствии между структурой регистра сведений и тем, как платформа интерпретирует записи при использовании виртуальной таблицы СрезПоследних. Понимание этой механики позволяет не только быстро исправить текущую ситуацию, но и предотвратить её повторение в будущем.
Для специалистов с опытом 5-15 лет эта статья — не инструкция по включению флага, а демонстрация того, как глубокое знание платформы (периодические регистры, виртуальные таблицы, измерения) помогает решать задачи, которые на первый взгляд кажутся банальными.
Попробовать НОПик →
Проверить свой уровень бесплатно →