Имя: Пароль:
1C
 
Выборка по табличной части документа единожды
0 NIGHTHUNTER
 
22.06.22
09:28
Необходимо делать выборку по табличной части и проверять дату, то есть в запрос могут попасть несколько строк документа.
Но потом обрабатывать нужно документ один раз. например, выбрано 6 строк, а в обработке одна. Не пойму и не представлю, как так можно представить запрос.
Есть мысли это обрабатывать потом уже в цикле.
А как сделать если в запросе7
Что бы в выборке если была. только одна строка по документу всегда. Вне зависимости от того, сколько по нему отобрано строк.
Пока запрос вот такой.


    //
    Запрос         = Новый Запрос;
    Запрос.Текст   = "
        |ВЫБРАТЬ
        |    ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.Ссылка                                          КАК Ссылка,
        |    ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.Ссылка.Номер                                  КАК Номер,
        |    ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.Ссылка.Дата                                  КАК Дата,
        |    ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.Ссылка.Менеджер                              КАК Менеджер,
        |    ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.ДатаПоступления                              КАК ДатаПоступления,
        |    ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.Сертификат                                      КАК Сертификат,
        |    ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.ПаспортИзделия                                  КАК ПаспортИзделия,
        |    РАЗНОСТЬДАТ(ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.ДатаПоступления, &ТекДата, ДЕНЬ) КАК РазностьДат
        |ИЗ
        |    Документ.ХХХ_ПредварительныйЗаказПоставщику.ОтметкиСклада КАК ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада
        |ГДЕ
        |    ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.Сертификат = ЛОЖЬ
        |    И ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.ПаспортИзделия = ЛОЖЬ
        |    И ДОБАВИТЬКДАТЕ(ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.ДатаПоступления, ДЕНЬ, 2) < &ТекДата
        |    И ХХХ_ПредварительныйЗаказПоставщикуОтметкиСклада.ДатаПоступления >= &ДатаНачала
        |
        |УПОРЯДОЧИТЬ ПО
        |    РазностьДат";                                                                            
    Запрос.УстановитьПараметр("ТекДата",    ТекущаяДата());
    Запрос.УстановитьПараметр("ДатаНачала", Дата("20220618"));
    Рез = Запрос.Выполнить();
    Если Не Рез.Пустой() Тогда
        Выборка = Рез.Выбрать();
        Пока Выборка.Следующий() Цикл
            //
1 vde69
 
22.06.22
09:32
группировать по ссылке и двойной цикл, сначала по ссылке, потом по детальным запясям
2 Мимохожий Однако
 
22.06.22
09:35
Опиши структуру документа и табличной части. Хотя бы те реквизиты, которые надо вывести или сравнить
3 NIGHTHUNTER
 
22.06.22
09:45
(2) Наверное какой то универсальный должен быть алгоритм.
Открыл сейчас документ, там больше 30 реквизитов документа, и примерно столько же у той табличной части что нужна.

Что нужно есть все в (0), вроде как.
4 NIGHTHUNTER
 
22.06.22
09:49
(1) То есть в запрос (0) нужно добавить группировки ?
5 NIGHTHUNTER
 
22.06.22
09:51
(1) Там и выборка будет по группировкам да?
То есть, делать все в первом цикле, когда идет документ.
Как то не представляю все это, нужно тестировать.
6 Kigo_Kigo
 
22.06.22
09:53
Рез = Запрос.Выполнить().Выгрузить();
И мотай эту ТЗ сколько влезет
7 NIGHTHUNTER
 
22.06.22
10:09
(8) Как отать?
Я думал делать группировки, и потом отбирать по группировкам и тд. не представляю пока потому что не сделал и нет тестовых данных.

Сейчас как появится тестовые данные буду думать.

(То есть, обработал один документ по ссылке, если идет опять ссылка с ним же, то пропускать, таким всмысле алгоритмом?
8 Мимохожий Однако
 
22.06.22
10:11
(3) Не отмазывайся. Опиши структуру.
9 yopQua
 
22.06.22
10:12
ничего не понял, но очень интересно. что нужно?
10 Мимохожий Однако
 
22.06.22
10:13
(9) Это большой секрет. ТС любит выкладывать результат и проблемы, но без исходной задачи и размышлений. Всё на ходу
11 NIGHTHUNTER
 
22.06.22
10:15
(9) В запросе (0) Выбирается например 7 строк из первого документа, потом 5 из второго, и 1 из третьего.
Всего в выборке 13 строк.
А нужно что бы было 3. Так как три документа.
Я вот и думаю как это делать, в переборе, учитывать только документ один раз, идли как то группировками и обходом по группировкам?
12 yopQua
 
22.06.22
10:15
(10) кружжжите меня, кружжжите, аах!
13 VladZ
 
22.06.22
10:20
Тоже не понял, о чем речь.

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

Но сразу замечу: наличие "диких" алгоритмов - это показатель "кривости" архитектуры.
14 Мимохожий Однако
 
22.06.22
10:20
(11) Выбирай в запросе не документ, а его табличную часть.
15 yopQua
 
22.06.22
10:22
(11) группировать. группировка возможна для строк с одинаковыми значениями всех полей, либо применением агрегатных функций к полям с различными значениями Сумма, Минимум, Максимум и т д
16 yopQua
 
22.06.22
10:24
а если
Тазик Желтый 10
Тазик Синий  20
то каким образом такие строки можно сгруппировать? правильно, адекватно никаким
17 NIGHTHUNTER
 
22.06.22
10:24
Например, сейчас у меня выборка 8 строк, по одному документу 1 строка. по второму 2, по третьему 4, по четвертому 1 .
то есть перебор 8 строк. а нужно перебрать только 4. обработать 4 документа в выборке, не учитывая сколько там у него строк.
18 NIGHTHUNTER
 
22.06.22
10:25
(16) Цвета 2, цветом
19 yopQua
 
22.06.22
10:25
(18) что цветом
20 Мимохожий Однако
 
22.06.22
10:26
(17) Скинь сюда результат запроса и объясни, что ты хочешь.
21 NIGHTHUNTER
 
22.06.22
10:27
В выборке есть номер документа, отрабатывать алгоритм если только меняется номер .

(20) http://joxi.ru/4AkXZOaHjE39Gr
22 yopQua
 
22.06.22
10:29
Если
Таз 10
Таз 20
то сгруппировать
Выбрать Таз, Сумма(Количество) Как Сумма
Сгруппировать По Таз

результатом запроса будет одна строка
Таз 30

А если есть колонки с разными нечисловыми значениями, к которым агрегатные функции применять не имеет смысла, то сгруппировать не получится
23 Мимохожий Однако
 
22.06.22
10:29
(21) Вместо картинки напиши словами, что нужно сделать с результатом запроса.
24 NIGHTHUNTER
 
22.06.22
11:07
(23) Примерно это, -

    //
    НомерПредыдущегоДокумента = Неопределено;
    Если Не Рез.Пустой() Тогда
        Выборка = Рез.Выбрать();
        Пока Выборка.Следующий() Цикл
            //
            Если НомерПредыдущегоДокумента = Неопределено ИЛИ Не Выборка.Номер = НомерПредыдущегоДокумента Тогда
                Сообщить("Отправляется " + Выборка.Номер);
                НомерПредыдущегоДокумента = Выборка.Номер;
            КонецЕсли;
        КонецЦикла;        


А заместо сообщить, алгоритм регламентного задания, это я его тестирую.
25 Мимохожий Однако
 
22.06.22
11:33
(24) Ты пишешь, что делаешь. А я хочу увидеть, что тебе надо получить в результате. Каковы условия задачи?
26 Мультук
 
гуру
22.06.22
12:11
(25)

Имхо он попал в "классическую проблему", когда отбор нужно сделать по таб.части, но фактически нужны только сами документы и реквизиты шапки
27 Мимохожий Однако
 
22.06.22
13:26
(26) Сумлеваюсь.) Ты исходишь из того, что он делает. Но не учитываешь, что цель задачи могут быть совсем другие и никак не связаны с его манипуляциями. Он до сих не смог ответить каковы условия задачи и исходные данные. Вот проснётся ТС и процесс продолжится..Запасайся попкорном.