Как переименовать рабочее место в 1С:Управление торговлей 11 при ошибке уникальности идентификатора

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

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

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

Почему возникает ошибка при интерактивном переименовании

Проанализируем логику работы механизма подключаемого оборудования (БПО) и платформы 1С:

  1. Генерация идентификатора клиента: При первом запуске 1С на физическом компьютере под определенной учетной записью операционной системы платформа формирует уникальный GUID с помощью свойства СистемнаяИнформация.ИдентификаторКлиента. Этот идентификатор записывается в локальный конфигурационный файл профиля пользователя ОС (%LOCALAPPDATA%\1C\1Cv8\1cv8u.pfl).
  2. Проверка при записи из формы: В обработчике ПередЗаписьюНаСервере формы элемента справочника РабочиеМеста заложена проверка уникальности. В некоторых версиях конфигурации запрос на поиск дублей по реквизиту ИдентификаторКлиента сравнивает текущий сеанс с базой и не исключает саму редактируемую ссылку (Ссылка <> &ТекущаяСсылка) либо сверяет идентификатор редактируемого рабочего места с идентификатором текущего запущенного сеанса.
  3. Результат: Система обнаруживает совпадение идентификатора клиента редактируемого элемента с уже зарегистрированным в базе и ошибочно расценивает объект как попытку создать дублирующее рабочее место, даже если вы просто меняете текст в поле Наименование.

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

Способ 1. Использование обработки «Групповое изменение реквизитов»

Самый простой и доступный штатный способ переименования — применение типовой административной обработки. При ее выполнении запись объекта происходит напрямую на сервере без вызова валидаций формы элемента.

Разберем по шагам порядок действий:

  1. Перейдем в раздел НСИ и администрирование → Обслуживание → Корректировка данных → Групповое изменение реквизитов.
  2. В поле Изменять выберем справочник Рабочие места.
  3. Нажмем на гиперссылку Все элементы для настройки отбора. Добавим условие: выберем поле Ссылка и укажем конкретное рабочее место, которое требуется переименовать (чтобы случайно не затронуть остальные кассы).
  4. Нажмем кнопку Дополнительные параметры (или пиктограмму шестеренки) и включим флаг Разрешить редактирование реквизитов объектов, а также режим разработчика, если стандартные реквизиты скрыты.
  5. В табличной части с реквизитами найдем строку Наименование, установим напротив нее флаг и введем новое требуемое имя (например, kassa1). Обратите внимание: реквизит Код (содержащий идентификатор) и Имя компьютера менять не нужно.
  6. Нажмем кнопку Изменить реквизиты. Программа выполнит запись напрямую в базу данных в режиме загрузки данных.

Способ 2. Программное переименование через код 1С

Если у вас есть доступ к внешней обработке или консоли кода, можно выполнить переименование программно. В этом случае мы принудительно отключаем проверки с помощью свойства ОбменДанными.Загрузка.

Посмотрим на пример кода:


// Выполняем поиск нужного рабочего места по его текущему наименованию или имени компьютера
СсылкаНаРМ = Справочники.РабочиеМеста.НайтиПоНаименованию("Администратор(Обувь-м-пк)");

Если ЗначениеЗаполнено(СсылкаНаРМ) Тогда
    ОбъектРМ = СсылкаНаРМ.ПолучитьОбъект();
    
    // Включаем режим загрузки данных для обхода проверок в модулях
    ОбъектРМ.ОбменДанными.Загрузка = Истина;
    
    // Устанавливаем новое наименование
    ОбъектРМ.Наименование = "kassa1";
    
    // Записываем объект
    ОбъектРМ.Записать();
    
    Сообщить("Рабочее место успешно переименовано в: " + ОбъектРМ.Наименование);
Иначе
    Сообщить("Рабочее место не найдено!");
КонецЕсли;

Использование свойства ОбменДанными.Загрузка = Истина гарантирует, что запись пройдет без выполнения платформенных проверок уникальности и блокировок уровня БПО.

Способ 3. Синхронизация через файл 1cv8u.pfl

Бывают ситуации, когда на компьютере переустановили операционную систему или удалили профиль пользователя, в результате чего платформа сгенерировала новый идентификатор клиента, потеряв связь с прежним рабочим местом. Чтобы вручную привязать физический компьютер к существующему в базе рабочему месту:

  1. Полностью закроем все сеансы «1С:Предприятие» на данном компьютере.
  2. Откроем текстовым редактором файл настроек, расположенный по пути: %LOCALAPPDATA%\1C\1Cv8\1cv8u.pfl.
  3. Найдем строку с параметром ClientID.
  4. Заменим указанный там GUID на идентификатор клиента нужного рабочего места из базы 1С (его можно скопировать из реквизита Код справочника РабочиеМеста).
  5. Сохраним файл и запустим 1С. Сеанс автоматически определит рабочее место без попытки создать дублирующий элемент.

При работе в терминальных средах (RDP) для предотвращения постоянного создания новых дублей рабочих мест убедитесь, что каталог %LOCALAPPDATA%\1C\1Cv8 сохраняется между сеансами пользователей и не очищается при выходе из системы.

← На главную