Имя: Пароль:
1C
1C 7.7
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 = $Док.Объект