|
Выборка по табличной части документа единожды | ☑ | ||
---|---|---|---|---|
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) Сумлеваюсь.) Ты исходишь из того, что он делает. Но не учитываешь, что цель задачи могут быть совсем другие и никак не связаны с его манипуляциями. Он до сих не смог ответить каковы условия задачи и исходные данные. Вот проснётся ТС и процесс продолжится..Запасайся попкорном.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |