|
Можно ли сделать в запросе | ☑ | ||
---|---|---|---|---|
0
ic-kat
28.05.12
✎
19:02
|
есть документ Погрузка, есть регистр сведений состояние погрузки, в нем отражается состояние и время состояния - загружено, отменено и пр.
выбрать запросом все состояния по каждому документу - не проблема, но нужно выбрать только те, у которых время начала погрузки (это одно из состояний) попадало в заданный период. не могу сообразить, как... |
|||
1
SnarkHunter
28.05.12
✎
19:03
|
Сравнивать не умеешь?
|
|||
2
ic-kat
28.05.12
✎
19:04
|
что с чем?
|
|||
3
1C-band
28.05.12
✎
19:05
|
(0) Условием.
|
|||
4
ic-kat
28.05.12
✎
19:08
|
может где-то вас не понимаю, но, если ставить условия период состояния в заданном интервале, то не весь цикл погрузки может вывестись. т.е. если конец погрузки не попадает в интервал, нам запись все равно нужна, но условием будет резаться
|
|||
5
Мимохожий Однако
28.05.12
✎
19:09
|
Показывай код, не стесняйся.
|
|||
6
Fragster
гуру
28.05.12
✎
19:12
|
МаксимальнаяДатаЦепочки >= &НачалоПериода И МинимальнаяДатаЦепочки <= &КонецПериода , не?
|
|||
7
Deniskind
28.05.12
✎
19:12
|
Первым запросом выбирайте из регистра сведений только поле погрузки, попавшие в условие по времени. Без повторяющихся. А во втором - все записи регистра, соединенными с первым запросом по погрузкам.
|
|||
8
Fragster
гуру
28.05.12
✎
19:13
|
(5) лучше личико
|
|||
9
ic-kat
28.05.12
✎
19:18
|
в общем нужно получить вот такое
машина 1 начало погрузки 13:00 остановка погрузки 15:00 продолжение погрузки 18:15 завершение погрузки 19:00 условие: должны попадать те, у которых начало попадает в интервал, например 12:00 до 18:00 делаю: | ЗагрузкаМашины.Ссылка КАК Ссылка, | ЗагрузкаМашины.Машина КАК Машина, | СобытияЗагрузки.Событие, | СобытияЗагрузки.Период КАК Период |ИЗ | РегистрСведений.СобытияЗагрузкиКАК СобытияЗагрузки | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗагрузкаМашиныКАК ЗагрузкаМашины | ПО СобытияЗагрузки.ЗаданиеСкладу = ЗагрузкаМашины.Ссылка |ГДЕ | И СобытияЗагрузки.Событие <> &Событие | И СобытияЗагрузки.Период МЕЖДУ &ДатаН И &ДатаК | |УПОРЯДОЧИТЬ ПО | ЗагрузкаМашины.Дата, | ЗагрузкаМашины.Машина, | Период |ИТОГИ ПО | Ссылка"; отрезаются все события, не попавшие в период |
|||
10
ic-kat
28.05.12
✎
19:21
|
(6) нужно всю цепочку, у которой начало в интервале
|
|||
11
ic-kat
28.05.12
✎
19:22
|
(7) щас попробую сообразить, как это
|
|||
12
Deniskind
28.05.12
✎
19:28
|
(11) Вот так, примерно:
ВЫБРАТЬ СобытияЗагрузки.ЗагрузкаМашины, СобытияЗагрузки.Событие, СобытияЗагрузки.Период ИЗ РегистрСведений.СобытияЗагрузки КАК СобытияЗагрузки ГДЕ СобытияЗагрузки.ЗагрузкаМашины В (ВЫБРАТЬ СобытияЗагрузки.ЗагрузкаМашины ИЗ РегистрСведений.СобытияЗагрузки КАК СобытияЗагрузки ГДЕ СобытияЗагрузки.Период МЕЖДУ &ДатаНачала И &ДатаОкончания) |
|||
13
ic-kat
28.05.12
✎
20:24
|
(12) отвлекли. это же только часть? соображаю, что получится
|
|||
14
ic-kat
28.05.12
✎
20:25
|
и теперь с этим слеплять второй, да?
|
|||
15
Deniskind
28.05.12
✎
20:26
|
(14) Нет, это как бы 2 уже :)
Там, еще слова РАЗЛИЧНЫЕ не хватает, после 2-го выбрать |
|||
16
ic-kat
28.05.12
✎
20:31
|
тогда не поняла, вложенный выбирает все записи из РС с датой из интервала, ну пусть, все различные
ага, а потом выбираются все записи по каждому из документов, у которых есть выбранная запись. наверное путанно написала. вроде поняла, щас свой подокручиваю |
|||
17
Азазелло
28.05.12
✎
20:35
|
ВЫБРАТЬ
СобытияЗагрузки.ЗагрузкаМашины, СобытияЗагрузки1.Событие, СобытияЗагрузки1.Период ИЗ Документ.ЗагрузкаМашиныКАК ЗагрузкаМашины ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СобытияЗагрузки КАК СобытияЗагрузки ПО СобытияЗагрузки.ЗагрузкаМашины = ЗагрузкаМашины.Ссылка И СобытияЗагрузки.Событие = &СобытиеНачалаОтгрузки И СобытияЗагрузки.Период МЕЖДУ &НачалоСобытия И &КонецСобытия ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СобытияЗагрузки КАК СобытияЗагрузки1 ПО СобытияЗагрузки1.ЗагрузкаМашины = ЗагрузкаМашины.Ссылка И СобытияЗагрузки1.Период > СобытияЗагрузки.Период |
|||
18
Азазелло
28.05.12
✎
20:37
|
(17) + нужные упорядочивания/группировки
|
|||
19
Азазелло
28.05.12
✎
20:38
|
(17) условие на период в последнем джойне >= должно быть, а не >
|
|||
20
ic-kat
28.05.12
✎
22:42
|
(12) спасибо, почти так сделала, получилось
(17) тоже завтра со свежей головой попробую. всем спасибо) |
|||
21
Ненавижу 1С
гуру
28.05.12
✎
22:49
|
а фото?
|
|||
22
ic-kat
28.05.12
✎
22:54
|
хм, оба работают, но если выбирать по группировкам, то почему-то разные по количеству результаты выдают...
|
|||
23
Азазелло
28.05.12
✎
22:56
|
(22) ну тогда надо смотреть на обходы группировок
|
|||
24
ic-kat
28.05.12
✎
22:57
|
(21)что-то у вас оно не слишком информативное)
|
|||
25
Азазелло
28.05.12
✎
22:59
|
(24) пол не тот :)
|
|||
26
ic-kat
28.05.12
✎
23:01
|
отмазка)
|
|||
27
Азазелло
28.05.12
✎
23:03
|
это в (24) отмазка :) лучшая защита - нападение? :)
|
|||
28
ic-kat
28.05.12
✎
23:07
|
(27) ну, тип того.
завтра сдам отчет если - подумаю над фото |
|||
29
Fragster
гуру
29.05.12
✎
11:35
|
(28) как там? народ волнуется...
|
|||
30
ic-kat
29.05.12
✎
19:42
|
там не фонтан ((
идея нужна есть еще некий регистр, в котором фиксируются грузы, которые по времени загружаются в машину. их тоже нужно вывести, но если прикручивать через левое соединение, то получается, что каждому из состояний ставится каждый загруженный груз. в итоге выборка раздувается, т.е. для (9) и списка записей хода погрузки 15:10 груз1 15:18 груз2 14:40 груз3 16:20 груз4 17:21 груз5 18:01 груз6 получается: машина 1 начало погрузки 13:00 15:10 груз1 начало погрузки 13:00 15:18 груз2 начало погрузки 13:00 14:40 груз3 начало погрузки 13:00 16:20 груз4 начало погрузки 13:00 17:21 груз5 машина 1 остановка погрузки 15:00 15:10 груз1 остановка погрузки 15:00 15:18 груз2 остановка погрузки 15:00 14:40 груз3 остановка погрузки 15:00 16:20 груз4 остановка погрузки 15:00 17:21 груз5 машина 1 продолжение погрузки 18:15 15:10 груз1 продолжение погрузки 18:15 15:18 груз2 продолжение погрузки 18:15 14:40 груз3 продолжение погрузки 18:15 16:20 груз4 продолжение погрузки 18:15 17:21 груз5 машина 1 завершение погрузки 19:00 15:10 груз1 завершение погрузки 19:00 15:18 груз2 завершение погрузки 19:00 14:40 груз3 завершение погрузки 19:00 16:20 груз4 завершение погрузки 19:00 17:21 груз5 ее бы как-нибудь не так раздуть, как - нибудь вот так хотя бы машина 1 начало погрузки 13:00 15:10 груз1 остановка погрузки 15:00 15:18 груз2 продолжение погрузки 18:15 14:40 груз3 завершение погрузки 19:00 16:20 груз4 17:21 груз5 |
|||
31
Азазелло
29.05.12
✎
21:02
|
(30) о как... тут уже левым соединением не отделаться...
в первом запросе получать события загрузки, нумеровать строки результата в пределах документа погрузки, помещать во времТабл1 затем, вторым запросом получать грузы, тоже нумеровать строки результата в пределах погрузки, помещать во времТабл2 а затем делать полное соединение полученных времТабл1 и времТабл2 по условию равенства документов погрузки и номеров строк |
|||
32
ic-kat
29.05.12
✎
21:07
|
ой, намудрила я сегодня с таблицами, как раз с полным соединением. но там как-то не кузяво вышло,
почти то же самое, только нагромождено. вот думаю, стоит ли с запросом париться, или вывести как есть в тз, а там перебором... |
|||
33
Азазелло
29.05.12
✎
21:14
|
(32) а здесь уже многое от постановки задачи зависит. Если требуют одним запросом - значит надо делать запросом. Если нет жестких требований - тогда лучше воспользоваться теми средствами, которыми владеете на данный момент. Наберетесь опыта - всегда можно будет вернуться и переделать. Как красивее и правильнее.
|
|||
34
ic-kat
29.05.12
✎
21:16
|
ага, если бы еще потом 30 програмеров не тыкали в мой код и не ржали )
|
|||
35
Азазелло
29.05.12
✎
21:17
|
(32) на мое скромное имхо, отдельными запросами выгрузить в тз1 и тз2 результаты запросов на состояния погрузок и грузы, добавить колонку с номером, пронумеровать, дальше засунуть в третий запрос, в котором уже и сделать полное объединение.
|
|||
36
ic-kat
29.05.12
✎
21:17
|
одним не требуют, надо чтоб работало. насколько медленнее тз перебирает? сильно критично?
|
|||
37
Азазелло
29.05.12
✎
21:18
|
(34) здоровая критика - это хорошо. ну и пусть ржут, это они на вас возмещают то, что над ними тоже когда-то ржали. программерами не рождаются :)
|
|||
38
Азазелло
29.05.12
✎
21:19
|
(36) есть случаи, когда специально уходят от одного запроса в сторону обхода ТЗ. Запрос запросу рознь. Главное, запросов в цикле не делать.
|
|||
39
ic-kat
29.05.12
✎
21:29
|
(35)в смысле не в одном запросе даже это делать?
|
|||
40
Азазелло
29.05.12
✎
21:38
|
(39) ну, получается, тремя. первые два собирают базовые наборы данных, третий - их объединяет
|
|||
41
Deniskind
29.05.12
✎
22:24
|
(30) Тут какая-то неясность иметься:
машина 1 начало погрузки 13:00 15:10 груз1 остановка погрузки 15:00 15:18 груз2 продолжение погрузки 18:15 14:40 груз3 завершение погрузки 19:00 16:20 груз4 17:21 груз5 Если, допустим, началу погрузки еще как-то можно поставить в соответствие какой-то груз, то в остановку погрузки ставить груз - это странная логика. Было бы неплохо, если бы вы структуру своих данных полностью описали. Скорее всего вам потребуется определять интервалы погрузок (Начало - остановка) и для этого интервала указывать грузы, которые были загружены. Т.е. Машина 1 Интервал 13:00 - 15:00 Груз1 15:10 Груз2 15:18 Интервал 18:15 - 19:00 Груз3 14:40 Груз4 16:20 Груз5 17:21 Если так, то надо, конечно, подумать будет, как такое реализовать. Скорее всего, проще уже будет временные таблицы использовать. |
|||
42
ic-kat
31.05.12
✎
08:13
|
(41)
надо было как-то вот так в идеале: машина 1 начало погрузки 13:00 остановка погрузки 15:00 сумма грузов, попавших в этот интервал продолжение погрузки 18:15 завершение погрузки 19:00 сумма грузов, попавших в этот интервал сделала цикл в цикле, на пока |
|||
43
Deniskind
31.05.12
✎
08:40
|
(42) Так вы структуру данных опишите подробнее. Обещаю подумать над запросом :)
|
|||
44
Deniskind
31.05.12
✎
08:47
|
Документ.ЗагрузкаМашины
Машина РегистрСведений.СобытияЗагрузки Событие Период ЗаданиеСкладу = Документ.ЗагрузкаМашины НекийРегистрВКоторомФиксируютсяГрузы Груз Период ЧтоТоЕщеДолжноБыть |
|||
45
ic-kat
31.05.12
✎
12:34
|
да, есть еще один док, который связан с погрузкой через регистр,
и у этого дока есть как раз записи в регистр ХодПогрузки структура такая: http://yulochka.narod.ru/1.jpg |
|||
46
Азазелло
31.05.12
✎
13:40
|
(45) как мне кажется, здесь уже запросом решать нецелесообразно. проще и нагляднее обходами тз. по идее, все просто должно быть. как делала, что не получилось?
|
|||
47
ic-kat
31.05.12
✎
13:44
|
так получилось цикл в цикле.
считала всегда, что цикл в цикле и запрос в цикле - не айс. дело еще в том, что по этому отчету нужно диаграмму ввыводить. типа ганта. но не ганта, потому что по требованиям нужно, чтобы к каждому интервалу текст выводился, причем и снизу и сверху. у ганта такой возможности нет. придется ее в макете рисовать, а там тоже в цикле добавлять области, уже получается тройная вложенность цикла. |
|||
48
Азазелло
31.05.12
✎
15:16
|
(47) если не хочешь цикл-в цикле-в цикле, собирай данные поэтапно
а) собери таблицу Погрузка1 НачалоПогрузки1 ОкончаниеПогрузки1 Погрузка1 НачалоПогрузки2 ОкончаниеПогрузки2 Погрузка1 НачалоПогрузки3 ОкончаниеПогрузки3 б) по таблице в А пробегись циклом и дополни ее данными по суммам грузов, т.е. чтобы на выходе получилось Погрузка1 НачалоПогрузки1 ОкончаниеПогрузки1 СуммаГрузов1 Погрузка1 НачалоПогрузки2 ОкончаниеПогрузки2 СуммаГрузов2 Погрузка1 НачалоПогрузки3 ОкончаниеПогрузки3 СуммаГрузов3 в) в одни проход пробегись по Б и выведи в макет |
|||
49
ic-kat
31.05.12
✎
19:28
|
мне нужно и диаграмму, для которой как раз в два столбца удобно, и отчет,
а вот в него нужно выводить все в 1 столбик - тз такое |
|||
50
Deniskind
31.05.12
✎
21:47
|
В общем вот такой ваш запрос получился:
ВЫБРАТЬ СобытияПогрузкиНачало.ЗагрузкаМашины, СобытияПогрузкиНачало.Период КАК НачалоПериода, МИНИМУМ(СобытияПогрузкиОкончание.Период) КАК ОкончаниеПериода ПОМЕСТИТЬ ИнтервалыЗагрузок ИЗ РегистрСведений.СобытияПогрузки КАК СобытияПогрузкиНачало ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СобытияПогрузки КАК СобытияПогрузкиОкончание ПО (СобытияПогрузкиОкончание.Период > СобытияПогрузкиНачало.Период) ГДЕ (СобытияПогрузкиНачало.СобытиеЗагрузки = ЗНАЧЕНИЕ(Перечисление.СобытияЗагрузки.НачалоЗагрузки) ИЛИ СобытияПогрузкиНачало.СобытиеЗагрузки = ЗНАЧЕНИЕ(Перечисление.СобытияЗагрузки.ПродолжениеЗагрузки)) И СобытияПогрузкиНачало.Период МЕЖДУ &ДатаНачала И &ДатаОкончания И (СобытияПогрузкиОкончание.СобытиеЗагрузки = ЗНАЧЕНИЕ(Перечисление.СобытияЗагрузки.ОстановкаЗагрузки) ИЛИ СобытияПогрузкиОкончание.СобытиеЗагрузки = ЗНАЧЕНИЕ(Перечисление.СобытияЗагрузки.ЗавершениеЗагрузки)) СГРУППИРОВАТЬ ПО СобытияПогрузкиНачало.ЗагрузкаМашины, СобытияПогрузкиНачало.Период ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ИнтервалыЗагрузок.ЗагрузкаМашины.Машина, ИнтервалыЗагрузок.НачалоПериода, ИнтервалыЗагрузок.ОкончаниеПериода, СУММА(ХодПогрузки.Сумма) КАК Сумма, ХодПогрузки.Номенклатура КАК Номенклатура, ХодПогрузки.Период КАК ВремяЗагрузки ИЗ РегистрСведений.ХодПогрузки КАК ХодПогрузки ВНУТРЕННЕЕ СОЕДИНЕНИЕ ИнтервалыЗагрузок КАК ИнтервалыЗагрузок ПО ХодПогрузки.Период >= ИнтервалыЗагрузок.НачалоПериода И ХодПогрузки.Период <= ИнтервалыЗагрузок.ОкончаниеПериода ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗагруженныеМашины КАК ЗагруженныеМашины ПО ХодПогрузки.ЗагрузкаМашиныМаршрут = ЗагруженныеМашины.ЗагрузкаМашиныМаршрут И (ИнтервалыЗагрузок.ЗагрузкаМашины = ЗагруженныеМашины.ЗагрузкаМашины) СГРУППИРОВАТЬ ПО ИнтервалыЗагрузок.ЗагрузкаМашины.Машина, ИнтервалыЗагрузок.НачалоПериода, ИнтервалыЗагрузок.ОкончаниеПериода, ХодПогрузки.Номенклатура, ХодПогрузки.Период Вариант отчета больше похож на предложенный мной. Пример конфигурации с тестовыми данными тут http://clck.ru/d/DQx2asVL19kz7 Готов ответить на вопросы :) |
|||
51
Deniskind
31.05.12
✎
21:48
|
(50) Ссылка не получилась. Вот http://clck.ru/d/DQx2asVL19kz7
|
|||
52
Deniskind
31.05.12
✎
21:51
|
Да, во втором запросе группировка лишней будет. Вот так, лучше:
ВЫБРАТЬ ИнтервалыЗагрузок.ЗагрузкаМашины.Машина, ИнтервалыЗагрузок.НачалоПериода, ИнтервалыЗагрузок.ОкончаниеПериода, ХодПогрузки.Сумма КАК Сумма, ХодПогрузки.Номенклатура КАК Номенклатура, ХодПогрузки.Период КАК ВремяЗагрузки ИЗ РегистрСведений.ХодПогрузки КАК ХодПогрузки ВНУТРЕННЕЕ СОЕДИНЕНИЕ ИнтервалыЗагрузок КАК ИнтервалыЗагрузок ПО ХодПогрузки.Период >= ИнтервалыЗагрузок.НачалоПериода И ХодПогрузки.Период <= ИнтервалыЗагрузок.ОкончаниеПериода ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗагруженныеМашины КАК ЗагруженныеМашины ПО ХодПогрузки.ЗагрузкаМашиныМаршрут = ЗагруженныеМашины.ЗагрузкаМашиныМаршрут И (ИнтервалыЗагрузок.ЗагрузкаМашины = ЗагруженныеМашины.ЗагрузкаМашины) |
|||
53
ic-kat
03.06.12
✎
18:26
|
(50) ого, какую вы работу проделали...
а нет ли тут какого-то оповещения, если в свою ветку кто-то написал? а то я только что увидела :( по первой части получается, что если любое событие, означающее начало (продолжение) попадает в интервал, то документ погрузки подходит. а надо, чтобы только те, у которых именно начало в интервале. |
|||
54
ic-kat
03.06.12
✎
19:22
|
можно тоже вложенным, не будет ли нагромождения
|
|||
55
dklushin
03.06.12
✎
23:24
|
до сих пор бросает в дрожь от кода
выбрать ... ПО ХодПогрузки.Период >= ИнтервалыЗагрузок.НачалоПериода И ХодПогрузки.Период <= ИнтервалыЗагрузок.ОкончаниеПериода нельзя проще: выбрать ... ПО ХодПогрузки.Период МЕЖДУ ИнтервалыЗагрузок.НачалоПериода И ИнтервалыЗагрузок.ОкончаниеПериода ?? аналогично работает, как раз как <= && >= |
|||
56
ic-kat
04.06.12
✎
06:37
|
(55) да не принципиально, вы бы чего по делу лучше сказали...
|
|||
57
ic-kat
04.06.12
✎
07:46
|
(50)Сдавать, похоже, буду со вложенными циклами - сроки горят, а для себе все равно потом разбираться буду.
|
|||
58
Deniskind
04.06.12
✎
09:29
|
(53) Оповещений нет.
Для ограничения загрузок только по началу погрузки я предлагаю создать еще одну временную таблицу. Полный запрос будет таким:
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |