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