Как исправить ошибки ЗначениеНеЗаполнено и отсутствие прав администратора при сравнении и объединении в 1С 8.3

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

При работе с обновлением или доработкой нетиповых конфигураций 1С разработчики часто сталкиваются с ситуациями, когда стандартная процедура сравнения и объединения превращается в сложный квест. Особенно это актуально для баз, которые прошли долгий путь обновления с версии платформы 8.1 до 8.3, или для гибридных решений, где используются обычные формы в среде управляемого приложения. В этой статье мы подробно разберем, почему возникают ошибки синтаксического анализа и блокировки прав при накатывании модулей, и как правильно подготовить конфигурацию к объединению.

Проблема 1: Ошибка синтаксиса ЗначениеНеЗаполнено при сравнении

Одной из самых неочевидных проблем является падение системы или выдача ошибки о недоступном значении в процессе самого сравнения конфигураций. Проанализируем ситуацию: платформа 8.3 при выполнении сравнения проводит предварительную проверку модулей. Если в коде встречается конструкция ЗначениеНеЗаполнено(), система может выдать ошибку, так как эта функция не является встроенной в современных версиях платформы.

Разберем причину: функция ЗначениеНеЗаполнено была частью глобального контекста в версиях 1С:Предприятие 8.0 и 8.1. Начиная с версии 8.2, она была упразднена. Вместо неё разработчики должны использовать встроенную функцию ЗначениеЗаполнено(), которая возвращает противоположное булево значение.

Для решения этой проблемы без тотального переписывания старого кода (которого может быть очень много) воспользуемся методом создания «заглушки» для обратной совместимости. Рассмотрим этот процесс по шагам:

  1. Создадим в конфигурации-приемнике новый Общий модуль. Назовем его, например, СовместимостьС81.
  2. В свойствах модуля обязательно установим флажки Глобальный и Сервер (а также «Клиент», если код вызывается из клиентских процедур). Это позволит обращаться к функциям модуля без указания его имени.
  3. Внутри модуля пропишем следующий код:

Функция ЗначениеНеЗаполнено(Значение) Экспорт
    Возврат Не ЗначениеЗаполнено(Значение);
КонецФункции

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

Проблема 2: Ошибка «Не останется пользователей с административными правами»

Эта ошибка часто блокирует кнопку «Выполнить» в окне объединения конфигураций. Даже если вы добавили пользователя с полными правами, система продолжает выдавать предупреждение. Выясним причину такого поведения.

Платформа 1С выполняет проверку: если после применения изменений в конфигурации базы данных (метаданных) Роли, назначенные текущим пользователям, изменятся таким образом, что ни у одного из них не останется права «Администрирование», обновление будет заблокировано. Это защитный механизм, предотвращающий ситуацию, когда в базу больше невозможно будет зайти под полными правами.

Проанализируем, почему это происходит при объединении модулей:

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

  1. Откройте окно сравнения и объединения.
  2. Найдите в дереве метаданных раздел Общие -> Роли.
  3. Снимите флажки с ролей, которые отвечают за административный доступ (например, ПолныеПрава, АдминистраторСистемы).
  4. Если изменения в ролях всё же необходимы, вместо полной замены используйте режим «Объединить с приоритетом основной конфигурации» или вручную настройте правила объединения в окне настройки прав.
  5. Создайте временного «технического» пользователя непосредственно в Списке пользователей (в режиме Конфигуратора: Администрирование -> Пользователи) и назначьте ему все доступные роли. Это создаст дополнительный «запас» прав, который может помочь пройти проверку платформы.

Проблема 3: Влияние режима совместимости

Рассмотрим ситуацию, когда в одной базе код работает («не падает»), а в другой — вызывает ошибку при сравнении. Ключ к разгадке кроется в свойстве корня конфигурации «Режим совместимости».

Посмотрим на логику работы платформы: если установлен режим совместимости Версия 8.1, платформа намеренно игнорирует отсутствие некоторых функций и позволяет коду исполняться по старым правилам. Как только вы пытаетесь объединить эту конфигурацию с модулем, где режим совместимости выше (например, Версия 8.3.10 и выше) или вовсе отключен, платформа начинает применять строгие правила синтаксиса.

Для корректного переноса функционала рекомендуется:

Рекомендации по безопасному объединению

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

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

Таким образом, успех объединения старых конфигураций на платформе 8.3 зависит от правильной настройки прав доступа, обеспечения обратной совместимости функций глобального контекста и контроля режима совместимости метаданных. Помните, что платформа 1С стремится к типизации и строгости кода, поэтому старые «трюки» из времен 8.1 требуют ручной адаптации под современные стандарты.

← На главную