Как исправить ошибку «Поле объекта недоступно для записи (ТипШтрихКода)» при сканировании в 1С

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

Многие пользователи и администраторы систем 1С столкнулись с неприятной ситуацией: после планового обновления платформы 1С:Предприятие до версии 8.3.12.1412 (и выше) перестал работать сканер штрихкодов. При попытке считать любой товар в рабочем месте кассира (РМК) или в документе программа выдает критическую ошибку: «Поле объекта недоступно для записи (ТипШтрихКода)». При этом до обновления всё работало исправно, а сам сканер успешно проходит тесты в драйвере и печатает символы в блокноте.

В этой статье мы подробно разберем, почему возникает этот конфликт, проанализируем техническую сторону вопроса и рассмотрим три варианта решения проблемы — от самого простого до наиболее правильного с точки зрения разработки.

Почему возникает эта ошибка? Выясняем причину

Давайте разберем ситуацию с технической точки зрения. В версии платформы 8.3.12 разработчики фирмы «1С» внесли изменения в ядро системы, добавив новое системное перечисление (тип) под названием ТипШтрихкода. Это глобальный объект платформы, который теперь зарезервирован для системных нужд.

Однако в старых редакциях конфигураций (таких как «Розница 2.2», «Управление торговлей 10.3», «УНФ 1.6») это же имя — ТипШтрихкода — уже использовалось программистами как имя локальной переменной в процедурах обработки торгового оборудования. Проанализируем типичный фрагмент проблемного кода в общем модуле:


// Фрагмент кода из модуля ПодключаемоеОборудованиеРТВызовСервера
ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.ПустаяСсылка;
// Платформа 8.3.12 видит здесь попытку перезаписать системный тип, что запрещено

Когда платформа версии 8.3.12 встречает такую строку, она интерпретирует ТипШтрихкода не как новую переменную, а как обращение к встроенному в платформу объекту, который доступен только для чтения. В результате выполнение кода прерывается с ошибкой «Поле объекта недоступно для записи».

Способ 1. Обновление конфигурации (Рекомендуемый)

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

  1. Проверим текущую версию конфигурации. Если у вас «1С:Розница» версии 2.2.7 или ниже, необходимо обновиться до версии 2.2.8.19 или выше.
  2. В новых релизах разработчики переименовали переменную ТипШтрихкода в ТекущийТипШтрихкода или аналогичное уникальное имя, что полностью устраняет конфликт с платформой.
  3. Для базовых версий программ это единственный корректный способ исправления, так как возможность ручного изменения кода в них ограничена.

Способ 2. Откат платформы (Быстрое решение)

Если у вас нет возможности обновить конфигурацию прямо сейчас (например, база сильно доработана или снята с поддержки), можно временно вернуться на более раннюю версию платформы, где этого системного типа еще не существовало. Рассмотрим, как это сделать правильно.

Для файловой базы:

  1. Закроем все сеансы работы с программой.
  2. Через «Панель управления» — «Программы и компоненты» удалим версию платформы 8.3.12.xxxx.
  3. Установим стабильную версию из ветки 8.3.11 (например, 8.3.11.3021).
  4. Запустим базу. При первом запуске платформа может предложить обновить формат базы данных (если был переход между минорными версиями), соглашаемся.

Для серверной базы:

  1. Остановим службу 1C:Enterprise 8.3 Server Agent.
  2. Удалим текущую версию платформы на сервере и установим 8.3.11.
  3. Не забудьте обновить версию платформы на рабочих станциях пользователей, чтобы избежать ошибок несоответствия версий клиента и сервера.

Важно: Откат платформы — это временная мера. Рано или поздно другие механизмы конфигурации (например, работа с маркировкой Честный Знак или интеграция с новыми ФР) потребуют актуальной версии платформы 8.3.15 и выше.

Способ 3. Ручное исправление кода в конфигураторе (Для программистов)

Если конфигурация «ПРОФ» и вы имеете навыки работы в конфигураторе, проблему можно решить точечно, исправив конфликт имен. Рассмотрим этот процесс по шагам.

Шаг 1. Поиск проблемного места.
Запустим 1С в режиме отладки. Когда возникнет ошибка, нажмем кнопку «Подробно», а затем «Конфигуратор». Система укажет на конкретную строку кода. Чаще всего это общий модуль ПодключаемоеОборудованиеРТВызовСервера или МенеджерОборудованияВызовСервера.

Шаг 2. Замена имени переменной.
Нам нужно переименовать переменную ТипШтрихкода во всей процедуре. Чтобы не задеть системные объекты, добавим к имени переменной нижнее подчеркивание или префикс. Например, заменим ТипШтрихкода на ТипШтрихкода_.

Пример исправленного кода:


// Было:
// ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.ПустаяСсылка;

// Стало:
ТипШтрихкода_ = ПланыВидовХарактеристик.ТипыШтрихкодов.ПустаяСсылка;

Внимание! Необходимо заменить переменную во всех местах внутри данной функции или процедуры, где она используется для получения или передачи значения.

Шаг 3. Сохранение изменений.
После внесения правок сохраним конфигурацию (F7) и обновим конфигурацию базы данных. Теперь при сканировании платформа будет обращаться к вашей локальной переменной ТипШтрихкода_, и конфликт с системным перечислением будет исчерпан.

Использование расширений для исправления

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

Резюме: Ошибка вызвана эволюцией платформы 1С. Для долгосрочной стабильной работы рекомендуется обновить вашу конфигурацию до актуального релиза. Если обновление невозможно — используйте метод с переименованием переменной через расширение или напрямую в коде.

← На главную