Версия для печати темы (https://pro1c.org.ua/index.php?s=19a65e7597abe64c3a72e2d719c10281&showtopic=54574)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Объеденение полей запроса

Автор: TailorMade 10.10.19, 6:59

Здравствуйте. Я бы хотел в этом запросе объеденить поля, у которых есть IDРодителя и равно ID другого задания. Это вообще возможно сделать? А то я пробовал и не получалось

ВЫБРАТЬ
    МИНИМУМ(ЗаказПокупателяРасшифровка.НомерСтроки) КАК НомерСтрокиТЧ,
    ЗаказПокупателяРасшифровка.Задание,
    СУММА(ЗаказПокупателяРасшифровка.ID) КАК ID,
    СУММА(ЗаказПокупателяРасшифровка.IDРодителя) КАК IDРодителя,
    СУММА(ЗаказПокупателяРасшифровка.Цена) КАК Цена,
    ЗаказПокупателяРасшифровка.Исполнитель,
    СУММА(ЗаказПокупателяРасшифровка.КоличествоЧасов) КАК КоличествоЧасов
ИЗ
    Документ.ЗаказПокупателя.Расшифровка КАК ЗаказПокупателяРасшифровка
ГДЕ
    ЗаказПокупателяРасшифровка.Ссылка = &ТекущийДокумент

СГРУППИРОВАТЬ ПО
    ЗаказПокупателяРасшифровка.Исполнитель,
    ЗаказПокупателяРасшифровка.Задание

УПОРЯДОЧИТЬ ПО
    НомерСтрокиТЧ

Автор: demon14 10.10.19, 7:57

TailorMade @ Сегодня, 7:59 * ,
...
Документ.ЗаказПокупателя.Расшифровка КАК ЗаказПокупателяРасшифровка
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПокупателя.Расшифровка КАК ЗаказПокупателяРасшифровка2
ПО ЗаказПокупателяРасшифровка.ID = ЗаказПокупателяРасшифровка2.IDРодителя
...

ID если это все же УИД, необходимо хранить как строку.

Автор: TailorMade 10.10.19, 8:04

demon14 @ Сегодня, 8:57 * ,
то есть надо два запроса сделать? А то я не очень понял, как сделать

Автор: Макс1С 10.10.19, 8:45

TailorMade @ Сегодня, 9:04 * ,
Уточню, вы хотите получить дерево задач с подзадачами? Количество уровней подзадач чем-то ограничено или нет(у подзадач будут свои подзадачи)?

Автор: fly 10.10.19, 14:29

Цитата(TailorMade @ 10.10.19, 7:59) *
Это вообще возможно сделать?


Да

Если задавать вопрос как можно сделать
Берете поля которые сгруппировать нужно
и ставите отборы на IDРодителя - в зависимости от типа вашего реквизита ТЧ может "Неопределено" или "0" или что другое

Цитата(TailorMade @ 10.10.19, 7:59) *
ID другого задания


Для этого берете выборку по всем Другим заданиям и проверяете есть ли данный ID в этой выборке.


ВЫБРАТЬ
   
    ЗаказПокупателяРасшифровка.Задание,
    ЗаказПокупателяРасшифровка.Исполнитель
 ИЗ
    Документ.ЗаказПокупателя.Расшифровка КАК ЗаказПокупателяРасшифровка
ГДЕ
    ЗаказПокупателяРасшифровка.Ссылка = &ТекущийДокумент
        И
           НЕ ЗаказПокупателяРасшифровка.IDРодителя  = Неопределено
                И ЗаказПокупателяРасшифровка.ID В
            (ВЫБРАТЬ
                ЗаказПокупателя.Ссылка
            ИЗ
                Документ.ЗаказПокупателя КАК ЗаказПокупателя
            СГРУППИРОВАТЬ ПО
                ЗаказПокупателя.Ссылка)

//условие выборки по
// ID другого задания

СГРУППИРОВАТЬ ПО
    ЗаказПокупателяРасшифровка.Исполнитель,
    ЗаказПокупателяРасшифровка.Задание

Автор: Vladal 10.10.19, 16:58

Вложенные запросы с выборками затрудняют отладку. Я бы сделал так:


ВЫБРАТЬ РАЗРЕШЕННЫЕ
    ЗаказПокупателя.Ссылка
ПОМЕСТИТЬ втЗаказыПокупателя
ИЗ
    Документ.ЗаказПокупателя КАК ЗаказПокупателя
СГРУППИРОВАТЬ ПО
    ЗаказПокупателя.Ссылка
;


fly @ Сегодня, 15:29 * ,
Непонятна логика вот этого условия:

НЕ ЗаказПокупателяРасшифровка.IDРодителя  = Неопределено
                И ЗаказПокупателяРасшифровка.ID В
            (ВЫБРАТЬ
                ЗаказПокупателя.Ссылка
            ИЗ
                Документ.ЗаказПокупателя КАК ЗаказПокупателя
            СГРУППИРОВАТЬ ПО
                ЗаказПокупателя.Ссылка)


1. Не ... = ...
не равно. Это ужас. Используйте оператор "<>". Повесьте автозамену на БЮ, если трудно переключаться между раскладками. Пофигуратор 1С 8 позволяет это сделать Шаблонами.

2. Сравнение IDРодителя <> Неопределено даст Истину для NULL, например. Неопределено будет когда это поле составного типа, а в оригинале автора оно суммируется, делаю вывод, что числовое.

3. Это условие с выборкой не имеет смысла - в самом подзапросе нет никаких ограничений и выдаст всю выборку.
Надо хотя бы задать условие, что Заказ не помечен на удаление:
ГДЕ
    НЕ ЗаказПокупателя.ПометкаУдаления


...

TailorMade @ Сегодня, 7:59 * ,
Напишите, что за поля ID и IDРодителя, какого они типа?
Это ссылка на иерархический справочник, либо ссылка на документ (головной - "родитель", подчиненный).

Правильно ли я понимаю, что условие должно выглядеть примерно так:

Если в строке ТЧ заполнено поле IDРодителя, тогда:
- Найти другие заказы покупателя по исполнителю с таким ID.
- Полученные результаты сгруппировать по Исполнителю и Заданию.

Автор: fly 10.10.19, 17:09

Цитата(Vladal @ 10.10.19, 17:58) *
1. Не ... = ...
не равно. Это ужас.


на что влияет?
В стандартных конфигурациях используется повсеместно:

Если Не..... = Неопределено Тогда
КонецЕсли;


пока не встречал статей по оптимизации языка запросов, что рекомендуют, что нет в использовании.

Код - для быстроты написан, для примера, что его можно реализовать.
По ходу не вдавался в детали конкретной конфигурации.

Автор: Vladal 10.10.19, 17:43

fly @ Сегодня, 18:09 * ,
Если так - да. Быстрый пример. Но и он содержит ошибки.

В типовых есть (было)

Для ПП=1 По 10000 Цикл
КонецЦикла;


Цитата(fly @ 10.10.19, 18:09) *
на что влияет?

Читабельность и понимание логики.
Я видел шедевры (и одно время работал с их генератором) вроде этого:
Если Не ЗначениеФлажка = Ложь Тогда


Обычная беззлобная критика ради повышения качества кода.

Автор: Макс1С 15.10.19, 15:47

ТС ушёл куда-то, видимо.
Я вижу решение такой задачи в динамическом формировании текста запроса с левыми соединениями по IDродителей. В цикле по возможному количеству вложенностей подзадач.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua