В типовой конфигурации «Торговля и Склад» (ТиС) редакции 9.2 для платформы 1С:Предприятие 7.7 реквизит Единица справочника Цены имеет статус периодического. Это вызывает множество вопросов у разработчиков и администраторов баз данных, так как изменение единицы измерения во времени часто приводит к ошибкам в учете и путанице при перепроведении документов. В рамках данной статьи мы подробно разберем, какой смысл закладывали разработчики в эту архитектуру, какие риски она несет и как правильно модифицировать систему, если периодичность вам не требуется.
Рассмотрим логику разработчиков 1С. Периодичность реквизита позволяет хранить историю того, для какой упаковки или единицы измерения была установлена цена в конкретный момент времени. Проанализируем типичную ситуацию: компания продает яйца. В начале года цена устанавливается за «Штуку». Спустя месяц руководство решает перейти на оптовые продажи и фиксирует цену за «Десяток». Благодаря периодичности, система знает, что до 1 февраля 10 рублей — это цена за штуку, а после — это цена за упаковку. Это позволяет:
Получить(Дата).Однако на практике такая гибкость часто становится источником проблем. Ошибочное изменение единицы измерения «задним числом» или случайное создание записи в истории реквизита приводит к тому, что старые партии товаров начинают списываться по некорректным ценам, вызывая «бардак» в регистрах и отчетах.
С технической точки зрения все периодические значения в 1С 7.7 хранятся в отдельной системной таблице 1SCONST. Выясним, почему это может быть критично:
Единица.Получить(ДатаДок) вместо прямого обращения к реквизиту Единица.Если в вашей учетной модели принято решение, что цена всегда привязана к одной базовой единице (например, с коэффициентом 1), а все остальные цены должны рассчитываться через коэффициенты, периодичность можно убрать. Рассмотрим алгоритм действий по шагам.
Шаг 1. Резервное копирование и подготовка. Перед любыми изменениями метаданных обязательно создайте архивную копию базы. Проверьте, чтобы в базе не было активных пользователей.
Шаг 2. Поиск обращений в конфигурации. Воспользуйтесь глобальным поиском по тексту конфигурации. Нам нужно найти все места, где используется получение значения периодического реквизита. Ищите следующие строки:
.Единица.Получить(ИспользоватьОбъект("Единица"УстановитьРеквизитСправочника(..., "Единица"Проанализируем пример типичного кода, который требует замены. Вместо получения значения на дату:
// Было (периодический реквизит)
ТекЕд = СпрЦены.Единица.Получить(РабочаяДата());
Необходимо перейти к прямому обращению:
// Стало (обычный реквизит)
ТекЕд = СпрЦены.Единица;
Шаг 3. Изменение метаданных. В Конфигураторе откройте справочник Цены, найдите реквизит Единица и снимите галочку «Периодический». При сохранении изменений 1С 7.7 предупредит, что история значений будет потеряна. Система оставит только те значения, которые актуальны на текущий момент (последние записи в истории).
Шаг 4. Исправление функций установки цен. Если в вашей конфигурации автоматизирована установка цен при приходе товара (например, в документе ПоступлениеТМЦРозница), проверьте код проведения. Часто там используется метод УстановитьРеквизитСправочника, который предназначен именно для периодических реквизитов. Замените его на обычное присвоение значения:
// Пример исправления в модуле проведения
СпрЦены = СоздатьОбъект("Справочник.Цены");
СпрЦены.ИспользоватьВладельца(Товар);
Если СпрЦены.НайтиПоНаименованию("Розничная", 0, 1) = 1 Тогда
// Было: УстановитьРеквизитСправочника(СпрЦены.ТекущийЭлемент(), "Единица", НужнаяЕдиница, ДатаДок);
// Стало:
СпрЦены.Единица = НужнаяЕдиница;
СпрЦены.Записать();
КонецЕсли;
Часто вопрос о периодичности единицы возникает при попытке реализовать разные розничные цены для разных торговых точек. В типовой ТиС 7.7 справочник Цены не имеет разреза по складам. Рассмотрим два способа решения этой задачи, которые обсуждались экспертами.
Способ 1. Использование типов цен. Это наиболее «чистый» с точки зрения типовой архитектуры метод. Для каждого магазина создается свой «Тип цен» (например, «Розничная Магазин 1», «Розничная Магазин 2»). В настройках каждого склада (торговой точки) указывается соответствующий тип цен. Это позволяет избежать изменения структуры метаданных справочника Цены.
Способ 2. Добавление реквизита Склад в справочник Цены. Если типов цен становится слишком много и ими неудобно управлять, можно добавить в справочник Цены обычный (непериодический) реквизит Склад. В этом случае при поиске цены в глобальном модуле (функции глПолучитьЦену, глВернутьЦену) необходимо добавить фильтр по складу.
Разберем ситуацию, когда цены на товар меняются очень часто и зависят от партии, как в случае с сигаретами и их Максимальной розничной ценой (МРЦ). В ТиС 7.7 розничный учет на складах типа «АТТ» (Автоматизированная торговая точка) ведется в регистре ОстаткиТМЦ с использованием измерения ЦенаПрод. Это означает, что фактическая цена продажи фиксируется не в справочнике, а в остатках на складе.
Если вы столкнулись с необходимостью продавать один и тот же товар по разным ценам (например, старая партия по 100 руб, новая по 110 руб), посмотрите на механизм автоматической переоценки:
Отчета ККМ в 1С должна формироваться корректирующая переоценка.Отчет ККМ смог списать его без ошибок по аналитике ЦенаПрод.В этой схеме справочник Цены служит лишь для первоначальной выгрузки «плановой» цены в кассовую программу. Периодичность единицы измерения в таком сценарии только мешает, так как для выгрузки на кассу всегда нужна актуальная единица и актуальная цена на текущий момент.
Подведем итог: периодичность реквизита Единица в справочнике Цены — это инструмент для специфических задач, который в 90% случаев в современной розничной торговле не требуется. Снятие этого признака упрощает код конфигурации, повышает производительность и снижает вероятность ошибок пользователей. Главное — внимательно проанализировать все вызовы этого реквизита в программном коде и убедиться, что логика пересчета цен через коэффициенты базовых единиц работает корректно.