Приветствую, форумчане!
1с8.3.6, самописная, УФ
Имеется обработка, которая выводит отчет.
Отчет формируется следующим образом.
На основании одного документа могут формироваться до 3-х других документов, естественно с разными датами. В результате деятельности обработки выводятся следующие данные:
Док01 (01/01/19) - 05/02/19 - 06/02/19 - 10/02/19
Док02 (02/01/19) - 01/02/19 - 02/02/19 - 28/02/19
Док03 (03/01/19) - 10/01/19 - 18/01/19
Даты это колонки с результатами по документам, сделанным на основании Док*
Как видно сейчас порядок формируется по дате Док*.
Требуется, чтобы была возможность упорядочить результаты по 2-ой колонке по датам, т.е. (в идеале по всем):
Док03 (03/01/19) -
10/01/19 - 18/01/19
Док02 (02/01/19) -
01/02/19 - 02/02/19 - 28/02/19
Док01 (01/01/19) -
05/02/19 - 06/02/19 - 10/02/19
1. имеется ли возможно отсортировать по датам уже выведенный результат?
2. как отсортировать по датам при формировании данных в макет?
3. может есть возможность упорядочить по датам в
ТабДок = Новый ТабличныйДокумент;
ПереизготовленияНаСервере(ТабДок, ТипыРабот);
Ещё код&НаКлиенте
Процедура Переизготовления(Команда)
ЗаполнитьТипыРабот(ТипыРабот);
ТипыРабот.ЗаполнитьПометки(Истина);
Если ТипыРабот.ОтметитьЭлементы("Пометьте нужные типы работ") Тогда
Для каждого ТипРаботы из ТипыРабот Цикл
Если НЕ ТипРаботы.Пометка Тогда
ТипыРабот.Удалить(ТипРаботы);
КонецЕсли;
КонецЦикла;
Иначе
Возврат;
КонецЕсли;
ТабДок = Новый ТабличныйДокумент;
ПереизготовленияНаСервере(ТабДок, ТипыРабот);
ТабДок.ОтображатьСетку = Ложь;
ТабДок.Защита = Ложь;
ТабДок.ТолькоПросмотр = Истина;
ТабДок.ОтображатьЗаголовки = Ложь;
ТабДок.Показать();
КонецПроцедуры
&НаСервере
Процедура ПереизготовленияНаСервере(ТабДок, ТипыРабот)
Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет");
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
ОбластьШапкаЗаказ = Макет.ПолучитьОбласть("Шапка|Заказ");
ОбластьШапкаУчасток = Макет.ПолучитьОбласть("Шапка|Участок");
ОбластьСтрокаЗаказ = Макет.ПолучитьОбласть("Строка|Заказ");
ОбластьСтрокаУчасток = Макет.ПолучитьОбласть("Строка|Участок");
ОбластьИтогоЗаказ = Макет.ПолучитьОбласть("Итого|Заказ");
ОбластьИтогоУчасток = Макет.ПолучитьОбласть("Итого|Участок");
ОбластьОтладка = Макет.ПолучитьОбласть("Отладка");
кТипыРабот = ТипыРабот.Количество();
мКоличество = Новый Массив(кТипыРабот);
мСумма = Новый Массив(кТипыРабот);
Для иТипРаботы = 0 По кТипыРабот-1 Цикл
мКоличество[иТипРаботы] = 0;
мСумма[иТипРаботы] = 0;
КонецЦикла;
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапросаПовторов();
Запрос.Параметры.Вставить("Дата1", Дата1);
Запрос.Параметры.Вставить("Дата2", Дата2);
Запрос.УстановитьПараметр("ТипыРабот", ТипыРабот);
Повторы = Запрос.Выполнить().Выбрать();
СписокЗаказов = Новый СписокЗначений;
Пока Повторы.Следующий() Цикл
СписокЗаказов.Добавить(Повторы.Заказ);
КонецЦикла;
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапросаПереизготовлений();
Запрос.Параметры.Вставить("Дата1", Дата1);
Запрос.Параметры.Вставить("Дата2", Дата2);
Запрос.УстановитьПараметр("ТипыРабот", ТипыРабот);
Запрос.УстановитьПараметр("СписокЗаказов", СписокЗаказов);
ТЗ = Запрос.Выполнить().Выбрать();
ТабДок.Очистить();
ОбластьЗаголовок.Параметры.Заголовок = "Переизготовления по листам выработки с " + Формат(Дата1, "ДФ=dd.MM.yyyy") + " по " + Формат(Дата2, "ДФ=dd.MM.yyyy");
ТабДок.Вывести(ОбластьЗаголовок);
ТабДок.Вывести(ОбластьШапкаЗаказ);
Для Каждого ТипРаботы Из ТипыРабот Цикл
ОбластьШапкаУчасток.Параметры.Участок = ТипРаботы;
ТабДок.Присоединить(ОбластьШапкаУчасток);
КонецЦикла;
Заказ0 = Документы.Заказ.ПустаяСсылка();
ТипРаботы0 = Справочники.ТипыРабот.ПустаяСсылка();
иТипРаботы = 0;
_Количество0 = 0;
_Сумма0 = 0;
ОбластьСтрокаУчасток.Параметры.Дата1 = "";
ОбластьСтрокаУчасток.Параметры.Дата2 = "";
Пока ТЗ.Следующий() Цикл
//ОбластьОтладка.Параметры.Отладка = Строка(ТЗ.Заказ) +" / "+ Строка(ТЗ.ТипРаботы) +" / "+ Строка(ТЗ.Дата) +" / "+ Строка(ТЗ.Оператор) +" / "+ Строка(ТЗ.ЛВ)+" / "+ Строка(ТЗ.Сумма);
//ТабДок.Вывести(ОбластьОтладка);
Если ТЗ.Заказ <> Заказ0 Тогда // Если перешли к другому заказу -
Если Заказ0 <> Документы.Заказ.ПустаяСсылка() Тогда
ТабДок.Присоединить(ОбластьСтрокаУчасток); // выводим тот участок, что заполняли
ОбластьСтрокаУчасток.Параметры.Количество = "";
ОбластьСтрокаУчасток.Параметры.Сумма = "";
ОбластьСтрокаУчасток.Параметры.Дата1 = "";
ОбластьСтрокаУчасток.Параметры.Оператор1 = "";
ОбластьСтрокаУчасток.Параметры.Дата2 = "";
ОбластьСтрокаУчасток.Параметры.ПП2 = "";
ОбластьСтрокаУчасток.Параметры.Оператор2 = "";
ОбластьСтрокаУчасток.Параметры.Дата3 = "";
ОбластьСтрокаУчасток.Параметры.ПП3 = "";
ОбластьСтрокаУчасток.Параметры.Оператор3 = "";
мКоличество[иТипРаботы] = мКоличество[иТипРаботы] + _Количество0;
мСумма[иТипРаботы] = мСумма[иТипРаботы] + _Сумма0;
иТипРаботы = иТипРаботы + 1;
Пока иТипРаботы < кТипыРабот Цикл // и все участки пустышки до конца
иТипРаботы = иТипРаботы + 1;
ТабДок.Присоединить(ОбластьСтрокаУчасток);
КонецЦикла;
КонецЕсли;
ОбластьСтрокаЗаказ.Параметры.Заказ = ТЗ.Заказ; // Новый заказ с новой строки
ТабДок.Вывести(ОбластьСтрокаЗаказ);
иТипРаботы = 0;
Пока ТипыРабот[иТипРаботы].Значение <> ТЗ.ТипРаботы Цикл // Пустые участки до нужного типа работы
иТипРаботы = иТипРаботы + 1;
ТабДок.Присоединить(ОбластьСтрокаУчасток);
КонецЦикла;
КонецЕсли;
Если ТЗ.ТипРаботы <> ТипРаботы0 И ТипРаботы0 <> Справочники.ТипыРабот.ПустаяСсылка() Тогда // Если поменялся ТипРаботы
Пока иТипРаботы < кТипыРабот И ТипыРабот[иТипРаботы].Значение <> ТЗ.ТипРаботы Цикл
мКоличество[иТипРаботы] = мКоличество[иТипРаботы] + _Количество0;
мСумма[иТипРаботы] = мСумма[иТипРаботы] + _Сумма0;
иТипРаботы = иТипРаботы + 1; // переходим к следующим
ТабДок.Присоединить(ОбластьСтрокаУчасток); // и выводим заполненную или пустые колонки
ОбластьСтрокаУчасток.Параметры.Количество = "";
ОбластьСтрокаУчасток.Параметры.Сумма = "";
ОбластьСтрокаУчасток.Параметры.Дата1 = "";
ОбластьСтрокаУчасток.Параметры.Оператор1 = "";
ОбластьСтрокаУчасток.Параметры.Дата2 = "";
ОбластьСтрокаУчасток.Параметры.ПП2 = "";
ОбластьСтрокаУчасток.Параметры.Оператор2 = "";
ОбластьСтрокаУчасток.Параметры.Дата3 = "";
ОбластьСтрокаУчасток.Параметры.ПП3 = "";
ОбластьСтрокаУчасток.Параметры.Оператор3 = "";
КонецЦикла;
КонецЕсли;
Если ТипыРабот[иТипРаботы].Значение = ТЗ.ТипРаботы Тогда
Если ОбластьСтрокаУчасток.Параметры.Дата1 = "" Тогда
ОбластьСтрокаУчасток.Параметры.Дата1 = ТЗ.Дата;
ОбластьСтрокаУчасток.Параметры.Оператор1 = ФамилияИ(ТЗ.Оператор);
ОбластьСтрокаУчасток.Параметры.ЛВ1 = ТЗ.ЛВ;
_Количество0 = 0;
_Сумма0 = 0;
ИначеЕсли ОбластьСтрокаУчасток.Параметры.Дата2 = "" Тогда
ОбластьСтрокаУчасток.Параметры.Дата2 = ТЗ.Дата;
ОбластьСтрокаУчасток.Параметры.ПП2 = ТЗ.ПП;
ОбластьСтрокаУчасток.Параметры.Оператор2 = ФамилияИ(ТЗ.Оператор);
ОбластьСтрокаУчасток.Параметры.ЛВ2 = ТЗ.ЛВ;
Если ?(ЕстьПричина,ЗначениеЗаполнено(ТЗ.ПП),Истина) Тогда
_Количество0 = 1;
_Сумма0 = ТЗ.Сумма;
КонецЕсли;
Иначе
ОбластьСтрокаУчасток.Параметры.Дата3 = ТЗ.Дата;
ОбластьСтрокаУчасток.Параметры.ПП3 = ТЗ.ПП;
ОбластьСтрокаУчасток.Параметры.Оператор3 = ФамилияИ(ТЗ.Оператор);
ОбластьСтрокаУчасток.Параметры.ЛВ3 = ТЗ.ЛВ;
Если ?(ЕстьПричина,ЗначениеЗаполнено(ТЗ.ПП),Истина) Тогда
_Количество0 = _Количество0 + 1;
_Сумма0 = _Сумма0 + ТЗ.Сумма;
КонецЕсли;
КонецЕсли;
ОбластьСтрокаУчасток.Параметры.Количество = _Количество0;
ОбластьСтрокаУчасток.Параметры.Сумма = _Сумма0;
//мКоличество[иТипРаботы] = мКоличество[иТипРаботы] + _Количество0;
//мСумма[иТипРаботы] = мСумма[иТипРаботы] + _Сумма0;
Иначе
иТипРаботы = (иТипРаботы + 1) % кТипыРабот;
КонецЕсли;
Заказ0 = ТЗ.Заказ;
ТипРаботы0 = ТЗ.ТипРаботы;
КонецЦикла;
ТабДок.Присоединить(ОбластьСтрокаУчасток);
мКоличество[иТипРаботы] = мКоличество[иТипРаботы] + _Количество0;
мСумма[иТипРаботы] = мСумма[иТипРаботы] + _Сумма0;
ТабДок.Вывести(ОбластьИтогоЗаказ);
Для иТипРаботы = 0 По кТипыРабот-1 Цикл
ОбластьИтогоУчасток.Параметры.Количество = мКоличество[иТипРаботы];
ОбластьИтогоУчасток.Параметры.Сумма = мСумма[иТипРаботы];
ТабДок.Присоединить(ОбластьИтогоУчасток);
КонецЦикла;
КонецПроцедуры
А как применить это "Ещё код". В упор не вижу
Сообщение отредактировал Vofka - 06.03.19, 9:09