Имя: Пароль:
1C
1C 7.7
v7: проблема с функцией
0 Irina3gger
 
15.05.19
17:22
Всем привет, у меня тут проблема адская.
Процедура Сформировать()
       Таб = СоздатьОбъект("Таблица");
             СоздатьОбъект("Регистр.АктОбъемРабот");
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "  
    |Период С НачПер  По ОконПер;
    |ТекДок            = Регистр.Обороты.ТекущийДокумент;
    |Документы      = Регистр.Обороты.Документ;
    |СуммаДог       = Регистр.Обороты.СуммаДог;
    |СуммаДопСогл   = Регистр.Обороты.СуммаДопСогл;
    |СуммаАкта      = Регистр.Обороты.СуммаАкта;
    |_Объект         = Регистр.Обороты.Объект;
    |Объект         = Регистр.Обороты.Объект.Наименование;
    |Код             = Регистр.Обороты.Объект.Код;                                      
    |Заказчик         = Регистр.Обороты.Объект.Заказчик;  
    |Отдел             = Регистр.Обороты.Объект.Отдел;
    |Стадия         = Регистр.Обороты.Объект.Стадия;
    |Примеч            = Регистр.Обороты.Объект.Прим;
    |Условие (Стадия.Код <> Строка(1));
    |Гип            = Регистр.Обороты.Объект.Гип;  
    |ИстФин            = Регистр.Обороты.Объект.ИстФин;
    |Назначение        = Регистр.Обороты.Объект.Назначение;
    |Район            = Регистр.Обороты.Объект.Район;
    |Вотчет            = Регистр.Обороты.Объект.Вотчет;
    |ПризнакПодпис  = Регистр.Обороты.ПризнакПодпис;
    |Группировка Отдел Упорядочить По Отдел.Код;
    |Группировка Документы Упорядочить По Документы.ДатаДок;
    |Группировка Вотчет Упорядочить По Вотчет.Код;
    |Группировка Объект Упорядочить По Объект.Код;                    
    |Группировка ТекДок;
    |Функция ОбщСуммаДог = Приход(СуммаДог);
    |Функция СуммаДопСогл        = Приход(СуммаДопСогл);
    |"                                                        
    ;
    Если ПустаяСтрока(ВНаим) <> 1 Тогда
        ТекстЗапроса = ТекстЗапроса+"Условие(Найти(Врег(Объект), Врег(СокрЛП(Внаим))) > 0);";
    КонецЕсли;
    Если ПустаяСтрока(ВНаим1) <> 1 Тогда
        ТекстЗапроса = ТекстЗапроса+"Условие(Найти(Врег(Объект), Врег(СокрЛП(Внаим1))) > 0);";
    КонецЕсли;
    Если ТекИстФин.Выбран() = 1 Тогда
        ТекстЗапроса = ТекстЗапроса+"Условие(ИстФин = ТекИстФин);";
    КонецЕсли;
    Если ТекЗаказчик.Выбран() = 1 Тогда
        ТекстЗапроса = ТекстЗапроса+"Условие(Заказчик = ТекЗаказчик);";
    КонецЕсли;
    Если ТекНазнач.Выбран() = 1 Тогда
        ТекстЗапроса = ТекстЗапроса+"Условие(Назначение = ТекНазнач);";
    КонецЕсли;
    Если ТекРайон.Выбран() = 1 Тогда
        ТекстЗапроса = ТекстЗапроса+"Условие(Район = ТекРайон);";
    КонецЕсли;
    Если ТекОтдел.Выбран() = 1 Тогда
        ТекстЗапроса = ТекстЗапроса+"Условие(Отдел = ТекОтдел);";                                
    КонецЕсли;
    Если ВывАрхив = 1 Тогда
        ТекстЗапроса = ТекстЗапроса+"Условие (ТекДок.Объект.Архив = Перечисление.Признак.Да);";    
    КонецЕсли;  
    Запрос.Выполнить(ТекстЗапроса);
    Таб.ВывестиСекцию("Маст");
    Таб.ВывестиСекцию("Шапка");
    Номер = 0;  
    Прим = "";
    Пока Запрос.Группировка(1) = 1 Цикл
        Таб.ВывестиСекцию("Отдел");
        _СуммаДог = 0;
    Пока Запрос.Группировка(2) = 1 Цикл
        Пока Запрос.Группировка(3) = 1 Цикл  
            Пока Запрос.Группировка(4) = 1 Цикл  
                Прим = "";
                СуммаДопСогл     = Запрос.СуммаДопСогл;
                КолПодпис         = 0;
                КолНеПодпис     = 0;
                ДатаНеПодписАкт = "";
                ДатаПодписАкт     = "";
                
                Пока Запрос.Группировка(5) = 1 Цикл
                    
                    Если Запрос.Документы.Вид() = "ДоговорНаПроектирование" Тогда
                        СуммаДопСогл     = Запрос.СуммаДог;
                        ДатаНачПлан     = Запрос.Документы.НачПроект;
                        ДатаОконПлан     = Запрос.Документы.ОконПроект;
                    КонецЕсли;  
                    
                    
                    Если Запрос.Документы.Вид() = "ДопСоглашение" Тогда
                        Если Запрос.Документы.Сумма <> 1 Тогда
                            СуммаДопСогл     = Запрос.Документы.Сумма;  
                        КонецЕсли;    
                        //ДогДатаС     = Запрос.Документы.ДатаСоставления;
                        //ДогДатаПо     = Запрос.Документы.ДатаПолучения;
                          ДатаНачПлан     = Запрос.Документы.НачПроект;
                          ДатаОконПлан = Запрос.Документы.ОконПроект;
                          Прим         = "Доп. согл " + Запрос.Документы.НомерДоговора;
                        
                КонецЕсли;
                
            КонецЦикла;
            
                Если ПустаяСтрока(Стоим) <> 1 Тогда
                    Если Число(СуммаДопСогл) > Число(Стоим) Тогда
                        //Сообщить("1");
                        Номер = Номер + 1;
                        Таб.ВывестиСекцию("Данные");
                        _СуммаДопСогл = _СуммаДопСогл + СуммаДопСогл;
                    КонецЕсли;    
                Иначе
                    //Сообщить("2");
                    Номер = Номер + 1;
                    Таб.ВывестиСекцию("Данные");
                    _СуммаДопСогл = _СуммаДопСогл + СуммаДопСогл;
                КонецЕсли;
            КонецЦикла;  
        КонецЦикла;
    КонецЦикла;
    КонецЦикла;
    //Таб.ВывестиСекцию("Итог");
    Таб.Опции(0,0,5);
    Таб.ПовторятьПриПечатиСтроки(4,6);
    Таб.Показать();;
КонецПроцедуры
Процедура ПриОткрытии()
    ОконПер = ПолучитьДатуТА();
КонецПроцедуры

вот код, у меня вместо того чтоб выводить последние ДопСоглашение, показывает все. подскажите как исправить?
1 bolder
 
15.05.19
17:29
(0) Вылавливать надо во 2 группировке, там отсортировано по дате.
2 Irina3gger
 
15.05.19
17:35
(1) даже если убрать группировку по дате все равно вытягивает все ДопСоглашения, а не только последнее
3 bolder
 
15.05.19
17:37
(2) Ну правильно, ограничения то нет.
4 Irina3gger
 
15.05.19
17:41
(3) а как его сделать? а то я понятия не имею как, я только учусь
5 Builder
 
15.05.19
17:44
(4) А что значит "последние ДопСоглашение" ????
Ну и текст запроса, конечно, не айс....
6 bolder
 
15.05.19
17:47
(4) При проходе 2 группировки ставить условие , что документ один: так как Документы отсортированы должны быть по документы.датадок убыв, будет последний.
7 Irina3gger
 
15.05.19
17:49
(5) у объекта строительства есть Договор и Доп соглашение, договор один , а вот ДоСоглашений много, и в них меняются данные, и надо чтоб данные показывали из последнего допа
8 Irina3gger
 
15.05.19
17:49
(6) т.е. убрать эту группировку?
9 Irina3gger
 
15.05.19
17:54
(6) как поставить условие что документ один?
10 big
 
16.05.19
08:20
Пока Запрос.Группировка(5,-1) = 1 Цикл   // будет идти по убыванию
...
...
     Если Запрос.Документы.Вид() = "ДопСоглашение" Тогда

         Прервать;
     КонецЕсли;

КонецЦикла;


как-то так наверное