Переход с файлового варианта работы 1С:Предприятие на клиент-серверный (SQL) — это серьезная инфраструктурная задача. Часто после такого «переезда» пользователи сталкиваются с ошибками в ранее работавших отчетах и обработках. Одной из самых частых является ошибка: Процедура или функция с указанным именем не определена (ПолучитьФорму). Давайте разберемся, почему это происходит и как правильно подойти к решению данной проблемы.
Основная причина заключается в различиях исполнения программного кода в файловом и клиент-серверном вариантах. В файловой версии 1С все действия происходят в рамках одного процесса — толстого клиента. Это позволяет «прощать» ошибки разработчикам, которые не разделяли логику на клиентскую и серверную части.
Когда мы переходим на PostgreSQL, архитектура взаимодействия меняется. Код начинает строго распределяться между клиентом и сервером. Метод ПолучитьФорму — это сугубо клиентский метод. Если он вызывается в модуле, который выполняется на сервере, платформа закономерно выдает исключение, так как на сервере понятие «форма» отсутствует.
Важно проанализировать не только сам код, но и окружение. Использование современной версии PostgreSQL (например, версии 11) с устаревшей версией платформы 1С 8.3.9 является критической ошибкой.
Компания 1С предъявляет четкие требования к соответствию версий СУБД и платформы. Для PostgreSQL 11 требуется версия платформы 1С не ниже 8.3.14.1565. Если ваша платформа значительно старше, она просто не умеет правильно общаться с базой данных, что может приводить к непредсказуемому поведению системы и ошибкам при выполнении запросов.
Чтобы привести систему в рабочее и стабильное состояние, рекомендуем действовать по следующему алгоритму:
PostgreSQL на официальном портале обновлений. Если ваша версия платформы ниже минимально допустимой, ее необходимо обновить.ПолучитьФорму, указывают на то, что отчет написан без учета клиент-серверной архитектуры. Рассмотрим типичный пример исправления кода.Для исправления ошибки ПолучитьФорму, необходимо перенести вызов этого метода в контекст клиента. Если логика требует запуска из модуля, который исполняется на сервере, используйте директивы препроцессора или передачу управления через механизмы оповещения.
Рассмотрим пример того, как это выглядит в старом коде:
// Ошибочный вызов в общем модуле или на сервере
Форма = ПолучитьФорму("Отчет.ЛистОтгрузкиИПоступления.Форма.ФормаВопроса");
Чтобы исправить это, необходимо убедиться, что код выполняется на клиенте. В управляемых формах это решается директивой &НаКлиенте. Однако, так как ваша конфигурация УТ 10.3 работает на обычных формах, вам необходимо вызывать форму из модуля формы или модуля команды, которые исполняются на стороне клиента.
Если код вызывается из функции, которая может исполняться на сервере, проанализируйте возможность изменения логики:
ПолучитьФорму в модуль формы, выполняющийся на клиенте.Поскольку УТ 10.3 — это устаревшая конфигурация, любое изменение кода может повлечь за собой другие проблемы. Самостоятельное исправление кода отчета уровня «Могу установить, запустить, удалить» может быть рискованным.
Рекомендуем:
PostgreSQL и платформу 1С до согласованных версий.Помните, что исправление одной синтаксической ошибки в отчете — это лишь «заплатка». Системная стабильность всей базы зависит от корректности связки 1С:Предприятие и PostgreSQL, поэтому комплексный подход всегда надежнее.