| 
    
            
         
         | 
    
  | 
v7: не работает выборка из справочника | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        Irina3gger    
     26.07.17 
            ✎
    09:42 
 | 
         
        Доброго времени суток, даже не знаю как правильно сформулировать вопрос.
 
        Есть отчет о задолженностях. При его сформирование появляется окошка в котором можно выбрать критерии по которым он формируется. Но дело в том, что не важно какие критерии ты выбираешь то отчет не меняет своего вида, т.е. он выглядит так как если бы не одно боле не было заполнено. Помогите понять в чем была допущена ошибка и где я могу ошибаться, потому что мне не понятно из-за чего это может происходить  | 
|||
| 
    1
    
        Рэйв    
     26.07.17 
            ✎
    09:44 
 | 
         
        >> из-за чего это может происходить
 
        Как вариант- просто показали левое окошко для понтов:-) И потом его данные никуда не пошли  | 
|||
| 
    2
    
        2S    
     26.07.17 
            ✎
    09:46 
 | 
         
        > При его сформирование появляется окошка 
 
        русскиймана незнать? Если реквизит используется для отбора в запросе, смотрите условие этого отбора в самом запросе. Если тупо выборка, смотрите условия  | 
|||
| 
    3
    
        Irina3gger    
     26.07.17 
            ✎
    09:47 
 | 
         
        (2) Вот код вдруг поможет
 
        Перем Таблица; //====================================================================== Процедура Сформировать() сз = СоздатьОбъект("СписокЗначений"); ТабЗначВсего = СоздатьОбъект("ТаблицаЗначений"); ТабЗначОбъект = СоздатьОбъект("ТаблицаЗначений"); ТабЗначИтогРайон = СоздатьОбъект("ТаблицаЗначений"); ТабОбъект = СоздатьОбъект("ТаблицаЗначений"); ТабЗначЗаказчик = СоздатьОбъект("ТаблицаЗначений"); ТЗ = СоздатьОбъект("ТаблицаЗначений"); ТабОбъект.НоваяКолонка("с1"); ТабОбъект.НоваяКолонка("с2"); ТабОбъект.НоваяКолонка("с3"); ТабОбъект.НоваяКолонка("с4"); ТабЗначВсего.НоваяКолонка("с1","Число"); ТабЗначВсего.НоваяКолонка("с2","Число"); ТабЗначВсего.НоваяКолонка("с3","Число"); ТабЗначИтогРайон.НоваяКолонка("с1","Число"); ТабЗначИтогРайон.НоваяКолонка("с2","Число"); ТабЗначИтогРайон.НоваяКолонка("с3","Число"); ТабЗначЗаказчик.НоваяКолонка("с1","Число"); ТабЗначЗаказчик.НоваяКолонка("с2","Число"); ТабЗначЗаказчик.НоваяКолонка("с3","Число"); Таб = СоздатьОбъект("Таблица"); RS = СоздатьОбъект("ODBCRecordset"); RS.УстБД1С(); ТекстЗапроса = " |SELECT | Жур.IDDoc as [Док $Документ], | Жур.IDDocDef as Док_вид, | Спр.Code as Код, | Спр.Descr as Наименование, | $Док.Объект as [Объект $Справочник.Объект], | $Док.Сумма as Сумма, | $Док.ДолгПоОплате as ДолгПоОплате, | $Док.ПризнакПодпис as [ПризнакПодпис $Перечисление.Признак], | $Док.ВидАкта as [ВидАкта $Справочник.ВидАкт], | $Спр.Заказчик as [Заказчик $Справочник.Заказчик], | $Спр.Район as [Район $Справочник.Области] |FROM | _1SJourn as Жур |INNER JOIN | $Документ.АктОбъемаРабот as Док ON Док.IDDoc = Жур.IDDoc |INNER JOIN | $Справочник.Объект as Спр ON Спр.ID = $Док.Объект | |WHERE | Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ | AND Жур.Closed & 1 = 1 | AND $Док.ВидАкта <> :ВидАктов | AND $Док.ДолгПоОплате <> 0 | AND $Спр.Заказчик = :ТекЗаказчик |" ; Таб.ВывестиСекцию("ШапкаОсновная"); Таб.ВывестиСекцию("Шапка"); ТекЗаказчик = ""; Номер = 1; СпрРайон = СоздатьОбъект("Справочник.Области"); СпрРайон.ПорядокКодов(); СпрРайон.ВыбратьЭлементы(); Пока СпрРайон.ПолучитьЭлемент() = 1 Цикл Таб.ВывестиСекцию("Район"); СпрЗаказчик = СоздатьОбъект("Справочник.Заказчик"); СпрЗаказчик.ВыбратьЭлементы(); Пока СпрЗаказчик.ПолучитьЭлемент() = 1 Цикл Если СпрЗаказчик.Район = СпрРайон.ТекущийЭлемент() Тогда RS.УстановитьТекстовыйПараметр("НачДата", НачПер); RS.УстановитьТекстовыйПараметр("КонДата", ОконПер); RS.УстановитьТекстовыйПараметр("ОстМеньше", ОстМеньше); спрВидАкта = СоздатьОбъект("Справочник.ВидАкт"); Если спрВидАкта.НайтиПоКоду(2) = 1 Тогда RS.УстановитьТекстовыйПараметр("ВидАктов", спрВидАкта.ТекущийЭлемент()); КонецЕсли; RS.УстановитьТекстовыйПараметр("ТекЗаказчик",СпрЗаказчик.ТекущийЭлемент()); ТЗ = RS.ВыполнитьИнструкцию(ТекстЗапроса); ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку() = 1 Цикл СуммаНеПодпис = 0; СуммаПодпис = 0; ДолгЭкспертизы = 0; Если Число(ТЗ.ВидАкта.Код) = Число(4) Тогда ДолгЭкспертизы = ТЗ.ДолгПоОплате; Иначе Если ТЗ.ПризнакПодпис = Перечисление.Признак.Нет Тогда СуммаНеПодпис = ТЗ.ДолгПоОплате; ИначеЕсли ТЗ.ПризнакПодпис = Перечисление.Признак.Да Тогда СуммаПодпис = ТЗ.ДолгПоОплате; КонецЕсли; КонецЕсли; ТабОбъект.НоваяСтрока(); ТабОбъект.с1 = ТЗ.Объект; ТабОбъект.с2 = СуммаНеПодпис; ТабОбъект.с3 = СуммаПодпис; ТабОбъект.с4 = ДолгЭкспертизы; КонецЦикла; ТабОбъект.Свернуть("с1","с2,с3,с4"); Если (ТабОбъект.Итог("с2") > ОстМеньше) или (ТабОбъект.Итог("с3") > ОстМеньше) или (ТабОбъект.Итог("с4") > ОстМеньше) Тогда Таб.ВывестиСекцию("Заказчик"); КонецЕсли; ТабОбъект.ВыбратьСтроки(); Пока ТабОбъект.ПолучитьСтроку() = 1 Цикл Если (ТабОбъект.с2 > ОстМеньше) или (ТабОбъект.с3 > ОстМеньше) или (ТабОбъект.с4 > ОстМеньше) Тогда сз.УдалитьВсе(); сз.ДобавитьЗначение(ТабОбъект.с1.Код); Таб.ВывестиСекцию("Объект"); Номер = Номер + 1; ТабЗначЗаказчик.НоваяСтрока(); ТабЗначЗаказчик.с1 = ТабОбъект.с2; ТабЗначЗаказчик.с2 = ТабОбъект.с3; ТабЗначЗаказчик.с3 = ТабОбъект.с4; КонецЕсли; КонецЦикла; ТабОбъект.УдалитьСтроки(); Если (ТабЗначЗаказчик.Итог("с1") > ОстМеньше) или (ТабЗначЗаказчик.Итог("с2") > ОстМеньше) или (ТабЗначЗаказчик.Итог("с3") > ОстМеньше) Тогда Таб.ВывестиСекцию("Итого"); КонецЕсли; ТабЗначИтогРайон.НоваяСтрока(); ТабЗначИтогРайон.с1 = ТабЗначЗаказчик.Итог("с1"); ТабЗначИтогРайон.с2 = ТабЗначЗаказчик.Итог("с2"); ТабЗначИтогРайон.с3 = ТабЗначЗаказчик.Итог("с3"); ТабЗначЗаказчик.УдалитьСтроки(); КонецЕсли; КонецЦикла; Если (ТабЗначИтогРайон.Итог("с1") > ОстМеньше) или (ТабЗначИтогРайон.Итог("с2") > ОстМеньше) или (ТабЗначИтогРайон.Итог("с3") > ОстМеньше) Тогда Таб.ВывестиСекцию("ИтогоРайон"); КонецЕсли; ТабЗначВсего.НоваяСтрока(); ТабЗначВсего.с1 = ТабЗначИтогРайон.Итог("с1"); ТабЗначВсего.с2 = ТабЗначИтогРайон.Итог("с2"); ТабЗначВсего.с3 = ТабЗначИтогРайон.Итог("с3"); ТабЗначИтогРайон.УдалитьСтроки(); КонецЦикла; Таб.ВывестиСекцию("Всего"); Таб.Опции(0,1,9); Таб.ПараметрыСтраницы(1,,,0,0,0,10,0,10,1,0); Таб.ТолькоПросмотр(1); Таб.Показать(); КонецПроцедуры //====================================================================== Процедура ОбработкаЯчейкиТаблицы(список,фл) фл=1; тип=ТипЗначенияСтр(список); Если тип="СписокЗначений" Тогда фл=0; спрОбъект = СоздатьОбъект("Справочник.Объект"); Если спрОбъект.НайтиПоКоду(СтрЗаменить(список.ПолучитьЗначение(1),"""","_")) = 1 Тогда ОткрытьФормуМодально("Обработка.ЖурналОбъекта", спрОбъект.ТекущийЭлемент()); КонецЕсли; конецЕсли; КонецПроцедуры //====================================================================== Процедура ПриОткрытии() НачПер = "01.01.2017"; ОконПер = ТекущаяДата(); Район = (); ОстМеньше = 50; КонецПроцедур  | 
|||
| 
    4
    
        aka AMIGO    
     26.07.17 
            ✎
    09:50 
 | 
         
        (2) Девушка из Минска..
 
        (3) Район = (); - забавно :)  | 
|||
| 
    5
    
        aka AMIGO    
     26.07.17 
            ✎
    09:53 
 | 
         
        (3) Отчет в составе конфигурации?
 
        Если -да, то выложи его в какой-нибудь файлообменник. А получить - ПКМ на этом отчете в дереве конфигурации, далее "Сохранить как внешний"  | 
|||
| 
    6
    
        Ёпрст    
     гуру 
    26.07.17 
            ✎
    09:54 
 | 
         
        (3) Феерический п...ц
 
        :) Такая помесь применяемых методов и всё без понимания куда зачем и почему  | 
|||
| 
    7
    
        Ёпрст    
     гуру 
    26.07.17 
            ✎
    09:55 
 | 
         
        ЗЫ: если че, в тесте запроса ОстМеньше  нигде не используется, что вы там по нему фильтровать хотите - загадка.     
         | 
|||
| 
    8
    
        Irina3gger    
     26.07.17 
            ✎
    09:57 
 | 
         
        (7)я заметила что форма вообще не как не влияет на то что в итоге формируется, все равно выходит один и тот же документ
 
        кто то может объяснить как так вообще вышло  | 
|||
| 
    9
    
        Irina3gger    
     26.07.17 
            ✎
    10:16 
 | 
         
        (7)
 
        я поняла, лучше сделать отчет с самого начала. Только вот подскажите пожалуйста как сделать чтоб выборка все таки работала?  | 
|||
| 
    10
    
        Ёпрст    
     гуру 
    26.07.17 
            ✎
    10:35 
 | 
         
        (7) 
 
        1. Не делать запрос в цикле 2. Не делать выборку из справочника(ов) 3. Переписать всё на прямой запрос. 4. переписать весь отчет  | 
|||
| 
    11
    
        ildary    
     26.07.17 
            ✎
    10:44 
 | 
         
        (10) 3. С козырей зашел :) Девушка обычные механизмы не умеет, а её в сразу в пучину     
         | 
|||
| 
    12
    
        Irina3gger    
     26.07.17 
            ✎
    10:50 
 | 
         
        (11) я сама рву волосы от того что вижу. но ничего страшного и не с таким справлялись.
 
        (10) я сейчас попробую переделать, и через некоторое время скину что выйдет, правда я так и не поняла как сделать чтоб работала выборка, но что-то придумаю  | 
|||
| 
    13
    
        Herby    
     26.07.17 
            ✎
    11:16 
 | 
         
        дописывай nolock, иначе таблицы будешь блокировать на время формирования запроса
 
        |FROM | _1SJourn as Жур (nolock) |INNER JOIN | $Документ.АктОбъемаРабот as Док (nolock) ON Док.IDDoc = Жур.IDDoc |INNER JOIN | $Справочник.Объект as Спр (nolock) ON Спр.ID = $Док.Объект  | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |