Что случилось после обновления

После обновления 1С:Зарплата и управление персоналом КОРП, редакция 3.1 до версии 3.1.39.53 перестали работать сразу несколько связанных механизмов:

  • получение уведомлений из налоговой
  • обновление списка документов ЭДО
  • отправка документов через ЭДО
  • работа 1С-Отчетности

Во всех случаях пользователь видит малопонятную ошибку:

Поле объекта недоступно для записи (Удостоверения)

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

Что произошло в обновлении

⚠️ Изображение не найдено: images/2026/1/Certificates_1C.png
В новой версии появился общий модуль с именем Удостоверения.

Из-за этого в одной из процедур возник конфликт: локальная переменная с таким же названием перестала корректно использоваться как поле объекта. Код пытается выполнить запись в Удостоверения, но платформа 1С воспринимает это имя как общий модуль, а не как доступную для записи переменную.

В результате возникает ошибка:

Поле объекта недоступно для записи (Удостоверения)

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

Где находится проблемный код

Проблемная функция называется:

ПолучитьПаспортныеДанныеВладельцаИзРегФайла

Именно в ней используется имя Удостоверения, которое теперь конфликтует с новым общим модулем.

Типичный сценарий:

  1. Обновили ЗУП КОРП до версии 3.1.39.53.
  2. Попытались получить письма из налоговой или обновить ЭДО.
  3. Получили ошибку «Поле объекта недоступно для записи (Удостоверения)».
  4. Попытка отправить документ через ЭДО также завершается ошибкой.
  5. 1С-Отчетность тоже перестала работать.

Идея исправления

Не нужно править типовую конфигурацию напрямую. Лучше создать расширение и перехватить проблемную функцию.

Логика решения:

  1. Создать расширение конфигурации.
  2. Добавить в него функцию ПолучитьПаспортныеДанныеВладельцаИзРегФайла.
  3. Установить для нее режим вызова «Вызывать вместо».
  4. Скопировать код штатной функции в расширение.
  5. Переименовать конфликтную переменную Удостоверения в перУдостоверения.

После этого обращение к локальной переменной перестает конфликтовать с именем общего модуля.

Создание расширения

Создайте новое расширение конфигурации, например:

ИсправлениеУдостоверенияЗУП

Рекомендуемое назначение расширения:

Исправление ошибки "Поле объекта недоступно для записи (Удостоверения)" в ЗУП КОРП 3.1.39.53

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

Добавление функции-перехватчика

В расширении создайте функцию с точно таким же именем, как в конфигурации:

ПолучитьПаспортныеДанныеВладельцаИзРегФайла

Для функции установите свойство:

Вызывать вместо

Это ключевой момент. Без него расширение не перехватит штатную функцию, и ошибка останется.

Копирование штатного кода

Откройте в конфигураторе штатную функцию:

ПолучитьПаспортныеДанныеВладельцаИзРегФайла

Скопируйте её код в одноименную функцию расширения.

Не переписывайте логику «по памяти». Нужно скопировать актуальный код именно из установленной версии 3.1.39.53, потому что в следующих релизах он может измениться.

Переименование конфликтной переменной

В скопированном коде найдите все использования переменной:

Удостоверения

Переименуйте ее в безопасное имя, например:

перУдостоверения

Важно заменить имя во всех местах внутри функции:

  • при объявлении или первом присваивании;
  • при последующих присваиваниях;
  • при чтении свойств и методов;
  • при передаче переменной в другие процедуры или функции, если она используется внутри этого фрагмента кода.

Концептуально изменение выглядит так:

// Было
Удостоверения = ...;
...
Значение = Удостоверения.КакоеТоСвойство;

// Стало
перУдостоверения = ...;
...
Значение = перУдостоверения.КакоеТоСвойство;

После переименования ошибка исчезает: код продолжает работать с теми же данными, но больше не пытается записать значение в имя общего модуля Удостоверения.

Почему это работает

До обновления имя Удостоверения в контексте функции однозначно указывало на локальную переменную или реквизит.

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

Поле объекта недоступно для записи (Удостоверения)

Переименование локальной переменной в перУдостоверения устраняет неоднозначность. Функционально ничего не меняется, но исчезает конфликт имен.

Что проверить после исправления

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

  • получение писем из налоговой;
  • обновление ЭДО;
  • отправку тестового документа через ЭДО;
  • формирование и отправку отчётности через 1С-Отчётность;
  • отсутствие ошибки «Поле объекта недоступно для записи (Удостоверения)» в журнале регистрации.

Если ошибка исчезла, но ЭДО всё ещё не работает, ищите отдельную причину:

  • просроченный или некорректный сертификат;
  • настройки учётной записи ЭДО;
  • права пользователя на операции ЭДО;
  • доступность сервиса оператора ЭДО;
  • ошибки на стороне налоговой или оператора ЭДО;
  • проблемы с прокси, сертификатами или сетевым доступом.

Безопасность изменения

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

Перед изменениями обязательно:

  • сделайте резервную копию базы;
  • выгрузите текущую конфигурацию и существующие расширения;
  • проверьте решение сначала на копии базы;
  • зафиксируйте версию ЗУП, в которой воспроизводится проблема;
  • проверьте, не вышел ли уже официальный патч или следующий релиз.

При следующем обновлении конфигурации код штатной функции может измениться. Тогда потребуется заново сравнить её с кодом в расширении и при необходимости обновить расширение.

Как минимизировать риск при будущих обновлениях

Чтобы расширение не превратилось в источник новых проблем:

  • храните его в отдельном репозитории или в защищенном общем хранилище;
  • укажите в описании расширения версию ЗУП и причину исправления;
  • добавьте комментарий в код с датой, версией конфигурации и ссылкой на проблему;
  • перед обновлением проверяйте, изменилась ли функция ПолучитьПаспортныеДанныеВладельцаИзРегФайла;
  • после обновления обязательно прогоняйте сценарии ЭДО и 1С-Отчетности;
  • удаляйте расширение, когда вендор выпустит официальное исправление.

Итог

Ошибка:

Поле объекта недоступно для записи (Удостоверения)

в ЗУП КОРП 3.1.39.53 связана с появлением общего модуля Удостоверения и конфликтом имен в функции ПолучитьПаспортныеДанныеВладельцаИзРегФайла.

Быстрое решение:

  1. Создать расширение.
  2. Добавить функцию ПолучитьПаспортныеДанныеВладельцаИзРегФайла с режимом «Вызывать вместо».
  3. Скопировать туда код штатной функции.
  4. Переименовать переменную Удостоверения в перУдостоверения.
  5. Проверить ЭДО и 1С-Отчётность.

Это быстрый и относительно безопасный способ вернуть работоспособность ЭДО и отчетности до выхода официального исправления.