Выгрузка товаров из 1с УТ11 на сайт, нет цен и количества.
Доброго времени суток.
Проблема с выгрузкой товаров на сайт. Сайт на wordpress плагин
Вотhttps://ru.wordpress.org/plugins/woocommerce-and-1centerprise-data-exchange/#description
В ут 10.3 работал как часы
В 11 промучился с договором,
Потом международный формат единицы измерения должен быть 3 символа, в настройках галочки
Выгружать
Катало товаров
Цены по соглашениям и остатки по складам ( в соглашении разрешение внешним пользователям).
Режим выгрузки все
Таблица как логов
Каталог "такой то" группа соответствует названию " такая то"
Идентификатор "программа автоматически подставляет"
Отбор " остаток на складе больше 0"
И все равно весь список шарашит туда
Убился, не понимаю в чём дело.
Проблема с выгрузкой товаров на сайт. Сайт на wordpress плагин
Вот
В ут 10.3 работал как часы
В 11 промучился с договором,
Потом международный формат единицы измерения должен быть 3 символа, в настройках галочки
Выгружать
Катало товаров
Цены по соглашениям и остатки по складам ( в соглашении разрешение внешним пользователям).
Режим выгрузки все
Таблица как логов
Каталог "такой то" группа соответствует названию " такая то"
Идентификатор "программа автоматически подставляет"
Отбор " остаток на складе больше 0"
И все равно весь список шарашит туда
Убился, не понимаю в чём дело.
Прикрепленные файлы:
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Вот код из отладчика, подскажите что не так
Процедура ЗаполнитьТаблицаОбновленияПакета(МассивНоменклатуры, ТаблицаИсточник, ТаблицаПриемник)
Для Каждого ТекСтрока Из ТаблицаИсточник Цикл
Если МассивНоменклатуры.Найти(ТекСтрока.Номенклатура) = Неопределено Тогда
Продолжить;
КонецЕсли;
НоваяСтрока = ТаблицаПриемник.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, ТекСтрока);
КонецЦикла;
ТаблицаЦены = ТаблицаПриемник.Скопировать();
ТаблицаЦены.Свернуть("Номенклатура, Характеристика, ЦенаЗаЕдиницу, ТипЦены, ТипЦеныВалютаКод,
|ТипЦеныЕдиницаЦеныНаименованиеСокращенное,
|ТипЦеныЕдиницаЦеныКоэффициент");
ТаблицаОстатки = ТаблицаПриемник.Скопировать();
ТаблицаОстатки.Свернуть("Номенклатура, Характеристика, Склад, ОстатокНаСкладе");
ТаблицаПриемник.Свернуть("Номенклатура, Характеристика", "Цены, Остатки");
Для Каждого ТекСтрока Из ТаблицаПриемник Цикл
Отбор = Новый Структура;
Отбор.Вставить("Номенклатура", ТекСтрока.Номенклатура);
Отбор.Вставить("Характеристика", ТекСтрока.Характеристика);
Цены = ТаблицаЦены.Скопировать(Отбор,"ЦенаЗаЕдиницу, ТипЦены, ТипЦеныВалютаКод,
|ТипЦеныЕдиницаЦеныНаименованиеСокращенное,
|ТипЦеныЕдиницаЦеныКоэффициент");
ТекСтрока.Цены = Цены;
Остатки = ТаблицаОстатки.Скопировать(Отбор, "Склад, ОстатокНаСкладе");
ТекСтрока.Остатки = Остатки;
КонецЦикла;
КонецПроцедуры
Процедура ЗаполнитьИзменияПакета(СтрокаТаблицыКаталога, ТаблицаОбновленияПакета, КоммерческаяИнформацияXDTO)
ПакетCML = ПакетCML();
ИзмененияПакетаПредложенийТип = ПакетCML.Получить("ИзмененияПакетаПредложений");
ИзмененияПакетаПредложенийXDTO = ФабрикаXDTO.Создать(ИзмененияПакетаПредложенийТип);
ИзмененияПакетаПредложенийXDTO.Ид = СтрокаТаблицыКаталога.ИдентификаторКаталога+"#";
ИзмененияПакетаПредложенийXDTO.ИдКаталога = СтрокаТаблицыКаталога.ИдентификаторКаталога;
ПредложенияТип = ПолучитьТипСвойстваОтТипаОбъектаXDTO(ИзмененияПакетаПредложенийТип, "Предложения");
ПредложенияXDTO = ФабрикаXDTO.Создать(ПредложенияТип);
ПредложениеТип = ПолучитьТипСвойстваОтТипаОбъектаXDTO(ПредложенияТип, "Предложение");
ЦенаТип = ПакетCML.Получить("Цена");
ОстаткиПоСкладамТип = ПакетCML.Получить("ОстаткиПоСкладам");
ЦеныТип = ПолучитьТипСвойстваОтТипаОбъектаXDTO(ПредложениеТип, "Цены");
Для Каждого ТекСтрока Из ТаблицаОбновленияПакета Цикл
ПредложениеXDTO = ФабрикаXDTO.Создать(ПредложениеТип);
ПредложениеXDTO.Ид = УникальныйИдентификаторОбъекта(ТекСтрока.Номенклатура);
Если ЗначениеЗаполнено(ТекСтрока.Характеристика) Тогда
ПредложениеXDTO.ИдХарактеристики = УникальныйИдентификаторОбъекта(ТекСтрока.Характеристика);
КонецЕсли;
ЦеныXDTO = ФабрикаXDTO.Создать(ЦеныТип);
Для Каждого СтрокаТипЦены Из ТекСтрока.Цены Цикл
ЦенаXDTO = ФабрикаXDTO.Создать(ЦенаТип);
ЦенаXDTO.ИдТипаЦены = УникальныйИдентификаторОбъекта(СтрокаТипЦены.ТипЦены);
ЦенаXDTO.ЦенаЗаЕдиницу = СтрокаТипЦены.ЦенаЗаЕдиницу;
ЦенаXDTO.Коэффициент = СтрокаТипЦены.ТипЦеныЕдиницаЦеныКоэффициент;
ЦенаXDTO.Валюта = СтрокаТипЦены.ТипЦеныВалютаКод;
ЦенаXDTO.Единица = СтрокаТипЦены.ТипЦеныЕдиницаЦеныНаименованиеСокращенное;
ЦеныXDTO.Цена.Добавить(ЦенаXDTO);
КонецЦикла;
Если ЦеныXDTO.Цена.Количество() > 0 Тогда
ПредложениеXDTO.Цены = ЦеныXDTO;
КонецЕсли;
ОстатокВсего = 0;
Для Каждого СтрокаОстаткиПоСкладам Из ТекСтрока.Остатки Цикл
Если Не ЗначениеЗаполнено(СтрокаОстаткиПоСкладам.Склад) Тогда
Продолжить;
КонецЕсли;
ОстаткиПоСкладамXDTO = ФабрикаXDTO.Создать(ОстаткиПоСкладамТип);
ОстаткиПоСкладамXDTO.ИдСклада = УникальныйИдентификаторОбъекта(СтрокаОстаткиПоСкладам.Склад);
ОстаткиПоСкладамXDTO.КоличествоНаСкладе = СтрокаОстаткиПоСкладам.ОстатокНаСкладе;
ПредложениеXDTO.Склады.Добавить(ОстаткиПоСкладамXDTO);
ОстатокВсего = ОстатокВсего + СтрокаОстаткиПоСкладам.ОстатокНаСкладе;
КонецЦикла;
ПредложениеXDTO.Количество = ОстатокВсего;
ПредложенияXDTO.Предложение.Добавить(ПредложениеXDTO);
КонецЦикла;
ИзмененияПакетаПредложенийXDTO.Предложения = ПредложенияXDTO;
КоммерческаяИнформацияXDTO.ИзмененияПакетаПредложений.Добавить(ИзмененияПакетаПредложенийXDTO);
КонецПроцедуры
Процедура ЗаполнитьТаблицуДляОтправкиДаннымиНоменклатуры(МассивНоменклатуры, СтруктураИсходныхТаблиц, ТаблицаПриемник)
Для Каждого ТекСтрока Из СтруктураИсходныхТаблиц.Номенклатура Цикл
Если МассивНоменклатуры.Найти(ТекСтрока.Номенклатура) = Неопределено Тогда
Продолжить;
КонецЕсли;
НоваяСтрока = ТаблицаПриемник.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, ТекСтрока);
Отбор = Новый Структура;
Отбор.Вставить("Номенклатура", ТекСтрока.Номенклатура);
Если Не СтруктураИсходныхТаблиц.Характеристики = Неопределено Тогда
Характеристики = СтруктураИсходныхТаблиц.Характеристики.Скопировать(Отбор);
НоваяСтрока.Характеристики = Характеристики;
КонецЕсли;
Файлы = СтруктураИсходныхТаблиц.Файлы.Скопировать(Отбор);
НоваяСтрока.Файлы = Файлы;
Свойства = СтруктураИсходныхТаблиц.Свойства.Скопировать(Отбор);
НоваяСтрока.Свойства = Свойства;
КонецЦикла;
КонецПроцедуры
Процедура ЗаполнитьТаблицуФормированияПакетаПредложений(МассивНоменклатуры, ТаблицаИсточник, ТаблицаПриемник)
Для Каждого ЭлементМассива Из МассивНоменклатуры Цикл
Отбор = Новый Структура;
Отбор.Вставить("Номенклатура", ЭлементМассива);
ТаблицаТипыЦен = ТаблицаИсточник.Скопировать(Отбор);
ТаблицаТипыЦен.Свернуть("ТипЦены,
|ТипЦеныЦенаВключаетНДС,
|ТипЦеныНаименование,
|ТипЦеныВалютаКод,
|ТипЦеныЕдиницаЦеныНаименованиеСокращенное,
|ТипЦеныЕдиницаЦеныКоэффициент,
|ЦенаЗаЕдиницу,
|Номенклатура,
|Характеристика, ЕдиницаИзмерения");
УдалитьПустыеСтроки(ТаблицаТипыЦен, "ТипЦены");
ТаблицаОстаткиПоСкладам = ТаблицаИсточник.Скопировать(Отбор);
ТаблицаОстаткиПоСкладам.Свернуть("Склад, СкладНаименование, ОстатокНаСкладе,
|Номенклатура, Характеристика, ЕдиницаИзмерения");
УдалитьПустыеСтроки(ТаблицаОстаткиПоСкладам, "Склад");
ПромежуточнаяТаблицаНоменклатуры = ТаблицаИсточник.Скопировать(Отбор);
ПромежуточнаяТаблицаНоменклатуры.Свернуть("Номенклатура, НоменклатураНаименование,
|НоменклатураАртикул,
|НоменклатураПометкаУдаления,
|Характеристика,
|ЕдиницаИзмерения,
|ЕдиницаИзмеренияКод,
|ЕдиницаИзмеренияНаименованиеПолное,
|ЕдиницаИзмеренияМеждународноеСокращение,
|ЕдиницаИзмеренияПересчетКоэф,
|ЕдиницаИзмеренияПересчетЕдиница,
|ЕдиницаИзмеренияПересчетЕдиница");
УдалитьПустыеСтроки(ПромежуточнаяТаблицаНоменклатуры, "НоменклатураНаименование");
Для Каждого ТекСтрока Из ПромежуточнаяТаблицаНоменклатуры Цикл
НоваяСтрока = ТаблицаПриемник.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, ТекСтрока);
ОтборНоменклатураХарактеристика = Новый Структура;
ОтборНоменклатураХарактеристика.Вставить("Номенклатура", ТекСтрока.Номенклатура);
ОтборНоменклатураХарактеристика.Вставить("Характеристика", ТекСтрока.Характеристика);
ОтборНоменклатураХарактеристика.Вставить("ЕдиницаИзмерения", ТекСтрока.ЕдиницаИзмерения);
Остатки = ТаблицаОстаткиПоСкладам.Скопировать(ОтборНоменклатураХарактеристика);
НоваяСтрока.ОстаткиПоСкладам = Остатки;
ТаблицаЦен = ТаблицаТипыЦен.Скопировать(ОтборНоменклатураХарактеристика);
НоваяСтрока.Цены = ТаблицаЦен;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Процедура ЗаполнитьСвойстваНоменклатуры(Знач ТаблицаСвойстваНоменклатуры, СвойстваНоменклатуры)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ВременнаяТаблицаНоменклатура.СвойствоНоменклатуры КАК Свойство,
| ВременнаяТаблицаНоменклатура.ЗначениеСвойства КАК Значение
|ПОМЕСТИТЬ втСвойства
|ИЗ
| &ВременнаяТаблицаНоменклатура КАК ВременнаяТаблицаНоменклатура
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| втСвойства.Свойство КАК Свойство,
| втСвойства.Значение КАК Значение,
| втСвойства.Свойство.ТипЗначения КАК ТипЗначения
|ИЗ
| втСвойства КАК втСвойства
|ИТОГИ ПО
| Свойство";
Запрос.УстановитьПараметр("ВременнаяТаблицаНоменклатура", ТаблицаСвойстваНоменклатуры);
Результат = Запрос.Выполнить();
СвойстваНоменклатуры = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
КонецПроцедуры
Функция ВыгрузитьКаталог(Параметры, СтрокаТаблицыКаталога, ТаблицаИнформации)
ИндексФайлаОбмена = Параметры.ИндексФайлаОбмена;
ВыполнятьОбмен = Истина;
ПерваяПорция = Истина;
СтруктураРезультата = Параметры.СтруктураРезультата;
ТолькоИзменения = Параметры.ВыгружатьИзменения;
Если Параметры.РежимВыгрузки = 0 Тогда
СхемаКомпоновки = ПланыОбмена.ОбменССайтом.ПолучитьМакет("СхемаВыгрузкиКаталогПакетПредложений");
КомпоновщикНастроек = ПолучитьКомпоновщикНастроекСхемыКомпоновки(СхемаКомпоновки,
СтрокаТаблицыКаталога.ХранилищеНастроекКаталогПакет);
Иначе
СхемаКомпоновки = ПланыОбмена.ОбменССайтом.ПолучитьМакет("СхемаВыгрузкиКаталог");
КомпоновщикНастроек = ПолучитьКомпоновщикНастроекСхемыКомпоновки(СхемаКомпоновки,
СтрокаТаблицыКаталога.ХранилищеНастроекКаталог);
КонецЕсли;
// Отборы.
УстановитьОтборКомпоновщика(Параметры, СтрокаТаблицыКаталога, КомпоновщикНастроек);
// Получаем данные для формирования "Каталога номенклатуры".
ТаблицыДляВыгрузкиКаталога = Неопределено;
ОписаниеОшибки = "";
ПолучитьДанныеДляВыгрузкиКаталога(Параметры.ПрикладныеПараметры, КомпоновщикНастроек, ТаблицыДляВыгрузкиКаталога,
ОписаниеОшибки);
Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда
ОбменССайтомСобытия.ЗаписатьОшибку(ОписаниеОшибки, Параметры.УзелОбмена);
Возврат Ложь;
КонецЕсли;
Если ТаблицыДляВыгрузкиКаталога.Номенклатура.Количество() = 0 Тогда
Возврат Истина;
КонецЕсли;
// Заполняем данные Владельца каталога.
ДанныеОрганизацииВладельцаКаталога = Неопределено;
ЗаполнитьДанныеВладельцаКаталога(Параметры, ДанныеОрганизацииВладельцаКаталога);
// Формируем дерево значений, которое будет содержать классификатор каталога.
Классификатор = Неопределено;
ЗаполнитьКлассификатор(ТаблицыДляВыгрузкиКаталога.Номенклатура, Классификатор, Параметры.ПрикладныеПараметры);
// Формируем Выборку свойств номенклатуры для заполнения Классификатора.
СвойстваНоменклатуры = Неопределено;
ЗаполнитьСвойстваНоменклатуры(ТаблицыДляВыгрузкиКаталога.Свойства, СвойстваНоменклатуры);
// Сначала формируем и отправляем классификатор,
// если сайт его успешно загрузит,
// то будем порциями отправлять каталог.
URIПространстваИмен = "urn:1C.ru:commerceml_2";
ПакетCML = ФабрикаXDTO.Пакеты.Получить(URIПространстваИмен);
КоммерческаяИнформацияТип = ПакетCML.Получить("КоммерческаяИнформация");
КоммерческаяИнформацияXDTO = ФабрикаXDTO.Создать(КоммерческаяИнформацияТип);
// Сначала отправляем каталог.
КоммерческаяИнформацияXDTO.ВерсияСхемы = ОбменССайтомПовтИсп.ВерсияСхемы();
КоммерческаяИнформацияXDTO.ДатаФормирования = Параметры.ДатаФормирования;
КлассификаторТип = ПакетCML.Получить("Классификатор");
КлассификаторXDTO = ФабрикаXDTO.Создать(КлассификаторТип);
КлассификаторXDTO.ИД = СтрокаТаблицыКаталога.ИдентификаторКаталога;
КлассификаторXDTO.Наименование = ФорматНаименованияДляXDTO("Классификатор (" + СтрокаТаблицыКаталога.Каталог + ")");
Владелец = ПолучитьКонтрагентаXDTO(ДанныеОрганизацииВладельцаКаталога);
Если Владелец = Неопределено Тогда
ОписаниеИсключительнойОшибки = ОписаниеИсключительнойОшибки(
НСтр("ru='Неудалосьопределитьорганизациювладельцакаталог';uk='Неудалосьопределитьорганизациювладельцакаталога")
+ Символы.ПС + ОписаниеОшибки());
ДобавитьОписаниеОшибки(СтруктураРезультата.ОписаниеОшибки, ОписаниеИсключительнойОшибки);
СтруктураРезультата.ВыгруженоКартинок = 0;
СтруктураРезультата.ВыгруженоТоваров = 0;
Возврат Ложь;
КонецЕсли;
КлассификаторXDTO.Владелец = Владелец;
ДобавитьГруппыКлассификатораXDTO(КлассификаторXDTO, Классификатор.Строки, ПакетCML, Параметры.ПрикладныеПараметры);
// Добавляем свойства номенклатуры.
ДобавитьСвойстваНоменклатурыВКлассификаторXDTO(КлассификаторXDTO, ПакетCML, СвойстваНоменклатуры);
КоммерческаяИнформацияXDTO.Классификатор = КлассификаторXDTO;
ОписаниеОшибки = "";
// Регистрируем номенклатуру в узле.
КолонкаНоменклатуры = ТаблицыДляВыгрузкиКаталога.Номенклатура.ВыгрузитьКолонку("Номенклатура");
МассивНоменклатуры = Новый Массив;
ОбщегоНазначения.ЗаполнитьМассивУникальнымиЗначениями(МассивНоменклатуры, КолонкаНоменклатуры);
Для Каждого ЭлементМассива Из МассивНоменклатуры Цикл
ПланыОбмена.ЗарегистрироватьИзменения(Параметры.УзелОбмена, ЭлементМассива);
КонецЦикла;
// Помечаем зарегистрированную в узле номенклатуру номером сообщения 0.
ПланыОбмена.ВыбратьИзменения(Параметры.УзелОбмена, 0, МассивНоменклатуры);
ИндексПорции = 0;
НомерСообщения = 1;
НомерСообщенияСтарый = Неопределено;
КоличествоПовторов = 0;
СтрокаТаблицыИнформации = ТаблицаИнформации.Добавить();
СтрокаТаблицыИнформации.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ВыгрузкаДанных;
СтрокаТаблицыИнформации.Описание = Строка(ТекущаяДата()) + " " + НСтр("ru='Запуск выгрузки товаров';uk='Запуск вивантаження товарів'");
ТаблицаДляФормированияКаталога = ТаблицыДляВыгрузкиКаталога.Номенклатура.СкопироватьКолонки();
ТаблицаДляФормированияКаталога.Колонки.Добавить("Файлы"); // в эту колонку поместим таблицу значений, содержашую файлы номенклатуры
ТаблицаДляФормированияКаталога.Колонки.Добавить("Свойства"); // в эту колонку поместим таблицу значений, содержашую свойства номенклатуры
ТаблицаДляФормированияКаталога.Колонки.Добавить("Характеристики"); // в эту колонку поместим таблицу значений, содержашую характеристики
ТекстСообщения = "ru = 'Завершена выгрузка товаров'";
Пока ВыполнятьОбмен Цикл
// Получаем порцию товаров.
МассивНоменклатуры = НоменклатураУзла(Параметры.УзелОбмена, Параметры.РазмерПорции, 0);
// Если в узле нет новых товаров, значит остались старые.
Если МассивНоменклатуры.Количество() = 0 Тогда
ТаблицаНоменклатуры = НоменклатураНомерСообщенияУзла(Параметры.УзелОбмена, Параметры.РазмерПорции);
Если ТаблицаНоменклатуры.Количество() = 0 Тогда
Прервать;
КонецЕсли;
Если НомерСообщенияСтарый = ТаблицаНоменклатуры[0].НомерСообщения Тогда
КоличествоПовторов = КоличествоПовторов + 1;
КонецЕсли;
// Если количество повторов больше заданного
// прерываем обмен.
Если КоличествоПовторов >= Параметры.КоличествоПовторов Тогда
ВыполнятьОбмен = Ложь;
Прервать;
КонецЕсли;
МассивНоменклатуры = ТаблицаНоменклатуры.ВыгрузитьКолонку("Номенклатура");
НомерСообщенияСтарый = ТаблицаНоменклатуры[0].НомерСообщения;
КонецЕсли;
// Получаем данные номенклатуры для получения файла.
ТаблицаДляФормированияКаталога.Очистить();
//Т.к. данные в основной таблице храняться в развернутом виде
//(колчество строк будет равно количеству прикрепленных файлов, например)
// необходимо свернуть их по номенклатуре, характеристике , единице измерения.
ЗаполнитьТаблицуДляОтправкиДаннымиНоменклатуры(МассивНоменклатуры, ТаблицыДляВыгрузкиКаталога,
ТаблицаДляФормированияКаталога);
Если ТаблицаДляФормированияКаталога.Количество() = 0 Тогда
Для Каждого ЭлементМассива Из МассивНоменклатуры Цикл
ПланыОбмена.УдалитьРегистрациюИзменений(Параметры.УзелОбмена, ЭлементМассива);
КонецЦикла;
Продолжить;
КонецЕсли;
// Формируем файл с каталогом для отправки на сайт.
КаталогТип = ПакетCML.Получить("Каталог");
КаталогXDTO = ФабрикаXDTO.Создать(КаталогТип);
КаталогXDTO.СодержитТолькоИзменения = (НомерСообщения > 1);
КаталогXDTO.Ид = СтрокаТаблицыКаталога.ИдентификаторКаталога;
КаталогXDTO.ИдКлассификатора = СтрокаТаблицыКаталога.ИдентификаторКаталога;
КаталогXDTO.Наименование = ФорматНаименованияДляXDTO(СтрокаТаблицыКаталога.Каталог);
КаталогXDTO.Владелец = ПолучитьКонтрагентаXDTO(ДанныеОрганизацииВладельцаКаталога);
// Добавляем в каталог информацию о товарах.
ДобавитьНоменклатуруВКаталогXDTO(КаталогXDTO, ПакетCML, Параметры, ТаблицаДляФормированияКаталога);
КаталогXDTO.Проверить();
Если НомерСообщения > 1 Тогда
КоммерческаяИнформацияТип = ПакетCML.Получить("КоммерческаяИнформация");
КоммерческаяИнформацияXDTO = ФабрикаXDTO.Создать(КоммерческаяИнформацияТип);
КонецЕсли;
КоммерческаяИнформацияXDTO.Каталог = КаталогXDTO;
КоммерческаяИнформацияXDTO.ВерсияСхемы = ОбменССайтомПовтИсп.ВерсияСхемы();
КоммерческаяИнформацияXDTO.ДатаФормирования = Параметры.ДатаФормирования;
ИндексПорции = ИндексПорции + 1;
ИмяФайлаКаталога = ПодготовитьПутьДляПлатформы(Параметры.ПлатформаWindows,
Параметры.КаталогНаДиске + "\import"
+ ИндексФайлаОбмена +"_"
+ ИндексПорции + ".xml");
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл(ИмяФайлаКаталога, "UTF-8");
ЗаписьXML.ЗаписатьОбъявлениеXML();
Попытка
КоммерческаяИнформацияXDTO.Проверить();
ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, КоммерческаяИнформацияXDTO, "КоммерческаяИнформация");
ЗаписьXML.Закрыть();
Исключение
ОписаниеИсключительнойОшибки = ОписаниеИсключительнойОшибки(
НСтр("ru='Не удалось записать XML-файл классификатора товаров на диск:';uk='Не вдалося записати XML-файл класифікатора товарів на диск:'")
+ " " + ИмяФайлаКаталога + Символы.ПС + ОписаниеОшибки());
ДобавитьОписаниеОшибки(СтруктураРезультата.ОписаниеОшибки, ОписаниеИсключительнойОшибки);
ДобавитьОписаниеОшибки(СтрокаТаблицыИнформации.Описание, СтруктураРезультата.ОписаниеОшибки);
ЗафиксироватьЗавершениеВыгрузкиНоменклатуры(СтрокаТаблицыИнформации, Перечисления.РезультатыВыполненияОбмена.Ошибка,
ТекстСообщения);
СтруктураРезультата.ВыгруженоКартинок = 0;
СтруктураРезультата.ВыгруженоТоваров = 0;
Возврат Ложь;
КонецПопытки;
// Отправляем файл на сайт.
Если Параметры.ВыгружатьНаСайт Тогда
УдалитьРегистрацию = ВыгрузитьДанныеНаСайт(Параметры, СтрокаТаблицыИнформации);
Иначе
УдалитьРегистрацию = Истина;
КонецЕсли;
// Если файл на сайт был загружен, удаляем регистрацию.
Если УдалитьРегистрацию Тогда
Для Каждого ЭлементМассива Из МассивНоменклатуры Цикл
ПланыОбмена.УдалитьРегистрациюИзменений(Параметры.УзелОбмена, ЭлементМассива);
КонецЦикла;
Иначе
// Если не был отправлен первый файл, который содержит классификатор
// то не будем продолжать обмен, т.к. данные на сайт не загрузятся.
Если НомерСообщения = 1 Тогда
ВыполнятьОбмен = Ложь;
Прервать;
КонецЕсли;
// Если мы имеем дело с данными, которые уже отправлялись на сайт, но не отправились
// то не будем у них изменять номер сообщения.
Если Не НомерСообщенияСтарый = Неопределено Тогда
Продолжить;
КонецЕсли;
// Если товары не были отправлены на сайт, то зарегистрируем их в узле
// и пометим номером сообщения отличным от нуля.
Для Каждого ЭлементМассива Из МассивНоменклатуры Цикл
ПланыОбмена.ЗарегистрироватьИзменения(Параметры.УзелОбмена, ЭлементМассива);
КонецЦикла;
ПланыОбмена.ВыбратьИзменения(Параметры.УзелОбмена, НомерСообщения, МассивНоменклатуры);
КонецЕсли;
НомерСообщения = НомерСообщения + 1;
КонецЦикла;
Если ВыполнятьОбмен Тогда
Результат = Перечисления.РезультатыВыполненияОбмена.Выполнено;
Иначе
Результат = Перечисления.РезультатыВыполненияОбмена.Ошибка;
КонецЕсли;
ЗафиксироватьЗавершениеВыгрузкиНоменклатуры(СтрокаТаблицыИнформации, Результат, ТекстСообщения);
Возврат ВыполнятьОбмен;
КонецФункции
Показать
выборка формируется в процедуре ПолучитьДанныеДляВыгрузкиПакетаПредложений
только где затык непонятно
только где затык непонятно
ПолучитьДанныеДляВыгрузкиПакетаПредложений(ПрикладныеПараметры,Знач КомпоновщикНастроек, ТаблицаДанныеПакетаПредложений,
ОписаниеОшибки)
ТекстыЗапросов = Новый Структура("Цены, Остатки");
ОбменССайтомПереопределяемый.ПолучитьТекстыЗапросовПакетаПредложений(ТекстыЗапросов);
ЕстьОшибка = Ложь;
Для Каждого КлючЗначение Из ТекстыЗапросов Цикл
Если Не ЗначениеЗаполнено(КлючЗначение.Значение) Тогда
ОписаниеОшибки = ОписаниеОшибки + НСтр("ru='Не заполнен текст запроса для получения данных:';uk='Не заповнений текст запиту для отримання даних:'")+ КлючЗначение.Ключ
+ Символы.ПС;
ЕстьОшибка = Истина;
КонецЕсли;
КонецЦикла;
Если ЕстьОшибка Тогда
Возврат;
КонецЕсли;
ПоляИсточниковДанных = Новый Структура;
ЗаполнитьПоляИсточниковДанных(ПоляИсточниковДанных, Истина);
ТаблицаЦены = РезультатВыполненияСхемы(КомпоновщикНастроек, ТекстыЗапросов.Цены, ПоляИсточниковДанных.Цены,
ПрикладныеПараметры, "ПакетПредложений");
ТаблицаЦены.Индексы.Добавить("Номенклатура");
ТаблицаОстатки = РезультатВыполненияСхемы(КомпоновщикНастроек, ТекстыЗапросов.Остатки, ПоляИсточниковДанных.Остатки,
ПрикладныеПараметры, "ПакетПредложений");
ТаблицаОстатки.Индексы.Добавить("Номенклатура");
// Полученные в результате выполнения СКД таблицы значений поместим в новую СКД,
// чтобы можно было применить отбор по количеству на складе
СхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных;
ИсточникДанных = СхемаКомпоновкиДанных.ИсточникиДанных.Добавить();
ИсточникДанных.Имя = "ИсточникДанных1";
ИсточникДанных.ТипИсточникаДанных = "Local";
ОбъектЦены = СхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхОбъектСхемыКомпоновкиДанных"));
ОбъектЦены.Имя = "Цены";
ОбъектЦены.ИмяОбъекта = "Цены";
ОбъектЦены.ИсточникДанных = "ИсточникДанных1";
ОбъектОстатки = СхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхОбъектСхемыКомпоновкиДанных"));
ОбъектОстатки.Имя = "Остатки";
ОбъектОстатки.ИмяОбъекта = "Остатки";
ОбъектОстатки.ИсточникДанных = "ИсточникДанных1";
ВнешниеНаборыДанных = Новый Структура;
ВнешниеНаборыДанных.Вставить("Цены", ТаблицаЦены);
ВнешниеНаборыДанных.Вставить("Остатки", ТаблицаОстатки);
ПоляИсточниковДанных = Новый Структура;
ЗаполнитьПоляИсточниковДанных(ПоляИсточниковДанных, Истина, Ложь);
ЗаполнитьПоляСхемыКомпоновки(ПоляИсточниковДанных, СхемаКомпоновкиДанных);
СвязиНаборов = СхемаКомпоновкиДанных.СвязиНаборовДанных;
НоваяСвязь = СвязиНаборов.Добавить();
НоваяСвязь.НаборДанныхИсточник = "Цены";
НоваяСвязь.НаборДанныхПриемник = "Остатки";
НоваяСвязь.ВыражениеИсточник = "Номенклатура";
НоваяСвязь.ВыражениеПриемник = "Номенклатура";
НоваяСвязь = СвязиНаборов.Добавить();
НоваяСвязь.НаборДанныхИсточник = "Цены";
НоваяСвязь.НаборДанныхПриемник = "Остатки";
НоваяСвязь.ВыражениеИсточник = "Характеристика";
НоваяСвязь.ВыражениеПриемник = "Характеристика";
НоваяСвязь = СвязиНаборов.Добавить();
НоваяСвязь.НаборДанныхИсточник = "Цены";
НоваяСвязь.НаборДанныхПриемник = "Остатки";
НоваяСвязь.ВыражениеИсточник = "ЕдиницаИзмерения";
НоваяСвязь.ВыражениеПриемник = "ЕдиницаИзмерения";
Идентификатор = Новый УникальныйИдентификатор;
АдресСхемыКомпоновкиДанных = ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных, Идентификатор);
ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемыКомпоновкиДанных);
КомпоновщикНастроек1 = Новый КомпоновщикНастроекКомпоновкиДанных;
КомпоновщикНастроек1.Инициализировать(ИсточникНастроек);
Настройки = Новый ХранилищеЗначения(КомпоновщикНастроек.ПолучитьНастройки());
КомпоновщикНастроек1.ЗагрузитьНастройки(Настройки.Получить());
ОбщийМассив = ПоляИсточниковДанных.Цены;
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ОбщийМассив, ПоляИсточниковДанных.Остатки, Истина);
УдалитьПоляДругихНаборовДанных(ОбщийМассив, КомпоновщикНастроек1.Настройки);
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек1.Настройки,,,
Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,ВнешниеНаборыДанных,,);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ТаблицаДанныеПакетаПредложений = Новый ТаблицаЗначений;
ПроцессорВывода.УстановитьОбъект(ТаблицаДанныеПакетаПредложений);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
ТаблицаДанныеПакетаПредложений.Индексы.Добавить("Номенклатура");
КонецПроцедуры
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот