Функция ЗагрузитьОбновитьТовары(пОбщиеНастройки, мДанных) Экспорт Результат = Новый Массив; ОбщиеНастройки = Новый Структура; Для Каждого ЭлементСтруктуры Из пОбщиеНастройки Цикл ОбщиеНастройки.Вставить(ЭлементСтруктуры.Ключ, ЭлементСтруктуры.Значение); КонецЦикла; Б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_Синхр_ЗагрузкаВызовСервера
(562.67 КБ)
Б24_Синхр_СинхронизацияВызовСервера
(562.67 КБ)