Приветствуем коллег и пользователей системы «1С:Зарплата и Управление Персоналом»! Сегодня мы детально разберем крайне неприятную проблему, с которой столкнулись многие бухгалтеры и технические специалисты после обновления конфигурации до релиза 3.1.10.443. Речь идет о сбое при попытке выгрузить документ «Заявка на открытие лицевых счетов» в XML-файл для отправки в банк.
При запуске процесса выгрузки программа внезапно прекращает работу, выдавая системную ошибку:
{ОбщийМодуль.ОбменСБанкамиПоЗарплатнымПроектам.Модуль(3647)}: Поле объекта недоступно для записи (РабочийТелефон) ОбъектXDTO[СвойствоОбъектаXDTO.Имя] = ЗначениеПоля;
Давайте подробно проанализируем, почему возникает этот программный сбой, и рассмотрим все доступные варианты решения проблемы — от простых пользовательских лайфхаков до полноценного исправления кода разработчиком.
Вся магия обмена данными с банками в современных конфигурациях 1С строится на технологии XDTO (XML Data Transfer Objects). В релизе ЗУП 3.1.10.443 разработчики фирмы «1С» обновили поставляемый XDTO-пакет ФорматОбменаСБанкамиПоЗарплатнымПроектам.
В новой версии XML-схемы формат полей РабочийТелефон и ДомашнийТелефон претерпел изменения. В свойствах этих элементов было установлено значение множественности (параметр maxOccurs теперь больше единицы или равен unbounded). Это сделано для того, чтобы в одном файле можно было передавать сразу несколько контактных номеров одного типа.
Однако в платформе «1С:Предприятие 8» работа с множественными и одиночными свойствами XDTO кардинально отличается:
ОбъектXDTO.РабочийТелефон = "89991112233".СписокXDTO. Напрямую присвоить значение такому списку через знак равенства нельзя. Попытка выполнить прямую перезапись вызывает исключение платформы: «Поле объекта недоступно для записи». Для работы с такими свойствами необходимо использовать метод Добавить().Поскольку общий модуль ОбменСБанкамиПоЗарплатнымПроектам в релизе 3.1.10.443 не был вовремя адаптирован под новые требования схемы, универсальный алгоритм выгрузки пытается «в лоб» присвоить строковое значение свойству-списку, что и приводит к аварийному завершению транзакции.
---
Если вам необходимо срочно отправить реестр в банк, а программиста или системного администратора нет на месте, воспользуйтесь простым и эффективным решением. Ошибка возникает только тогда, когда алгоритм выгрузки пытается обработать и записать заполненные поля домашнего или рабочего телефона.
Выполним следующие шаги:
Файл обмена будет успешно сформирован и сохранен на ваш компьютер. После успешной отправки реестра в банк вы сможете вернуть удаленные телефоны сотрудников на свои места.
---
Для того чтобы решить проблему раз и навсегда без изменения типовой конфигурации (чтобы база оставалась на полной поддержке), мы можем создать небольшое расширение и скорректировать процедуру заполнения XDTO-объекта.
Проанализируем ситуацию и напишем безопасный код. Нам необходимо перехватить процедуру заполнения свойств в общем модуле ОбменСБанкамиПоЗарплатнымПроектам и добавить проверку типа данных перед записью.
Выполним по шагам:
ОбменСБанкамиПоЗарплатнымПроектам, нажмите на него правой кнопкой мыши и выберите команду Добавить в расширение.
ОбъектXDTO[СвойствоОбъектаXDTO.Имя] = ЗначениеПоля;
Внедрите безопасную конструкцию, которая определяет тип приемника:
ИмяСвойства = СвойствоОбъектаXDTO.Имя;
ТекущееСвойствоXDTO = ОбъектXDTO[ИмяСвойства];
Если ТипЗнч(ТекущееСвойствоXDTO) = Тип("СписокXDTO") Тогда
// Если поле множественное, добавляем значение в список
Если ЗначениеЗаполнено(ЗначениеПоля) Тогда
ТекущееСвойствоXDTO.Добавить(ЗначениеПоля);
КонецЕсли;
Иначе
// Если поле одиночное, выполняем стандартную перезапись
ОбъектXDTO[ИмяСвойства] = ЗначениеПоля;
КонецЕсли;
Этот код проверяет, является ли целевой элемент структуры списком СписокXDTO. Если это список, платформа использует корректный метод Добавить(), а если простое поле — отрабатывает стандартный механизм. Сохраните расширение и обновите базу данных.
---
Еще один рабочий способ, обнаруженный системными администраторами на практике — это временный откат XML-схемы до старой, стабильной версии.
Рассмотрим этот вариант по шагам:
.xsd на жесткий диск.Важное предупреждение: Данный способ является временной мерой. При последующем обновлении программы конфигурация заменит этот пакет на новый типовой. Используйте его только в крайнем случае, если нет возможности оперативно написать расширение.
---
Фирма «1С» оперативно реагирует на критические ошибки, мешающие расчету зарплаты и взаимодействию с банками, выпуская автоматические исправления (патчи).
Рекомендуем проверить наличие готового исправления в вашей системе:
Также не забывайте о стандартной гигиене баз данных: после применения исправлений, патчей или изменения XDTO-схем обязательно очищайте локальный кэш конфигурации на рабочем компьютере пользователя, а при клиент-серверном варианте работы — перезапускайте службу сервера «1С:Предприятия», чтобы кэшированные схемы метаданных обновились в оперативной памяти.