User Rating: 5 / 5

Star ActiveStar ActiveStar ActiveStar ActiveStar Active
 

Добрый день!

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

 



Дело в том, что предопределенность справочника теперь изменчива. Прочитать подробности можно в Предопределенные элементы в платформе 8.3.

У справочника есть теперь реквизит "ИмяПредопределенныхДанных". Его можно очищать и писать. Конечно, если Вы руками попробуете двум элементам присвоить одинаковое значение, то платформа Вам скажет "ата-та", и Вы не накосячите. но есть случаи, когда платформа не властна над записью элементов справочника. Я говорю о РИБе - распределенной информационной базе. Если при записи элемента режим обмен.загрузка = ИСТИНА, то никакого контроля нет. Раньше это приводило к неуникальности кодов справочников и документов.

Теперь это может привести и к неуникальности имени предопределенного элемента.

Опишу практический пример того, как это бывает:

1. Имеем две базы, в которой есть данные. и есть справочник с предопределенными элементами. При создании баз уникальный идентификатор у них создался разный.

2. Мы выгружаем данные универсальной выгрузкой XML или средствами РИБ.

3. Загружаем XML файл.

4. Платформа синхронизирует все и вся по  уникальному идентификатору, а он разный. она не находит элементы и создает новые. Режим обмен.Загрузка у нас ИСТИНА. Контроля при записи нет никакого.

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

"Предопределенный элемент не уникален"

1C Предопределенный элемент не уникален

 Как бороться?

Легко:

1. Рисуем в форме элемента поле "ИмяПредопределенныхДанных", доступное для редактирования.

рисуем ИмяПредопределенныхДанных

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

3. Записываем элемент

Все, готово. Теперь мы сможем пометить элемент на удаление.

Если конфигурация типовая и редактировать её нельзя, то пишем обработку, которая сотрет ИмяПредопределенныхДанных и допишет "1" в имя.

Зачем нам править имя? - спросите Вы.

Отвечу: а как Вы узнаете, какой элемент надо оставить, кто из них сейчас сидит как ссылка в данных? Так Вы их сможете визуально отличить. Скорее всего у Вас будут ссылки на оба элемента и Вам понадобиться обработка по поиску и замене значений. При её использовании будет удобнее, если имена будут отличаться.

Все, спасибо за внимание.

Авторизуйтесь пожалуйста