Выгрузка остатков из мегапрайса из 1С на сайт


Мегапрайс ПРО — это дополнение к 1С Управление торговлей  для обработки прайс-листов поставщиков в 1С 8.3

Мегапрайс умеет устанавливать количество товара у поставщика.

ЗАДАЧА: выгружать это количество в интернет-магазин на Битриксе через модуль обмена, суммировав с реальным количеством товара на складе компании. Но без виртуальных складов и приходования товара на них.


РЕШЕНИЕ:

Мегапрайс хранит количество товара у поставщика в Регистре Сведений  "Мегапрайс: цены поставщиков"

  1. Заходим в конфигуратор, открываем конфигурацию

  2. Общие > Общие модули > Б_ОбменССайтомСерверВыгрузкаДанных

  3. Функция СформироватьВременныеТаблицыПоИнформацииОТоварахПакета

  4. После иницилизации переменной ЗапросОстатков иницилизируем переменную ЗапросОстатковМегапрайса

ЗапросОстатковМегапрайса = "
    |ВЫБРАТЬ
    |   Мегапрайс.Номенклатура КАК Номенклатура,
    |   Мегапрайс.ХарактеристикаНоменклатуры КАК Характеристика,
    |   СУММА(Мегапрайс.Количество) Как Остаток
   |ПОМЕСТИТЬ ВремМегапрайс
    |ИЗ 
   |   РегистрСведений.мегапрайсЦеныНоменклатурыПоставщиков 
    |КАК Мегапрайс 
   |ГДЕ
   |   Мегапрайс.Номенклатура.Ссылка В(&СписокТоваров)
   |   И Мегапрайс.Количество>0  
    |СГРУППИРОВАТЬ ПО    
    |   Мегапрайс.Номенклатура, 
    |   Мегапрайс.ХарактеристикаНоменклатуры
   |////////////////////////////////////////////////////////////////////////////////";
5. В этой же функции заменяем  строчку

ТекстЗапроса = ТекстЗапроса + Символы.ПС + ";" + Символы.ПС   + ЗапросОстатков;
на
ТекстЗапроса = ТекстЗапроса + Символы.ПС + ";" + Символы.ПС   + ЗапросОстатков + Символы.ПС + ";" + ЗапросОстатковМегапрайса ;
получается так:
Если ПараметрыОбмена.ВыгружатьОстатки Тогда
      //было так:
      //ТекстЗапроса = ТекстЗапроса + Символы.ПС + ";" + Символы.ПС   + ЗапросОстатков;
      
      ТекстЗапроса = ТекстЗапроса + Символы.ПС + ";" + Символы.ПС   + ЗапросОстатков + Символы.ПС + ";" + ЗапросОстатковМегапрайса ;
         
   КонецЕсли;
5. Процедура ВыгрузитьОстаткиXDTO
там есть
ЗапросПоОстаткам = Новый Запрос;
      ЗапросПоОстаткам.МенеджерВременныхТаблиц = лМенеджерВременныхТаблиц;
      //Временная таблица формируется в функции СформироватьВременныеТаблицыПоИнформацииОТоварахПакета
      ЗапросПоОстаткам.Текст = "ВЫБРАТЬ * ИЗ ВремОстаткиПоСкладам КАК ВремОстаткиПоСкладам
      |ГДЕ ВремОстаткиПоСкладам.Номенклатура = &Номенклатура И ВремОстаткиПоСкладам.Характеристика = &Характеристика  
      |УПОРЯДОЧИТЬ ПО
      |   ИдентификаторНоменклатуры,
      |   ИдентификаторХарактеристики";
      ЗапросПоОстаткам.УстановитьПараметр("Номенклатура",Выборка.Номенклатура);
      ЗапросПоОстаткам.УстановитьПараметр("Характеристика",Выборка.Характеристика);
      
      ТзнОстатков = ЗапросПоОстаткам.Выполнить().Выгрузить();
после него вставляем

ЗапросПоМегапрайсу.МенеджерВременныхТаблиц = лМенеджерВременныхТаблиц;
      //Временная таблица формируется в функции СформироватьВременныеТаблицыПоИнформацииОТоварахПакета
      ЗапросПоМегапрайсу.Текст = "ВЫБРАТЬ * ИЗ ВремМегапрайс КАК ВремМегапрайс
      |ГДЕ ВремМегапрайс.Номенклатура = &Номенклатура И ВремМегапрайс.Характеристика = &Характеристика";
      ЗапросПоМегапрайсу.УстановитьПараметр("Номенклатура",Выборка.Номенклатура);
      ЗапросПоМегапрайсу.УстановитьПараметр("Характеристика",Выборка.Характеристика);      
      ОстаткиМегапрайс = ЗапросПоМегапрайсу.Выполнить().Выгрузить();

И
Если лВыгрузкаПоСкладам тогда 
.
.
.
Иначе
         
         XDTOОстаток               = ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOОстатокТип); 

         ТзнОстатков.Свернуть("ИдентификаторНоменклатуры, ИдентификаторХарактеристики", "Остаток");   
         
         Если ТзнОстатков.Количество() > 0 тогда
            XDTOОстаток.Количество    = ТзнОстатков[0].Остаток;
         Иначе
            XDTOОстаток.Количество    = 0;
         Конецесли; 
         
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//добавляем данные строчки
         Если ((ОстаткиМегапрайс.Количество() > 0) И (ОстаткиМегапрайс[0].Остаток > 0)) тогда
            XDTOОстаток.Количество    = XDTOОстаток.Количество + ОстаткиМегапрайс[0].Остаток;
         Конецесли;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
         
         XDTOОстатки.Остаток.Добавить(XDTOОстаток); 
         

         Итератор        = Итератор + 1;
         
      КонецЕсли;