Как устранить ошибку «Тип не определен (Запрос)» и ускорить 1С при переходе на тонкий клиент

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей IT и автоматизация бизнеса
← На главную

При переходе с толстого клиента на тонкий многие администраторы и разработчики сталкиваются с ситуацией, когда конфигурация, годами работавшая стабильно, начинает выдавать ошибки при запуске или открытии форм. Чаще всего это происходит в клиент-серверных вариантах или при работе через веб-сервер. Разберем детально, почему это происходит, стоит ли тратить время на переписывание кода и какой реальный профит в скорости работы мы получим.

Выясним причину ошибки: почему «Запрос» не работает в тонком клиенте

Рассмотрим ситуацию, описанную в теме: при открытии списка документов (например, «Реализация товаров и услуг») система выдает ошибку Тип не определён (Запрос). Чтобы понять корень проблемы, проанализируем архитектуру тонкого клиента 1С. В отличие от толстого клиента, тонкий клиент — это «легкое» приложение. Его задача — только отрисовывать интерфейс и передавать данные пользователю. Он физически не содержит в себе библиотек для работы с базой данных напрямую.

Объект Запрос, а также СправочникОбъект, ДокументОбъект и менеджеры таблиц существуют только на стороне сервера. Когда программа встречает в коде создание запроса на стороне клиента, она просто не понимает, что это такое, так как в контексте тонкого клиента данного типа данных нет. Если ваша конфигурация (как в примере с УТ 11) является современной, но выдает такие ошибки, это означает, что при выполнении доработок были нарушены стандарты разработки 1С, и серверный код был ошибочно помещен в клиентские процедуры.

Проанализируем целесообразность перехода: будет ли прирост скорости?

Посмотрим на результаты первичных тестов: автор отмечает ускорение запуска системы в 3 раза (с 45 до 15 секунд). Это связано с тем, что тонкий клиент не инициализирует тяжелые механизмы работы с данными при старте. Однако основная выгода проявляется в процессе работы:

  1. Экономия оперативной памяти: Тонкий клиент потребляет значительно меньше ресурсов на рабочих станциях пользователей.
  2. Снижение нагрузки на сеть: В режиме толстого клиента между сервером и компьютером гоняются огромные объемы «сырых» данных. В тонком клиенте передаются только готовые структуры для отображения на форме.
  3. Стабильность на плохих каналах: При работе через веб-сервер (HTTP/HTTPS) тонкий клиент гораздо устойчивее к кратковременным разрывам связи, чем файловый вариант или толстый клиент.

Таким образом, ответ на вопрос «стоит ли переписывать?» однозначен: да, это необходимо не только для исправления ошибок, но и для перехода на современную модель эксплуатации системы.

Разберем по шагам процесс исправления кода

Для того чтобы избавиться от ошибок, нам необходимо выполнить рефакторинг кода, разделив его на клиентскую и серверную части. Рассмотрим типовой пример неправильного кода, который вызывает ошибку в тонком клиенте:


// ОШИБОЧНЫЙ КОД (в модуле формы или команды)
&НаКлиенте
Процедура КомандаВыполнить(Команда)
    Запрос = Новый Запрос; // Здесь возникнет ошибка "Тип не определен"
    Запрос.Текст = "ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура";
    Результат = Запрос.Выполнить();
КонецПроцедуры

Теперь разберем, как правильно переписать этот участок, используя вызов серверной функции. Мы должны вынести всю логику работы с базой данных в процедуру с директивой &НаСервере или в серверный общий модуль.


&НаКлиенте
Процедура КомандаВыполнить(Команда)
    // Вызываем серверную функцию для получения данных
    Данные = ПолучитьДанныеНаСервере();
    // Обрабатываем результат на клиенте (например, выводим сообщение)
    Сообщить("Найдено элементов: " + Данные);
КонецПроцедуры

&НаСервере
Функция ПолучитьДанныеНаСервере()
    // На сервере объект Запрос доступен и работает корректно
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура";
    Возврат Запрос.Выполнить().Выгрузить().Количество();
КонецФункции

Посмотрим на особенности работы в УТ 11 и других современных конфигурациях

Если вы работаете с конфигурацией 1С:Управление торговлей 11, важно помнить, что она изначально спроектирована под управляемые формы и тонкий клиент. Появление ошибок типа Тип не определен (Запрос) в ней — это явный признак некорректных «кастомных» доработок.

Проанализируем ситуацию с модулями. Часто разработчики забывают проверять свойства общих модулей. Для корректной работы в тонком клиенте убедитесь в следующем:

  1. Общие модули, содержащие запросы, должны иметь установленную галочку «Сервер» и снятую галочку «Клиент (управляемое приложение)».
  2. Если модуль должен быть доступен и там, и там, используйте инструкции препроцессора для разделения кода.

Пример использования инструкций препроцессора для универсального кода:


Процедура ВыполнитьДействие()
    #Если Сервер Или ТолстыйКлиентОбычноеПриложение Тогда
        // Этот код увидит только сервер или толстый клиент
        Запрос = Новый Запрос;
        // ... логика запроса ...
    #КонецЕсли
КонецПроцедуры

Подведем итоги: план действий по оптимизации

Чтобы ваша база «летала» и не выдавала ошибок в тонком клиенте, выполните следующие шаги:

  1. Проведите аудит доработок: Найдите все места в коде, где объекты Запрос, СправочникОбъект или ДокументОбъект используются внутри процедур с директивой &НаКлиенте.
  2. Вынесите логику на сервер: Создайте серверные функции в модулях форм или используйте серверные общие модули для получения данных.
  3. Оптимизируйте передачу данных: Не возвращайте с сервера на клиент тяжелые объекты (например, целые таблицы значений). Лучше вернуть структуру или массив простых типов.
  4. Настройте веб-сервер: Для максимальной производительности в клиент-серверном варианте опубликуйте базу на IIS или Apache. Это позволит пользователям подключаться через тонкий клиент по протоколу HTTP, что значительно ускорит работу в территориально распределенных офисах.

Важный момент: исправление этих ошибок — это не просто «косметический ремонт». Это приведение системы в соответствие с требованиями платформы 8.3, что обеспечит стабильность при будущих обновлениях и позволит полноценно использовать все возможности современных интерфейсов 1С.

← На главную