|
Обмен с сайтом не выгружает количество по отбору | ☑ | ||
---|---|---|---|---|
0
seregapplk
05.08.21
✎
15:40
|
Обмен с сайтом не выгружает количество по отбору, отбор работает только если установить конкретную номенклатуру, но если поставить остаток больше 0, выгружает все равно и если есть остаток и если нет. Почему?
выборка формируется в процедуре ПолучитьДанныеДляВыгрузкиПакетаПредложений |
|||
1
seregapplk
05.08.21
✎
15:41
|
Процедура ПолучитьДанныеДляВыгрузкиПакетаПредложений(ПрикладныеПараметры,Знач КомпоновщикНастроек, ТаблицаДанныеПакетаПредложений,
ОписаниеОшибки) ТекстыЗапросов = Новый Структура("Цены, Остатки"); ОбменССайтомПереопределяемый.ПолучитьТекстыЗапросовПакетаПредложений(ТекстыЗапросов); ЕстьОшибка = Ложь; Для Каждого КлючЗначение Из ТекстыЗапросов Цикл Если Не ЗначениеЗаполнено(КлючЗначение.Значение) Тогда ОписаниеОшибки = ОписаниеОшибки + НСтр("ru='Не заполнен текст запроса для получения данных:';uk='Не заповнений текст запиту для отримання даних:'")+ КлючЗначение.Ключ + Символы.ПС; ЕстьОшибка = Истина; КонецЕсли; КонецЦикла; Если ЕстьОшибка Тогда Возврат; КонецЕсли; ПоляИсточниковДанных = Новый Структура; ЗаполнитьПоляИсточниковДанных(ПоляИсточниковДанных, Истина); ТаблицаЦены = РезультатВыполненияСхемы(КомпоновщикНастроек, ТекстыЗапросов.Цены, ПоляИсточниковДанных.Цены, ПрикладныеПараметры, "ПакетПредложений"); ТаблицаЦены.Индексы.Добавить("Номенклатура"); ТаблицаОстатки = РезультатВыполненияСхемы(КомпоновщикНастроек, ТекстыЗапросов.Остатки, ПоляИсточниковДанных.Остатки, ПрикладныеПараметры, "ПакетПредложений"); ТаблицаОстатки.Индексы.Добавить("Номенклатура"); // Полученные в результате выполнения СКД таблицы значений поместим в новую СКД, // чтобы можно было применить отбор по количеству на складе СхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных; ИсточникДанных = СхемаКомпоновкиДанных.ИсточникиДанных.Добавить(); ИсточникДанных.Имя = "ИсточникДанных1"; ИсточникДанных.ТипИсточникаДанных = "Local"; ОбъектЦены = СхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхОбъектСхемыКомпоновкиДанных")); ОбъектЦены.Имя = "Цены"; ОбъектЦены.ИмяОбъекта = "Цены"; ОбъектЦены.ИсточникДанных = "ИсточникДанных1"; ОбъектОстатки = СхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхОбъектСхемыКомпоновкиДанных")); ОбъектОстатки.Имя = "Остатки"; ОбъектОстатки.ИмяОбъекта = "Остатки"; ОбъектОстатки.ИсточникДанных = "ИсточникДанных1"; ВнешниеНаборыДанных = Новый Структура; ВнешниеНаборыДанных.Вставить("Цены", ТаблицаЦены); ВнешниеНаборыДанных.Вставить("Остатки", ТаблицаОстатки); ПоляИсточниковДанных = Новый Структура; ЗаполнитьПоляИсточниковДанных(ПоляИсточниковДанных, Истина, Ложь); ЗаполнитьПоляСхемыКомпоновки(ПоляИсточниковДанных, СхемаКомпоновкиДанных); СвязиНаборов = СхемаКомпоновкиДанных.СвязиНаборовДанных; НоваяСвязь = СвязиНаборов.Добавить(); НоваяСвязь.НаборДанныхИсточник = "Цены"; НоваяСвязь.НаборДанныхПриемник = "Остатки"; НоваяСвязь.ВыражениеИсточник = "Номенклатура"; НоваяСвязь.ВыражениеПриемник = "Номенклатура"; НоваяСвязь = СвязиНаборов.Добавить(); НоваяСвязь.НаборДанныхИсточник = "Цены"; НоваяСвязь.НаборДанныхПриемник = "Остатки"; НоваяСвязь.ВыражениеИсточник = "Характеристика"; НоваяСвязь.ВыражениеПриемник = "Характеристика"; НоваяСвязь = СвязиНаборов.Добавить(); НоваяСвязь.НаборДанныхИсточник = "Цены"; НоваяСвязь.НаборДанныхПриемник = "Остатки"; НоваяСвязь.ВыражениеИсточник = "ЕдиницаИзмерения"; НоваяСвязь.ВыражениеПриемник = "ЕдиницаИзмерения"; Идентификатор = Новый УникальныйИдентификатор; АдресСхемыКомпоновкиДанных = ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных, Идентификатор); ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемыКомпоновкиДанных); КомпоновщикНастроек1 = Новый КомпоновщикНастроекКомпоновкиДанных; КомпоновщикНастроек1.Инициализировать(ИсточникНастроек); Настройки = Новый ХранилищеЗначения(КомпоновщикНастроек.ПолучитьНастройки()); КомпоновщикНастроек1.ЗагрузитьНастройки(Настройки.Получить()); ОбщийМассив = ПоляИсточниковДанных.Цены; ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ОбщийМассив, ПоляИсточниковДанных.Остатки, Истина); УдалитьПоляДругихНаборовДанных(ОбщийМассив, КомпоновщикНастроек1.Настройки); КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек1.Настройки,,, Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,ВнешниеНаборыДанных,,); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; ТаблицаДанныеПакетаПредложений = Новый ТаблицаЗначений; ПроцессорВывода.УстановитьОбъект(ТаблицаДанныеПакетаПредложений); ПроцессорВывода.Вывести(ПроцессорКомпоновки); ТаблицаДанныеПакетаПредложений.Индексы.Добавить("Номенклатура"); КонецПроцедуры |
|||
2
vicof
05.08.21
✎
16:21
|
Надо посмотреть тексты запросов, которые получаются при разных отборах.
|
|||
3
PuhUfa
05.08.21
✎
16:48
|
(0) Моделирую:
У тебя в 1С: Товар1 - 5шт. Делаем обмен. На сайте появляется: Товар1 - 5шт. В 1С продаем Товар1 и получаем остаток 0шт. Делаем обмен. Вопрос: какое количество Товар1 будет на сайте если в обмен не попадает товар с нулевым остатком? |
|||
4
seregapplk
05.08.21
✎
17:01
|
нет, у меня в 1с товар старый с остатком - 0, нет его три года, а он выгружается на сайт
|
|||
5
seregapplk
05.08.21
✎
17:28
|
Простите,
ответ на вопрос, если после продажи делать выгрузку в режиме изменения, то количество как было так и есть, если полный то все равно с остатком 1 если поставить в отборе больше или равно 1 то все равно выгружает с остатком 1 то есть отбор по остатку вообще не работает |
|||
6
seregapplk
06.08.21
✎
08:40
|
пробовал
|
|||
7
seregapplk
06.08.21
✎
08:40
|
ОстатокВсего = 0;
Для Каждого СтрокаОстаткиПоСкладам Из ТекСтрока.Остатки Цикл //// Если СтрокаОстаткиПоСкладам.ОстатокНаСкладе <= 0 ТОгда Продолжить; КонецЕсли //// Если Не ЗначениеЗаполнено(СтрокаОстаткиПоСкладам.Склад) Тогда Продолжить; КонецЕсли; ОстаткиПоСкладамXDTO = ФабрикаXDTO.Создать(ОстаткиПоСкладамТип); ОстаткиПоСкладамXDTO.ИдСклада = УникальныйИдентификаторОбъекта(СтрокаОстаткиПоСкладам.Склад); ОстаткиПоСкладамXDTO.КоличествоНаСкладе = СтрокаОстаткиПоСкладам.ОстатокНаСкладе; ПредложениеXDTO.Склады.Добавить(ОстаткиПоСкладамXDTO); ОстатокВсего = ОстатокВсего + СтрокаОстаткиПоСкладам.ОстатокНаСкладе; КонецЦикла; ПредложениеXDTO.Количество = ОстатокВсего; ПредложенияXDTO.Предложение.Добавить(ПредложениеXDTO); КонецЦикла; ИзмененияПакетаПредложенийXDTO.Предложения = ПредложенияXDTO; КоммерческаяИнформацияXDTO.ИзмененияПакетаПредложений.Добавить(ИзмененияПакетаПредложенийXDTO); |
|||
8
seregapplk
06.08.21
✎
08:40
|
ничего не выходит
|
|||
9
Галахад
гуру
06.08.21
✎
09:05
|
ИМХО, там два типа обмена "полный" и "только изменения".
В первом случае отбор должен срабатывать. Во-втором, пофиг на отбор по количеству. Выгружает то чьи данные изменились. |
|||
10
PuhUfa
06.08.21
✎
09:46
|
(7) Так не взлетит. Выгрузка представляет из себя 2 пакета (а если с заказами то 3). Сначала формируются пакеты с данными номенклатуры import*.xml и они отправляются на сайт (плюсом идут картинки). Потом формируются пакеты предложений offers*.xml (в них как раз отправляются остатки и цены). То что ты написал, если я правильно могу судить, убирает из пакетов предложений товары с остатком = 0, но информация о самом товаре уже ушла на сайт и она там есть. Да у товара не будет данных по ценам и остаткам, но сам он уже там и скорее всего отображается на сайте.
|
|||
11
seregapplk
06.08.21
✎
16:31
|
если делать только изменения то вігружает только номенклатуру затронутую, то есть всю удалят и выгружает в клве 1 ту что я только что продал, хотя ее на складе ноль уже
|
|||
12
seregapplk
06.08.21
✎
16:33
|
да два пакета, отбор не срабатывает, как удалить ее из пакета с данными?
|
|||
13
seregapplk
07.08.21
✎
11:19
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |