#Область ЗагрузкаДанныхПоПакету Функция ЗагрузитьОбновитьПользовательскиеПоляОбъектов(пОбщиеНастройки, мДанных, ТипОбъектаОбмена) Экспорт ИспользуемыеТипыСвойствБитрикс24 = Б24_Синхр_СинхронизацияСервер.ПолучитьИспользуемыеТипыСвойствБитрикс24(); ЕстьДопРеквизиты = Истина; Результат = Новый Массив; ОбщиеНастройки = Новый Структура; Для Каждого ЭлементСтруктуры Из пОбщиеНастройки Цикл ОбщиеНастройки.Вставить(ЭлементСтруктуры.Ключ, ЭлементСтруктуры.Значение); КонецЦикла; Б24_Синхр_СинхронизацияВызовСервера.ДобавитьСложныеНастройкиОбменаВСтруктуру(ОбщиеНастройки); Если ТипОбъектаОбмена = ОбщиеНастройки.ТипыОбъектовОбмена.СвойствоКомпании Тогда ТипЗначенияСвойств = ОбщиеНастройки.ТипыОбъектовОбмена.ЗначениеСвойстваКомпании; НаборСвойств = Справочники.НаборыДополнительныхРеквизитовИСведений.Справочник_Партнеры_Общие; ОкончаниеНазвания = " (Контрагенты)"; ТипДляЛога = "Компания"; ИначеЕсли ТипОбъектаОбмена = ОбщиеНастройки.ТипыОбъектовОбмена.СвойствоКонтакта Тогда ТипЗначенияСвойств = ОбщиеНастройки.ТипыОбъектовОбмена.ЗначениеСвойстваКонтакта; НаборСвойств = Справочники.НаборыДополнительныхРеквизитовИСведений.Справочник_Партнеры_Общие; ОкончаниеНазвания = " (Контрагенты)"; ТипДляЛога = "Контакт"; ИначеЕсли ТипОбъектаОбмена = ОбщиеНастройки.ТипыОбъектовОбмена.СвойствоСделки Тогда ТипЗначенияСвойств = ОбщиеНастройки.ТипыОбъектовОбмена.ЗначениеСвойстваСделки; НаборСвойств = Справочники.НаборыДополнительныхРеквизитовИСведений.Документ_ЗаказКлиента; ОкончаниеНазвания = " (Заказы покупателей)"; ТипДляЛога = "Сделка"; ИначеЕсли ТипОбъектаОбмена = ОбщиеНастройки.ТипыОбъектовОбмена.СвойствоЗаказа Тогда ТипЗначенияСвойств = ОбщиеНастройки.ТипыОбъектовОбмена.ЗначениеСвойстваЗаказа; НаборСвойств = Справочники.НаборыДополнительныхРеквизитовИСведений.Документ_ЗаказКлиента; ОкончаниеНазвания = " (Заказы покупателей)"; ТипДляЛога = "Заказ"; ИначеЕсли ТипОбъектаОбмена = ОбщиеНастройки.ТипыОбъектовОбмена.СвойствоСчета Тогда ТипЗначенияСвойств = ОбщиеНастройки.ТипыОбъектовОбмена.ЗначениеСвойстваСчета; НаборСвойств = Справочники.НаборыДополнительныхРеквизитовИСведений.Документ_СчетНаОплатуКлиенту; ОкончаниеНазвания = " (Счет на оплату)"; ТипДляЛога = "Счет"; // Используется в других конфигурациях // ЕстьДопРеквизиты = Ложь; КонецЕсли; МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("ТипДанных" , ТипОбъектаОбмена); Запрос.УстановитьПараметр("ТипДанныхЗначенийСвойств", ТипЗначенияСвойств); Запрос.УстановитьПараметр("Портал" , ОбщиеНастройки.Портал); Запрос.Текст = "ВЫБРАТЬ | Б24_Синхр_ИдентификаторыОбъектов.Объект КАК Объект, | Б24_Синхр_ИдентификаторыОбъектов.Идентификатор КАК Идентификатор, | Б24_Синхр_ИдентификаторыОбъектов.ПодчиненныйОбъект КАК ПодчиненныйОбъект |ПОМЕСТИТЬ ВремИдентификаторы |ИЗ | РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов |ГДЕ | Б24_Синхр_ИдентификаторыОбъектов.ТипДанных = &ТипДанных | И Б24_Синхр_ИдентификаторыОбъектов.Портал = &Портал | |ИНДЕКСИРОВАТЬ ПО | Идентификатор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Б24_Синхр_ИдентификаторыОбъектов.Идентификатор КАК Идентификатор, | Б24_Синхр_ИдентификаторыОбъектов.Объект КАК Объект |ПОМЕСТИТЬ ВремИдентификаторыЗначенийСвойств |ИЗ | РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов |ГДЕ | Б24_Синхр_ИдентификаторыОбъектов.ТипДанных = &ТипДанныхЗначенийСвойств | И Б24_Синхр_ИдентификаторыОбъектов.Портал = &Портал | |ИНДЕКСИРОВАТЬ ПО | Идентификатор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ДополнительныеРеквизитыИСведения.Ссылка КАК Объект, | ДополнительныеРеквизитыИСведения.Заголовок КАК Идентификатор |ПОМЕСТИТЬ ВремНаименованияСвойств |ИЗ | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения | |ИНДЕКСИРОВАТЬ ПО | Идентификатор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ЗначенияСвойствОбъектов.Ссылка КАК Объект, | ЗначенияСвойствОбъектов.Владелец КАК Свойство, | ЗначенияСвойствОбъектов.Наименование КАК Идентификатор |ПОМЕСТИТЬ ВремНаименованияЗначенийСвойств |ИЗ | Справочник.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов | |ИНДЕКСИРОВАТЬ ПО | Свойство, | Идентификатор"; Запрос.Выполнить(); ЗагруженныеОбъекты = Новый Массив; Для каждого ТекЭлемент Из мДанных Цикл ИдЭлемента = Формат(ТекЭлемент.Получить("ID"),"ЧГ=0"); ДополнительныйИдЭлемента = ТекЭлемент.Получить("FIELD_NAME"); Если ЗагруженныеОбъекты.Найти(ИдЭлемента) <> Неопределено Тогда Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Истина))); Продолжить; КонецЕсли; ЗагруженныеОбъекты.Добавить(ИдЭлемента); ПользовательскийТип = ТекЭлемент.Получить("USER_TYPE_ID"); Если ИспользуемыеТипыСвойствБитрикс24.Найти(ПользовательскийТип) = Неопределено Тогда Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Истина))); Продолжить; КонецЕсли; Наименование = ""; НаименованияНаФормах = ТекЭлемент.Получить("EDIT_FORM_LABEL"); Если НаименованияНаФормах <> Неопределено Тогда Наименование = НаименованияНаФормах.Получить(Б24_Синхр_ОбщегоНазначенияСервер.ПолучитьЛокализациюБитрикс24()); КонецЕсли; Если Наименование = "" ИЛИ Наименование = Неопределено Тогда Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, "Не найдено наименование для свойства с Ид:" + ИдЭлемента); Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Ложь))); Продолжить; КонецЕсли; ВнешнийКод = Строка(ТекЭлемент.Получить("XML_ID")); Если ТекЭлемент.Получить("MULTIPLE") = "Y" Тогда Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Истина))); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Свойство: " + Наименование + " не будет добавлено/обновлено. т.к. является множественным"); Продолжить; КонецЕсли; #Область ПоискСозданиеСвойства Свойство = Неопределено; Свойство = ПолучитьОбъектПоИдентификаторуИзВременнойТаблицы(МенеджерВременныхТаблиц, "ВремИдентификаторы", ИдЭлемента); Если ЗначениеЗаполнено(ВнешнийКод)И НЕ ЗначениеЗаполнено(Свойство) Тогда Свойство = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения"), ВнешнийКод); КонецЕсли; Если НЕ ЗначениеЗаполнено(Свойство) Тогда Свойство = ПолучитьОбъектПоИдентификаторуИзВременнойТаблицы(МенеджерВременныхТаблиц, "ВремНаименованияСвойств", Наименование); КонецЕсли; ЭтоНовый = Истина; Если Свойство = Неопределено Тогда Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.СоздатьЭлемент(); Свойство.НаборСвойств = НаборСвойств; Если Наименование = "Внешний URL" Тогда Свойство.Доступен = Ложь; Свойство.Виден = Ложь; КонецЕсли; Иначе ЭтоНовый = Ложь; Свойство = Свойство.ПолучитьОбъект(); КонецЕсли; #КонецОбласти Если ЭтоНовый Тогда Свойство.Наименование = Наименование + ОкончаниеНазвания; Свойство.Заголовок = Наименование; Иначе Если НЕ СтрНайти(Свойство.Заголовок, "Битрикс24") > 0 Тогда Свойство.Заголовок = Наименование; КонецЕсли; КонецЕсли; Если ТипОбъектаОбмена = ОбщиеНастройки.ТипыОбъектовОбмена.СвойствоКомпании Тогда Если стрНайти(Свойство.Комментарий, "Свойство компании (Битрикс24)") = 0 Тогда Свойство.Комментарий = Свойство.Комментарий+" "+"Свойство компании (Битрикс24)"; КонецЕсли; ИначеЕсли ТипОбъектаОбмена = ОбщиеНастройки.ТипыОбъектовОбмена.СвойствоКонтакта Тогда Если стрНайти(Свойство.Комментарий, "Свойство контакта (Битрикс24)") = 0 Тогда Свойство.Комментарий = Свойство.Комментарий+" "+"Свойство контакта (Битрикс24)"; КонецЕсли; ИначеЕсли ТипОбъектаОбмена = ОбщиеНастройки.ТипыОбъектовОбмена.СвойствоСделки Тогда Если стрНайти(Свойство.Комментарий, "Свойство сделки (Битрикс24)") = 0 Тогда Свойство.Комментарий = Свойство.Комментарий+" "+"Свойство сделки (Битрикс24)"; КонецЕсли; ИначеЕсли ТипОбъектаОбмена = ОбщиеНастройки.ТипыОбъектовОбмена.СвойствоЗаказа Тогда Если стрНайти(Свойство.Комментарий, "Свойство заказа (Битрикс24)") = 0 Тогда Свойство.Комментарий = Свойство.Комментарий+" "+"Свойство заказа (Битрикс24)"; КонецЕсли; КонецЕсли; Свойство.ЗаполнятьОбязательно = ТекЭлемент.Получить("MANDATORY") = "Y"; Если ЭтоНовый Тогда Свойство.ЭтоДополнительноеСведение = НЕ ЕстьДопРеквизиты; #Область РазборТипаСвойства МассивТипов = Новый Массив; Если ПользовательскийТип = "string" Тогда КС = Новый КвалификаторыСтроки(0); МассивТипов.Добавить(Тип("Строка")); ОписаниеТиповС = Новый ОписаниеТипов(МассивТипов, , КС); Свойство.ТипЗначения = ОписаниеТиповС; ИначеЕсли ПользовательскийТип = "url" Тогда КС = Новый КвалификаторыСтроки(777); МассивТипов.Добавить(Тип("Строка")); ОписаниеТиповС = Новый ОписаниеТипов(МассивТипов, , КС); Свойство.ТипЗначения = ОписаниеТиповС; ИначеЕсли ПользовательскийТип = "boolean" Тогда КД = Новый КвалификаторыДаты(ЧастиДаты.Дата); МассивТипов.Добавить(Тип("Булево")); ОписаниеТиповБ = Новый ОписаниеТипов(МассивТипов); Свойство.ТипЗначения = ОписаниеТиповБ; ИначеЕсли ПользовательскийТип = "integer" Тогда КЧ = Новый КвалификаторыЧисла(12,0); МассивТипов.Добавить(Тип("Число")); ОписаниеТиповЧ = Новый ОписаниеТипов(МассивТипов, , КЧ); Свойство.ТипЗначения = ОписаниеТиповЧ; ИначеЕсли ПользовательскийТип = "double" Тогда КЧ = Новый КвалификаторыЧисла(12,3); МассивТипов.Добавить(Тип("Число")); ОписаниеТиповЧ = Новый ОписаниеТипов(МассивТипов, , КЧ); Свойство.ТипЗначения = ОписаниеТиповЧ; ИначеЕсли ПользовательскийТип = "datetime" Тогда КД = Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя); МассивТипов.Добавить(Тип("Дата")); ОписаниеТиповД = Новый ОписаниеТипов(МассивТипов, , КД); Свойство.ТипЗначения = ОписаниеТиповД; ИначеЕсли ПользовательскийТип = "date" Тогда КД = Новый КвалификаторыДаты(ЧастиДаты.Дата); МассивТипов.Добавить(Тип("Дата")); ОписаниеТиповД = Новый ОписаниеТипов(МассивТипов, , КД); Свойство.ТипЗначения = ОписаниеТиповД; ИначеЕсли ПользовательскийТип = "employee" Тогда КД = Новый КвалификаторыДаты(ЧастиДаты.Дата); МассивТипов.Добавить(Тип("СправочникСсылка.Пользователи")); ОписаниеТиповП = Новый ОписаниеТипов(МассивТипов); Свойство.ТипЗначения = ОписаниеТиповП; ИначеЕсли ПользовательскийТип = "enumeration" Тогда КД = Новый КвалификаторыДаты(ЧастиДаты.Дата); МассивТипов.Добавить(Тип("СправочникСсылка.ЗначенияСвойствОбъектов")); ОписаниеТиповП = Новый ОписаниеТипов(МассивТипов); Свойство.ТипЗначения = ОписаниеТиповП; Свойство.ДополнительныеЗначенияИспользуются = Истина; КонецЕсли; #КонецОбласти КонецЕсли; Попытка Свойство.ДополнительныеСвойства.Вставить("ЗагрузкаСБитрикс24", Истина); Свойство.Записать(); Б24_Синхр_СинхронизацияВызовСервера.ЗаписатьИдБ24Объекта(ОбщиеНастройки, ТипОбъектаОбмена, Свойство.Ссылка, ИдЭлемента, ДополнительныйИдЭлемента); Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Истина))); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Записано свойство объекта типа: "+ТипДляЛога+ " с наименованием: " + Наименование); Если ПользовательскийТип = "enumeration" Тогда #Область ЗаписьЗначенийСвойств ЗначенияСписка = ТекЭлемент.Получить("LIST"); Если ЗначениеЗаполнено(ЗначенияСписка) Тогда Для Каждого ТекЗначениеСвойства Из ЗначенияСписка Цикл ИдЗначенияСвойства = Формат(ТекЗначениеСвойства.Получить("ID"),"ЧГ=0"); НаименованиеЗнСвойства = Строка(ТекЗначениеСвойства.Получить("VALUE")); #Область ПоискСозданиеЗначенияСвойства ЗначениеСвойства = ПолучитьОбъектПоИдентификаторуИзВременнойТаблицы(МенеджерВременныхТаблиц, "ВремИдентификаторыЗначенийСвойств", ИдЗначенияСвойства); Если НЕ ЗначениеЗаполнено(ЗначениеСвойства) Тогда Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("Свойство", Свойство.Ссылка); Запрос.УстановитьПараметр("Наименование", НаименованиеЗнСвойства); Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | ВремНаименованияЗначенийСвойств.Объект КАК Объект |ИЗ | ВремНаименованияЗначенийСвойств КАК ВремНаименованияЗначенийСвойств |ГДЕ | ВремНаименованияЗначенийСвойств.Свойство = &Свойство | И ВремНаименованияЗначенийСвойств.Идентификатор = &Наименование"; ВыборкаЗначенийСвойств = Запрос.Выполнить().Выбрать(); Пока ВыборкаЗначенийСвойств.Следующий() Цикл ЗначениеСвойства = ВыборкаЗначенийСвойств.Объект; Прервать КонецЦикла; КонецЕсли; Если ЗначениеСвойства = Неопределено Тогда ЗначениеСвойства = Справочники.ЗначенияСвойствОбъектов.СоздатьЭлемент(); Иначе ЗначениеСвойства = ЗначениеСвойства.ПолучитьОбъект(); КонецЕсли; #КонецОбласти ЗначениеСвойства.Владелец = ?(Свойство.ВладелецДополнительныхЗначений.Пустая(), Свойство.Ссылка, Свойство.ВладелецДополнительныхЗначений); ЗначениеСвойства.Наименование = НаименованиеЗнСвойства; ЗначениеСвойства.ПолноеНаименование = НаименованиеЗнСвойства; ЗначениеСвойства.ДополнительныеСвойства.Вставить("ЗагрузкаСБитрикс24", Истина); ЗначениеСвойства.Записать(); Б24_Синхр_СинхронизацияВызовСервера.ЗаписатьИдБ24Объекта(ОбщиеНастройки, ТипЗначенияСвойств, ЗначениеСвойства.Ссылка, ИдЗначенияСвойства); КонецЦикла; КонецЕсли; #КонецОбласти КонецЕсли; Если ЭтоНовый И Наименование <> "Внешний URL" Тогда НаборСвойств = Свойство.НаборСвойств; ТекНаборСвойств = НаборСвойств.ПолучитьОбъект(); Если ЕстьДопРеквизиты Тогда НовоеСвойствоНабора = ТекНаборСвойств.ДополнительныеРеквизиты.Добавить(); Иначе НовоеСвойствоНабора = ТекНаборСвойств.ДополнительныеСведения.Добавить(); КонецЕсли; НовоеСвойствоНабора.Свойство = Свойство.Ссылка; ТекНаборСвойств.ДополнительныеСвойства.Вставить("ЗагрузкаСБитрикс24", Истина); ТекНаборСвойств.Записать(); Если ТипОбъектаОбмена = ОбщиеНастройки.ТипыОбъектовОбмена.СвойствоКонтакта Тогда НаборСвойств = Справочники.НаборыДополнительныхРеквизитовИСведений.Справочник_КонтактныеЛицаПартнеров; ТекНаборСвойств = НаборСвойств.ПолучитьОбъект(); Если ЕстьДопРеквизиты Тогда НовоеСвойствоНабора = ТекНаборСвойств.ДополнительныеРеквизиты.Добавить(); Иначе НовоеСвойствоНабора = ТекНаборСвойств.ДополнительныеСведения.Добавить(); КонецЕсли; НовоеСвойствоНабора.Свойство = Свойство.Ссылка; ТекНаборСвойств.ДополнительныеСвойства.Вставить("ЗагрузкаСБитрикс24", Истина); ТекНаборСвойств.Записать(); КонецЕсли; КонецЕсли; Исключение Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, "Во время записи свойства объекта типа: "+ТипДляЛога+" с наименованием: " + Наименование + " возникли ошибки."); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, ОписаниеОшибки()); Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Ложь))); ОбщиеНастройки.ВыполненоБезОшибок = Ложь; КонецПопытки; КонецЦикла; пОбщиеНастройки.НомерСообщения = ОбщиеНастройки.НомерСообщения; // чтобы лог не затерся. Возврат Результат; КонецФункции Функция РазобратьПользовательскиеПоляВТаблицу(ОбщиеНастройки, ИнформацияООбъекте, МенеджерВременныхТаблиц) ЗапросПоСвойствам = Новый Запрос; ЗапросПоСвойствам.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; ЗапросПоСвойствам.Текст = "ВЫБРАТЬ * |ИЗ | ВремСвойства КАК ВремСвойства"; ТаблицаСвойств = ЗапросПоСвойствам.Выполнить().Выгрузить(); мСвойстваИсключения = ОбщиеНастройки.НеЗагружаемыеЗначенияСвойств; тзнЗначенийСвойствТовара = Новый ТаблицаЗначений; тзнЗначенийСвойствТовара.Колонки.Добавить("Свойство"); тзнЗначенийСвойствТовара.Колонки.Добавить("ЗначениеСвойства"); тзнЗначенийСвойствТовара.Колонки.Добавить("ПоддерживаетсяСвойство"); тзнЗначенийСвойствТовара.Колонки.Добавить("ЗначениеОчищено"); тзнЗначенийСвойствТовара.Колонки.Добавить("ЭтоДополнительноеСведение"); Для Каждого ТекСвойство Из ТаблицаСвойств Цикл Свойство = ТекСвойство.Объект; Если мСвойстваИсключения.Найти(Свойство) <> Неопределено Тогда Продолжить; КонецЕсли; Если НЕ ЗначениеЗаполнено(Свойство) Тогда Продолжить; КонецЕсли; НовоеЗначениеСвойстваТовара = тзнЗначенийСвойствТовара.Добавить(); НовоеЗначениеСвойстваТовара.Свойство = Свойство; НовоеЗначениеСвойстваТовара.ПоддерживаетсяСвойство = Истина; НовоеЗначениеСвойстваТовара.ЗначениеОчищено = Ложь; НовоеЗначениеСвойстваТовара.ЭтоДополнительноеСведение = Свойство.ЭтоДополнительноеСведение; ЗначениеСвойстваСПортала = ИнформацияООбъекте.Получить(ТекСвойство.ДополнительныйИдентификатор); Если ЗначениеСвойстваСПортала <> Неопределено И ТипЗнч(ЗначениеСвойстваСПортала) <> Тип("Соответствие") Тогда ТипЗначенияСвойства = Свойство.ТипЗначения; Попытка Если ТипЗначенияСвойства.СодержитТип(Тип("Строка")) Тогда НовоеЗначениеСвойстваТовара.ЗначениеСвойства = ЗначениеСвойстваСПортала; ИначеЕсли ТипЗначенияСвойства.СодержитТип(Тип("Булево")) Тогда НовоеЗначениеСвойстваТовара.ЗначениеСвойства = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Булево"), ЗначениеСвойстваСПортала); ИначеЕсли ТипЗначенияСвойства.СодержитТип(Тип("Число")) Тогда НовоеЗначениеСвойстваТовара.ЗначениеСвойства = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Число"), ЗначениеСвойстваСПортала); ИначеЕсли ТипЗначенияСвойства.СодержитТип(Тип("Дата")) Тогда НовоеЗначениеСвойстваТовара.ЗначениеСвойства = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Дата"), ЗначениеСвойстваСПортала); ИначеЕсли ТипЗначенияСвойства.СодержитТип(Тип("СправочникСсылка.Пользователи")) Тогда НайденнаяСтрока = ОбщиеНастройки.ТаблицаСопоставленияПользователей.Найти(ЗначениеСвойстваСПортала, "ИдПользователя"); Если НайденнаяСтрока <> Неопределено Тогда НовоеЗначениеСвойстваТовара.ЗначениеСвойства = НайденнаяСтрока.Пользователь1С; КонецЕсли; ИначеЕсли ТипЗначенияСвойства.СодержитТип(Тип("СправочникСсылка.ЗначенияСвойствОбъектов")) Тогда НовоеЗначениеСвойстваТовара.ЗначениеСвойства = ПолучитьОбъектПоИдентификаторуИзВременнойТаблицы(МенеджерВременныхТаблиц, "ВремИдентификаторыЗначенийСвойств", ЗначениеСвойстваСПортала); Иначе НовоеЗначениеСвойстваТовара.ПоддерживаетсяСвойство = Ложь; КонецЕсли; Исключение НовоеЗначениеСвойстваТовара.ПоддерживаетсяСвойство = Ложь; Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Не удалось обработать значение свойства: " + Строка(ЗначениеСвойстваСПортала) + " свойства: " + Строка(Свойство)); КонецПопытки; Иначе НовоеЗначениеСвойстваТовара.ЗначениеОчищено = Истина; КонецЕсли; КонецЦикла; Возврат тзнЗначенийСвойствТовара; КонецФункции Процедура ЗаполнениеДополнительныеРеквизитыОбъектов(ОбщиеНастройки, ТаблицаСвойств, Объект, ЭтоНовыйОбъект) Если ТипЗнч(Объект)=Тип("СправочникОбъект.Партнеры") И Б24_Синхр_СинхронизацияПовтИсп.НастройкиСинхронизацииКонтрагентов(ОбщиеНастройки.НастройкаСинхронизации, "ЗагружатьПользовательскиеПоляКомпанийИКонтактов") <> Истина Тогда Возврат; ИначеЕсли ТипЗнч(Объект)=Тип("СправочникОбъект.КонтактныеЛицаПартнеров") И Б24_Синхр_СинхронизацияПовтИсп.НастройкиСинхронизацииКонтрагентов(ОбщиеНастройки.НастройкаСинхронизации, "ЗагружатьПользовательскиеПоляКомпанийИКонтактов") <> Истина Тогда Возврат; ИначеЕсли ТипЗнч(Объект)=Тип("ДокументОбъект.ЗаказКлиента") И Б24_Синхр_СинхронизацияПовтИсп.НастройкиСинхронизацииСделок(ОбщиеНастройки.НастройкаСинхронизации, "ЗагружатьПользовательскиеПоляСделок") <> Истина Тогда Возврат; ИначеЕсли ТипЗнч(Объект)=Тип("ДокументОбъект.СчетНаОплатуКлиенту") И Б24_Синхр_СинхронизацияПовтИсп.НастройкиСинхронизацииСчетов(ОбщиеНастройки.НастройкаСинхронизации, "ЗагружатьПользовательскиеПоляСчетов") <> Истина Тогда Возврат; Иначе Для Каждого ТекСвойство Из ТаблицаСвойств Цикл Если НЕ ТекСвойство.ЭтоДополнительноеСведение И ТекСвойство.ПоддерживаетсяСвойство Тогда Если ТекСвойство.ЗначениеОчищено ИЛИ НЕ ЗначениеЗаполнено(ТекСвойство.ЗначениеСвойства)Тогда Если ЭтоНовыйОбъект Тогда Продолжить; КонецЕсли; Для Каждого ЗаполнениеСвойствоТовара Из Объект.ДополнительныеРеквизиты Цикл Если ЗаполнениеСвойствоТовара.Свойство = ТекСвойство.Свойство Тогда ЗаполнениеСвойствоТовара.Значение = Неопределено; ЗаполнениеСвойствоТовара.ТекстоваяСтрока = ""; КонецЕсли; КонецЦикла; Иначе ЕстьРеквизит = Ложь; Для Каждого ЗаполнениеСвойствоТовара Из Объект.ДополнительныеРеквизиты Цикл Если ЗаполнениеСвойствоТовара.Свойство = ТекСвойство.Свойство Тогда ЗаполнениеСвойствоТовара.Значение = ТекСвойство.ЗначениеСвойства; Если ТипЗнч(ТекСвойство.ЗначениеСвойства) = Тип("Строка") Тогда ЗаполнениеСвойствоТовара.ТекстоваяСтрока = ТекСвойство.ЗначениеСвойства; КонецЕсли; ЕстьРеквизит = Истина КонецЕсли; КонецЦикла; Если НЕ ЕстьРеквизит Тогда НовыйРеквизит = Объект.ДополнительныеРеквизиты.Добавить(); НовыйРеквизит.Свойство = ТекСвойство.Свойство; НовыйРеквизит.Значение = ТекСвойство.ЗначениеСвойства; Если ТипЗнч(ТекСвойство.ЗначениеСвойства) = Тип("Строка") Тогда НовыйРеквизит.ТекстоваяСтрока = ТекСвойство.ЗначениеСвойства; КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; КонецПроцедуры Процедура ЗаполнениеДополнительныеСведенияОбъектов(ОбщиеНастройки, ТаблицаСвойств, СсылкаНаОбъект, ЭтоНовыйОбъект) НаборЗаписей = РегистрыСведений.ДополнительныеСведения.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Объект.Установить(СсылкаНаОбъект); НаборЗаписей.Прочитать(); Если ТипЗнч(СсылкаНаОбъект)=Тип("СправочникСсылка.Контрагенты") И Б24_Синхр_СинхронизацияПовтИсп.НастройкиСинхронизацииКонтрагентов(ОбщиеНастройки.НастройкаСинхронизации, "ЗагружатьПользовательскиеПоляКомпанийИКонтактов") <> Истина Тогда Возврат; ИначеЕсли ТипЗнч(СсылкаНаОбъект)=Тип("СправочникОбъект.КонтактныеЛицаПартнеров") И Б24_Синхр_СинхронизацияПовтИсп.НастройкиСинхронизацииКонтрагентов(ОбщиеНастройки.НастройкаСинхронизации, "ЗагружатьПользовательскиеПоляКомпанийИКонтактов") <> Истина Тогда Возврат; ИначеЕсли ТипЗнч(СсылкаНаОбъект)=Тип("ДокументСсылка.ЗаказКлиента") И Б24_Синхр_СинхронизацияПовтИсп.НастройкиСинхронизацииСделок(ОбщиеНастройки.НастройкаСинхронизации, "ЗагружатьПользовательскиеПоляСделок") <> Истина Тогда Возврат; ИначеЕсли ТипЗнч(СсылкаНаОбъект)=Тип("ДокументСсылка.СчетНаОплатуКлиенту") И Б24_Синхр_СинхронизацияПовтИсп.НастройкиСинхронизацииСчетов(ОбщиеНастройки.НастройкаСинхронизации, "ЗагружатьПользовательскиеПоляСчетов") <> Истина Тогда Возврат; Иначе Для Каждого ТекСвойство Из ТаблицаСвойств Цикл Если ТекСвойство.ЭтоДополнительноеСведение И ТекСвойство.ПоддерживаетсяСвойство Тогда ЕстьСвойство = Ложь; Для Каждого ТекСтрока Из НаборЗаписей Цикл Если ТекСтрока.Свойство = ТекСвойство.Свойство Тогда ЕстьСвойство = Истина; ТекСтрока.Значение = ТекСвойство.ЗначениеСвойства; КонецЕсли; КонецЦикла; Если ЕстьСвойство = Ложь Тогда НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Объект = СсылкаНаОбъект; НоваяЗапись.Свойство = ТекСвойство.Свойство; НоваяЗапись.Значение = ТекСвойство.ЗначениеСвойства; КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; НаборЗаписей.ДополнительныеСвойства.Вставить("ЗагрузкаСБитрикс24", Истина); НаборЗаписей.Записать(); КонецПроцедуры /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Функция ЗагрузитьОбновитьКомпании(пОбщиеНастройки, ПодробныеДанные) Экспорт мДанных = ПодробныеДанные.ИнформацияОКомпаниях; Результат = Новый Массив; ОбщиеНастройки = Новый Структура; Для Каждого ЭлементСтруктуры Из пОбщиеНастройки Цикл ОбщиеНастройки.Вставить(ЭлементСтруктуры.Ключ, ЭлементСтруктуры.Значение); КонецЦикла; Б24_Синхр_СинхронизацияВызовСервера.ДобавитьСложныеНастройкиОбменаВСтруктуру(ОбщиеНастройки); МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; #Область ИдентификаторыСлужебныхСвойств Если пОбщиеНастройки.ОбрабатыватьУдалениеОбъектовВ1С Тогда ДопИдСвойстваПометкиУдаления = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьДопИдОбъекта(ОбщиеНастройки.НастройкаСинхронизации,ОбщиеНастройки.ПредопределенноеСвойствоПометкаУдаленияКомпанийИКонтактов, ОбщиеНастройки.ТипыОбъектовОбмена.СвойствоКомпании); ОбщиеНастройки.Вставить("ДопИдПредопределенногоСвойстваПометкиУдаленияКомпании", ДопИдСвойстваПометкиУдаления); КонецЕсли; #КонецОбласти #Область ФормированиеВременныхТаблицДанных мТипыКИ = Новый Массив; мТипыКИ.Добавить(Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты); мТипыКИ.Добавить(Перечисления.ТипыКонтактнойИнформации.Телефон); Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("ТипДанных" , ОбщиеНастройки.ТипыОбъектовОбмена.Компания); Запрос.УстановитьПараметр("ТипДанныхРеквизит" , ОбщиеНастройки.ТипыОбъектовОбмена.Реквизит); Запрос.УстановитьПараметр("ТипДанныхСвойств" , ОбщиеНастройки.ТипыОбъектовОбмена.СвойствоКомпании); Запрос.УстановитьПараметр("ТипДанныхЗначенийСвойств", ОбщиеНастройки.ТипыОбъектовОбмена.ЗначениеСвойстваКомпании); Запрос.УстановитьПараметр("ТипыКИ" , мТипыКИ); Запрос.УстановитьПараметр("Портал" , ОбщиеНастройки.Портал); Запрос.Текст = "ВЫБРАТЬ | Б24_Синхр_ИдентификаторыОбъектов.Объект КАК Объект, | Б24_Синхр_ИдентификаторыОбъектов.Идентификатор КАК Идентификатор |ПОМЕСТИТЬ ВремИдентификаторы |ИЗ | РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов |ГДЕ | Б24_Синхр_ИдентификаторыОбъектов.ТипДанных = &ТипДанных | И Б24_Синхр_ИдентификаторыОбъектов.Портал = &Портал | |ИНДЕКСИРОВАТЬ ПО | Идентификатор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Б24_Синхр_ИдентификаторыОбъектов.Объект КАК Объект, | Б24_Синхр_ИдентификаторыОбъектов.Идентификатор КАК Идентификатор |ПОМЕСТИТЬ ВремИдентификаторыРеквизитов |ИЗ | РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов |ГДЕ | Б24_Синхр_ИдентификаторыОбъектов.ТипДанных = &ТипДанныхРеквизит | И Б24_Синхр_ИдентификаторыОбъектов.Портал = &Портал | |ИНДЕКСИРОВАТЬ ПО | Идентификатор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Б24_Синхр_ИдентификаторыОбъектов.Объект КАК Объект, | Б24_Синхр_ИдентификаторыОбъектов.Идентификатор КАК Идентификатор |ПОМЕСТИТЬ ВремИдентификаторыЗначенийСвойств |ИЗ | РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов |ГДЕ | Б24_Синхр_ИдентификаторыОбъектов.ТипДанных = &ТипДанныхЗначенийСвойств | И Б24_Синхр_ИдентификаторыОбъектов.Портал = &Портал | |ИНДЕКСИРОВАТЬ ПО | Идентификатор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Б24_Синхр_ИдентификаторыОбъектов.Идентификатор КАК Идентификатор, | ДополнительныеРеквизитыИСведения.Ссылка КАК Объект, | ДополнительныеРеквизитыИСведения.ЭтоДополнительноеСведение КАК ЭтоДополнительноеСведение, | Б24_Синхр_ИдентификаторыОбъектов.ДополнительныйИдентификатор КАК ДополнительныйИдентификатор |ПОМЕСТИТЬ ВремСвойства |ИЗ | РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов | ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения | ПО Б24_Синхр_ИдентификаторыОбъектов.Объект = ДополнительныеРеквизитыИСведения.Ссылка |ГДЕ | Б24_Синхр_ИдентификаторыОбъектов.Портал = &Портал | И Б24_Синхр_ИдентификаторыОбъектов.ТипДанных = &ТипДанныхСвойств | И Б24_Синхр_ИдентификаторыОбъектов.Идентификатор <> """" |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Партнеры.Ссылка КАК КомпанияКонтакт, | Партнеры.Наименование КАК Наименование, | ВЫРАЗИТЬ(Партнеры.НаименованиеПолное КАК СТРОКА(100)) КАК НаименованиеПолное, | ВремИдентификаторы.Идентификатор КАК Идентификатор |ПОМЕСТИТЬ ВремКомпанииКонтакты |ИЗ | Справочник.Партнеры КАК Партнеры | ЛЕВОЕ СОЕДИНЕНИЕ ВремИдентификаторы КАК ВремИдентификаторы | ПО Партнеры.Ссылка = ВремИдентификаторы.Объект | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | Организации.Ссылка, | Организации.Наименование, | ВЫРАЗИТЬ(Организации.НаименованиеПолное КАК СТРОКА(100)), | ВремИдентификаторы.Идентификатор |ИЗ | Справочник.Организации КАК Организации | ЛЕВОЕ СОЕДИНЕНИЕ ВремИдентификаторы КАК ВремИдентификаторы | ПО Организации.Ссылка = ВремИдентификаторы.Объект | |ИНДЕКСИРОВАТЬ ПО | Идентификатор, | Наименование |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Партнеры.Ссылка КАК КомпанияКонтакт, | Контрагенты.ИНН КАК ИНН, | Контрагенты.КПП КАК КПП, | ВремИдентификаторыРеквизитов.Идентификатор КАК Идентификатор |ПОМЕСТИТЬ ВремИННКомпанииКонтакты |ИЗ | Справочник.Контрагенты КАК Контрагенты | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Партнеры КАК Партнеры | ПО Контрагенты.Партнер = Партнеры.Ссылка | ЛЕВОЕ СОЕДИНЕНИЕ ВремИдентификаторыРеквизитов КАК ВремИдентификаторыРеквизитов | ПО Контрагенты.Ссылка = ВремИдентификаторыРеквизитов.Объект | |ИНДЕКСИРОВАТЬ ПО | ИНН |; | |//////////////////////////////////////////////////////////////////////////////// |УНИЧТОЖИТЬ ВремИдентификаторы |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ПартнерыКонтактнаяИнформация.Ссылка КАК КомпанияКонтакт, | ПартнерыКонтактнаяИнформация.Тип КАК Тип, | ПартнерыКонтактнаяИнформация.Вид КАК Вид, | ПартнерыКонтактнаяИнформация.Представление КАК Представление, | ПартнерыКонтактнаяИнформация.АдресЭП КАК АдресЭП, | ПартнерыКонтактнаяИнформация.НомерТелефона КАК НомерТелефона |ПОМЕСТИТЬ ВремКИ |ИЗ | Справочник.Партнеры.КонтактнаяИнформация КАК ПартнерыКонтактнаяИнформация | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов | ПО ПартнерыКонтактнаяИнформация.Ссылка = Б24_Синхр_ИдентификаторыОбъектов.Объект |ГДЕ | ПартнерыКонтактнаяИнформация.Тип В(&ТипыКИ) | И Б24_Синхр_ИдентификаторыОбъектов.Идентификатор ЕСТЬ NULL | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | ОрганизацииКонтактнаяИнформация.Ссылка, | ОрганизацииКонтактнаяИнформация.Тип, | ОрганизацииКонтактнаяИнформация.Вид, | ОрганизацииКонтактнаяИнформация.Представление, | ОрганизацииКонтактнаяИнформация.АдресЭП, | ОрганизацииКонтактнаяИнформация.НомерТелефона |ИЗ | Справочник.Организации.КонтактнаяИнформация КАК ОрганизацииКонтактнаяИнформация | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов | ПО ОрганизацииКонтактнаяИнформация.Ссылка = Б24_Синхр_ИдентификаторыОбъектов.Объект |ГДЕ | ОрганизацииКонтактнаяИнформация.Тип В(&ТипыКИ) | И Б24_Синхр_ИдентификаторыОбъектов.Идентификатор ЕСТЬ NULL | |ИНДЕКСИРОВАТЬ ПО | Представление"; Запрос.Выполнить(); #КонецОбласти СтруктураИспКИ = Б24_Синхр_СинхронизацияПовтИсп.ПолучитьСтруктуруВидовКИКонтрагентов(); ЗагруженныеОбъекты = Новый Массив; Для каждого ТекЭлемент Из мДанных Цикл ИдЭлемента = Формат(ТекЭлемент.Получить("ID"),"ЧГ=0"); ИНН = ""; КПП = ""; Для Каждого РеквизитКомпании Из ПодробныеДанные.ИнформацияОРеквизитах Цикл Если Формат(РеквизитКомпании.Получить("ENTITY_ID"),"ЧГ=0") = ИдЭлемента Тогда ИНН = РеквизитКомпании.Получить("RQ_INN"); КПП = РеквизитКомпании.Получить("RQ_KPP"); Прервать; КонецЕсли; КонецЦикла; Если ЗагруженныеОбъекты.Найти(ИдЭлемента) <> Неопределено Тогда Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Истина))); Продолжить; КонецЕсли; ЗагруженныеОбъекты.Добавить(ИдЭлемента); ВнешнийКод = ТекЭлемент.Получить("ORIGIN_ID"); ЗаголовокКомпании = Строка(ТекЭлемент.Получить("TITLE")); ЭтоНашаКомпания = ТекЭлемент.Получить("IS_MY_COMPANY"); ТипКомпании = ТекЭлемент.Получить("COMPANY_TYPE"); Телефоны = ТекЭлемент.Получить("PHONE"); Почта = ТекЭлемент.Получить("EMAIL"); ПомеченНаУдаление = Ложь; #Область ПоискПометкиНаУдаление Если пОбщиеНастройки.ОбрабатыватьУдалениеОбъектовВ1С Тогда ЗначениеПометки = ТекЭлемент.Получить(ОбщиеНастройки.ДопИдПредопределенногоСвойстваПометкиУдаленияКомпании); Если ЗначениеПометки = "1" Тогда ПомеченНаУдаление = Истина; КонецЕсли; КонецЕсли; #КонецОбласти #Область ПоискСозданиеКомпании Компания = Неопределено; лПорядокИдентификации = ОбщиеНастройки.НастройкиСинхронизацииКонтрагентов.ПорядокИдентификацииЮрЛиц; Для Каждого ТекЗначение Из лПорядокИдентификации Цикл Критерий = ТекЗначение.Значение; СтруктураДанныхПоиска = Новый Структура; СтруктураДанныхПоиска.Вставить("ИдЭлемента" , ИдЭлемента); СтруктураДанныхПоиска.Вставить("НаименованиеКомпанииКонтакта", ЗаголовокКомпании); СтруктураДанныхПоиска.Вставить("Телефоны" , Телефоны); СтруктураДанныхПоиска.Вставить("Почта" , Почта); СтруктураДанныхПоиска.Вставить("ИНН" , ИНН); СтруктураДанныхПоиска.Вставить("КПП" , КПП); Компания = ПолучитьКомпаниюКонтактПоКритерию(ОбщиеНастройки, Критерий, МенеджерВременныхТаблиц, ТекЭлемент, СтруктураДанныхПоиска); Если ЗначениеЗаполнено(Компания) ИЛИ Компания = Неопределено Тогда Прервать; КонецЕсли; КонецЦикла; Если Компания = Неопределено Тогда Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Ложь))); Продолжить; КонецЕсли; Если ЗначениеЗаполнено(ВнешнийКод) И НЕ ЗначениеЗаполнено(Компания) Тогда Компания = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("СправочникСсылка.Партнеры"), ВнешнийКод); КонецЕсли; Если ЗначениеЗаполнено(Компания) Тогда Если НЕ ОбщиеНастройки.НастройкиСинхронизацииКонтрагентов.ОбновлятьКонтрагентов Тогда Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "В настройках указано, что партнеры/контрагенты не обновляются. Партнер: " + ЗаголовокКомпании + " не будет обновлен."); Б24_Синхр_СинхронизацияВызовСервера.ЗаписатьИдБ24Объекта(ОбщиеНастройки, ОбщиеНастройки.ТипыОбъектовОбмена.Компания, Компания.Ссылка, ИдЭлемента); Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Истина))); Продолжить; Иначе Компания = Компания.ПолучитьОбъект(); Если ТипЗнч(Компания) = Тип("СправочникОбъект.Организации") Тогда ЭтоНашаКомпания = "Y"; Иначе ЭтоНашаКомпания = "N"; КонецЕсли; Компания.ПометкаУдаления = ПомеченНаУдаление; КонецЕсли; ИначеЕсли ПомеченНаУдаление Тогда Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Компания " + ЗаголовокКомпании + " помечена на удаление в Битрикс24. Не будет создана в 1С"); Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Истина))); Продолжить; Иначе Если ЭтоНашаКомпания = "N" Тогда Компания = Справочники.Партнеры.СоздатьЭлемент(); Компания.ДатаРегистрации = ОбщиеНастройки.ДатаФормирования; Если ОбщиеНастройки.ТипыКонтрагентовДляКомпаний.Количество() > 0 Тогда Компания.ЮрФизЛицо = ОбщиеНастройки.ТипыКонтрагентовДляКомпаний[0]; Иначе Компания.ЮрФизЛицо = Перечисления.КомпанияЧастноеЛицо.Компания; КонецЕсли; Компания.Клиент = Истина; Иначе Компания = Справочники.Организации.СоздатьЭлемент(); Компания.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ИндивидуальныйПредприниматель; Компания.ЮридическоеФизическоеЛицо = Перечисления.ЮридическоеФизическоеЛицо.ФизическоеЛицо; Компания.НаименованиеСокращенное = ЗаголовокКомпании; КонецЕсли; КонецЕсли; #КонецОбласти #Область ТипКомпании Если ЭтоНашаКомпания = "N" И ОбщиеНастройки.НастройкиСинхронизацииКонтрагентов.Свойство("СоответствияТиповКомпаний") Тогда НайденнаяСтрока = ОбщиеНастройки.НастройкиСинхронизацииКонтрагентов.СоответствияТиповКомпаний.Найти(ТипКомпании); Если НайденнаяСтрока <> Неопределено Тогда Компания.Клиент = НайденнаяСтрока.Клиент; Компания.Конкурент = НайденнаяСтрока.Конкурент; Компания.Поставщик = НайденнаяСтрока.Поставщик; Компания.ПрочиеОтношения = НайденнаяСтрока.ПрочиеОтношения; КонецЕсли; КонецЕсли; #КонецОбласти Компания.Наименование = ЗаголовокКомпании; Компания.НаименованиеПолное = ?(ЗначениеЗаполнено(Компания.НаименованиеПолное), Компания.НаименованиеПолное, ЗаголовокКомпании); Если ЭтоНашаКомпания = "N" Тогда Компания.Комментарий = ТекЭлемент.Получить("COMMENTS"); Иначе Компания.НаименованиеСокращенное = ЗаголовокКомпании; КонецЕсли; ЗаполнениеТелефонаИЕмейлКонтрагента(ОбщиеНастройки, СтруктураИспКИ, Компания, Телефоны, Почта); Если ЭтоНашаКомпания = "N" Тогда ИдСотрудника = Формат(ТекЭлемент.Получить("ASSIGNED_BY_ID"),"ЧГ=0"); Если ЗначениеЗаполнено(ИдСотрудника) Тогда НайденнаяСтрока = ОбщиеНастройки.ТаблицаСопоставленияПользователей.Найти(ИдСотрудника, "ИдПользователя"); Если НайденнаяСтрока <> Неопределено Тогда Компания.ОсновнойМенеджер = НайденнаяСтрока.Пользователь1С; КонецЕсли; КонецЕсли; КонецЕсли; ЭтоНовыйОбъект = Компания.Ссылка.Пустая()=Истина; ТаблицаСвойств = РазобратьПользовательскиеПоляВТаблицу(ОбщиеНастройки, ТекЭлемент, МенеджерВременныхТаблиц); ЗаполнениеДополнительныеРеквизитыОбъектов(ОбщиеНастройки, ТаблицаСвойств, Компания, ЭтоНовыйОбъект); Попытка Компания.ДополнительныеСвойства.Вставить("ЗагрузкаСБитрикс24", Истина); Компания.Записать(); Б24_Синхр_СинхронизацияВызовСервера.ЗаписатьИдБ24Объекта(ОбщиеНастройки, ОбщиеНастройки.ТипыОбъектовОбмена.Компания, Компания.Ссылка, ИдЭлемента); Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Истина))); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Записан партнер: " + ЗаголовокКомпании); Если ЭтоНашаКомпания = "N" Тогда ЗаполнениеДополнительныеСведенияОбъектов(ОбщиеНастройки, ТаблицаСвойств, Компания.Ссылка, ЭтоНовыйОбъект); КонецЕсли; Исключение Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, "Во время записи партнер: " + ЗаголовокКомпании + " возникли ошибки."); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, ОписаниеОшибки()); Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Ложь))); ОбщиеНастройки.ВыполненоБезОшибок = Ложь; КонецПопытки; КонецЦикла; пОбщиеНастройки.НомерСообщения = ОбщиеНастройки.НомерСообщения; // чтобы лог не затерся. Возврат Результат; КонецФункции Функция ЗагрузитьОбновитьКонтакты(пОбщиеНастройки, ПодробныеДанные, ПринудительноСоздаватьКонтрагента = Ложь) Экспорт мДанных = ПодробныеДанные.ИнформацияОКонтактах; Результат = Новый Массив; ОбщиеНастройки = Новый Структура; Для Каждого ЭлементСтруктуры Из пОбщиеНастройки Цикл ОбщиеНастройки.Вставить(ЭлементСтруктуры.Ключ, ЭлементСтруктуры.Значение); КонецЦикла; Б24_Синхр_СинхронизацияВызовСервера.ДобавитьСложныеНастройкиОбменаВСтруктуру(ОбщиеНастройки); #Область ИдентификаторыСлужебныхСвойств ДопИдСвойстваПола = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьДопИдОбъекта(ОбщиеНастройки.НастройкаСинхронизации,ОбщиеНастройки.ПредопределенноеСвойствоПолКонтактов, ОбщиеНастройки.ТипыОбъектовОбмена.СвойствоКонтакта); ОбщиеНастройки.Вставить("ДопИдПредопределенногоСвойстваПолаКонтакта", ДопИдСвойстваПола); Если пОбщиеНастройки.ОбрабатыватьУдалениеОбъектовВ1С Тогда ДопИдСвойстваПометкиУдаления = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьДопИдОбъекта(ОбщиеНастройки.НастройкаСинхронизации,ОбщиеНастройки.ПредопределенноеСвойствоПометкаУдаленияКомпанийИКонтактов, ОбщиеНастройки.ТипыОбъектовОбмена.СвойствоКонтакта); ОбщиеНастройки.Вставить("ДопИдПредопределенногоСвойстваПометкиУдаленияКонтакта", ДопИдСвойстваПометкиУдаления); КонецЕсли; #КонецОбласти МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; #Область ФормированиеВременныхТаблицДанных мТипыКИ = Новый Массив; мТипыКИ.Добавить(Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты); мТипыКИ.Добавить(Перечисления.ТипыКонтактнойИнформации.Телефон); Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("ТипДанных" , ОбщиеНастройки.ТипыОбъектовОбмена.Контакт); Запрос.УстановитьПараметр("ТипДанныхКомпания" , ОбщиеНастройки.ТипыОбъектовОбмена.Компания); Запрос.УстановитьПараметр("ТипДанныхРеквизит" , ОбщиеНастройки.ТипыОбъектовОбмена.Реквизит); Запрос.УстановитьПараметр("ТипДанныхСвойств" , ОбщиеНастройки.ТипыОбъектовОбмена.СвойствоКонтакта); Запрос.УстановитьПараметр("ТипДанныхЗначенийСвойств", ОбщиеНастройки.ТипыОбъектовОбмена.ЗначениеСвойстваКонтакта); Запрос.УстановитьПараметр("ТипыКИ" , мТипыКИ); Запрос.УстановитьПараметр("Портал" , ОбщиеНастройки.Портал); Запрос.Текст = "ВЫБРАТЬ | Б24_Синхр_ИдентификаторыОбъектов.Объект КАК Объект, | Б24_Синхр_ИдентификаторыОбъектов.Идентификатор КАК Идентификатор |ПОМЕСТИТЬ ВремИдентификаторы |ИЗ | РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов |ГДЕ | Б24_Синхр_ИдентификаторыОбъектов.ТипДанных = &ТипДанных | И Б24_Синхр_ИдентификаторыОбъектов.Портал = &Портал | |ИНДЕКСИРОВАТЬ ПО | Идентификатор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Б24_Синхр_ИдентификаторыОбъектов.Объект КАК Объект, | Б24_Синхр_ИдентификаторыОбъектов.Идентификатор КАК Идентификатор |ПОМЕСТИТЬ ВремИдентификаторыКомпаний |ИЗ | РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов |ГДЕ | Б24_Синхр_ИдентификаторыОбъектов.ТипДанных = &ТипДанныхКомпания | И Б24_Синхр_ИдентификаторыОбъектов.Портал = &Портал | |ИНДЕКСИРОВАТЬ ПО | Идентификатор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Б24_Синхр_ИдентификаторыОбъектов.Объект КАК Объект, | Б24_Синхр_ИдентификаторыОбъектов.Идентификатор КАК Идентификатор |ПОМЕСТИТЬ ВремИдентификаторыРеквизитов |ИЗ | РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов |ГДЕ | Б24_Синхр_ИдентификаторыОбъектов.ТипДанных = &ТипДанныхРеквизит | И Б24_Синхр_ИдентификаторыОбъектов.Портал = &Портал | |ИНДЕКСИРОВАТЬ ПО | Идентификатор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Б24_Синхр_ИдентификаторыОбъектов.Объект КАК Объект, | Б24_Синхр_ИдентификаторыОбъектов.Идентификатор КАК Идентификатор |ПОМЕСТИТЬ ВремИдентификаторыЗначенийСвойств |ИЗ | РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов |ГДЕ | Б24_Синхр_ИдентификаторыОбъектов.ТипДанных = &ТипДанныхЗначенийСвойств | И Б24_Синхр_ИдентификаторыОбъектов.Портал = &Портал | |ИНДЕКСИРОВАТЬ ПО | Идентификатор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Б24_Синхр_ИдентификаторыОбъектов.Идентификатор КАК Идентификатор, | ДополнительныеРеквизитыИСведения.Ссылка КАК Объект, | ДополнительныеРеквизитыИСведения.ЭтоДополнительноеСведение КАК ЭтоДополнительноеСведение, | Б24_Синхр_ИдентификаторыОбъектов.ДополнительныйИдентификатор КАК ДополнительныйИдентификатор |ПОМЕСТИТЬ ВремСвойства |ИЗ | РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов | ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения | ПО Б24_Синхр_ИдентификаторыОбъектов.Объект = ДополнительныеРеквизитыИСведения.Ссылка |ГДЕ | Б24_Синхр_ИдентификаторыОбъектов.Портал = &Портал | И Б24_Синхр_ИдентификаторыОбъектов.ТипДанных = &ТипДанныхСвойств | И Б24_Синхр_ИдентификаторыОбъектов.Идентификатор <> """" |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Партнеры.Ссылка КАК КомпанияКонтакт, | Партнеры.Наименование КАК Наименование, | Партнеры.НаименованиеПолное КАК НаименованиеПолное, | ВремИдентификаторы.Идентификатор КАК Идентификатор |ПОМЕСТИТЬ ВремКомпанииКонтакты |ИЗ | Справочник.Партнеры КАК Партнеры | ЛЕВОЕ СОЕДИНЕНИЕ ВремИдентификаторы КАК ВремИдентификаторы | ПО Партнеры.Ссылка = ВремИдентификаторы.Объект | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | КонтактныеЛицаПартнеров.Ссылка, | КонтактныеЛицаПартнеров.Наименование, | КонтактныеЛицаПартнеров.Наименование, | ВремИдентификаторы.Идентификатор |ИЗ | Справочник.КонтактныеЛицаПартнеров КАК КонтактныеЛицаПартнеров | ЛЕВОЕ СОЕДИНЕНИЕ ВремИдентификаторы КАК ВремИдентификаторы | ПО КонтактныеЛицаПартнеров.Ссылка = ВремИдентификаторы.Объект | |ИНДЕКСИРОВАТЬ ПО | Идентификатор, | Наименование |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Партнеры.Ссылка КАК КомпанияКонтакт, | Контрагенты.ИНН КАК ИНН, | Контрагенты.КПП КАК КПП, | ВремИдентификаторыРеквизитов.Идентификатор КАК Идентификатор |ПОМЕСТИТЬ ВремИННКомпанииКонтакты |ИЗ | Справочник.Контрагенты КАК Контрагенты | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Партнеры КАК Партнеры | ПО Контрагенты.Партнер = Партнеры.Ссылка | ЛЕВОЕ СОЕДИНЕНИЕ ВремИдентификаторыРеквизитов КАК ВремИдентификаторыРеквизитов | ПО Контрагенты.Ссылка = ВремИдентификаторыРеквизитов.Объект | |ИНДЕКСИРОВАТЬ ПО | ИНН |; | |//////////////////////////////////////////////////////////////////////////////// |УНИЧТОЖИТЬ ВремИдентификаторы |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ПартнерыКонтактнаяИнформация.Ссылка КАК КомпанияКонтакт, | ПартнерыКонтактнаяИнформация.Тип КАК Тип, | ПартнерыКонтактнаяИнформация.Вид КАК Вид, | ПартнерыКонтактнаяИнформация.Представление КАК Представление, | ПартнерыКонтактнаяИнформация.АдресЭП КАК АдресЭП, | ПартнерыКонтактнаяИнформация.НомерТелефона КАК НомерТелефона |ПОМЕСТИТЬ ВремКИ |ИЗ | Справочник.Партнеры.КонтактнаяИнформация КАК ПартнерыКонтактнаяИнформация | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов | ПО ПартнерыКонтактнаяИнформация.Ссылка = Б24_Синхр_ИдентификаторыОбъектов.Объект |ГДЕ | ПартнерыКонтактнаяИнформация.Тип В(&ТипыКИ) | И Б24_Синхр_ИдентификаторыОбъектов.Идентификатор ЕСТЬ NULL | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | КонтактныеЛицаПартнеровКонтактнаяИнформация.Ссылка, | КонтактныеЛицаПартнеровКонтактнаяИнформация.Тип, | КонтактныеЛицаПартнеровКонтактнаяИнформация.Вид, | КонтактныеЛицаПартнеровКонтактнаяИнформация.Представление, | КонтактныеЛицаПартнеровКонтактнаяИнформация.АдресЭП, | КонтактныеЛицаПартнеровКонтактнаяИнформация.НомерТелефона |ИЗ | Справочник.КонтактныеЛицаПартнеров.КонтактнаяИнформация КАК КонтактныеЛицаПартнеровКонтактнаяИнформация | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов | ПО КонтактныеЛицаПартнеровКонтактнаяИнформация.Ссылка = Б24_Синхр_ИдентификаторыОбъектов.Объект |ГДЕ | КонтактныеЛицаПартнеровКонтактнаяИнформация.Тип В(&ТипыКИ) | И Б24_Синхр_ИдентификаторыОбъектов.Идентификатор ЕСТЬ NULL | |ИНДЕКСИРОВАТЬ ПО | Представление"; Запрос.Выполнить(); #КонецОбласти СтруктураИспКИ = Б24_Синхр_СинхронизацияПовтИсп.ПолучитьСтруктуруВидовКИКонтрагентов(); ЗагруженныеОбъекты = Новый Массив; Для каждого ТекЭлемент Из мДанных Цикл ИдЭлемента = Формат(ТекЭлемент.Получить("ID"),"ЧГ=0"); ИдКомпании = Формат(ТекЭлемент.Получить("COMPANY_ID"),"ЧГ=0"); Если ЗначениеЗаполнено(ИдКомпании) И НЕ Строка(ИдКомпании) = "0" И НЕ ПринудительноСоздаватьКонтрагента Тогда ИдЭлементаДля1С = "#"+ИдЭлемента; ЭтоКонтактноеЛицо = Истина; Иначе ИдЭлементаДля1С = ИдЭлемента; ЭтоКонтактноеЛицо = Ложь; КонецЕсли; ИНН = ""; КПП = ""; Для Каждого РеквизитКомпании Из ПодробныеДанные.ИнформацияОРеквизитах Цикл Если Формат(РеквизитКомпании.Получить("ENTITY_ID"),"ЧГ=0") = ИдЭлемента Тогда ИНН = РеквизитКомпании.Получить("RQ_INN"); КПП = РеквизитКомпании.Получить("RQ_KPP"); Прервать; КонецЕсли; КонецЦикла; Если ЗагруженныеОбъекты.Найти(ИдЭлемента) <> Неопределено Тогда Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Истина))); Продолжить; КонецЕсли; ЗагруженныеОбъекты.Добавить(ИдЭлемента); ВнешнийКод = ТекЭлемент.Получить("ORIGIN_ID"); Имя = Строка(ТекЭлемент.Получить("NAME")); Фамилия = Строка(ТекЭлемент.Получить("LAST_NAME")); Отчество = Строка(ТекЭлемент.Получить("SECOND_NAME")); ТипКонтакта = Строка(ТекЭлемент.Получить("TYPE_ID")); Должность = Строка(ТекЭлемент.Получить("POST")); ДатаРождения = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Дата"), ТекЭлемент.Получить("BIRTHDATE")); Телефоны = ТекЭлемент.Получить("PHONE"); Почта = ТекЭлемент.Получить("EMAIL"); ПомеченНаУдаление = Ложь; #Область ПоискПометкиНаУдаление Если пОбщиеНастройки.ОбрабатыватьУдалениеОбъектовВ1С Тогда ЗначениеПометки = ТекЭлемент.Получить(ОбщиеНастройки.ДопИдПредопределенногоСвойстваПометкиУдаленияКонтакта); Если ЗначениеПометки = "1" Тогда ПомеченНаУдаление = Истина; КонецЕсли; КонецЕсли; #КонецОбласти НаименованиеКонтрагента = Фамилия + " " + Имя + " " + Отчество; Если ЗначениеЗаполнено(ИдКомпании) И НЕ Строка(ИдКомпании) = "0" И НЕ ПринудительноСоздаватьКонтрагента Тогда Компания = ПолучитьОбъектПоИдентификаторуИзВременнойТаблицы(МенеджерВременныхТаблиц, "ВремИдентификаторыКомпаний", ИдКомпании); Если НЕ ЗначениеЗаполнено(Компания) Тогда Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "У контакта: " + НаименованиеКонтрагента + " не найдена компания по ИД "+ИдКомпании+". Такие контакты не обрабатываются."); Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Истина))); Продолжить; КонецЕсли; КонецЕсли; #Область ПоискСозданиеКонтакта Контакт = Неопределено; лПорядокИдентификации = ОбщиеНастройки.НастройкиСинхронизацииКонтрагентов.ПорядокИдентификацииФизЛиц; Для Каждого ТекЗначение Из лПорядокИдентификации Цикл Критерий = ТекЗначение.Значение; СтруктураДанныхПоиска = Новый Структура; СтруктураДанныхПоиска.Вставить("ИдЭлемента" , ИдЭлементаДля1С); СтруктураДанныхПоиска.Вставить("НаименованиеКомпанииКонтакта", НаименованиеКонтрагента); СтруктураДанныхПоиска.Вставить("Телефоны" , Телефоны); СтруктураДанныхПоиска.Вставить("Почта" , Почта); СтруктураДанныхПоиска.Вставить("ИНН" , ИНН); СтруктураДанныхПоиска.Вставить("КПП" , КПП); Контакт = ПолучитьКомпаниюКонтактПоКритерию(ОбщиеНастройки, Критерий, МенеджерВременныхТаблиц, ТекЭлемент, СтруктураДанныхПоиска); Если ЗначениеЗаполнено(Контакт) ИЛИ Контакт = Неопределено Тогда Прервать; КонецЕсли; КонецЦикла; Если Контакт = Неопределено Тогда Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Ложь))); Продолжить; КонецЕсли; Если ЗначениеЗаполнено(ВнешнийКод) И НЕ ЗначениеЗаполнено(Контакт) Тогда Если НЕ ЭтоКонтактноеЛицо Тогда ПрефиксВнешнихКодов1С = Б24_Синхр_СинхронизацияСервер.ПолучитьПрефиксВнешнихКодов1С(); ВнешнийКод = ?(Лев(ВнешнийКод,3)= ПрефиксВнешнихКодов1С.КонтактныеЛица, Прав(ВнешнийКод, СтрДлина(ВнешнийКод)-3),ВнешнийКод); Иначе Контакт = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("СправочникСсылка.КонтактныеЛицаПартнеров"), ВнешнийКод); КонецЕсли; КонецЕсли; Если ЗначениеЗаполнено(Контакт) Тогда Если НЕ ОбщиеНастройки.НастройкиСинхронизацииКонтрагентов.ОбновлятьКонтрагентов Тогда Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "В настройках указано, что партнеры/контакты не обновляются. Контакт: " + НаименованиеКонтрагента + " не будет обновлен."); Б24_Синхр_СинхронизацияВызовСервера.ЗаписатьИдБ24Объекта(ОбщиеНастройки, ОбщиеНастройки.ТипыОбъектовОбмена.Контакт, Контакт.Ссылка, ИдЭлемента); Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Истина))); Продолжить; Иначе Контакт = Контакт.ПолучитьОбъект(); Контакт.ПометкаУдаления = ПомеченНаУдаление; КонецЕсли; ИначеЕсли ПомеченНаУдаление Тогда Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Контакт " + НаименованиеКонтрагента + " помечен на удаление в Битрикс24. Не будет создан в 1С"); Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Истина))); Продолжить; Иначе Если НЕ ЭтоКонтактноеЛицо Тогда Контакт = Справочники.Партнеры.СоздатьЭлемент(); Контакт.ДатаРегистрации = ОбщиеНастройки.ДатаФормирования; Если ОбщиеНастройки.ТипыКонтрагентовДляКонтактов.Количество() > 0 Тогда Контакт.ЮрФизЛицо = ОбщиеНастройки.ТипыКонтрагентовДляКонтактов[0]; Иначе Контакт.ЮрФизЛицо = Перечисления.КомпанияЧастноеЛицо.ЧастноеЛицо; КонецЕсли; Иначе Контакт = Справочники.КонтактныеЛицаПартнеров.СоздатьЭлемент(); КонецЕсли; КонецЕсли; #КонецОбласти ЭтоКонтактноеЛицо = ?(ТипЗнч(Контакт) = Тип("СправочникОбъект.КонтактныеЛицаПартнеров"), Истина, Ложь); Пол = Неопределено; #Область ПоискПола ИдПола = ТекЭлемент.Получить(ОбщиеНастройки.ДопИдПредопределенногоСвойстваПолаКонтакта); Если ЗначениеЗаполнено(ИдПола) Тогда ЗнСвПола = ПолучитьОбъектПоИдентификаторуИзВременнойТаблицы(МенеджерВременныхТаблиц, "ВремИдентификаторыЗначенийСвойств", ИдПола); Если ЗначениеЗаполнено(ЗнСвПола) Тогда Если ЗнСвПола.Наименование = "Мужской" Тогда Пол = Перечисления.ПолФизическогоЛица.Мужской; Иначе Пол = Перечисления.ПолФизическогоЛица.Женский; КонецЕсли; КонецЕсли; КонецЕсли; #КонецОбласти #Область ТипКонтакта Если НЕ ЭтоКонтактноеЛицо И ОбщиеНастройки.НастройкиСинхронизацииКонтрагентов.Свойство("СоответствияТиповКонтактов") Тогда НайденнаяСтрока = ОбщиеНастройки.НастройкиСинхронизацииКонтрагентов.СоответствияТиповКонтактов.Найти(ТипКонтакта); Если НайденнаяСтрока <> Неопределено Тогда Контакт.Клиент = НайденнаяСтрока.Клиент; Контакт.Конкурент = НайденнаяСтрока.Конкурент; Контакт.Поставщик = НайденнаяСтрока.Поставщик; Контакт.ПрочиеОтношения = НайденнаяСтрока.ПрочиеОтношения; КонецЕсли; КонецЕсли; #КонецОбласти Контакт.Наименование = СокрЛП(НаименованиеКонтрагента); Контакт.Комментарий = ТекЭлемент.Получить("COMMENTS"); Контакт.ДатаРождения = ДатаРождения; Контакт.Пол = Пол; ЗаполнениеТелефонаИЕмейлКонтрагента(ОбщиеНастройки, СтруктураИспКИ, Контакт, Телефоны, Почта); ИдСотрудника = Формат(ТекЭлемент.Получить("ASSIGNED_BY_ID"),"ЧГ=0"); ОсновнойМенеджер = Неопределено; Если ЗначениеЗаполнено(ИдСотрудника) Тогда НайденнаяСтрока = ОбщиеНастройки.ТаблицаСопоставленияПользователей.Найти(ИдСотрудника, "ИдПользователя"); Если НайденнаяСтрока <> Неопределено Тогда ОсновнойМенеджер = НайденнаяСтрока.Пользователь1С; КонецЕсли; КонецЕсли; Если ЭтоКонтактноеЛицо Тогда Контакт.Владелец = Компания; Контакт.Автор = ОсновнойМенеджер; Контакт.ДолжностьПоВизитке = Должность; Иначе Контакт.ОсновнойМенеджер = ОсновнойМенеджер; Контакт.НаименованиеПолное = ?(ЗначениеЗаполнено(Контакт.НаименованиеПолное), Контакт.НаименованиеПолное, НаименованиеКонтрагента); Контакт.Клиент = Истина; КонецЕсли; ЭтоНовыйОбъект = Контакт.Ссылка.Пустая()=Истина; ТаблицаСвойств = РазобратьПользовательскиеПоляВТаблицу(ОбщиеНастройки, ТекЭлемент, МенеджерВременныхТаблиц); ЗаполнениеДополнительныеРеквизитыОбъектов(ОбщиеНастройки, ТаблицаСвойств, Контакт, ЭтоНовыйОбъект); Попытка Контакт.ДополнительныеСвойства.Вставить("ЗагрузкаСБитрикс24", Истина); Контакт.Записать(); Б24_Синхр_СинхронизацияВызовСервера.ЗаписатьИдБ24Объекта(ОбщиеНастройки, ОбщиеНастройки.ТипыОбъектовОбмена.Контакт, Контакт.Ссылка, ИдЭлемента); Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Истина))); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Записан контрагент: " + НаименованиеКонтрагента); ЗаполнениеДополнительныеСведенияОбъектов(ОбщиеНастройки, ТаблицаСвойств, Контакт.Ссылка, ЭтоНовыйОбъект); Исключение Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, "Во время записи контрагента: " + НаименованиеКонтрагента + " возникли ошибки."); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, ОписаниеОшибки()); Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Ложь))); ОбщиеНастройки.ВыполненоБезОшибок = Ложь; КонецПопытки; КонецЦикла; пОбщиеНастройки.НомерСообщения = ОбщиеНастройки.НомерСообщения; // чтобы лог не затерся. Возврат Результат; КонецФункции Процедура ЗаполнениеТелефонаИЕмейлКонтрагента(ОбщиеНастройки, СтруктураИспКИ, КомпанияКонтакт, Телефоны, Почта) ТзнВрем = КомпанияКонтакт.КонтактнаяИнформация.ВыгрузитьКолонки(); Если ТипЗнч(КомпанияКонтакт) = Тип("СправочникОбъект.Партнеры") Тогда ТелефонРабочий = СтруктураИспКИ.ТелефонРабочий; ТелефонМобильный = СтруктураИспКИ.ТелефонМобильный; ТелефонДомашний = СтруктураИспКИ.ТелефонДомашний; ПочтаРабочий = СтруктураИспКИ.ПочтаРабочий; ПочтаЧастная = СтруктураИспКИ.ПочтаЧастная; ИначеЕсли ТипЗнч(КомпанияКонтакт) = Тип("СправочникОбъект.КонтактныеЛицаПартнеров") Тогда ТелефонРабочий = СтруктураИспКИ.ТелефонРабочийКонЛица; ТелефонМобильный = СтруктураИспКИ.ТелефонМобильныйКонЛица; ТелефонДомашний = СтруктураИспКИ.ТелефонДомашнийКонЛица; ПочтаРабочий = СтруктураИспКИ.ПочтаРабочийКонЛица; ПочтаЧастная = СтруктураИспКИ.ПочтаЧастнаяКонЛица; Иначе ТелефонРабочий = СтруктураИспКИ.ТелефонРабочийОрг; ТелефонМобильный = СтруктураИспКИ.ТелефонМобильныйОрг; ТелефонДомашний = СтруктураИспКИ.ТелефонДомашнийОрг; ПочтаРабочий = СтруктураИспКИ.ПочтаРабочийОрг; ПочтаЧастная = СтруктураИспКИ.ПочтаЧастнаяОрг; КонецЕсли; Для Каждого ТекСтрока Из КомпанияКонтакт.КонтактнаяИнформация Цикл Если ТекСтрока.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон И (ТекСтрока.Вид = ТелефонРабочий ИЛИ ТекСтрока.Вид = ТелефонМобильный ИЛИ ТекСтрока.Вид = ТелефонДомашний) Тогда Продолжить; КонецЕсли; Если ТекСтрока.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты И (ТекСтрока.Вид = ПочтаРабочий ИЛИ ТекСтрока.Вид = ПочтаЧастная) Тогда Продолжить; КонецЕсли; НовСтрока = ТзнВрем.Добавить(); ЗаполнитьЗначенияСвойств(НовСтрока, ТекСтрока); КонецЦикла; КомпанияКонтакт.КонтактнаяИнформация.Очистить(); КомпанияКонтакт.КонтактнаяИнформация.Загрузить(ТзнВрем); Если Телефоны <> Неопределено Тогда Для Каждого ТекТелефон Из Телефоны Цикл НомерТелефона = ТекТелефон.Получить("VALUE"); Если Не ЗначениеЗаполнено(НомерТелефона) Тогда Продолжить; КонецЕсли; ВидТелефона = ТекТелефон.Получить("VALUE_TYPE"); Если ВидТелефона = "WORK" Тогда НовыйКонтакт = КомпанияКонтакт.КонтактнаяИнформация.Добавить(); НовыйКонтакт.Вид = ТелефонРабочий; НовыйКонтакт.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон; НовыйКонтакт.Представление = НомерТелефона; НовыйКонтакт.НомерТелефона = НомерТелефона; НовыйКонтакт.НомерТелефонаБезКодов = НомерТелефона; НовыйКонтакт.ЗначенияПолей = ПолучитьЗначениеПолейТелефонаИПочты("Телефон", НомерТелефона) ИначеЕсли ВидТелефона = "MOBILE" Тогда НовыйКонтакт = КомпанияКонтакт.КонтактнаяИнформация.Добавить(); НовыйКонтакт.Вид = ТелефонМобильный; НовыйКонтакт.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон; НовыйКонтакт.Представление = НомерТелефона; НовыйКонтакт.НомерТелефона = НомерТелефона; НовыйКонтакт.НомерТелефонаБезКодов = НомерТелефона; НовыйКонтакт.ЗначенияПолей = ПолучитьЗначениеПолейТелефонаИПочты("Телефон", НомерТелефона) ИначеЕсли ВидТелефона = "HOME" Тогда НовыйКонтакт = КомпанияКонтакт.КонтактнаяИнформация.Добавить(); НовыйКонтакт.Вид = ТелефонДомашний; НовыйКонтакт.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон; НовыйКонтакт.Представление = НомерТелефона; НовыйКонтакт.НомерТелефона = НомерТелефона; НовыйКонтакт.НомерТелефонаБезКодов = НомерТелефона; НовыйКонтакт.ЗначенияПолей = ПолучитьЗначениеПолейТелефонаИПочты("Телефон", НомерТелефона) КонецЕсли; КонецЦикла; КонецЕсли; Если Почта <> Неопределено Тогда Для Каждого ТекПочта Из Почта Цикл АдресПочты = ТекПочта.Получить("VALUE"); Если Не ЗначениеЗаполнено(АдресПочты) Тогда Продолжить; КонецЕсли; ВидПочты = ТекПочта.Получить("VALUE_TYPE"); Если ВидПочты = "WORK" Тогда НовыйКонтакт = КомпанияКонтакт.КонтактнаяИнформация.Добавить(); НовыйКонтакт.Вид = ПочтаРабочий; НовыйКонтакт.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты; НовыйКонтакт.Представление = АдресПочты; НовыйКонтакт.АдресЭП = АдресПочты; НовыйКонтакт.ЗначенияПолей = ПолучитьЗначениеПолейТелефонаИПочты("ЭПочта", АдресПочты) ИначеЕсли ВидПочты = "HOME" Тогда НовыйКонтакт = КомпанияКонтакт.КонтактнаяИнформация.Добавить(); НовыйКонтакт.Вид = ПочтаЧастная; НовыйКонтакт.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты; НовыйКонтакт.Представление = АдресПочты; НовыйКонтакт.АдресЭП = АдресПочты; НовыйКонтакт.ЗначенияПолей = ПолучитьЗначениеПолейТелефонаИПочты("ЭПочта", АдресПочты) КонецЕсли; КонецЦикла; КонецЕсли; КонецПроцедуры Функция ПолучитьЗначениеПолейТелефонаИПочты(ТипКИ, ЗначениеКИ) ЗаписьXML = Новый ЗаписьXML(); ЗаписьXML.УстановитьСтроку(); ЗаписьXML.ЗаписатьНачалоЭлемента("КонтактнаяИнформация"); ЗаписьXML.ЗаписатьАтрибут("xmlns", XMLСтрока("http://www.v8.1c.ru/ssl/contactinfo")); ЗаписьXML.ЗаписатьАтрибут("xmlns:xs", XMLСтрока("http://www.w3.org/2001/XMLSchema")); ЗаписьXML.ЗаписатьАтрибут("xmlns:xsi", XMLСтрока("http://www.w3.org/2001/XMLSchema-instance")); ЗаписьXML.ЗаписатьАтрибут("Представление", XMLСтрока(ЗначениеКИ)); ЗаписьXML.ЗаписатьНачалоЭлемента("Комментарий"); ЗаписьXML.ЗаписатьКонецЭлемента(); ЗаписьXML.ЗаписатьНачалоЭлемента("Состав"); Если ТипКИ = "Телефон" Тогда ЗаписьXML.ЗаписатьАтрибут("xsi:type" , "НомерТелефона"); ЗаписьXML.ЗаписатьАтрибут("КодСтраны" , ""); ЗаписьXML.ЗаписатьАтрибут("КодГорода" , ""); ЗаписьXML.ЗаписатьАтрибут("Номер" , XMLСтрока(ЗначениеКИ)); ЗаписьXML.ЗаписатьАтрибут("Добавочный" , ""); ИначеЕсли ТипКИ = "ЭПочта" Тогда ЗаписьXML.ЗаписатьАтрибут("xsi:type" , "ЭлектроннаяПочта"); ЗаписьXML.ЗаписатьАтрибут("Значение" , XMLСтрока(ЗначениеКИ)); КонецЕсли; ЗаписьXML.ЗаписатьКонецЭлемента(); ЗаписьXML.ЗаписатьКонецЭлемента(); Возврат ЗаписьXML.Закрыть(); КонецФункции /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Функция ЗагрузитьОбновитьРеквизиты(пОбщиеНастройки, мДанных) Экспорт Результат = Новый Массив; ОбщиеНастройки = Новый Структура; Для Каждого ЭлементСтруктуры Из пОбщиеНастройки Цикл ОбщиеНастройки.Вставить(ЭлементСтруктуры.Ключ, ЭлементСтруктуры.Значение); КонецЦикла; Б24_Синхр_СинхронизацияВызовСервера.ДобавитьСложныеНастройкиОбменаВСтруктуру(ОбщиеНастройки); МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; мТипыКИ = Новый Массив; мТипыКИ.Добавить(Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты); мТипыКИ.Добавить(Перечисления.ТипыКонтактнойИнформации.Телефон); Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("ТипДанных" , ОбщиеНастройки.ТипыОбъектовОбмена.Реквизит); Запрос.УстановитьПараметр("ТипДанныхКомпаний" , ОбщиеНастройки.ТипыОбъектовОбмена.Компания); Запрос.УстановитьПараметр("ТипДанныхКонтактов" , ОбщиеНастройки.ТипыОбъектовОбмена.Контакт); Запрос.УстановитьПараметр("Портал" , ОбщиеНастройки.Портал); Запрос.Текст = "ВЫБРАТЬ | Б24_Синхр_ИдентификаторыОбъектов.Объект КАК Объект, | Б24_Синхр_ИдентификаторыОбъектов.Идентификатор КАК Идентификатор |ПОМЕСТИТЬ ВремИдентификаторы |ИЗ | РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов |ГДЕ | Б24_Синхр_ИдентификаторыОбъектов.ТипДанных = &ТипДанных | И Б24_Синхр_ИдентификаторыОбъектов.Портал = &Портал | |ИНДЕКСИРОВАТЬ ПО | Идентификатор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Б24_Синхр_ИдентификаторыОбъектов.Объект КАК Объект, | Б24_Синхр_ИдентификаторыОбъектов.Идентификатор КАК Идентификатор, | Б24_Синхр_ИдентификаторыОбъектов.ТипДанных КАК ТипДанных |ПОМЕСТИТЬ ВремИдентификаторыВладельца |ИЗ | РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов |ГДЕ | Б24_Синхр_ИдентификаторыОбъектов.Портал = &Портал | И (Б24_Синхр_ИдентификаторыОбъектов.ТипДанных = &ТипДанныхКомпаний | ИЛИ Б24_Синхр_ИдентификаторыОбъектов.ТипДанных = &ТипДанныхКонтактов) | |ИНДЕКСИРОВАТЬ ПО | ТипДанных"; Запрос.Выполнить(); ЗагруженныеОбъекты = Новый Массив; Для каждого ТекЭлемент Из мДанных Цикл НовыйРеквизит = Ложь; ИдЭлемента = Формат(ТекЭлемент.Получить("ID"),"ЧГ=0"); ИдВладельца = Формат(ТекЭлемент.Получить("ENTITY_ID"),"ЧГ=0"); ВнешнийКод = ТекЭлемент.Получить("XML_ID"); Фамилия = Строка(ТекЭлемент.Получить("RQ_LAST_NAME")); Имя = Строка(ТекЭлемент.Получить("RQ_FIRST_NAME")); Отчество = Строка(ТекЭлемент.Получить("RQ_SECOND_NAME")); ФИО = Фамилия + " " + Имя + " " + Отчество; Если ЗагруженныеОбъекты.Найти(ИдВладельца + "_" + ИдЭлемента) <> Неопределено Тогда Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Истина))); Продолжить; КонецЕсли; ЗагруженныеОбъекты.Добавить(ИдВладельца + "_" + ИдЭлемента); ТипРеквизита = Строка(ТекЭлемент.Получить("ENTITY_TYPE_ID")); Если ТипРеквизита = "3" Тогда Наименование = ФИО; Наименование = ?(ЗначениеЗаполнено(Наименование), Наименование, Строка(ТекЭлемент.Получить("RQ_NAME"))); НаименованиеПолное = Наименование; Иначе //Наименование = Строка(ТекЭлемент.Получить("RQ_COMPANY_NAME")); //Наименование = ?(ЗначениеЗаполнено(Наименование), Наименование, ФИО); // //НаименованиеПолное = Строка(ТекЭлемент.Получить("RQ_COMPANY_FULL_NAME")); //НаименованиеПолное = ?(ЗначениеЗаполнено(НаименованиеПолное), НаименованиеПолное, Наименование); Наименование = Строка(ТекЭлемент.Получить("RQ_COMPANY_FULL_NAME")); Наименование = ?(ЗначениеЗаполнено(Наименование), Наименование, ФИО); Наименование = ?(ЗначениеЗаполнено(Наименование), Наименование, Строка(ТекЭлемент.Получить("RQ_COMPANY_NAME"))); НаименованиеПолное = Строка(ТекЭлемент.Получить("RQ_COMPANY_NAME")); НаименованиеПолное = ?(ЗначениеЗаполнено(НаименованиеПолное), НаименованиеПолное, Наименование); КонецЕсли; Если НЕ (ТипРеквизита = "4" ИЛИ ТипРеквизита = "3") Тогда Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Истина))); Продолжить; КонецЕсли; Активный = ТекЭлемент.Получить("ACTIVE") = "Y"; ИНН = Строка(ТекЭлемент.Получить("RQ_INN")); КодПоОКПО = Строка(ТекЭлемент.Получить("RQ_OKPO")); КПП = Строка(ТекЭлемент.Получить("RQ_KPP")); СвидетельствоСерияНомер = Строка(ТекЭлемент.Получить("RQ_IDENT_DOC_SER")) + " " + Строка(ТекЭлемент.Получить("RQ_IDENT_DOC_NUM")); ДУЛ = Строка(ТекЭлемент.Получить("RQ_IDENT_DOC")); СД = ПолучитьДатуИзСтрокиJSON(Строка(ТекЭлемент.Получить("RQ_IDENT_DOC_DATE"))); ОГРН = Строка(ТекЭлемент.Получить("RQ_OGRN")); ОГРН = ?(ЗначениеЗаполнено(ОГРН), ОГРН, Строка(ТекЭлемент.Получить("RQ_OGRNIP"))); #Область ПоискСозданиеРеквизита Реквизит = Неопределено; Реквизит = ПолучитьОбъектПоИдентификаторуИзВременнойТаблицы(МенеджерВременныхТаблиц, "ВремИдентификаторы", ИдЭлемента); Если ЗначениеЗаполнено(ВнешнийКод) И НЕ ЗначениеЗаполнено(Реквизит) Тогда Реквизит = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("СправочникСсылка.Контрагенты"), ВнешнийКод); КонецЕсли; Если НЕ ЗначениеЗаполнено(Реквизит) Тогда НовыйРеквизит = Истина; Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("Идентификатор", ИдВладельца); Если ТипРеквизита = "3" Тогда Запрос.УстановитьПараметр("ТипДанных", ОбщиеНастройки.ТипыОбъектовОбмена.Контакт); Иначе Запрос.УстановитьПараметр("ТипДанных", ОбщиеНастройки.ТипыОбъектовОбмена.Компания); КонецЕсли; Запрос.Текст = "ВЫБРАТЬ | ВремИдентификаторы.Объект КАК Объект |ИЗ | ВремИдентификаторыВладельца КАК ВремИдентификаторы |ГДЕ | ВремИдентификаторы.Идентификатор = &Идентификатор | И ВремИдентификаторы.ТипДанных = &ТипДанных"; ВыполненныйЗапрос = Запрос.Выполнить(); Если НЕ ВыполненныйЗапрос.Пустой() Тогда Выборка = ВыполненныйЗапрос.Выбрать(); Пока Выборка.Следующий() Цикл ВладелецРеквизита = Выборка.Объект; Прервать; КонецЦикла; КонецЕсли; Если НЕ ЗначениеЗаполнено(ВладелецРеквизита) Тогда Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, "Для заполнения реквизитов не найден партнер: " + Наименование + ". Будет пропущен."); Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Ложь))); Продолжить; Иначе Если ТипЗнч(ВладелецРеквизита) <> Тип("СправочникСсылка.Организации") Тогда Реквизит = Справочники.Контрагенты.СоздатьЭлемент(); Реквизит.Партнер = ВладелецРеквизита; Иначе Реквизит = ВладелецРеквизита.ПолучитьОбъект(); КонецЕсли; КонецЕсли; Иначе Реквизит = Реквизит.ПолучитьОбъект(); КонецЕсли; #КонецОбласти ЭтоОрганизация = ТипЗнч(Реквизит) = Тип("СправочникОбъект.Организации"); ЭтоКонтакт = ТипЗнч(Реквизит) = Тип("СправочникОбъект.КонтактныеЛицаПартнеров"); Если ЭтоКонтакт Тогда Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, "Для контактного лица: " + Наименование + ". Не записывается реквизит."); Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Истина))); Продолжить; КонецЕсли; Если НовыйРеквизит Тогда НайденнаяСтрока = ОбщиеНастройки.НастройкиСинхронизацииКонтрагентов.Пресеты.Найти(ТекЭлемент.Получить("PRESET_ID"), "ИдШаблона"); Если НайденнаяСтрока <> Неопределено Тогда Реквизит.ЮрФизЛицо = НайденнаяСтрока.ТипКонтрагента; Если НайденнаяСтрока.ТипКонтрагента = Перечисления.ЮрФизЛицо.ЮрЛицо ИЛИ НайденнаяСтрока.ТипКонтрагента = Перечисления.ЮрФизЛицо.ЮрЛицоНеРезидент Тогда Реквизит.ЮридическоеФизическоеЛицо = Перечисления.ЮридическоеФизическоеЛицо.ЮридическоеЛицо; Иначе Реквизит.ЮридическоеФизическоеЛицо = Перечисления.ЮридическоеФизическоеЛицо.ФизическоеЛицо; КонецЕсли; Иначе Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, "Не удалось определить шаблон Битрикс24 для реквизита: " + Наименование + ". Будет пропущен. Их нужно перезаполнить настройках"); Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Ложь))); Продолжить; КонецЕсли; КонецЕсли; ОбновлятьРеквизиты = ОбщиеНастройки.НастройкиСинхронизацииКонтрагентов.ОбновлятьКонтрагентов; Если ОбновлятьРеквизиты Тогда Если НЕ ЭтоОрганизация И ЗначениеЗаполнено(Наименование) Тогда Реквизит.Наименование = Наименование; КонецЕсли; Реквизит.НаименованиеПолное = НаименованиеПолное; Реквизит.ПометкаУдаления = НЕ Активный; Реквизит.ИНН = ИНН; Реквизит.КПП = КПП; Реквизит.КодПоОКПО = КодПоОКПО; Если НЕ ЭтоОрганизация Тогда Реквизит.РегистрационныйНомер = ОГРН; Иначе Если СД = Неопределено Тогда Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Не удалось разобрать дату выдачи свидетельства. Контрагент: " + Наименование); Иначе Реквизит.СвидетельствоДатаВыдачи = СД; КонецЕсли; Реквизит.ОГРН = ОГРН; Реквизит.СвидетельствоСерияНомер = СвидетельствоСерияНомер; КонецЕсли; Иначе Реквизит.ПометкаУдаления = НЕ Активный; Реквизит.ИНН = ?(ЗначениеЗаполнено(Реквизит.ИНН), Реквизит.ИНН, ИНН); Реквизит.КПП = ?(ЗначениеЗаполнено(Реквизит.КПП), Реквизит.КПП, КПП); Реквизит.КодПоОКПО = ?(ЗначениеЗаполнено(Реквизит.КодПоОКПО), Реквизит.КодПоОКПО, КодПоОКПО); Если НЕ ЭтоОрганизация Тогда Реквизит.Наименование = ?(ЗначениеЗаполнено(Реквизит.Наименование), Реквизит.Наименование, Наименование); КонецЕсли; Реквизит.НаименованиеПолное = ?(ЗначениеЗаполнено(Реквизит.НаименованиеПолное), Реквизит.НаименованиеПолное, НаименованиеПолное); Если НЕ ЭтоОрганизация Тогда Реквизит.РегистрационныйНомер = ?(ЗначениеЗаполнено(Реквизит.РегистрационныйНомер), Реквизит.РегистрационныйНомер, ОГРН); Иначе Реквизит.ОГРН = ?(ЗначениеЗаполнено(Реквизит.ОГРН), Реквизит.ОГРН, ОГРН); Реквизит.СвидетельствоСерияНомер = ?(ЗначениеЗаполнено(Реквизит.СвидетельствоСерияНомер), Реквизит.СвидетельствоСерияНомер, СвидетельствоСерияНомер); Реквизит.СвидетельствоДатаВыдачи = ?(ЗначениеЗаполнено(Реквизит.СвидетельствоДатаВыдачи), Реквизит.СвидетельствоДатаВыдачи, СД); КонецЕсли; КонецЕсли; Если НЕ ЗначениеЗаполнено(Реквизит.Наименование) И ЗначениеЗаполнено(ВладелецРеквизита) Тогда Реквизит.Наименование = ВладелецРеквизита.Наименование; КонецЕсли; Попытка Реквизит.ДополнительныеСвойства.Вставить("ЗагрузкаСБитрикс24", Истина); Реквизит.Записать(); Б24_Синхр_СинхронизацияВызовСервера.ЗаписатьИдБ24Объекта(ОбщиеНастройки, ОбщиеНастройки.ТипыОбъектовОбмена.Реквизит, Реквизит.Ссылка, ИдЭлемента); Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Истина))); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Записаны реквизиты контрагента: " + Наименование); Исключение Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, "Во время записи реквизитов контрагента: " + Наименование + " возникли ошибки."); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, ОписаниеОшибки()); Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Ложь))); ОбщиеНастройки.ВыполненоБезОшибок = Ложь; КонецПопытки; КонецЦикла; пОбщиеНастройки.НомерСообщения = ОбщиеНастройки.НомерСообщения; // чтобы лог не затерся. Возврат Результат; КонецФункции /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Функция ЗагрузитьОбновитьАдресаРеквизитов(пОбщиеНастройки, мДанных) Экспорт Результат = Новый Массив; ОбщиеНастройки = Новый Структура; Для Каждого ЭлементСтруктуры Из пОбщиеНастройки Цикл ОбщиеНастройки.Вставить(ЭлементСтруктуры.Ключ, ЭлементСтруктуры.Значение); КонецЦикла; Б24_Синхр_СинхронизацияВызовСервера.ДобавитьСложныеНастройкиОбменаВСтруктуру(ОбщиеНастройки); МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("ТипДанных", ОбщиеНастройки.ТипыОбъектовОбмена.Реквизит); Запрос.УстановитьПараметр("Портал" , ОбщиеНастройки.Портал); Запрос.Текст = "ВЫБРАТЬ | Б24_Синхр_ИдентификаторыОбъектов.Объект КАК Объект, | Б24_Синхр_ИдентификаторыОбъектов.Идентификатор КАК Идентификатор |ПОМЕСТИТЬ ВремИдентификаторы |ИЗ | РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов |ГДЕ | Б24_Синхр_ИдентификаторыОбъектов.ТипДанных = &ТипДанных | И Б24_Синхр_ИдентификаторыОбъектов.Портал = &Портал | |ИНДЕКСИРОВАТЬ ПО | Идентификатор"; Запрос.Выполнить(); Для каждого ТекЭлемент Из мДанных Цикл ТипВладельца = Формат(ТекЭлемент.Получить("ENTITY_TYPE_ID"),"ЧГ=0"); ИдВладельца = Формат(ТекЭлемент.Получить("ENTITY_ID"),"ЧГ=0"); ТипАдреса = ТекЭлемент.Получить("TYPE_ID"); ИдВозврата = ТипВладельца + "_" + ИдВладельца; Страна = Строка(ТекЭлемент.Получить("COUNTRY")); Регион = Строка(ТекЭлемент.Получить("PROVINCE")); Район = Строка(ТекЭлемент.Получить("REGION")); Индекс = Строка(ТекЭлемент.Получить("POSTAL_CODE")); ГородНП = Строка(ТекЭлемент.Получить("CITY")); Адрес1 = Строка(ТекЭлемент.Получить("ADDRESS_1")); Адрес2 = Строка(ТекЭлемент.Получить("ADDRESS_2")); Если ТипВладельца <> "8" Тогда Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдВозврата, Истина))); Продолжить; КонецЕсли; #Область ПоискРеквизита КомпанияКонтакт = Неопределено; КомпанияКонтакт = ПолучитьОбъектПоИдентификаторуИзВременнойТаблицы(МенеджерВременныхТаблиц, "ВремИдентификаторы", ИдВладельца); Если КомпанияКонтакт = Неопределено Тогда Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдВозврата, Ложь))); Продолжить; ИначеЕсли КомпанияКонтакт = Справочники.Контрагенты.ПустаяСсылка() Тогда Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, "Для заполнения адреса реквизита не найден реквизит с ид: " + ИдВладельца + ". Вид адреса: " + ТипАдреса +"Будет пропущен."); Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдВозврата, Ложь))); Продолжить; КонецЕсли; ОбновлятьРеквизиты = ОбщиеНастройки.НастройкиСинхронизацииКонтрагентов.ОбновлятьКонтрагентов; ЭтоОрганизация = ТипЗнч(КомпанияКонтакт) = Тип("СправочникСсылка.Организации"); Если Строка(ТипАдреса) = "1" Тогда ВидКИ = ?(ЭтоОрганизация, Справочники.ВидыКонтактнойИнформации.ФактАдресОрганизации, Справочники.ВидыКонтактнойИнформации.ФактАдресКонтрагента); ТипОбъектаОбмена = ОбщиеНастройки.ТипыОбъектовОбмена.ФактАдресРеквизита; ИначеЕсли Строка(ТипАдреса) = "6" Тогда ВидКИ = ?(ЭтоОрганизация, Справочники.ВидыКонтактнойИнформации.ЮрАдресОрганизации, Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента); ТипОбъектаОбмена = ОбщиеНастройки.ТипыОбъектовОбмена.ЮрАдресРеквизита; Иначе Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация,"Адрес вида:" + Строка(ТипАдреса) + " будет пропущен."); КонецЕсли; КомпанияКонтакт = КомпанияКонтакт.ПолучитьОбъект(); #КонецОбласти Страна = ?(ЗначениеЗаполнено(Страна), ВРег(Страна), Б24_Синхр_ОбщегоНазначенияСервер.ПолучитьНазваниеСтраны()); СтруктураДанных = Б24_Синхр_РаботаСАдресамиСервер.ПолучитьСтруктуруСПолямиКИ(Страна, Регион, Район, Индекс, ГородНП, Адрес1, Адрес2); НайденнаяСтрока = КомпанияКонтакт.КонтактнаяИнформация.Найти(ВидКИ, "Вид"); Если НайденнаяСтрока = Неопределено Тогда НовыйКИ = КомпанияКонтакт.КонтактнаяИнформация.Добавить(); НовыйКИ.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес; НовыйКИ.Вид = ВидКИ; НовыйКИ.Страна = СтруктураДанных.Страна; НовыйКИ.Регион = СтруктураДанных.Регион; НовыйКИ.Город = СтруктураДанных.Город; НовыйКИ.Представление = СтруктураДанных.Представление; НовыйКИ.ЗначенияПолей = Б24_Синхр_РаботаСАдресамиСервер.ПолучитьЗначениеПолейАдреса(СтруктураДанных); НовыйКИ.Значение = ""; Иначе Если НЕ ОбновлятьРеквизиты И ЗначениеЗаполнено(НайденнаяСтрока.Представление) Тогда Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдВозврата, Истина))); Б24_Синхр_СинхронизацияВызовСервера.ЗаписатьИдБ24Объекта(ОбщиеНастройки, ТипОбъектаОбмена, КомпанияКонтакт.Ссылка, ИдВладельца); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "В настройках указано, что контрагенты не обновляются. У контрагента : " + КомпанияКонтакт.Наименование + " не будет обновлен " + ВидКИ.Наименование); Продолжить; КонецЕсли; НайденнаяСтрока.Страна = СтруктураДанных.Страна; НайденнаяСтрока.Регион = СтруктураДанных.Регион; НайденнаяСтрока.Город = СтруктураДанных.Город; НайденнаяСтрока.Представление = СтруктураДанных.Представление; НайденнаяСтрока.ЗначенияПолей = Б24_Синхр_РаботаСАдресамиСервер.ПолучитьЗначениеПолейАдреса(СтруктураДанных); НайденнаяСтрока.Значение = ""; КонецЕсли; Попытка КомпанияКонтакт.ДополнительныеСвойства.Вставить("ЗагрузкаСБитрикс24", Истина); КомпанияКонтакт.Записать(); Б24_Синхр_СинхронизацияВызовСервера.ЗаписатьИдБ24Объекта(ОбщиеНастройки, ТипОбъектаОбмена, КомпанияКонтакт.Ссылка, ИдВладельца); Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдВозврата, Истина))); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Записаны адреса контрагента: " + КомпанияКонтакт.Наименование); Исключение Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, "Во время записи адреса реквизита : " + КомпанияКонтакт.Наименование + " возникли ошибки."); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, ОписаниеОшибки()); Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдВозврата, Ложь))); ОбщиеНастройки.ВыполненоБезОшибок = Ложь; КонецПопытки; КонецЦикла; пОбщиеНастройки.НомерСообщения = ОбщиеНастройки.НомерСообщения; // чтобы лог не затерся. Возврат Результат; КонецФункции /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Функция ЗагрузитьОбновитьБанковскиеСчетаКомпанийКонтактов(пОбщиеНастройки, мДанных) Экспорт Результат = Новый Массив; ОбщиеНастройки = Новый Структура; Для Каждого ЭлементСтруктуры Из пОбщиеНастройки Цикл ОбщиеНастройки.Вставить(ЭлементСтруктуры.Ключ, ЭлементСтруктуры.Значение); КонецЦикла; Б24_Синхр_СинхронизацияВызовСервера.ДобавитьСложныеНастройкиОбменаВСтруктуру(ОбщиеНастройки); МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("ТипДанных", ОбщиеНастройки.ТипыОбъектовОбмена.БанковскийСчетРеквизита); Запрос.УстановитьПараметр("ТипДанныхВладельца", ОбщиеНастройки.ТипыОбъектовОбмена.Реквизит); Запрос.УстановитьПараметр("Портал" , ОбщиеНастройки.Портал); Запрос.Текст = "ВЫБРАТЬ | Б24_Синхр_ИдентификаторыОбъектов.Объект КАК Объект, | Б24_Синхр_ИдентификаторыОбъектов.Идентификатор КАК Идентификатор |ПОМЕСТИТЬ ВремИдентификаторы |ИЗ | РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов |ГДЕ | Б24_Синхр_ИдентификаторыОбъектов.ТипДанных = &ТипДанных | И Б24_Синхр_ИдентификаторыОбъектов.Портал = &Портал | |ИНДЕКСИРОВАТЬ ПО | Идентификатор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | БанковскиеСчета.Ссылка КАК Объект, | БанковскиеСчета.НомерСчета КАК Идентификатор, | Банки.Код КАК БИК |ПОМЕСТИТЬ ВремНомераСчетов |ИЗ | Справочник.БанковскиеСчетаКонтрагентов КАК БанковскиеСчета | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.КлассификаторБанков КАК Банки | ПО БанковскиеСчета.Банк = Банки.Ссылка | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | БанковскиеСчета.Ссылка, | БанковскиеСчета.НомерСчета, | Банки.Код |ИЗ | Справочник.БанковскиеСчетаОрганизаций КАК БанковскиеСчета | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.КлассификаторБанков КАК Банки | ПО БанковскиеСчета.Банк = Банки.Ссылка | |ИНДЕКСИРОВАТЬ ПО | Идентификатор, | БИК |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Б24_Синхр_ИдентификаторыОбъектов.Объект КАК Объект, | Б24_Синхр_ИдентификаторыОбъектов.Идентификатор КАК Идентификатор |ПОМЕСТИТЬ ВремИдентификаторыВладельца |ИЗ | РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов |ГДЕ | Б24_Синхр_ИдентификаторыОбъектов.ТипДанных = &ТипДанныхВладельца | И Б24_Синхр_ИдентификаторыОбъектов.Портал = &Портал | |ИНДЕКСИРОВАТЬ ПО | Идентификатор"; Запрос.Выполнить(); ЗагруженныеОбъекты = Новый Массив; Для каждого ТекЭлемент Из мДанных Цикл ИдЭлемента = Формат(ТекЭлемент.Получить("ID"),"ЧГ=0"); Если ЗагруженныеОбъекты.Найти(ИдЭлемента) <> Неопределено Тогда Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Истина))); Продолжить; КонецЕсли; ЗагруженныеОбъекты.Добавить(ИдЭлемента); ВнешнийКод = Строка(ТекЭлемент.Получить("XML_ID")); ИдВладельца = Формат(ТекЭлемент.Получить("ENTITY_ID"),"ЧГ=0"); НомерСчета = Строка(ТекЭлемент.Получить("RQ_ACC_NUM")); БикБанка = Строка(ТекЭлемент.Получить("RQ_BIK")); НаименованиеБС = Строка(ТекЭлемент.Получить("NAME")); БанковскийСчет = Неопределено; Если Не ЗначениеЗаполнено(БикБанка) Тогда Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, "Не указан БИК в счете:" + НомерСчета + " у реквизита с кодом " + ИдВладельца); Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Ложь))); Продолжить; КонецЕсли; #Область ПоискСозданиеБанкСчета БанковскийСчет = ПолучитьОбъектПоИдентификаторуИзВременнойТаблицы(МенеджерВременныхТаблиц, "ВремИдентификаторы", ИдЭлемента); Если ЗначениеЗаполнено(ВнешнийКод) И НЕ ЗначениеЗаполнено(БанковскийСчет) Тогда БанковскийСчет = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("СправочникСсылка.БанковскиеСчетаКонтрагентов"), ВнешнийКод); КонецЕсли; Если ЗначениеЗаполнено(НомерСчета) И НЕ ЗначениеЗаполнено(БанковскийСчет) Тогда Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("Идентификатор" , НомерСчета); Запрос.УстановитьПараметр("БИК" , БикБанка); Запрос.Текст = "ВЫБРАТЬ | ВремИдентификаторы.Объект КАК Объект |ИЗ | ВремНомераСчетов КАК ВремИдентификаторы |ГДЕ | ВремИдентификаторы.Идентификатор = &Идентификатор | И ВремИдентификаторы.БИК = &БИК"; ВыполненныйЗапрос = Запрос.Выполнить(); Если НЕ ВыполненныйЗапрос.Пустой() Тогда Выборка = ВыполненныйЗапрос.Выбрать(); Пока Выборка.Следующий() Цикл БанковскийСчет = Выборка.Объект; Прервать; КонецЦикла; КонецЕсли; КонецЕсли; Если БанковскийСчет = Неопределено Тогда ВладелецБСчета = ПолучитьОбъектПоИдентификаторуИзВременнойТаблицы(МенеджерВременныхТаблиц, "ВремИдентификаторыВладельца", ИдВладельца); Если ВладелецБСчета = Неопределено Тогда Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, "Не найден владелец банковского счета. Ид реквизита: " + ИдВладельца + ". Будет пропущен банковский счет : " + ИдЭлемента); Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Ложь))); Продолжить; КонецЕсли; Если ТипЗнч(ВладелецБСчета) = Тип("СправочникСсылка.Контрагенты") Тогда БанковскийСчет = Справочники.БанковскиеСчетаКонтрагентов.СоздатьЭлемент(); Иначе БанковскийСчет = Справочники.БанковскиеСчетаОрганизаций.СоздатьЭлемент(); КонецЕсли; БанковскийСчет.Владелец = ВладелецБСчета; Иначе Если ОбщиеНастройки.НастройкиСинхронизацииКонтрагентов.ОбновлятьКонтрагентов Тогда БанковскийСчет = БанковскийСчет.ПолучитьОбъект(); Иначе Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Истина))); Б24_Синхр_СинхронизацияВызовСервера.ЗаписатьИдБ24Объекта(ОбщиеНастройки, ОбщиеНастройки.ТипыОбъектовОбмена.БанковскийСчетРеквизита, БанковскийСчет.Ссылка, ИдЭлемента); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "В настройках указано, что партнеры/контрагенты не обновляются. Банковский счет: " + НомерСчета + " не будет обновлен."); Продолжить; КонецЕсли; КонецЕсли; #КонецОбласти Активный = ТекЭлемент.Получить("ACTIVE") = "Y"; БанковскийСчет.ПометкаУдаления = НЕ Активный; БанковскийСчет.НомерСчета = НомерСчета; НайденныйБанк = Справочники.КлассификаторБанков.НайтиПоКоду(БикБанка); Если ЗначениеЗаполнено(НайденныйБанк) Тогда БанковскийСчет.Банк = НайденныйБанк; Иначе БанковскийСчет.РучноеИзменениеРеквизитовБанка = Истина; БанковскийСчет.СВИФТБанка = Строка(ТекЭлемент.Получить("RQ_SWIFT")); БанковскийСчет.НаименованиеБанка = Строка(ТекЭлемент.Получить("RQ_BANK_NAME")); БанковскийСчет.АдресБанка = Строка(ТекЭлемент.Получить("RQ_BANK_ADDR")); БанковскийСчет.БИКБанка = БикБанка; БанковскийСчет.КоррСчетБанка = Строка(ТекЭлемент.Получить("RQ_COR_ACC_NUM")); КонецЕсли; КодВалюты = ПолучитьКодПоВалюте(Строка(ТекЭлемент.Получить("RQ_ACC_CURRENCY"))); БанковскийСчет.ВалютаДенежныхСредств = Справочники.Валюты.НайтиПоКоду(КодВалюты); БанковскийСчет.Наименование = НаименованиеБС; Попытка БанковскийСчет.ДополнительныеСвойства.Вставить("ЗагрузкаСБитрикс24", Истина); БанковскийСчет.Записать(); Б24_Синхр_СинхронизацияВызовСервера.ЗаписатьИдБ24Объекта(ОбщиеНастройки, ОбщиеНастройки.ТипыОбъектовОбмена.БанковскийСчетРеквизита, БанковскийСчет.Ссылка, ИдЭлемента); Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Истина))); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Записан номер счета: " + НомерСчета); ОбщиеНастройки.ВыполненоБезОшибок = Ложь; Исключение Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, "Во время записи банковского счета контрагента: " + НомерСчета + " возникли ошибки."); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, ОписаниеОшибки()); Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Ложь))); КонецПопытки; КонецЦикла; пОбщиеНастройки.НомерСообщения = ОбщиеНастройки.НомерСообщения; // чтобы лог не затерся. Возврат Результат; КонецФункции Функция ПолучитьКодПоВалюте(Валюта) Если Валюта = "USD" Тогда Результат = "840"; ИначеЕсли Валюта = "EUR" Тогда Результат = "978"; ИначеЕсли Валюта = "UAH" Тогда Результат = "980"; ИначеЕсли Валюта = "BYN" Тогда Результат = "933"; ИначеЕсли Валюта = "KZT" Тогда Результат = "398"; Иначе Результат = "643"; КонецЕсли; Возврат Результат; КонецФункции /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Функция ЗагрузитьОбновитьРазделыНоменклатуры(пОбщиеНастройки, мДанных) Экспорт Результат = Новый Массив; ОбщиеНастройки = Новый Структура; Для Каждого ЭлементСтруктуры Из пОбщиеНастройки Цикл ОбщиеНастройки.Вставить(ЭлементСтруктуры.Ключ, ЭлементСтруктуры.Значение); КонецЦикла; Б24_Синхр_СинхронизацияВызовСервера.ДобавитьСложныеНастройкиОбменаВСтруктуру(ОбщиеНастройки); ЕстьПользовательскоеДерево = Б24_Синхр_СинхронизацияПовтИсп.ЕстьПользовательскоеДеревоГрупп(ОбщиеНастройки.НастройкаСинхронизации); МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("ТипДанных", ОбщиеНастройки.ТипыОбъектовОбмена.ГруппаТовара); Запрос.УстановитьПараметр("ЕстьПользовательскоеДерево", ЕстьПользовательскоеДерево); Запрос.УстановитьПараметр("Портал" , ОбщиеНастройки.Портал); Запрос.Текст = "ВЫБРАТЬ | Б24_Синхр_ИдентификаторыОбъектов.Объект КАК Объект, | Б24_Синхр_ИдентификаторыОбъектов.Идентификатор КАК Идентификатор |ПОМЕСТИТЬ ВремИдентификаторы |ИЗ | РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов |ГДЕ | Б24_Синхр_ИдентификаторыОбъектов.ТипДанных = &ТипДанных | И Б24_Синхр_ИдентификаторыОбъектов.Портал = &Портал | |ИНДЕКСИРОВАТЬ ПО | Идентификатор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Номенклатура.Ссылка КАК Объект, | Номенклатура.Наименование КАК Идентификатор |ПОМЕСТИТЬ ВремНаименованиеРазделов |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | Номенклатура.ЭтоГруппа = ИСТИНА | И НЕ &ЕстьПользовательскоеДерево | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | Б24_Синхр_ПользовательскиеГруппыТоваров.Ссылка, | Б24_Синхр_ПользовательскиеГруппыТоваров.Наименование |ИЗ | Справочник.Б24_Синхр_ПользовательскиеГруппыТоваров КАК Б24_Синхр_ПользовательскиеГруппыТоваров |ГДЕ | &ЕстьПользовательскоеДерево | |ИНДЕКСИРОВАТЬ ПО | Идентификатор"; Запрос.Выполнить(); ЗагруженныеОбъекты = Новый Массив; Для каждого ТекЭлемент Из мДанных Цикл ИдЭлемента = Формат(ТекЭлемент.Получить("ID"),"ЧГ=0"); Если ЗагруженныеОбъекты.Найти(ИдЭлемента) <> Неопределено Тогда Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Истина))); Продолжить; КонецЕсли; ЗагруженныеОбъекты.Добавить(ИдЭлемента); ВнешнийКод = Строка(ТекЭлемент.Получить("XML_ID")); ИдРодителя = Формат(ТекЭлемент.Получить("SECTION_ID"),"ЧГ=0"); Наименование = Строка(ТекЭлемент.Получить("NAME")); #Область ПоискСозданиеРаздела ГруппаНоменклатуры = Неопределено; ГруппаНоменклатуры = ПолучитьОбъектПоИдентификаторуИзВременнойТаблицы(МенеджерВременныхТаблиц, "ВремИдентификаторы", ИдЭлемента); Если ЗначениеЗаполнено(ВнешнийКод) И НЕ ЗначениеЗаполнено(ГруппаНоменклатуры) Тогда ГруппаНоменклатуры = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(?(ЕстьПользовательскоеДерево, Тип("СправочникСсылка.Б24_Синхр_ПользовательскиеГруппыТоваров"), Тип("СправочникСсылка.Номенклатура")), ВнешнийКод); КонецЕсли; Если НЕ ЗначениеЗаполнено(ГруппаНоменклатуры) Тогда ГруппаНоменклатуры = ПолучитьОбъектПоИдентификаторуИзВременнойТаблицы(МенеджерВременныхТаблиц, "ВремНаименованиеРазделов", Наименование); КонецЕсли; Если НЕ ЗначениеЗаполнено(ГруппаНоменклатуры) Тогда Если ЕстьПользовательскоеДерево Тогда ГруппаНоменклатуры = Справочники.Б24_Синхр_ПользовательскиеГруппыТоваров.СоздатьЭлемент(); Иначе ГруппаНоменклатуры = Справочники.Номенклатура.СоздатьГруппу(); КонецЕсли; Иначе Если ОбщиеНастройки.НастройкиСинхронизацииТоваров.ОбновлятьТовары Тогда ГруппаНоменклатуры = ГруппаНоменклатуры.ПолучитьОбъект(); Иначе Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Истина))); Б24_Синхр_СинхронизацияВызовСервера.ЗаписатьИдБ24Объекта(ОбщиеНастройки, ОбщиеНастройки.ТипыОбъектовОбмена.ГруппаТовара, ГруппаНоменклатуры.Ссылка, ИдЭлемента); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "В настройках указано, что товары не обновляются. раздел номенклатуры: " + Наименование + " не будет обновлен."); Продолжить; КонецЕсли; КонецЕсли; #КонецОбласти ГруппаНоменклатуры.Наименование = Наименование; РодительГруппы = Неопределено; Если ЗначениеЗаполнено(ИдРодителя) Тогда ВыборкаРодителей = РегистрыСведений.Б24_Синхр_ИдентификаторыОбъектов.Выбрать(Новый Структура("ТипДанных", ОбщиеНастройки.ТипыОбъектовОбмена.ГруппаТовара)); Пока ВыборкаРодителей.Следующий() Цикл Если ВыборкаРодителей.Идентификатор = ИдРодителя Тогда РодительГруппы = ВыборкаРодителей.Объект; КонецЕсли; КонецЦикла; ИначеЕсли НЕ ЗначениеЗаполнено(ИдРодителя) И ЕстьПользовательскоеДерево Тогда РодительГруппы = ОбщиеНастройки.ДеревоГрупп; КонецЕсли; Если РодительГруппы = Неопределено И ЗначениеЗаполнено(ИдРодителя) Тогда Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, "Не найден родитель группы номенклатуры: " + Наименование); Если ЕстьПользовательскоеДерево Тогда ГруппаНоменклатуры.Родитель = ОбщиеНастройки.ДеревоГрупп; КонецЕсли; Иначе ГруппаНоменклатуры.Родитель = РодительГруппы; КонецЕсли; Попытка ГруппаНоменклатуры.ДополнительныеСвойства.Вставить("ЗагрузкаСБитрикс24", Истина); ГруппаНоменклатуры.Записать(); Б24_Синхр_СинхронизацияВызовСервера.ЗаписатьИдБ24Объекта(ОбщиеНастройки, ОбщиеНастройки.ТипыОбъектовОбмена.ГруппаТовара, ГруппаНоменклатуры.Ссылка, ИдЭлемента); Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Истина))); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Записана группа номенклатуры: " + Наименование); Исключение Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, "Во время записи группы номенклатуры: " + Наименование + " возникли ошибки."); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, ОписаниеОшибки()); Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Ложь))); ОбщиеНастройки.ВыполненоБезОшибок = Ложь; КонецПопытки; КонецЦикла; пОбщиеНастройки.НомерСообщения = ОбщиеНастройки.НомерСообщения; // чтобы лог не затерся. Возврат Результат; КонецФункции /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Функция ЗагрузитьОбновитьЕдиницыИзмерения(пОбщиеНастройки, мДанных) Экспорт Результат = Новый Массив; ОбщиеНастройки = Новый Структура; Для Каждого ЭлементСтруктуры Из пОбщиеНастройки Цикл ОбщиеНастройки.Вставить(ЭлементСтруктуры.Ключ, ЭлементСтруктуры.Значение); КонецЦикла; Б24_Синхр_СинхронизацияВызовСервера.ДобавитьСложныеНастройкиОбменаВСтруктуру(ОбщиеНастройки); МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("ТипДанных" , ОбщиеНастройки.ТипыОбъектовОбмена.ЕдиницаИзмерения); Запрос.УстановитьПараметр("Портал" , ОбщиеНастройки.Портал); Запрос.Текст = "ВЫБРАТЬ | Б24_Синхр_ИдентификаторыОбъектов.Объект КАК Объект, | Б24_Синхр_ИдентификаторыОбъектов.Идентификатор КАК Идентификатор |ПОМЕСТИТЬ ВремИдентификаторы |ИЗ | РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов |ГДЕ | Б24_Синхр_ИдентификаторыОбъектов.Портал = &Портал | И Б24_Синхр_ИдентификаторыОбъектов.ТипДанных = &ТипДанных | |ИНДЕКСИРОВАТЬ ПО | Идентификатор"; Запрос.Выполнить(); ЗагруженныеОбъекты = Новый Массив; Для каждого ТекЭлемент Из мДанных Цикл ИдЭлемента = Формат(ТекЭлемент.Получить("ID"),"ЧГ=0"); Если ЗагруженныеОбъекты.Найти(ИдЭлемента) <> Неопределено Тогда Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Истина))); Продолжить; КонецЕсли; ЗагруженныеОбъекты.Добавить(ИдЭлемента); КодЭлемента = Строка(ТекЭлемент.Получить("CODE")); Наименование = Строка(ТекЭлемент.Получить("MEASURE_TITLE")); НаименованиеП = Строка(ТекЭлемент.Получить("SYMBOL_RUS")); НаименованиеМ = Строка(ТекЭлемент.Получить("SIMBOL_INTL")); #Область ПоискСозданиеЕдИзм ЕдиницаИзмерения = Неопределено; Если ЗначениеЗаполнено(КодЭлемента) Тогда ЕдиницаИзмерения = Справочники.УпаковкиЕдиницыИзмерения.НайтиПоКоду(КодЭлемента,,,Справочники.НаборыУпаковок.БазовыеЕдиницыИзмерения); КонецЕсли; Если НЕ ЗначениеЗаполнено(ЕдиницаИзмерения) Тогда ЕдиницаИзмерения = ПолучитьОбъектПоИдентификаторуИзВременнойТаблицы(МенеджерВременныхТаблиц, "ВремИдентификаторы", ИдЭлемента); КонецЕсли; Если НЕ ЗначениеЗаполнено(ЕдиницаИзмерения) Тогда ЕдиницаИзмерения = Справочники.УпаковкиЕдиницыИзмерения.СоздатьЭлемент(); ЕдиницаИзмерения.Владелец = Справочники.НаборыУпаковок.БазовыеЕдиницыИзмерения; Иначе ЕдиницаИзмерения = ЕдиницаИзмерения.ПолучитьОбъект(); КонецЕсли; #КонецОбласти ЕдиницаИзмерения.Код = КодЭлемента; ЕдиницаИзмерения.Наименование = Наименование; ЕдиницаИзмерения.НаименованиеПолное = НаименованиеП; ЕдиницаИзмерения.МеждународноеСокращение = НаименованиеМ; Попытка ЕдиницаИзмерения.ДополнительныеСвойства.Вставить("ЗагрузкаСБитрикс24", Истина); ЕдиницаИзмерения.Записать(); Б24_Синхр_СинхронизацияВызовСервера.ЗаписатьИдБ24Объекта(ОбщиеНастройки, ОбщиеНастройки.ТипыОбъектовОбмена.ЕдиницаИзмерения, ЕдиницаИзмерения.Ссылка, ИдЭлемента); Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Истина))); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Записана единица измерения номенклатуры: " + НаименованиеП); Исключение Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, "Во время записи единицы измерения номенклатуры: " + НаименованиеП + " возникли ошибки."); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, ОписаниеОшибки()); Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Ложь))); ОбщиеНастройки.ВыполненоБезОшибок = Ложь; КонецПопытки; КонецЦикла; пОбщиеНастройки.НомерСообщения = ОбщиеНастройки.НомерСообщения; // чтобы лог не затерся. Возврат Результат; КонецФункции /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Функция ЗагрузитьОбновитьСвойстваТоваров(пОбщиеНастройки, мДанных) Экспорт Результат = Новый Массив; ОбщиеНастройки = Новый Структура; Для Каждого ЭлементСтруктуры Из пОбщиеНастройки Цикл ОбщиеНастройки.Вставить(ЭлементСтруктуры.Ключ, ЭлементСтруктуры.Значение); КонецЦикла; Б24_Синхр_СинхронизацияВызовСервера.ДобавитьСложныеНастройкиОбменаВСтруктуру(ОбщиеНастройки); МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("ТипДанных" , ОбщиеНастройки.ТипыОбъектовОбмена.СвойствоТовара); Запрос.УстановитьПараметр("ТипДанныхЗначенийСвойств", ОбщиеНастройки.ТипыОбъектовОбмена.ЗначениеСвойстваТовара); Запрос.УстановитьПараметр("Портал" , ОбщиеНастройки.Портал); Запрос.Текст = "ВЫБРАТЬ | Б24_Синхр_ИдентификаторыОбъектов.Объект КАК Объект, | Б24_Синхр_ИдентификаторыОбъектов.Идентификатор КАК Идентификатор, | Б24_Синхр_ИдентификаторыОбъектов.ПодчиненныйОбъект КАК ПодчиненныйОбъект |ПОМЕСТИТЬ ВремИдентификаторы |ИЗ | РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов |ГДЕ | Б24_Синхр_ИдентификаторыОбъектов.Портал = &Портал | И Б24_Синхр_ИдентификаторыОбъектов.ТипДанных = &ТипДанных | |ИНДЕКСИРОВАТЬ ПО | Идентификатор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ДополнительныеРеквизитыИСведения.Ссылка КАК Объект, | ДополнительныеРеквизитыИСведения.Заголовок КАК Идентификатор |ПОМЕСТИТЬ ВремНаименованияСвойств |ИЗ | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения |ГДЕ | (ДополнительныеРеквизитыИСведения.НаборСвойств В ИЕРАРХИИ (ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.Справочник_Номенклатура)) | ИЛИ ДополнительныеРеквизитыИСведения.НаборСвойств В ИЕРАРХИИ (ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.Справочник_ХарактеристикиНоменклатуры))) | |ИНДЕКСИРОВАТЬ ПО | Идентификатор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Б24_Синхр_ИдентификаторыОбъектов.Идентификатор КАК Идентификатор, | Б24_Синхр_ИдентификаторыОбъектов.Объект КАК Объект |ПОМЕСТИТЬ ВремИдентификаторыЗначенийСвойств |ИЗ | РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов |ГДЕ | Б24_Синхр_ИдентификаторыОбъектов.ТипДанных = &ТипДанныхЗначенийСвойств | И Б24_Синхр_ИдентификаторыОбъектов.Портал = &Портал | |ИНДЕКСИРОВАТЬ ПО | Идентификатор"; Запрос.Выполнить(); ЗагруженныеОбъекты = Новый Массив; Для каждого ТекЭлемент Из мДанных Цикл ЭтоСвойствоХарактеристикиНоменклатуры = Ложь; ИдЭлемента = Формат(ТекЭлемент.Получить("ID"),"ЧГ=0"); Если ЗагруженныеОбъекты.Найти(ИдЭлемента) <> Неопределено Тогда Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Истина))); Продолжить; КонецЕсли; ЗагруженныеОбъекты.Добавить(ИдЭлемента); ОписаниеТипов = Неопределено; ТипСвойства = ТекЭлемент.Получить("PROPERTY_TYPE"); ПользовательскийТип = ТекЭлемент.Получить("USER_TYPE"); #Область РазборТипаСвойства МассивТипов = Новый Массив; Если ТипСвойства = "N" И ПользовательскийТип = "" Тогда КЧ = Новый КвалификаторыЧисла(12,2); МассивТипов.Добавить(Тип("Число")); ОписаниеТипов = Новый ОписаниеТипов(МассивТипов, , КЧ); ИначеЕсли ТипСвойства = "S" И ПользовательскийТип = "" Тогда КС = Новый КвалификаторыСтроки(100); МассивТипов.Добавить(Тип("Строка")); ОписаниеТипов = Новый ОписаниеТипов(МассивТипов, , КС); ИначеЕсли ТипСвойства = "S" И ПользовательскийТип = "HTML" Тогда КС = Новый КвалификаторыСтроки(0); МассивТипов.Добавить(Тип("Строка")); ОписаниеТипов = Новый ОписаниеТипов(МассивТипов, , КС); ИначеЕсли ТипСвойства = "S" И ПользовательскийТип = "DateTime" Тогда КД = Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя); МассивТипов.Добавить(Тип("Дата")); ОписаниеТипов = Новый ОписаниеТипов(МассивТипов, , КД); ИначеЕсли ТипСвойства = "S" И ПользовательскийТип = "Date" Тогда КД = Новый КвалификаторыДаты(ЧастиДаты.Дата); МассивТипов.Добавить(Тип("Дата")); ОписаниеТипов = Новый ОписаниеТипов(МассивТипов, , КД); ИначеЕсли ТипСвойства = "S" И ПользовательскийТип = "employee" Тогда КД = Новый КвалификаторыДаты(ЧастиДаты.Дата); МассивТипов.Добавить(Тип("СправочникСсылка.Пользователи")); ОписаниеТипов = Новый ОписаниеТипов(МассивТипов); ИначеЕсли ТипСвойства = "L" И ПользовательскийТип = "" Тогда КД = Новый КвалификаторыДаты(ЧастиДаты.Дата); МассивТипов.Добавить(Тип("СправочникСсылка.ЗначенияСвойствОбъектов")); ОписаниеТипов = Новый ОписаниеТипов(МассивТипов); КонецЕсли; #КонецОбласти Если ОписаниеТипов = Неопределено Тогда Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Истина))); Продолжить; КонецЕсли; ВнешнийКод = Строка(ТекЭлемент.Получить("XML_ID")); Если Лев(ВнешнийКод, 2) = "H_" Тогда ЭтоСвойствоХарактеристикиНоменклатуры = Истина; ВнешнийКод = Прав(ВнешнийКод, СтрДлина(ВнешнийКод)-2); ДлинаПрефикса = СтрДлина(Б24_Синхр_СинхронизацияСервер.ПолучитьПрефиксСвойстваХарактеристики()); НаименованиеСБитрикс24 = Строка(ТекЭлемент.Получить("NAME")); Наименование = Прав(НаименованиеСБитрикс24, СтрДлина(НаименованиеСБитрикс24) -ДлинаПрефикса); Иначе Наименование = Строка(ТекЭлемент.Получить("NAME")); КонецЕсли; Если ТекЭлемент.Получить("MULTIPLE") = "Y" Тогда Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Истина))); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Свойство: " + Наименование + " не будет добавлено/обновлено. т.к. является множественным"); Продолжить; КонецЕсли; #Область ПоискСозданиеСвойства Свойство = Неопределено; Свойство = ПолучитьОбъектПоИдентификаторуИзВременнойТаблицы(МенеджерВременныхТаблиц, "ВремИдентификаторы", ИдЭлемента); Если ЗначениеЗаполнено(ВнешнийКод)И НЕ ЗначениеЗаполнено(Свойство) Тогда Свойство = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения"), ВнешнийКод); КонецЕсли; Если НЕ ЗначениеЗаполнено(Свойство) Тогда Свойство = ПолучитьОбъектПоИдентификаторуИзВременнойТаблицы(МенеджерВременныхТаблиц, "ВремНаименованияСвойств", Наименование); КонецЕсли; ЭтоНовый = Истина; Если НЕ ЗначениеЗаполнено(Свойство)Тогда Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.СоздатьЭлемент(); Если НЕ ЭтоСвойствоХарактеристикиНоменклатуры Тогда Свойство.НаборСвойств = Справочники.НаборыДополнительныхРеквизитовИСведений.Справочник_Номенклатура_Общие; Иначе Свойство.НаборСвойств = Справочники.НаборыДополнительныхРеквизитовИСведений.Справочник_ХарактеристикиНоменклатуры; КонецЕсли; Иначе Если ОбщиеНастройки.НастройкиСинхронизацииТоваров.ОбновлятьТовары Тогда ЭтоНовый = Ложь; Свойство = Свойство.ПолучитьОбъект(); Иначе Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Истина))); Б24_Синхр_СинхронизацияВызовСервера.ЗаписатьИдБ24Объекта(ОбщиеНастройки, ОбщиеНастройки.ТипыОбъектовОбмена.СвойствоТовара, Свойство.Ссылка, ИдЭлемента); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "В настройках указано, что товары не обновляются. Свойство: " + Наименование + " не будет обновлено"); Продолжить; КонецЕсли; КонецЕсли; #КонецОбласти Свойство.ПометкаУдаления = НЕ ТекЭлемент.Получить("ACTIVE") = "Y"; Если ЭтоНовый Тогда Если НЕ ЭтоСвойствоХарактеристикиНоменклатуры Тогда Свойство.Наименование = Наименование + " (Справочник ""Номенклатура"" (Общие))"; Иначе Свойство.Наименование = Наименование + " (Справочник ""Характеристики номенклатуры"""; КонецЕсли; Свойство.Заголовок = Наименование; Иначе Если НЕ СтрНайти(Свойство.Заголовок, "Битрикс24") > 0 Тогда Свойство.Заголовок = Наименование; КонецЕсли; КонецЕсли; Свойство.ЗаполнятьОбязательно = ТекЭлемент.Получить("IS_REQUIRED") = "Y"; ТипСвойства = ТекЭлемент.Получить("PROPERTY_TYPE"); ПользовательскийТип = ТекЭлемент.Получить("USER_TYPE"); Если ТипСвойства = "L" И ПользовательскийТип = "" Тогда Свойство.ДополнительныеЗначенияИспользуются = Истина; КонецЕсли; Свойство.ТипЗначения = ОписаниеТипов; Попытка Свойство.ДополнительныеСвойства.Вставить("ЗагрузкаСБитрикс24", Истина); Свойство.Записать(); Б24_Синхр_СинхронизацияВызовСервера.ЗаписатьИдБ24Объекта(ОбщиеНастройки, ОбщиеНастройки.ТипыОбъектовОбмена.СвойствоТовара, Свойство.Ссылка, ИдЭлемента); Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Истина))); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Записано свойство номенклатуры: " + Наименование); Если ТипСвойства = "L" И ПользовательскийТип = "" Тогда #Область ЗаписьЗначенийСвойств ЗначенияСписка = ТекЭлемент.Получить("VALUES"); Если ЗначениеЗаполнено(ЗначенияСписка) Тогда Для Каждого ТекЗначениеСвойства Из ЗначенияСписка Цикл лВнешнийКодЗначенияСвойства = Строка(ТекЗначениеСвойства.Значение.Получить("XML_ID")); ИдЗначенияСвойства = Формат(ТекЗначениеСвойства.Значение.Получить("ID"),"ЧГ=0"); НаименованиеЗнСвойства = Строка(ТекЗначениеСвойства.Значение.Получить("VALUE")); ЗначениеСвойства = Неопределено; ЗначениеСвойства = ПолучитьОбъектПоИдентификаторуИзВременнойТаблицы(МенеджерВременныхТаблиц, "ВремИдентификаторыЗначенийСвойств", ИдЗначенияСвойства); Если ЗначениеЗаполнено(лВнешнийКодЗначенияСвойства) И НЕ ЗначениеЗаполнено(ЗначениеСвойства) Тогда ЗначениеСвойства = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("СправочникСсылка.ЗначенияСвойствОбъектов"), лВнешнийКодЗначенияСвойства); КонецЕсли; Если ЗначениеСвойства = Неопределено Тогда ЗначениеСвойства = Справочники.ЗначенияСвойствОбъектов.СоздатьЭлемент(); Иначе ЗначениеСвойства = ЗначениеСвойства.ПолучитьОбъект(); КонецЕсли; ЗначениеСвойства.Владелец = ?(Свойство.ВладелецДополнительныхЗначений.Пустая(), Свойство.Ссылка, Свойство.ВладелецДополнительныхЗначений); ЗначениеСвойства.Наименование = НаименованиеЗнСвойства; ЗначениеСвойства.ПолноеНаименование = НаименованиеЗнСвойства; ЗначениеСвойства.ДополнительныеСвойства.Вставить("ЗагрузкаСБитрикс24", Истина); ЗначениеСвойства.Записать(); Б24_Синхр_СинхронизацияВызовСервера.ЗаписатьИдБ24Объекта(ОбщиеНастройки, ОбщиеНастройки.ТипыОбъектовОбмена.ЗначениеСвойстваТовара, ЗначениеСвойства.Ссылка, ИдЗначенияСвойства); КонецЦикла; КонецЕсли; #КонецОбласти КонецЕсли; Если ЭтоНовый Тогда Если НЕ ЭтоСвойствоХарактеристикиНоменклатуры Тогда НаборСвойств = Справочники.НаборыДополнительныхРеквизитовИСведений.Справочник_Номенклатура_Общие; Иначе НаборСвойств = Справочники.НаборыДополнительныхРеквизитовИСведений.Справочник_ХарактеристикиНоменклатуры; КонецЕсли; ТекНаборСвойств = НаборСвойств.ПолучитьОбъект(); НовоеСвойствоНабора = ТекНаборСвойств.ДополнительныеРеквизиты.Добавить(); НовоеСвойствоНабора.Свойство = Свойство.Ссылка; ТекНаборСвойств.ДополнительныеСвойства.Вставить("ЗагрузкаСБитрикс24", Истина); ТекНаборСвойств.Записать(); КонецЕсли; Исключение Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, "Во время записи свойства товара: " + Наименование + " возникли ошибки."); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, ОписаниеОшибки()); Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Ложь))); ОбщиеНастройки.ВыполненоБезОшибок = Ложь; КонецПопытки; КонецЦикла; пОбщиеНастройки.НомерСообщения = ОбщиеНастройки.НомерСообщения; // чтобы лог не затерся. Возврат Результат; КонецФункции /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Функция ЗагрузитьОбновитьТовары(пОбщиеНастройки, мДанных) Экспорт Результат = Новый Массив; ОбщиеНастройки = Новый Структура; Для Каждого ЭлементСтруктуры Из пОбщиеНастройки Цикл ОбщиеНастройки.Вставить(ЭлементСтруктуры.Ключ, ЭлементСтруктуры.Значение); КонецЦикла; Б24_Синхр_СинхронизацияВызовСервера.ДобавитьСложныеНастройкиОбменаВСтруктуру(ОбщиеНастройки); #Область ИдентификаторыСлужебныхСвойств ИдСвойстваВидаНоменклатуры = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьИдОбъекта(ОбщиеНастройки.НастройкаСинхронизации,ОбщиеНастройки.ПредопределенноеСвойствоВидаНоменклатуры, ОбщиеНастройки.ТипыОбъектовОбмена.СвойствоТовара); ОбщиеНастройки.Вставить("ИдПредопределенногоСвойстваВидаНоменклатуры", ИдСвойстваВидаНоменклатуры); ИдСвойстваАртикулаНоменклатуры = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьИдОбъекта(ОбщиеНастройки.НастройкаСинхронизации,ОбщиеНастройки.ПредопределенноеСвойствоАртикулНоменклатуры, ОбщиеНастройки.ТипыОбъектовОбмена.СвойствоТовара); ОбщиеНастройки.Вставить("ИдПредопределенногоСвойстваАртикулаНоменклатуры", ИдСвойстваАртикулаНоменклатуры); #КонецОбласти ЕстьДеревоГрупп = Б24_Синхр_СинхронизацияПовтИсп.ЕстьПользовательскоеДеревоГрупп(ОбщиеНастройки.НастройкаСинхронизации); Если ЕстьДеревоГрупп Тогда тзнПользовательскогоДереваГрупп = ПолучитьТаблицуТоваровИДереваГрупп(ОбщиеНастройки); КонецЕсли; МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; #Область ФормированиеВременныхТаблицДанных Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("ТипДанныхТовара" , ОбщиеНастройки.ТипыОбъектовОбмена.Товар); Запрос.УстановитьПараметр("ТипДанныхЕдиницИзмерения", ОбщиеНастройки.ТипыОбъектовОбмена.ЕдиницаИзмерения); Запрос.УстановитьПараметр("ТипДанныхГрупп" , ОбщиеНастройки.ТипыОбъектовОбмена.ГруппаТовара); Запрос.УстановитьПараметр("ТипДанныхЗначенийСвойств", ОбщиеНастройки.ТипыОбъектовОбмена.ЗначениеСвойстваТовара); Запрос.УстановитьПараметр("Портал" , ОбщиеНастройки.Портал); Запрос.Текст = "ВЫБРАТЬ | Б24_Синхр_ИдентификаторыОбъектов.Объект КАК Объект, | Б24_Синхр_ИдентификаторыОбъектов.ПодчиненныйОбъект КАК ПодчиненныйОбъект, | Б24_Синхр_ИдентификаторыОбъектов.Идентификатор КАК Идентификатор |ПОМЕСТИТЬ ВремИдентификаторыТоваров |ИЗ | РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов |ГДЕ | Б24_Синхр_ИдентификаторыОбъектов.ТипДанных = &ТипДанныхТовара | И Б24_Синхр_ИдентификаторыОбъектов.Портал = &Портал | |ИНДЕКСИРОВАТЬ ПО | Идентификатор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Б24_Синхр_ИдентификаторыОбъектов.Объект КАК Объект, | Б24_Синхр_ИдентификаторыОбъектов.Идентификатор КАК Идентификатор |ПОМЕСТИТЬ ВремИдентификаторыЕдиницИзмерения |ИЗ | РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов |ГДЕ | Б24_Синхр_ИдентификаторыОбъектов.ТипДанных = &ТипДанныхЕдиницИзмерения | И Б24_Синхр_ИдентификаторыОбъектов.Портал = &Портал | |ИНДЕКСИРОВАТЬ ПО | Идентификатор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Б24_Синхр_ИдентификаторыОбъектов.Объект КАК Объект, | Б24_Синхр_ИдентификаторыОбъектов.Идентификатор КАК Идентификатор |ПОМЕСТИТЬ ВремИдентификаторыГрупп |ИЗ | РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов |ГДЕ | Б24_Синхр_ИдентификаторыОбъектов.ТипДанных = &ТипДанныхГрупп | И Б24_Синхр_ИдентификаторыОбъектов.Портал = &Портал | |ИНДЕКСИРОВАТЬ ПО | Идентификатор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Б24_Синхр_ИдентификаторыОбъектов.Объект КАК Объект, | Б24_Синхр_ИдентификаторыОбъектов.Идентификатор КАК Идентификатор |ПОМЕСТИТЬ ВремИдентификаторыЗначенийСвойств |ИЗ | РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов |ГДЕ | Б24_Синхр_ИдентификаторыОбъектов.ТипДанных = &ТипДанныхЗначенийСвойств | И Б24_Синхр_ИдентификаторыОбъектов.Портал = &Портал | |ИНДЕКСИРОВАТЬ ПО | Идентификатор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВремИдентификаторыЗначенийСвойств.Идентификатор КАК Идентификатор, | ВидыНоменклатуры.Ссылка КАК Объект |ПОМЕСТИТЬ ВремИдВидовНоменклатуры |ИЗ | Справочник.ВидыНоменклатуры КАК ВидыНоменклатуры | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВремИдентификаторыЗначенийСвойств КАК ВремИдентификаторыЗначенийСвойств | ПО ЗначенияСвойствОбъектов.Ссылка = ВремИдентификаторыЗначенийСвойств.Объект | ПО ВидыНоменклатуры.Наименование = ЗначенияСвойствОбъектов.Наименование | |ИНДЕКСИРОВАТЬ ПО | Идентификатор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Номенклатура.Ссылка КАК Объект, | Номенклатура.Наименование КАК Идентификатор |ПОМЕСТИТЬ ВремНаименованияТоваров |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | Номенклатура.ЭтоГруппа = ЛОЖЬ | |ИНДЕКСИРОВАТЬ ПО | Идентификатор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ХарактеристикиНоменклатуры.Ссылка КАК Объект, | ХарактеристикиНоменклатуры.Наименование КАК Идентификатор |ПОМЕСТИТЬ ВремНаименованияХарактеристикТоваров |ИЗ | Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры | |ИНДЕКСИРОВАТЬ ПО | Идентификатор"; Запрос.Выполнить(); #КонецОбласти ЗапросПоСвойствамТоваров = Новый Запрос; ЗапросПоСвойствамТоваров.УстановитьПараметр("ТипДанных" , ОбщиеНастройки.ТипыОбъектовОбмена.СвойствоТовара); ЗапросПоСвойствамТоваров.УстановитьПараметр("Портал" , ОбщиеНастройки.Портал); ЗапросПоСвойствамТоваров.УстановитьПараметр("СвойстваИсключения" , ОбщиеНастройки.НеЗагружаемыеЗначенияСвойств); ЗапросПоСвойствамТоваров.Текст = "ВЫБРАТЬ | ДополнительныеРеквизиты.Ссылка КАК Набор, | ДополнительныеРеквизиты.Свойство КАК Свойство, | ВЫБОР | КОГДА ДополнительныеРеквизиты.Ссылка В ИЕРАРХИИ (ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.Справочник_Номенклатура)) | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ КАК ЭтоСвойствоНоменклатуры |ПОМЕСТИТЬ ВремВсеНаборы |ИЗ | Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК ДополнительныеРеквизиты | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | ДополнительныеСведения.Ссылка, | ДополнительныеСведения.Свойство, | ВЫБОР | КОГДА ДополнительныеСведения.Ссылка В ИЕРАРХИИ (ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.Справочник_Номенклатура)) | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ |ИЗ | Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеСведения КАК ДополнительныеСведения |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВремВсеНаборы.Набор) КАК Набор, | ВремВсеНаборы.Свойство КАК Свойство, | ДополнительныеРеквизитыИСведения.ЭтоДополнительноеСведение КАК ЭтоДополнительноеСведение, | ВремВсеНаборы.ЭтоСвойствоНоменклатуры КАК ЭтоСвойствоНоменклатуры |ПОМЕСТИТЬ ВремСвойстваНаборы |ИЗ | ВремВсеНаборы КАК ВремВсеНаборы | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения | ПО ВремВсеНаборы.Свойство = ДополнительныеРеквизитыИСведения.Ссылка |ГДЕ | НЕ ДополнительныеРеквизитыИСведения.Ссылка В (&СвойстваИсключения) | |СГРУППИРОВАТЬ ПО | ВремВсеНаборы.Свойство, | ДополнительныеРеквизитыИСведения.ЭтоДополнительноеСведение, | ВремВсеНаборы.ЭтоСвойствоНоменклатуры |; | |//////////////////////////////////////////////////////////////////////////////// |УНИЧТОЖИТЬ ВремВсеНаборы |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВремСвойстваНаборы.Свойство КАК Объект, | Б24_Синхр_ИдентификаторыОбъектов.Идентификатор КАК Идентификатор, | ВремСвойстваНаборы.ЭтоДополнительноеСведение КАК ЭтоДополнительноеСведение, | ВремСвойстваНаборы.ЭтоСвойствоНоменклатуры КАК ЭтоСвойствоНоменклатуры |ИЗ | РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВремСвойстваНаборы КАК ВремСвойстваНаборы | ПО Б24_Синхр_ИдентификаторыОбъектов.Объект = ВремСвойстваНаборы.Свойство |ГДЕ | Б24_Синхр_ИдентификаторыОбъектов.ТипДанных = &ТипДанных | И Б24_Синхр_ИдентификаторыОбъектов.Портал = &Портал | И Б24_Синхр_ИдентификаторыОбъектов.Идентификатор <> """""; тзнСвойств = ЗапросПоСвойствамТоваров.Выполнить().Выгрузить(); ЗагруженныеОбъекты = Новый Массив; Для каждого ТекЭлемент Из мДанных Цикл ИдЭлемента = Формат(ТекЭлемент.Получить("ID"),"ЧГ=0"); Если ЗагруженныеОбъекты.Найти(ИдЭлемента) <> Неопределено Тогда Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Истина))); Продолжить; КонецЕсли; ЗагруженныеОбъекты.Добавить(ИдЭлемента); ИдВнешнийОбщий = Строка(ТекЭлемент.Получить("XML_ID")); ИдРодителя = Формат(ТекЭлемент.Получить("SECTION_ID"),"ЧГ=0"); Наименование = Строка(ТекЭлемент.Получить("NAME")); НаименованиеП = Строка(ТекЭлемент.Получить("DESCRIPTION")); ИдЕдИзм = Формат(ТекЭлемент.Получить("MEASURE"),"ЧГ=0"); Активность = ТекЭлемент.Получить("ACTIVE") = "Y"; СтавкаНДС = Строка(ТекЭлемент.Получить("VAT_ID")); //Цена = Строка(ТекЭлемент.Получить("PRICE")); //Валюта = Формат(ТекЭлемент.Получить("CURRENCY_ID"), "ЧГ=0"); ДетальнаяКартинка = ТекЭлемент.Получить("DETAIL_PICTURE"); ВидТовара = ТекЭлемент.Получить("PROPERTY_" + ОбщиеНастройки.ИдПредопределенногоСвойстваВидаНоменклатуры); ИдВидаТовара = ?(ВидТовара = Неопределено, Неопределено, ВидТовара.Получить("value")); АртикулДанные = ТекЭлемент.Получить("PROPERTY_" + ОбщиеНастройки.ИдПредопределенногоСвойстваАртикулаНоменклатуры); АртикулТовара = ?(АртикулДанные = Неопределено, Неопределено, АртикулДанные.Получить("value")); СтруктураИдентификаторовТовара = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьДвеСоставныеЧастиИзСтроки(ИдВнешнийОбщий, "#"); ИдВнешнийНоменклатуры = СтруктураИдентификаторовТовара.ПерваяЧасть; ИдВнешнийХарактеристики = СтруктураИдентификаторовТовара.ВтораяЧасть; Если ИдВнешнийХарактеристики = "" Тогда ЕстьХарактеристика = Ложь; Иначе ЕстьХарактеристика = Истина; КонецЕсли; Если ЕстьХарактеристика Тогда СтруктураИдентификаторовТовара = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьДвеСоставныеЧастиИзСтроки(Наименование, Б24_Синхр_СинхронизацияСервер.ПолучитьРазделительНаименованийНоменклатуры()); НаименованиеНоменклатуры = СтруктураИдентификаторовТовара.ПерваяЧасть; НаименованиеХарактеристики = СтруктураИдентификаторовТовара.ВтораяЧасть; СтруктураИдентификаторовТовара = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьДвеСоставныеЧастиИзСтроки(НаименованиеП, Б24_Синхр_СинхронизацияСервер.ПолучитьРазделительНаименованийНоменклатуры()); ПолноеНаименованиеНоменклатуры = СтруктураИдентификаторовТовара.ПерваяЧасть; ПолноеНаименованиеХарактеристики= СтруктураИдентификаторовТовара.ВтораяЧасть; Иначе НаименованиеНоменклатуры = Наименование; ПолноеНаименованиеНоменклатуры = НаименованиеП; НаименованиеХарактеристики = ""; ПолноеНаименованиеХарактеристики= ""; КонецЕсли; ТаблицаСвойствТовара = РазобратьСвойстваТовараВТаблицу(ОбщиеНастройки, МенеджерВременныхТаблиц, ТекЭлемент, тзнСвойств); #Область ПоискТовара ИнформацияОНоменклатуре = Неопределено; Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("Идентификатор" , ИдЭлемента); Запрос.УстановитьПараметр("Портал" , ОбщиеНастройки.Портал); Запрос.Текст = "ВЫБРАТЬ | ВремИдентификаторы.Объект КАК Объект, | ВремИдентификаторы.ПодчиненныйОбъект КАК ПодчиненныйОбъект |ИЗ | ВремИдентификаторыТоваров КАК ВремИдентификаторы |ГДЕ | ВремИдентификаторы.Идентификатор = &Идентификатор"; ВыполненныйЗапрос = Запрос.Выполнить(); Если НЕ ВыполненныйЗапрос.Пустой() Тогда Выборка = ВыполненныйЗапрос.Выбрать(); Пока Выборка.Следующий() Цикл ИнформацияОНоменклатуре = Выборка; Прервать; КонецЦикла; КонецЕсли; Номенклатура = ?(ИнформацияОНоменклатуре = Неопределено, Неопределено, ИнформацияОНоменклатуре.Объект); Характеристика = ?(ИнформацияОНоменклатуре = Неопределено, Неопределено, ИнформацияОНоменклатуре.ПодчиненныйОбъект); Если ЗначениеЗаполнено(ИдВнешнийНоменклатуры) И НЕ ЗначениеЗаполнено(Номенклатура) Тогда Номенклатура = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("СправочникСсылка.Номенклатура"), ИдВнешнийНоменклатуры); КонецЕсли; Если ЗначениеЗаполнено(ИдВнешнийХарактеристики) И НЕ ЗначениеЗаполнено(Характеристика) Тогда Характеристика = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("СправочникСсылка.ХарактеристикиНоменклатуры"), ИдВнешнийХарактеристики); КонецЕсли; Если НЕ ЗначениеЗаполнено(Номенклатура) Тогда Номенклатура = ПолучитьОбъектПоИдентификаторуИзВременнойТаблицы(МенеджерВременныхТаблиц, "ВремНаименованияТоваров", Лев(НаименованиеНоменклатуры, 100)); КонецЕсли; Если ЕстьХарактеристика И НЕ ЗначениеЗаполнено(Характеристика) Тогда Характеристика = ПолучитьОбъектПоИдентификаторуИзВременнойТаблицы(МенеджерВременныхТаблиц, "ВремНаименованияХарактеристикТоваров", Лев(НаименованиеХарактеристики, 150)); КонецЕсли; ЭтоНоваяНоменклатура = ?(ЗначениеЗаполнено(Номенклатура), Ложь,Истина); ЭтоНоваяХарактеристика = ?(ЕстьХарактеристика И НЕ ЗначениеЗаполнено(Характеристика), Истина, Ложь); #КонецОбласти #Область ФильтрПоОбновляемымТоварам Если НЕ ЭтоНоваяНоменклатура Тогда ИспользованиеХарактеристик = Номенклатура.ИспользованиеХарактеристик; Если ИспользованиеХарактеристик <> Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать Тогда Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Истина))); ДанныеДляИД = Новый Структура; ДанныеДляИД.Вставить("Объект" , Номенклатура); ДанныеДляИД.Вставить("ПодчиненныйОбъект" , ?(Характеристика = Неопределено, Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка(), Характеристика)); Б24_Синхр_СинхронизацияВызовСервера.ЗаписатьИдБ24Объекта(ОбщиеНастройки, ОбщиеНастройки.ТипыОбъектовОбмена.Товар, ДанныеДляИД, ИдЭлемента); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Товары, использующие характеристики, не обновляются Из Битрикс24. Номенклатура: " + Наименование + " будет пропущена."); Продолжить; КонецЕсли; КонецЕсли; Если НЕ (ЭтоНоваяНоменклатура ИЛИ ЭтоНоваяХарактеристика) И НЕ ОбщиеНастройки.НастройкиСинхронизацииТоваров.ОбновлятьТовары Тогда Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Истина))); ДанныеДляИД = Новый Структура; ДанныеДляИД.Вставить("Объект" , Номенклатура); ДанныеДляИД.Вставить("ПодчиненныйОбъект" , ?(Характеристика = Неопределено, Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка(), Характеристика)); Б24_Синхр_СинхронизацияВызовСервера.ЗаписатьИдБ24Объекта(ОбщиеНастройки, ОбщиеНастройки.ТипыОбъектовОбмена.Товар, ДанныеДляИД, ИдЭлемента); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "В настройках указано, что товары не обновляются. Номенклатура: " + Наименование + " не будет обновлена."); Продолжить; КонецЕсли; #КонецОбласти #Область СозданиеОбновлениеНоменклатуры Если ЭтоНоваяНоменклатура Тогда Номенклатура = Справочники.Номенклатура.СоздатьЭлемент(); Иначе Номенклатура = Номенклатура.ПолучитьОбъект(); КонецЕсли; Номенклатура.ПометкаУдаления = НЕ ЕстьХарактеристика И НЕ Активность; Номенклатура.Наименование = НаименованиеНоменклатуры; Номенклатура.НаименованиеПолное = ?(ЗначениеЗаполнено(Номенклатура.НаименованиеПолное), Номенклатура.НаименованиеПолное, НаименованиеНоменклатуры); Номенклатура.Описание = ПолноеНаименованиеНоменклатуры; Если ЗначениеЗаполнено(АртикулТовара) Тогда Номенклатура.Артикул = АртикулТовара; КонецЕсли; Родитель = ПолучитьОбъектПоИдентификаторуИзВременнойТаблицы(МенеджерВременныхТаблиц, "ВремИдентификаторыГрупп", ИдРодителя); Если НЕ ЕстьДеревоГрупп Тогда Номенклатура.Родитель = Родитель; КонецЕсли; ВидНоменклатуры = ПолучитьОбъектПоИдентификаторуИзВременнойТаблицы(МенеджерВременныхТаблиц, "ВремИдВидовНоменклатуры", ИдВидаТовара); ВидНоменклатуры = ?(ЗначениеЗаполнено(ВидНоменклатуры), ВидНоменклатуры, Номенклатура.ВидНоменклатуры); Если НЕ ЗначениеЗаполнено(ВидНоменклатуры) Тогда ВидНоменклатурыВрем = Справочники.ВидыНоменклатуры.ВидНоменклатурыПоУмолчанию(); Если ЗначениеЗаполнено(ВидНоменклатурыВрем) Тогда ВидНоменклатуры = ВидНоменклатурыВрем; КонецЕсли; КонецЕсли; Номенклатура.ВидНоменклатуры = ВидНоменклатуры; Номенклатура.ТипНоменклатуры = ВидНоменклатуры.ТипНоменклатуры; Номенклатура.ИспользованиеХарактеристик = ВидНоменклатуры.ИспользованиеХарактеристик; Номенклатура.ИспользоватьУпаковки = ВидНоменклатуры.ИспользоватьУпаковки; Номенклатура.НаборУпаковок = ВидНоменклатуры.НаборУпаковок; Номенклатура.ВариантОформленияПродажи = ВидНоменклатуры.ВариантОформленияПродажи; Номенклатура.ГруппаДоступа = ?(ЗначениеЗаполнено(Номенклатура.ГруппаДоступа), Номенклатура.ГруппаДоступа, ВидНоменклатуры.ГруппаДоступа); Если Номенклатура.НаборУпаковок.Пустая() И ВидНоменклатуры.ТипНоменклатуры <> Перечисления.ТипыНоменклатуры.Услуга Тогда Номенклатура.НаборУпаковок = Справочники.НаборыУпаковок.ИндивидуальныйДляНоменклатуры; КонецЕсли; ЕдиницаИзмерения = ПолучитьОбъектПоИдентификаторуИзВременнойТаблицы(МенеджерВременныхТаблиц, "ВремИдентификаторыЕдиницИзмерения", ИдЕдИзм); Если ЗначениеЗаполнено(ЕдиницаИзмерения) Тогда Номенклатура.ЕдиницаИзмерения = ЕдиницаИзмерения; Номенклатура.ЕдиницаДляОтчетов = ЕдиницаИзмерения; Иначе Номенклатура.ЕдиницаИзмерения = ВидНоменклатуры.ЕдиницаИзмерения; Номенклатура.ЕдиницаДляОтчетов = Номенклатура.ЕдиницаИзмерения; КонецЕсли; НайденнаяСтавкаНДС = ОбщиеНастройки.НастройкиСинхронизацииТоваров.СтавкиНДС.Найти(СтавкаНДС); Если НайденнаяСтавкаНДС <> Неопределено Тогда Номенклатура.СтавкаНДС = НайденнаяСтавкаНДС.СтавкаНДС; Иначе Номенклатура.СтавкаНДС = Перечисления.СтавкиНДС.НДС20; КонецЕсли; #Область ЗаполнениеПредопределеннымиЗначениямиПриСоздании Если ЭтоНоваяНоменклатура Тогда КонецЕсли; #КонецОбласти #Область ЗаполнениеДополнительныхРеквизитовНоменклатуры Для Каждого ТекСвойствоТовара Из ТаблицаСвойствТовара Цикл Если НЕ ТекСвойствоТовара.ЭтоСвойствоНоменклатуры Тогда Продолжить; КонецЕсли; Если НЕ ТекСвойствоТовара.ЭтоДополнительноеСведение И ТекСвойствоТовара.ПоддерживаетсяСвойство Тогда Если ТекСвойствоТовара.ЗначениеОчищено Тогда Если ЭтоНоваяНоменклатура Тогда Продолжить; КонецЕсли; Для Каждого ЗаполнениеСвойствоТовара Из Номенклатура.ДополнительныеРеквизиты Цикл Если ЗаполнениеСвойствоТовара.Свойство = ТекСвойствоТовара.Свойство Тогда ЗаполнениеСвойствоТовара.Значение = Неопределено; КонецЕсли; КонецЦикла; Иначе ЕстьРеквизит = Ложь; Для Каждого ЗаполнениеСвойствоТовара Из Номенклатура.ДополнительныеРеквизиты Цикл Если ЗаполнениеСвойствоТовара.Свойство = ТекСвойствоТовара.Свойство Тогда ЗаполнениеСвойствоТовара.Значение = ТекСвойствоТовара.ЗначениеСвойства; Если ТипЗнч(ТекСвойствоТовара.ЗначениеСвойства) = Тип("Строка") Тогда ЗаполнениеСвойствоТовара.ТекстоваяСтрока = ТекСвойствоТовара.ЗначениеСвойства; КонецЕсли; ЕстьРеквизит = Истина КонецЕсли; КонецЦикла; Если НЕ ЕстьРеквизит Тогда НовыйРеквизит = Номенклатура.ДополнительныеРеквизиты.Добавить(); НовыйРеквизит.Свойство = ТекСвойствоТовара.Свойство; НовыйРеквизит.Значение = ТекСвойствоТовара.ЗначениеСвойства; Если ТипЗнч(ТекСвойствоТовара.ЗначениеСвойства) = Тип("Строка") Тогда НовыйРеквизит.ТекстоваяСтрока = ТекСвойствоТовара.ЗначениеСвойства; КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; #КонецОбласти #КонецОбласти #Область СозданиеОбновлениеХарактеристикиНоменклатуры Если ЕстьХарактеристика Тогда Если ЭтоНоваяХарактеристика Тогда Характеристика = Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент(); Иначе Характеристика = Характеристика.ПолучитьОбъект(); КонецЕсли; Характеристика.ПометкаУдаления = НЕ Активность; Характеристика.Наименование = НаименованиеХарактеристики; Характеристика.НаименованиеПолное = ПолноеНаименованиеХарактеристики; #Область ЗаполнениеДополнительныхРеквизитовХарактеристикНоменклатуры Для Каждого ТекСвойствоТовара Из ТаблицаСвойствТовара Цикл Если ТекСвойствоТовара.ЭтоСвойствоНоменклатуры Тогда Продолжить; КонецЕсли; Если НЕ ТекСвойствоТовара.ЭтоДополнительноеСведение И ТекСвойствоТовара.ПоддерживаетсяСвойство Тогда Если ТекСвойствоТовара.ЗначениеОчищено Тогда Если ЭтоНоваяХарактеристика Тогда Продолжить; КонецЕсли; Для Каждого ЗаполнениеСвойствоТовара Из Характеристика.ДополнительныеРеквизиты Цикл Если ЗаполнениеСвойствоТовара.Свойство = ТекСвойствоТовара.Свойство Тогда ЗаполнениеСвойствоТовара.Значение = Неопределено; КонецЕсли; КонецЦикла; Иначе ЕстьРеквизит = Ложь; Для Каждого ЗаполнениеСвойствоТовара Из Характеристика.ДополнительныеРеквизиты Цикл Если ЗаполнениеСвойствоТовара.Свойство = ТекСвойствоТовара.Свойство Тогда ЗаполнениеСвойствоТовара.Значение = ТекСвойствоТовара.ЗначениеСвойства; ЕстьРеквизит = Истина КонецЕсли; КонецЦикла; Если НЕ ЕстьРеквизит Тогда НовыйРеквизит = Характеристика.ДополнительныеРеквизиты.Добавить(); НовыйРеквизит.Свойство = ТекСвойствоТовара.Свойство; НовыйРеквизит.Значение = ТекСвойствоТовара.ЗначениеСвойства; КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; #КонецОбласти КонецЕсли; #КонецОбласти Попытка Номенклатура.ДополнительныеСвойства.Вставить("ЗагрузкаСБитрикс24", Истина); Номенклатура.Записать(); Если ЕстьХарактеристика Тогда Если Номенклатура.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.ИндивидуальныеДляНоменклатуры Тогда Характеристика.Владелец = Номенклатура.Ссылка; ИначеЕсли Номенклатура.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеДляВидаНоменклатуры Тогда Характеристика.Владелец = Номенклатура.ВидНоменклатуры; ИначеЕсли Номенклатура.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеСДругимВидомНоменклатуры Тогда Характеристика.Владелец = Номенклатура.ВидНоменклатуры.ВладелецХарактеристик; КонецЕсли; Характеристика.ДополнительныеСвойства.Вставить("ЗагрузкаСБитрикс24", Истина); Характеристика.Записать(); КонецЕсли; ДанныеДляИД = Новый Структура; ДанныеДляИД.Вставить("Объект", Номенклатура.Ссылка); ДанныеДляИД.Вставить("ПодчиненныйОбъект", ?(ЕстьХарактеристика, Характеристика.Ссылка, Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка())); Б24_Синхр_СинхронизацияВызовСервера.ЗаписатьИдБ24Объекта(ОбщиеНастройки, ОбщиеНастройки.ТипыОбъектовОбмена.Товар, ДанныеДляИД, ИдЭлемента); Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Истина))); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Записана номенклатуры: " + Наименование); #Область ЗаполнениеПользовательскогоДереваДляТовара Если ЕстьДеревоГрупп Тогда Родитель = ?(ЗначениеЗаполнено(Родитель), Родитель, ОбщиеНастройки.ДеревоГрупп); Если НЕ ЭтоНоваяНоменклатура Тогда НайденныеРазделыСТоваром = тзнПользовательскогоДереваГрупп.НайтиСтроки(Новый Структура("Номенклатура", Номенклатура.Ссылка)); Для Каждого НайденныйРаздел Из НайденныеРазделыСТоваром Цикл РазделОбъект = НайденныйРаздел.Раздел.ПолучитьОбъект(); тзнВремТоваровРаздела = РазделОбъект.Товары.Выгрузить(); РазделОбъект.Товары.Очистить(); Для каждого ТоварРаздела Из тзнВремТоваровРаздела Цикл Если ТоварРаздела.Номенклатура <> Номенклатура.Ссылка Тогда НоваяСтрока = РазделОбъект.Товары.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, ТоварРаздела); КонецЕсли; КонецЦикла; РазделОбъект.ДополнительныеСвойства.Вставить("ЗагрузкаСБитрикс24", Истина); РазделОбъект.Записать(); КонецЦикла; РазделОбъект = Справочники.Б24_Синхр_ПользовательскиеГруппыТоваров.СоздатьЭлемент(); РазделОбъект.товары.Выгрузить() КонецЕсли; РодительОбъект = Родитель.ПолучитьОбъект(); НовыйТоварРаздела= РодительОбъект.Товары.Добавить(); НовыйТоварРаздела.Номенклатура = Номенклатура.Ссылка; РодительОбъект.ДополнительныеСвойства.Вставить("ЗагрузкаСБитрикс24", Истина); РодительОбъект.Записать(); КонецЕсли; #КонецОбласти #Область ЗаполнениеДополнительногоСведенияНоменклатуры НаборЗаписей = РегистрыСведений.ДополнительныеСведения.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Объект.Установить(Номенклатура.Ссылка); НаборЗаписей.Прочитать(); Для Каждого ТекСвойствоТовара Из ТаблицаСвойствТовара Цикл Если НЕ ТекСвойствоТовара.ЭтоСвойствоНоменклатуры Тогда Продолжить; КонецЕсли; Если ТекСвойствоТовара.ЭтоДополнительноеСведение И ТекСвойствоТовара.ПоддерживаетсяСвойство Тогда Если НЕ ТекСвойствоТовара.ЗначениеОчищено Тогда ЕстьСвойство = Ложь; Для Каждого ТекСтрока Из НаборЗаписей Цикл Если ТекСтрока.Свойство = ТекСвойствоТовара.Свойство Тогда ЕстьСвойство = Истина; ТекСтрока.Значение = ТекСвойствоТовара.ЗначениеСвойства; КонецЕсли; КонецЦикла; Если ЕстьСвойство = Ложь Тогда НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Объект = Номенклатура.Ссылка; НоваяЗапись.Свойство = ТекСвойствоТовара.Свойство; НоваяЗапись.Значение = ТекСвойствоТовара.ЗначениеСвойства; КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; НаборЗаписей.ДополнительныеСвойства.Вставить("ЗагрузкаСБитрикс24", Истина); НаборЗаписей.Записать(); #КонецОбласти #Область ЗаполнениеДополнительногоСведенияХарактеристикиНоменклатуры Если ЕстьХарактеристика Тогда Для Каждого ТекСвойствоТовара Из ТаблицаСвойствТовара Цикл Если ТекСвойствоТовара.ЭтоСвойствоНоменклатуры Тогда Продолжить; КонецЕсли; Если ТекСвойствоТовара.ЭтоДополнительноеСведение И ТекСвойствоТовара.ПоддерживаетсяСвойство Тогда Если ТекСвойствоТовара.ЗначениеОчищено Тогда Если ЭтоНоваяХарактеристика Тогда Продолжить; КонецЕсли; Выборка = РегистрыСведений.ДополнительныеСведения.Выбрать(Новый Структура("Объект", Характеристика.Ссылка)); Пока Выборка.Следующий() Цикл Если Выборка.Свойство = ТекСвойствоТовара.Свойство Тогда Выборка.ПолучитьМенеджерЗаписи().Удалить(); Прервать; КонецЕсли; КонецЦикла; Иначе НовоеСведение = РегистрыСведений.ДополнительныеСведения.СоздатьМенеджерЗаписи(); НовоеСведение.Объект = Характеристика.Ссылка; НовоеСведение.Свойство = ТекСвойствоТовара.Свойство; НовоеСведение.Значение = ТекСвойствоТовара.ЗначениеСвойства; НовоеСведение.Записать(); КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; #КонецОбласти #Область СохранениеАдресаКартинки Если ОбщиеНастройки.НастройкиСинхронизацииТоваров.ЗагружатьКартинкиИФайлы Тогда Если ЗначениеЗаполнено(ДетальнаяКартинка) Тогда АдресКартинки = ДетальнаяКартинка.Получить("downloadUrl"); Если ЗначениеЗаполнено(АдресКартинки) Тогда КонецЕсли; КонецЕсли; КонецЕсли; #КонецОбласти Исключение Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, "Во время записи товара: " + Наименование + " возникли ошибки."); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, ОписаниеОшибки()); Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдЭлемента, Ложь))); ОбщиеНастройки.ВыполненоБезОшибок = Ложь; КонецПопытки; КонецЦикла; пОбщиеНастройки.КартинкиИФайлыНоменклатуры = ОбщиеНастройки.КартинкиИФайлыНоменклатуры; пОбщиеНастройки.НомерСообщения = ОбщиеНастройки.НомерСообщения; // чтобы лог не затерся. Возврат Результат; КонецФункции Функция ПолучитьТаблицуТоваровИДереваГрупп(ОбщиеНастройки) Запрос = Новый Запрос; Запрос.УстановитьПараметр("Инфоблок", ОбщиеНастройки.ДеревоГрупп); Запрос.Текст = "ВЫБРАТЬ | Б24_Синхр_ПользовательскиеГруппыТоваровТовары.Ссылка КАК Раздел, | Номенклатура1.Ссылка КАК Номенклатура, | Номенклатура1.ЭтоГруппа КАК ЭтоГруппа |ПОМЕСТИТЬ ВремПользовательскиеГруппы |ИЗ | Справочник.Б24_Синхр_ПользовательскиеГруппыТоваров.Товары КАК Б24_Синхр_ПользовательскиеГруппыТоваровТовары | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура1 | ПО Б24_Синхр_ПользовательскиеГруппыТоваровТовары.Номенклатура = Номенклатура1.Ссылка |ГДЕ | Б24_Синхр_ПользовательскиеГруппыТоваровТовары.Ссылка В ИЕРАРХИИ(&Инфоблок) |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВремПользовательскиеГруппы.Раздел КАК Раздел, | Номенклатура1.Ссылка КАК Номенклатура, | Номенклатура1.ЭтоГруппа КАК ЭтоГруппа |ПОМЕСТИТЬ ВремГруппы1 |ИЗ | ВремПользовательскиеГруппы КАК ВремПользовательскиеГруппы | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура1 | ПО ВремПользовательскиеГруппы.Номенклатура = Номенклатура1.Родитель | |ИНДЕКСИРОВАТЬ ПО | Номенклатура |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВремГруппы1.Раздел КАК Раздел, | Номенклатура1.Ссылка КАК Номенклатура, | Номенклатура1.ЭтоГруппа КАК ЭтоГруппа |ПОМЕСТИТЬ ВремГруппы2 |ИЗ | ВремГруппы1 КАК ВремГруппы1 | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура1 | ПО ВремГруппы1.Номенклатура = Номенклатура1.Родитель | |ИНДЕКСИРОВАТЬ ПО | Номенклатура |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВремГруппы2.Раздел КАК Раздел, | Номенклатура1.Ссылка КАК Номенклатура, | Номенклатура1.ЭтоГруппа КАК ЭтоГруппа |ПОМЕСТИТЬ ВремГруппы3 |ИЗ | ВремГруппы2 КАК ВремГруппы2 | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура1 | ПО ВремГруппы2.Номенклатура = Номенклатура1.Родитель | |ИНДЕКСИРОВАТЬ ПО | Номенклатура |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВремПользовательскиеГруппы.Раздел КАК Раздел, | ВремПользовательскиеГруппы.Номенклатура КАК Номенклатура, | ВремПользовательскиеГруппы.ЭтоГруппа КАК ЭтоГруппа |ПОМЕСТИТЬ ВремТоварыДерева |ИЗ | ВремПользовательскиеГруппы КАК ВремПользовательскиеГруппы | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | ВремГруппы3.Раздел, | NULL, | ВремГруппы3.ЭтоГруппа |ИЗ | ВремГруппы3 КАК ВремГруппы3 | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | ВремГруппы2.Раздел, | ВремГруппы2.Номенклатура, | ВремГруппы2.ЭтоГруппа |ИЗ | ВремГруппы2 КАК ВремГруппы2 | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | ВремГруппы1.Раздел, | ВремГруппы1.Номенклатура, | ВремГруппы1.ЭтоГруппа |ИЗ | ВремГруппы1 КАК ВремГруппы1 | |ИНДЕКСИРОВАТЬ ПО | Номенклатура |; | |//////////////////////////////////////////////////////////////////////////////// |УНИЧТОЖИТЬ ВремПользовательскиеГруппы |; | |//////////////////////////////////////////////////////////////////////////////// |УНИЧТОЖИТЬ ВремГруппы1 |; | |//////////////////////////////////////////////////////////////////////////////// |УНИЧТОЖИТЬ ВремГруппы2 |; | |//////////////////////////////////////////////////////////////////////////////// |УНИЧТОЖИТЬ ВремГруппы3 |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗЛИЧНЫЕ | ВремТоварыДерева.Номенклатура КАК Номенклатура, | ВремТоварыДерева.Раздел КАК Раздел |ИЗ | ВремТоварыДерева КАК ВремТоварыДерева |ГДЕ | ВремТоварыДерева.ЭтоГруппа = ЛОЖЬ"; Результат = Запрос.Выполнить().Выгрузить(); Возврат Результат; КонецФункции Функция РазобратьСвойстваТовараВТаблицу(ОбщиеНастройки, МенеджерВременныхТаблиц, ИнформацияОТоваре, ТаблицаСвойств) тзнЗначенийСвойствТовара = Новый ТаблицаЗначений; тзнЗначенийСвойствТовара.Колонки.Добавить("Свойство"); тзнЗначенийСвойствТовара.Колонки.Добавить("ЗначениеСвойства"); тзнЗначенийСвойствТовара.Колонки.Добавить("ПоддерживаетсяСвойство"); тзнЗначенийСвойствТовара.Колонки.Добавить("ЗначениеОчищено"); тзнЗначенийСвойствТовара.Колонки.Добавить("ЭтоДополнительноеСведение"); тзнЗначенийСвойствТовара.Колонки.Добавить("ЭтоСвойствоНоменклатуры"); Для Каждого ТекСвойство Из ТаблицаСвойств Цикл Свойство = ТекСвойство.Объект; НовоеЗначениеСвойстваТовара = тзнЗначенийСвойствТовара.Добавить(); НовоеЗначениеСвойстваТовара.Свойство = Свойство; НовоеЗначениеСвойстваТовара.ЭтоСвойствоНоменклатуры = ТекСвойство.ЭтоСвойствоНоменклатуры; НовоеЗначениеСвойстваТовара.ПоддерживаетсяСвойство = Истина; НовоеЗначениеСвойстваТовара.ЗначениеОчищено = Ложь; НовоеЗначениеСвойстваТовара.ЭтоДополнительноеСведение = Свойство.ЭтоДополнительноеСведение; ЗначениеСвойстваСПортала = ИнформацияОТоваре.Получить("PROPERTY_" + ТекСвойство.Идентификатор); Если ЗначениеСвойстваСПортала <> Неопределено Тогда ТипЗначенияСвойства = Свойство.ТипЗначения; Попытка Если ТипЗначенияСвойства.СодержитТип(Тип("Строка")) Тогда ЗначениеСвойства = ЗначениеСвойстваСПортала.Получить("value"); Если ТипЗнч(ЗначениеСвойства) = Тип("Соответствие") Тогда НовоеЗначениеСвойстваТовара.ЗначениеСвойства = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), ЗначениеСвойства.Получить("TEXT")); Иначе НовоеЗначениеСвойстваТовара.ЗначениеСвойства = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), ЗначениеСвойства); КонецЕсли; ИначеЕсли ТипЗначенияСвойства.СодержитТип(Тип("Число")) Тогда НовоеЗначениеСвойстваТовара.ЗначениеСвойства = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Число"), ЗначениеСвойстваСПортала.Получить("value")); ИначеЕсли ТипЗначенияСвойства.СодержитТип(Тип("Дата")) Тогда НовоеЗначениеСвойстваТовара.ЗначениеСвойства = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Дата"), ЗначениеСвойстваСПортала.Получить("value")); ИначеЕсли ТипЗначенияСвойства.СодержитТип(Тип("СправочникСсылка.Пользователи")) Тогда НайденнаяСтрока = ОбщиеНастройки.ТаблицаСопоставленияПользователей.Найти(ЗначениеСвойстваСПортала.Получить("value"), "ИдПользователя"); Если НайденнаяСтрока <> Неопределено Тогда НовоеЗначениеСвойстваТовара.ЗначениеСвойства = НайденнаяСтрока.Пользователь1С; КонецЕсли; ИначеЕсли ТипЗначенияСвойства.СодержитТип(Тип("СправочникСсылка.ЗначенияСвойствОбъектов")) Тогда НовоеЗначениеСвойстваТовара.ЗначениеСвойства = ПолучитьОбъектПоИдентификаторуИзВременнойТаблицы(МенеджерВременныхТаблиц, "ВремИдентификаторыЗначенийСвойств", ЗначениеСвойстваСПортала.Получить("value")); Иначе НовоеЗначениеСвойстваТовара.ПоддерживаетсяСвойство = Ложь; КонецЕсли; Исключение НовоеЗначениеСвойстваТовара.ПоддерживаетсяСвойство = Ложь; Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Не удалось обработать значение свойства: " + Строка(ЗначениеСвойстваСПортала) + " свойства: " + Строка(Свойство)); КонецПопытки; Иначе НовоеЗначениеСвойстваТовара.ЗначениеОчищено = Истина; КонецЕсли; КонецЦикла; Возврат тзнЗначенийСвойствТовара; КонецФункции /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Функция ЗагрузитьОбновитьСчета(пОбщиеНастройки, мДанных) Экспорт КонецФункции /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Функция ЗагрузитьОбновитьСделки(пОбщиеНастройки, мДанных) Экспорт Результат = Новый Массив; ОбщиеНастройки = Новый Структура; Для Каждого ЭлементСтруктуры Из пОбщиеНастройки Цикл ОбщиеНастройки.Вставить(ЭлементСтруктуры.Ключ, ЭлементСтруктуры.Значение); КонецЦикла; Б24_Синхр_СинхронизацияВызовСервера.ДобавитьСложныеНастройкиОбменаВСтруктуру(ОбщиеНастройки); #Область ИдентификаторыСлужебныхСвойств ДопИдСвойстваОрганизации = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьДопИдОбъекта(ОбщиеНастройки.НастройкаСинхронизации,ОбщиеНастройки.ПредопределенноеСвойствоОрганизацияСделки, ОбщиеНастройки.ТипыОбъектовОбмена.СвойствоСделки); ОбщиеНастройки.Вставить("ДопИдПредопределенногоСвойстваОрганизацииСделки", ДопИдСвойстваОрганизации); Если пОбщиеНастройки.ОбрабатыватьУдалениеОбъектовВ1С Тогда ДопИдСвойстваПометкиУдаления = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьДопИдОбъекта(ОбщиеНастройки.НастройкаСинхронизации,ОбщиеНастройки.ПредопределенноеСвойствоПометкаУдаленияСделок, ОбщиеНастройки.ТипыОбъектовОбмена.СвойствоСделки); ОбщиеНастройки.Вставить("ДопИдПредопределенногоСвойстваПометкиУдаленияСделки", ДопИдСвойстваПометкиУдаления); КонецЕсли; #КонецОбласти ПрефиксВнешнихКодовБитрикс24 = Б24_Синхр_СинхронизацияСервер.ПолучитьПрефиксВнешнихКодовБитрикс24(); МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; #Область ФормированиеВременныхТаблицДанных Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("ТипДанныхСчет" , ОбщиеНастройки.ТипыОбъектовОбмена.Сделка); Запрос.УстановитьПараметр("ТипДанныхКомпания" , ОбщиеНастройки.ТипыОбъектовОбмена.Компания); Запрос.УстановитьПараметр("ТипДанныхКонтакт" , ОбщиеНастройки.ТипыОбъектовОбмена.Контакт); Запрос.УстановитьПараметр("ТипДанныхТовар" , ОбщиеНастройки.ТипыОбъектовОбмена.Товар); Запрос.УстановитьПараметр("ТипДанныхРеквизит" , ОбщиеНастройки.ТипыОбъектовОбмена.Реквизит); Запрос.УстановитьПараметр("ТипДанныхБанкСчет" , ОбщиеНастройки.ТипыОбъектовОбмена.БанковскийСчетРеквизита); Запрос.УстановитьПараметр("ТипДанныхСвойств" , ОбщиеНастройки.ТипыОбъектовОбмена.СвойствоСделки); Запрос.УстановитьПараметр("ТипДанныхЗначенийСвойств", ОбщиеНастройки.ТипыОбъектовОбмена.ЗначениеСвойстваСделки); Запрос.УстановитьПараметр("Портал" , ОбщиеНастройки.Портал); Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | Б24_Синхр_ИдентификаторыОбъектов.Объект КАК Объект, | Б24_Синхр_ИдентификаторыОбъектов.Идентификатор КАК Идентификатор |ПОМЕСТИТЬ ВремИдентификаторыСделок |ИЗ | РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов |ГДЕ | Б24_Синхр_ИдентификаторыОбъектов.ТипДанных = &ТипДанныхСчет | И Б24_Синхр_ИдентификаторыОбъектов.Портал = &Портал | |ИНДЕКСИРОВАТЬ ПО | Идентификатор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Б24_Синхр_ИдентификаторыОбъектов.Объект КАК Объект, | Б24_Синхр_ИдентификаторыОбъектов.Идентификатор КАК Идентификатор |ПОМЕСТИТЬ ВремИдентификаторыКонтактов |ИЗ | РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов |ГДЕ | Б24_Синхр_ИдентификаторыОбъектов.ТипДанных = &ТипДанныхКонтакт | И Б24_Синхр_ИдентификаторыОбъектов.Портал = &Портал | |ИНДЕКСИРОВАТЬ ПО | Идентификатор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Б24_Синхр_ИдентификаторыОбъектов.Объект КАК Объект, | Б24_Синхр_ИдентификаторыОбъектов.Идентификатор КАК Идентификатор |ПОМЕСТИТЬ ВремИдентификаторыРеквизитов |ИЗ | РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов |ГДЕ | Б24_Синхр_ИдентификаторыОбъектов.ТипДанных = &ТипДанныхРеквизит | И Б24_Синхр_ИдентификаторыОбъектов.Портал = &Портал | |ИНДЕКСИРОВАТЬ ПО | Идентификатор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Б24_Синхр_ИдентификаторыОбъектов.Объект КАК Объект, | Б24_Синхр_ИдентификаторыОбъектов.Идентификатор КАК Идентификатор |ПОМЕСТИТЬ ВремИдентификаторыКомпаний |ИЗ | РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов |ГДЕ | Б24_Синхр_ИдентификаторыОбъектов.ТипДанных = &ТипДанныхКомпания | И Б24_Синхр_ИдентификаторыОбъектов.Портал = &Портал | |ИНДЕКСИРОВАТЬ ПО | Идентификатор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗРЕШЕННЫЕ | ГрафикиОплаты.Ссылка КАК ГрафикОплаты, | ГрафикиОплаты.ФормаОплаты КАК ФормаОплаты |ПОМЕСТИТЬ ВремГрафикиОплаты |ИЗ | Справочник.ГрафикиОплаты КАК ГрафикиОплаты |ГДЕ | ГрафикиОплаты.ПометкаУдаления = ЛОЖЬ | |ИНДЕКСИРОВАТЬ ПО | ФормаОплаты |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Б24_Синхр_ИдентификаторыОбъектов.Объект КАК Объект, | Б24_Синхр_ИдентификаторыОбъектов.Идентификатор КАК Идентификатор, | Б24_Синхр_ИдентификаторыОбъектов.ПодчиненныйОбъект КАК ПодчиненныйОбъект |ПОМЕСТИТЬ ВремИдентификаторыТоваров |ИЗ | РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов |ГДЕ | Б24_Синхр_ИдентификаторыОбъектов.ТипДанных = &ТипДанныхТовар | И Б24_Синхр_ИдентификаторыОбъектов.Портал = &Портал | |ИНДЕКСИРОВАТЬ ПО | Идентификатор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Б24_Синхр_ИдентификаторыОбъектов.Объект КАК Объект, | Б24_Синхр_ИдентификаторыОбъектов.Идентификатор КАК Идентификатор |ПОМЕСТИТЬ ВремИдентификаторыБанкСчетов |ИЗ | РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов |ГДЕ | Б24_Синхр_ИдентификаторыОбъектов.ТипДанных = &ТипДанныхБанкСчет | И Б24_Синхр_ИдентификаторыОбъектов.Портал = &Портал | |ИНДЕКСИРОВАТЬ ПО | Идентификатор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Б24_Синхр_ИдентификаторыОбъектов.Объект КАК Объект, | Б24_Синхр_ИдентификаторыОбъектов.Идентификатор КАК Идентификатор |ПОМЕСТИТЬ ВремИдентификаторыЗначенийСвойств |ИЗ | РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов |ГДЕ | Б24_Синхр_ИдентификаторыОбъектов.ТипДанных = &ТипДанныхЗначенийСвойств | И Б24_Синхр_ИдентификаторыОбъектов.Портал = &Портал | |ИНДЕКСИРОВАТЬ ПО | Идентификатор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Б24_Синхр_ИдентификаторыОбъектов.Идентификатор КАК Идентификатор, | ДополнительныеРеквизитыИСведения.Ссылка КАК Объект, | ДополнительныеРеквизитыИСведения.ЭтоДополнительноеСведение КАК ЭтоДополнительноеСведение, | Б24_Синхр_ИдентификаторыОбъектов.ДополнительныйИдентификатор КАК ДополнительныйИдентификатор |ПОМЕСТИТЬ ВремСвойства |ИЗ | РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов | ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения | ПО Б24_Синхр_ИдентификаторыОбъектов.Объект = ДополнительныеРеквизитыИСведения.Ссылка |ГДЕ | Б24_Синхр_ИдентификаторыОбъектов.Портал = &Портал | И Б24_Синхр_ИдентификаторыОбъектов.ТипДанных = &ТипДанныхСвойств | И Б24_Синхр_ИдентификаторыОбъектов.Идентификатор <> """" |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | * |ПОМЕСТИТЬ ВремСостоянияЗаказов |ИЗ | РегистрСведений.СостоянияЗаказовКлиентов КАК СостоянияЗаказовКлиентов | |ИНДЕКСИРОВАТЬ ПО | Заказ"; Запрос.Выполнить(); #КонецОбласти ЗагруженныеОбъекты = Новый Массив; Для каждого ТекЭлемент Из мДанных.ИнформацияОСделках Цикл ИдБитрикс24 = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Формат(ТекЭлемент.Получить("ID"),"ЧГ=0")); Если ЗагруженныеОбъекты.Найти(ИдБитрикс24) <> Неопределено Тогда Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдБитрикс24, Истина))); Продолжить; КонецЕсли; ЗагруженныеОбъекты.Добавить(ИдБитрикс24); ЕстьКритическиеОшибки = Ложь; ПринудительноРегистрироватьДокумент = Ложь; ВнешнийКод = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), ТекЭлемент.Получить("ORIGIN_ID")); Комментарий = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), ТекЭлемент.Получить("COMMENTS")); ТемаСделки = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), ТекЭлемент.Получить("TITLE")); СуммаДокумента = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Число"), Формат(ТекЭлемент.Получить("OPPORTUNITY"),"ЧГ=0")); ЦенаВклНДС = Б24_Синхр_RestApiКлиентСервер.ПолучитьЗначениеИзМассиваСоответствий(мДанных.ИнформацияОТоварахСделок, "OWNER_ID", ИдБитрикс24, "TAX_INCLUDED")= "Y"; //СуммаНДС = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Число"), Формат(ТекЭлемент.Получить("TAX_VALUE"),"ЧГ=0")); КодВалюты = ПолучитьКодПоВалюте(Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Формат(ТекЭлемент.Получить("CURRENCY_ID"),"ЧГ=0"))); ИдКомпании = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Формат(ТекЭлемент.Получить("COMPANY_ID"),"ЧГ=0")); ИдКонтакта = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Формат(ТекЭлемент.Получить("CONTACT_ID"),"ЧГ=0")); ИдРеквизита = Формат(Б24_Синхр_RestApiКлиентСервер.ПолучитьЗначениеИзМассиваСоответствий(мДанных.ИнформацияОРеквизитахСделок, "ENTITY_ID", ИдБитрикс24, "REQUISITE_ID"),"ЧГ=0"); ИдБанкСчетаРек = Формат(Б24_Синхр_RestApiКлиентСервер.ПолучитьЗначениеИзМассиваСоответствий(мДанных.ИнформацияОРеквизитахСделок, "ENTITY_ID", ИдБитрикс24, "BANK_DETAIL_ID"),"ЧГ=0"); ИдСотрудника = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Формат(ТекЭлемент.Получить("ASSIGNED_BY_ID"),"ЧГ=0")); НомерСделкиБ24 = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Формат(ТекЭлемент.Получить("ID"),"ЧГ=0")); ДатаНачала = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Дата"), ТекЭлемент.Получить("DATE_CREATE")); //ДатаНачала = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Дата"), ТекЭлемент.Получить("BEGINDATE")); ДатаЗавершения = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Дата"), ТекЭлемент.Получить("CLOSEDATE")); Если НЕ ЗначениеЗаполнено(ДатаЗавершения) Тогда ДатаЗавершения = ТекущаяДатаСеанса(); КонецЕсли; //Открыт = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), ТекЭлемент.Получить("OPENED")) = "Y"; Закрыт = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), ТекЭлемент.Получить("CLOSED")) = "Y"; РезультатСделки= Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), ТекЭлемент.Получить("STAGE_SEMANTIC_ID")); // UNDEFINED = ''; PROCESS = 'P'; SUCCESS = 'S'; FAILURE = 'F'; ИдСтатуса = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), ТекЭлемент.Получить("STAGE_ID")); ИдНаправления = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), ТекЭлемент.Получить("CATEGORY_ID")); ЕстьНаправление= НЕ (ИдНаправления = "" ИЛИ ИдНаправления = "0"); ИдНаправления = ?(ЕстьНаправление, ИдНаправления, ""); Если ДатаНачала < ОбщиеНастройки.НастройкиСинхронизацииСделок.ДатаНачалаЗагрузкиСделок Тогда Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдБитрикс24, Истина))); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, " Сделка с ид: " + Строка(ИдБитрикс24) + " будет пропущена т.к. дата сделки меньше даты, с которой сделки загружаются в 1С."); Продолжить; КонецЕсли; Если ОбщиеНастройки.НастройкиСинхронизацииСделок.Свойство("ИнформацияОСтатусах") Тогда ИнформацияОСтатусах = ОбщиеНастройки.НастройкиСинхронизацииСделок.ИнформацияОСтатусах; Если ИнформацияОСтатусах.ИсточникСтатусов1С = "СостоянияЗаказов" Тогда тзнСтатусов = ИнформацияОСтатусах.СтатусыНаправленийСостояний; ИначеЕсли ИнформацияОСтатусах.ИсточникСтатусов1С = "СвойствоЗаказов" Тогда тзнСтатусов = ИнформацияОСтатусах.СтатусыНаправленийЗначенийСвойств; ИначеЕсли ИнформацияОСтатусах.ИсточникСтатусов1С = "СтатусыЗаказов" Тогда тзнСтатусов = ИнформацияОСтатусах.СтатусыНаправленийСтатусов; КонецЕсли; Иначе ИнформацияОСтатусах = Неопределено; КонецЕсли; Если ИнформацияОСтатусах <> Неопределено И ТипЗнч(тзнСтатусов) = Тип("ТаблицаЗначений") Тогда ПропускаемСделкуИзЗаСтатуса = Ложь; НайденныеСтроки = тзнСтатусов.НайтиСтроки(Новый Структура("ИдСтатуса, ИдНаправления", ИдСтатуса, ИдНаправления)); Если НайденныеСтроки.Количество() >0 Тогда ПропускаемСделкуИзЗаСтатуса = НайденныеСтроки[0].НеЗагружать; КонецЕсли; Если ПропускаемСделкуИзЗаСтатуса Тогда Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдБитрикс24, Истина))); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, " Сделка с ид: " + Строка(ИдБитрикс24) + " будет пропущена т.к. т.к. не стоит, что с таким статусом документ не загружается в 1С."); Продолжить; КонецЕсли; КонецЕсли; ПомеченНаУдаление = Ложь; #Область ПоискПометкиНаУдаление Если пОбщиеНастройки.ОбрабатыватьУдалениеОбъектовВ1С Тогда ЗначениеПометки = ТекЭлемент.Получить(ОбщиеНастройки.ДопИдПредопределенногоСвойстваПометкиУдаленияСделки); Если ЗначениеПометки = "1" Тогда ПомеченНаУдаление = Истина; КонецЕсли; КонецЕсли; #КонецОбласти // СА + 13.10.2021 // Организация = Справочники.Организации.ПустаяСсылка(); //#Область ПоискОрганизации // ИдОрганизации = ТекЭлемент.Получить(ОбщиеНастройки.ДопИдПредопределенногоСвойстваОрганизацииСделки); // Если ЗначениеЗаполнено(ИдОрганизации) Тогда // ЗнСвОрг = ПолучитьОбъектПоИдентификаторуИзВременнойТаблицы(МенеджерВременныхТаблиц, "ВремИдентификаторыЗначенийСвойств", ИдОрганизации); // Если ЗначениеЗаполнено(ЗнСвОрг) Тогда // Организация = Справочники.Организации.НайтиПоНаименованию(ЗнСвОрг.Наименование); // КонецЕсли; // КонецЕсли; // // Если НЕ ЗначениеЗаполнено(Организация) Тогда // Организация = ОбщиеНастройки.НастройкиСинхронизацииСделок.Организация; // КонецЕсли; //#КонецОбласти #Область ПоискОрганизации Организация = ОбщиеНастройки.НастройкиСинхронизацииСделок.Организация; #КонецОбласти // СА - 13.10.2021 Подразделение = ОбщиеНастройки.НастройкиСинхронизацииСделок.Подразделение; Соглашение = ОбщиеНастройки.НастройкиСинхронизацииСделок.Соглашение; #Область ПоискСозданиеСделки ЭтоНоваяСделка = Ложь; Сделка = ПолучитьОбъектПоИдентификаторуИзВременнойТаблицы(МенеджерВременныхТаблиц, "ВремИдентификаторыСделок", ПрефиксВнешнихКодовБитрикс24.Сделки + ИдБитрикс24); Если ЗначениеЗаполнено(ВнешнийКод) И НЕ ЗначениеЗаполнено(Сделка) Тогда Сделка = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("ДокументСсылка.ЗаказКлиента"), ВнешнийКод); КонецЕсли; Если ЗначениеЗаполнено(Сделка) Тогда Если ОбщиеНастройки.НастройкиСинхронизацииСделок.ОбновлятьСделки Тогда Сделка = Сделка.ПолучитьОбъект(); Сделка.ПометкаУдаления = ПомеченНаУдаление; Иначе Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдБитрикс24, Истина))); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "В настройках указано, что сделки не обновляются. Сделка: " + Строка(Сделка) + " не будет обновлена."); Продолжить; КонецЕсли; ИначеЕсли ПомеченНаУдаление Тогда Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Сделка с ИД " + Строка(ИдБитрикс24) + " помечена на удаление в Битрикс24. Не будет создана в 1С"); Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдБитрикс24, Истина))); Продолжить; Иначе Сделка = Документы.ЗаказКлиента.СоздатьДокумент(); ЭтоНоваяСделка = Истина; КонецЕсли; #КонецОбласти Если ЭтоНоваяСделка Тогда Сделка.Дата = ТекущаяДатаСеанса(); Сделка.Организация = Организация; Сделка.Подразделение = Подразделение; Сделка.Соглашение = Соглашение; Иначе Если Сделка.Организация <> Организация Тогда Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Организация устанавливается только в новых сделках. В сделке: " + Строка(Сделка) + " не будет изменена организация."); КонецЕсли; КонецЕсли; Если ОбщиеНастройки.НастройкиСинхронизацииСделок.ИсточникДатыДокумента = "По данным с Битрикс24" Тогда Сделка.Дата = ДатаНачала; КонецЕсли; Если ЭтоНоваяСделка Тогда Если ОбщиеНастройки.НастройкиСинхронизацииСделок.ИсточникНомераДокумента = "По данным с Битрикс24" Тогда Сделка.Номер = НомерСделкиБ24; Иначе Сделка.УстановитьНовыйНомер(); ПринудительноРегистрироватьДокумент = Истина; // Используется в других конфигурациях // ПрефиксацияОбъектовСобытия.УстановитьПрефиксИнформационнойБазыИОрганизации(Сделка, Истина, ""); КонецЕсли; КонецЕсли; ИнформацияОКлиенте = ПолучитьИнформациюОКомпанииКонтакте(ОбщиеНастройки, МенеджерВременныхТаблиц, ИдКомпании, ИдКонтакта, ИдРеквизита); Партнер = ИнформацияОКлиенте.Партнер; Контрагент = ИнформацияОКлиенте.Контрагент; КонтактноеЛицо = ИнформацияОКлиенте.КонтактноеЛицо; ЕстьКритическиеОшибки = ИнформацияОКлиенте.ЕстьКритическиеОшибки; БанкСчетКонтрагента = Справочники.БанковскиеСчетаКонтрагентов.ПустаяСсылка(); #Область ПоискБанкСчетаРеквизита Если НЕ(ИдБанкСчетаРек = "" ИЛИ ИдБанкСчетаРек = "0") Тогда БанкСчетКонтрагента = ПолучитьОбъектПоИдентификаторуИзВременнойТаблицы(МенеджерВременныхТаблиц, "ВремИдентификаторыБанкСчетов", ИдБанкСчетаРек); Если Не ЗначениеЗаполнено(БанкСчетКонтрагента) Тогда Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Не найден банковский счет реквизита. Попытка создания банковского счета с Ид: " + ИдБанкСчетаРек); БанкСчетКонтрагента = СформироватьБанковскийСчетПоИд(ОбщиеНастройки, ИдБанкСчетаРек); КонецЕсли; Если НЕ ЗначениеЗаполнено(БанкСчетКонтрагента) Тогда Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, "Не найден банковский счет с Ид: " + ИдБанкСчетаРек); КонецЕсли; КонецЕсли; #КонецОбласти Ответственный = Справочники.Пользователи.ПустаяСсылка(); #Область ПоискОтветственного Если ЗначениеЗаполнено(ИдСотрудника) Тогда НайденнаяСтрока = ОбщиеНастройки.ТаблицаСопоставленияПользователей.Найти(ИдСотрудника, "ИдПользователя"); Если НайденнаяСтрока <> Неопределено Тогда Ответственный = НайденнаяСтрока.Пользователь1С; КонецЕсли; КонецЕсли; #КонецОбласти Валюта = Справочники.Валюты.НайтиПоКоду(КодВалюты); Если НЕ ЗначениеЗаполнено(Валюта) Тогда Валюта = Справочники.Валюты.НайтиПоКоду("643"); КонецЕсли; Сделка.Партнер = Партнер; Сделка.Контрагент = Контрагент; Сделка.КонтактноеЛицо = КонтактноеЛицо; Сделка.БанковскийСчетКонтрагента= БанкСчетКонтрагента; //Если ЗначениеЗаполнено(Сделка.Контрагент) И ЗначениеЗаполнено(Сделка.Соглашение) И ЗначениеЗаполнено(Сделка.Организация) Тогда // Сделка.ЗаполнитьУсловияПродажПоСоглашению(); //КонецЕсли; Сделка.СпособДоставки = ?(ЗначениеЗаполнено(Сделка.СпособДоставки), Сделка.СпособДоставки, Перечисления.СпособыДоставки.Самовывоз); Сделка.Валюта = Валюта; Если ЗначениеЗаполнено(Контрагент) И ЗначениеЗаполнено(Сделка.Организация) И НЕ ЗначениеЗаполнено(Сделка.Договор) Тогда Если ПолучитьФункциональнуюОпцию("ИспользоватьДоговорыСКлиентами") И Сделка.Соглашение.ИспользуютсяДоговорыКонтрагентов Тогда Сделка.Договор = ПолучитьДоговор(ОбщиеНастройки, Сделка.Организация, Контрагент, Валюта); КонецЕсли; КонецЕсли; Сделка.ЦенаВключаетНДС = ЦенаВклНДС; Сделка.СуммаДокумента = СуммаДокумента; Сделка.Комментарий = Комментарий; Сделка.Склад = ?(ЗначениеЗаполнено(Сделка.Склад), Сделка.Склад, ОбщиеНастройки.НастройкиСинхронизацииТоваров.Склад); Приоритет = Справочники.Приоритеты.НайтиПоНаименованию("Средний"); Сделка.Приоритет = ?(ЗначениеЗаполнено(Сделка.Приоритет), Сделка.Приоритет, Приоритет); ХозяйственнаяОперация = Сделка.Соглашение.ХозяйственнаяОперация; ХозяйственнаяОперация = ?(ЗначениеЗаполнено(ХозяйственнаяОперация), ХозяйственнаяОперация, Перечисления.ХозяйственныеОперации.РеализацияКлиенту); Сделка.ХозяйственнаяОперация = ?(ЗначениеЗаполнено(Сделка.ХозяйственнаяОперация), Сделка.ХозяйственнаяОперация, ХозяйственнаяОперация); ФормаОплаты = Сделка.Соглашение.ФормаОплаты; Сделка.ФормаОплаты = ?(ЗначениеЗаполнено(Сделка.ФормаОплаты), Сделка.ФормаОплаты, ФормаОплаты); ПорядокОплаты = Сделка.Соглашение.ПорядокОплаты; ПорядокОплаты = ?(ЗначениеЗаполнено(ПорядокОплаты), ПорядокОплаты, Сделка.Договор.ПорядокОплаты); ПорядокОплаты = ?(ЗначениеЗаполнено(ПорядокОплаты), ПорядокОплаты, Перечисления.ПорядокОплатыПоСоглашениям.РасчетыВРубляхОплатаВРублях); Сделка.ПорядокОплаты = ?(ЗначениеЗаполнено(Сделка.ПорядокОплаты), Сделка.ПорядокОплаты, ПорядокОплаты); НалогообложениеНДС = ЗначениеНастроекПовтИсп.НалогообложениеНДС(Сделка.Организация, Сделка.Склад, Сделка.Договор, Сделка.НаправлениеДеятельности, Сделка.Дата); НалогообложениеНДС = ?(ЗначениеЗаполнено(НалогообложениеНДС), НалогообложениеНДС, Перечисления.ТипыНалогообложенияНДС.ПродажаОблагаетсяНДС); Сделка.НалогообложениеНДС = ?(ЗначениеЗаполнено(Сделка.НалогообложениеНДС), Сделка.НалогообложениеНДС, НалогообложениеНДС); Сделка.СкидкиРассчитаны = Истина; Сделка.ЖелаемаяДатаОтгрузки = ДатаЗавершения; Сделка.Менеджер = Ответственный; #Область ЗаполнениеБанковскогоСчетаОрганизации ВремСтруктураДанных = Новый Структура; ВремСтруктураДанных.Вставить("Организация" , Сделка.Организация); ВремСтруктураДанных.Вставить("ФормаОплаты" , Сделка.ФормаОплаты); ВремСтруктураДанных.Вставить("БанковскийСчет" , Сделка.БанковскийСчет); ВремСтруктураДанных.Вставить("Валюта" , Сделка.Валюта); ВремСтруктураДанных.Вставить("НаправлениеДеятельности", Сделка.НаправлениеДеятельности); Сделка.БанковскийСчет = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетОрганизацииПоУмолчанию(ВремСтруктураДанных); #КонецОбласти #Область ЗаполнениеГрафикаОплаты Если ПолучитьФункциональнуюОпцию("ИспользоватьГрафикиОплаты") Тогда ГрафикОплаты = Сделка.Соглашение.ГрафикОплаты; Если НЕ ЗначениеЗаполнено(ГрафикОплаты) Тогда Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("ФормаОплаты", Сделка.ФормаОплаты); Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | ВремГрафикиОплаты.ГрафикОплаты КАК ГрафикОплаты |ИЗ | ВремГрафикиОплаты КАК ВремГрафикиОплаты |ГДЕ | ВремГрафикиОплаты.ФормаОплаты = &ФормаОплаты"; тзнГО = Запрос.Выполнить().Выгрузить();; Если тзнГО.Количество()> 0 Тогда ГрафикОплаты = тзнГО[0].ГрафикОплаты; КонецЕсли; КонецЕсли; Сделка.ГрафикОплаты = ?(ЗначениеЗаполнено(Сделка.ГрафикОплаты), Сделка.ГрафикОплаты, ГрафикОплаты); Если Сделка.ЭтапыГрафикаОплаты.Количество() = 0 Тогда Для Каждого ТекЭтапыГрафика Из Сделка.ГрафикОплаты.Этапы Цикл НовыйЭтапГрафикаОплаты = Сделка.ЭтапыГрафикаОплаты.Добавить(); НовыйЭтапГрафикаОплаты.ВариантОплаты = ТекЭтапыГрафика.ВариантОплаты; НовыйЭтапГрафикаОплаты.ДатаПлатежа = Сделка.ЖелаемаяДатаОтгрузки + ТекЭтапыГрафика.Сдвиг*60*60*24; НовыйЭтапГрафикаОплаты.Сдвиг = ТекЭтапыГрафика.Сдвиг; НовыйЭтапГрафикаОплаты.ПроцентПлатежа = ТекЭтапыГрафика.ПроцентПлатежа; НовыйЭтапГрафикаОплаты.ПроцентЗалогаЗаТару = ТекЭтапыГрафика.ПроцентЗалогаЗаТару; НовыйЭтапГрафикаОплаты.СуммаПлатежа = СуммаДокумента*ТекЭтапыГрафика.ПроцентПлатежа/100; КонецЦикла; КонецЕсли; КонецЕсли; #КонецОбласти #Область ЗаполнениеСтатуса СтатусЗаказа = Перечисления.СтатусыЗаказовКлиентов.НеСогласован; Если ИнформацияОСтатусах <> Неопределено И ТипЗнч(тзнСтатусов) = Тип("ТаблицаЗначений") Тогда Если ИнформацияОСтатусах.ИсточникСтатусов1С = "СтатусыЗаказов" Тогда НайденныеСтроки = тзнСтатусов.НайтиСтроки(Новый Структура("ИдСтатуса, ИдНаправления", ИдСтатуса, ИдНаправления)); Если НайденныеСтроки.Количество() >0 Тогда НайденнаяСтрока = НайденныеСтроки[0]; Иначе НайденнаяСтрока = Неопределено; КонецЕсли; Если НайденнаяСтрока <> Неопределено Тогда СтатусЗаказа = НайденнаяСтрока.Статус; Иначе СтатусЗаказа = ?(ЗначениеЗаполнено(Сделка.Статус), Сделка.Статус, СтатусЗаказа); КонецЕсли; Иначе СтатусЗаказа = ?(ЗначениеЗаполнено(Сделка.Статус), Сделка.Статус, СтатусЗаказа); КонецЕсли; Иначе СтатусЗаказа = ?(ЗначениеЗаполнено(Сделка.Статус), Сделка.Статус, СтатусЗаказа); КонецЕсли; Если Закрыт И НЕ ЗначениеЗаполнено(СтатусЗаказа) Тогда Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, "Документ закрыт, но не найден статус заказа"); КонецЕсли; Сделка.Статус = СтатусЗаказа; #КонецОбласти #Область ДобавлениеДополнительныхРеквизитовДокумента НайденноеСвойствоТЧ = Сделка.ДополнительныеРеквизиты.Найти(ОбщиеНастройки.ПредопределенноеСвойствоНазваниеТемыСделки, "Свойство"); Если НайденноеСвойствоТЧ = Неопределено Тогда НовыйРеквизит = Сделка.ДополнительныеРеквизиты.Добавить(); НовыйРеквизит.Значение = ТемаСделки; НовыйРеквизит.Свойство = ОбщиеНастройки.ПредопределенноеСвойствоНазваниеТемыСделки; Иначе НайденноеСвойствоТЧ.Значение = ТемаСделки; КонецЕсли; НайденноеСвойствоТЧ = Сделка.ДополнительныеРеквизиты.Найти(ОбщиеНастройки.ПредопределенноеСвойствоНомерСделкиБитрикс24, "Свойство"); Если НайденноеСвойствоТЧ = Неопределено Тогда НовыйРеквизит = Сделка.ДополнительныеРеквизиты.Добавить(); НовыйРеквизит.Значение = НомерСделкиБ24; НовыйРеквизит.Свойство = ОбщиеНастройки.ПредопределенноеСвойствоНомерСделкиБитрикс24; Иначе НайденноеСвойствоТЧ.Значение = НомерСделкиБ24; КонецЕсли; НайденноеСвойствоТЧ = Сделка.ДополнительныеРеквизиты.Найти(ОбщиеНастройки.ПредопределенноеСвойствоДатаСделкиБитрикс24, "Свойство"); Если НайденноеСвойствоТЧ = Неопределено Тогда НовыйРеквизит = Сделка.ДополнительныеРеквизиты.Добавить(); НовыйРеквизит.Значение = ДатаНачала; НовыйРеквизит.Свойство = ОбщиеНастройки.ПредопределенноеСвойствоДатаСделкиБитрикс24; Иначе НайденноеСвойствоТЧ.Значение = ДатаНачала; КонецЕсли; НаправлениеСделки = ПолучитьОбъектПоИдентификаторуИзВременнойТаблицы(МенеджерВременныхТаблиц, "ВремИдентификаторыЗначенийСвойств", ?(ЕстьНаправление, "NS_" + ИдНаправления, "NS_")); НайденноеСвойствоТЧ = Сделка.ДополнительныеРеквизиты.Найти(ОбщиеНастройки.ПредопределенноеСвойствоНаправлениеСделки, "Свойство"); Если НайденноеСвойствоТЧ = Неопределено Тогда НовыйРеквизит = Сделка.ДополнительныеРеквизиты.Добавить(); НовыйРеквизит.Свойство = ОбщиеНастройки.ПредопределенноеСвойствоНаправлениеСделки; НовыйРеквизит.Значение = НаправлениеСделки; Иначе НайденноеСвойствоТЧ.Значение = НаправлениеСделки; КонецЕсли; #КонецОбласти #Область ДобавлениеДополнительногоРеквизитаСтатуса Если ИнформацияОСтатусах <> Неопределено И ТипЗнч(тзнСтатусов) = Тип("ТаблицаЗначений") Тогда Если ИнформацияОСтатусах.ИсточникСтатусов1С = "СвойствоЗаказов" Тогда ЗначениеСвойства = Неопределено; НайденныеСтроки = тзнСтатусов.НайтиСтроки(Новый Структура("ИдСтатуса, ИдНаправления", ИдСтатуса, ИдНаправления)); Если НайденныеСтроки.Количество() >0 Тогда НайденнаяСтрока = НайденныеСтроки[0]; Иначе НайденнаяСтрока = Неопределено; КонецЕсли; Если НайденнаяСтрока <> Неопределено Тогда ЗначениеСвойства = НайденнаяСтрока.Статус; КонецЕсли; НайденноеСвойствоТЧ = Сделка.ДополнительныеРеквизиты.Найти(ИнформацияОСтатусах.СвойствоЗаказов, "Свойство"); Если НайденноеСвойствоТЧ = Неопределено Тогда НовыйРеквизит = Сделка.ДополнительныеРеквизиты.Добавить(); НовыйРеквизит.Значение = ЗначениеСвойства; НовыйРеквизит.Свойство = ИнформацияОСтатусах.СвойствоЗаказов; Иначе НайденноеСвойствоТЧ.Значение = ЗначениеСвойства; КонецЕсли; КонецЕсли; КонецЕсли; #КонецОбласти #Область ЗаполнениеТоваров тзнТоваровАрх = Сделка.Товары.Выгрузить(); Сделка.Товары.Очистить(); // Костыль для искл дублей тзнПроверкаДублейСтрок = Новый ТаблицаЗначений; тзнПроверкаДублейСтрок.Колонки.Добавить("ИдТовара"); тзнПроверкаДублейСтрок.Колонки.Добавить("ИдЕдИзм"); тзнПроверкаДублейСтрок.Колонки.Добавить("Скидка"); тзнПроверкаДублейСтрок.Колонки.Добавить("Количество"); тзнПроверкаДублейСтрок.Колонки.Добавить("Цена"); Для Каждого ТоварСделки Из мДанных.ИнформацияОТоварахСделок Цикл Если Формат(ТоварСделки.Получить("OWNER_ID"),"ЧГ=0") = ИдБитрикс24 Тогда ИдПозицииДокумента = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Формат(ТоварСделки.Получить("ID"),"ЧГ=0")); ИдТовара = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Формат(ТоварСделки.Получить("PRODUCT_ID"),"ЧГ=0")); НаименованиеТовара = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Строка(ТоварСделки.Получить("PRODUCT_NAME"))); КодЕдИзм = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Формат(ТоварСделки.Получить("MEASURE_CODE"),"ЧГ=0")); Количество = ТоварСделки.Получить("QUANTITY"); ЦенаСоСкидкойСНалогом = ТоварСделки.Получить("PRICE"); ЦенаБезСкидкиБезНалога = ТоварСделки.Получить("PRICE_NETTO"); ЦенаБезСкидкиСНалогом = ТоварСделки.Получить("PRICE_BRUTTO"); //ЦенаСоСкидкойБезНалога = ТоварСделки.Получить("PRICE_EXCLUSIVE"); НалогВключен = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Строка(ТоварСделки.Получить("TAX_INCLUDED")))= "Y"; Скидка = ТоварСделки.Получить("DISCOUNT_SUM"); ПроцентСкидки = ТоварСделки.Получить("DISCOUNT_RATE"); СтавкаНалога = ТоварСделки.Получить("TAX_RATE"); СтавкаНалога = ?(ЗначениеЗаполнено(СтавкаНалога),СтавкаНалога, 0); Если НалогВключен = Истина Тогда // баг есть Цена = ?(ЦенаБезСкидкиСНалогом = 0 И Скидка<>0, Скидка/ПроцентСкидки*100 ,ЦенаБезСкидкиСНалогом); // есть баг с скидкой Иначе Цена = ?(ЦенаБезСкидкиБезНалога = 0 И Скидка<>0, Скидка/ПроцентСкидки*100 ,ЦенаБезСкидкиБезНалога); // есть баг с скидкой КонецЕсли; #Область ИсключениеВозможныхДублей // бывает глюк, когда с б24 приходят дубли строк СтруктураОтбора = Новый Структура; СтруктураОтбора.Вставить("ИдТовара" , ИдТовара); СтруктураОтбора.Вставить("ИдЕдИзм" , КодЕдИзм); СтруктураОтбора.Вставить("Скидка" , Скидка); СтруктураОтбора.Вставить("Количество" , Количество); СтруктураОтбора.Вставить("Цена" , ЦенаСоСкидкойСНалогом); НайденныеСтрокиПроверкиДублей = тзнПроверкаДублейСтрок.НайтиСтроки(СтруктураОтбора); Если НайденныеСтрокиПроверкиДублей.Количество() > 0 Тогда Продолжить; Иначе ИнфОНовойСтрокеТовара = тзнПроверкаДублейСтрок.Добавить(); ИнфОНовойСтрокеТовара.ИдТовара = ИдТовара; ИнфОНовойСтрокеТовара.ИдЕдИзм = КодЕдИзм; ИнфОНовойСтрокеТовара.Скидка = Скидка; ИнфОНовойСтрокеТовара.Количество= Количество; ИнфОНовойСтрокеТовара.Цена = ЦенаСоСкидкойСНалогом; КонецЕсли; #КонецОбласти ЕдиницаИзмерения = Справочники.УпаковкиЕдиницыИзмерения.ПустаяСсылка(); #Область ПоискЕдиницыИзмерения Если ЗначениеЗаполнено(КодЕдИзм) Тогда ЕдиницаИзмерения = Справочники.УпаковкиЕдиницыИзмерения.НайтиПоКоду(КодЕдИзм);; КонецЕсли; Если Не ЗначениеЗаполнено(ЕдиницаИзмерения) Тогда Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Не найдена единица измерения по ид. Попытка создания единицы измерения с Ид: " + КодЕдИзм); ЕдиницаИзмерения = СформироватьЕдиницуИзмеренияПоИд(ОбщиеНастройки, КодЕдИзм); КонецЕсли; #КонецОбласти Номенклатура = Справочники.Номенклатура.ПустаяСсылка(); Характеристика = Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка(); #Область ПоискТовара Если ЗначениеЗаполнено(ИдТовара) Тогда ИнформацияОНоменклатуре = Неопределено; Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("Идентификатор", ИдТовара); Запрос.Текст = "ВЫБРАТЬ | ВремИдентификаторы.Объект КАК Объект, | ВремИдентификаторы.ПодчиненныйОбъект КАК ПодчиненныйОбъект |ИЗ | ВремИдентификаторыТоваров КАК ВремИдентификаторы |ГДЕ | ВремИдентификаторы.Идентификатор = &Идентификатор"; ВыполненныйЗапрос = Запрос.Выполнить(); Если НЕ ВыполненныйЗапрос.Пустой() Тогда Выборка = ВыполненныйЗапрос.Выбрать(); Пока Выборка.Следующий() Цикл ИнформацияОНоменклатуре = Выборка; Прервать; КонецЦикла; КонецЕсли; Если ИнформацияОНоменклатуре = Неопределено Тогда Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Не найден товар по ид. Попытка создания товара с Ид: " + ИдТовара); ИнформацияОНоменклатуре = СформироватьНоменклатуруПоИд(ОбщиеНастройки, ИдТовара); Если ИнформацияОНоменклатуре = Неопределено Тогда Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.КритическаяОшибка, "Не найдена информация о номенклатуре с Ид: " + ИдТовара); ЕстьКритическиеОшибки = Истина; Иначе Номенклатура = ИнформацияОНоменклатуре.Объект; Характеристика = ИнформацияОНоменклатуре.ПодчиненныйОбъект; КонецЕсли; Иначе Номенклатура = ИнформацияОНоменклатуре.Объект; Характеристика = ИнформацияОНоменклатуре.ПодчиненныйОбъект; КонецЕсли; Иначе Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, "В сделке был указан не товар, а строка. Товар: " + НаименованиеТовара + " в сделку: " + Строка(Сделка) + " не будет указан."); КонецЕсли; #КонецОбласти Номенклатура = ?(ЗначениеЗаполнено(Номенклатура), Номенклатура, Справочники.Номенклатура.ПустаяСсылка()); Если Не ЗначениеЗаполнено(ЕдиницаИзмерения) Тогда ЕдиницаИзмерения = Номенклатура.ЕдиницаИзмерения КонецЕсли; Если СтавкаНалога = 0 Тогда СтавкаНДС = Перечисления.СтавкиНДС.БезНДС; ИначеЕсли СтавкаНалога = 18 Тогда СтавкаНДС = Перечисления.СтавкиНДС.НДС18; ИначеЕсли СтавкаНалога = 20 Тогда СтавкаНДС = Перечисления.СтавкиНДС.НДС20; ИначеЕсли СтавкаНалога = 10 Тогда СтавкаНДС = Перечисления.СтавкиНДС.НДС10; Иначе СтавкаНДС = Номенклатура.СтавкаНДС; КонецЕсли; НоваяЗаписьТовара = Сделка.Товары.Добавить(); #Область ЗаполнениеСтрокиСтарымиДанными НайденныеСтроки = тзнТоваровАрх.НайтиСтроки(Новый Структура("Номенклатура, Характеристика", Номенклатура, Характеристика)); Если НайденныеСтроки.Количество() > 0 Тогда ЗаполнитьЗначенияСвойств(НоваяЗаписьТовара, НайденныеСтроки[0]); тзнТоваровАрх.Удалить(НайденныеСтроки[0]); КонецЕсли; #КонецОбласти НоваяЗаписьТовара.Б24_Синхр_ИдентификаторПозиции = ИдПозицииДокумента; НоваяЗаписьТовара.Номенклатура = Номенклатура; НоваяЗаписьТовара.Характеристика = Характеристика; НоваяЗаписьТовара.Упаковка = ЕдиницаИзмерения; НоваяЗаписьТовара.СтавкаНДС = СтавкаНДС; НоваяЗаписьТовара.ДатаОтгрузки = ?(ЗначениеЗаполнено(НоваяЗаписьТовара.ДатаОтгрузки), НоваяЗаписьТовара.ДатаОтгрузки, Сделка.ЖелаемаяДатаОтгрузки); НоваяЗаписьТовара.Склад = ?(ЗначениеЗаполнено(НоваяЗаписьТовара.Склад), НоваяЗаписьТовара.Склад, Сделка.Склад); НоваяЗаписьТовара.ВариантОбеспечения= ?(ЗначениеЗаполнено(НоваяЗаписьТовара.ВариантОбеспечения), НоваяЗаписьТовара.ВариантОбеспечения, Перечисления.ВариантыОбеспечения.НеТребуется); Если НоваяЗаписьТовара.Номенклатура.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Услуга ИЛИ НЕ ЗначениеЗаполнено(НоваяЗаписьТовара.Номенклатура) Тогда НоваяЗаписьТовара.Содержание = НаименованиеТовара; КонецЕсли; НоваяЗаписьТовара.Количество = Количество; НоваяЗаписьТовара.КоличествоУпаковок = Количество; Если НалогВключен = Истина Тогда ЦенаИтого = ЦенаБезСкидкиСНалогом; Иначе ЦенаИтого = ЦенаБезСкидкиБезНалога; КонецЕсли; НоваяЗаписьТовара.Цена = ЦенаИтого; НоваяЗаписьТовара.ПроцентРучнойСкидки = ПроцентСкидки; СтруктураДействий = Новый Структура; СтруктураПересчетаСуммы = ОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Сделка); СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы); СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы); СтруктураДействий.Вставить("ПересчитатьСумму"); СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать", Ложь)); СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки", Новый Структура("Очищать", Истина)); ОбработкаТабличнойЧастиВызовСервера.ОбработатьСтрокуТЧ(НоваяЗаписьТовара, СтруктураДействий, Неопределено); КонецЕсли; КонецЦикла; #КонецОбласти ЭтоНовыйОбъект = Сделка.Ссылка.Пустая()=Истина; ТаблицаСвойств = РазобратьПользовательскиеПоляВТаблицу(ОбщиеНастройки, ТекЭлемент, МенеджерВременныхТаблиц); ЗаполнениеДополнительныеРеквизитыОбъектов(ОбщиеНастройки, ТаблицаСвойств, Сделка, ЭтоНовыйОбъект); #Область ПолучениеИнформацииОСостоянииЗаказаДоПроведения ИнформацияОСостоянииЗаказа = Новый Структура; Если ЗначениеЗаполнено(Сделка.Ссылка) Тогда Если ИнформацияОСтатусах <> Неопределено Тогда Если ИнформацияОСтатусах.ИсточникСтатусов1С = "СостоянияЗаказов" Тогда Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("Заказ", Сделка.Ссылка); Запрос.Текст = "ВЫБРАТЬ * |ИЗ | ВремСостоянияЗаказов КАК ВремСостоянияЗаказов |ГДЕ | ВремСостоянияЗаказов.Заказ = &Заказ"; тзнСЗ = Запрос.Выполнить().Выгрузить();; Если тзнСЗ.Количество()> 0 Тогда ИнформацияОСостоянииЗаказа = тзнСЗ[0]; КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; #КонецОбласти #Область ПроведениеДокумента ОтменаПроведенияСОшибкой = Ложь; Сделка.ДополнительныеСвойства.Вставить("ЗагрузкаСБитрикс24", Истина); Если (ОбщиеНастройки.НастройкиСинхронизацииСделок.РежимЗаписиДокумента = "Проводить закрытые" И Закрыт) ИЛИ ОбщиеНастройки.НастройкиСинхронизацииСделок.РежимЗаписиДокумента = "Проводить" Тогда Попытка Сделка.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Проведен документ: " + Строка(Сделка)); Исключение Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, "Во время проведения документа: " + Строка(Сделка) + " возникли ошибки."); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, ОписаниеОшибки()); ЕстьКритическиеОшибки = Истина; Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Попытка записи документа: " + Строка(Сделка)); Попытка Сделка.Записать(РежимЗаписиДокумента.Запись); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Записан документ: " + Строка(Сделка)); Исключение Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, "Во время записи документа: " + Строка(Сделка) + " возникли ошибки."); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, ОписаниеОшибки()); ОбщиеНастройки.ВыполненоБезОшибок = Ложь; КонецПопытки; КонецПопытки; Иначе Попытка Если ЭтоНовыйОбъект Тогда Сделка.Записать(РежимЗаписиДокумента.Запись); ИначеЕсли Сделка.Проведен Тогда Сделка.Записать(РежимЗаписиДокумента.Проведение); Иначе Сделка.Записать(РежимЗаписиДокумента.ОтменаПроведения); КонецЕсли; Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Записан: " + Строка(Сделка)); Исключение Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, "Во время записи документа: " + Строка(Сделка) + " возникли ошибки."); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, ОписаниеОшибки()); ОтменаПроведенияСОшибкой = Истина; ЕстьКритическиеОшибки = Истина; ОбщиеНастройки.ВыполненоБезОшибок = Ложь; КонецПопытки; КонецЕсли; Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдБитрикс24, НЕ ЕстьКритическиеОшибки))); #КонецОбласти Если ЗначениеЗаполнено(Сделка.Ссылка) Тогда Б24_Синхр_СинхронизацияВызовСервера.ЗаписатьИдБ24Объекта(ОбщиеНастройки, ОбщиеНастройки.ТипыОбъектовОбмена.Сделка, Сделка.Ссылка, ИдБитрикс24); Если ПринудительноРегистрироватьДокумент Тогда Б24_Синхр_РегистрацияИзмененийВызовСервера.ДобавитьОбъектВТаблицуИзменений(ОбщиеНастройки.НастройкаСинхронизации, ОбщиеНастройки.ТипыОбъектовОбмена.Сделка, Сделка.Ссылка); КонецЕсли; Если НЕ ОтменаПроведенияСОшибкой Тогда ЗаполнениеДополнительныеСведенияОбъектов(ОбщиеНастройки, ТаблицаСвойств, Сделка.Ссылка, ЭтоНовыйОбъект); КонецЕсли; КонецЕсли; #Область ДобавлениеСостоянияЗаказа Если ЗначениеЗаполнено(Сделка.Ссылка) Тогда Если ИнформацияОСтатусах <> Неопределено Тогда Если ИнформацияОСтатусах.ИсточникСтатусов1С = "СостоянияЗаказов" Тогда тзнСтатусов = ИнформацияОСтатусах.СтатусыНаправленийСостояний; НайденныеСтроки = тзнСтатусов.НайтиСтроки(Новый Структура("ИдСтатуса, ИдНаправления", ИдСтатуса, ИдНаправления)); Если НайденныеСтроки.Количество() > 0 Тогда НайденнаяСтрока = НайденныеСтроки[0]; Иначе НайденнаяСтрока = Неопределено; КонецЕсли; Если НайденнаяСтрока <> Неопределено Тогда НаборЗаписей = РегистрыСведений.СостоянияЗаказовКлиентов.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Заказ.Установить(Сделка.Ссылка); НоваяЗапись = НаборЗаписей.Добавить(); ЗаполнитьЗначенияСвойств(НоваяЗапись, ИнформацияОСостоянииЗаказа); НоваяЗапись.Заказ = Сделка.Ссылка; НоваяЗапись.ДатаСобытия = ТекущаяДатаСеанса(); НоваяЗапись.Состояние = НайденнаяСтрока.Статус; НаборЗаписей.ДополнительныеСвойства.Вставить("ЗагрузкаСБитрикс24", Истина); НаборЗаписей.Записать(Истина); КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; #КонецОбласти КонецЦикла; пОбщиеНастройки.НомерСообщения = ОбщиеНастройки.НомерСообщения; // чтобы лог не затерся. Возврат Результат; КонецФункции /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Функция ЗагрузитьОбновитьЗаказы(пОбщиеНастройки, мДанных) Экспорт Результат = Новый Массив; ЕстьКритическиеОшибки = Ложь; ОбщиеНастройки = Новый Структура; Для Каждого ЭлементСтруктуры Из пОбщиеНастройки Цикл ОбщиеНастройки.Вставить(ЭлементСтруктуры.Ключ, ЭлементСтруктуры.Значение); КонецЦикла; Б24_Синхр_СинхронизацияВызовСервера.ДобавитьСложныеНастройкиОбменаВСтруктуру(ОбщиеНастройки); ПрефиксВнешнихКодовБитрикс24 = Б24_Синхр_СинхронизацияСервер.ПолучитьПрефиксВнешнихКодовБитрикс24(); ИнформацияОСтатусах = Неопределено; Если ОбщиеНастройки.НастройкиСинхронизацииЗаказов.Свойство("ИнформацияОСтатусах") Тогда ИнформацияОСтатусах = ОбщиеНастройки.НастройкиСинхронизацииЗаказов.ИнформацияОСтатусах; Если ИнформацияОСтатусах.ИсточникСтатусовЗаказов = "СостоянияЗаказов" Тогда тзнСтатусов = ИнформацияОСтатусах.СоответствияССостояниямиЗаказа; ИначеЕсли ИнформацияОСтатусах.ИсточникСтатусовЗаказов = "СвойствоЗаказов" Тогда тзнСтатусов = ИнформацияОСтатусах.СоответствияСЗначениямиСвойствЗаказа; Иначе тзнСтатусов = ИнформацияОСтатусах.СоответствияССтатусамиЗаказа; КонецЕсли; Иначе тзнСтатусов = Новый ТаблицаЗначений; тзнСтатусов.Колонки.Добавить("ИдСтатуса"); тзнСтатусов.Колонки.Добавить("Статус"); тзнСтатусов.Колонки.Добавить("НеЗагружать"); КонецЕсли; ИнформацияОДоставках = Неопределено; Если ОбщиеНастройки.НастройкиСинхронизацииЗаказов.Свойство("ИнформацияОДоставках") Тогда ИнформацияОДоставках = ОбщиеНастройки.НастройкиСинхронизацииЗаказов.ИнформацияОДоставках; КонецЕсли; МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; #Область ФормированиеВременныхТаблицДанных Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("ТипДанныхЗаказ" , ОбщиеНастройки.ТипыОбъектовОбмена.Заказ); Запрос.УстановитьПараметр("ТипДанныхОплата" , ОбщиеНастройки.ТипыОбъектовОбмена.Оплата); Запрос.УстановитьПараметр("ТипДанныхОтгрузка" , ОбщиеНастройки.ТипыОбъектовОбмена.Отгрузка); Запрос.УстановитьПараметр("ТипДанныхКомпания" , ОбщиеНастройки.ТипыОбъектовОбмена.Компания); Запрос.УстановитьПараметр("ТипДанныхКонтакт" , ОбщиеНастройки.ТипыОбъектовОбмена.Контакт); Запрос.УстановитьПараметр("ТипДанныхТовар" , ОбщиеНастройки.ТипыОбъектовОбмена.Товар); Запрос.УстановитьПараметр("ТипДанныхРеквизит" , ОбщиеНастройки.ТипыОбъектовОбмена.Реквизит); Запрос.УстановитьПараметр("ТипДанныхБанкСчет" , ОбщиеНастройки.ТипыОбъектовОбмена.БанковскийСчетРеквизита); Запрос.УстановитьПараметр("ТипДанныхСвойств" , ОбщиеНастройки.ТипыОбъектовОбмена.СвойствоЗаказа); Запрос.УстановитьПараметр("ТипДанныхЗначенийСвойств", ОбщиеНастройки.ТипыОбъектовОбмена.ЗначениеСвойстваЗаказа); Запрос.УстановитьПараметр("Портал" , ОбщиеНастройки.Портал); Запрос.Текст = "ВЫБРАТЬ | Б24_Синхр_ИдентификаторыОбъектов.Объект КАК Объект, | Б24_Синхр_ИдентификаторыОбъектов.Идентификатор КАК Идентификатор |ПОМЕСТИТЬ ВремИдентификаторыЗаказов |ИЗ | РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов |ГДЕ | Б24_Синхр_ИдентификаторыОбъектов.ТипДанных = &ТипДанныхЗаказ | И Б24_Синхр_ИдентификаторыОбъектов.Портал = &Портал | |ИНДЕКСИРОВАТЬ ПО | Идентификатор |; | |ВЫБРАТЬ | Б24_Синхр_ИдентификаторыОбъектов.Объект КАК Объект, | Б24_Синхр_ИдентификаторыОбъектов.Идентификатор КАК Идентификатор |ПОМЕСТИТЬ ВремИдентификаторыОплат |ИЗ | РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов |ГДЕ | Б24_Синхр_ИдентификаторыОбъектов.ТипДанных = &ТипДанныхОплата | И Б24_Синхр_ИдентификаторыОбъектов.Портал = &Портал | |ИНДЕКСИРОВАТЬ ПО | Идентификатор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Б24_Синхр_ИдентификаторыОбъектов.Объект КАК Объект, | Б24_Синхр_ИдентификаторыОбъектов.Идентификатор КАК Идентификатор |ПОМЕСТИТЬ ВремИдентификаторыОтгрузок |ИЗ | РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов |ГДЕ | Б24_Синхр_ИдентификаторыОбъектов.ТипДанных = &ТипДанныхОтгрузка | И Б24_Синхр_ИдентификаторыОбъектов.Портал = &Портал | |ИНДЕКСИРОВАТЬ ПО | Идентификатор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Б24_Синхр_ИдентификаторыОбъектов.Объект КАК Объект, | Б24_Синхр_ИдентификаторыОбъектов.Идентификатор КАК Идентификатор |ПОМЕСТИТЬ ВремИдентификаторыКонтактов |ИЗ | РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов |ГДЕ | Б24_Синхр_ИдентификаторыОбъектов.ТипДанных = &ТипДанныхКонтакт | И Б24_Синхр_ИдентификаторыОбъектов.Портал = &Портал | |ИНДЕКСИРОВАТЬ ПО | Идентификатор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Б24_Синхр_ИдентификаторыОбъектов.Объект КАК Объект, | Б24_Синхр_ИдентификаторыОбъектов.Идентификатор КАК Идентификатор |ПОМЕСТИТЬ ВремИдентификаторыРеквизитов |ИЗ | РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов |ГДЕ | Б24_Синхр_ИдентификаторыОбъектов.ТипДанных = &ТипДанныхРеквизит | И Б24_Синхр_ИдентификаторыОбъектов.Портал = &Портал | |ИНДЕКСИРОВАТЬ ПО | Идентификатор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Б24_Синхр_ИдентификаторыОбъектов.Объект КАК Объект, | Б24_Синхр_ИдентификаторыОбъектов.Идентификатор КАК Идентификатор |ПОМЕСТИТЬ ВремИдентификаторыКомпаний |ИЗ | РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов |ГДЕ | Б24_Синхр_ИдентификаторыОбъектов.ТипДанных = &ТипДанныхКомпания | И Б24_Синхр_ИдентификаторыОбъектов.Портал = &Портал | |ИНДЕКСИРОВАТЬ ПО | Идентификатор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗРЕШЕННЫЕ | ГрафикиОплаты.Ссылка КАК ГрафикОплаты, | ГрафикиОплаты.ФормаОплаты КАК ФормаОплаты |ПОМЕСТИТЬ ВремГрафикиОплаты |ИЗ | Справочник.ГрафикиОплаты КАК ГрафикиОплаты |ГДЕ | ГрафикиОплаты.ПометкаУдаления = ЛОЖЬ | |ИНДЕКСИРОВАТЬ ПО | ФормаОплаты |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Б24_Синхр_ИдентификаторыОбъектов.Объект КАК Объект, | Б24_Синхр_ИдентификаторыОбъектов.Идентификатор КАК Идентификатор, | Б24_Синхр_ИдентификаторыОбъектов.ПодчиненныйОбъект КАК ПодчиненныйОбъект |ПОМЕСТИТЬ ВремИдентификаторыТоваров |ИЗ | РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов |ГДЕ | Б24_Синхр_ИдентификаторыОбъектов.ТипДанных = &ТипДанныхТовар | И Б24_Синхр_ИдентификаторыОбъектов.Портал = &Портал | |ИНДЕКСИРОВАТЬ ПО | Идентификатор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Б24_Синхр_ИдентификаторыОбъектов.Объект КАК Объект, | Б24_Синхр_ИдентификаторыОбъектов.Идентификатор КАК Идентификатор |ПОМЕСТИТЬ ВремИдентификаторыБанкСчетов |ИЗ | РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов |ГДЕ | Б24_Синхр_ИдентификаторыОбъектов.ТипДанных = &ТипДанныхБанкСчет | И Б24_Синхр_ИдентификаторыОбъектов.Портал = &Портал | |ИНДЕКСИРОВАТЬ ПО | Идентификатор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Б24_Синхр_ИдентификаторыОбъектов.Объект КАК Объект, | ВЫРАЗИТЬ(Б24_Синхр_ИдентификаторыОбъектов.ДополнительныйИдентификатор КАК СТРОКА(100)) КАК Идентификатор |ПОМЕСТИТЬ ВремИдентификаторыЗначенийСвойств |ИЗ | РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов |ГДЕ | Б24_Синхр_ИдентификаторыОбъектов.ТипДанных = &ТипДанныхЗначенийСвойств | И Б24_Синхр_ИдентификаторыОбъектов.Портал = &Портал | |ИНДЕКСИРОВАТЬ ПО | Идентификатор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Б24_Синхр_ИдентификаторыОбъектов.Идентификатор КАК Идентификатор, | ДополнительныеРеквизитыИСведения.Ссылка КАК Объект, | ДополнительныеРеквизитыИСведения.ЭтоДополнительноеСведение КАК ЭтоДополнительноеСведение, | Б24_Синхр_ИдентификаторыОбъектов.ДополнительныйИдентификатор КАК ДополнительныйИдентификатор |ПОМЕСТИТЬ ВремСвойства |ИЗ | РегистрСведений.Б24_Синхр_ИдентификаторыОбъектов КАК Б24_Синхр_ИдентификаторыОбъектов | ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения | ПО Б24_Синхр_ИдентификаторыОбъектов.Объект = ДополнительныеРеквизитыИСведения.Ссылка |ГДЕ | Б24_Синхр_ИдентификаторыОбъектов.Портал = &Портал | И Б24_Синхр_ИдентификаторыОбъектов.ТипДанных = &ТипДанныхСвойств | И Б24_Синхр_ИдентификаторыОбъектов.Идентификатор <> """""; Запрос.Выполнить(); #КонецОбласти ЗагруженныеОбъекты = Новый Массив; Для каждого ТекЭлемент Из мДанных Цикл ПринудительноРегистрироватьДокумент = Ложь; #Область ПолучениеЗначенийЗаказа ИдБитрикс24 = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Формат(ТекЭлемент.Получить("id"),"ЧГ=0")); Если ЗагруженныеОбъекты.Найти(ИдБитрикс24) <> Неопределено Тогда Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдБитрикс24, Истина))); Продолжить; КонецЕсли; ЗагруженныеОбъекты.Добавить(ИдБитрикс24); ЕстьКритическиеОшибки = Ложь; НомерЗаказаБ24 = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Формат(ТекЭлемент.Получить("accountNumber"),"ЧГ=0")); НомерЗаказаБ24 = ?(ЗначениеЗаполнено(НомерЗаказаБ24), НомерЗаказаБ24, ИдБитрикс24); ДатаНачала = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Дата"), ТекЭлемент.Получить("dateInsert")); Если Не ЗначениеЗаполнено(ДатаНачала) Тогда ДатаНачала = ТекущаяДатаСеанса() КонецЕсли; ДатаОтгрузки = ДатаНачала + 7*24*60*60; ВнешнийИдентификатор = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Формат(ТекЭлемент.Получить("xmlId"),"ЧГ=0")); КомментарийМенеджера = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), ТекЭлемент.Получить("comments")); КомментарийПользователя = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), ТекЭлемент.Получить("userDescription")); Оплачен = ТекЭлемент.Получить("payed") = "Y"; //ДатаОплаты = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Дата"), Формат(ТекЭлемент.Получить("dateBill"),"ЧГ=0")); Отгружен = ТекЭлемент.Получить("deducted") = "Y"; Отменен = ТекЭлемент.Получить("canceled") = "Y"; //ДатаОтмены = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Дата"), Формат(ТекЭлемент.Получить("dateCanceled"),"ЧГ=0")); //ИдПричиныОтмены = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Формат(ТекЭлемент.Получить("empCanceledId"),"ЧГ=0")); ИдСтатуса = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Формат(ТекЭлемент.Получить("statusId"),"ЧГ=0")); //СуммаНДС = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Число"), Формат(ТекЭлемент.Получить("taxValue"),"ЧРД=.; ЧГ=0")); СуммаДокумента = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Число"), Формат(ТекЭлемент.Получить("price"),"ЧРД=.; ЧГ=0")); //ТемаЗаказа = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), ТекЭлемент.Получить("orderTopic")); ИдСотрудника = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Формат(ТекЭлемент.Получить("responsibleId"),"ЧГ=0")); Закрыт = Оплачен И Отгружен; Оплаты = ТекЭлемент.Получить("payments"); Оплаты = ?(Оплаты = Неопределено, Новый Массив, Оплаты); Отгрузки = ТекЭлемент.Получить("shipments"); Отгрузки = ?(Отгрузки = Неопределено, Новый Массив, Отгрузки); ТрекНомер = ""; Для Каждого ТекОтгрузка Из Отгрузки Цикл ТрекНомер = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Формат(ТекОтгрузка.Получить("trackingNumber"),"ЧГ=0")); Прервать КонецЦикла; ИдДоставки = ""; Если Отгрузки <> Неопределено Тогда Для Каждого ТекОтгрузка Из Отгрузки Цикл ИдДоставки = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Формат(ТекОтгрузка.Получить("deliveryId"),"ЧГ=0")); Прервать; КонецЦикла; КонецЕсли; ИдКомпании = ""; ИдКонтакта = ""; Клиенты = ТекЭлемент.Получить("clients"); Если Клиенты <> Неопределено Тогда Для каждого ТекКлиент Из Клиенты Цикл Если Строка(ТекКлиент.Получить("entityTypeId")) = "3" Тогда ИдКонтакта = ?(ЗначениеЗаполнено(ИдКонтакта), ИдКонтакта, Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Формат(ТекКлиент.Получить("entityId"),"ЧГ=0"))); Иначе ИдКомпании = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Формат(ТекКлиент.Получить("entityId"),"ЧГ=0")); КонецЕсли; КонецЦикла; КонецЕсли; ИдРеквизита = ""; ИдНашегоРеквизита = ""; ИдБанкСчетаРек = ""; ИдНашегоБанкСчетаРек= ""; Реквизиты = ТекЭлемент.Получить("requisiteLink"); Если Реквизиты <> Неопределено И ТипЗнч(Реквизиты) <> Тип("Массив") Тогда ИдРеквизита = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Формат(Реквизиты.Получить("requisiteId"),"ЧГ=0")); ИдНашегоРеквизита = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Формат(Реквизиты.Получить("mcRequisiteId"),"ЧГ=0")); ИдБанкСчетаРек = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Формат(Реквизиты.Получить("bankDetailId"),"ЧГ=0")); ИдНашегоБанкСчетаРек= Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Формат(Реквизиты.Получить("mcBankDetailId"),"ЧГ=0")); ИначеЕсли Реквизиты <> Неопределено И ТипЗнч(Реквизиты) = Тип("Массив") Тогда Если Реквизиты.Количество() > 0 Тогда ИдРеквизита = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Формат(Реквизиты[0].Получить("requisiteId"),"ЧГ=0")); ИдНашегоРеквизита = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Формат(Реквизиты[0].Получить("mcRequisiteId"),"ЧГ=0")); ИдБанкСчетаРек = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Формат(Реквизиты[0].Получить("bankDetailId"),"ЧГ=0")); ИдНашегоБанкСчетаРек= Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Формат(Реквизиты[0].Получить("mcBankDetailId"),"ЧГ=0")); КонецЕсли; КонецЕсли; ЭлементыКорзины = ТекЭлемент.Получить("basketItems"); ЭлементыКорзины = ?(ЭлементыКорзины = Неопределено, Новый Массив, ЭлементыКорзины); СвойстваЗаказа = ТекЭлемент.Получить("propertyValues"); СвойстваЗаказа = ?(СвойстваЗаказа = Неопределено, Новый Массив, СвойстваЗаказа); АдресДоставки = ""; Для Каждого ТекСвойство Из СвойстваЗаказа Цикл Если ТекСвойство.Получить("name") = "Адрес доставки" Тогда АдресДоставки = ТекСвойство.Получить("value"); Если ЗначениеЗаполнено(АдресДоставки) Тогда Прервать; КонецЕсли; КонецЕсли; КонецЦикла; ЦенаВклНДС = Истина; СимвольныйКодВалюты = "RUB"; Если ЭлементыКорзины.Количество() > 0 Тогда СимвольныйКодВалюты = ПолучитьКодПоВалюте(ВРег(ЭлементыКорзины[0].Получить("currency"))); ЦенаВклНДС = ЭлементыКорзины[0].Получить("vatIncluded") = "Y"; КонецЕсли; КодВалюты = ПолучитьКодПоВалюте(ВРег(СимвольныйКодВалюты)); #КонецОбласти Если ДатаНачала < ОбщиеНастройки.НастройкиСинхронизацииЗаказов.ДатаНачалаЗагрузкиЗаказов Тогда Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдБитрикс24, Истина))); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, " Заказ с ид: " + Строка(ИдБитрикс24) + " будет пропущен т.к. дата заказа меньше даты, с которой заказы загружаются в 1С."); Продолжить; КонецЕсли; Если ИнформацияОСтатусах <> Неопределено Тогда ПропускаемЗаказИзЗаСтатуса = Ложь; НайденнаяСтрока = тзнСтатусов.Найти(ИдСтатуса, "ИдСтатуса"); Если НайденнаяСтрока <> Неопределено Тогда ПропускаемЗаказИзЗаСтатуса = НайденнаяСтрока.НеЗагружать; КонецЕсли; Если ПропускаемЗаказИзЗаСтатуса Тогда Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдБитрикс24, Истина))); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, " Заказ с ид: " + Строка(ИдБитрикс24) + " будет пропущен т.к. у него не подходящий статус"); Продолжить; КонецЕсли; КонецЕсли; Подразделение = ОбщиеНастройки.НастройкиСинхронизацииЗаказов.Подразделение; Соглашение = ОбщиеНастройки.НастройкиСинхронизацииЗаказов.Соглашение; #Область ПоискСозданиеЗаказа ЭтоНовыйЗаказ = Ложь; Заказ = ПолучитьОбъектПоИдентификаторуИзВременнойТаблицы(МенеджерВременныхТаблиц, "ВремИдентификаторыЗаказов", ПрефиксВнешнихКодовБитрикс24.Заказы + ИдБитрикс24); Если ЗначениеЗаполнено(ВнешнийИдентификатор) И НЕ ЗначениеЗаполнено(Заказ) Тогда Заказ = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("ДокументСсылка.ЗаказКлиента"), ВнешнийИдентификатор); КонецЕсли; Если НЕ ЗначениеЗаполнено(Заказ) Тогда Если Отменен Тогда Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдБитрикс24, Истина))); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, " Заказ с ид: " + Строка(ИдБитрикс24) + " будет пропущен т.к. его в 1С нет и он отменен."); Продолжить; КонецЕсли; Заказ = Документы.ЗаказКлиента.СоздатьДокумент(); ЭтоНовыйЗаказ = Истина; Иначе Если ОбщиеНастройки.НастройкиСинхронизацииЗаказов.ОбновлятьДокументы Тогда Заказ = Заказ.ПолучитьОбъект(); Иначе Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдБитрикс24, Истина))); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "В настройках указано, что заказы и подчиненные данные не обновляются. Заказ: " + Строка(Заказ) + " не будет обновлен."); Продолжить; КонецЕсли; КонецЕсли; #КонецОбласти Если ЭтоНовыйЗаказ И ЗначениеЗаполнено(Соглашение) Тогда Заказ.Дата = ТекущаяДатаСеанса(); Заказ.Подразделение = Подразделение; Заказ.Соглашение = Соглашение; //Заказ.ЗаполнитьУсловияПродажПоСоглашению(); КонецЕсли; Если ОбщиеНастройки.НастройкиСинхронизацииЗаказов.ИсточникДатыДокумента = "По данным с Битрикс24" Тогда Заказ.Дата = ДатаНачала; КонецЕсли; Если ЭтоНовыйЗаказ Тогда Если ОбщиеНастройки.НастройкиСинхронизацииЗаказов.ИсточникНомераДокумента = "По данным с Битрикс24" Тогда Заказ.Номер = НомерЗаказаБ24; Иначе Заказ.УстановитьНовыйНомер(); ПринудительноРегистрироватьДокумент = Истина; // Используется в других конфигурациях // ПрефиксацияОбъектовСобытия.УстановитьПрефиксИнформационнойБазыИОрганизации(Заказ, Истина, ""); КонецЕсли; КонецЕсли; ИнформацияОКлиенте = ПолучитьИнформациюОКомпанииКонтакте(ОбщиеНастройки, МенеджерВременныхТаблиц, ИдКомпании, ИдКонтакта, ИдРеквизита); Партнер = ИнформацияОКлиенте.Партнер; Контрагент = ИнформацияОКлиенте.Контрагент; КонтактноеЛицо = ИнформацияОКлиенте.КонтактноеЛицо; ЕстьКритическиеОшибки = ИнформацияОКлиенте.ЕстьКритическиеОшибки; БанкСчетКонтрагента = Справочники.БанковскиеСчетаКонтрагентов.ПустаяСсылка(); #Область ПоискБанкСчетаРеквизита Если НЕ(ИдБанкСчетаРек = "" ИЛИ ИдБанкСчетаРек = "0") Тогда БанкСчетКонтрагента = ПолучитьОбъектПоИдентификаторуИзВременнойТаблицы(МенеджерВременныхТаблиц, "ВремИдентификаторыБанкСчетов", ИдБанкСчетаРек); Если Не ЗначениеЗаполнено(БанкСчетКонтрагента) Тогда Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Не найден банковский счет реквизита. Попытка создания банковского счета с Ид: " + ИдБанкСчетаРек); БанкСчетКонтрагента = СформироватьБанковскийСчетПоИд(ОбщиеНастройки, ИдБанкСчетаРек); КонецЕсли; Если НЕ ЗначениеЗаполнено(БанкСчетКонтрагента) Тогда Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, "Не найден банковский счет с Ид: " + ИдБанкСчетаРек); КонецЕсли; КонецЕсли; #КонецОбласти Ответственный = Справочники.Пользователи.ПустаяСсылка(); #Область ПоискОтветственного Если ЗначениеЗаполнено(ИдСотрудника) Тогда НайденнаяСтрока = ОбщиеНастройки.ТаблицаСопоставленияПользователей.Найти(ИдСотрудника, "ИдПользователя"); Если НайденнаяСтрока <> Неопределено Тогда Ответственный = НайденнаяСтрока.Пользователь1С; КонецЕсли; КонецЕсли; Если НЕ ЗначениеЗаполнено(Ответственный) Тогда Ответственный = Соглашение.Менеджер; КонецЕсли; #КонецОбласти Валюта = Справочники.Валюты.НайтиПоКоду(КодВалюты); Если НЕ ЗначениеЗаполнено(Валюта) Тогда Валюта = Справочники.Валюты.НайтиПоКоду("643"); КонецЕсли; // СА + 13.10.2021 Заказ.Организация = ОбщиеНастройки.НастройкиСинхронизацииСделок.Организация; Если не ЗначениеЗаполнено( Заказ.Склад) Тогда Заказ.Склад = Справочники.Склады.ПолучитьСсылку(новый УникальныйИдентификатор("a2f2b2e1-232e-11eb-80dd-00155d011313")); // Продажи в розница КонецЕсли; // СА - 13.10.2021 Заказ.Партнер = Партнер; Заказ.Контрагент = Контрагент; Заказ.КонтактноеЛицо = КонтактноеЛицо; Заказ.БанковскийСчетКонтрагента = БанкСчетКонтрагента; Заказ.Валюта = Валюта; Если ЗначениеЗаполнено(Контрагент) И ЗначениеЗаполнено(Заказ.Организация) И НЕ ЗначениеЗаполнено(Заказ.Договор) Тогда Если ПолучитьФункциональнуюОпцию("ИспользоватьДоговорыСКлиентами") И Заказ.Соглашение.ИспользуютсяДоговорыКонтрагентов Тогда Заказ.Договор = ПолучитьДоговор(ОбщиеНастройки, Заказ.Организация, Контрагент, Валюта); КонецЕсли; КонецЕсли; Заказ.ЦенаВключаетНДС = ЦенаВклНДС; Заказ.СуммаДокумента = СуммаДокумента; Заказ.Комментарий = КомментарийМенеджера; Приоритет = Справочники.Приоритеты.НайтиПоНаименованию("Средний"); Заказ.Приоритет = ?(ЗначениеЗаполнено(Заказ.Приоритет), Заказ.Приоритет, Приоритет); ХозяйственнаяОперация = Заказ.Соглашение.ХозяйственнаяОперация; ХозяйственнаяОперация = ?(ЗначениеЗаполнено(ХозяйственнаяОперация), ХозяйственнаяОперация, Перечисления.ХозяйственныеОперации.РеализацияКлиенту); Заказ.ХозяйственнаяОперация = ?(ЗначениеЗаполнено(Заказ.ХозяйственнаяОперация), Заказ.ХозяйственнаяОперация, ХозяйственнаяОперация); ФормаОплаты = Заказ.Соглашение.ФормаОплаты; Заказ.ФормаОплаты = ?(ЗначениеЗаполнено(Заказ.ФормаОплаты), Заказ.ФормаОплаты, ФормаОплаты); ПорядокОплаты = Заказ.Соглашение.ПорядокОплаты; ПорядокОплаты = ?(ЗначениеЗаполнено(ПорядокОплаты), ПорядокОплаты, Заказ.Договор.ПорядокОплаты); ПорядокОплаты = ?(ЗначениеЗаполнено(ПорядокОплаты), ПорядокОплаты, Перечисления.ПорядокОплатыПоСоглашениям.РасчетыВРубляхОплатаВРублях); Заказ.ПорядокОплаты = ?(ЗначениеЗаполнено(Заказ.ПорядокОплаты), Заказ.ПорядокОплаты, ПорядокОплаты); НалогообложениеНДС = ЗначениеНастроекПовтИсп.НалогообложениеНДС(Заказ.Организация, Заказ.Склад, Заказ.Договор, Заказ.НаправлениеДеятельности, Заказ.Дата); НалогообложениеНДС = ?(ЗначениеЗаполнено(НалогообложениеНДС), НалогообложениеНДС, Перечисления.ТипыНалогообложенияНДС.ПродажаОблагаетсяНДС); Заказ.НалогообложениеНДС = ?(ЗначениеЗаполнено(Заказ.НалогообложениеНДС), Заказ.НалогообложениеНДС, НалогообложениеНДС); Заказ.СкидкиРассчитаны = Истина; Заказ.ДатаОтгрузки = ДатаОтгрузки; Заказ.ЖелаемаяДатаОтгрузки = ДатаОтгрузки; Заказ.Менеджер = Ответственный; Заказ.АдресДоставки = АдресДоставки; Если Б24_Синхр_ОбщегоНазначенияПовтИсп.ВестиНезависимоПартнеровИКонтрагентов() Тогда лВидКонтактнойИнформации = Справочники.ВидыКонтактнойИнформации.ФактАдресКонтрагента; Иначе лВидКонтактнойИнформации = Справочники.ВидыКонтактнойИнформации.АдресПартнера; КонецЕсли; Заказ.АдресДоставкиЗначенияПолей = УправлениеКонтактнойИнформациейСлужебныйВызовСервера.КонтактнаяИнформацияПоПредставлению(АдресДоставки, лВидКонтактнойИнформации); Если НЕ ЗначениеЗаполнено(Заказ.АдресДоставки) Тогда НайденнаяСтрокаАдрес = Заказ.Контрагент.КонтактнаяИнформация.Найти(лВидКонтактнойИнформации); Если НайденнаяСтрокаАдрес <> Неопределено Тогда Заказ.АдресДоставки = НайденнаяСтрокаАдрес.Представление; Заказ.АдресДоставкиЗначенияПолей = УправлениеКонтактнойИнформациейСлужебныйВызовСервера.КонтактнаяИнформацияПоПредставлению(АдресДоставки, лВидКонтактнойИнформации); КонецЕсли; КонецЕсли; #Область ЗаполнениеБанковскогоСчетаОрганизации ВремСтруктураДанных = Новый Структура; ВремСтруктураДанных.Вставить("Организация" , Заказ.Организация); ВремСтруктураДанных.Вставить("ФормаОплаты" , Заказ.ФормаОплаты); ВремСтруктураДанных.Вставить("БанковскийСчет" , Заказ.БанковскийСчет); ВремСтруктураДанных.Вставить("Валюта" , Заказ.Валюта); ВремСтруктураДанных.Вставить("НаправлениеДеятельности", Заказ.НаправлениеДеятельности); Заказ.БанковскийСчет = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетОрганизацииПоУмолчанию(ВремСтруктураДанных); #КонецОбласти #Область ЗаполнениеГрафикаОплаты Если ПолучитьФункциональнуюОпцию("ИспользоватьГрафикиОплаты") Тогда ГрафикОплаты = Заказ.Соглашение.ГрафикОплаты; Если НЕ ЗначениеЗаполнено(ГрафикОплаты) Тогда Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("ФормаОплаты", Заказ.ФормаОплаты); Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | ВремГрафикиОплаты.ГрафикОплаты КАК ГрафикОплаты |ИЗ | ВремГрафикиОплаты КАК ВремГрафикиОплаты |ГДЕ | ВремГрафикиОплаты.ФормаОплаты = &ФормаОплаты"; тзнГО = Запрос.Выполнить().Выгрузить();; Если тзнГО.Количество()> 0 Тогда ГрафикОплаты = тзнГО[0].ГрафикОплаты; КонецЕсли; КонецЕсли; Заказ.ГрафикОплаты = ?(ЗначениеЗаполнено(Заказ.ГрафикОплаты), Заказ.ГрафикОплаты, ГрафикОплаты); Если Заказ.ЭтапыГрафикаОплаты.Количество() = 0 Тогда Для Каждого ТекЭтапыГрафика Из Заказ.ГрафикОплаты.Этапы Цикл НовыйЭтапГрафикаОплаты = Заказ.ЭтапыГрафикаОплаты.Добавить(); НовыйЭтапГрафикаОплаты.ВариантОплаты = ТекЭтапыГрафика.ВариантОплаты; НовыйЭтапГрафикаОплаты.ДатаПлатежа = Заказ.ЖелаемаяДатаОтгрузки + ТекЭтапыГрафика.Сдвиг*60*60*24; НовыйЭтапГрафикаОплаты.Сдвиг = ТекЭтапыГрафика.Сдвиг; НовыйЭтапГрафикаОплаты.ПроцентПлатежа = ТекЭтапыГрафика.ПроцентПлатежа; НовыйЭтапГрафикаОплаты.ПроцентЗалогаЗаТару = ТекЭтапыГрафика.ПроцентЗалогаЗаТару; НовыйЭтапГрафикаОплаты.СуммаПлатежа = СуммаДокумента*ТекЭтапыГрафика.ПроцентПлатежа/100; КонецЦикла; КонецЕсли; КонецЕсли; #КонецОбласти #Область ЗаполнениеСтатуса СтатусЗаказа = Перечисления.СтатусыЗаказовКлиентов.НеСогласован; Если ИнформацияОСтатусах <> Неопределено И ТипЗнч(тзнСтатусов) = Тип("ТаблицаЗначений") Тогда Если ИнформацияОСтатусах.ИсточникСтатусовЗаказов = "СтатусыЗаказов" Тогда НайденныеСтроки = тзнСтатусов.НайтиСтроки(Новый Структура("ИдСтатуса", ИдСтатуса)); Если НайденныеСтроки.Количество() >0 Тогда НайденнаяСтрока = НайденныеСтроки[0]; Иначе НайденнаяСтрока = Неопределено; КонецЕсли; Если НайденнаяСтрока <> Неопределено Тогда СтатусЗаказа = НайденнаяСтрока.Статус; Иначе СтатусЗаказа = ?(ЗначениеЗаполнено(Заказ.Статус), Заказ.Статус, СтатусЗаказа); КонецЕсли; Иначе СтатусЗаказа = ?(ЗначениеЗаполнено(Заказ.Статус), Заказ.Статус, СтатусЗаказа); КонецЕсли; Иначе СтатусЗаказа = ?(ЗначениеЗаполнено(Заказ.Статус), Заказ.Статус, СтатусЗаказа); КонецЕсли; Если Закрыт И НЕ ЗначениеЗаполнено(СтатусЗаказа) Тогда Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, "Документ закрыт, но не найден статус заказа"); КонецЕсли; Заказ.Статус = СтатусЗаказа; #КонецОбласти #Область ДобавлениеДополнительныхРеквизитовДокумента НайденноеСвойствоТЧ = Заказ.ДополнительныеРеквизиты.Найти(ОбщиеНастройки.ПредопределенноеСвойствоТрекНомераЗаказаБитрикс24, "Свойство"); Если НайденноеСвойствоТЧ = Неопределено Тогда НовыйРеквизит = Заказ.ДополнительныеРеквизиты.Добавить(); НовыйРеквизит.Значение = ТрекНомер; НовыйРеквизит.Свойство = ОбщиеНастройки.ПредопределенноеСвойствоТрекНомераЗаказаБитрикс24; Иначе НайденноеСвойствоТЧ.Значение = ТрекНомер; КонецЕсли; НайденноеСвойствоТЧ = Заказ.ДополнительныеРеквизиты.Найти(ОбщиеНастройки.ПредопределенноеСвойствоКомментарияЗаказаБитрикс24, "Свойство"); Если НайденноеСвойствоТЧ = Неопределено Тогда НовыйРеквизит = Заказ.ДополнительныеРеквизиты.Добавить(); НовыйРеквизит.Значение = КомментарийПользователя; НовыйРеквизит.Свойство = ОбщиеНастройки.ПредопределенноеСвойствоКомментарияЗаказаБитрикс24; Иначе НайденноеСвойствоТЧ.Значение = КомментарийПользователя; КонецЕсли; НайденноеСвойствоТЧ = Заказ.ДополнительныеРеквизиты.Найти(ОбщиеНастройки.ПредопределенноеСвойствоНомераЗаказаБитрикс24, "Свойство"); Если НайденноеСвойствоТЧ = Неопределено Тогда НовыйРеквизит = Заказ.ДополнительныеРеквизиты.Добавить(); НовыйРеквизит.Значение = ИдБитрикс24; НовыйРеквизит.Свойство = ОбщиеНастройки.ПредопределенноеСвойствоНомераЗаказаБитрикс24; Иначе НайденноеСвойствоТЧ.Значение = ИдБитрикс24; КонецЕсли; НайденноеСвойствоТЧ = Заказ.ДополнительныеРеквизиты.Найти(ОбщиеНастройки.ПредопределенноеСвойствоДатыЗаказаБитрикс24, "Свойство"); Если НайденноеСвойствоТЧ = Неопределено Тогда НовыйРеквизит = Заказ.ДополнительныеРеквизиты.Добавить(); НовыйРеквизит.Значение = ДатаНачала; НовыйРеквизит.Свойство = ОбщиеНастройки.ПредопределенноеСвойствоДатыЗаказаБитрикс24; Иначе НайденноеСвойствоТЧ.Значение = ДатаНачала; КонецЕсли; #КонецОбласти #Область ДобавлениеДополнительногоРеквизитаСтатуса Если ИнформацияОСтатусах <> Неопределено И ТипЗнч(тзнСтатусов) = Тип("ТаблицаЗначений") Тогда Если ИнформацияОСтатусах.ИсточникСтатусовЗаказов = "СвойствоЗаказов" Тогда Если ЗначениеЗаполнено(ИнформацияОСтатусах.СвойствоЗаказа) Тогда ЗначениеСвойства = Неопределено; НайденнаяСтрока = тзнСтатусов.Найти(ИдСтатуса, "ИдСтатуса"); Если НайденнаяСтрока <> Неопределено Тогда ЗначениеСвойства = НайденнаяСтрока.Статус; КонецЕсли; НайденноеСвойствоТЧ = Заказ.ДополнительныеРеквизиты.Найти(ИнформацияОСтатусах.СвойствоЗаказа, "Свойство"); Если НайденноеСвойствоТЧ = Неопределено Тогда НовыйРеквизит = Заказ.ДополнительныеРеквизиты.Добавить(); НовыйРеквизит.Значение = ЗначениеСвойства; НовыйРеквизит.Свойство = ИнформацияОСтатусах.СвойствоЗаказа; Иначе НайденноеСвойствоТЧ.Значение = ЗначениеСвойства; КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; #КонецОбласти #Область ДобавлениеСлужбыДоставки Если ИнформацияОДоставках <>Неопределено Тогда Если ИнформацияОДоставках.ИсточникСлужбДоставкиЗаказов = "СпособыДоставкиЗаказов" Тогда НайденнаяСтрока = ИнформацияОДоставках.СоответствияСпособовДоставкиЗаказа.Найти(ИдДоставки, "ИдСлужбы"); Если НайденнаяСтрока <> Неопределено Тогда Заказ.СпособДоставки = НайденнаяСтрока.СпособДоставки; Заказ.ПеревозчикПартнер = НайденнаяСтрока.СлужбаДоставки; НайденнаяСтрокаАдрес = Заказ.ПеревозчикПартнер.КонтактнаяИнформация.Найти(Справочники.ВидыКонтактнойИнформации.АдресПартнера); Если НайденнаяСтрокаАдрес <> Неопределено Тогда Заказ.АдресДоставкиПеревозчика = НайденнаяСтрокаАдрес.Представление; Заказ.АдресДоставкиПеревозчикаЗначенияПолей = УправлениеКонтактнойИнформациейСлужебныйВызовСервера.КонтактнаяИнформацияПоПредставлению(НайденнаяСтрокаАдрес.Представление, Справочники.ВидыКонтактнойИнформации.АдресПартнера); КонецЕсли; КонецЕсли; Иначе Если ЗначениеЗаполнено(ИнформацияОДоставках.СоответствияСЗначениямиСвойствЗаказа) Тогда ЗначениеСвойства = Неопределено; НайденнаяСтрока = ИнформацияОДоставках.СоответствияСЗначениямиСвойствЗаказа.Найти(ИдДоставки, "ИдСлужбы"); Если НайденнаяСтрока <> Неопределено Тогда ЗначениеСвойства = НайденнаяСтрока.Служба; КонецЕсли; НайденноеСвойствоТЧ = Заказ.ДополнительныеРеквизиты.Найти(ИнформацияОДоставках.СвойствоЗаказа, "Свойство"); Если НайденноеСвойствоТЧ = Неопределено Тогда НовыйРеквизит = Заказ.ДополнительныеРеквизиты.Добавить(); НовыйРеквизит.Значение = ЗначениеСвойства; НовыйРеквизит.Свойство = ИнформацияОДоставках.СвойствоЗаказа; Иначе НайденноеСвойствоТЧ.Значение = ЗначениеСвойства; КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; #КонецОбласти #Область ЗаполнениеТоваров тзнТоваровАрх = Заказ.Товары.Выгрузить(); Заказ.Товары.Очистить(); тзнСвойстваПозиций = Новый ТаблицаЗначений; тзнСвойстваПозиций.Колонки.Добавить("ИдентификаторПозиции"); тзнСвойстваПозиций.Колонки.Добавить("КлючСвязи"); тзнСвойстваПозиций.Колонки.Добавить("НаименованиеСвойства"); тзнСвойстваПозиций.Колонки.Добавить("КодСвойства"); тзнСвойстваПозиций.Колонки.Добавить("ИдентификаторСвойства"); тзнСвойстваПозиций.Колонки.Добавить("Значение"); тзнСвойстваПозиций.Колонки.Добавить("Номенклатура"); тзнСвойстваПозиций.Колонки.Добавить("Характеристика"); Для Каждого ТоварЗаказа Из ЭлементыКорзины Цикл ИдПозиции = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Формат(ТоварЗаказа.Получить("id"),"ЧГ=0")); КлючСвязиПозиции = Число(Прав(ИдПозиции, 5)); ИдТовара = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Формат(ТоварЗаказа.Получить("productId"),"ЧГ=0")); НаименованиеТовара = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Строка(ТоварЗаказа.Получить("name"))); ВнешнийКодПозиции = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Строка(ТоварЗаказа.Получить("productXmlId"))); КодЕдИзм = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Формат(ТоварЗаказа.Получить("measureCode"),"ЧГ=0")); НаименованиеЕдИзм = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Формат(ТоварЗаказа.Получить("measureName"),"ЧГ=0")); Количество = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Число"), Формат(ТоварЗаказа.Получить("quantity"),"ЧРД=.; ЧГ=0")); //БазоваяЦена = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Число"), Формат(ТоварЗаказа.Получить("basePrice"),"ЧРД=.; ЧГ=0")); Цена = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Число"), Формат(ТоварЗаказа.Получить("price"),"ЧРД=.; ЧГ=0")); //НалогВключен = ТоварЗаказа.Получить("vatIncluded") = "Y"; СтавкаНалога = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Число"), Формат(ТоварЗаказа.Получить("vatRate"),"ЧРД=.; ЧГ=0"))*100; СтавкаНалога = ?(ЗначениеЗаполнено(СтавкаНалога),СтавкаНалога, 0); //Скидка = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Число"), Формат(ТоварЗаказа.Получить("discountPrice"),"ЧРД=.; ЧГ=0")); // ПроцентСкидки = 0; СвойстваПозиции = ТоварЗаказа.Получить("properties"); ЕдиницаИзмерения = Справочники.УпаковкиЕдиницыИзмерения.ПустаяСсылка(); #Область ПоискЕдиницыИзмерения Если ЗначениеЗаполнено(КодЕдИзм) Тогда ЕдиницаИзмерения = Справочники.УпаковкиЕдиницыИзмерения.НайтиПоКоду(КодЕдИзм);; КонецЕсли; Если Не ЗначениеЗаполнено(ЕдиницаИзмерения) И ЗначениеЗаполнено(НаименованиеЕдИзм) Тогда ЕдиницаИзмерения = Справочники.УпаковкиЕдиницыИзмерения.НайтиПоНаименованию(НаименованиеЕдИзм);; КонецЕсли; Если Не ЗначениеЗаполнено(ЕдиницаИзмерения) Тогда Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Не найдена единица измерения по ид. Попытка создания единицы измерения с Ид: " + КодЕдИзм); ЕдиницаИзмерения = СформироватьЕдиницуИзмеренияПоИд(ОбщиеНастройки, КодЕдИзм); КонецЕсли; #КонецОбласти Номенклатура = Справочники.Номенклатура.ПустаяСсылка(); Характеристика = Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка(); #Область ПоискТовара Если ЗначениеЗаполнено(ВнешнийКодПозиции) Тогда СтруктураИдентификаторовТовара = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьДвеСоставныеЧастиИзСтроки(ВнешнийКодПозиции, "#"); ИдВнешнийНоменклатуры = СтруктураИдентификаторовТовара.ПерваяЧасть; ИдВнешнийХарактеристики = СтруктураИдентификаторовТовара.ВтораяЧасть; Если ЗначениеЗаполнено(ИдВнешнийНоменклатуры) Тогда Номенклатура = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("СправочникСсылка.Номенклатура"), ИдВнешнийНоменклатуры); КонецЕсли; Если ЗначениеЗаполнено(ИдВнешнийХарактеристики) Тогда Характеристика = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("СправочникСсылка.ХарактеристикиНоменклатуры"), ИдВнешнийХарактеристики); КонецЕсли; КонецЕсли; Если ЗначениеЗаполнено(ИдТовара) И НЕ ЗначениеЗаполнено(Номенклатура) Тогда ИнформацияОНоменклатуре = Неопределено; Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("Идентификатор", ИдТовара); Запрос.Текст = "ВЫБРАТЬ | ВремИдентификаторы.Объект КАК Объект, | ВремИдентификаторы.ПодчиненныйОбъект КАК ПодчиненныйОбъект |ИЗ | ВремИдентификаторыТоваров КАК ВремИдентификаторы |ГДЕ | ВремИдентификаторы.Идентификатор = &Идентификатор"; ВыполненныйЗапрос = Запрос.Выполнить(); Если НЕ ВыполненныйЗапрос.Пустой() Тогда Выборка = ВыполненныйЗапрос.Выбрать(); Пока Выборка.Следующий() Цикл ИнформацияОНоменклатуре = Выборка; Прервать; КонецЦикла; КонецЕсли; // СА + 13.10.2021 Если ИнформацияОНоменклатуре = Неопределено И не ПустаяСтрока(ВнешнийКодПозиции) Тогда Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("Б_Идентифкатор", ВнешнийКодПозиции); Запрос.Текст = "ВЫБРАТЬ | СпрНоменклатура.Ссылка |ПОМЕСТИТЬ ВТ_НоменклатураПоБИдентифкатору |ИЗ | Справочник.Номенклатура КАК СпрНоменклатура |ГДЕ | СпрНоменклатура.Б_Идентификатор = &Б_Идентифкатор |; |ВЫБРАТЬ | ВремИдентификаторы.Объект КАК Объект, | ВремИдентификаторы.ПодчиненныйОбъект КАК ПодчиненныйОбъект |ИЗ | ВТ_НоменклатураПоБИдентифкатору КАК СпрНоменклатура | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВремИдентификаторыТоваров КАК ВремИдентификаторы | ПО СпрНоменклатура.Ссылка = ВремИдентификаторы.Объект |; |УНИЧТОЖИТЬ ВТ_НоменклатураПоБИдентифкатору |"; ВыполненныйЗапрос = Запрос.Выполнить(); Если НЕ ВыполненныйЗапрос.Пустой() Тогда Выборка = ВыполненныйЗапрос.Выбрать(); Пока Выборка.Следующий() Цикл ИнформацияОНоменклатуре = Выборка; Прервать; КонецЦикла; КонецЕсли; КонецЕсли; // СА - 13.10.2021 Если ИнформацияОНоменклатуре = Неопределено Тогда Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Не найден товар по ид. Попытка создания товара с Ид: " + ИдТовара); ИнформацияОНоменклатуре = СформироватьНоменклатуруПоИд(ОбщиеНастройки, ИдТовара); Если ИнформацияОНоменклатуре = Неопределено Тогда Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.КритическаяОшибка, "Не найдена информация о номенклатуре с Ид: " + ИдТовара); ЕстьКритическиеОшибки = Истина; Иначе Номенклатура = ИнформацияОНоменклатуре.Объект; Характеристика = ИнформацияОНоменклатуре.ПодчиненныйОбъект; КонецЕсли; Иначе Номенклатура = ИнформацияОНоменклатуре.Объект; Характеристика = ИнформацияОНоменклатуре.ПодчиненныйОбъект; КонецЕсли; КонецЕсли; Если НЕ ЗначениеЗаполнено(ВнешнийКодПозиции) И НЕ ЗначениеЗаполнено(ИдТовара) Тогда Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, "В заказе был указан не товар, а строка. Товар: " + НаименованиеТовара + " в сделку: " + Строка(Заказ) + " не будет указан."); КонецЕсли; #КонецОбласти Номенклатура = ?(ЗначениеЗаполнено(Номенклатура), Номенклатура, Справочники.Номенклатура.ПустаяСсылка()); Если Не ЗначениеЗаполнено(ЕдиницаИзмерения) Тогда ЕдиницаИзмерения = Номенклатура.ЕдиницаИзмерения КонецЕсли; Если СтавкаНалога = 0 Тогда СтавкаНДС = Перечисления.СтавкиНДС.БезНДС; ИначеЕсли СтавкаНалога = 18 Тогда СтавкаНДС = Перечисления.СтавкиНДС.НДС18; ИначеЕсли СтавкаНалога = 20 Тогда СтавкаНДС = Перечисления.СтавкиНДС.НДС20; ИначеЕсли СтавкаНалога = 10 Тогда СтавкаНДС = Перечисления.СтавкиНДС.НДС10; Иначе СтавкаНДС = Номенклатура.СтавкаНДС; КонецЕсли; Если НЕ ЗначениеЗаполнено(СтавкаНДС) Тогда СтавкаНДС = Номенклатура.СтавкаНДС КонецЕсли; НоваяЗаписьТовара = Заказ.Товары.Добавить(); #Область ЗаполнениеСтрокиСтарымиДанными НайденныеСтроки = тзнТоваровАрх.НайтиСтроки(Новый Структура("Номенклатура, Характеристика", Номенклатура, Характеристика)); Если НайденныеСтроки.Количество() > 0 Тогда ЗаполнитьЗначенияСвойств(НоваяЗаписьТовара, НайденныеСтроки[0]); тзнТоваровАрх.Удалить(НайденныеСтроки[0]); КонецЕсли; #КонецОбласти НоваяЗаписьТовара.КлючСвязи = КлючСвязиПозиции; НоваяЗаписьТовара.Номенклатура = Номенклатура; НоваяЗаписьТовара.Характеристика = Характеристика; НоваяЗаписьТовара.Упаковка = ЕдиницаИзмерения; НоваяЗаписьТовара.СтавкаНДС = СтавкаНДС; НоваяЗаписьТовара.Склад = ?(ЗначениеЗаполнено(НоваяЗаписьТовара.Склад), НоваяЗаписьТовара.Склад, Заказ.Склад); НоваяЗаписьТовара.ВариантОбеспечения= ?(ЗначениеЗаполнено(НоваяЗаписьТовара.ВариантОбеспечения), НоваяЗаписьТовара.ВариантОбеспечения, Перечисления.ВариантыОбеспечения.НеТребуется); Если НоваяЗаписьТовара.Номенклатура.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Услуга ИЛИ НЕ ЗначениеЗаполнено(НоваяЗаписьТовара.Номенклатура) Тогда НоваяЗаписьТовара.Содержание = НаименованиеТовара; КонецЕсли; НоваяЗаписьТовара.Количество = Количество; НоваяЗаписьТовара.КоличествоУпаковок = Количество; НоваяЗаписьТовара.Цена = Цена; НоваяЗаписьТовара.ПроцентРучнойСкидки = 0; НоваяЗаписьТовара.СуммаРучнойСкидки = 0; НоваяЗаписьТовара.ПроцентАвтоматическойСкидки = 0; НоваяЗаписьТовара.СуммаАвтоматическойСкидки = 0; СтруктураДействий = Новый Структура; СтруктураПересчетаСуммы = ОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Заказ); СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы); СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы); СтруктураДействий.Вставить("ПересчитатьСумму"); СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать", Ложь)); СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки", Новый Структура("Очищать", Истина)); ОбработкаТабличнойЧастиВызовСервера.ОбработатьСтрокуТЧ(НоваяЗаписьТовара, СтруктураДействий, Неопределено); #Область ЗаполнениеСвойствПозицийЗаказов Если ТипЗнч(СвойстваПозиции) = Тип("Массив") Тогда Если СвойстваПозиции.Количество() = 0 Тогда НовоеСвойствоПозиции = тзнСвойстваПозиций.Добавить(); НовоеСвойствоПозиции.ИдентификаторПозиции = ИдПозиции; НовоеСвойствоПозиции.КлючСвязи = КлючСвязиПозиции; НовоеСвойствоПозиции.Номенклатура = Номенклатура; НовоеСвойствоПозиции.Характеристика = Характеристика; Иначе Для Каждого ТекСвойствоПозиции Из СвойстваПозиции Цикл ИдСвойстваПозицииПозиции = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Формат(ТекСвойствоПозиции.Получить("id"),"ЧГ=0")); ЗначениеСвойстваПозицииПозиции = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Формат(ТекСвойствоПозиции.Получить("value"),"ЧРД=.; ЧГ=0")); НаименованиеСвойстваПозицииПозиции = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), ТекСвойствоПозиции.Получить("name")); КодСвойстваПозицииПозиции = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), ТекСвойствоПозиции.Получить("code")); НовоеСвойствоПозиции = тзнСвойстваПозиций.Добавить(); НовоеСвойствоПозиции.ИдентификаторПозиции = ИдПозиции; НовоеСвойствоПозиции.КлючСвязи = КлючСвязиПозиции; НовоеСвойствоПозиции.Номенклатура = Номенклатура; НовоеСвойствоПозиции.Характеристика = Характеристика; НовоеСвойствоПозиции.ИдентификаторСвойства = ИдСвойстваПозицииПозиции; НовоеСвойствоПозиции.НаименованиеСвойства = НаименованиеСвойстваПозицииПозиции; НовоеСвойствоПозиции.КодСвойства = КодСвойстваПозицииПозиции; НовоеСвойствоПозиции.Значение = ЗначениеСвойстваПозицииПозиции; КонецЦикла; КонецЕсли; Иначе НовоеСвойствоПозиции = тзнСвойстваПозиций.Добавить(); НовоеСвойствоПозиции.ИдентификаторПозиции = ИдПозиции; НовоеСвойствоПозиции.КлючСвязи = КлючСвязиПозиции; НовоеСвойствоПозиции.Номенклатура = Номенклатура; НовоеСвойствоПозиции.Характеристика = Характеристика; КонецЕсли; #КонецОбласти КонецЦикла; #Область ЗаполнениеСуммыДоставки СуммаДоставки = 0; Если Отгрузки <> Неопределено Тогда Для Каждого ТекОтгрузка Из Отгрузки Цикл СуммаДоставки = СуммаДоставки + Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Число"), Формат(ТекОтгрузка.Получить("priceDelivery"),"ЧРД=.; ЧГ=0")); КонецЦикла; КонецЕсли; Если СуммаДоставки > 0 Тогда НоменклатураДоставки = ОбщиеНастройки.НастройкиСинхронизацииЗаказов.НоменклатураДоставка; НоваяЗаписьТовара = Заказ.Товары.Добавить(); #Область ЗаполнениеСтрокиСтарымиДанными НайденныеСтроки = тзнТоваровАрх.НайтиСтроки(Новый Структура("Номенклатура, Характеристика", НоменклатураДоставки, Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка())); Если НайденныеСтроки.Количество() > 0 Тогда ЗаполнитьЗначенияСвойств(НоваяЗаписьТовара, НайденныеСтроки[0]); тзнТоваровАрх.Удалить(НайденныеСтроки[0]); КонецЕсли; #КонецОбласти НоваяЗаписьТовара.КлючСвязи = 9999; НоваяЗаписьТовара.Номенклатура = НоменклатураДоставки; НоваяЗаписьТовара.Характеристика = Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка(); НоваяЗаписьТовара.Упаковка = НоменклатураДоставки.ЕдиницаИзмерения; НоваяЗаписьТовара.СтавкаНДС = НоменклатураДоставки.СтавкаНДС; НоваяЗаписьТовара.Склад = ?(ЗначениеЗаполнено(НоваяЗаписьТовара.Склад), НоваяЗаписьТовара.Склад, Заказ.Склад); НоваяЗаписьТовара.ВариантОбеспечения= ?(ЗначениеЗаполнено(НоваяЗаписьТовара.ВариантОбеспечения), НоваяЗаписьТовара.ВариантОбеспечения, Перечисления.ВариантыОбеспечения.НеТребуется); Если НоваяЗаписьТовара.Номенклатура.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Услуга ИЛИ НЕ ЗначениеЗаполнено(НоваяЗаписьТовара.Номенклатура) Тогда НоваяЗаписьТовара.Содержание = НоменклатураДоставки.НаименованиеПолное; КонецЕсли; НоваяЗаписьТовара.Количество = 1; НоваяЗаписьТовара.КоличествоУпаковок = 1; НоваяЗаписьТовара.Цена = СуммаДоставки; НоваяЗаписьТовара.ПроцентАвтоматическойСкидки = 0; НоваяЗаписьТовара.СуммаАвтоматическойСкидки = 0; НоваяЗаписьТовара.ПроцентРучнойСкидки = 0; НоваяЗаписьТовара.ПроцентРучнойСкидки = 0; СтруктураДействий = Новый Структура; СтруктураПересчетаСуммы = ОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Заказ); СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы); СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы); СтруктураДействий.Вставить("ПересчитатьСумму"); СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать", Ложь)); СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки", Новый Структура("Очищать", Истина)); ОбработкаТабличнойЧастиВызовСервера.ОбработатьСтрокуТЧ(НоваяЗаписьТовара, СтруктураДействий, Неопределено); КонецЕсли; #КонецОбласти #КонецОбласти ЭтоНовыйОбъект = Заказ.Ссылка.Пустая()=Истина; ТаблицаСвойств = ПолучитьТаблицуСвойствЗаказов(ОбщиеНастройки, МенеджерВременныхТаблиц, СвойстваЗаказа); ЗаполнениеСвойствЗаказа(ОбщиеНастройки, ТаблицаСвойств, Заказ, ЭтоНовыйОбъект, Ложь); #Область ПроведениеДокумента ОтменаПроведенияСОшибкой = Ложь; Заказ.ДополнительныеСвойства.Вставить("ЗагрузкаСБитрикс24", Истина); Если НЕ Отменен Тогда Если (ОбщиеНастройки.НастройкиСинхронизацииЗаказов.РежимЗаписиДокумента = "Проводить закрытые" И Закрыт) ИЛИ ОбщиеНастройки.НастройкиСинхронизацииЗаказов.РежимЗаписиДокумента = "Проводить" Тогда Попытка Заказ.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Проведен документ: " + Строка(Заказ)); Исключение Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, "Во время проведения документа: " + Строка(Заказ) + " возникли ошибки."); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, ОписаниеОшибки()); ЕстьКритическиеОшибки = Истина; Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Попытка записи документа: " + Строка(Заказ)); Попытка Заказ.Записать(РежимЗаписиДокумента.Запись); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Записан документ: " + Строка(Заказ)); Исключение Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, "Во время записи документа: " + Строка(Заказ) + " возникли ошибки."); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, ОписаниеОшибки()); ОбщиеНастройки.ВыполненоБезОшибок = Ложь; КонецПопытки; КонецПопытки; Иначе Попытка Если ЭтоНовыйОбъект Тогда Заказ.Записать(РежимЗаписиДокумента.Запись); ИначеЕсли Заказ.Проведен Тогда Заказ.Записать(РежимЗаписиДокумента.Проведение); Иначе Заказ.Записать(РежимЗаписиДокумента.ОтменаПроведения); КонецЕсли; Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Записан: " + Строка(Заказ)); Исключение Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, "Во время записи документа: " + Строка(Заказ) + " возникли ошибки."); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, ОписаниеОшибки()); ОтменаПроведенияСОшибкой = Истина; ЕстьКритическиеОшибки = Истина; ОбщиеНастройки.ВыполненоБезОшибок = Ложь; КонецПопытки; КонецЕсли; Иначе Если ОбщиеНастройки.НастройкиСинхронизацииЗаказов.КогдаОтменен = "Помечать на удаление" Тогда Если НЕ Заказ.ПометкаУдаления Тогда Заказ.ПометкаУдаления = Истина; Попытка Заказ.Записать(РежимЗаписиДокумента.ОтменаПроведения); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Помечен на удаление документ: " + Строка(Заказ)); Исключение ЕстьКритическиеОшибки = Истина; Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, "Ошибка при установке пометки на удаление документа: " + Строка(Заказ) + Символы.ПС + ОписаниеОшибки()); КонецПопытки; КонецЕсли; ИначеЕсли ОбщиеНастройки.НастройкиСинхронизацииЗаказов.КогдаОтменен = "Отменять проведение" Тогда Если Заказ.Проведен Тогда Попытка Заказ.Записать(РежимЗаписиДокумента.ОтменаПроведения); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Отменено проведение у документа: " + Строка(Заказ)); Исключение ЕстьКритическиеОшибки = Истина; ОтменаПроведенияСОшибкой = Истина; Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, "Ошибка при отмене проведения документа: " + Строка(Заказ) + Символы.ПС + ОписаниеОшибки()); КонецПопытки; КонецЕсли; Иначе КонецЕсли; КонецЕсли; #КонецОбласти #Область ДобавлениеСостоянияЗаказа Если ЗначениеЗаполнено(Заказ.Ссылка) Тогда Если ИнформацияОСтатусах <> Неопределено Тогда Если ИнформацияОСтатусах.ИсточникСтатусовЗаказов = "СостоянияЗаказов" Тогда тзнСтатусов = ИнформацияОСтатусах.СоответствияССостояниямиЗаказа; НайденныеСтроки = тзнСтатусов.НайтиСтроки(Новый Структура("ИдСтатуса", ИдСтатуса)); Если НайденныеСтроки.Количество() > 0 Тогда НайденнаяСтрока = НайденныеСтроки[0]; Иначе НайденнаяСтрока = Неопределено; КонецЕсли; Если НайденнаяСтрока <> Неопределено Тогда НаборЗаписей = РегистрыСведений.СостоянияЗаказовКлиентов.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Заказ.Установить(Заказ.Ссылка); НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Заказ = Заказ.Ссылка; НоваяЗапись.ДатаСобытия = ТекущаяДатаСеанса(); НоваяЗапись.Состояние = НайденнаяСтрока.Статус; НаборЗаписей.ДополнительныеСвойства.Вставить("ЗагрузкаСБитрикс24", Истина); НаборЗаписей.Записать(Истина); КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; #КонецОбласти Если ЗначениеЗаполнено(Заказ.Ссылка) Тогда Для Каждого ТекСвойствоПозицииЗаказа Из тзнСвойстваПозиций Цикл НоваяЗаписьСвойстваПозиции = РегистрыСведений.Б24_Синхр_СвойстваПозицийЗаказов.СоздатьМенеджерЗаписи(); ЗаполнитьЗначенияСвойств(НоваяЗаписьСвойстваПозиции, ТекСвойствоПозицииЗаказа); НоваяЗаписьСвойстваПозиции.Объект = Заказ.Ссылка; НоваяЗаписьСвойстваПозиции.Записать(Истина); КонецЦикла; ОбновитьДополнительнуюИнформациюОЗаказе(Заказ.Ссылка, ТекЭлемент); Б24_Синхр_СинхронизацияВызовСервера.ЗаписатьИдБ24Объекта(ОбщиеНастройки, ОбщиеНастройки.ТипыОбъектовОбмена.Заказ, Заказ.Ссылка, ИдБитрикс24); Если ПринудительноРегистрироватьДокумент Тогда Б24_Синхр_РегистрацияИзмененийВызовСервера.ДобавитьОбъектВТаблицуИзменений(ОбщиеНастройки.НастройкаСинхронизации, ОбщиеНастройки.ТипыОбъектовОбмена.Заказ, Заказ.Ссылка); КонецЕсли; тзнСвойстваПозиций.Свернуть("ИдентификаторПозиции, КлючСвязи"); Для Каждого ТекСвойствоПозицииЗаказа Из тзнСвойстваПозиций Цикл ДанныеОПозиции = Новый Структура; ДанныеОПозиции.Вставить("Объект" , Заказ.Ссылка); ДанныеОПозиции.Вставить("ПодчиненныйОбъект" , ТекСвойствоПозицииЗаказа.КлючСвязи); Б24_Синхр_СинхронизацияВызовСервера.ЗаписатьИдБ24Объекта(ОбщиеНастройки, ОбщиеНастройки.ТипыОбъектовОбмена.ТоварыЗаказа, ДанныеОПозиции, ТекСвойствоПозицииЗаказа.ИдентификаторПозиции); КонецЦикла; Если НЕ ОтменаПроведенияСОшибкой Тогда ЗаполнениеСвойствЗаказа(ОбщиеНастройки, ТаблицаСвойств, Заказ.Ссылка, ЭтоНовыйОбъект, Истина); КонецЕсли; Если Б24_Синхр_СинхронизацияПовтИсп.НастройкиСинхронизацииЗаказов(ОбщиеНастройки.НастройкаСинхронизации, "ЗагружатьОплаты") Тогда ЕстьКритическиеОшибкиОплат = ЗагрузитьОбновитьОплатыЗаказов(ОбщиеНастройки, Оплаты, Заказ.Ссылка, МенеджерВременныхТаблиц); ЕстьКритическиеОшибки = ?(ЕстьКритическиеОшибки, ЕстьКритическиеОшибки, ЕстьКритическиеОшибкиОплат); КонецЕсли; Если Б24_Синхр_СинхронизацияПовтИсп.НастройкиСинхронизацииЗаказов(ОбщиеНастройки.НастройкаСинхронизации, "ЗагружатьОтгрузки") Тогда ЕстьКритическиеОшибкиОтгрузок = ЗагрузитьОбновитьОтгрузкиЗаказов(ОбщиеНастройки, Отгрузки, Заказ.Ссылка, МенеджерВременныхТаблиц); ЕстьКритическиеОшибки = ?(ЕстьКритическиеОшибки, ЕстьКритическиеОшибки, ЕстьКритическиеОшибкиОтгрузок); КонецЕсли; КонецЕсли; КонецЦикла; Результат.Добавить((СформироватьПростуюСтруктуруСИд(ИдБитрикс24, НЕ ЕстьКритическиеОшибки))); пОбщиеНастройки.НомерСообщения = ОбщиеНастройки.НомерСообщения; // чтобы лог не затерся. Возврат Результат; КонецФункции Процедура ОбновитьДополнительнуюИнформациюОЗаказе(Заказ, ИнформацияОЗаказе) Экспорт НоваяЗаписьИнфоЗаказа = РегистрыСведений.Б24_Синхр_ИнформацияОЗаказах.СоздатьМенеджерЗаписи(); НоваяЗаписьИнфоЗаказа.Заказ = Заказ; НоваяЗаписьИнфоЗаказа.ДополнительныеДанные = Новый ХранилищеЗначения(ИнформацияОЗаказе); НоваяЗаписьИнфоЗаказа.Записать(); КонецПроцедуры Функция ПолучитьТаблицуСвойствЗаказов(ОбщиеНастройки, МенеджерВременныхТаблиц, СвойстваЗаказа) тзнЗначенийСвойствТовара = Новый ТаблицаЗначений; тзнЗначенийСвойствТовара.Колонки.Добавить("Свойство"); тзнЗначенийСвойствТовара.Колонки.Добавить("ЗначениеСвойства"); тзнЗначенийСвойствТовара.Колонки.Добавить("ЭтоДополнительноеСведение"); мСвойстваИсключения = ОбщиеНастройки.НеЗагружаемыеЗначенияСвойств; Для Каждого ТекСвойствоЗаказа Из СвойстваЗаказа Цикл ИдСвойстваЗаказа = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Формат(ТекСвойствоЗаказа.Получить("orderPropsId"),"ЧГ=0")); ЗначениеСвойстваСПортала = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Формат(ТекСвойствоЗаказа.Получить("value"),"ЧРД=.; ЧГ=0")); СвойствоЗаказа = ПолучитьОбъектПоИдентификаторуИзВременнойТаблицы(МенеджерВременныхТаблиц, "ВремСвойства", ИдСвойстваЗаказа); Если ЗначениеЗаполнено(СвойствоЗаказа) Тогда Если мСвойстваИсключения.Найти(СвойствоЗаказа) <> Неопределено Тогда Продолжить; КонецЕсли; НовоеЗначениеСвойстваТовара = тзнЗначенийСвойствТовара.Добавить(); НовоеЗначениеСвойстваТовара.Свойство = СвойствоЗаказа; НовоеЗначениеСвойстваТовара.ЭтоДополнительноеСведение = СвойствоЗаказа.ЭтоДополнительноеСведение; ТипЗначенияСвойства = СвойствоЗаказа.ТипЗначения; Попытка Если ТипЗначенияСвойства.СодержитТип(Тип("Строка")) Тогда НовоеЗначениеСвойстваТовара.ЗначениеСвойства = ЗначениеСвойстваСПортала; ИначеЕсли ТипЗначенияСвойства.СодержитТип(Тип("Булево")) Тогда НовоеЗначениеСвойстваТовара.ЗначениеСвойства = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Булево"), ЗначениеСвойстваСПортала); ИначеЕсли ТипЗначенияСвойства.СодержитТип(Тип("Число")) Тогда НовоеЗначениеСвойстваТовара.ЗначениеСвойства = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Число"), ЗначениеСвойстваСПортала); ИначеЕсли ТипЗначенияСвойства.СодержитТип(Тип("Дата")) Тогда НовоеЗначениеСвойстваТовара.ЗначениеСвойства = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Дата"), ЗначениеСвойстваСПортала); ИначеЕсли ТипЗначенияСвойства.СодержитТип(Тип("СправочникСсылка.Пользователи")) Тогда НайденнаяСтрока = ОбщиеНастройки.ТаблицаСопоставленияПользователей.Найти( ЗначениеСвойстваСПортала, "ИдПользователя"); Если НайденнаяСтрока <> Неопределено Тогда НовоеЗначениеСвойстваТовара.ЗначениеСвойства = НайденнаяСтрока.Пользователь1С; КонецЕсли; ИначеЕсли ТипЗначенияСвойства.СодержитТип(Тип("СправочникСсылка.ЗначенияСвойствОбъектов")) Тогда НовоеЗначениеСвойстваТовара.ЗначениеСвойства = ПолучитьОбъектПоИдентификаторуИзВременнойТаблицы(МенеджерВременныхТаблиц, "ВремИдентификаторыЗначенийСвойств", ЗначениеСвойстваСПортала); Иначе НовоеЗначениеСвойстваТовара.ПоддерживаетсяСвойство = Ложь; КонецЕсли; Исключение НовоеЗначениеСвойстваТовара.ПоддерживаетсяСвойство = Ложь; Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Не удалось обработать значение свойства: " + Строка(ЗначениеСвойстваСПортала) + " свойства: " + Строка(СвойствоЗаказа)); КонецПопытки; КонецЕсли; КонецЦикла; Возврат тзнЗначенийСвойствТовара; КонецФункции Процедура ЗаполнениеСвойствЗаказа(ОбщиеНастройки, ТаблицаСвойств, Объект, ЭтоНовыйОбъект, ЭтоДополнительноеСведение) Для Каждого ТекСвойство Из ТаблицаСвойств Цикл Если ТекСвойство.ЭтоДополнительноеСведение = ЭтоДополнительноеСведение Тогда Если ЭтоДополнительноеСведение Тогда НаборЗаписей = РегистрыСведений.ДополнительныеСведения.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Объект.Установить(Объект); НаборЗаписей.Прочитать(); Если ТипЗнч(Объект)=Тип("ДокументСсылка.ЗаказКлиента") И Б24_Синхр_СинхронизацияПовтИсп.НастройкиСинхронизацииЗаказов(ОбщиеНастройки.НастройкаСинхронизации, "ЗагружатьПользовательскиеПоляЗаказов") <> Истина Тогда Возврат; Иначе Для Каждого ТекСвойство Из ТаблицаСвойств Цикл ЕстьСвойство = Ложь; Для Каждого ТекСтрока Из НаборЗаписей Цикл Если ТекСтрока.Свойство = ТекСвойство.Свойство Тогда ЕстьСвойство = Истина; ТекСтрока.Значение = ТекСвойство.ЗначениеСвойства; КонецЕсли; КонецЦикла; Если ЕстьСвойство = Ложь Тогда НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Объект = Объект; НоваяЗапись.Свойство = ТекСвойство.Свойство; НоваяЗапись.Значение = ТекСвойство.ЗначениеСвойства; КонецЕсли; КонецЦикла; КонецЕсли; НаборЗаписей.ДополнительныеСвойства.Вставить("ЗагрузкаСБитрикс24", Истина); НаборЗаписей.Записать(); Иначе Если ТипЗнч(Объект)=Тип("ДокументОбъект.ЗаказКлиента") И Б24_Синхр_СинхронизацияПовтИсп.НастройкиСинхронизацииЗаказов(ОбщиеНастройки.НастройкаСинхронизации, "ЗагружатьПользовательскиеПоляЗаказов") <> Истина Тогда Возврат; Иначе Для Каждого ТекСвойство Из ТаблицаСвойств Цикл Если НЕ ЗначениеЗаполнено(ТекСвойство.ЗначениеСвойства)Тогда Если ЭтоНовыйОбъект Тогда Продолжить; КонецЕсли; Для Каждого ЗаполнениеСвойствоТовара Из Объект.ДополнительныеРеквизиты Цикл Если ЗаполнениеСвойствоТовара.Свойство = ТекСвойство.Свойство Тогда ЗаполнениеСвойствоТовара.Значение = Неопределено; КонецЕсли; КонецЦикла; Иначе ЕстьРеквизит = Ложь; Для Каждого ЗаполнениеСвойствоТовара Из Объект.ДополнительныеРеквизиты Цикл Если ЗаполнениеСвойствоТовара.Свойство = ТекСвойство.Свойство Тогда ЗаполнениеСвойствоТовара.Значение = ТекСвойство.ЗначениеСвойства; Если ТипЗнч(ТекСвойство.ЗначениеСвойства) = Тип("Строка") Тогда ЗаполнениеСвойствоТовара.ТекстоваяСтрока = ТекСвойство.ЗначениеСвойства; КонецЕсли; ЕстьРеквизит = Истина КонецЕсли; КонецЦикла; Если НЕ ЕстьРеквизит Тогда НовыйРеквизит = Объект.ДополнительныеРеквизиты.Добавить(); НовыйРеквизит.Свойство = ТекСвойство.Свойство; НовыйРеквизит.Значение = ТекСвойство.ЗначениеСвойства; Если ТипЗнч(ТекСвойство.ЗначениеСвойства) = Тип("Строка") Тогда НовыйРеквизит.ТекстоваяСтрока = ТекСвойство.ЗначениеСвойства; КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; КонецПроцедуры /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Функция ЗагрузитьОбновитьОтгрузкиЗаказов(ОбщиеНастройки, Отгрузки, Заказ, МенеджерВременныхТаблиц) ДокументОснование = Заказ; ЗагруженныеОбъекты = Новый Массив; РезультатЕстьКритическиеОшибки = Ложь; Для каждого ТекЭлемент Из Отгрузки Цикл #Область ПолучениеЗначенийЗаказа ИдБитрикс24 = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Формат(ТекЭлемент.Получить("id"),"ЧГ=0")); ИдЭлемента = ИдБитрикс24; Если ЗагруженныеОбъекты.Найти(ИдБитрикс24) <> Неопределено Тогда Продолжить; КонецЕсли; ЗагруженныеОбъекты.Добавить(ИдБитрикс24); ЕстьКритическиеОшибки = Ложь; НомерОтгрузкиБ24 = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Формат(ТекЭлемент.Получить("accountNumber"),"ЧГ=0")); НомерОтгрузкиБ24 = ?(ЗначениеЗаполнено(НомерОтгрузкиБ24), НомерОтгрузкиБ24, ИдБитрикс24); ДатаНачала = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Дата"), ТекЭлемент.Получить("dateInsert")); Если Не ЗначениеЗаполнено(ДатаНачала) Тогда ДатаНачала = ТекущаяДатаСеанса() КонецЕсли; ДатаОтгрузки = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Дата"), ТекЭлемент.Получить("deliveryDocDate")); Если Не ЗначениеЗаполнено(ДатаОтгрузки) Тогда ДатаОтгрузки = ДатаНачала + 7*24*60*60 КонецЕсли; ВнешнийИдентификатор= Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), ТекЭлемент.Получить("xmlId")); Комментарий = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), ТекЭлемент.Получить("comments")); Отгружен = ТекЭлемент.Получить("deducted") = "Y"; Отменен = ТекЭлемент.Получить("canceled") = "Y"; ДоставкаРазрешена = ТекЭлемент.Получить("allowDelivery") = "Y"; //ДатаОтмены = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Дата"), Формат(ТекЭлемент.Получить("dateCanceled"),"ЧГ=0")); //ИдПричиныОтмены = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Формат(ТекЭлемент.Получить("empCanceledId"),"ЧГ=0")); ИдСтатуса = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Формат(ТекЭлемент.Получить("statusId"),"ЧГ=0")); ИдДоставки = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Формат(ТекЭлемент.Получить("deliveryId"),"ЧГ=0")); СуммаДоставки = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Число"), Формат(ТекЭлемент.Получить("priceDelivery"),"ЧРД=.; ЧГ=0")); Закрыт = Отгружен; ТрекНомер = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Формат(ТекЭлемент.Получить("trackingNumber"),"ЧГ=0")); ЭлементыКорзины = Неопределено; ЭлементыКорзины = ТекЭлемент.Получить("shipmentItems"); ЭлементыКорзины = ?(ЭлементыКорзины = Неопределено, Новый Массив, ЭлементыКорзины); #КонецОбласти Если ОбщиеНастройки.НастройкиСинхронизацииЗаказов.Свойство("ИнформацияОСтатусах") Тогда ИнформацияОСтатусах = ОбщиеНастройки.НастройкиСинхронизацииЗаказов.ИнформацияОСтатусах; Если ИнформацияОСтатусах.ИсточникСтатусовОтгрузок = "СвойствоОтгрузок" Тогда тзнСтатусов = ИнформацияОСтатусах.СоответствияСЗначениямиСвойствОтгрузки; Иначе тзнСтатусов = ИнформацияОСтатусах.СоответствияССтатусамиОтгрузки; КонецЕсли; Иначе тзнСтатусов = Новый ТаблицаЗначений; тзнСтатусов.Колонки.Добавить("ИдСтатуса"); тзнСтатусов.Колонки.Добавить("Статус"); тзнСтатусов.Колонки.Добавить("НеЗагружать"); ИнформацияОСтатусах = Неопределено; КонецЕсли; Если ИнформацияОСтатусах <> Неопределено Тогда ПропускаемЗаказИзЗаСтатуса = Ложь; НайденнаяСтрока = тзнСтатусов.Найти(ИдСтатуса, "ИдСтатуса"); Если НайденнаяСтрока <> Неопределено Тогда ПропускаемЗаказИзЗаСтатуса = НайденнаяСтрока.НеЗагружать; КонецЕсли; Если ПропускаемЗаказИзЗаСтатуса Тогда Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, " Отгрузка с ид: " + Строка(ИдБитрикс24) + " будет пропущена т.к. у нее неподходящий статус"); Продолжить; КонецЕсли; КонецЕсли; #Область ПоискСозданиеОтгрузки ЭтоНоваяОтгрузка = Ложь; Отгрузка = ПолучитьОбъектПоИдентификаторуИзВременнойТаблицы(МенеджерВременныхТаблиц, "ВремИдентификаторыОтгрузок", ИдЭлемента); Если ЗначениеЗаполнено(ВнешнийИдентификатор) И НЕ ЗначениеЗаполнено(Отгрузка) Тогда Отгрузка = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("ДокументСсылка.РеализацияТоваровУслуг"), ВнешнийИдентификатор); КонецЕсли; Если НЕ ЗначениеЗаполнено(Отгрузка) Тогда Если Отменен Тогда Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, " Отгрузка с ид: " + Строка(ИдБитрикс24) + " будет пропущен т.к. его в 1С нет и она отменена."); Продолжить; КонецЕсли; Отгрузка = Документы.РеализацияТоваровУслуг.СоздатьДокумент(); ЭтоНоваяОтгрузка = Истина; Иначе Если ОбщиеНастройки.НастройкиСинхронизацииЗаказов.ОбновлятьДокументы Тогда Отгрузка = Отгрузка.ПолучитьОбъект(); Иначе Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "В настройках указано, что заказы и подчиненные данные не обновляются. Отгрузка: " + Строка(Отгрузка) + " не будет обновлена."); Продолжить; КонецЕсли; КонецЕсли; #КонецОбласти Если ЭтоНоваяОтгрузка Тогда Отгрузка.Дата = ТекущаяДатаСеанса(); Отгрузка.Организация = ДокументОснование.Организация; Отгрузка.Подразделение = ДокументОснование.Подразделение; Отгрузка.Статус = Перечисления.СтатусыРеализацийТоваровУслуг.КПредоплате; Отгрузка.ВариантОформленияПродажи = Перечисления.ВариантыОформленияПродажи.РеализацияТоваровУслуг; Отгрузка.НаправлениеДеятельности = ДокументОснование.НаправлениеДеятельности; КонецЕсли; Если ОбщиеНастройки.НастройкиСинхронизацииЗаказов.ИсточникДатыДокумента = "По данным с Битрикс24" Тогда Отгрузка.Дата = ДатаНачала; КонецЕсли; Если ЭтоНоваяОтгрузка Тогда Если ОбщиеНастройки.НастройкиСинхронизацииЗаказов.ИсточникНомераДокумента = "По данным с Битрикс24" Тогда Отгрузка.Номер = НомерОтгрузкиБ24; Иначе Отгрузка.УстановитьНовыйНомер(); // Используется в других конфигурациях // ПрефиксацияОбъектовСобытия.УстановитьПрефиксИнформационнойБазыИОрганизации(Заказ, Истина, ""); КонецЕсли; КонецЕсли; Отгрузка.ЗаказКлиента = ДокументОснование; Отгрузка.Партнер = ДокументОснование.Партнер; Отгрузка.Контрагент = ДокументОснование.Контрагент; Отгрузка.КонтактноеЛицо = ДокументОснование.КонтактноеЛицо; Отгрузка.Договор = ДокументОснование.Договор; Отгрузка.БанковскийСчетКонтрагента = ДокументОснование.БанковскийСчетКонтрагента; Отгрузка.БанковскийСчетОрганизации = ДокументОснование.БанковскийСчет; Отгрузка.Соглашение = ДокументОснование.Соглашение; Отгрузка.АдресДоставки = ДокументОснование.АдресДоставки; Отгрузка.АдресДоставкиЗначенияПолей = ДокументОснование.АдресДоставкиЗначенияПолей; Отгрузка.АдресДоставкиПеревозчика = ДокументОснование.АдресДоставкиПеревозчика; Отгрузка.АдресДоставкиПеревозчикаЗначенияПолей = ДокументОснование.АдресДоставкиПеревозчикаЗначенияПолей; Отгрузка.СпособДоставки = ДокументОснование.СпособДоставки; Отгрузка.ПеревозчикПартнер = ДокументОснование.ПеревозчикПартнер; Отгрузка.Валюта = ДокументОснование.Валюта; Отгрузка.ВалютаВзаиморасчетов = ДокументОснование.Валюта; Отгрузка.НалогообложениеНДС = ДокументОснование.НалогообложениеНДС; Отгрузка.ХозяйственнаяОперация = ДокументОснование.ХозяйственнаяОперация; Отгрузка.ФормаОплаты = ДокументОснование.ФормаОплаты; Отгрузка.ПорядокОплаты = ДокументОснование.ПорядокОплаты; Отгрузка.ЦенаВключаетНДС = ДокументОснование.ЦенаВключаетНДС; Отгрузка.Менеджер = ДокументОснование.Менеджер; Отгрузка.Склад = ДокументОснование.Склад; Отгрузка.Комментарий = ДокументОснование.Комментарий; #Область ДобавлениеДополнительныхРеквизитовДокумента НайденноеСвойствоТЧ = Отгрузка.ДополнительныеРеквизиты.Найти(ОбщиеНастройки.ПредопределенноеСвойствоНомераОтгрузкиБитрикс24, "Свойство"); Если НайденноеСвойствоТЧ = Неопределено Тогда НовыйРеквизит = Отгрузка.ДополнительныеРеквизиты.Добавить(); НовыйРеквизит.Значение = ИдЭлемента; НовыйРеквизит.Свойство = ОбщиеНастройки.ПредопределенноеСвойствоНомераОтгрузкиБитрикс24; Иначе НайденноеСвойствоТЧ.Значение = ИдЭлемента; КонецЕсли; НайденноеСвойствоТЧ = Отгрузка.ДополнительныеРеквизиты.Найти(ОбщиеНастройки.ПредопределенноеСвойствоДатыОтгрузкиБитрикс24, "Свойство"); Если НайденноеСвойствоТЧ = Неопределено Тогда НовыйРеквизит = Отгрузка.ДополнительныеРеквизиты.Добавить(); НовыйРеквизит.Значение = ДатаНачала; НовыйРеквизит.Свойство = ОбщиеНастройки.ПредопределенноеСвойствоДатыОтгрузкиБитрикс24; Иначе НайденноеСвойствоТЧ.Значение = ДатаНачала; КонецЕсли; НайденноеСвойствоТЧ = Отгрузка.ДополнительныеРеквизиты.Найти(ОбщиеНастройки.ПредопределенноеСвойствоТрекНомераОтгрузкиБитрикс24, "Свойство"); Если НайденноеСвойствоТЧ = Неопределено Тогда НовыйРеквизит = Отгрузка.ДополнительныеРеквизиты.Добавить(); НовыйРеквизит.Значение = ТрекНомер; НовыйРеквизит.Свойство = ОбщиеНастройки.ПредопределенноеСвойствоТрекНомераОтгрузкиБитрикс24; Иначе НайденноеСвойствоТЧ.Значение = ТрекНомер; КонецЕсли; НайденноеСвойствоТЧ = Отгрузка.ДополнительныеРеквизиты.Найти(ОбщиеНастройки.ПредопределенноеСвойствоДоставкаРазрешенаОтгрузкиБитрикс24, "Свойство"); Если НайденноеСвойствоТЧ = Неопределено Тогда НовыйРеквизит = Отгрузка.ДополнительныеРеквизиты.Добавить(); НовыйРеквизит.Значение = ДоставкаРазрешена; НовыйРеквизит.Свойство = ОбщиеНастройки.ПредопределенноеСвойствоДоставкаРазрешенаОтгрузкиБитрикс24; Иначе НайденноеСвойствоТЧ.Значение = ДоставкаРазрешена; КонецЕсли; #КонецОбласти #Область ДобавлениеДополнительногоРеквизитаСтатуса Если ИнформацияОСтатусах <> Неопределено И ТипЗнч(тзнСтатусов) = Тип("ТаблицаЗначений") Тогда Если ИнформацияОСтатусах.ИсточникСтатусовОтгрузок = "СвойствоОтгрузок" Тогда Если ЗначениеЗаполнено(ИнформацияОСтатусах.СвойствоОтгрузки) Тогда ЗначениеСвойства = Неопределено; НайденнаяСтрока = тзнСтатусов.Найти(ИдСтатуса, "ИдСтатуса"); Если НайденнаяСтрока <> Неопределено Тогда ЗначениеСвойства = НайденнаяСтрока.Статус; КонецЕсли; НайденноеСвойствоТЧ = Отгрузка.ДополнительныеРеквизиты.Найти(ИнформацияОСтатусах.СвойствоОтгрузки, "Свойство"); Если НайденноеСвойствоТЧ = Неопределено Тогда НовыйРеквизит = Отгрузка.ДополнительныеРеквизиты.Добавить(); НовыйРеквизит.Значение = ЗначениеСвойства; НовыйРеквизит.Свойство = ИнформацияОСтатусах.СвойствоОтгрузки; Иначе НайденноеСвойствоТЧ.Значение = ЗначениеСвойства; КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; #КонецОбласти #Область ДобавлениеДополнительногоРеквизитаДоставки ИнформацияОДоставках = Неопределено; Если ОбщиеНастройки.НастройкиСинхронизацииЗаказов.Свойство("ИнформацияОДоставках") Тогда ИнформацияОДоставках = ОбщиеНастройки.НастройкиСинхронизацииЗаказов.ИнформацияОДоставках; КонецЕсли; Если ИнформацияОДоставках <>Неопределено Тогда Если ИнформацияОДоставках.ИсточникСлужбДоставкиОтгрузок = "СвойствоОтгрузок" Тогда Если ЗначениеЗаполнено(ИнформацияОДоставках.СвойствоОтгрузки) Тогда тзнДоставок = ИнформацияОДоставках.СоответствияСЗначениямиСвойствОтгрузки; ЗначениеСвойства = Неопределено; НайденнаяСтрока = тзнДоставок.Найти(ИдДоставки, "ИдСлужбы"); Если НайденнаяСтрока <> Неопределено Тогда ЗначениеСвойства = НайденнаяСтрока.Служба; КонецЕсли; НайденноеСвойствоТЧ = Отгрузка.ДополнительныеРеквизиты.Найти(ИнформацияОДоставках.СвойствоОтгрузки, "Свойство"); Если НайденноеСвойствоТЧ = Неопределено Тогда НовыйРеквизит = Отгрузка.ДополнительныеРеквизиты.Добавить(); НовыйРеквизит.Значение = ЗначениеСвойства; НовыйРеквизит.Свойство = ИнформацияОДоставках.СвойствоОтгрузки; Иначе НайденноеСвойствоТЧ.Значение = ЗначениеСвойства; КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; #КонецОбласти #Область ЗаполнениеТоваров тзнТоваровАрх = Отгрузка.Товары.Выгрузить(); Отгрузка.Товары.Очистить(); тзнПозиций = Новый ТаблицаЗначений; тзнПозиций.Колонки.Добавить("ИдентификаторПозиции"); тзнПозиций.Колонки.Добавить("КлючСвязи"); Для Каждого ТоварОтгрузки Из ЭлементыКорзины Цикл ИдПозицииОтгрузки = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Формат(ТоварОтгрузки.Получить("id"),"ЧГ=0")); ИдПозицииЗаказаСтр = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Формат(ТоварОтгрузки.Получить("basketId"),"ЧГ=0")); //ИдПозицииЗаказа = Число(ИдПозицииЗаказаСтр); КлючСвязиПозиции = Число(Прав(ИдПозицииЗаказаСтр, 5)); ПозицияЗаказа = ДокументОснование.Товары.Найти(КлючСвязиПозиции, "КлючСвязи"); Если ПозицияЗаказа = Неопределено Тогда Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.КритическаяОшибка, "Не найдена информация позиции номенклатуры отгрузки по данным заказа. Ключ связи : " + Строка(КлючСвязиПозиции) + " . Возможно потерялись ключи связи в заказе Из за удаления позиций товаров в заказе или изменении ключей связи."); ЕстьКритическиеОшибки = Истина; Продолжить; КонецЕсли; ПозицияОтгрузки = тзнТоваровАрх.Найти(КлючСвязиПозиции, "КлючСвязи"); Если ПозицияОтгрузки <> Неопределено Тогда ИнформацияОПозицииТовара = ПозицияОтгрузки; ИначеЕсли ПозицияЗаказа <> Неопределено Тогда ИнформацияОПозицииТовара = ПозицияЗаказа; Иначе Продолжить; КонецЕсли; Номенклатура = ИнформацияОПозицииТовара.Номенклатура; Характеристика = ИнформацияОПозицииТовара.Характеристика; Упаковка = ИнформацияОПозицииТовара.Упаковка; СтавкаНДС = ИнформацияОПозицииТовара.СтавкаНДС; Количество = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Число"), Формат(ТоварОтгрузки.Получить("quantity"),"ЧРД=.; ЧГ=0")); Резерв = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Число"), Формат(ТоварОтгрузки.Получить("reservedQuantity"),"ЧРД=.; ЧГ=0")); Цена = ИнформацияОПозицииТовара.Цена; СуммаНДС = ИнформацияОПозицииТовара.СуммаНДС/ИнформацияОПозицииТовара.Количество; Сумма = ИнформацияОПозицииТовара.Сумма/ИнформацияОПозицииТовара.Количество; ПроцентРучнойСкидки = ИнформацияОПозицииТовара.ПроцентРучнойСкидки; СуммаРучнойСкидки = ИнформацияОПозицииТовара.СуммаРучнойСкидки/ИнформацияОПозицииТовара.Количество; ПроцентАвтоматическойСкидки = ИнформацияОПозицииТовара.ПроцентАвтоматическойСкидки; СуммаАвтоматическойСкидки = ИнформацияОПозицииТовара.СуммаАвтоматическойСкидки/ИнформацияОПозицииТовара.Количество; НоваяЗаписьТовара = Отгрузка.Товары.Добавить(); НоваяЗаписьТовара.КлючСвязи = КлючСвязиПозиции; НоваяЗаписьТовара.Номенклатура = Номенклатура; НоваяЗаписьТовара.Характеристика = Характеристика; НоваяЗаписьТовара.Упаковка = Упаковка; НоваяЗаписьТовара.СтавкаНДС = СтавкаНДС; НоваяЗаписьТовара.Склад = ?(ЗначениеЗаполнено(НоваяЗаписьТовара.Склад), НоваяЗаписьТовара.Склад, Отгрузка.Склад); НоваяЗаписьТовара.Количество = Количество; НоваяЗаписьТовара.КоличествоУпаковок= Количество; НоваяЗаписьТовара.ЗаказКлиента = ДокументОснование; НоваяЗаписьТовара.Цена = Цена; НоваяЗаписьТовара.ПроцентАвтоматическойСкидки = ПроцентАвтоматическойСкидки; НоваяЗаписьТовара.СуммаАвтоматическойСкидки = СуммаАвтоматическойСкидки*НоваяЗаписьТовара.Количество; НоваяЗаписьТовара.ПроцентРучнойСкидки = ПроцентРучнойСкидки*НоваяЗаписьТовара.Количество; НоваяЗаписьТовара.СуммаАвтоматическойСкидки = СуммаАвтоматическойСкидки*НоваяЗаписьТовара.Количество; НоваяЗаписьТовара.Сумма = НоваяЗаписьТовара.Цена*НоваяЗаписьТовара.Количество-НоваяЗаписьТовара.ПроцентРучнойСкидки; СтруктураДействий = Новый Структура; СтруктураПересчетаСуммы = ОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Отгрузка); СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы); СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы); СтруктураДействий.Вставить("ПересчитатьСумму"); СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать", Ложь)); СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки", Новый Структура("Очищать", Истина)); ОбработкаТабличнойЧастиВызовСервера.ОбработатьСтрокуТЧ(НоваяЗаписьТовара, СтруктураДействий, Неопределено); НоваяСтрокаПозиций = тзнПозиций.Добавить(); НоваяСтрокаПозиций.ИдентификаторПозиции = ИдПозицииОтгрузки; НоваяСтрокаПозиций.КлючСвязи = КлючСвязиПозиции; КонецЦикла; #Область ЗаполнениеСуммыДоставки Если СуммаДоставки > 0 Тогда НоменклатураДоставки = ОбщиеНастройки.НастройкиСинхронизацииЗаказов.НоменклатураДоставка; СтавкаНДС = НоменклатураДоставки.СтавкаНДС; НоваяЗаписьТовара = Отгрузка.Товары.Добавить(); #Область ЗаполнениеСтрокиСтарымиДанными НайденныеСтроки = тзнТоваровАрх.НайтиСтроки(Новый Структура("Номенклатура, Характеристика", НоменклатураДоставки, Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка())); Если НайденныеСтроки.Количество() > 0 Тогда ЗаполнитьЗначенияСвойств(НоваяЗаписьТовара, НайденныеСтроки[0]); тзнТоваровАрх.Удалить(НайденныеСтроки[0]); КонецЕсли; #КонецОбласти НоваяЗаписьТовара.КлючСвязи = 9999; НоваяЗаписьТовара.ЗаказКлиента = ДокументОснование; НоваяЗаписьТовара.Номенклатура = НоменклатураДоставки; НоваяЗаписьТовара.Упаковка = НоменклатураДоставки.ЕдиницаИзмерения; НоваяЗаписьТовара.СтавкаНДС = НоменклатураДоставки.СтавкаНДС; НоваяЗаписьТовара.Склад = ?(ЗначениеЗаполнено(НоваяЗаписьТовара.Склад), НоваяЗаписьТовара.Склад, Отгрузка.Склад); НоваяЗаписьТовара.Количество = 1; НоваяЗаписьТовара.КоличествоУпаковок = 1; НоваяЗаписьТовара.Цена = СуммаДоставки; НоваяЗаписьТовара.ПроцентАвтоматическойСкидки = 0; НоваяЗаписьТовара.СуммаАвтоматическойСкидки = 0; НоваяЗаписьТовара.ПроцентРучнойСкидки = 0; НоваяЗаписьТовара.ПроцентРучнойСкидки = 0; СтруктураДействий = Новый Структура; СтруктураПересчетаСуммы = ОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Отгрузка); СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы); СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы); СтруктураДействий.Вставить("ПересчитатьСумму"); СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать", Ложь)); СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки", Новый Структура("Очищать", Истина)); ОбработкаТабличнойЧастиВызовСервера.ОбработатьСтрокуТЧ(НоваяЗаписьТовара, СтруктураДействий, Неопределено); КонецЕсли; #КонецОбласти #КонецОбласти ЭтоНовыйОбъект = Отгрузка.Ссылка.Пустая()=Истина; #Область ПроведениеДокумента Отгрузка.ДополнительныеСвойства.Вставить("ЗагрузкаСБитрикс24", Истина); Если НЕ Отменен Тогда Если (ОбщиеНастройки.НастройкиСинхронизацииЗаказов.РежимЗаписиДокумента = "Проводить закрытые" И Закрыт) ИЛИ (ОбщиеНастройки.НастройкиСинхронизацииЗаказов.ПроводитьЕслиОтгружен И Отгружен) ИЛИ ОбщиеНастройки.НастройкиСинхронизацииЗаказов.РежимЗаписиДокумента = "Проводить" Тогда Попытка Отгрузка.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Проведен документ: " + Строка(Отгрузка)); Исключение Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, "Во время проведения документа: " + Строка(Отгрузка) + " возникли ошибки."); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, ОписаниеОшибки()); ЕстьКритическиеОшибки = Истина; Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Попытка записи документа: " + Строка(Отгрузка)); Попытка Отгрузка.Записать(РежимЗаписиДокумента.Запись); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Записан документ: " + Строка(Отгрузка)); Исключение Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, "Во время записи документа: " + Строка(Отгрузка) + " возникли ошибки."); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, ОписаниеОшибки()); ОбщиеНастройки.ВыполненоБезОшибок = Ложь; КонецПопытки; КонецПопытки; Иначе Попытка Если ЭтоНовыйОбъект ИЛИ НЕ Отгрузка.Проведен Тогда Отгрузка.Записать(РежимЗаписиДокумента.Запись); Иначе Отгрузка.Записать(РежимЗаписиДокумента.ОтменаПроведения); КонецЕсли; Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Записан: " + Строка(Отгрузка)); Исключение Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, "Во время записи документа: " + Строка(Отгрузка) + " возникли ошибки."); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, ОписаниеОшибки()); ЕстьКритическиеОшибки = Истина; ОбщиеНастройки.ВыполненоБезОшибок = Ложь; КонецПопытки; КонецЕсли; Иначе Если ОбщиеНастройки.НастройкиСинхронизацииЗаказов.КогдаОтменен = "Помечать на удаление" Тогда Если НЕ Отгрузка.ПометкаУдаления Тогда Отгрузка.ПометкаУдаления = Истина; Попытка Отгрузка.Записать(РежимЗаписиДокумента.ОтменаПроведения); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Помечен на удаление документ: " + Строка(Отгрузка)); Исключение ЕстьКритическиеОшибки = Истина; Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, "Ошибка при установке пометки на удаление документа: " + Строка(Отгрузка) + Символы.ПС + ОписаниеОшибки()); КонецПопытки; КонецЕсли; ИначеЕсли ОбщиеНастройки.НастройкиСинхронизацииЗаказов.КогдаОтменен = "Отменять проведение" Тогда Если Отгрузка.Проведен Тогда Попытка Отгрузка.Записать(РежимЗаписиДокумента.ОтменаПроведения); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Отменено проведение у документа: " + Строка(Отгрузка)); Исключение ЕстьКритическиеОшибки = Истина; Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, "Ошибка при отмене проведения документа: " + Строка(Отгрузка) + Символы.ПС + ОписаниеОшибки()); КонецПопытки; КонецЕсли; Иначе КонецЕсли; КонецЕсли; РезультатЕстьКритическиеОшибки = ?(ЕстьКритическиеОшибки, ЕстьКритическиеОшибки, РезультатЕстьКритическиеОшибки); #КонецОбласти Если ЗначениеЗаполнено(Отгрузка.Ссылка) Тогда Б24_Синхр_СинхронизацияВызовСервера.ЗаписатьИдБ24Объекта(ОбщиеНастройки, ОбщиеНастройки.ТипыОбъектовОбмена.Отгрузка, Отгрузка.Ссылка, ИдБитрикс24); Для Каждого ТекПозиция Из тзнПозиций Цикл ДанныеОПозиции = Новый Структура; ДанныеОПозиции.Вставить("Объект" , Отгрузка.Ссылка); ДанныеОПозиции.Вставить("ПодчиненныйОбъект" , ТекПозиция.КлючСвязи); Б24_Синхр_СинхронизацияВызовСервера.ЗаписатьИдБ24Объекта(ОбщиеНастройки, ОбщиеНастройки.ТипыОбъектовОбмена.ТоварыОтгрузки, ДанныеОПозиции, ТекПозиция.ИдентификаторПозиции); КонецЦикла; КонецЕсли; КонецЦикла; Возврат РезультатЕстьКритическиеОшибки; КонецФункции Функция ЗагрузитьОбновитьОплатыЗаказов(ОбщиеНастройки, Оплаты, Заказ, МенеджерВременныхТаблиц) РезультатЕстьКритическиеОшибки = Ложь; ЗагруженныеОбъекты = Новый Массив; Для каждого ТекЭлемент Из Оплаты Цикл ИдБитрикс24 = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Формат(ТекЭлемент.Получить("id"),"ЧГ=0")); Если ЗагруженныеОбъекты.Найти(ИдБитрикс24) <> Неопределено Тогда Продолжить; КонецЕсли; ЗагруженныеОбъекты.Добавить(ИдБитрикс24); ЕстьКритическиеОшибки = Ложь; НомерОплатыБ24 = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Формат(ТекЭлемент.Получить("accountNumber"),"ЧГ=0")); НомерОплатыБ24 = ?(ЗначениеЗаполнено(НомерОплатыБ24), НомерОплатыБ24, ИдБитрикс24); ДатаДокумента = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Дата"), ТекЭлемент.Получить("dateBill")); // ДатаОплаты = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Дата"), ТекЭлемент.Получить("datePaid")); ВнешнийИдентификатор = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), ТекЭлемент.Получить("xmlId")); // Комментарий = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), ТекЭлемент.Получить("comments")); СуммаДокумента = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Число"), Формат(ТекЭлемент.Получить("sum"),"ЧРД=.; ЧГ=0")); Оплачен = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), ТекЭлемент.Получить("paid"))= "Y"; ПлатежнаяСистема= Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), Формат(ТекЭлемент.Получить("paySystemId"),"ЧГ=0")); ИнформацияОПлатежнойСистеме = Неопределено; Если ОбщиеНастройки.НастройкиСинхронизацииЗаказов.Свойство("ИнформацияОПлатежныхСистемах") Тогда Для Каждого ТекПлатежнаяСистема Из ОбщиеНастройки.НастройкиСинхронизацииЗаказов.ИнформацияОПлатежныхСистемах.СоответствияПлатежныхСистем Цикл Если ТекПлатежнаяСистема.ПлатежнаяСистема.НайтиПоЗначению(ПлатежнаяСистема)<> Неопределено Тогда ИнформацияОПлатежнойСистеме = ТекПлатежнаяСистема; Прервать; КонецЕсли; КонецЦикла; КонецЕсли; ВидОплаты = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("Строка"), ТекЭлемент.Получить("paySystemIsCash")); // "Y" - наличные, "A" -эквайринг, "N" -безнал #Область ПоискСозданиеОплаты ЭтоНоваяОплата = Ложь; Оплата = ПолучитьОбъектПоИдентификаторуИзВременнойТаблицы(МенеджерВременныхТаблиц, "ВремИдентификаторыОплат", ИдБитрикс24); Если ЗначениеЗаполнено(ВнешнийИдентификатор) И НЕ ЗначениеЗаполнено(Заказ) Тогда Если ВидОплаты = "Y" Тогда Оплата = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("ДокументСсылка.ПриходныйКассовыйОрдер"), ВнешнийИдентификатор); ИначеЕсли ВидОплаты = "N" Тогда Оплата = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("ДокументСсылка.ПоступлениеБезналичныхДенежныхСредств"), ВнешнийИдентификатор); Иначе Оплата = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоXML(Тип("ДокументСсылка.ОперацияПоПлатежнойКарте"), ВнешнийИдентификатор); КонецЕсли; КонецЕсли; Если НЕ ЗначениеЗаполнено(Оплата) Тогда Если ВидОплаты = "Y" Тогда Оплата = Документы.ПриходныйКассовыйОрдер.СоздатьДокумент(); ИначеЕсли ВидОплаты = "N" Тогда Оплата = Документы.ПоступлениеБезналичныхДенежныхСредств.СоздатьДокумент(); Иначе Оплата = Документы.ОперацияПоПлатежнойКарте.СоздатьДокумент(); КонецЕсли; ЭтоНоваяОплата = Истина; Иначе Если ОбщиеНастройки.НастройкиСинхронизацииЗаказов.ОбновлятьДокументы Тогда Оплата = Оплата.ПолучитьОбъект(); Иначе Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "В настройках указано, что заказы и подчиненные данные не обновляются. Заказ: " + Строка(Заказ) + " не будет обновлен."); Продолжить; КонецЕсли; КонецЕсли; #КонецОбласти Если ЭтоНоваяОплата Тогда Оплата.Дата = ТекущаяДатаСеанса(); Оплата.Организация = Заказ.Организация; Оплата.Подразделение = Заказ.Подразделение; КонецЕсли; Если ОбщиеНастройки.НастройкиСинхронизацииЗаказов.ИсточникДатыДокумента = "По данным с Битрикс24" Тогда Оплата.Дата = ДатаДокумента; КонецЕсли; Если ЭтоНоваяОплата Тогда Если ОбщиеНастройки.НастройкиСинхронизацииЗаказов.ИсточникНомераДокумента = "По данным с Битрикс24" Тогда Оплата.Номер = НомерОплатыБ24; Иначе Оплата.УстановитьНовыйНомер(); // Используется в других конфигурациях // ПрефиксацияОбъектовСобытия.УстановитьПрефиксИнформационнойБазыИОрганизации(Заказ, Истина, ""); КонецЕсли; КонецЕсли; Оплата.НаправлениеДеятельности = Заказ.НаправлениеДеятельности; Оплата.Контрагент = Заказ.Контрагент; Оплата.Партнер = Заказ.Партнер; Оплата.Договор = Заказ.Договор; Оплата.Валюта = Заказ.Валюта; Оплата.СуммаДокумента = СуммаДокумента; Если ВидОплаты = "Y" И ТипЗнч(Оплата) = Тип("ДокументОбъект.ПриходныйКассовыйОрдер") Тогда Оплата.ДокументОснование = Заказ; Оплата.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПоступлениеОплатыОтКлиента; Если ИнформацияОПлатежнойСистеме <> Неопределено Тогда Оплата.Касса = ИнформацияОПлатежнойСистеме.Касса; КонецЕсли; ИначеЕсли ВидОплаты = "N" И ТипЗнч(Оплата) = Тип("ДокументОбъект.ПоступлениеБезналичныхДенежныхСредств") Тогда Оплата.ДокументОснование = Заказ; Оплата.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПоступлениеОплатыОтКлиента; Оплата.ТипПлатежногоДокумента = Перечисления.ТипыПлатежныхДокументов.ПлатежноеПоручение; Если ИнформацияОПлатежнойСистеме <> Неопределено Тогда Оплата.БанковскийСчет = ИнформацияОПлатежнойСистеме.РасчетныйСчет; КонецЕсли; ИначеЕсли ВидОплаты = "A" И ТипЗнч(Оплата) = Тип("ДокументОбъект.ОперацияПоПлатежнойКарте") Тогда Оплата.НомерПлатежнойКарты = "123456789"; Оплата.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПоступлениеОплатыОтКлиента; Если ИнформацияОПлатежнойСистеме <> Неопределено Тогда Если ИнформацияОПлатежнойСистеме <> Неопределено Тогда Оплата.ЭквайринговыйТерминал = ИнформацияОПлатежнойСистеме.Терминал; КонецЕсли; КонецЕсли; КонецЕсли; Оплата.СтатьяДвиженияДенежныхСредств = ?(ЗначениеЗаполнено(Оплата.СтатьяДвиженияДенежныхСредств), Оплата.СтатьяДвиженияДенежныхСредств, Заказ.Соглашение.СтатьяДвиженияДенежныхСредств); ТзнНДС = Заказ.Товары.Выгрузить(); тзнНДС.Свернуть("СтавкаНДС", "СуммаНДС, Сумма, СуммаСНДС"); Оплата.РасшифровкаПлатежа.Очистить(); ОплатаВсего = Оплата.СуммаДокумента; Для Каждого ТекНДС Из ТзнНДС Цикл Если ОплатаВсего < ТекНДС.Сумма Тогда СуммаРасшифровка = ОплатаВсего; Иначе СуммаРасшифровка = ТекНДС.Сумма; ОплатаВсего = ОплатаВсего - ТекНДС.Сумма; КонецЕсли; НоваяСтрокаРасшифровки = Оплата.РасшифровкаПлатежа.Добавить(); НоваяСтрокаРасшифровки.Заказ = Заказ; НоваяСтрокаРасшифровки.Партнер = Заказ.Партнер; НоваяСтрокаРасшифровки.СтатьяДвиженияДенежныхСредств = Оплата.СтатьяДвиженияДенежныхСредств; НоваяСтрокаРасшифровки.ВалютаВзаиморасчетов = Заказ.Валюта; НоваяСтрокаРасшифровки.Сумма = СуммаРасшифровка; НоваяСтрокаРасшифровки.СуммаВзаиморасчетов = СуммаРасшифровка; НоваяСтрокаРасшифровки.СтавкаНДС = ТекНДС.СтавкаНДС; Если ТекНДС.Сумма = 0 Тогда НоваяСтрокаРасшифровки.СуммаНДС = 0; Иначе НоваяСтрокаРасшифровки.СуммаНДС = Окр(ТекНДС.СуммаНДС*СуммаРасшифровка/ТекНДС.Сумма,2); КонецЕсли; Если ТипЗнч(Оплата) = Тип("ДокументОбъект.ПриходныйКассовыйОрдер") ИЛИ ТипЗнч(Оплата) = Тип("ДокументОбъект.ПоступлениеБезналичныхДенежныхСредств") Тогда НоваяСтрокаРасшифровки.Подразделение = Заказ.Подразделение; НоваяСтрокаРасшифровки.Организация = Заказ.Организация; НоваяСтрокаРасшифровки.НаправлениеДеятельности = Заказ.НаправлениеДеятельности; КонецЕсли; КонецЦикла; #Область ПроведениеДокумента Оплата.ДополнительныеСвойства.Вставить("ЗагрузкаСБитрикс24", Истина); Если (ОбщиеНастройки.НастройкиСинхронизацииЗаказов.РежимЗаписиДокумента = "Проводить закрытые" И Оплачен) ИЛИ (ОбщиеНастройки.НастройкиСинхронизацииЗаказов.ПроводитьЕслиОплачен И Оплачен) ИЛИ ОбщиеНастройки.НастройкиСинхронизацииЗаказов.РежимЗаписиДокумента = "Проводить" Тогда Попытка Оплата.Записать(РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Проведен документ: " + Строка(Оплата)); Исключение Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, "Во время проведения документа: " + Строка(Оплата) + " возникли ошибки."); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, ОписаниеОшибки()); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Попытка записи документа: " + Строка(Оплата)); Попытка Оплата.Записать(РежимЗаписиДокумента.Запись); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Записан документ: " + Строка(Оплата)); Исключение Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, "Во время записи документа: " + Строка(Оплата) + " возникли ошибки."); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, ОписаниеОшибки()); ОбщиеНастройки.ВыполненоБезОшибок = Ложь; КонецПопытки; КонецПопытки; Иначе Попытка Если ЭтоНоваяОплата ИЛИ НЕ Оплата.Проведен Тогда Оплата.Записать(РежимЗаписиДокумента.Запись); Иначе Оплата.Записать(РежимЗаписиДокумента.ОтменаПроведения); КонецЕсли; Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Записан: " + Строка(Оплата)); Исключение Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, "Во время записи документа: " + Строка(Оплата) + " возникли ошибки."); Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, ОписаниеОшибки()); ОбщиеНастройки.ВыполненоБезОшибок = Ложь; КонецПопытки; КонецЕсли; #КонецОбласти Если ЗначениеЗаполнено(Оплата.Ссылка) Тогда Б24_Синхр_СинхронизацияВызовСервера.ЗаписатьИдБ24Объекта(ОбщиеНастройки, ОбщиеНастройки.ТипыОбъектовОбмена.Оплата, Оплата.Ссылка, ИдБитрикс24); КонецЕсли; КонецЦикла; Возврат РезультатЕстьКритическиеОшибки; КонецФункции #КонецОбласти #Область ОбщиеПроцедурыИФункции Функция ПолучитьДоговор(ОбщиеНастройки, Организация, Контрагент, ВалютаРасчетов) Договор = Справочники.ДоговорыКонтрагентов.ПустаяСсылка(); Если ТипЗнч(Контрагент) <> Тип("СправочникСсылка.Контрагенты") Тогда Возврат Договор; КонецЕсли; НаименованиеДоговора = "Договор WEB - Битрикс24"; Запрос = Новый Запрос(); Запрос.УстановитьПараметр("Организация" , Организация); Запрос.УстановитьПараметр("Контрагент" , Контрагент); Запрос.УстановитьПараметр("Партнер" , Контрагент.Партнер); Запрос.УстановитьПараметр("ВалютаРасчетов" , ВалютаРасчетов); Запрос.Текст = "ВЫБРАТЬ | ДоговорыКонтрагентов.Ссылка КАК Ссылка, | ДоговорыКонтрагентов.Наименование КАК Наименование |ИЗ | Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов |ГДЕ | ДоговорыКонтрагентов.Организация = &Организация | И ДоговорыКонтрагентов.Контрагент = &Контрагент | И ДоговорыКонтрагентов.Партнер = &Партнер | И ДоговорыКонтрагентов.ВалютаВзаиморасчетов = &ВалютаРасчетов | И ДоговорыКонтрагентов.ТипДоговора = ЗНАЧЕНИЕ(Перечисление.ТипыДоговоров.СПокупателем)"; ВыполненныйЗапрос = Запрос.Выполнить(); Если НЕ ВыполненныйЗапрос.Пустой() Тогда тзнДоговоров = ВыполненныйЗапрос.Выгрузить(); Если тзнДоговоров.Количество() = 1 Тогда Договор = тзнДоговоров[0].Ссылка; Иначе Для каждого ТекДоговор Из тзнДоговоров Цикл Если ТекДоговор.Наименование = НаименованиеДоговора Тогда Договор = ТекДоговор.Ссылка; КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; Если НЕ ЗначениеЗаполнено(Договор) Тогда НовыйДоговор = Справочники.ДоговорыКонтрагентов.СоздатьЭлемент(); НовыйДоговор.Наименование = НаименованиеДоговора; НовыйДоговор.Партнер = Контрагент.Партнер; НовыйДоговор.Контрагент = Контрагент; НовыйДоговор.Организация = Организация; НовыйДоговор.ТипДоговора = Перечисления.ТипыДоговоров.СПокупателем; НовыйДоговор.Статус = Перечисления.СтатусыДоговоровКонтрагентов.Действует; НовыйДоговор.ВалютаВзаиморасчетов = ВалютаРасчетов; НовыйДоговор.ПорядокРасчетов = Перечисления.ПорядокРасчетов.ПоЗаказамНакладным; НовыйДоговор.ПорядокОплаты = Перечисления.ПорядокОплатыПоСоглашениям.РасчетыВРубляхОплатаВРублях; НовыйДоговор.ДополнительныеСвойства.Вставить("ЗагрузкаСБитрикс24", Истина); НовыйДоговор.Записать(); Договор = НовыйДоговор.Ссылка; КонецЕсли; Возврат Договор; КонецФункции Функция ПолучитьКомпаниюКонтактПоКритерию(ОбщиеНастройки, Критерий, МенеджерВременныхТаблиц, ИнформацияОКонтрагенте, СтруктураДанныхПоиска) ИдЭлемента = ""; СтруктураДанныхПоиска.Свойство("ИдЭлемента", ИдЭлемента); НаименованиеКомпанииКонтакта = ""; СтруктураДанныхПоиска.Свойство("НаименованиеКомпанииКонтакта", НаименованиеКомпанииКонтакта); Телефоны = Новый Массив; СтруктураДанныхПоиска.Свойство("Телефоны", Телефоны); Почта = Новый Массив; СтруктураДанныхПоиска.Свойство("Почта", Почта); ИНН = ""; СтруктураДанныхПоиска.Свойство("ИНН", ИНН); КПП = ""; СтруктураДанныхПоиска.Свойство("КПП", КПП); Результат = Справочники.Контрагенты.ПустаяСсылка(); Если Критерий = "Внешний идентификатор" Тогда Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("Идентификатор", ИдЭлемента); Запрос.УстановитьПараметр("Портал" , ОбщиеНастройки.Портал); Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | ВремКомпанииКонтакты.КомпанияКонтакт КАК КомпанияКонтакт |ИЗ | ВремКомпанииКонтакты КАК ВремКомпанииКонтакты |ГДЕ | ВремКомпанииКонтакты.Идентификатор = &Идентификатор"; ВыполненныйЗапрос = Запрос.Выполнить(); Если НЕ ВыполненныйЗапрос.Пустой() Тогда тзнВрем = ВыполненныйЗапрос.Выгрузить(); КоличествоНайденных = тзнВрем.Количество(); Если КоличествоНайденных > 1 Тогда Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, "Найдено несколько партнеров по идентификатору: " + ИдЭлемента + ". Партнер будет пропущен."); Результат = Неопределено; ИначеЕсли КоличествоНайденных = 1 Тогда Результат = тзнВрем[0].КомпанияКонтакт; КонецЕсли; КонецЕсли; ИначеЕсли Критерий = "Не использовать" Тогда Возврат Результат; ИначеЕсли Критерий = "ИНН+КПП" Тогда Если НЕ ЗначениеЗаполнено(ИНН) Тогда Возврат Результат; КонецЕсли; Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("ИНН", ИНН); Запрос.УстановитьПараметр("КПП", КПП); ТекстЗапроса = "ВЫБРАТЬ | ВремИННКомпанииКонтакты.КомпанияКонтакт КАК КомпанияКонтакт |ИЗ | ВремИННКомпанииКонтакты КАК ВремИННКомпанииКонтакты |ГДЕ | ВремИННКомпанииКонтакты.Идентификатор ЕСТЬ NULL | И ВремИННКомпанииКонтакты.ИНН = &ИНН"; Если ЗначениеЗаполнено(КПП) Тогда ТекстЗапроса = ТекстЗапроса + " | И ВремИННКомпанииКонтакты.КПП = &КПП"; КонецЕсли; Запрос.Текст = ТекстЗапроса; ВыполненныйЗапрос = Запрос.Выполнить(); Если НЕ ВыполненныйЗапрос.Пустой() Тогда тзнВрем = ВыполненныйЗапрос.Выгрузить(); КоличествоНайденных = тзнВрем.Количество(); Если КоличествоНайденных > 1 Тогда Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, "Найдено несколько контрагентов по ИНН: " + ИНН + ". Партнер будет пропущен."); Результат = Неопределено; ИначеЕсли КоличествоНайденных = 1 Тогда Результат = тзнВрем[0].КомпанияКонтакт; КонецЕсли; КонецЕсли; ИначеЕсли Критерий = "Наименование" Тогда Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("Наименование", НаименованиеКомпанииКонтакта); Запрос.Текст = "ВЫБРАТЬ | ВремКомпанииКонтакты.Идентификатор КАК Идентификатор, | ВремКомпанииКонтакты.КомпанияКонтакт КАК КомпанияКонтакт |ИЗ | ВремКомпанииКонтакты КАК ВремКомпанииКонтакты |ГДЕ | ВремКомпанииКонтакты.Идентификатор ЕСТЬ NULL | И ВремКомпанииКонтакты.Наименование = &Наименование"; ВыполненныйЗапрос = Запрос.Выполнить(); Если НЕ ВыполненныйЗапрос.Пустой() Тогда тзнВрем = ВыполненныйЗапрос.Выгрузить(); КоличествоНайденных = тзнВрем.Количество(); Если КоличествоНайденных > 1 Тогда Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, "Найдено несколько партнеров по заголовку: " + НаименованиеКомпанииКонтакта + ". Партнер будет пропущен."); Результат = Неопределено; ИначеЕсли КоличествоНайденных = 1 Тогда Результат = тзнВрем[0].КомпанияКонтакт; КонецЕсли; КонецЕсли; ИначеЕсли Критерий = "Email" Тогда Если Почта <> Неопределено Тогда МассивАдресов = Новый Массив; Для Каждого ТекАдрес Из Почта Цикл МассивАдресов.Добавить(ТекАдрес.Получить("VALUE")); КонецЦикла; Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("МассивАдресов", МассивАдресов); Запрос.УстановитьПараметр("Тип" , Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты); Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | ВремКИ.КомпанияКонтакт КАК КомпанияКонтакт |ИЗ | ВремКИ КАК ВремКИ |ГДЕ | ВремКИ.АдресЭП В (&МассивАдресов) | И ВремКИ.Тип = &Тип"; ВыполненныйЗапрос = Запрос.Выполнить(); Если НЕ ВыполненныйЗапрос.Пустой() Тогда тзнВрем = ВыполненныйЗапрос.Выгрузить(); КоличествоНайденных = тзнВрем.Количество(); Если КоличествоНайденных > 1 Тогда ПочтыДляОшибки = ""; Для каждого ТекЭлемент Из МассивАдресов Цикл ПочтыДляОшибки = ПочтыДляОшибки + Строка(ТекЭлемент) + ", "; КонецЦикла; Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, "Найдено несколько партнеров по одной Из электронных почт:"+ПочтыДляОшибки+". Партнер будет пропущен."); Результат = Неопределено; ИначеЕсли КоличествоНайденных = 1 Тогда Результат = тзнВрем[0].КомпанияКонтакт; КонецЕсли; КонецЕсли; КонецЕсли; ИначеЕсли Критерий = "Телефон" Тогда Если Телефоны <> Неопределено Тогда МассивТелефонов = Новый Массив; Для Каждого ТекТелефон Из Телефоны Цикл МассивТелефонов.Добавить(ТекТелефон.Получить("VALUE")); КонецЦикла; Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("МассивТелефонов", МассивТелефонов); Запрос.УстановитьПараметр("Тип" , Перечисления.ТипыКонтактнойИнформации.Телефон); Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | ВремКИ.КомпанияКонтакт КАК КомпанияКонтакт |ИЗ | ВремКИ КАК ВремКИ |ГДЕ | ВремКИ.НомерТелефона В(&МассивТелефонов) | И ВремКИ.Тип = &Тип"; ВыполненныйЗапрос = Запрос.Выполнить(); Если НЕ ВыполненныйЗапрос.Пустой() Тогда тзнВрем = ВыполненныйЗапрос.Выгрузить(); КоличествоНайденных = тзнВрем.Количество(); Если КоличествоНайденных > 1 Тогда ТелефоныДляОшибки = ""; Для каждого ТекЭлемент Из МассивТелефонов Цикл ТелефоныДляОшибки = ТелефоныДляОшибки + Строка(ТекЭлемент) + ", "; КонецЦикла; Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, "Найдено несколько партнеров по одному Из телефону:"+ТелефоныДляОшибки+". Партнер будет пропущен."); Результат = Неопределено; ИначеЕсли КоличествоНайденных = 1 Тогда Результат = тзнВрем[0].КомпанияКонтакт; КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; Возврат Результат; КонецФункции Функция СформироватьПростуюСтруктуруСИд(Ключ, Значение) Результат = Новый Структура("Ид_" + Ключ, Значение); Возврат Результат; КонецФункции Функция ПолучитьДатуИзСтрокиJSON(ДатаСтрокой) Если НЕ ЗначениеЗаполнено(ДатаСтрокой) Тогда Возврат ""; КонецЕсли; Результат = Неопределено; Попытка лГоды = Число(Лев(ДатаСтрокой, 4)); лМесяцы = Число(Сред(ДатаСтрокой,6,2)); лДни = Число(Сред(ДатаСтрокой,9,2)); лЧасы = Число(Сред(ДатаСтрокой,12,2)); лМинуты = Число(Сред(ДатаСтрокой,15,2)); лСекунды = Число(Сред(ДатаСтрокой,18,2)); Результат = Дата(лГоды, лМесяцы, лДни, лЧасы, лМинуты, лСекунды); Исключение Результат = Неопределено; КонецПопытки; Возврат Результат; КонецФункции Функция ПолучитьОбъектПоИдентификаторуИзВременнойТаблицы(МенеджерВременныхТаблиц, НазваниеВременнойТаблицы, ИдЭлемента) Результат = Неопределено; Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("Идентификатор", ИдЭлемента); Запрос.Текст = "ВЫБРАТЬ | ВремИдентификаторы.Объект КАК Объект |ИЗ | "+НазваниеВременнойТаблицы+" КАК ВремИдентификаторы |ГДЕ | ВремИдентификаторы.Идентификатор = &Идентификатор"; ВыполненныйЗапрос = Запрос.Выполнить(); Если НЕ ВыполненныйЗапрос.Пустой() Тогда Выборка = ВыполненныйЗапрос.Выбрать(); Пока Выборка.Следующий() Цикл Результат = Выборка.Объект; Прервать; КонецЦикла; КонецЕсли; Возврат Результат; КонецФункции Функция ПолучитьИнформациюОКомпанииКонтакте(ОбщиеНастройки, МенеджерВременныхТаблиц, ИдКомпании, ИдКонтакта, ИдРеквизита) Результат = Новый Структура; Результат.Вставить("Партнер" , Справочники.Партнеры.ПустаяСсылка()); Результат.Вставить("Контрагент" , Справочники.Контрагенты.ПустаяСсылка()); Результат.Вставить("КонтактноеЛицо" , Справочники.КонтактныеЛицаПартнеров.ПустаяСсылка()); Результат.Вставить("ЕстьКритическиеОшибки" , Ложь); Контакт = ""; Компания = ""; ЕстьКомпания = Ложь; Если НЕ(ИдКомпании = "" ИЛИ ИдКомпании = "0") Тогда ЕстьКомпания = Истина; Компания = ПолучитьОбъектПоИдентификаторуИзВременнойТаблицы(МенеджерВременныхТаблиц, "ВремИдентификаторыКомпаний", ИдКомпании); Если НЕ ЗначениеЗаполнено(Компания) Тогда Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Не найдена компания по ид. Попытка создания компании с Ид: " + ИдКомпании); Компания = СформироватьКомпаниюКонтактПоИд(ОбщиеНастройки, "Компания", ИдКомпании); КонецЕсли; КонецЕсли; Если ЗначениеЗаполнено(Компания) Тогда Результат.Партнер = Компания; КонецЕсли; Если НЕ(ИдКонтакта = "" ИЛИ ИдКонтакта = "0") Тогда Если ЕстьКомпания Тогда Контакт = ПолучитьОбъектПоИдентификаторуИзВременнойТаблицы(МенеджерВременныхТаблиц, "ВремИдентификаторыКонтактов", "#"+ИдКонтакта); Иначе Контакт = ПолучитьОбъектПоИдентификаторуИзВременнойТаблицы(МенеджерВременныхТаблиц, "ВремИдентификаторыКонтактов", ИдКонтакта); КонецЕсли; Если НЕ ЗначениеЗаполнено(Контакт) Тогда Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Информация, "Не найден контакт по ид. Попытка создания контакта с Ид: " + ИдКонтакта); Если ЕстьКомпания Тогда Контакт = СформироватьКомпаниюКонтактПоИд(ОбщиеНастройки, "Контакт", ИдКонтакта); Иначе Контакт = СформироватьКомпаниюКонтактПоИд(ОбщиеНастройки, "КомпанияКонтакт", ИдКонтакта); КонецЕсли; КонецЕсли; КонецЕсли; Если ЗначениеЗаполнено(Контакт) Тогда Если ТипЗнч(Контакт) = Тип("СправочникСсылка.КонтактныеЛицаПартнеров") Тогда Результат.КонтактноеЛицо = Контакт; ИначеЕсли ТипЗнч(Контакт) = Тип("СправочникСсылка.Партнеры") Тогда Если ЗначениеЗаполнено(Компания) Тогда Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.КритическаяОшибка, "Партнерами являются и компания и контакт. Установлен будет Из компании"); Иначе Результат.Партнер = Контакт; КонецЕсли; КонецЕсли; КонецЕсли; Если НЕ ЗначениеЗаполнено(Результат.Партнер) Тогда Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.КритическаяОшибка, "Не найдена компания/контакт с Ид: " + ИдКомпании+"/"+ИдКонтакта); Результат.ЕстьКритическиеОшибки = Истина; КонецЕсли; Если ЗначениеЗаполнено(ИдРеквизита) И ИдРеквизита <> "0" Тогда Результат.Контрагент = ПолучитьОбъектПоИдентификаторуИзВременнойТаблицы(МенеджерВременныхТаблиц, "ВремИдентификаторыРеквизитов", ИдРеквизита); ИдДляЛога = ИдРеквизита; Если НЕ ЗначениеЗаполнено(Результат.Контрагент) Тогда ИнформацияОКонтрагенте = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоИдБ24Объекта(ОбщиеНастройки.Портал, ОбщиеНастройки.ТипыОбъектовОбмена.Реквизит, ИдРеквизита); Если ИнформацияОКонтрагенте <> Неопределено Тогда Результат.Контрагент = ИнформацияОКонтрагенте.Объект; КонецЕсли; Если НЕ ЗначениеЗаполнено(Результат.Контрагент) Тогда Б24_Синхр_ОбщегоНазначенияСервер.ДобавитьВЛог(ОбщиеНастройки, ОбщиеНастройки.ВариантыОшибок.Ошибка, "Не найден реквизит с Ид: " + ИдДляЛога); ЕстьКритическиеОшибки = Истина; КонецЕсли; КонецЕсли; ИначеЕсли ЗначениеЗаполнено(Результат.Партнер) Тогда Результат.Контрагент = Справочники.Контрагенты.НайтиПоРеквизиту("Партнер", Результат.Партнер); КонецЕсли; Возврат Результат; КонецФункции #КонецОбласти #Область ЗагрузкаДанныхПоИд Функция СформироватьКомпаниюКонтактПоИд(пОбщиеНастройки, ТипВладельца, Ид) Результат = Справочники.Контрагенты.ПустаяСсылка(); СтруктураДанных = Новый Структура; СтруктураДанных.Вставить("Клиент" , Новый Массив); СтруктураДанных.Вставить("Реквизит" , Новый Массив); СтруктураДанных.Вставить("Адреса" , Новый Массив); СтруктураДанных.Вставить("БанкСчета", Новый Массив); Если ТипВладельца = "Компания" Тогда МетодКлиента = "crm.company.get?id=" + Ид; МетодРеквизита = "crm.requisite.list?filter[ENTITY_ID]=" + Ид + "&filter[ENTITY_TYPE_ID]=4"; Иначе МетодКлиента = "crm.contact.get?id=" + Ид; МетодРеквизита = "crm.requisite.list?filter[ENTITY_ID]=" + Ид + "&filter[ENTITY_TYPE_ID]=3"; КонецЕсли; ТелоHTTPЗапроса = ""; ТелоHTTPЗапроса = ТелоHTTPЗапроса + "&" + "cmd[K]=" + Б24_Синхр_RestApiВызовСервера.ЗакодироватьСтрокуСервер(МетодКлиента); ТелоHTTPЗапроса = ТелоHTTPЗапроса + "&" + "cmd[R]=" + Б24_Синхр_RestApiВызовСервера.ЗакодироватьСтрокуСервер(МетодРеквизита); СтруктураОтвета = Б24_Синхр_RestApiВызовСервера.ОтправкаДанныхНаПорталЧерезBatch(пОбщиеНастройки, ТелоHTTPЗапроса); Если СтруктураОтвета = Неопределено Тогда Возврат Результат; КонецЕсли; result = СтруктураОтвета.Получить("result"); Если result <> Неопределено Тогда result2 = result.Получить("result"); Если result2 <> Неопределено Тогда ДанныеКлиента = result2.Получить("K"); ДанныеРеквизита = result2.Получить("R"); Если ДанныеКлиента <> Неопределено Тогда СтруктураДанных.Клиент.Добавить(ДанныеКлиента); КонецЕсли; Если ДанныеРеквизита <> Неопределено Тогда СтруктураДанных.Реквизит = ДанныеРеквизита; КонецЕсли; КонецЕсли; КонецЕсли; ПодробныеДанные = Новый Структура; ПодробныеДанные.Вставить("ИнформацияОРеквизитах", СтруктураДанных.Реквизит); Если ТипВладельца = "Компания" Тогда ПодробныеДанные.Вставить("ИнформацияОКомпаниях", СтруктураДанных.Клиент); ЗагрузитьОбновитьКомпании(пОбщиеНастройки, ПодробныеДанные); ИнформацияОКлиенте = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоИдБ24Объекта(пОбщиеНастройки.Портал, пОбщиеНастройки.ТипыОбъектовОбмена.Компания, Ид); ИначеЕсли ТипВладельца = "Контакт" Тогда ПодробныеДанные.Вставить("ИнформацияОКонтактах", СтруктураДанных.Клиент); ЗагрузитьОбновитьКонтакты(пОбщиеНастройки, ПодробныеДанные); ИнформацияОКлиенте = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоИдБ24Объекта(пОбщиеНастройки.Портал, пОбщиеНастройки.ТипыОбъектовОбмена.Контакт, "#"+Ид); Иначе ПодробныеДанные.Вставить("ИнформацияОКонтактах", СтруктураДанных.Клиент); ЗагрузитьОбновитьКонтакты(пОбщиеНастройки, ПодробныеДанные, Истина); ИнформацияОКлиенте = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоИдБ24Объекта(пОбщиеНастройки.Портал, пОбщиеНастройки.ТипыОбъектовОбмена.Контакт, Ид); КонецЕсли; Если ИнформацияОКлиенте = Неопределено Тогда Возврат Результат; Иначе Результат = ИнформацияОКлиенте.Объект; КонецЕсли; // Предполагаем, что запросов будет менее 51 т.е. меньше 25 реквизитов(на каждый 2 запроса) и у каждого меньше 50 банк. счетов. КоличествоЗапросов = 0; ТелоHTTPЗапроса = ""; Для каждого ТекРеквизит Из СтруктураДанных.Реквизит Цикл Если КоличествоЗапросов = 50 Тогда Прервать; КонецЕсли; ИдРеквизита = Формат(ТекРеквизит.Получить("ID"), "ЧГ=0"); МетодАдреса = "crm.address.list?filter[ENTITY_ID]=" + ИдРеквизита + "&filter[ENTITY_TYPE_ID]=8"; МетодБанкСчета = "crm.requisite.bankdetail.list?filter[ENTITY_ID]=" + ИдРеквизита; ТелоHTTPЗапроса = ТелоHTTPЗапроса + "&" + "cmd[A]=" + Б24_Синхр_RestApiВызовСервера.ЗакодироватьСтрокуСервер(МетодАдреса); ТелоHTTPЗапроса = ТелоHTTPЗапроса + "&" + "cmd[B]=" + Б24_Синхр_RestApiВызовСервера.ЗакодироватьСтрокуСервер(МетодБанкСчета); КоличествоЗапросов = КоличествоЗапросов + 1; КонецЦикла; Если ТелоHTTPЗапроса <> "" Тогда СтруктураОтвета = Б24_Синхр_RestApiВызовСервера.ОтправкаДанныхНаПорталЧерезBatch(пОбщиеНастройки, ТелоHTTPЗапроса); result = СтруктураОтвета.Получить("result"); Если result <> Неопределено Тогда result2 = result.Получить("result"); Если result2 <> Неопределено Тогда ДанныеАдресов = result2.Получить("A"); ДанныеБанкСчетов = result2.Получить("B"); Если ДанныеАдресов <> Неопределено Тогда СтруктураДанных.Адреса = ДанныеАдресов; КонецЕсли; Если ДанныеБанкСчетов <> Неопределено Тогда СтруктураДанных.БанкСчета = ДанныеБанкСчетов; КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; ЗагрузитьОбновитьРеквизиты(пОбщиеНастройки, СтруктураДанных.Реквизит); ЗагрузитьОбновитьАдресаРеквизитов(пОбщиеНастройки, СтруктураДанных.Адреса); ЗагрузитьОбновитьБанковскиеСчетаКомпанийКонтактов(пОбщиеНастройки, СтруктураДанных.БанкСчета); Возврат Результат; КонецФункции Функция СформироватьБанковскийСчетПоИд(пОбщиеНастройки, Ид) СтруктураДанных = Новый Структура; СтруктураДанных.Вставить("БанкСчета", Новый Массив); МетодБанкСчета = "crm.requisite.bankdetail.get?id=" + Ид; ТелоHTTPЗапроса = ""; ТелоHTTPЗапроса = ТелоHTTPЗапроса + "&" + "cmd[]=" + Б24_Синхр_RestApiВызовСервера.ЗакодироватьСтрокуСервер(МетодБанкСчета); СтруктураОтвета = Б24_Синхр_RestApiВызовСервера.ОтправкаДанныхНаПорталЧерезBatch(пОбщиеНастройки, ТелоHTTPЗапроса); Если СтруктураОтвета = Неопределено Тогда Возврат Справочники.БанковскиеСчетаКонтрагентов.ПустаяСсылка(); КонецЕсли; Result = СтруктураОтвета.Получить("result"); Если result <> Неопределено Тогда result2 = result.Получить("result"); Если result2 <> Неопределено Тогда Если result2.Количество() > 0 Тогда СтруктураДанных.БанкСчета.добавить(result2[0]); КонецЕсли; КонецЕсли; КонецЕсли; ЗагрузитьОбновитьБанковскиеСчетаКомпанийКонтактов(пОбщиеНастройки, СтруктураДанных.БанкСчета); ИнформацияОБанкСчете = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоИдБ24Объекта(пОбщиеНастройки.Портал, пОбщиеНастройки.ТипыОбъектовОбмена.БанковскийСчетРеквизита, Ид); Если ИнформацияОБанкСчете = Неопределено Тогда Возврат Справочники.БанковскиеСчетаКонтрагентов.ПустаяСсылка(); Иначе Возврат ИнформацияОБанкСчете.Объект; КонецЕсли; КонецФункции Функция СформироватьНоменклатуруПоИд(пОбщиеНастройки, Ид) Результат = Неопределено; СтруктураДанных = Новый Структура; СтруктураДанных.Вставить("Товары", Новый Массив); МетодБанкСчета = "crm.product.get?id=" + Ид; ТелоHTTPЗапроса = ""; ТелоHTTPЗапроса = ТелоHTTPЗапроса + "&" + "cmd[]=" + Б24_Синхр_RestApiВызовСервера.ЗакодироватьСтрокуСервер(МетодБанкСчета); СтруктураОтвета = Б24_Синхр_RestApiВызовСервера.ОтправкаДанныхНаПорталЧерезBatch(пОбщиеНастройки, ТелоHTTPЗапроса); Если СтруктураОтвета = Неопределено Тогда Возврат Результат; КонецЕсли; Result = СтруктураОтвета.Получить("result"); Если result <> Неопределено Тогда result2 = result.Получить("result"); Если result2 <> Неопределено Тогда Если result2.Количество() > 0 Тогда СтруктураДанных.Товары.Добавить(result2[0]); КонецЕсли; КонецЕсли; КонецЕсли; ЗагрузитьОбновитьТовары(пОбщиеНастройки, СтруктураДанных.Товары); ИнформацияОТоваре = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоИдБ24Объекта(пОбщиеНастройки.Портал, пОбщиеНастройки.ТипыОбъектовОбмена.Товар, Ид); Если ИнформацияОТоваре = Неопределено Тогда Возврат Результат; Иначе Результат = Новый Структура; Результат.Вставить("Объект" , ИнформацияОТоваре.Объект); Результат.Вставить("ПодчиненныйОбъект" , ИнформацияОТоваре.ПодчиненныйОбъект); Возврат Результат; КонецЕсли; КонецФункции Функция СформироватьЕдиницуИзмеренияПоИд(пОбщиеНастройки, Ид) Результат = Неопределено; СтруктураДанных = Новый Структура; СтруктураДанных.Вставить("ЕдиницыИзмерения", Новый Массив); МетодБанкСчета = "crm.measure.get?id=" + Ид; ТелоHTTPЗапроса = ""; ТелоHTTPЗапроса = ТелоHTTPЗапроса + "&" + "cmd[]=" + Б24_Синхр_RestApiВызовСервера.ЗакодироватьСтрокуСервер(МетодБанкСчета); СтруктураОтвета = Б24_Синхр_RestApiВызовСервера.ОтправкаДанныхНаПорталЧерезBatch(пОбщиеНастройки, ТелоHTTPЗапроса); Если СтруктураОтвета = Неопределено Тогда Возврат Результат; КонецЕсли; Result = СтруктураОтвета.Получить("result"); Если result <> Неопределено Тогда result2 = result.Получить("result"); Если result2 <> Неопределено Тогда Если result2.Количество() > 0 Тогда СтруктураДанных.ЕдиницыИзмерения.Добавить(result2[0]); КонецЕсли; КонецЕсли; КонецЕсли; ЗагрузитьОбновитьТовары(пОбщиеНастройки, СтруктураДанных.ЕдиницыИзмерения); ИнформацияОЕдиницеИзмерения = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоИдБ24Объекта(пОбщиеНастройки.Портал, пОбщиеНастройки.ТипыОбъектовОбмена.ЕдиницаИзмерения, Ид); Если ИнформацияОЕдиницеИзмерения = Неопределено Тогда Возврат Результат; Иначе Возврат ИнформацияОЕдиницеИзмерения.Объект; КонецЕсли; КонецФункции Функция СформироватьСделкуПоИд(пОбщиеНастройки, Ид) Экспорт Результат = Документы.ЗаказКлиента.ПустаяСсылка(); ПрефиксВнешнихКодовБитрикс24 = Б24_Синхр_СинхронизацияСервер.ПолучитьПрефиксВнешнихКодовБитрикс24(); СтруктураДанных = Новый Структура; СтруктураДанных.Вставить("ИнформацияОСделках" , Новый Массив); СтруктураДанных.Вставить("ИнформацияОРеквизитахСделок" , Новый Массив); СтруктураДанных.Вставить("ИнформацияОТоварахСделок" , Новый Массив); МетодСделки = "crm.deal.get?id=" + Ид; МетодРеквизитовСделки = "crm.requisite.link.get?entityId=" + Ид + "&entityTypeId=2"; МетодТоваровСделки = "crm.deal.productrows.get?id=" + Ид; мЗапросы = Новый Массив; мЗапросы.Добавить(МетодСделки); мЗапросы.Добавить(МетодРеквизитовСделки); мЗапросы.Добавить(МетодТоваровСделки); ТелоHTTPЗапроса = ""; ТелоHTTPЗапроса = ТелоHTTPЗапроса + "&" + "cmd[S]=" + Б24_Синхр_RestApiВызовСервера.ЗакодироватьСтрокуСервер(МетодСделки); ТелоHTTPЗапроса = ТелоHTTPЗапроса + "&" + "cmd[RS]=" + Б24_Синхр_RestApiВызовСервера.ЗакодироватьСтрокуСервер(МетодРеквизитовСделки); ТелоHTTPЗапроса = ТелоHTTPЗапроса + "&" + "cmd[TS]=" + Б24_Синхр_RestApiВызовСервера.ЗакодироватьСтрокуСервер(МетодТоваровСделки); СтруктураОтвета = Б24_Синхр_RestApiВызовСервера.ОтправкаДанныхНаПорталЧерезBatch(пОбщиеНастройки, ТелоHTTPЗапроса); Если СтруктураОтвета = Неопределено Тогда Возврат Результат; КонецЕсли; result = СтруктураОтвета.Получить("result"); Если result <> Неопределено Тогда result2 = result.Получить("result"); Если result2 <> Неопределено Тогда ДанныеСделок = result2.Получить("S"); ДанныеРеквизитовСделок = result2.Получить("RS"); ДанныеТоваровСделок = result2.Получить("TS"); Если ДанныеСделок <> Неопределено Тогда СтруктураДанных.ИнформацияОСделках.Добавить(ДанныеСделок); КонецЕсли; Если ДанныеРеквизитовСделок <> Неопределено Тогда СтруктураДанных.ИнформацияОРеквизитахСделок.Добавить(ДанныеРеквизитовСделок); КонецЕсли; Если ДанныеТоваровСделок <> Неопределено Тогда СтруктураДанных.ИнформацияОТоварахСделок = ДанныеТоваровСделок; КонецЕсли; КонецЕсли; КонецЕсли; Б24_Синхр_ЗагрузкаВызовСервера.ЗагрузитьОбновитьСделки(пОбщиеНастройки, СтруктураДанных); ИнформацияОСделке = Б24_Синхр_СинхронизацияВызовСервера.ПолучитьЗначениеПоИдБ24Объекта(пОбщиеНастройки.Портал, пОбщиеНастройки.ТипыОбъектовОбмена.Сделка, ПрефиксВнешнихКодовБитрикс24.Сделки + Ид); Если ИнформацияОСделке = Неопределено Тогда Возврат Результат; Иначе Возврат ИнформацияОСделке.Объект; КонецЕсли; КонецФункции #КонецОбласти