Имя: Пароль:
1C
1C 7.7
v7: Не работает сортировка
0 IrinaBlahun
 
30.11.21
14:02
Доброго времени подскажите не работает сортировка. Не могу понять почему и как это исправить.
1 IrinaBlahun
 
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);
        таббе.Показать("Расшифровка "+Об);
        
        
        
        
    КонецЕсли;
    
КонецПроцедуры
2 IrinaBlahun
 
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) у вас нет ни одной сортировки по Сумме в этом коде, что вы от него хотите ?
6 IrinaBlahun
 
30.11.21
14:09
(4) пока что работает, и надо чтоб проработала еще немного)
7 Ёпрст
 
30.11.21
14:10
(6)
Сбой в алгритме программы, сообщите программистам!

Да у вас там гнездо!
8 IrinaBlahun
 
30.11.21
14:11
(5) Я ни чего не смыслю в 1С. Я поняла что сортировка не работает, потому что про нее нет ни чего. Вот именно поэтому и пишу сюда
9 АгентБезопасной Нацио
 
30.11.21
14:11
(7) судя по вопросам, разлетелись они из гнезда...
10 IrinaBlahun
 
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");


Где Стоим -это поди реквизит формы и ваша "сортировка"
14 IrinaBlahun
 
30.11.21
14:16
(13) я не могу понять как прикрепить скрин или файл
15 Ёпрст
 
30.11.21
14:17
16 IrinaBlahun
 
30.11.21
14:18
(13) если можете напишите мне на почту [email protected] и я отправлю все что нужно
17 IrinaBlahun
 
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
это Вы ?
20 IrinaBlahun
 
30.11.21
14:26
(18) ясно
попробую по-другому
Подскажите как правильно обращаться к форме, чтобы если ставить "Стоимость больше: 1000" в отчете вывелись правильные данные
21 Ёпрст
 
30.11.21
14:27
(20) правильные, это какие ?
22 Ёпрст
 
30.11.21
14:28
у вас там каша в коде, разбираться в ней нет никакого желания. Вы суммируете некую СуммаДог в коде и нкакладываете зачем то на этот нарастающий итог свой фильтр на Стоим, в итоге имеете то, что имеете.
23 IrinaBlahun
 
30.11.21
14:29
(21) в которых СуммаДог больше 1000
24 acht
 
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
и всё.
31 IrinaBlahun
 
30.11.21
14:41
(30) спасибо за разъяснении
32 Ёпрст
 
30.11.21
14:43
(31) если не понятно, то так сделайте, для начала:


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

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

                    Номер = Номер + 1;
                    Таб.ВывестиСекцию("Данные");
                    _СуммаДог = _СуммаДог + СуммаДог;
                КонецЕсли;
          КонецЦикла;//Сюда добавить
33 IrinaBlahun
 
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) нахера? то есть зачем? если работает, данные выдает нужные, по быстродействию удовлетовряет... - чего не хватает? не, если больше задач нету - то да, самосовершенствуемся...