|
Перебор ТЧ запросом с подставлением реквизита из предыдущей строки | ☑ | ||
---|---|---|---|---|
0
F1
10.04.12
✎
08:12
|
Здравствуйте!
Существует ТЧ документа с реквизитами 1. Работа 1 2. Материал 1 3. Материал 2 4. Материал 3 5. Работа 2 6. Материал 4 7. Материал 1 8. Материал 5 Нужно перебрать строки запросом, чтобы для материалов для строк со 2 по 4 подставилась Работа 1, а для материалов с 6 по 8 строку - Работа 2. Подскажите, как сделать! |
|||
1
Wobland
10.04.12
✎
08:17
|
имхо, надо для этих строк первые поля заполнять. что, если вдруг состав строк изменится?
|
|||
2
Живой Ископаемый
10.04.12
✎
08:20
|
что такое "перебрать запросом"?
|
|||
3
Wobland
10.04.12
✎
08:21
|
(2) наверное, в цикле выбрать Работа где НомерСтроки=&НомерТекущейСтроки-1 ;)
|
|||
4
butterbean
10.04.12
✎
08:22
|
этож надо было такой документ бредовый разработать
|
|||
5
Живой Ископаемый
10.04.12
✎
08:23
|
2(3) интерпретаций я тоже могу нафантазировать... мне интересно что автор имел в виду..
|
|||
6
butterbean
10.04.12
✎
08:23
|
(0) проще всего записать работу в каждую строку и ипать мосх
|
|||
7
Defender aka LINN
10.04.12
✎
08:32
|
(0) Ты же в курсе, что соединение возможно не только на равенство, да?
|
|||
8
F1
10.04.12
✎
08:51
|
(6) Автор имел в виду, что все в запросе нужно сделать, т.к. делается для СКД. Циклы не подходят.
(4) документ давнишний, приходиться работать с тем чем есть |
|||
9
F1
10.04.12
✎
08:52
|
(7) ага, в кусре
|
|||
10
Wobland
10.04.12
✎
08:54
|
(8) приведи давнишний документ к такому виду и попытайся решить:
1. Работа 1 2. Материал 1 3. Материал 2 4. Работа 2 5. Материал 4 6. Материал 1 7. Материал 5 8. Материал 3 (бывшая строка 4) |
|||
11
F1
10.04.12
✎
08:57
|
(10) я имею ввиду, что материалы могут повторяться
|
|||
12
Wobland
10.04.12
✎
09:02
|
(11) тогда вопрос: (0) и (10) - если просто строку передвинули, то получился другой набор работ?
|
|||
13
DimVad
10.04.12
✎
09:02
|
Предположим, что "Автор имел в виду, что все в запросе нужно сделать, т.к. делается для СКД. Циклы не подходят.
документ давнишний, приходиться работать с тем чем есть". Самое простое решение - выгружает в ТЗ, заполняем как надо, ТЗ суем в СКД как внешний источник. Если нужен именно запрос для чего-то еще - суем ТЗ в временную таблицу и строим на ней запрос. |
|||
14
F1
10.04.12
✎
09:06
|
(13)а если не простое решение? Можно ведь как-то в запросе Выбор написать, чтобы значение работы бралось из предыдущей строки?
|
|||
15
DimVad
10.04.12
✎
09:13
|
Ну, если честно - можно. Но надо учесть, что количество строк с материалом - переменна в общем случае. 1. Делаем запрос по полям "номер строки и работа" (выбираем только заполненные работы) и кидаем их во временную таблицу.
|
|||
16
butterbean
10.04.12
✎
09:14
|
(14) с переменным количество материалов - это весьма геморно
|
|||
17
DimVad
10.04.12
✎
09:14
|
2. Делаем запрос по полям "номер строки и материал" и объединяем с первой таблицей по условию "номер строки больше или равен номеру строки из первой таблицы. И пофигу на количество строк с материалами...
|
|||
18
butterbean
10.04.12
✎
09:17
|
(17) при таком подходе ВСЕ материалы свалятся на первую работу, ну и далее по списку
|
|||
19
DimVad
10.04.12
✎
09:21
|
Опс, не правильно написал. Знаете способ, как имитировать "срез последнего" там, где это не предусмотрено ? Объединяем не просто с первой таблицей, а с запросом на базе первой таблицы, где получаем максимальный номер строки, но стоит отбор - он меньше или равен номеру из второй таблицы.
|
|||
20
DimVad
10.04.12
✎
09:26
|
Я так делал, получал "срез последнего" по датам с документов, объединяя с другим запросом по датам на "больше-меньше". Способ очень полезный. Но честно говорю, что для решения конкретной задачки ТС гораздо проще и НАГЛЯДНЕЕ получить ТЧ, обработать циклом и далее по списку...
|
|||
21
F1
10.04.12
✎
09:31
|
(20) а можно пример?
|
|||
22
DimVad
10.04.12
✎
09:33
|
Э... можно. Но я тут работенку делаю одновременно с чтением мисты... Освобожусь где-нибудь через часик. Если к тому времени эту тему не решат - сделаю в пробной конфе такой документик и сговнякаю запрос.
|
|||
23
F1
10.04.12
✎
09:34
|
(22) Ок, спасибо заранее
|
|||
24
Buster007
10.04.12
✎
09:50
|
ВЫБРАТЬ
Таблица.НомерСтроки, Таблица.Реквизит1, Таблица.Реквизит2 ПОМЕСТИТЬ втТаблица ИЗ &Таблица КАК Таблица ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ втТаблица.НомерСтроки ПОМЕСТИТЬ втЗаголовки ИЗ втТаблица КАК втТаблица ГДЕ втТаблица.Реквизит1 <> "" ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ втТаблица.НомерСтроки, МАКСИМУМ(втЗаголовки.НомерСтроки) КАК НомерСтрокиЗаголовка ПОМЕСТИТЬ втПодходящиеЗаголовки ИЗ втТаблица КАК втТаблица ВНУТРЕННЕЕ СОЕДИНЕНИЕ втЗаголовки КАК втЗаголовки ПО втТаблица.НомерСтроки > втЗаголовки.НомерСтроки СГРУППИРОВАТЬ ПО втТаблица.НомерСтроки ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ втТаблица.Реквизит2, втТаблица1.Реквизит1 ИЗ втТаблица КАК втТаблица ВНУТРЕННЕЕ СОЕДИНЕНИЕ втПодходящиеЗаголовки КАК втПодходящиеЗаголовки ВНУТРЕННЕЕ СОЕДИНЕНИЕ втТаблица КАК втТаблица1 ПО втПодходящиеЗаголовки.НомерСтрокиЗаголовка = втТаблица1.НомерСтроки ПО втТаблица.НомерСтроки = втПодходящиеЗаголовки.НомерСтроки И (втТаблица.Реквизит2 <> "") Для примера. Я создал табличную часть с двумя реквизитами Реквизит1 и Реквизит2 - оба тип строка. Сделал такую же таблицу как у тебя всё отлично вывелось Ну подкорректируй под свои виды проверку на пустые значения, а также источник данных другой сделай, а то я ТЗ загрузил... Ну в общем должен разобраться |
|||
25
DimVad
10.04.12
✎
11:11
|
Скажите, F1, эта тема закрыта ?
|
|||
26
DimVad
10.04.12
✎
11:13
|
Просто я тут обещался сделать документик со справочниками и смастерить отчетик.
|
|||
27
F1
10.04.12
✎
13:09
|
(25) нет еще, пока не успеваю перевоять предыдущий запрос под свой
|
|||
28
DimVad
10.04.12
✎
13:30
|
Я в пробной конфе завел два справочника - Материалы и Работы. В работы завел "Работа 1" и "Работа 2", в Материалы - "Материал 1", "Материал 2" ... "Материал 6". Завел документ с именем "ЧудоДокумент", в нем одна ТЧ с именем "ТабличнаяЧасть1", заполнил документ так, как Вы показали в первом посте.
|
|||
29
DimVad
10.04.12
✎
13:31
|
Начинаю делать запрос. Первая часть :
ВЫБРАТЬ ЧудоДокументТабличнаяЧасть1.Ссылка КАК Ссылка, ЧудоДокументТабличнаяЧасть1.НомерСтроки КАК НомерСтроки, ЧудоДокументТабличнаяЧасть1.Работа ПОМЕСТИТЬ СписокРабот ИЗ Документ.ЧудоДокумент.ТабличнаяЧасть1 КАК ЧудоДокументТабличнаяЧасть1 ГДЕ ЧудоДокументТабличнаяЧасть1.Работа <> ЗНАЧЕНИЕ(Справочник.Работы.ПустаяСсылка) ИНДЕКСИРОВАТЬ ПО Ссылка, НомерСтроки ; т.е. получил таблицу со списками работ |
|||
30
DimVad
10.04.12
✎
13:33
|
Вторая часть запроса :
ВЫБРАТЬ СписокРабот.Ссылка КАК Ссылка, ЧудоДокументТабличнаяЧасть1.НомерСтроки КАК НомерСтроки, МАКСИМУМ(СписокРабот.НомерСтроки) КАК НомерСтрокиВСпискеРабот ПОМЕСТИТЬ СоответствиеНомеровСтрок ИЗ СписокРабот КАК СписокРабот ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЧудоДокумент.ТабличнаяЧасть1 КАК ЧудоДокументТабличнаяЧасть1 ПО СписокРабот.Ссылка = ЧудоДокументТабличнаяЧасть1.Ссылка И СписокРабот.НомерСтроки <= ЧудоДокументТабличнаяЧасть1.НомерСтроки СГРУППИРОВАТЬ ПО ЧудоДокументТабличнаяЧасть1.НомерСтроки, СписокРабот.Ссылка ИНДЕКСИРОВАТЬ ПО Ссылка, НомерСтроки ; т.е. просто получаю табличку, где беру максимальные номера из первой таблички, но чтоб меньше или равно, чем в ТЧ документа |
|||
31
DimVad
10.04.12
✎
13:35
|
Теперь, имея эту волшебную табличку соответствия между номером строки в ТЧ документа и номером в "Списке работ", использую ее как связку :
ВЫБРАТЬ ЧудоДокументТабличнаяЧасть1.Ссылка КАК Ссылка, ЧудоДокументТабличнаяЧасть1.НомерСтроки КАК НомерСтроки, СписокРабот.Работа, ЧудоДокументТабличнаяЧасть1.Материал ИЗ Документ.ЧудоДокумент.ТабличнаяЧасть1 КАК ЧудоДокументТабличнаяЧасть1 ЛЕВОЕ СОЕДИНЕНИЕ СоответствиеНомеровСтрок КАК СоответствиеНомеровСтрок ЛЕВОЕ СОЕДИНЕНИЕ СписокРабот КАК СписокРабот ПО СоответствиеНомеровСтрок.Ссылка = СписокРабот.Ссылка И СоответствиеНомеровСтрок.НомерСтрокиВСпискеРабот = СписокРабот.НомерСтроки ПО ЧудоДокументТабличнаяЧасть1.Ссылка = СоответствиеНомеровСтрок.Ссылка И ЧудоДокументТабличнаяЧасть1.НомерСтроки = СоответствиеНомеровСтрок.НомерСтроки ГДЕ ЧудоДокументТабличнаяЧасть1.Материал <> ЗНАЧЕНИЕ(Справочник.Материалы.ПустаяСсылка) УПОРЯДОЧИТЬ ПО Ссылка, НомерСтроки |
|||
32
DimVad
10.04.12
✎
13:37
|
Ну, везде использую еще и связи по ссылке (иначе накроюсь, если документов будет больше, чем один). Попробовал, скопировал первый до, запустил запрос в консоли - вроде все o'k
|
|||
33
F1
10.04.12
✎
13:38
|
(32)Спасибо большое, попоробую переваять под свою задачу
|
|||
34
Ахиллес
10.04.12
✎
13:43
|
Автор не будь таким же тупицей, как ток, кто наваял такое уродство, как в (0)
Приведи документ к виду 1. Работа 1 Материал 1 2. Работа 1 Материал 2 3. Работа 1 Материал 3 4. Работа 2 Материал 4 5. Работа 2 Материал 1 6. Работа 2 Материал 5 И все твои проблемы разом решатся. |
|||
35
Buster007
10.04.12
✎
13:53
|
(34) вариант решения есть ) если его устраивает, то и приводить не обязательно...
|
|||
36
Ахиллес
10.04.12
✎
13:55
|
(35) Обязательно. Некрасивые самолёты не летают, а уродские конфы не работают нормально. Если она внешне выглядит, как гомно, то и внутри у ней тоже гомно.
|
|||
37
Buster007
10.04.12
✎
14:27
|
(36) может он работает во франче и его попросили сделать такой отчет? зачем ему лезть переделывать конфу? тем более, ему скорее всего за это и платить не будут... поэтому выход один, сделать отчет и предложить переделать документ клиенту.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |