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