Почему при открытии отчета в 1С после переноса на PostgreSQL возникает ошибка «ПолучитьФорму»?

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

Переход с файлового варианта работы 1С:Предприятие на клиент-серверный (SQL) — это серьезная инфраструктурная задача. Часто после такого «переезда» пользователи сталкиваются с ошибками в ранее работавших отчетах и обработках. Одной из самых частых является ошибка: Процедура или функция с указанным именем не определена (ПолучитьФорму). Давайте разберемся, почему это происходит и как правильно подойти к решению данной проблемы.

Разбор причин возникновения ошибки

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

Когда мы переходим на PostgreSQL, архитектура взаимодействия меняется. Код начинает строго распределяться между клиентом и сервером. Метод ПолучитьФорму — это сугубо клиентский метод. Если он вызывается в модуле, который выполняется на сервере, платформа закономерно выдает исключение, так как на сервере понятие «форма» отсутствует.

Проблема соответствия версий платформы и СУБД

Важно проанализировать не только сам код, но и окружение. Использование современной версии PostgreSQL (например, версии 11) с устаревшей версией платформы 1С 8.3.9 является критической ошибкой.

Компания 1С предъявляет четкие требования к соответствию версий СУБД и платформы. Для PostgreSQL 11 требуется версия платформы 1С не ниже 8.3.14.1565. Если ваша платформа значительно старше, она просто не умеет правильно общаться с базой данных, что может приводить к непредсказуемому поведению системы и ошибкам при выполнении запросов.

Пошаговый план действий

Чтобы привести систему в рабочее и стабильное состояние, рекомендуем действовать по следующему алгоритму:

  1. Проверка совместимости. Проверьте требования 1С для используемой вами версии PostgreSQL на официальном портале обновлений. Если ваша версия платформы ниже минимально допустимой, ее необходимо обновить.
  2. Аудит программного кода. Ошибки, подобные ПолучитьФорму, указывают на то, что отчет написан без учета клиент-серверной архитектуры. Рассмотрим типичный пример исправления кода.

Исправление кода отчета

Для исправления ошибки ПолучитьФорму, необходимо перенести вызов этого метода в контекст клиента. Если логика требует запуска из модуля, который исполняется на сервере, используйте директивы препроцессора или передачу управления через механизмы оповещения.

Рассмотрим пример того, как это выглядит в старом коде:


// Ошибочный вызов в общем модуле или на сервере
Форма = ПолучитьФорму("Отчет.ЛистОтгрузкиИПоступления.Форма.ФормаВопроса");

Чтобы исправить это, необходимо убедиться, что код выполняется на клиенте. В управляемых формах это решается директивой &НаКлиенте. Однако, так как ваша конфигурация УТ 10.3 работает на обычных формах, вам необходимо вызывать форму из модуля формы или модуля команды, которые исполняются на стороне клиента.

Если код вызывается из функции, которая может исполняться на сервере, проанализируйте возможность изменения логики:

  1. Вынесите вызов функции ПолучитьФорму в модуль формы, выполняющийся на клиенте.
  2. Если данные для отчета должны подготавливаться на сервере, используйте механизм: сначала подготовка данных на сервере, затем вызов формы с передачей параметров.

Важные рекомендации

Поскольку УТ 10.3 — это устаревшая конфигурация, любое изменение кода может повлечь за собой другие проблемы. Самостоятельное исправление кода отчета уровня «Могу установить, запустить, удалить» может быть рискованным.

Рекомендуем:

Помните, что исправление одной синтаксической ошибки в отчете — это лишь «заплатка». Системная стабильность всей базы зависит от корректности связки 1С:Предприятие и PostgreSQL, поэтому комплексный подход всегда надежнее.

← На главную