Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
20 мая 2024, 20:26

Неверная цена из справочника для выгрузки на сайт

Автор gracio, 20 янв 2016, 02:32

0 Пользователей и 1 гость просматривают эту тему.

gracio

Есть модуль для создания и формирования XML-файла для выгрузки на сайт, который работает с 1 Складом. После запуска, в XML-файл записываются: код, цена и остаток.
Всё хорошо, но цены в него заносятся неверные - точнее верные но берутся с других Складов (Торговых Залов сети магазина). В каталоге в столбце розн.цена такая же ситуация - берутся цены с разных магазинов-филиалов.
Как написать в модуле Выборку для выбора корректной розн. цены нужного склада?

Сам модуль:

Процедура Сформировать()
   
   ДатаОтчета=ПолучитьДатуТА();     
   ТолькоПоОстаткам = 1;
   ВыбТипЦен = "Розничные";
   СпрСклад = СоздатьОбъект("Справочник.Склады");
   Если СпрСклад.НайтиПоКоду(1,) = 1 Тогда
   ВыбСклад = СпрСклад.ТекущийЭлемент();
   Сообщить(ВыбСклад);
   КонецЕсли;   
       СпрЦена = СоздатьОбъект("Справочник.Цены");
   
       ТекДата=Формат(ДатаОтчета,"Д(0)ГГГГММДД");
   
      
      ИсходнаяДиректория="E:\Обменная\Роберт\";               //КаталогИБ()+"Документы\";
      
      Если ФС.СуществуетФайл(ИсходнаяДиректория)=0 Тогда
           ФС.СоздатьКаталог(ИсходнаяДиректория);
        КонецЕсли;
       
      
      ИсходнаяДиректория=ИсходнаяДиректория+ТекДата+"\";      
            
      Если ФС.СуществуетФайл(ИсходнаяДиректория)=0 Тогда
           ФС.СоздатьКаталог(ИсходнаяДиректория);
        КонецЕсли;
       
      ФС.УстТекКаталог(ИсходнаяДиректория);
   
      
      //Создаем объект MSXML2.DOMDocument для формирования XML
      XML_DOM=CreateObject("MSXML2.DOMDocument");
      
      //прописываем заголовок с необходимыми параметрами, например
      Header = XML_DOM.createProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8""" );
      
      //Относим его к верхнему уровню структуры
      XML_DOM.appendChild(Header);
      
      //Формируем тег сообщения
      ТегСообщения = XML_DOM.createElement("Message");
      XML_DOM.appendChild(ТегСообщения);
      
      //Формируем тело файла, начинаем с открытия тега "Body"
      ТегТело = XML_DOM.createElement("Body");
      ТегСообщения.appendChild(ТегТело);
      
      Если ТолькоПоОстаткам=1 Тогда
         
         Запрос = СоздатьОбъект("Запрос");
         
         СтрПериод = ?(ДатаОтчета>= ПолучитьДатуТА(),"",
         "Период с ДатаКонца по ДатаКонца;");
         
         ТекстЗапроса =
         "//{{ЗАПРОС(Сформировать)
         |" + СтрПериод +
         "
         
         |Номенклатура   = Регистр.ОстаткиТоваров.Товар; 
         |Склад         = Регистр.ОстаткиТоваров.Склад;     
         
         |Количество =    Регистр.ОстаткиТоваров.Количество;
         |ЦенаПрод      = Регистр.ОстаткиТоваров.РознЦена;
         |Функция КоличествоКонОст = КонОст(Количество);
         |Группировка Номенклатура;";
         
         
         //Если Товары.РазмерСписка() > 0 Тогда
         //ТекстЗапроса = ТекстЗапроса + "Условие (Номенклатура в Товары);";
         //КонецЕсли;
         
         Если ПустаяСтрока(ВыбСклад) = 0 Тогда
            ТекстЗапроса = ТекстЗапроса + "Условие (Склад = ВыбСклад);";
         КонецЕсли;
         
      Иначе
         
         
         
         ///////////////////////////////////////////////////////////////////////////////////////
         
         
         ЗапросО = СоздатьОбъект("Запрос");
         
         СтрПериод = ?(ДатаОтчета>= ПолучитьДатуТА(),"",
         "Период с ДатаКонца по ДатаКонца;");
         
         ТекстЗапросаО =
         "//{{ЗАПРОС(Сформировать)
         |" + СтрПериод +
         "
         
         |Номенклатура   = Регистр.ОстаткиТоваров.Товар; 
         |Склад         = Регистр.ОстаткиТоваров.Склад;   
         
         |Количество =    Регистр.ОстаткиТоваров.Количество;
         |ЦенаПрод      = Регистр.ОстаткиТоваров.РознЦена;
         |Условие (Склад = ВыбСклад);
         |Функция КоличествоКонОст = КонОст(Количество);
         |Группировка Номенклатура;";
         
         
         //Если Товары.РазмерСписка() > 0 Тогда
         //ТекстЗапросаО = ТекстЗапросаО + "Условие (Номенклатура в Товары);";
         //КонецЕсли;
         //
         Если ПустаяСтрока(ВыбСклад) = 0 Тогда
            ТекстЗапросаО = ТекстЗапросаО + "Условие (Склад = ВыбСклад);";
         КонецЕсли;
         
         Если ЗапросО.Выполнить(ТекстЗапросаО) = 0 Тогда
            Возврат;                               
         КонецЕсли;
         
         ТабОст = СоздатьОбъект("ТаблицаЗначений");
         ТабОст.НоваяКолонка("Номенклатура");
         ТабОст.НоваяКолонка("КонОст");
         
         Стр=0;
         Пока (ЗапросО.Группировка("Номенклатура") = 1) Цикл           
            Стр=Стр+1;
            Если  ЗапросО.Номенклатура.ЭтоГруппа() = 0 Тогда
               ТабОст.НоваяСтрока();
               ТабОст.Номенклатура = ЗапросО.Номенклатура;
               ТабОст.КонОст = ЗапросО.КоличествоКонОст;       
            КонецЕсли;        
         КонецЦикла;    
         
         ///////////////////////////////////////////////////////////////////////////////////////
         
         СпрТов = СоздатьОбъект("Справочник.Товары");
         
         Запрос = СоздатьОбъект("Запрос");
         
         ТекстЗапроса =
         
         "//{{ЗАПРОС(Сформировать)
         |Обрабатывать НеПомеченныеНаУдаление;      
         |Номенклатура   = Справочник.Товары.ТекущийЭлемент;    
         |РознЦена = Справочник.Товары.Розн_Цена;
         |Группировка Номенклатура;";   
         
         
         //Если Товары.РазмерСписка() > 0 Тогда
         //ТекстЗапроса = ТекстЗапроса + "Условие (Номенклатура в Товары);";
         //КонецЕсли;
         
      КонецЕсли;
      
      
      Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
      Возврат;                               
       КонецЕсли;
      
      
      
      Стр=0;
      Пока (Запрос.Группировка("Номенклатура") = 1) Цикл
         
      Стр=Стр+1;

      
      /////////////////////////////////////////////////////////////////
        Если  Запрос.Номенклатура.ЭтоГруппа() = 0 Тогда
      
        ТегТЧ = XML_DOM.createElement("ТабличнаяЧасть.Товары");
        ТегТело.appendChild(ТегТЧ);
      
        ТегРекТЧ = XML_DOM.createElement("НомерСтроки");
        ТегРекТЧ.text = Стр;
        ТегТЧ.appendChild(ТегРекТЧ);
       
        //ТегРекТЧ = XML_DOM.createElement("Категория");
        //ТегРекТЧ.text = Запрос.Номенклатура.Родитель.Наименование;
        //ТегТЧ.appendChild(ТегРекТЧ);
       
        //ТегРекТЧ = XML_DOM.createElement("ТМЦ");
        //ТегРекТЧ.text = Запрос.Номенклатура.Наименование;
        //ТегТЧ.appendChild(ТегРекТЧ);
      
        ТегРекТЧ = XML_DOM.createElement("КодТМЦ");
        ТегРекТЧ.text = Запрос.Номенклатура.Код;
        ТегТЧ.appendChild(ТегРекТЧ);
       
        Если ТолькоПоОстаткам=1 Тогда
        ТегРекТЧ = XML_DOM.createElement("Остаток");          
        ТегРекТЧ.text = Запрос.КоличествоКонОст;             
        ТегТЧ.appendChild(ТегРекТЧ);
        //Сообщить(Строка(Запрос.Номенклатура.ТекущийЭлемент())+" "+Строка(Запрос.КоличествоКонОст));
        Иначе   
        ТегРекТЧ = XML_DOM.createElement("Остаток");
        стр="";
        Если ТабОст.НайтиЗначение(Запрос.Номенклатура,стр,1)=1 Тогда 
        ОстТов=ТабОст.ПолучитьЗначение(стр,2);
        ТегРекТЧ.text = ОстТов;
        ТегТЧ.appendChild(ТегРекТЧ);
        Иначе
        ОстТов = 0;
        ТегРекТЧ.text = ОстТов;
        ТегТЧ.appendChild(ТегРекТЧ);
        КонецЕсли;
        //Сообщить(Строка(Запрос.Номенклатура.ТекущийЭлемент())+" "+Строка(ОстТов));
        КонецЕсли;
       
        ТекЦена = 0;
            
       
        ТекЦена = Запрос.Номенклатура.Розн_Цена;
       
       
       
       
       
        ТегРекТЧ = XML_DOM.createElement("Цена");
        ТегРекТЧ.text = ТекЦена;
        ТегТЧ.appendChild(ТегРекТЧ);
      
        КонецЕсли;
      
      КонецЦикла;
                       
      
      
      
      
      ТекущДок="Остаток";
      
      
      //Записываем сформированную струтуру в файл
      XML_DOM.Save(ИсходнаяДиректория+"\Прайс.xml");
      
      
      ////////////////////////////////////////////////////////////////////
      
      
         
         
         
         
         //Допустим нам необходимо выгрузить документ "РасходнаяНакладная,
         //ссылка на него храниться в переменной Док
         
         //тут же выгрузим в файл контрагента (элемент справочника контрагенты)
         //Открываем тег элемента справочника, подчиненный тегу "тело"
         //ТегСпр = XML_DOM.createElement("Справочник.Контрагенты");
         //ТегТело.appendChild(ТегСпр);
         //
         ////записываем все реквизиты, в подчиненные элементу справочника тегу.
         //ТегРеквСпр = XML_DOM.createElement("Код");
         //ТегРеквСпр.text = Док.Покупатель.Код;
         //ТегСпр.appendChild(ТегРеквСпр);
         //
         //ТегРеквСпр = XML_DOM.createElement("Наименование");
         //ТегРеквСпр.text = Док.Покупатель.Наименование;
         //ТегСпр.appendChild(ТегРеквСпр);
         //
         //ТегРеквСпр = XML_DOM.createElement("КодПоЕДРПОУ");
         //ТегРеквСпр.text = Док.Покупатель.ОКПО;
         //ТегСпр.appendChild(ТегРеквСпр);
         //
         //ТегРеквСпр = XML_DOM.createElement("НомерСвидетельства");
         //ТегРеквСпр.text = Док.Покупатель.НомерСвидетельства;
         //ТегСпр.appendChild(ТегРеквСпр);
         //
         //ТегРеквСпр = XML_DOM.createElement("ИНН");
         //ТегРеквСпр.text = Док.Покупатель.ИНН;
         //ТегСпр.appendChild(ТегРеквСпр);
         
         
         
         
         //Выгрузка документа
         //ТегДок = XML_DOM.createElement("Документ.РасходнаяНакладная");
         //ТегТело.appendChild(ТегДок);
         //
         //ТегШапка = XML_DOM.createElement("Дата");
         //ТегШапка.text = Док.ДатаДок;
         //ТегДок.appendChild(ТегШапка);
         //
         //ТегШапка = XML_DOM.createElement("номер");
         //ТегШапка.text = Док.НомерДок;
         //ТегДок.appendChild(ТегШапка);
         //
         //
         //ТегШапка = XML_DOM.createElement("Контрагент");
         //ТегШапка.text = Док.Покупатель.Наименование;
         //ТегДок.appendChild(ТегШапка);
         //
         //ТегШапка = XML_DOM.createElement("Примечание");
         //ТегШапка.text = Док.Примечание;
         //ТегДок.appendChild(ТегШапка);
         
         //выгружаем табличную часть документа
         //Док.ВыбратьСтроки();
         //Пока Док.ПолучитьСтроку() = 1 Цикл
         //
         //  ТегТЧ = XML_DOM.createElement("ТабличнаяЧасть.Товары");
         //  ТегДок.appendChild(ТегТЧ);
         //
         //  ТегРекТЧ = XML_DOM.createElement("НомерСтроки");
         //  ТегРекТЧ.text = Док.НомерСтроки;
         //  ТегТЧ.appendChild(ТегРекТЧ);
         //
         //
         //  ТегРекТЧ = XML_DOM.createElement("ТМЦ");
         //  ТегРекТЧ.text = Док.Товар.Код;
         //  ТегТЧ.appendChild(ТегРекТЧ);
         //
         //  ТегРекТЧ = XML_DOM.createElement("Количество");
         //  ТегРекТЧ.text = Док.Кво;
         //  ТегТЧ.appendChild(ТегРекТЧ);
         //
         //  ТегРекТЧ = XML_DOM.createElement("Цена");
         //  ТегРекТЧ.text = Док.Цена;
         //  ТегТЧ.appendChild(ТегРекТЧ);
         //
         //  ТегРекТЧ = XML_DOM.createElement("Сумма");
         //  ТегРекТЧ.text = Док.Сумма;
         //  ТегТЧ.appendChild(ТегРекТЧ);
         //
         //Конеццикла;
         
          Сообщить("Все!!!");
      
   
КонецПроцедуры        


//******************************************************************************************
Процедура ПриОткрытии()
    Сформировать();
   СтатусВозврата(0);
КонецПроцедуры
   
   
Функция  ПутьВыгрузки()      
   
ПутьВыгрузкиФайла = "Путь выгрузки: "+ Строка(ИсходнаяДиректория+"\Прайс.xml");
Возврат  ПутьВыгрузкиФайла;

КонецФункции;

Похожие темы (5)

Рейтинг@Mail.ru

Поиск