Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Фильтр данных выгрузки через список в ТИС 7.7
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
inna.innainna84
Помогите пожалуйста хочу отфильтровать выгрузку данных через список докуметов т.е. -----ВыбМЛ.
КонецПроцедуры
//*******************************************
Процедура ОбработкаПодбора(Эл,Кон)        
    Если Эл.Вид()="МАРШРУТНЫЙЛИСТ" Тогда
        Если ВыбМЛ.Принадлежит(Эл.ТекущийДокумент()) = 1 Тогда
            Сообщить("Этот Документ уже присутствует в списке");      
            СтатусВозврата(0);
            Возврат;
        КонецЕсли;
        ВыбМЛ.ДобавитьЗначение(Эл.ТекущийДокумент(), "МЛ № "+Эл.ТекущийДокумент().НомерДок+ "("+Эл.ТекущийДокумент().ДатаДок+")"+Эл.ТекущийДокумент().Менеджер);       

    КонецЕсли;
КонецПроцедуры
              
//*******************************************

Процедура ЗаполнитьПоБыбМЛ()
    
ТТ.УдалитьСтроки();  
    
    ТТ.НоваяКолонка("МаршрутныйЛист", "Строка", 25, ," Документ");
    ТТ.НоваяКолонка("АвтомобильВодитель", "Строка", 30,,"Автомобиль/Водитель");
    ТТ.НоваяКолонка("Клиент", "Строка",50,,"Клиент (тип)");
    ТТ.НоваяКолонка("Заявка");
    
    ТТ.НоваяКолонка("НомерЗаявки");
    ТТ.НоваяКолонка("Вес","Число", 10,3);
    ТТ.НоваяКолонка("Пробег","Число", 10,2);
    ТТ.НоваяКолонка("Приезд", "Строка", 10);
    ТТ.НоваяКолонка("Время","Число", 10,0);    

    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)    
    |ОбрабатыватьДокументы Проведенные;
    |Период с Дата1 по Дата2;
    |ТекДок = Документ.МАРШРУТНЫЙЛИСТ.ТекущийДокумент;
    |Экспедитор = Документ.МАРШРУТНЫЙЛИСТ.Экспедитор;
        |НомерЗаявкиТА=Документ.МАРШРУТНЫЙЛИСТ.НомерЗаявкиТА;
    |Клиент = Документ.МАРШРУТНЫЙЛИСТ.Клиент;
    |Заявка = Документ.МАРШРУТНЫЙЛИСТ.Заявка;
    |Вес = Документ.МАРШРУТНЫЙЛИСТ.Заявка.Вес;
    |Группировка Клиент без групп;
    |Группировка Заявка;
    |Условие(ТекДок в ВыбМЛ);
    |"//}}ЗАПРОС
;
    
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;
    Пока Запрос.Группировка("Клиент")=1 Цикл
    Пока Запрос.Группировка("Заявка")=1 Цикл
    
        ТТ.НоваяСтрока();
                   ТТ.МаршрутныйЛист = ""+Запрос.ТекДок.НомерДок+ " от "+Запрос.ТекДок.ДатаДок;
           ТТ.АвтомобильВодитель = ""+Запрос.ТекДок.Автомобиль.Наименование+" / "+Запрос.ТекДок.Водитель.Наименование;
            ТТ.Клиент =Запрос.Клиент.Наименование;
        ТТ.Заявка =Запрос.Заявка;
        ТТ.Вес =Запрос.Вес;                             
        ТТ.НомерЗаявки =Запрос.НомерЗаявкиТА;
        
    КонецЦикла;    
КонецЦикла;            
    
  
КонецПроцедуры    // ЗаполднитьПоБыбМЛ


//**************************************
              
Процедура ВыгрузитьКонтрагентов()            
    
    ТекстВыгрузки=СоздатьОбъект("Текст");
    СтрокаТекста="";
    ДокЗапрос = Анализатор.СоздатьДокумент();
    ArrayOfDEX_Import = ДокЗапрос.СоздатьПодчиненныйЭлемент("ArrayOfDEX_Import");
    
    // Цикл по выборке
    // Для примера используем один эдемент
    
        
    Запрос=СоздатьОбъект("Запрос");
    
    ТекстЗапроса="
        |ПЕРИОД С Дата1 По Дата2;
        |Контрагент = Справочник.Контрагенты.ТекущийЭлемент;
        |Группировка Контрагент без групп упорядочить по Контрагент.Наименование;
           |";  
      
        СписокКонтрагентов = СоздатьОбъект("СписокЗначений");
             
                  ** Если глФильтрПо ВыбМЛ *** сюда

          Если глФильтрПоСправочнику("Контрагенты",0,0,ВыбКатегорияКонтрагентов,0,0,СписокКонтрагентов,ТекстЗапроса,0,0,"Контрагент,,,СписокКонтрагентов,,,,,")=0 Тогда
            Возврат;
        КонецЕсли;
           
        
        Если Запрос.Выполнить(ТекстЗапроса)=0 тогда
            Предупреждение("Запрос по Партиям не выполнился!");
            Возврат;
        КонецЕсли;  
        
         ТекстВыгрузки.ДобавитьСтроку(СтрокаТекста);
      
         Пока Запрос.Группировка("Контрагент")=1 Цикл  
             
    DEX_Import = ArrayOfDEX_Import.СоздатьПодчиненныйЭлемент("DEX_Import");
    
    Comp_Id = DEX_Import.СоздатьПодчиненныйЭлемент("Comp_Id");
    Comp_Id.Значение = Запрос.Контрагент.Код;
    СтрокаТекста=СокрЛП(Строка(Comp_Id))+";";
    
    Comp_Name = DEX_Import.СоздатьПодчиненныйЭлемент("Comp_Name");
    Comp_Name.Текст =Запрос.Контрагент. Наименование;
    СтрокаТекста=СтрокаТекста+СокрЛП(Строка(Comp_Name))+";";
    
    Address = DEX_Import.СоздатьПодчиненныйЭлемент("Address");
    Address.Текст =Запрос.Контрагент.ПочтовыйАдрес;
    СтрокаТекста=СтрокаТекста+СокрЛП(Строка(Address))+";";
    
    lat = DEX_Import.СоздатьПодчиненныйЭлемент("lat");
    lat.Значение =Запрос.Контрагент.Широта1; // Широта, если известна
    СтрокаТекста=СтрокаТекста+СокрЛП(Строка(lat))+";";
    
        
    lng = DEX_Import.СоздатьПодчиненныйЭлемент("lng");
    lng.Значение =Запрос.Контрагент.Долгота1; // Долгота, если известна
    СтрокаТекста=СтрокаТекста+СокрЛП(Строка(lng))+";";
    
    
    TimeWork_Beg = DEX_Import.СоздатьПодчиненныйЭлемент("TimeWork_Beg");
    TimeWork_Beg.Текст = СокрЛП(Запрос.Контрагент.ВремяРаботыНачало);
    СтрокаТекста=СтрокаТекста+СокрЛП(Строка(TimeWork_Beg))+";";
    
    TimeWork_End = DEX_Import.СоздатьПодчиненныйЭлемент("TimeWork_End");
    TimeWork_End.Текст = СокрЛП(Запрос.Контрагент.ВремяРаботыКонец);
    СтрокаТекста=СтрокаТекста+СокрЛП(Строка(TimeWork_End))+";";  
    
    TimeBreak_Beg = DEX_Import.СоздатьПодчиненныйЭлемент("TimeBreak_Beg");
    TimeBreak_Beg.Текст = СокрЛП(Запрос.Контрагент.ВремяОбедаНачало);
    СтрокаТекста=СтрокаТекста+СокрЛП(Строка(TimeBreak_Beg))+";";
    
    TimeBreak_End = DEX_Import.СоздатьПодчиненныйЭлемент("TimeBreak_End");
    TimeBreak_End.Текст = СокрЛП(Запрос.Контрагент.ВремяОбедаКонец);
    СтрокаТекста=СтрокаТекста+СокрЛП(Строка(TimeBreak_End))+";";  

    
    //Unload_Time = DEX_Import.СоздатьПодчиненныйЭлемент("Unload_Time");
//    Unload_Time.Текст = СокрЛП(ВремяРазгрузки);
    
    
    ProductGroup_Id = DEX_Import.СоздатьПодчиненныйЭлемент("ProductGroup_Id");
    ProductGroup_Id.Значение = 0; // Группа товаров
    СтрокаТекста=СтрокаТекста+СокрЛП(Строка(ProductGroup_Id))+";";
    
    
    CompGroup_Id = DEX_Import.СоздатьПодчиненныйЭлемент("CompGroup_Id");
    CompGroup_Id.Значение = 0; // Группа товаров
    СтрокаТекста=СтрокаТекста+СокрЛП(Строка(CompGroup_Id))+";";
    
    НомерЗаявкиТА="НЕТ"+"-"+(Запрос.Контрагент.КодСоответствия+ДатаМаршрутов);
    Request_Num = DEX_Import.СоздатьПодчиненныйЭлемент("Request_Num");
    Request_Num.Значение = НомерЗаявкиТА; // Группа товаров
    СтрокаТекста=СтрокаТекста+СокрЛП(Строка(Request_Num))+";";
    
    //Qty = DEX_Import.СоздатьПодчиненныйЭлемент("Qty");
    //Qty.Значение = Количество;
    
//    QtyW = DEX_Import.СоздатьПодчиненныйЭлемент("QtyW");
    //QtyW.Значение = Масса;
    
    
    //Объем = 0;
    //QtyV = DEX_Import.СоздатьПодчиненныйЭлемент("QtyV");
    //QtyV.Значение = Объем;  
    ТекстВыгрузки.ДобавитьСтроку(СтрокаТекста);
    КонецЦикла;                                                                                              


        СтрРез = "";

    
    //"c:\response.xml";
    //Текст = СоздатьОбъект("Текст");
    //Текст.ДобавитьСтроку("Session_Ident="+ИДСессии+"&Date_Data="+Формат(ДатаМаршрутов, "ДДДММГГГГ")+"&format=xml&Comps=<?xml version='1.0'?>");
       ///Текст.ДобавитьСтроку(ПреобразоватьСтрокуВУТФ8(ДокЗапрос.ЭлементДокумента.ПредставлениеXML));
    //              
    //ИмяФайлаЗапроса = "c:\query.txt";
    //Текст.Записать(ИмяФайлаЗапроса);

    ПараметрыЗапроса = "Session_Ident="+ИДСессии+
        "&Date_Data="+Формат(ДатаМаршрутов, "ДДДММГГГГ")+"&format=xml&Comps=<?xml version=""1.0""?>" +
        ПреобразоватьСтрокуВУТФ8(ДокЗапрос.ЭлементДокумента.ПредставлениеXML);
    
        
    Соединение.ОтправитьДляОбработки(АдресСервиса + "/DEX_Import_Request_JSON", ПараметрыЗапроса, 2, СтрРез, 1);
    
    РезультатЗагрузки = ПреобразоватьСтрокуИзУТФ8(СтрРез);
    
    
КонецПроцедуры
Домовик
... не могу разобрать код в нижней процедуре....

вопрос не понятен. ключевое условие в запросе есть:
    |Условие(ТекДок в ВыбМЛ);


в процедуре ЗаполнитьПоБыбМЛ() почему-то не пользуетесь Запрос.Выгрузить(ТТ).
Также для наглядности ТТ(таблицу значений) временно вынесите как элемент на форму. и будете видеть содержание таблицы, которую вам сформирует запрос.

читайте о методах Выгрузить() для запроса, Загрузить для таблиц значений.
korol1091
Нужно еще передать параметр "ВыбМЛ" в запрос
Запрос.УстановитьПараметр("ВыбМЛ", ВыбМЛ);


И условие сделать таким
| Условие ТекДок в (&ВыбМЛ);
Домовик
это семерка.
korol1091
LOL
Я работаю в 77 и 8 - у меня уже шарики за ролики заходят
nysysimara
Цитата(inna.innainna84 @ 02.05.16, 7:52) необходимо зарегистрироваться для просмотра ссылки
|Условие(ТекДок в ВыбМЛ);

Для базы ДБФ этот запрос отработает правильно
SQL не понимает такого условия

два варианта решения:
1) Запрос.ВключитьSQL(0)
но время выполнения может увеличится в разы

2) заменить на
|Условие(ВыбМЛ.Принадлежит(ТекДок)=1);


не помню что отработает быстрее, попробуйте
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.