Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Обработка: сортировка по датам перекрестном запросе          
Constantus Подменю пользователя
сообщение 06.03.19, 9:30
Сообщение #1

Ветеран
*******
Группа: Пользователи
Сообщений: 962
Спасибо сказали: 8 раз
Рейтинг: 0

Приветствую, форумчане!
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

Володька Подменю пользователя
сообщение 06.03.19, 10:44
Сообщение #2

Завсегдатай
****
Группа: Пользователи
Сообщений: 166
Спасибо сказали: 8 раз
Рейтинг: 0

Constantus @ Сегодня, 10:30 * ,
Если это не СКД, то все сортировки и группировки нужно, я так считаю, выполнять в запросах. Сам чаще всего просто формирую результирующую таблицу, а потом уже с ней делаю, что угодно в Вашем случае было бы .Сортировать("Дата1 УБЫВ") и всё.
Смотрите запросы ТекстЗапросаПереизготовлений(); ТекстЗапросаПовторов(); если там у Вас происходит сортировка, то дело в выводе.

Constantus Подменю пользователя
сообщение 06.03.19, 15:55
Сообщение #3

Ветеран
*******
Группа: Пользователи
Сообщений: 962
Спасибо сказали: 8 раз
Рейтинг: 0

Пошел по другой линии. Формировал отчет в ТЧ, далее пользователь сам сортирует по нужной колонке и нажимает на печать

У меня вопрос:

Как в ТЧ сделать "двойной заголовок", т.е. над несколькими полями в заголовке возвышается большой заголовок

|||||||||||||||||||||||| большой заголовок |||||||||||||||||||||||||||||
| Поле01 | | Поле01 | Поле01 | Поле01 | Поле01 | Поле01 | Поле01 |

Я попробовал, понасоздавал группировки, в итоге заголовок стал двухяросным, но и сама ТЧ стала двухярусной с пустой строкой сверху...



Ну типа, есть часы, минуты отработанного времени, а заголовок содержал:

Отработано
Часы | минуты

3 | 45
3 | 40
0 | 45


У меня сейчас получилось:

Отработано
Часы | минуты

0 |
3 | 45

0 |
3 | 40
0 |
0 | 45

Bernet Подменю пользователя
сообщение 06.03.19, 16:08
Сообщение #4

Ветеран
Иконка группы
Группа: Местный
Сообщений: 858
Из: Місто щасливих людей
Спасибо сказали: 317 раз
Рейтинг: 0

Constantus @ Сегодня, 15:55 * ,
Правой кнопкой мыши по элементам формы (в левой части окна) и "Добавить группу колонок". Делаете её горизонтальной, перетаскиваете туда две ваших колонки и все. Проверьте чтобы стояла галочка "Отображать в шапке". В итоге в шапке получите объединенные колонки, а в строках будет обычная строка.


Signature
Дописываю конфигурации на платформе 8.х.
- Управление торговым предприятием для Украины
- Управление производственным предприятием для Украины
- Управление небольшой фирмой для Украины
- Бухгалтерия для Украины;
- Общепит для Украины
- Ресторан (Рарус)
- Розница

Спасибо сказали: Constantus,

Constantus Подменю пользователя
сообщение 06.03.19, 16:20
Сообщение #5

Ветеран
*******
Группа: Пользователи
Сообщений: 962
Спасибо сказали: 8 раз
Рейтинг: 0

Шайтан!!!

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 29.03.24, 6:40
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!