Как исправить ошибку «Переменная не определена (ЭтоПособиеЗаСчетФСС)» при обновлении 1С?

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

При обновлении нетиповых конфигураций на платформе «1С:Предприятие» в режиме обычного приложения (толстый клиент) разработчики часто сталкиваются с ошибками синтаксического контроля. Типичный пример такой ситуации в конфигурациях «Зарплата и кадры бюджетного учреждения 1.0» (ЗКБУ) или «Зарплата и управление персоналом 2.5» (ЗУП) — сообщение проверки модулей:

ПланВидовРасчета.ОсновныеНачисленияОрганизаций.Форма.ФормаВидаРасчета.Форма(247,8)}: Переменная не определена (ЭтоПособиеЗаСчетФСС)

При этом в коде модуля формы присутствует условие:


Если ЭтоПособиеЗаСчетФСС Тогда
    // Действия при расчете пособия
КонецЕсли;

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

Причина возникновения ошибки в обычных формах

Проанализируем архитектуру обычных форм толстого клиента 1С. В отличие от управляемых форм, обычная форма состоит из визуального диалога, локальных реквизитов формы и модуля. Когда в модуле формы происходит обращение к переменной без явного указания контекста (например, без директив или обращения через объект), платформа ищет ее в следующем порядке:

  1. Локальные переменные выполняемой процедуры или функции.
  2. Переменные модуля формы, объявленные через ключевое слово Перем.
  3. Реквизиты самой формы (вкладка «Реквизиты» в редакторе формы).
  4. Реквизиты основного объекта редактирования, если у объекта на вкладке «Реквизиты» установлен флаг Основной реквизит.
  5. Элементы диалога формы.

В типовых решениях идентификатор ЭтоПособиеЗаСчетФСС обычно является реквизитом самой формы с типом Булево либо реквизитом объекта. Если конфигурация снята с поддержки или частично изменена, при автоматическом объединении с новым релизом конфигуратор обновляет текст модуля формы, но оставляет структуру реквизитов из старой рабочей базы. В результате код нового релиза обращается к реквизиту формы, который просто не был добавлен в структуру метаданных формы при слиянии.

Способ 1. Проверка и перенос реквизитов формы (рекомендуемый)

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

  1. Откроем исходную конфигурацию нового типового релиза (файл поставщика .cf) через меню «Конфигурация» — «Открыть конфигурацию из файла».
  2. Развернем дерево метаданных: Планы видов расчета — ОсновныеНачисленияОрганизаций — Формы — ФормаВидаРасчета.
  3. Откроем редактор формы поставщика и перейдем на вкладку Реквизиты.
  4. Найдем в списке реквизитов формы переменную ЭтоПособиеЗаСчетФСС и проверим ее тип (как правило, это Булево).
  5. Перейдем в нашу рабочую обновляемую конфигурацию в ту же самую форму вида расчета на вкладку Реквизиты.
  6. Если реквизит отсутствует, добавим его вручную с тем же именем и типом данных, что и в конфигурации поставщика.
  7. Проверим наличие реквизита объекта (обычно это ПланВидовРасчетаОбъект...) и убедимся, что для него активен признак Основной реквизит. Если этот флаг сброшен, форма теряет прямой доступ к полям самого объекта начисления.
  8. Запустим синтаксический контроль модуля через меню «Текст» — «Контроль синтаксиса» (или клавишей F7) и убедимся, что ошибка исчезла.

Способ 2. Полное замещение формы из типовой конфигурации

Если в ФормаВидаРасчета не вносилось критических пользовательских изменений и доработок, самым надежным способом будет полное обновление формы из файла поставщика:

  1. Откроем меню «Конфигурация» — «Сравнить, объединить с конфигурацией из файла» и выберем файл поставщика .cf нового релиза.
  2. В дереве сравнения снимем все флажки (кнопка «Снять все флажки»).
  3. Найдем объект ПланВидовРасчета.ОсновныеНачисленияОрганизаций и раскроем его ветку до формы ФормаВидаРасчета.
  4. Установим флаг напротив формы и в колонке «Режим объединения» выберем Взять из конфигурации поставщика.
  5. Выполним объединение. Конфигуратор полностью заменит диалог, реквизиты и модуль формы на типовые, устранив рассинхронизацию.

Способ 3. Очистка кэша конфигуратора при ложных ошибках

Иногда после объединения метаданных платформа продолжает сообщать о неопределенной переменной из-за повреждения локального кэша структуры конфигурации. Если реквизит на форме присутствует, а синтаксический контроль все равно выдает ошибку, выполним очистку кэша:

  1. Закроем «1С:Предприятие» и «Конфигуратор».
  2. Очистим содержимое каталогов временных файлов конфигуратора, расположенных по путям:

    %LOCALAPPDATA%\1C\1Cv8\

    %APPDATA%\1C\1Cv8\

  3. Заново откроем информационную базу в конфигураторе. Для пересборки внутренних таблиц метаданных сохраним конфигурацию в файл (меню «Конфигурация» — «Сохранить конфигурацию в файл»), после чего загрузим ее обратно («Конфигурация» — «Загрузить конфигурацию из файла»).

В подавляющем большинстве случаев ошибка вызвана именно отсутствием реквизита на соответствующей вкладке формы после обновления. Добавление реквизита ЭтоПособиеЗаСчетФСС или полная замена формы на типовую решает проблему и позволяет успешно обновить информационную базу.

← На главную