При администрировании торгового оборудования в программе 1С:Управление торговлей 11 часто возникает необходимость изменить название существующего рабочего места (например, переименовать kassa3 в kassa1 после замены или перемещения оборудования). Однако при попытке сохранить изменения в карточке элемента справочника Рабочие места система нередко выдает ошибку: «Рабочее место с таким идентификатором клиента уже существует», блокируя запись объекта.
Разберем детально, почему платформа выдает такое сообщение при наличии всего одной записи в базе, и рассмотрим проверенные способы корректного переименования рабочего места.
Проанализируем логику работы механизма подключаемого оборудования (БПО) и платформы 1С:
СистемнаяИнформация.ИдентификаторКлиента. Этот идентификатор записывается в локальный конфигурационный файл профиля пользователя ОС (%LOCALAPPDATA%\1C\1Cv8\1cv8u.pfl).ПередЗаписьюНаСервере формы элемента справочника РабочиеМеста заложена проверка уникальности. В некоторых версиях конфигурации запрос на поиск дублей по реквизиту ИдентификаторКлиента сравнивает текущий сеанс с базой и не исключает саму редактируемую ссылку (Ссылка <> &ТекущаяСсылка) либо сверяет идентификатор редактируемого рабочего места с идентификатором текущего запущенного сеанса.Наименование.Поскольку проверка зашита на уровне формы, а не в модуле объекта справочника, решить задачу можно обходом клиентских проверок формы. Рассмотрим основные способы.
Самый простой и доступный штатный способ переименования — применение типовой административной обработки. При ее выполнении запись объекта происходит напрямую на сервере без вызова валидаций формы элемента.
Разберем по шагам порядок действий:
kassa1). Обратите внимание: реквизит Код (содержащий идентификатор) и Имя компьютера менять не нужно.Если у вас есть доступ к внешней обработке или консоли кода, можно выполнить переименование программно. В этом случае мы принудительно отключаем проверки с помощью свойства ОбменДанными.Загрузка.
Посмотрим на пример кода:
// Выполняем поиск нужного рабочего места по его текущему наименованию или имени компьютера
СсылкаНаРМ = Справочники.РабочиеМеста.НайтиПоНаименованию("Администратор(Обувь-м-пк)");
Если ЗначениеЗаполнено(СсылкаНаРМ) Тогда
ОбъектРМ = СсылкаНаРМ.ПолучитьОбъект();
// Включаем режим загрузки данных для обхода проверок в модулях
ОбъектРМ.ОбменДанными.Загрузка = Истина;
// Устанавливаем новое наименование
ОбъектРМ.Наименование = "kassa1";
// Записываем объект
ОбъектРМ.Записать();
Сообщить("Рабочее место успешно переименовано в: " + ОбъектРМ.Наименование);
Иначе
Сообщить("Рабочее место не найдено!");
КонецЕсли;
Использование свойства ОбменДанными.Загрузка = Истина гарантирует, что запись пройдет без выполнения платформенных проверок уникальности и блокировок уровня БПО.
Бывают ситуации, когда на компьютере переустановили операционную систему или удалили профиль пользователя, в результате чего платформа сгенерировала новый идентификатор клиента, потеряв связь с прежним рабочим местом. Чтобы вручную привязать физический компьютер к существующему в базе рабочему месту:
%LOCALAPPDATA%\1C\1Cv8\1cv8u.pfl.ClientID.Код справочника РабочиеМеста).При работе в терминальных средах (RDP) для предотвращения постоянного создания новых дублей рабочих мест убедитесь, что каталог %LOCALAPPDATA%\1C\1Cv8 сохраняется между сеансами пользователей и не очищается при выходе из системы.