При работе с типовыми конфигурациями, такими как Управление торговлей 11, ERP или Комплексная автоматизация, программисты часто сталкиваются с ситуацией, когда при открытии формы документа (например, ЧекККМ через интерфейс РМК) реквизиты уже заполнены, а точки останова в привычных процедурах не срабатывают. Рассмотрим подробно, как диагностировать эту проблему, настроить отладчик и найти «то самое» место в коде.
Самая частая причина, по которой процедура ПриСозданииНаСервере кажется «пропускаемой» — это отсутствие включенного режима отладки на сервере 1С:Предприятия. Разберем ситуацию: если база работает в клиент-серверном варианте (на SQL), отладка клиентских процедур (с директивой &НаКлиенте) работает по умолчанию, а серверных — нет.
Проанализируем шаги для включения серверной отладки:
1C:Enterprise 8.3 Server Agent запущена с ключом -debug. Без этого ключа конфигуратор не сможет «подцепиться» к серверному процессу.Для проверки того, работает ли отладка на сервере в принципе, попробуем вставить в начало процедуры ПриСозданииНаСервере принудительную ошибку:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Если отладка не ловит, исключение точно покажет, выполняется ли код
ВызватьИсключение "Проверка выполнения серверного кода";
КонецПроцедуры
Если при открытии формы вы увидели сообщение об ошибке с этим текстом, значит, код выполняется, но отладчик не настроен. Если ошибки нет — процедура действительно не вызывается по какой-то причине (например, форма открывается через кэшированные данные или обработчик события не назначен в свойствах формы).
Если мы убедились, что отладка работает, но в ПриСозданииНаСервере реквизит Объект.ВидЦен уже заполнен, значит, значение было установлено до создания формы. Рассмотрим основные места, где это происходит.
1. Модуль объекта: Процедура ОбработкаЗаполнения
Это первое место, где инициализируются данные нового документа. Когда вы нажимаете кнопку «Создать» или вызываете ОткрытьФорму для нового объекта, система создает экземпляр документа в памяти и вызывает ОбработкаЗаполнения. Посмотрим на пример типовой логики:
// В модуле объекта документа ЧекККМ
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
// В УТ 11 вид цен часто зависит от склада или соглашения
Если ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда
ЗаполнитьПоСтруктуре(ДанныеЗаполнения);
КонецЕсли;
// Инициализация розничных цен
РозничныеПродажи.ЗаполнитьВидЦенПоУмолчанию(ЭтотОбъект);
КонецПроцедуры
2. Свойство реквизита «Значение заполнения»
Проанализируем метаданные. В конфигураторе откроем свойства реквизита ВидЦен. Обратим внимание на свойство Значение заполнения. Если там указана конкретная ссылка, то при создании любого нового документа это поле будет заполнено автоматически еще до выполнения кода модулей.
3. Параметры формы при вызове ОткрытьФорму
Выясним, откуда вызывается открытие РМК. Часто это происходит из модуля команды. Если в структуру ПараметрыФормы передается ключ ЗначенияЗаполнения, платформа автоматически заполнит соответствующие реквизиты объекта. Рассмотрим пример вызова:
// В модуле команды
ПараметрыФормы = Новый Структура;
ЗначенияЗаполнения = Новый Структура("ВидЦен", Справочники.ВидыЦен.НайтиПоНаименованию("Розничная"));
ПараметрыФормы.Вставить("ЗначенияЗаполнения", ЗначенияЗаполнения);
ОткрытьФорму("Документ.ЧекККМ.Форма.ФормаДокументаРМК", ПараметрыФормы);
В этом случае в форме ПриСозданииНаСервере значение уже будет существовать.
В современных версиях УТ 11 логика определения цен в РМК вынесена в специализированные общие модули. Если стандартные точки останова не помогают, рекомендуем выполнить глобальный поиск по конфигурации (Ctrl+Shift+F) строки .ВидЦен = или поискать вызовы в следующих модулях:
РозничныеПродажиРозничныеПродажиСерверОбработкаРедактированияЦенОсобое внимание стоит уделить Соглашениям с клиентами. В УТ 11 розничные продажи часто жестко привязаны к «Типовому соглашению», которое закреплено за конкретным складом (магазином). Система программно находит действующее соглашение и берет ВидЦен именно оттуда.
Если вы не знаете, в какой процедуре происходит присвоение, воспользуйтесь методом «Замера производительности»:
Ctrl+F и ищите текст ВидЦен. Вы увидите все строки, где этот реквизит упоминался, и сможете перейти к ним двойным кликом.Подводя итог, поиск «неуловимого» кода в 1С требует комплексного подхода: от проверки системных настроек службы сервера до глубокого анализа параметров инициализации объектов в ОбработкеЗаполнения.