![]() |
|
v7: Запрос, отчет, Группировка Без Упорядочивания | ☑ | ||
---|---|---|---|---|
0
YDen
23.06.19
✎
10:34
|
Здравствуйте.
Подскажите плиз. Самопальная конфигурация. Есть документ с ТЧ. В ТЧ данные внесены в особом порядке (текст), не по алфавиту. В отчете запрос к этому документу: Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с ВыбНачПериода по ВыбКонПериода; |ОбрабатыватьДокументы Проведенные; |Предмет = Документ.Аттестат.Предмет; |ПредметДоп = Документ.Аттестат.ПредметДоп; |Класс = Документ.Аттестат.Класс; |УченикФамилия = Документ.Аттестат.Фамилия; |УченикИмя = Документ.Аттестат.Имя; |УченикОтчество = Документ.Аттестат.Отчество; |ДатаРождения = Документ.Аттестат.ДатаРождения; |ДатаВыдачи = Документ.Аттестат.ДатаВыдачи; |Оценка = Документ.Аттестат.Оценка; |НомерАттестат = Документ.Аттестат.НомерАттестат; |ДатаАттестат = Документ.Аттестат.ДатаВыдачи; |ДатаДок = Документ.КлЖурнал1.ДатаДок; |НомерДок=Документ.КлЖурнал1.НомерДок; |Группировка НомерАттестат; |Группировка Предмет Без Упорядочивания; |Условие (ПустаяСтрока(НомерАттестат)=0); |"//}}ЗАПРОС ; Далее этими группировками заполняются две ТЗ - для вывода в печатную форму. Речь о группировке Предмет. В печатной форме вывод предметов идет по алфавиту. Мне же нужно, чтобы вывод был в таком же порядке, как и в ТЧ исходного документа. Плиз, посоветуйте, как это можно сделать? Весь код: Перем Фирма,АвторДокумента, ФИО, ФИОД, Классный; //********************************************** //****************************************************************************** // РасшифровкаОбновить(Обновить) // // Параметры: // Обновить = 1 - нажата кнопка "Обновить" // 2 - нажата кнопка "Настройка" // // Возвращаемое значение: // Расшифровка (список значений) // // Вызывается из формул элементов диалога: // из таблицы, кнопки "Обновить" и "Настройка" // // Описание: // функция для стандартного механизма кнопок ""Обновить" и "Настройка"" // помещает значение параметра в список Расшифровка и возвращает этот список // //Функция РасшифровкаОбновить(Обновить) // // Расшифровка.Установить("Обновить", Обновить); // Возврат Расшифровка; // //КонецФункции //РасшифровкаОбновить() //****************************************************************************** Процедура ПриОткрытии() Тип=Перечисление.ВидРаботы.аттестат; ВыбНачПериода='20.06.2019'; ВыбКонПериода=ТекущаяДата(); АвторДокумента=СокрЛП(ИмяПользователя()); Фирма=СокрЛП(Константа.НаименованиеУч); КонецПроцедуры //******************************************* // Процедура генерации запроса Сформировать. // Процедура Сформировать() Перем Запрос, ТекстЗапроса, Таб; //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с ВыбНачПериода по ВыбКонПериода; |ОбрабатыватьДокументы Проведенные; |Предмет = Документ.Аттестат.Предмет; |ПредметДоп = Документ.Аттестат.ПредметДоп; |Класс = Документ.Аттестат.Класс; |УченикФамилия = Документ.Аттестат.Фамилия; |УченикИмя = Документ.Аттестат.Имя; |УченикОтчество = Документ.Аттестат.Отчество; |ДатаРождения = Документ.Аттестат.ДатаРождения; |ДатаВыдачи = Документ.Аттестат.ДатаВыдачи; |Оценка = Документ.Аттестат.Оценка; |НомерАттестат = Документ.Аттестат.НомерАттестат; |ДатаАттестат = Документ.Аттестат.ДатаВыдачи; |ДатаДок = Документ.КлЖурнал1.ДатаДок; |НомерДок=Документ.КлЖурнал1.НомерДок; |Группировка НомерАттестат; |Группировка Предмет Без Упорядочивания; |Условие (ПустаяСтрока(НомерАттестат)=0); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; // Подготовка к заполнению выходных форм данными запроса Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Журнал"); // Заполнение полей "Заголовок" Таб.ВывестиСекцию("Заголовок"); ТЗШ=СоздатьОбъект("ТаблицаЗначений"); ТЗУ=СоздатьОбъект("ТаблицаЗначений"); стр=1; Пока Запрос.Группировка(1) = 1 Цикл Ном=1; оц1=4; шап=0; ТЗУ.НоваяКолонка("УченикФИО","Строка"); ТЗУ.НоваяКолонка("НомерАттестат","Строка"); ТЗУ.НоваяКолонка("ДатаРождения","Дата"); ТЗУ.НоваяКолонка("ДатаВыдачи","Дата"); ТЗУ.НоваяСтрока(); ТЗШ.НоваяСтрока(); ТЗУ.НомерАттестат=Запрос.НомерАттестат; ТЗУ.УченикФИО=СокрЛП(Запрос.УченикФамилия)+" "+СокрЛП(Запрос.УченикИмя)+" "+СокрЛП(Запрос.УченикОтчество); ТЗУ.ДатаРождения=Запрос.ДатаРождения; ТЗУ.ДатаВыдачи=Запрос.ДатаВыдачи; Пока Запрос.Группировка(2) = 1 Цикл шап=шап+1; ТЗШ.НоваяКолонка(); ТЗУ.НоваяКолонка(); ТЗШ.УстановитьЗначение(1,шап,Запрос.Предмет); оц1=оц1+1; Если Запрос.Оценка=Перечисление.Оценка.хорошо Тогда Оценка=4; КонецЕсли; Если Запрос.Оценка=Перечисление.Оценка.отлично Тогда Оценка=5; КонецЕсли; Если Запрос.Оценка=Перечисление.Оценка.удовл Тогда Оценка=3; КонецЕсли; Если Запрос.Оценка=Перечисление.Оценка.неудовл Тогда Оценка=2; КонецЕсли; Если Запрос.Оценка=Перечисление.Оценка.отсут Тогда Оценка="н"; КонецЕсли; ТЗУ.УстановитьЗначение(1,оц1,Оценка); Оценка=0; КонецЦикла; //ТЗШ.ВыбратьСтроку(); ТЗШ.ВыбратьСтроки() ; Пока ТЗШ.ПолучитьСтроку()=1 Цикл Таб.ВывестиСекцию("Шапка|Основа"); Для i=1 По ТЗШ.КоличествоКолонок() Цикл ЗначениеШапка=ТЗШ.ПолучитьЗначение(1,i); Таб.ПрисоединитьСекцию("Шапка|Верт"); КонецЦикла; КонецЦикла; ТЗУ.ВыбратьСтроки() ; Пока ТЗУ.ПолучитьСтроку()=1 Цикл Таб.ВывестиСекцию("Список|Основа"); //Таб.ВывестиСекцию("Список|Среднее"); Для i=5 По ТЗУ.КоличествоКолонок() Цикл ЗначениеСписок=ТЗУ.ПолучитьЗначение(1,i); Если ЗначениеСписок=0 Тогда ЗначениеТекст=""; Иначе ЗначениеТекст=СокрЛП(ЗначениеСписок); КонецЕсли; Таб.ПрисоединитьСекцию("Список|Верт") ; КонецЦикла; //Таб.ПрисоединитьСекцию("Заголовок|Среднее"); КонецЦикла; ТЗУ.Очистить(); ТЗШ.Очистить(); стр=стр+1; Если стр=6 Тогда Таб.НоваяСтраница() ; стр=1; КонецЕсли; КонецЦикла; Таб.ВывестиСекцию("Подвал"); Таб.ТолькоПросмотр(1); Таб.ПараметрыСтраницы(2,100,,10,10,10,10); Таб.Показать("Выданные аттестаты с "+ВыбНачПериода+" по "+ВыбКонПериода); КонецПроцедуры Благодарю |
|||
1
ДенисЧ
23.06.19
✎
10:40
|
Попробуй добавить сортировку по НомерСтроки (под рукой клюшек нет, так что могу и наврать)
|
|||
2
YDen
23.06.19
✎
11:43
|
(1) Там после запроса уже по алфавиту упорядоченные предметы вылетают.
|
|||
3
MWWRuza
гуру
23.06.19
✎
12:01
|
А не проще вообще без запроса сделать?
ВыбратьДокументы(...) ...ВыбратьСтроки() ИМХО не та задача, что-бы запрос городить... |
|||
4
YDen
23.06.19
✎
12:23
|
Сделал:
Перем Фирма,АвторДокумента, ФИО, ФИОД, Классный; //********************************************** //****************************************************************************** // РасшифровкаОбновить(Обновить) // // Параметры: // Обновить = 1 - нажата кнопка "Обновить" // 2 - нажата кнопка "Настройка" // // Возвращаемое значение: // Расшифровка (список значений) // // Вызывается из формул элементов диалога: // из таблицы, кнопки "Обновить" и "Настройка" // // Описание: // функция для стандартного механизма кнопок ""Обновить" и "Настройка"" // помещает значение параметра в список Расшифровка и возвращает этот список // //Функция РасшифровкаОбновить(Обновить) // // Расшифровка.Установить("Обновить", Обновить); // Возврат Расшифровка; // //КонецФункции //РасшифровкаОбновить() //****************************************************************************** Процедура ПриОткрытии() Тип=Перечисление.ВидРаботы.аттестат; ВыбНачПериода='20.06.2019'; ВыбКонПериода=ТекущаяДата(); АвторДокумента=СокрЛП(ИмяПользователя()); Фирма=СокрЛП(Константа.НаименованиеУч); КонецПроцедуры //******************************************* // Процедура генерации запроса Сформировать. // Процедура Сформировать() Перем Запрос, ТекстЗапроса, Таб; //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с ВыбНачПериода по ВыбКонПериода; |ОбрабатыватьДокументы Проведенные; |Предмет = Документ.Аттестат.Предмет; |ПредметДоп = Документ.Аттестат.ПредметДоп; |Класс = Документ.Аттестат.Класс; |УченикФамилия = Документ.Аттестат.Фамилия; |УченикИмя = Документ.Аттестат.Имя; |УченикОтчество = Документ.Аттестат.Отчество; |ДатаРождения = Документ.Аттестат.ДатаРождения; |ДатаВыдачи = Документ.Аттестат.ДатаВыдачи; |Оценка = Документ.Аттестат.Оценка; |НомерАттестат = Документ.Аттестат.НомерАттестат; |НомерПредмет = Документ.Аттестат.НомерСтроки; |ДатаАттестат = Документ.Аттестат.ДатаВыдачи; |ДатаДок = Документ.КлЖурнал1.ДатаДок; |НомерДок=Документ.КлЖурнал1.НомерДок; |Группировка НомерАттестат; |Группировка Предмет Без Упорядочивания; |Условие (ПустаяСтрока(НомерАттестат)=0); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; // Подготовка к заполнению выходных форм данными запроса Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Журнал"); // Заполнение полей "Заголовок" Таб.ВывестиСекцию("Заголовок"); ТЗШ=СоздатьОбъект("ТаблицаЗначений"); ТЗШТемп=СоздатьОбъект("ТаблицаЗначений"); ТЗУ=СоздатьОбъект("ТаблицаЗначений"); стр=1; Пока Запрос.Группировка(1) = 1 Цикл Ном=1; оц1=4; шап=0; ТЗШТемп.НоваяКолонка("НомерСтрокаПредмет","Число"); ТЗШТемп.НоваяКолонка("Предмет","Строка"); ТЗШТемп.НоваяКолонка("Оценка","Перечисление.Оценка"); ТЗУ.НоваяКолонка("УченикФИО","Строка"); ТЗУ.НоваяКолонка("НомерАттестат","Строка"); ТЗУ.НоваяКолонка("ДатаРождения","Дата"); ТЗУ.НоваяКолонка("ДатаВыдачи","Дата"); ТЗУ.НоваяСтрока(); ТЗШ.НоваяСтрока(); ТЗУ.НомерАттестат=Запрос.НомерАттестат; ТЗУ.УченикФИО=СокрЛП(Запрос.УченикФамилия)+" "+СокрЛП(Запрос.УченикИмя)+" "+СокрЛП(Запрос.УченикОтчество); ТЗУ.ДатаРождения=Запрос.ДатаРождения; ТЗУ.ДатаВыдачи=Запрос.ДатаВыдачи; Пока Запрос.Группировка(2) = 1 Цикл ТЗШТемп.НоваяСтрока(); ТЗШТемп.НомерСтрокаПредмет=Запрос.НомерПредмет; ТЗШТемп.Предмет=Запрос.Предмет; ТЗШТемп.Оценка=Запрос.Оценка; ТЗУ.НоваяКолонка(); КонецЦикла; //ТЗШТемп.ВыбратьСтроку(); ТЗШТемп.Сортировать("НомерСтрокаПредмет+"); ТЗШТемп.ВыбратьСтроки() ; Пока ТЗШТемп.ПолучитьСтроку()=1 Цикл шап=шап+1; ТЗШ.НоваяКолонка(); ТЗШ.УстановитьЗначение(1,шап,ТЗШТемп.Предмет); оц1=оц1+1; Если ТЗШТемп.Оценка=Перечисление.Оценка.хорошо Тогда Оценка=4; КонецЕсли; Если ТЗШТемп.Оценка=Перечисление.Оценка.отлично Тогда Оценка=5; КонецЕсли; Если ТЗШТемп.Оценка=Перечисление.Оценка.удовл Тогда Оценка=3; КонецЕсли; Если ТЗШТемп.Оценка=Перечисление.Оценка.неудовл Тогда Оценка=2; КонецЕсли; Если ТЗШТемп.Оценка=Перечисление.Оценка.отсут Тогда Оценка="н"; КонецЕсли; ТЗУ.УстановитьЗначение(1,оц1,Оценка); Оценка=0; КонецЦикла; ТЗШ.ВыбратьСтроки() ; Пока ТЗШ.ПолучитьСтроку()=1 Цикл Таб.ВывестиСекцию("Шапка|Основа"); Для i=1 По ТЗШ.КоличествоКолонок() Цикл ЗначениеШапка=ТЗШ.ПолучитьЗначение(1,i); Таб.ПрисоединитьСекцию("Шапка|Верт"); КонецЦикла; КонецЦикла; ТЗУ.ВыбратьСтроки() ; Пока ТЗУ.ПолучитьСтроку()=1 Цикл Таб.ВывестиСекцию("Список|Основа"); //Таб.ВывестиСекцию("Список|Среднее"); Для i=5 По ТЗУ.КоличествоКолонок() Цикл ЗначениеСписок=ТЗУ.ПолучитьЗначение(1,i); Если ЗначениеСписок=0 Тогда ЗначениеТекст=""; Иначе ЗначениеТекст=СокрЛП(ЗначениеСписок); КонецЕсли; Таб.ПрисоединитьСекцию("Список|Верт") ; КонецЦикла; //Таб.ПрисоединитьСекцию("Заголовок|Среднее"); КонецЦикла; ТЗУ.Очистить(); ТЗШ.Очистить(); ТЗШТемп.Очистить(); стр=стр+1; Если стр=6 Тогда Таб.НоваяСтраница() ; стр=1; КонецЕсли; КонецЦикла; Таб.ВывестиСекцию("Подвал"); Таб.ТолькоПросмотр(1); Таб.ПараметрыСтраницы(2,100,,10,10,10,10); Таб.Показать("Выданные аттестаты с "+ВыбНачПериода+" по "+ВыбКонПериода); КонецПроцедуры |
|||
5
YDen
23.06.19
✎
12:24
|
(3) Да, вы правы. Но эту конфигурацию я писал много лет назад. Сейчас стояла задача минимальными средствами подкорректировать формирование печатной формы.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |