Зачем в 1С 7.7 Торговля и Склад реквизит Единица в справочнике Цены сделан периодическим и как безопасно изменить эту логику

Программист 1С v7.7 Управленческий учет Торговля и дистрибуция
← На главную

В типовой конфигурации «Торговля и Склад» (ТиС) редакции 9.2 для платформы 1С:Предприятие 7.7 реквизит Единица справочника Цены имеет статус периодического. Это вызывает множество вопросов у разработчиков и администраторов баз данных, так как изменение единицы измерения во времени часто приводит к ошибкам в учете и путанице при перепроведении документов. В рамках данной статьи мы подробно разберем, какой смысл закладывали разработчики в эту архитектуру, какие риски она несет и как правильно модифицировать систему, если периодичность вам не требуется.

Зачем нужна периодичность единицы измерения в ценах

Рассмотрим логику разработчиков 1С. Периодичность реквизита позволяет хранить историю того, для какой упаковки или единицы измерения была установлена цена в конкретный момент времени. Проанализируем типичную ситуацию: компания продает яйца. В начале года цена устанавливается за «Штуку». Спустя месяц руководство решает перейти на оптовые продажи и фиксирует цену за «Десяток». Благодаря периодичности, система знает, что до 1 февраля 10 рублей — это цена за штуку, а после — это цена за упаковку. Это позволяет:

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

Анализ рисков и технических последствий периодичности

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

  1. Производительность: При формировании прайс-листов или проведении крупных документов система вынуждена обращаться к таблице констант для каждой строки, чтобы выяснить актуальную единицу измерения. Это создает дополнительную нагрузку на SQL-сервер или файловую систему.
  2. Целостность данных: Если пользователь вручную меняет единицу в справочнике, не контролируя дату в истории, 1С создает новую запись. В результате в один день цена может быть за штуку, а в другой — за блок, при этом само числовое значение цены остается прежним.
  3. Сложность кода: Разработчикам приходится использовать конструкции типа Единица.Получить(ДатаДок) вместо прямого обращения к реквизиту Единица.

Как безопасно снять признак периодичности с реквизита Единица

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

Шаг 1. Резервное копирование и подготовка. Перед любыми изменениями метаданных обязательно создайте архивную копию базы. Проверьте, чтобы в базе не было активных пользователей.

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

Проанализируем пример типичного кода, который требует замены. Вместо получения значения на дату:


// Было (периодический реквизит)
ТекЕд = СпрЦены.Единица.Получить(РабочаяДата());

Необходимо перейти к прямому обращению:


// Стало (обычный реквизит)
ТекЕд = СпрЦены.Единица;

Шаг 3. Изменение метаданных. В Конфигураторе откройте справочник Цены, найдите реквизит Единица и снимите галочку «Периодический». При сохранении изменений 1С 7.7 предупредит, что история значений будет потеряна. Система оставит только те значения, которые актуальны на текущий момент (последние записи в истории).

Шаг 4. Исправление функций установки цен. Если в вашей конфигурации автоматизирована установка цен при приходе товара (например, в документе ПоступлениеТМЦРозница), проверьте код проведения. Часто там используется метод УстановитьРеквизитСправочника, который предназначен именно для периодических реквизитов. Замените его на обычное присвоение значения:


// Пример исправления в модуле проведения
СпрЦены = СоздатьОбъект("Справочник.Цены");
СпрЦены.ИспользоватьВладельца(Товар);
Если СпрЦены.НайтиПоНаименованию("Розничная", 0, 1) = 1 Тогда
    // Было: УстановитьРеквизитСправочника(СпрЦены.ТекущийЭлемент(), "Единица", НужнаяЕдиница, ДатаДок);
    // Стало:
    СпрЦены.Единица = НужнаяЕдиница;
    СпрЦены.Записать();
КонецЕсли;

Реализация учета цен в разрезе складов

Часто вопрос о периодичности единицы возникает при попытке реализовать разные розничные цены для разных торговых точек. В типовой ТиС 7.7 справочник Цены не имеет разреза по складам. Рассмотрим два способа решения этой задачи, которые обсуждались экспертами.

Способ 1. Использование типов цен. Это наиболее «чистый» с точки зрения типовой архитектуры метод. Для каждого магазина создается свой «Тип цен» (например, «Розничная Магазин 1», «Розничная Магазин 2»). В настройках каждого склада (торговой точки) указывается соответствующий тип цен. Это позволяет избежать изменения структуры метаданных справочника Цены.

Способ 2. Добавление реквизита Склад в справочник Цены. Если типов цен становится слишком много и ими неудобно управлять, можно добавить в справочник Цены обычный (непериодический) реквизит Склад. В этом случае при поиске цены в глобальном модуле (функции глПолучитьЦену, глВернутьЦену) необходимо добавить фильтр по складу.

Особенности учета маркированных товаров (МРЦ на сигареты)

Разберем ситуацию, когда цены на товар меняются очень часто и зависят от партии, как в случае с сигаретами и их Максимальной розничной ценой (МРЦ). В ТиС 7.7 розничный учет на складах типа «АТТ» (Автоматизированная торговая точка) ведется в регистре ОстаткиТМЦ с использованием измерения ЦенаПрод. Это означает, что фактическая цена продажи фиксируется не в справочнике, а в остатках на складе.

Если вы столкнулись с необходимостью продавать один и тот же товар по разным ценам (например, старая партия по 100 руб, новая по 110 руб), посмотрите на механизм автоматической переоценки:

  1. При поступлении новой партии товар в базе переоценивается до новой цены (например, до 110 руб).
  2. Если на кассе (во фронт-офисе) товар фактически продается по старой цене (100 руб), то при загрузке Отчета ККМ в 1С должна формироваться корректирующая переоценка.
  3. Эта переоценка на мгновение возвращает остатку товара старую цену, чтобы документ Отчет ККМ смог списать его без ошибок по аналитике ЦенаПрод.

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

Заключение

Подведем итог: периодичность реквизита Единица в справочнике Цены — это инструмент для специфических задач, который в 90% случаев в современной розничной торговле не требуется. Снятие этого признака упрощает код конфигурации, повышает производительность и снижает вероятность ошибок пользователей. Главное — внимательно проанализировать все вызовы этого реквизита в программном коде и убедиться, что логика пересчета цен через коэффициенты базовых единиц работает корректно.

← На главную