Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Не работает сортировка

v7: Не работает сортировка
Я
   IrinaBlahun
 
30.11.21 - 14:02
Доброго времени подскажите не работает сортировка. Не могу понять почему и как это исправить.
   IrinaBlahun
 
1 - 30.11.21 - 14:03
Перем ТабЗДоговоров, ТабЗДопСоглашения,ТабЗДоговоровОЛД;
//======================================================================






Процедура ЗаполнитьТЗДог(ТЗ,Вид="ДоговорНаПроектирование")
    Запрос = СоздатьОбъект("Запрос");
    Дата1='01.01.10';
    Дата2=ОконПер;

    Если Вид="ДоговорНаПроектирование" Тогда
        УсловиеНаДаты="
        |ДатаНачПроект  = Регистр.Обороты.ТекущийДокумент.ДоговорНаПроектирование.НачПроект;
        |ДатаОконПроект = Регистр.Обороты.ТекущийДокумент.ДоговорНаПроектирование.ОконПроект;
        |ФактОконПроект = Регистр.Обороты.ТекущийДокумент.ДоговорНаПроектирование.ФактОкон;
        |";
    Иначе
        УсловиеНаДаты="
        |ДатаНачПроект  = Регистр.Обороты.ТекущийДокумент.ДопСоглашение.НачПроект;
        |ДатаОконПроект = Регистр.Обороты.ТекущийДокумент.ДопСоглашение.ОконПроект;
        |ФактОконПроект = Регистр.Обороты.ТекущийДокумент.ДопСоглашение.ОконПроект;
        |";
        
    КонецЕсли;
    
    
    ТекстЗапроса = 
    "  
    |Период С Дата1  По Дата2;
    |ТекДок            = Регистр.Обороты.ТекущийДокумент;
    |Документы      = Регистр.Обороты.Документ;
    |"+УсловиеНаДаты+"
    |СуммаДог       = Регистр.Обороты.СуммаДог;
    |СуммаДопСогл   = Регистр.Обороты.СуммаДопСогл;
    |_Объект         = Регистр.Обороты.Объект; 
    |Объект         = Регистр.Обороты.Объект.Наименование; 
    |Код             = Регистр.Обороты.Объект.Код;                                      
    |Заказчик         = Регистр.Обороты.Объект.Заказчик;  
    |Отдел             = Регистр.Обороты.Объект.Отдел;
    |Стадия         = Регистр.Обороты.Объект.Стадия;
    |Примеч            = Регистр.Обороты.Объект.Прим;
    |Условие (Стадия.Код <> Строка(1));
    |Гип            = Регистр.Обороты.Объект.Гип;   
    |ИстФин            = Регистр.Обороты.Объект.ИстФин; 
    |Назначение        = Регистр.Обороты.Объект.Назначение; 
    |Район            = Регистр.Обороты.Объект.Район;
    |Вотчет            = Регистр.Обороты.Объект.Вотчет; 
    |ПризнакПодпис  = Регистр.Обороты.ПризнакПодпис;
    |Группировка Документы; 
    |Группировка СуммаДог;
    |Группировка ДатаНачПроект;
    |Группировка ДатаОконПроект;
    |Группировка ФактОконПроект;
    |Группировка _Объект;
    |Функция ОбщСуммаДог = Приход(СуммаДог);
    //|Функция ОбщСуммаДопСогл        = Приход(СуммаДопСогл);

    |Без итогов;
    |Условие(ТекДок.Вид()="""+Вид+""");
    |"                                                        
    ; 

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

    КонецЕсли;
    
    
    
    
    
КонецПроцедуры// ПолучитьСписокДополнительныхДанных(Запрос.Объект)




Процедура ЗаполнитьТЗДоп(ТЗ,Вид="ДопСоглашение")
    Запрос = СоздатьОбъект("Запрос");
    Дата1='01.01.16';
    Дата2=ОконПер;    
        УсловиеНаДаты="
        |ДатаНачПроект  = Регистр.Обороты.ТекущийДокумент.ДопСоглашение.НачПроект;
        |ДатаОконПроект = Регистр.Обороты.ТекущийДокумент.ДопСоглашение.ОконПроект;
        |ФактОконПроект = Регистр.Обороты.ТекущийДокумент.ДопСоглашение.ОконПроект;
        |";

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

    КонецЕсли;
    
    
    
    
    
КонецПроцедуры// ПолучитьСписокДополнительныхДанных(Запрос.Объект)


//======================================================================

Функция пОПАДАЕТвПЕРИОД(оБкт)
    нс=0;
    ДоговорПопадаетВпериод=0;
    ТабЗДоговоровОЛД.НайтиЗначение(оБкт,нс,"_Объект");
    Если нс=0 Тогда
        Сообщить("Ошибка во внутренних таблицах 54","!");
    Иначе
        ТабЗДоговоровОЛД.ПолучитьСтрокуПономеру(нс);
        Если ТабЗДоговоровОЛД.ДатаНачПроект>=НачПер Тогда
            ДоговорПопадаетВпериод=1;
        КонецЕсли;
    КонецЕсли;
    
    
    нс=0;
    ДопсоглашениеПопадаетВпериод=0;
    ТабЗДопСоглашения.НайтиЗначение(оБкт,нс,"_Объект");
    Если нс>0 Тогда
        ТабЗДопСоглашения.ПолучитьСтрокуПономеру(нс);
        Если ТабЗДопСоглашения.ДатаНачПроект>=НачПер Тогда
            ДопСоглашениеПопадаетВпериод=1;
        КонецЕсли;
    КонецЕсли;
    
    Возврат ДопсоглашениеПопадаетВпериод+ДоговорПопадаетВпериод;

    
    
    
    Возврат -1;
КонецФункции// пОПАДАЕТвПЕРИОД



//======================================================================

Функция ВернутьДоговора(Об,ТабЗ,Сдокументом=0)
    нс=0;
    ТабЗДоговоров.НайтиЗначение(оБ,нс,"_Объект");
    Если нс=0 Тогда
        Сообщить("Ошибка во внутренних таблицах 1","!");
    Иначе
        Если нс=1 Тогда
            ТабзДоговоров.ВыбратьСтроки();
        Иначе
            ТабЗДоговоров.ПолучитьСтрокуПономеру(нс-1);
        КонецЕсли;
        
        
            Пока ТабЗДоговоров.ПолучитьСтроку()=1 Цикл
                Если ТабЗДоговоров._Объект<>Об Тогда
                    Возврат ТабЗ;
                Иначе
                    ТабЗ.НоваяСтрока();
                    ТабЗ.Объект=об;
                    ТабЗ.гИП=ТабЗДоговоров.Гип;
                    ТабЗ.ДатаНачала=ТабЗДоговоров.ДатаНачПроект;
                    ТабЗ.ДатаОкончания=ТабЗДоговоров.ДатаОконПроект;
                    ТабЗ.СуммаДог=ТабЗДоговоров.СуммаДог;
                    Если Сдокументом=1 Тогда
                        ТабЗ.Док=ТабЗДоговоров.ТекДок;    
                    КонецЕсли;
                КонецЕсли;
            КонецЦикла;
    КонецЕсли;
    
    Возврат ТабЗ;
КонецФункции// ВернутьДоговора


//======================================================================

Функция ВернутьДопсоглашения(Об,Табз,ДатаДоговора,Сдокументом=0)
    нс=0;
    ТабЗДопСоглашения.НайтиЗначение(оБ,нс,"_Объект");
    Если нс=0 Тогда
        Возврат Табз;
    Иначе
        //ТабЗДопСоглашения.ПолучитьСтрокуПономеру(нс-1);

        
        Если нс=1 Тогда
            ТабЗДопСоглашения.ВыбратьСтроки();
        Иначе
            ТабЗДопСоглашения.ПолучитьСтрокуПономеру(нс-1);
        КонецЕсли;
        
        Пока ТабЗДопСоглашения.ПолучитьСтроку()=1 Цикл
            Если ТабЗДопСоглашения._Объект<>Об Тогда
                Возврат ТабЗ;
            Иначе
                Если ТабЗДопСоглашения.ДатаНачПроект>=ДатаДоговора Тогда
                    ТабЗ.НоваяСтрока();
                    ТабЗ.Объект=об;
                    ТабЗ.гИП=ТабЗДопСоглашения.Гип;
                    ТабЗ.ДатаНачала=ТабЗДопСоглашения.ДатаНачПроект;
                    ТабЗ.ДатаОкончания=ТабЗДопСоглашения.ДатаОконПроект;
                    ТабЗ.СуммаДог=ТабЗДопСоглашения.СуммаДопСогл;
                    Если Сдокументом=1 Тогда
                        ТабЗ.Док=ТабЗДопСоглашения.ТекДок;    
                    КонецЕсли;
                КонецЕсли;
            КонецЕсли;    
        КонецЦикла;
    КонецЕсли;
    
    Возврат ТабЗ;
КонецФункции// ВернутьДопсоглашения




Процедура Сформировать()
    ЗаполнитьТЗДог(ТабЗДоговоров);
//    ТабЗДоговоров.Выгрузить(Федя);

    
    ТабЗДоговоровОЛД=СоздатьОбъект("ТаблицаЗначений");
    ТабЗДоговоров.Выгрузить(ТабЗДоговоровОЛД);
    ТабЗДоговоровОЛД.Сортировать("ДатаОконПроект-");
    
    
    ЗаполнитьТЗДоп(ТабЗДопСоглашения);
//    ТабЗДопСоглашения.Выгрузить(Вася);

    ТзОбъекты=СоздатьОбъект("ТаблицаЗначений");
    ТабЗДоговоров.Выгрузить(ТзОбъекты);
    ТзОбъекты.Свернуть("Документы,_Объект,ДатаНачПроект","ОбщСуммаДог");
    ТзОбъекты.ВыбратьСтроки();
    
    Свод=СоздатьОбъект("ТаблицаЗначений");
    Свод.НоваяКолонка("Объект","Справочник.Объект");
    //Свод.НоваяКолонка("ШифрОбъекта","строка",24);

    Свод.НоваяКолонка("Отдел","Справочник.Отдел");
    //Свод.НоваяКолонка("Заказчик","Справочник.Заказчик");

    //Свод.НоваяКолонка("Стадия","Справочник.Стадия");

    Свод.НоваяКолонка("Гип","Справочник.Гип");
    Свод.НоваяКолонка("ДатаНачала","Дата");
    Свод.НоваяКолонка("ДатаОкончания");
    Свод.НоваяКолонка("СуммаДог","число",15,2);
    Свод.НоваяКолонка("СтоимостьПоследнего","число",15,2);
    
    ТзДоговораПоОъекту=СоздатьОбъект("ТаблицаЗначений");
    Свод.Выгрузить(ТзДоговораПоОъекту);
    
    
    ТзДопСоглашенияПоОъекту=СоздатьОбъект("ТаблицаЗначений");
    Свод.Выгрузить(ТзДопСоглашенияПоОъекту);
    
    Пока ТзОбъекты.ПолучитьСтроку() = 1 Цикл
        Если ПопадаетВпериод(ТзОбъекты._Объект)<1 Тогда
            Продолжить;
        КонецЕсли;
        СтоимостьПоследнего=0;
        Об=ТзОбъекты._Объект;
        ТзДоговораПоОъекту.УдалитьСтроки();
        ТзДопСоглашенияПоОъекту.УдалитьСтроки();
        ГИП=ПолучитьПустоеЗначение("Справочник.Гип");
        
        
        ТзДоговораПоОъекту=ВернутьДоговора(Об,ТзДоговораПоОъекту);
        Если ТзДоговораПоОъекту.КоличествоСтрок()=0 Тогда
            Сообщить("Сбой в алгритме программы, сообщите программистам","!");
            Возврат;
        Иначе
            ТзДоговораПоОъекту.ПолучитьСтрокуПоНомеру(1)//самый ранний договор

            ДатаНачала=ТзДоговораПоОъекту.ДатаНачала;
            ДатаОкончания=ТзДоговораПоОъекту.ДатаОкончания;
            СуммаДог=ТзДоговораПоОъекту.Итог("СуммаДог");        
            ГИП=ТзДоговораПоОъекту.Гип//Единственная хрень в которой я не уверен

            ТзДоговораПоОъекту.ПолучитьСтрокуПоНомеру(ТзДоговораПоОъекту.КоличествоСтрок());
            СтоимостьПоследнего=ТзДоговораПоОъекту.СуммаДог;
        КонецЕсли;
        
        
        ТзДопСоглашенияПоОъекту=ВернутьДопсоглашения(Об,ТзДопСоглашенияПоОъекту,ДатаНачала);
        
        
        //Т.к. у допников нет подчинения конкретному договору, что упростило бы задачу в разы

        //по идее я ориентируюсь на один договор за период по объекту,

        //но может быть, что несколько договоров.

        //будет самый ранний договор, а остальное(договоры соглашения) будет валиться уже на него

        //т.е. если было 2 договора за период например в 2016 году и в 2017 году, то надо, правидьно брать отчетом 2 периода за 16 и 17 год

        //все соглашения, старше попавшего первого договора за период отметаются, т.к. относятся к этому объекту, но к более раннему договору. 

        //все подробности этой мысли будет видно в расшифровке суммы. (два раза кликнули)...

        
    
        Если ТзДопСоглашенияПоОъекту.КоличествоСтрок()>0 Тогда
            ТзДопСоглашенияПоОъекту.ПолучитьСтрокуПоНомеру(1)//самый  допник поздний

            СтоимостьПоследнего=ТзДопСоглашенияПоОъекту.СуммаДог;
            ДатаОкончания=ТзДопСоглашенияПоОъекту.ДатаОкончания;
            СуммаДог=СуммаДог+ТзДопСоглашенияПоОъекту.Итог("СуммаДог");
        КонецЕсли;
        
        Если ПустоеЗначение(ДатаОкончания)=1 Тогда
            ДатаОкончания="в работе";
        КонецЕсли;
    
        

        Свод.НоваяСтрока();
        Свод.Объект = Об;
        //Свод.ШифрОбъекта = Об.Код;

        Свод.Отдел = Об.Отдел;
        //Свод.Заказчик = Об.Заказчик;

        //Свод.Стадия = Об.Стадия;

        Свод.Гип = ГИП;
        Свод.ДатаНачала = ДатаНачала;
        Свод.ДатаОкончания = ДатаОкончания;
        Свод.СуммаДог =СуммаДог ;
        Свод.СтоимостьПоследнего =СтоимостьПоследнего ;
        
    КонецЦикла;
    Свод.Сортировать("Отдел,Объект");
//    Свод.Выгрузить(Коля);

    Табб=СоздатьОбъект("Таблица");
    Табб.ИсходнаяТаблица("Таблица");
    Табб.ВывестиСекцию("Маст");
    Табб.ВывестиСекцию("Шапка");
    Если Свод.КоличествоСтрок()>0 Тогда
        Свод.ПолучитьСтрокуПоНомеру(1);
        Олдотдел=Свод.Отдел;
        Табб.ВывестиСекцию("Отдел");
    Иначе
        Сообщить("За период нет данных","!");
        Возврат;
    КонецЕсли;
    Свод.ВыбратьСтроки();
    номер=0;
    Пока Свод.ПолучитьСтроку() = 1 Цикл
        Если Олдотдел<>Свод.Отдел Тогда
            Табб.ВывестиСекцию("Отдел");
            Олдотдел=Свод.Отдел;
        КонецЕсли;
        номер=номер+1;
        Об=Свод.Объект;
        Сз=СоздатьОбъект("СписокЗначений");
        Сз.ДобавитьЗначение(Об);
        СтоимостьПоследнего=Свод.СтоимостьПоследнего;
        Табб.ВывестиСекцию("Строка");
        

    КонецЦикла;
    _СуммаДог=Свод.Итог("СуммаДог");
    Табб.ВывестиСекцию("Итог");
    
    Табб.ТолькоПросмотр(1);
    Табб.Опции(0,0,4,0);
    Табб.ПараметрыСтраницы(1,,,10,5,5,5,,,1);
    Табб.Показать("Отчет по договорам о доп.соглашениям по-объектно");
    
//    Свод.Выгрузить(Коля);

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

Процедура Сформировать_() 
    перем текдоп, текдог;
    
    ЗаполнитьТЗДог(ТабЗДоговоров);
//    ТабЗДоговоров.Выгрузить(Федя);

    
    
    ЗаполнитьТЗДоп(ТабЗДопСоглашения);
//    ТабЗДопСоглашения.Выгрузить(Вася);

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

    //ДекДоп="";

    Пока Запрос.Группировка(1) = 1 Цикл
        Таб.ВывестиСекцию("Отдел");
        _СуммаДог = 0;
    Пока Запрос.Группировка(2) = 1 Цикл 
        Пока Запрос.Группировка(3) = 1 Цикл  
            Пока Запрос.Группировка(4) = 1 Цикл  
                Прим = "";
                КолПодпис         = 0;
                КолНеПодпис     = 0;
                ДатаНеПодписАкт = ""; 
                ДатаПодписАкт     = "";
                Пока Запрос.Группировка(5) = 1 Цикл
                    
                    Если Запрос.Документы.Вид() = "ДоговорНаПроектирование" Тогда
                        Нс=0;
                        Рез=ТабЗДоговоров.НайтиЗначение(Запрос._Объект,нс,"_Объект");
                        Если Рез=1 Тогда
                            ТабЗДоговоров.ПолучитьСтрокуПоНомеру(нс);
                            СуммаДог     = ТабЗДоговоров.СуммаДог;
                            ДогДатаС     = ТабЗДоговоров.ДАТАНачПроект;
                            ДогДатаПо     = ТабЗДоговоров.ДАТАоКОНПроект;
                            ТекДог=ТабЗДоговоров.ТекДок.ТекущийДокумент();
                        Иначе
                            СуммаДог     = Запрос.СуммаДог;
                            ДогДатаС     = Запрос.Документы.НачПроект;
                            ДогДатаПо     = Запрос.Документы.ОконПроект;
                        КонецЕсли;
                        
                    КонецЕсли;  
                    Если Запрос.Документы.Вид() = "ДопСоглашение" Тогда
                        Если Запрос.Документы.Сумма <> 1 Тогда
                            СуммаДог     = Запрос.Документы.Сумма;
                        КонецЕсли;    
                        Нс=0;
                        Рез=ТабЗДопСоглашения.НайтиЗначение(Запрос._Объект,нс,"_Объект");
                        Если Рез=1 Тогда
                            ТабЗДопСоглашения.ПолучитьСтрокуПоНомеру(нс);
                            СуммаДог     = ТабЗДопСоглашения.ОбщСуммаДог;
                            ДогДатаС     = ТабЗДопСоглашения.ДАТАНачПроект;
                            ТекДоп=ТабЗДопСоглашения.ТекДок.ТекущийДокумент();
                            Если ПустоеЗначение(ТабЗДопСоглашения.ДАТАоКОНПроект)=0 Тогда
                                ДогДатаПо     = ТабЗДопСоглашения.ДАТАоКОНПроект;
                                
                            Иначе
                                ТекДоп=ТекДог;
                            КонецЕсли;
                            
                        Иначе
            
                            ДатаНачПлан     = Запрос.Документы.НачПроект;
                            ДатаОконПлан = Запрос.Документы.ОконПроект;
                            Прим         = "Доп. согл " + Запрос.Документы.НомерДоговора;
                        КонецЕсли;
                    КонецЕсли; 
                    Если ПустоеЗначение(ДатаОконПлан)=1 Тогда
                        ДатаОконПлан="в работе"
                    КонецЕсли;
                    
                КонецЦикла; 
                Если ПустаяСтрока(Стоим) <> 1 Тогда
                    Если Число(СуммаДог) > Число(Стоим) Тогда
                        //Сообщить("1");

                        Номер = Номер + 1;
                        Таб.ВывестиСекцию("Данные");
                        _СуммаДог = _СуммаДог + СуммаДог;
                    КонецЕсли;    
                Иначе
                    //Сообщить("2");

                    Номер = Номер + 1;
                    Таб.ВывестиСекцию("Данные");
                    _СуммаДог = _СуммаДог + СуммаДог;
                КонецЕсли;
            КонецЦикла;  
        КонецЦикла;
    КонецЦикла;
    КонецЦикла;
    //Таб.ВывестиСекцию("Итог");

    //Таб.ТолькоПросмотр(1);

    Таб.Опции(0,0,5);
    Таб.ПовторятьПриПечатиСтроки(4,6);
    Таб.Показать();
КонецПроцедуры
Процедура ПриОткрытии()
    ОконПер = ПолучитьДатуТА();
    НачПер=ПолучитьДатуТА()-190;
КонецПроцедуры  

процедура ОбработкаЯчейкиТаблицы(расш,ст,таб,адр)
    
    Если Строка(Расш)<>"СписокЗначений" Тогда
        ст=1;
        //Если ПустоеЗначение(расш)=0 Тогда

        //    открытьФорму(расш);

        //КонецЕсли;

    Иначе
        Об=расш.ПолучитьЗначение(1);
        Сообщить(об);        
        РасшТЗ=СоздатьОбъект("ТаблицаЗначений");
        РасшТЗ.НоваяКолонка("Объект","Справочник.Объект");
        РасшТЗ.НоваяКолонка("Отдел","Справочник.Отдел");
        РасшТЗ.НоваяКолонка("Гип","Справочник.Гип");
        РасшТЗ.НоваяКолонка("ДатаНачала","Дата");
        РасшТЗ.НоваяКолонка("ДатаОкончания");
        РасшТЗ.НоваяКолонка("СуммаДог","число",15,2);
        РасшТЗ.НоваяКолонка("Док","Документ");
        РасшТЗ=ВернутьДоговора(Об,РасшТЗ,1);
        Если РасшТЗ.КоличествоСтрок()=0 Тогда
            Сообщить("Сбой в алгритме программы, сообщите программистам","!");
            Возврат;
        //Иначе

            //ТзДоговораПоОъекту.ПолучитьСтрокуПоНомеру(1);//самый ранний договор

            //ДатаНачала=ТзДоговораПоОъекту.ДатаНачала;

            //ДатаОкончания=ТзДоговораПоОъекту.ДатаОкончания;

            //СуммаДог=ТзДоговораПоОъекту.Итог("СуммаДог");        

            //ГИП=ТзДоговораПоОъекту.Гип;//Единственная хрень в которой я не уверен


        КонецЕсли;
        
        таббе=СоздатьОбъект("Таблица");
        таббе.ИсходнаяТаблица("Расшифровка");
        таббе.ВывестиСекцию("Шапка");
        ИтогоСум=0;
        РасшТЗ.ВыбратьСтроки();
        Пока РасшТЗ.ПолучитьСтроку()=1 Цикл
            Если ИтогоСум=0 Тогда
                ДатаНачала=РасшТЗ.ДатаНачала;
            КонецЕсли;
            
            ИтогоСум=ИтогоСум+РасшТЗ.СуммаДог;
            
            Док=РасшТЗ.Док;
            Докстр=Строка(Док)+ " от "+Док.ДатаДок+" дата начала поектирования "+Док.НачПроект;
            Тексумма=РасшТЗ.СуммаДог;
            таббе.ВывестиСекцию("Строка");
        КонецЦикла;
        РасшТЗ.УдалитьСтроки();
        РасшТЗ=ВернутьДопсоглашения(Об,РасшТЗ,ДатаНачала,1);
        РасшТЗ.Сортировать("Объект,ДатаНачала");
        Если РасшТЗ.КоличествоСтрок()>0 Тогда
            РасшТЗ.ВыбратьСтроки();
            Пока РасшТЗ.ПолучитьСтроку()=1 Цикл
                ИтогоСум=ИтогоСум+РасшТЗ.СуммаДог;
                Док=РасшТЗ.Док;
                Тексумма=РасшТЗ.СуммаДог;
                Докстр=Строка(Док)+ " от "+Док.ДатаДок+"  дата начала поектирования "+Док.НачПроект;
                таббе.ВывестиСекцию("Строка");
            КонецЦикла;
        КонецЕсли;
        
        
        
        таббе.ВывестиСекцию("Итого");
        таббе.ТолькоПросмотр(1);
        таббе.Опции(0,0,2,0);
        таббе.Показать("Расшифровка "+Об);
        
        
        
        
    КонецЕсли;
    
КонецПроцедуры
   IrinaBlahun
 
2 - 30.11.21 - 14:05
Суть в том что в форме есть поле сортировки по сумме. Т.е. должно выводить сумму больше указанной. Но не выводит.
   АгентБезопаснойНацио
 
3 - 30.11.21 - 14:06
"наймите программиста"©
   Ёпрст
 
4 - 30.11.21 - 14:07
(0) какой адок зачетный.
Это вообще хоть как-то работает у вас ?
   Ёпрст
 
5 - 30.11.21 - 14:09
(2) у вас нет ни одной сортировки по Сумме в этом коде, что вы от него хотите ?
   IrinaBlahun
 
6 - 30.11.21 - 14:09
(4) пока что работает, и надо чтоб проработала еще немного)
   Ёпрст
 
7 - 30.11.21 - 14:10
(6)
Сбой в алгритме программы, сообщите программистам!

Да у вас там гнездо!
   IrinaBlahun
 
8 - 30.11.21 - 14:11
(5) Я ни чего не смыслю в 1С. Я поняла что сортировка не работает, потому что про нее нет ни чего. Вот именно поэтому и пишу сюда
   АгентБезопаснойНацио
 
9 - 30.11.21 - 14:11
(7) судя по вопросам, разлетелись они из гнезда...
   IrinaBlahun
 
10 - 30.11.21 - 14:11
(7) На этом месте уже столько народу поменялось. Что хорошо что в коде нет ругательных слов)
   Эльниньо
 
11 - 30.11.21 - 14:11
Выложите весь глобальный модуль. Без этого никак
   Ёпрст
 
12 - 30.11.21 - 14:13
(8) еще раз. У вас нет никакой сортировке по сумме в коде.

Если вы путаете сортировку и условие на сумму, то селя ви
   Ёпрст
 
13 - 30.11.21 - 14:14
Максимум, что у вас есть, так только вот это условие

  Если ПустаяСтрока(Стоим) <> 1 Тогда
                    Если Число(СуммаДог) > Число(Стоим) Тогда
                        //Сообщить("1");


                        Номер = Номер + 1;
                        Таб.ВывестиСекцию("Данные");
                        _СуммаДог = _СуммаДог + СуммаДог;
                    КонецЕсли;    
                Иначе
                    //Сообщить("2");


Где Стоим -это поди реквизит формы и ваша "сортировка"
   IrinaBlahun
 
14 - 30.11.21 - 14:16
(13) я не могу понять как прикрепить скрин или файл
   Ёпрст
 
15 - 30.11.21 - 14:17
   IrinaBlahun
 
16 - 30.11.21 - 14:18
(13) если можете напишите мне на почту IrinaBlahun@gmail.com и я отправлю все что нужно
   IrinaBlahun
 
17 - 30.11.21 - 14:20
(15) http://pics.rsh.ru/img/_2021-11-30140104_o0bml2pu.png Вот про выделенное полу в диалогов окне я говорю
   Ёпрст
 
18 - 30.11.21 - 14:20
(16) могу дать только реквизиты счета, отправляйте деньги. Мне больше ничего не нужно.
   МихаилМ
 
19 - 30.11.21 - 14:24
(0)
Irina3gger
это Вы ?
   IrinaBlahun
 
20 - 30.11.21 - 14:26
(18) ясно
попробую по-другому
Подскажите как правильно обращаться к форме, чтобы если ставить "Стоимость больше: 1000" в отчете вывелись правильные данные
   Ёпрст
 
21 - 30.11.21 - 14:27
(20) правильные, это какие ?
   Ёпрст
 
22 - 30.11.21 - 14:28
у вас там каша в коде, разбираться в ней нет никакого желания. Вы суммируете некую СуммаДог в коде и нкакладываете зачем то на этот нарастающий итог свой фильтр на Стоим, в итоге имеете то, что имеете.
   IrinaBlahun
 
23 - 30.11.21 - 14:29
(21) в которых СуммаДог больше 1000
   acht
 
24 - 30.11.21 - 14:32
(0) пОПАДАЕТвПЕРИОД

оЕПЕЙКЧВХаКЪйНДХПНБЙС!
   МихаилМ
 
25 - 30.11.21 - 14:33
она еще и лезбиянка 
https://forum.grodno.net/index.php?topic=4510615.0
   Ёпрст
 
26 - 30.11.21 - 14:34
(23)

Вы смотрите СуммуДог по группировке документы, а накладываете своё условие на вышестоящую группировку, в итоге сравниваете своё Стоим всегда с последним документом и его СуммуДог.
Так, понятнее ?
   Ёпрст
 
27 - 30.11.21 - 14:36
Вам нужно или суммировать все СуммуДог в группировке по документам и потом ЭТО сравнивать с Стоим, или условие делать при обходе группировки по документам.
   Ёпрст
 
28 - 30.11.21 - 14:37
И в вашем коде, не ясно, нахрена вы вообще обходите группировку по документам, если с неё потом нет никакого вывода в табличный документ
   Ёпрст
 
29 - 30.11.21 - 14:38
Сорее всего, вы своё условие должны просто унутрь цикла по группировке(5) внести.
   Ёпрст
 
30 - 30.11.21 - 14:38
и всё.
 
 
   IrinaBlahun
 
31 - 30.11.21 - 14:41
(30) спасибо за разъяснении
   Ёпрст
 
32 - 30.11.21 - 14:43
(31) если не понятно, то так сделайте, для начала:


      
  //КонецЦикла; отсюда убрать

                Если ПустаяСтрока(Стоим) <> 1 Тогда
                    Если Число(СуммаДог) > Число(Стоим) Тогда
                        //Сообщить("1");


                        Номер = Номер + 1;
                        Таб.ВывестиСекцию("Данные");
                        _СуммаДог = _СуммаДог + СуммаДог;
                    КонецЕсли;    
                Иначе
                    //Сообщить("2");


                    Номер = Номер + 1;
                    Таб.ВывестиСекцию("Данные");
                    _СуммаДог = _СуммаДог + СуммаДог;
                КонецЕсли;
          КонецЦикла//Сюда добавить

   IrinaBlahun
 
33 - 30.11.21 - 14:52
(32) Спасибо за совет
   Злопчинский
 
34 - 30.11.21 - 14:57
Ёпрст
а такая конструкция будет работать, когда текущий документ - док.неопределенного вида?
   Если Вид="ДоговорНаПроектирование" Тогда
        УсловиеНаДаты="
        |ДатаНачПроект  = Регистр.Обороты.ТекущийДокумент.ДоговорНаПроектирование.НачПроект;
        |ДатаОконПроект = Регистр.Обороты.ТекущийДокумент.ДоговорНаПроектирование.ОконПроект;
        |ФактОконПроект = Регистр.Обороты.ТекущийДокумент.ДоговорНаПроектирование.ФактОкон;
        |";
    Иначе
        УсловиеНаДаты="
        |ДатаНачПроект  = Регистр.Обороты.ТекущийДокумент.ДопСоглашение.НачПроект;
        |ДатаОконПроект = Регистр.Обороты.ТекущийДокумент.ДопСоглашение.ОконПроект;
        |ФактОконПроект = Регистр.Обороты.ТекущийДокумент.ДопСоглашение.ОконПроект;
        |";
        
    КонецЕсли;
   Ёпрст
 
35 - 30.11.21 - 15:26
(34) я хз тов. майор, как этот код вообще хоть что-то выдаёт.
По мне, всё в топку.
   АгентБезопаснойНацио
 
36 - 30.11.21 - 15:30
(35) за 4 года можно было все уже переписать. если не на снеговика, то уж на нормальные запросы - точно...
   серый КТУЛХУ
 
37 - 30.11.21 - 17:29
несколько условий работают через "И"
если среди них встречаются взаимоисключающие - результат запроса получится пустой.
   Злопчинский
 
38 - 30.11.21 - 22:59
(36) нахера? то есть зачем? если работает, данные выдает нужные, по быстродействию удовлетовряет... - чего не хватает? не, если больше задач нету - то да, самосовершенствуемся...


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.