Имя: Пароль:
1C
1С v8
Обмен с сайтом не выгружает количество по отбору
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