| Цитата |
|---|
написал: А разве не проще снять флаг обновлять контрагента (реквизит) в экспертных настройках? Тогда ничего не будет обновляться. |
Добрый день. Вероятно так и задумывалось, но в версии расширения для комплексной автоматизации 3.0.1.12, которая стоит у нас, это не работало. Я решил проблему. При синхронизации, найденный в 1с, но ранее несопоставленный контрагент имел признак НовыйРеквизит = Истина и потому далее все реквизиты найденного контрагента перезаписывались данными из битрикс функцией ПолучитьЗначениеРеквизитаОбъекта1СПоКонструктору. Поэтому я добавил одну строчку в код в модуль Б24_КС_ЗагрузкаСервер. 1. В Функция ЗагрузитьОбновитьРеквизиты(пСтруктураНастроек, ДополнительныеДанные) Экспорт
В коде, где находится контрагент, по поисковому фильтру, который ранее еще не был синхронизирован:
| Код |
|---|
ИначеЕсли КоличествоНайденных = 1 Тогда
НовыйРеквизит = Ложь; // Добавил эту строку. Иначе все реквизиты объекта далее перезаписывались значениями из битрикс,
функцией ПолучитьЗначениеРеквизитаОбъекта1СПоКонструктору
РеквизитСсылка = мРеквизиты[0];
КонецЕсли; |
Посмотрел код модуля последнем релизе расширения, я так понимаю, вы изменили механизм и там этой проблемы быть не должно.
2. В Функция ПолучитьЗначениеРеквизитаОбъекта1СПоКонструктору(СтруктураНастроек, ОписаниеПоля, ДополнительныеПараметры)
В области Реквизита, где Контрагент получает значение реквизита Наименование добавил условие.
| Код |
|---|
...
ИначеЕсли ОписаниеПоля.ВидСущности = "Реквизит" Тогда
#Область Реквизит
....
ИначеЕсли ОписаниеПоля.Значение = "Наименование" Тогда
Если ДополнительныеПараметры.ОбновлятьВ1С ИЛИ ДополнительныеПараметры.ЭтоНовыйОбъект Тогда //добавленная строка условия
Наименование = "";
Фамилия = Строка(ДанныеЭлементаБ24.Получить("RQ_LAST_NAME"));
Имя = Строка(ДанныеЭлементаБ24.Получить("RQ_FIRST_NAME"));
Отчество = Строка(ДанныеЭлементаБ24.Получить("RQ_SECOND_NAME"));
ФИО = Фамилия + " " + Имя + " " + Отчество;
ТипРеквизита = Строка(ДанныеЭлементаБ24.Получить("ENTITY_TYPE_ID"));
Если ТипРеквизита = "3" Тогда
Наименование = ФИО;
Наименование = ?(ЗначениеЗаполнено(Наименование), Наименование, Строка(ДанныеЭлементаБ24.Получить("RQ_NAME")));
Иначе
Наименование = Строка(ДанныеЭлементаБ24.Получить("RQ_COMPANY_NAME"));
Наименование = ?(ЗначениеЗаполнено(Наименование), Наименование, ФИО);
Наименование = ?(ЗначениеЗаполнено(Наименование), Наименование, Строка(ДанныеЭлементаБ24.Получить("RQ_COMPANY_FULL_NAME")));
КонецЕсли;
Результат = Наименование;
Иначе //добавленная строка условия
Результат = Объект1С.Наименование; //добавленная строка условия
КонецЕсли; //добавленная строка условия
|
иначе название контрагента в 1с в любом случае перезаписывается названием реквизита из Битрикс. В последнем релизе расширения, как я понимаю эта проблема сохраняется.
Надеюсь, мой комментарий будет полезен.