При переходе с толстого клиента на тонкий многие администраторы и разработчики сталкиваются с ситуацией, когда конфигурация, годами работавшая стабильно, начинает выдавать ошибки при запуске или открытии форм. Чаще всего это происходит в клиент-серверных вариантах или при работе через веб-сервер. Разберем детально, почему это происходит, стоит ли тратить время на переписывание кода и какой реальный профит в скорости работы мы получим.
Рассмотрим ситуацию, описанную в теме: при открытии списка документов (например, «Реализация товаров и услуг») система выдает ошибку Тип не определён (Запрос). Чтобы понять корень проблемы, проанализируем архитектуру тонкого клиента 1С. В отличие от толстого клиента, тонкий клиент — это «легкое» приложение. Его задача — только отрисовывать интерфейс и передавать данные пользователю. Он физически не содержит в себе библиотек для работы с базой данных напрямую.
Объект Запрос, а также СправочникОбъект, ДокументОбъект и менеджеры таблиц существуют только на стороне сервера. Когда программа встречает в коде создание запроса на стороне клиента, она просто не понимает, что это такое, так как в контексте тонкого клиента данного типа данных нет. Если ваша конфигурация (как в примере с УТ 11) является современной, но выдает такие ошибки, это означает, что при выполнении доработок были нарушены стандарты разработки 1С, и серверный код был ошибочно помещен в клиентские процедуры.
Посмотрим на результаты первичных тестов: автор отмечает ускорение запуска системы в 3 раза (с 45 до 15 секунд). Это связано с тем, что тонкий клиент не инициализирует тяжелые механизмы работы с данными при старте. Однако основная выгода проявляется в процессе работы:
Таким образом, ответ на вопрос «стоит ли переписывать?» однозначен: да, это необходимо не только для исправления ошибок, но и для перехода на современную модель эксплуатации системы.
Для того чтобы избавиться от ошибок, нам необходимо выполнить рефакторинг кода, разделив его на клиентскую и серверную части. Рассмотрим типовой пример неправильного кода, который вызывает ошибку в тонком клиенте:
// ОШИБОЧНЫЙ КОД (в модуле формы или команды)
&НаКлиенте
Процедура КомандаВыполнить(Команда)
Запрос = Новый Запрос; // Здесь возникнет ошибка "Тип не определен"
Запрос.Текст = "ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура";
Результат = Запрос.Выполнить();
КонецПроцедуры
Теперь разберем, как правильно переписать этот участок, используя вызов серверной функции. Мы должны вынести всю логику работы с базой данных в процедуру с директивой &НаСервере или в серверный общий модуль.
&НаКлиенте
Процедура КомандаВыполнить(Команда)
// Вызываем серверную функцию для получения данных
Данные = ПолучитьДанныеНаСервере();
// Обрабатываем результат на клиенте (например, выводим сообщение)
Сообщить("Найдено элементов: " + Данные);
КонецПроцедуры
&НаСервере
Функция ПолучитьДанныеНаСервере()
// На сервере объект Запрос доступен и работает корректно
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура";
Возврат Запрос.Выполнить().Выгрузить().Количество();
КонецФункции
Если вы работаете с конфигурацией 1С:Управление торговлей 11, важно помнить, что она изначально спроектирована под управляемые формы и тонкий клиент. Появление ошибок типа Тип не определен (Запрос) в ней — это явный признак некорректных «кастомных» доработок.
Проанализируем ситуацию с модулями. Часто разработчики забывают проверять свойства общих модулей. Для корректной работы в тонком клиенте убедитесь в следующем:
Пример использования инструкций препроцессора для универсального кода:
Процедура ВыполнитьДействие()
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Тогда
// Этот код увидит только сервер или толстый клиент
Запрос = Новый Запрос;
// ... логика запроса ...
#КонецЕсли
КонецПроцедуры
Чтобы ваша база «летала» и не выдавала ошибок в тонком клиенте, выполните следующие шаги:
Запрос, СправочникОбъект или ДокументОбъект используются внутри процедур с директивой &НаКлиенте.IIS или Apache. Это позволит пользователям подключаться через тонкий клиент по протоколу HTTP, что значительно ускорит работу в территориально распределенных офисах.Важный момент: исправление этих ошибок — это не просто «косметический ремонт». Это приведение системы в соответствие с требованиями платформы 8.3, что обеспечит стабильность при будущих обновлениях и позволит полноценно использовать все возможности современных интерфейсов 1С.