При работе с подарочными сертификатами в 1С:Управление торговлей 11.4 часто возникают ситуации, когда необходимо скорректировать баланс «зависшего» или ошибочно проданного сертификата — для этого есть обработка поиска и исправления остатков в регистрах накопления. Прямое вмешательство в регистры данных может привести к логическим ошибкам, особенно в части отслеживания срока действия сертификата. Давайте разберем, как устроена эта механика и какие подходы существуют для решения данной задачи.
В конфигурации Управление торговлей 11.4 учет подарочных сертификатов базируется не на одном регистре, а на связке Регистр сведений (для хранения текущего статуса и баланса) и Регистр накопления (для фиксации истории движений, таких как приход и расход).
Основная проблема, с которой сталкиваются разработчики при ручной корректировке — это «зашитая» логика проверки срока действия (решается через автоматизированный поиск и исправление ошибок учета в УТ). Система при проверке актуальности сертификата опирается на дату первого документа продажи (первичной активации), который зафиксирован в регистре накопления. Простое изменение статуса в регистре сведений на Не активирован или Полностью погашен не сбрасывает эту историческую дату, из-за чего срок действия сертификата продолжает отсчитываться от даты изначальной продажи.
Рассмотрим несколько подходов, которые можно применить для приведения данных в актуальное состояние.
Этот метод подходит, если необходимо точечно исправить состояние сертификата без оформления новых продаж — есть обработка заполнения документа корректировки регистров. Однако, как мы выяснили, этого часто бывает недостаточно для обновления даты действия.
Администрирование — Корректировка записей регистров.Полностью погашен.Регистр накопления. Вам потребуется создать запись с расходом на сумму остатка, чтобы «обнулить» сертификат в глазах системы.Если система жестко привязана к истории первичной продажи, наиболее надежным способом «сброса» является оформление документа Реализация товаров и услуг. Для этого проанализируем следующие шаги:
При выполнении работ всегда учитывайте, что проверка срока действия в коде 1С может быть реализована через запрос к истории движений. Если вы видите, что дата не меняется, это означает, что логика функции ПроверитьСрокДействия (название условно) анализирует всю историю изменений записи, а не только ее текущее состояние.
Мы рекомендуем придерживаться следующих правил при работе с регистрами:
Важное предостережение:
Если вы хотите программно воздействовать на систему, изучите структуру движений документа Реализация товаров и услуг. Вы можете использовать следующий пример кода для анализа движений — поможет набор инструментов разработчика с консолью запросов.
// Пример получения данных из регистра накопления для анализа
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПодарочныеСертификатыОстаткиИОбороты.Период,
| ПодарочныеСертификатыОстаткиИОбороты.СуммаПриход,
| ПодарочныеСертификатыОстаткиИОбороты.СуммаРасход
|ИЗ
| РегистрНакопления.ПодарочныеСертификаты.ОстаткиИОбороты(&Начало, &Конец, , , Сертификат = &Сертификат) КАК ПодарочныеСертификатыОстаткиИОбороты";
// Анализируя эти данные, вы поймете, какая запись является «первичной»
Таким образом, для полной корректности данных необходимо не просто менять статус в регистре сведений, а формировать полноценную цепочку движений в регистре накопления, имитирующую продажу нового объекта. Это позволит системе корректно воспринимать дату активации как начало отсчета нового периода действия.