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

Как на форму поместить список выбора для отбора по конкретному значению

Автор ekaterinasslv, 04 дек 2017, 09:26

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

ekaterinasslv

Добрый день, помогите пожалуйста, только начинаю разбираться в 1С, не получается понять как реализовать следующее-Имеется обработка в результате выполнения запросов выгружаются данные в xls-файл. На форму нужно добавить список выбора(условие), по которому будут отбираться выгружаемые значения. (Список выбора должен содержать значения тарифа- город или село)ОЧЕНЬ НУЖНО,ПОМОГИТЕ,ПОЖАЛУЙСТА(((

Функция ЗапросДанныхПоАбоненту(Аб, Дом)
   
   Запрос = Новый Запрос();
         
   Запрос.Текст = "ВЫБРАТЬ
                 // |   ВЫРАЗИТЬ(КИ.Поле1 + "","" + КИ.Поле2 + "","" + КИ.Поле3 + "","" + КИ.Поле4 + "","" + КИ.Поле5 + "","" + КИ.Поле6 + "","" + КИ.Поле7 + "","" + КИ.Поле8 КАК СТРОКА(200)) КАК Адрес,
              // |КИ.Поле9 КАК Квартира,

               |   Аб.АдресПредставление КАК Адрес,
                  |   Аб.Ссылка КАК Абонент,
                  |   Аб.ЛицевойСчет КАК ЛСчет,
                  |   Аб.ИдентификаторДома КАК ИдентификаторДома,
                  |   Аб.ИдентификаторПомещения КАК ИдентификаторПомещения,
                  |   Аб.ИдентификаторЖКУ КАК ИдентификаторЖКУ
                  |ИЗ
                  |   Справочник.Абоненты КАК Аб
                  |      ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КИ
                  |      ПО Аб.Ссылка = КИ.Объект
                  |ГДЕ
             //  |    ИдентификаторЖКУ <> &НетЖКУ И
                  |   Аб.ПометкаУдаления = ЛОЖЬ" + ?(Аб = Справочники.Абоненты.ПустаяСсылка(), "", " И Аб.Ссылка В ИЕРАРХИИ (&Аб) ") + "
                 |" + ?(Дом = Справочники.Дома.ПустаяСсылка(), "", " И Аб.Дом В ИЕРАРХИИ (&Дом) ") + "      
                    |";          
      
      
   Запрос.УстановитьПараметр("Дом", Дом);      
   Запрос.УстановитьПараметр("Аб", Аб);      
   Запрос.УстановитьПараметр("Д1", ТекущаяДата());   
   Запрос.УстановитьПараметр("НетЖКУ", "");
   Выборка = Запрос.Выполнить().Выбрать();
         
   Возврат Выборка;
   
КонецФункции

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

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

      |";
         
   Запрос.УстановитьПараметр("Аб", Аб);      
   Запрос.УстановитьПараметр("Ном", Номер);   
      Запрос.УстановитьПараметр("Д1", ТекущаяДата());   
   
   Выборка = Запрос.Выполнить().Выбрать();
      
   Возврат Выборка;   
   
КонецФункции

Процедура ЗаполнитьЛистСведенияПУ(Выборка, ПутьКФайлуВыгрузки, Аб)
   
   ДанныеПУ.Очистить();
   
   СчСтр = 2;
   НомерПачки = 1;
   Пока Выборка.Следующий() Цикл                  
               
      ВыборкаПУА = ЗапросДанныхПУА(Выборка.Абонент);      
            
      Пока ВыборкаПУА.Следующий() Цикл
         
         НовСтр = ДанныеПУ.Добавить();

         НовСтр.Адрес = Выборка.Адрес;
         НовСтр.Абонент = Выборка.Абонент;
         НовСтр.ЛицевойСчет = Выборка.ЛСчет;
          
         НовСтр.ЗаводскойНомер = ВыборкаПУА.ЗаводскойНомер;
         НовСтр.ВидПрибораУчета = "Индивидуальный";
                           
         Если ВыборкаПУА.ТипПрибораУчета = Справочники.ТипыПриборовУчета.ПустаяСсылка()
            ИЛИ ВыборкаПУА.ТипПрибораУчета = Неопределено Тогда
            НовСтр.Марка = "нет";
            НовСтр.Модель = "нет";
         Иначе         
            НовСтр.Марка = ВыборкаПУА.ТипПрибораУчета.Родитель.Наименование;
            НовСтр.Модель = ВыборкаПУА.ТипПрибораУчета.Наименование;
         КонецЕсли;
         
         ВыборкаПоказания = ЗапросПоказанийПУ(НовСтр.Абонент, НовСтр.ЗаводскойНомер);
         
         Если ВыборкаПУА.КолТарифов = 1 Тогда
            НовСтр.КолТарифов = "Однотарифный";
            Если ВыборкаПоказания.Следующий() Тогда
               НовСтр.Т1 = ВыборкаПоказания.Показание;
            КонецЕсли;            
         ИначеЕсли ВыборкаПУА.КолТарифов = 2 Тогда
            НовСтр.КолТарифов = "Двухтарифный";
            Если ВыборкаПоказания.Следующий() Тогда
               НовСтр.Т1 = ВыборкаПоказания.Показание;
            КонецЕсли;
            Если ВыборкаПоказания.Следующий() Тогда
               НовСтр.Т2 = ВыборкаПоказания.Показание;
            КонецЕсли;            
         ИначеЕсли ВыборкаПУА.КолТарифов = 3 Тогда
            НовСтр.КолТарифов = "Трехтарифный";
            Если ВыборкаПоказания.Следующий() Тогда
               НовСтр.Т1 = ВыборкаПоказания.Показание;
            КонецЕсли;
            Если ВыборкаПоказания.Следующий() Тогда
               НовСтр.Т2 = ВыборкаПоказания.Показание;
            КонецЕсли;
            Если ВыборкаПоказания.Следующий() Тогда
               НовСтр.Т3 = ВыборкаПоказания.Показание;
            КонецЕсли;            
         КонецЕсли;
         НовСтр.Тариф = ВыборкаПоказания.Тариф;
         НовСтр.КоличествоТочекПоставки = "1";
                  
               
         Лист_СведенияПУ.Cells(СчСтр, 1).Value = Строка(НовСтр.Абонент);
         
         Лист_СведенияПУ.Cells(СчСтр, 2).Value = НовСтр.Адрес;
         //
         Лист_СведенияПУ.Cells(СчСтр, 6).Value = НовСтр.ЗаводскойНомер;
         //
         Лист_СведенияПУ.Cells(СчСтр, 7).Value = НовСтр.ВидПрибораУчета;
         //
         Лист_СведенияПУ.Cells(СчСтр, 8).Value = НовСтр.Марка;
         //
         Лист_СведенияПУ.Cells(СчСтр, 9).Value = НовСтр.Модель;
         
            ////
         Лист_СведенияПУ.Cells(СчСтр, 3).Value = НовСтр.ЛицевойСчет;         
         Лист_СведенияПУ.Cells(СчСтр, 5).Value = НовСтр.КолТарифов;   
         
         //Лист_СведенияПУ.Cells(СчСтр, 17).Value = НовСтр.Т1;   
         
         Лист_СведенияПУ.Cells(СчСтр, 10).Value = Число(Формат(НовСтр.Т1, "ЧГ=0; ЧЦ=15 ;ЧДЦ=7"));               //   поставила комментарийЯ
         
         Лист_СведенияПУ.Cells(СчСтр, 11).Value = НовСтр.Т2;   
         //Лист_СведенияПУ.Cells(СчСтр, 18).Value = Число(Формат(НовСтр.Т2, "ЧГ=0; ЧЦ=15 ;ЧДЦ=7"));   

         Лист_СведенияПУ.Cells(СчСтр, 12).Value = НовСтр.Т3;   
         Лист_СведенияПУ.Cells(СчСтр, 4).Value = НовСтр.Тариф;
         Лист_СведенияПУ.Cells(СчСтр, 13).Value = Строка(НовСтр.КоличествоТочекПоставки);
   
                  
         СчСтр = СчСтр + 1;
         Если  СчСтр > 999 Тогда
            п_Дата = Формат(ТекущаяДата(), "ДФ=ггггММдд");
            п_ИмяФайла = ""+ПутьКФайлуВыгрузки+"\ПУ_"+п_Дата+"_"+Аб+"_"+НомерПачки+".xlsx";
            Книга_ПУ.SaveAs(п_ИмяФайла);
            Сообщить (п_ИмяФайла + " сформирован!");
            СчСтр = 2;
            НомерПачки = НомерПачки +1;
         КонецЕсли;   
      КонецЦикла;         
   
      
   КонецЦикла;   
      

      Лист_СведенияПУ.Range(Лист_СведенияПУ.Cells(СчСтр,1),Лист_СведенияПУ.Cells(1000,31)).Delete();
      п_ИмяФайла = ""+ПутьКФайлуВыгрузки+"\ПУ_"+п_Дата+"_"+Аб+"_"+НомерПачки+".xlsx";
      Книга_ПУ.SaveAs(п_ИмяФайла);
      
   
      Сообщить (п_ИмяФайла + " сформирован!");

КонецПроцедуры

Теги:

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

Рейтинг@Mail.ru

Поиск