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

Условие по списку выбора

Автор ekaterinasslv, 04 дек 2017, 11:31

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

ekaterinasslv

Помогите пожалуйста, нужно реализовать чтобы при выборе из списка выбора выполнялось условие,чтобы данные заполнялись по тому значению,которое указано в списке выбора

Модуль Объекта
Перем Эксель;
Перем Книга_ПУ;

Перем Лист_СведенияПУ;
Перем Лист_ДопКомРесурсы;
Перем Лист_ДопЛицСчета;
Перем Лист_ДопКомнатыПУ;
Перем Лист_ДопПУДляСвязиСПУ;

Процедура ЗаписьЛога(Сообщение) Экспорт   
   Сообщить("" + ТекущаяДата() + " > " + Сообщение);      
КонецПроцедуры   

Процедура ЗаполнитьФайл(ИмяФайлаШаблона, ПутьКФайлуВыгрузки, Аб, Дом) Экспорт
   
   
   ЗапуститьЭксель(ИмяФайлаШаблона);    
   
   Выборка = ЗапросДанныхПоАбоненту(Аб, Дом);
   
   ЗаполнитьЛистСведенияПУ(Выборка, ПутьКФайлуВыгрузки, Аб);   // Я   
   
   ЗакрытьЭксель(Истина, ПутьКФайлуВыгрузки, Аб);
   
КонецПроцедуры   


Процедура ЗапуститьЭксель(ИмяФайлаШаблона)
   
   
   Эксель = Новый COMОбъект("Excel.Application");   
   
   Книга_ПУ = Эксель.Workbooks.Open(ИмяФайлаШаблона);    
   
   // листы
   Лист_СведенияПУ = Книга_ПУ.WorkSheets("Сведения о ПУ");        
   Лист_ДопКомРесурсы = Книга_ПУ.WorkSheets("Доп. комм. ресурсы"); 
   Лист_ДопЛицСчета = Книга_ПУ.WorkSheets("Доп. лицевые счета ПУ");        
   Лист_ДопКомнатыПУ = Книга_ПУ.WorkSheets("Доп. комнаты ПУ"); 
   Лист_ДопПУДляСвязиСПУ = Книга_ПУ.WorkSheets("Доп. ПУ для связи с текущим ПУ");     
   
КонецПроцедуры   

Процедура ЗакрытьЭксель(Записать,ПутьКФайлуВыгрузки,Аб)
   
   
   Книга_ПУ.Close();
   
   Эксель.Quit();
   
КонецПроцедуры   

Функция ЗапросДанныхПоАбоненту(Аб, Дом)
   
   Запрос = Новый Запрос();
         
   Запрос.Текст = "ВЫБРАТЬ
                 // |   ВЫРАЗИТЬ(КИ.Поле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 = Строка(НовСтр.КоличествоТочекПоставки);
   
         //
         //Лист_СведенияПУ.Cells(СчСтр, 22).Value = Лев(Формат(НовСтр.ВводВЭксплуатацию, "дд-ММ-гггг"), 10);
         ////
         //Лист_СведенияПУ.Cells(СчСтр, 26).Value =  НовСтр.ДатчикиТемпературы;      
         ////
         //Лист_СведенияПУ.Cells(СчСтр, 28).Value =  НовСтр.ДатчикиДавления;
         
         СчСтр = СчСтр + 1;
         Если  СчСтр > 999 Тогда
            п_Дата = Формат(ТекущаяДата(), "ДФ=ггггММдд");
            п_ИмяФайла = ""+ПутьКФайлуВыгрузки+"\ПУ_"+п_Дата+"_"+Аб+"_"+НомерПачки+".xlsx";
            Книга_ПУ.SaveAs(п_ИмяФайла);
            Сообщить (п_ИмяФайла + " сформирован!");
            СчСтр = 2;
            НомерПачки = НомерПачки +1;
         КонецЕсли;   
      КонецЦикла;         
   
      
   КонецЦикла;   
      

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

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

Теги:

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

Рейтинг@Mail.ru Rambler's Top100

Поиск