Выгрузка товаров из 1с УТ11 на сайт, нет цен и количества.

1. seregapplk 31.07.21 14:50 Сейчас в теме
Доброго времени суток.
Проблема с выгрузкой товаров на сайт. Сайт на wordpress плагин
Вот https://ru.wordpress.org/plugins/woocommerce-and-1centerprise-data-exchange/#description
В ут 10.3 работал как часы
В 11 промучился с договором,
Потом международный формат единицы измерения должен быть 3 символа, в настройках галочки
Выгружать
Катало товаров
Цены по соглашениям и остатки по складам ( в соглашении разрешение внешним пользователям).
Режим выгрузки все
Таблица как логов
Каталог "такой то" группа соответствует названию " такая то"
Идентификатор "программа автоматически подставляет"
Отбор " остаток на складе больше 0"
И все равно весь список шарашит туда
Убился, не понимаю в чём дело.
Прикрепленные файлы:
Найденные решения
4. seregapplk 01.08.21 13:11 Сейчас в теме
каталог один оставил (все),
группы в списке,
остаток больше 0,
все равно пустую номенклатуру загоняет.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. alxarz 32 01.08.21 09:44 Сейчас в теме
(1)
И все равно весь список шарашит туда
Убился, не понимаю в чём дело.
так выбрано же - все данные выгружать, вот он и выгружает все при каждой выгрузке, поставить изменения, первый раз полная пройдёт, дальше только то что изменилось с последней выгрузки...
3. seregapplk 01.08.21 10:11 Сейчас в теме
боюсь, полная это немного другое, имеется ввиду что весь список на сайте будет очищен и пересоздан.
4. seregapplk 01.08.21 13:11 Сейчас в теме
каталог один оставил (все),
группы в списке,
остаток больше 0,
все равно пустую номенклатуру загоняет.
5. M_A_D 184 02.08.21 08:04 Сейчас в теме
(4)склады нужно выбрать....
Сейчас если хоть на каком-то складе завалялась штучка вывалится позиция на сайт...
6. seregapplk 03.08.21 10:08 Сейчас в теме
все равно пустую номенклатуру загоняет
7. seregapplk 03.08.21 13:23 Сейчас в теме
выгружает только если в список загнать конкретную номенклатуру, но тоже плевать на остатки по складам
8. seregapplk 03.08.21 13:39 Сейчас в теме
Вот код из отладчика, подскажите что не так
Процедура ЗаполнитьТаблицаОбновленияПакета(МассивНоменклатуры, ТаблицаИсточник, ТаблицаПриемник)
	
	Для Каждого ТекСтрока Из ТаблицаИсточник Цикл
		
		Если МассивНоменклатуры.Найти(ТекСтрока.Номенклатура) = Неопределено Тогда
			Продолжить;
		КонецЕсли;
		
		НоваяСтрока = ТаблицаПриемник.Добавить();
		ЗаполнитьЗначенияСвойств(НоваяСтрока, ТекСтрока);

	КонецЦикла;
	
	ТаблицаЦены = ТаблицаПриемник.Скопировать();
	ТаблицаЦены.Свернуть("Номенклатура, Характеристика, ЦенаЗаЕдиницу, ТипЦены, ТипЦеныВалютаКод,
																|ТипЦеныЕдиницаЦеныНаименованиеСокращенное,
																|ТипЦеныЕдиницаЦеныКоэффициент");
	
	ТаблицаОстатки = ТаблицаПриемник.Скопировать();
	ТаблицаОстатки.Свернуть("Номенклатура, Характеристика, Склад, ОстатокНаСкладе");
	
	ТаблицаПриемник.Свернуть("Номенклатура, Характеристика", "Цены, Остатки");
	
	Для Каждого ТекСтрока Из ТаблицаПриемник Цикл
		
		Отбор = Новый Структура;
		Отбор.Вставить("Номенклатура", ТекСтрока.Номенклатура);
		Отбор.Вставить("Характеристика", ТекСтрока.Характеристика);
		
		Цены = ТаблицаЦены.Скопировать(Отбор,"ЦенаЗаЕдиницу, ТипЦены, ТипЦеныВалютаКод,
																|ТипЦеныЕдиницаЦеныНаименованиеСокращенное,
																|ТипЦеныЕдиницаЦеныКоэффициент");
		ТекСтрока.Цены = Цены;
		
		Остатки = ТаблицаОстатки.Скопировать(Отбор, "Склад, ОстатокНаСкладе");
		ТекСтрока.Остатки = Остатки;
		
	КонецЦикла;
	
КонецПроцедуры

Процедура ЗаполнитьИзменияПакета(СтрокаТаблицыКаталога, ТаблицаОбновленияПакета, КоммерческаяИнформация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;
		
	КонецЦикла;
	
	Если ВыполнятьОбмен Тогда
		Результат =  Перечисления.РезультатыВыполненияОбмена.Выполнено;
	Иначе
		Результат =  Перечисления.РезультатыВыполненияОбмена.Ошибка;
	КонецЕсли;
	ЗафиксироватьЗавершениеВыгрузкиНоменклатуры(СтрокаТаблицыИнформации, Результат, ТекстСообщения);
	
	Возврат ВыполнятьОбмен;
	
	
КонецФункции

Показать
9. seregapplk 03.08.21 16:26 Сейчас в теме
выборка формируется в процедуре ПолучитьДанныеДляВыгрузкиПакетаПредложений
только где затык непонятно
ПолучитьДанныеДляВыгрузкиПакетаПредложений(ПрикладныеПараметры,Знач КомпоновщикНастроек, ТаблицаДанныеПакетаПредложений,
                                          ОписаниеОшибки)
        
    ТекстыЗапросов = Новый Структура("Цены, Остатки");
    ОбменССайтомПереопределяемый.ПолучитьТекстыЗапросовПакетаПредложений(ТекстыЗапросов);
    ЕстьОшибка = Ложь;
    Для Каждого КлючЗначение Из ТекстыЗапросов Цикл
        Если Не ЗначениеЗаполнено(КлючЗначение.Значение) Тогда
            ОписаниеОшибки = ОписаниеОшибки + НСтр("ru='Не заполнен текст запроса для получения данных:';uk='Не заповнений текст запиту для отримання даних:'")+ КлючЗначение.Ключ
                + Символы.ПС;
            ЕстьОшибка = Истина;
        КонецЕсли;
    КонецЦикла;
    
    Если ЕстьОшибка Тогда
        Возврат;
    КонецЕсли;
    
    ПоляИсточниковДанных = Новый Структура;
    ЗаполнитьПоляИсточниковДанных(ПоляИсточниковДанных, Истина);
    
    ТаблицаЦены = РезультатВыполненияСхемы(КомпоновщикНастроек, ТекстыЗапросов.Цены, ПоляИсточниковДанных.Цены,
        ПрикладныеПараметры, "ПакетПредложений");
    ТаблицаЦены.Индексы.Добавить("Номенклатура");
    
    
    ТаблицаОстатки = РезультатВыполненияСхемы(КомпоновщикНастроек, ТекстыЗапросов.Остатки, ПоляИсточниковДанных.Остатки,
        ПрикладныеПараметры, "ПакетПредложений");
    ТаблицаОстатки.Индексы.Добавить("Номенклатура");

    // Полученные в результате выполнения СКД таблицы значений поместим в новую СКД,

    // чтобы можно было применить отбор по количеству на складе

    
    СхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных;
        
    ИсточникДанных = СхемаКомпоновкиДанных.ИсточникиДанных.Добавить(); 
    ИсточникДанных.Имя                = "ИсточникДанных1";
    ИсточникДанных.ТипИсточникаДанных = "Local";

    ОбъектЦены = СхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхОбъектСхемыКомпоновкиДанных"));
    ОбъектЦены.Имя = "Цены";
    ОбъектЦены.ИмяОбъекта = "Цены";
    ОбъектЦены.ИсточникДанных = "ИсточникДанных1";
    
    ОбъектОстатки = СхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхОбъектСхемыКомпоновкиДанных"));
    ОбъектОстатки.Имя = "Остатки";
    ОбъектОстатки.ИмяОбъекта = "Остатки";
    ОбъектОстатки.ИсточникДанных = "ИсточникДанных1";
    
    ВнешниеНаборыДанных = Новый Структура;
    ВнешниеНаборыДанных.Вставить("Цены", ТаблицаЦены);
    ВнешниеНаборыДанных.Вставить("Остатки", ТаблицаОстатки);
    
    ПоляИсточниковДанных = Новый Структура;
    ЗаполнитьПоляИсточниковДанных(ПоляИсточниковДанных, Истина, Ложь);
    ЗаполнитьПоляСхемыКомпоновки(ПоляИсточниковДанных, СхемаКомпоновкиДанных);
    
    СвязиНаборов = СхемаКомпоновкиДанных.СвязиНаборовДанных;
    
    НоваяСвязь = СвязиНаборов.Добавить();
    НоваяСвязь.НаборДанныхИсточник  = "Цены";
    НоваяСвязь.НаборДанныхПриемник  = "Остатки";
    НоваяСвязь.ВыражениеИсточник    = "Номенклатура";
    НоваяСвязь.ВыражениеПриемник    = "Номенклатура";
    
    НоваяСвязь = СвязиНаборов.Добавить();
    НоваяСвязь.НаборДанныхИсточник  = "Цены";
    НоваяСвязь.НаборДанныхПриемник  = "Остатки";
    НоваяСвязь.ВыражениеИсточник    = "Характеристика";
    НоваяСвязь.ВыражениеПриемник    = "Характеристика";

    НоваяСвязь = СвязиНаборов.Добавить();
    НоваяСвязь.НаборДанныхИсточник  = "Цены";
    НоваяСвязь.НаборДанныхПриемник  = "Остатки";
    НоваяСвязь.ВыражениеИсточник    = "ЕдиницаИзмерения";
    НоваяСвязь.ВыражениеПриемник    = "ЕдиницаИзмерения";
    
    Идентификатор = Новый УникальныйИдентификатор;
    
    АдресСхемыКомпоновкиДанных = ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных, Идентификатор);
    
    ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемыКомпоновкиДанных);
    
    КомпоновщикНастроек1 = Новый КомпоновщикНастроекКомпоновкиДанных;
    КомпоновщикНастроек1.Инициализировать(ИсточникНастроек);
    
    Настройки = Новый ХранилищеЗначения(КомпоновщикНастроек.ПолучитьНастройки());
    КомпоновщикНастроек1.ЗагрузитьНастройки(Настройки.Получить());
    
    ОбщийМассив = ПоляИсточниковДанных.Цены;
    ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ОбщийМассив, ПоляИсточниковДанных.Остатки, Истина);
    
    УдалитьПоляДругихНаборовДанных(ОбщийМассив, КомпоновщикНастроек1.Настройки);
    
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек1.Настройки,,,
                                                Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
    
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,ВнешниеНаборыДанных,,);
        
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
    
    ТаблицаДанныеПакетаПредложений = Новый ТаблицаЗначений;
    
    ПроцессорВывода.УстановитьОбъект(ТаблицаДанныеПакетаПредложений);
    
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);

    ТаблицаДанныеПакетаПредложений.Индексы.Добавить("Номенклатура");

КонецПроцедуры
Показать
10. seregapplk 05.08.21 08:56 Сейчас в теме
Выгружает все цены остатки, но с нулевыми тоже. решение не нашел.
11. anchorman 06.08.21 16:43 Сейчас в теме
Пользуюсь сторонней разработкой unimodul. Непростое внедрение, но работает на WP отлично.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот