|
v7: Перебрать строки табличной части документа. Реквизит строки с типом - Документ. | ☑ | ||
---|---|---|---|---|
0
america2013
21.10.13
✎
14:23
|
Приветствую Вас, участники форума!
Прошу помощи в таком вопросе: имею документ с табличной частью; в табличной части есть реквизит с типом Документ. Есть потребность перебрать так же строки этого документа из строки табличной части; выбрать строки документа проблем не вызывает, проблема выбрать строки из выбранной строки. Надеюсь описал доступно : ). Структура: Документ - Маршрутный лист. Табличная часть: Реквизит - РеализацияТоваров, типа Документ.РеализацияТоваров Код: Приветствую Вас, участники форума! Прошу помощи в таком вопросе: имею документ с табличной частью; в табличной части есть реквизит с типом Документ. Есть потребность перебрать так же строки этого документа из строки табличной части; выбрать строки документа проблем не вызывает, проблема выбрать строки из выбранной строки. Надеюсь описал доступно : ). Код: Док = СоздатьОбъект("Документ.МаршрутныйЛист"); Док.ВыбратьДокументы(ПерваяДата, ВтораяДата); Пока Док.ПолучитьДокумент() > 0 Цикл ТекДок = Док.ТекущийДокумент(); ТекДок.ДокументРеализации.ВыбратьСтроки(); Пока ТекДок.ДокументРеализации.ПолучитьСтроку() = 1 Цикл СтрокаИзРеализации = ТекДок.ДокументРеализации.ТекущаяСтрока(); Сообщить(СтрокаИзРеализации); КонецЦикла; КонецЦикла; |
|||
1
america2013
21.10.13
✎
14:27
|
Поправочка:
Реквизит - ДокументРеализации, тип Документ.РеализацияТоваров |
|||
2
Shaman100M
21.10.13
✎
14:27
|
А что за метод, ТекущаяСтрока() у документа?
Возможно, нужен номер строки. ТекДок.ДокументРеализации.НомерСтроки; |
|||
3
eRik
21.10.13
✎
14:39
|
Док = СоздатьОбъект("Документ.МаршрутныйЛист");
Док.ВыбратьДокументы(ПерваяДата, ВтораяДата); Пока Док.ПолучитьДокумент() = 1 Цикл Док.ВыбратьСтроки(); Пока Док.ПолучитьСтроку() = 1 Цикл ТекДок = Док.РеализацияТоваров; ТекДок.ВыбратьСтроки(); Пока ТекДок.ПолучитьСтроку() = 1 Цикл СтрокаИзРеализации = ТекДок.НомерСтроки; Сообщить(СтрокаИзРеализации); КонецЦикла; КонецЦикла; КонецЦикла; |
|||
4
eRik
21.10.13
✎
14:41
|
с учетом "поправочки"
ТекДок = ДокументРеализации; |
|||
5
eRik
21.10.13
✎
14:41
|
ТекДок = Док.ДокументРеализации;
|
|||
6
america2013
21.10.13
✎
14:46
|
(3) Что это - .НомерСтроки? Нужно фактически указать номер конкретной строки для чтения? А как все строки выбрать? Ещё один цикл по количеству строк в документе?
|
|||
7
palpetrovich
21.10.13
✎
14:48
|
как-то так:
"ВЫБРАТЬ | МаршрутныйЛистРеализации.Ссылка КАК Ссылка, | МаршрутныйЛистРеализации.Реализация КАК Реализация, | РеализацияТоваровТовары.Номенклатура |ИЗ | Документ.МаршрутныйЛист.Реализации КАК МаршрутныйЛистРеализации | ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваров.Товары КАК РеализацияТоваровТовары | ПО МаршрутныйЛистРеализации.Реализация = РеализацияТоваровТовары.Ссылка |ИТОГИ ПО | Ссылка, | Реализация" |
|||
8
Rie
21.10.13
✎
14:49
|
(6) ЧегоТоТам.ВыбратьСтроки() - прекрасно работает.
После этого обращаешься к реквизитам строк напрямую. |
|||
9
Rie
21.10.13
✎
14:49
|
(7) Это - круто! Но это - для 8-ки :-(
|
|||
10
palpetrovich
21.10.13
✎
14:50
|
(9) аааааааа
|
|||
11
Rie
21.10.13
✎
14:51
|
+(8) Ну, естественно, не забывая ЧегоТоТам.ПолучитьСтроку().
|
|||
12
america2013
21.10.13
✎
14:56
|
(6) Это и работает в первом цикле. Но далее есть ещё один, в котором идет перебор строк документа из строки, где этот документ находится.
(11) Смотрю по отладке - после .ВыбратьСтроки() сразу переходит к конец, не проходя цикл .ПолучитьСтроку(). Хотя, строки в документе есть. |
|||
13
Mikeware
21.10.13
✎
15:00
|
(9) вот для 7.7 :-)
ТекстЗапросаВеса=" |SELECT | ПутевойЛистСтроки.iddoc[ДокументПЛ] | , sum((1-isnull(Журн.ismark,0))*isnull($РеализацияСтроки.Коэффициент,0)*isnull($РеализацияСтроки.Количество,0)*$Единицы.Вес+isnull($ПеремещениеТМЦСтроки.Коэффициент,0)*isnull($ПеремещениеТМЦСтроки.Количество,0)*$Единицы.Вес) [Вес] | , sum((1-isnull(Журн.ismark,0))*case when (isnull($РеализацияСтроки.Количество,0)+isnull($ПеремещениеТМЦСтроки.Количество,0))>0 then 1 else 0 end) [КоличествоПозиций] | , sum((isnull(Журн.ismark,0))*isnull($РеализацияСтроки.Коэффициент,0)*isnull($РеализацияСтроки.Количество,0)*$Единицы.Вес+isnull($ПеремещениеТМЦСтроки.Коэффициент,0)*isnull($ПеремещениеТМЦСтроки.Количество,0)*$Единицы.Вес) [ВесНевывоза] | , sum((isnull(Журн.ismark,0))*case when (isnull($РеализацияСтроки.Количество,0)+isnull($ПеремещениеТМЦСтроки.Количество,0))>0 then 1 else 0 end) [КоличествоПозицийНевывоза] |FROM $ДокументСтроки.ПутевойЛист AS ПутевойЛистСтроки With (NOLOCK) | LEFT JOIN $ДокументСтроки.Реализация AS РеализацияСтроки With (NOLOCK) ON right($ПутевойЛистСтроки.Документ,9) = РеализацияСтроки.IDDOC | LEFT JOIN $ДокументСтроки.ПеремещениеТМЦ AS ПеремещениеТМЦСтроки With (NOLOCK) ON right($ПутевойЛистСтроки.Документ,9) = ПеремещениеТМЦСтроки.IDDOC | INNER JOIN $Справочник.Номенклатура AS Номенклатура With (NOLOCK) ON (($РеализацияСтроки.Номенклатура = Номенклатура.ID) OR ($ПеремещениеТМЦСтроки.Номенклатура = Номенклатура.ID)) | INNER JOIN $Справочник.Единицы AS Единицы With (NOLOCK) ON Единицы.ID = $Номенклатура.БазоваяЕдиница |left join _1sjourn Журн (nolock) on right($ПутевойЛистСтроки.Документ,9)=Журн.iddoc |WHERE (ПутевойЛистСтроки.IDDOC =:ВыбДок) |group by ПутевойЛистСтроки.iddoc |"; |
|||
14
Rie
21.10.13
✎
15:01
|
(12) "Не верю!" (c) К.С.Станиславский
|
|||
15
america2013
21.10.13
✎
15:01
|
О_о
|
|||
16
Rie
21.10.13
✎
15:02
|
(13) Как минимум одну строку кода ты забыл :-)
|
|||
17
yam
21.10.13
✎
15:05
|
//Жжете, товарищи!
Док = СоздатьОбъект("Документ.МаршрутныйЛист"); Док.ВыбратьДокументы(ПерваяДата, ВтораяДата); Пока Док.ПолучитьДокумент() > 0 Цикл ТекДок = Док.ТекущийДокумент(); ТекДок.ВыбратьСтроки(); Пока ТекДок.ПолучитьСтроку() = 1 Цикл ДокРеализации = ТекДок.ДокументРеализации; ДокРеализации.ВыбратьСтроки(); Пока ДокРеализации.ПолучитьСтроку() = 1 Цикл Сообщить(ДокРеализации.НомерСтроки); КонецЦикла; КонецЦикла; КонецЦикла; |
|||
18
Mikeware
21.10.13
✎
15:06
|
(16) да вроде только заремленое убрал....
|
|||
19
Rie
21.10.13
✎
15:07
|
(18) Ту, в которой ЗагрузитьВнешнююКомпоненту() вызывается :-)
|
|||
20
Mikeware
21.10.13
✎
15:10
|
(19)а, ну это уже подразумевается....
|
|||
21
Rie
21.10.13
✎
15:12
|
(20) Но ТС об этом может и не знать. "Стаж: 10 дней".
|
|||
22
america2013
21.10.13
✎
15:14
|
(17) Ничего не сообщает.
Для меня странно то, что при отладке, когда получаю строку из МаршрутныйЛист (первый цикл), рассчитываю увидеть в табло реквизиты документа, номер, дата - есть, а напротив реквизита ДокументРеализации (рассчитываю увидеть номер, дата и табличную часть) - пустота. |
|||
23
Rie
21.10.13
✎
15:17
|
(22) ОК. Ну а так:
Реализации = СоздатьОбъект("Документ.РеализацияИлиКакТамОнНазывается"); В цикле: Если Реализации.НайтиДокумент(ТекДок.ДокументРеализации)=1 Тогда Сообщить("Ура!"); Иначе Сообщить("Хрен вам, а не документ!"); КонецЕсли; Видно чего? |
|||
24
america2013
21.10.13
✎
15:20
|
(23)
Если Реализации.НайтиДокумент(ТекДок.ДокументРеализации)=1 Тогда {C:\USERS\USER\DESKTOP\ПОГРУЗОЧНЫЙ ОТЧЕТ\ПОГРУЗОЧНЫЙ ОТЧЕТ V0.5.ERT(44)}: Недопустимая операция |
|||
25
america2013
21.10.13
✎
15:23
|
ТекДок.ДокументРеализации -- пусто. Но реквизит в документе (видно на форме документа) заполнен.
|
|||
26
Rie
21.10.13
✎
15:23
|
(24) А какого типа реквизит ДокументРеализации?
(В (23) я имел в виду ТекДок из (17); впрочем, вместо ТекДок - прекрасно можно использовать Док). |
|||
27
america2013
21.10.13
✎
15:24
|
(26) Реквизит - ДокументРеализации, тип Документ.РеализацияТоваров
|
|||
28
Rie
21.10.13
✎
15:29
|
(27) Если было написано
Реализации = СоздатьОбъект("Документ.РеализацияТоваров"); а ТекДок (или Док) взято внутри цикла Пока Док.ПолучитьДокумент()=1 то "Не верю!" (c) К.С.Станиславский |
|||
29
america2013
21.10.13
✎
15:34
|
(28) Чему вы не верите?
Приведу код на данный момент, думаю, что именно он должен быть рабочим, но значение переменной - ДокРеализации - пусто((((( Док = СоздатьОбъект("Документ.МаршрутныйЛист"); Док.ВыбратьДокументы(ПерваяДата, ВтораяДата); Пока Док.ПолучитьДокумент() > 0 Цикл ТекДок = Док.ТекущийДокумент(); ДокРеализации = ТекДок.ДокументРеализации; ДокРеализации.ВыбратьСтроки(); Пока ДокРеализации.ПолучитьСтроку() = 1 Цикл Сообщить(ДокРеализации.НомерСтроки); КонецЦикла; КонецЦикла; |
|||
30
Rie
21.10.13
✎
15:36
|
(29) Если ДокРеализации пусто - значит, пустое значние имеет и Док.ДокументРеализации. Значит, соответствующий реквизит - попросту не заполнен.
|
|||
31
america2013
21.10.13
✎
15:44
|
(30) Но как это может быть, если я получаю МаршрутныйЛист (вижу его номер, дату...), открываю в базе - табличная часть заполнена, а при обращении программно к документу и его табличной части, выходит, что - не заполнено? (прям, мой 9 вагон пустой (с) М.Задорнов). Я уже было подумал, что там изврат какой-то, типа при открытии документа табличная часть заполняется каждый раз по-новой, но нет там такого к счастью.
|
|||
32
Mikeware
21.10.13
✎
15:47
|
(31) откройте для себя отладчик....
|
|||
33
Rie
21.10.13
✎
15:48
|
(31) Чудес не бывает.
Может, в форме документа Вы видите вычисляемую текстовую колонку с документом реализации. Может, ещё чего. |
|||
34
america2013
21.10.13
✎
15:51
|
(32) именно так я и увидел, что там ничего не выводится, вообще табличная часть пустая.
(33) согласен, что не бывает... но реквизит на форме имеет тип - Документ.РеализацияТоваров. |
|||
35
abfm
21.10.13
✎
15:53
|
Док = СоздатьОбъект("Документ.МаршрутныйЛист");
Док.ВыбратьДокументы(ПерваяДата, ВтораяДата); Пока Док.ПолучитьДокумент() > 0 Цикл ТекДок = Док.ТекущийДокумент(); Вот тут выбери и получи строку ТекДок ДокРеализации = ТекДок.ДокументРеализации; ДокРеализации.ВыбратьСтроки(); Пока ДокРеализации.ПолучитьСтроку() = 1 Цикл Сообщить(ДокРеализации.НомерСтроки); КонецЦикла; КонецЦикла; |
|||
36
Rie
21.10.13
✎
15:54
|
(34) А учитываете ли Вы, что Отладчик в 7-ке несколько своеобразно работает с внешними отчётами и обработками?
В частности, у него иногда хватает ума сохранить открытую для отладки обработку у себя, любимого - и показывать вовсе не те операторы, которые реально исполняются? |
|||
37
america2013
21.10.13
✎
16:00
|
(35) так я вроде это и делаю....
|
|||
38
abfm
21.10.13
✎
16:02
|
ТекДок.ВыбратьСтроки();
Пока ТекДок.ПолучитьСтроку() = 1 Цикл Где эти строки? |
|||
39
america2013
21.10.13
✎
16:13
|
(38) Я ПОНЯЛ ВАС!!! Бесконечно благодарен!!!!!!
Суть дела оказалась в чем: Док = СоздатьОбъект("Документ.МаршрутныйЛист"); Док.ВыбратьДокументы(ПерваяДата, ВтораяДата); Пока Док.ПолучитьДокумент() > 0 Цикл ТекДок = Док.ТекущийДокумент(); ТекДок.ВыбратьСтроки(); Пока ТекДок.ПолучитьСтроку() = 1 Цикл ДокРеализации = ТекДок.ДокументРеализации; ДокРеализации.ВыбратьСтроки(); Пока ДокРеализации.ПолучитьСтроку() = 1 Цикл Сообщить(ДокРеализации.ТМЦ); //нужные реквизиты из табличной части КонецЦикла; КонецЦикла; КонецЦикла; |
|||
40
america2013
21.10.13
✎
16:14
|
Благодарю всех участников за помощь!!!
|
|||
41
1dvd
22.10.13
✎
07:03
|
(40) О том, что ДокументРеализации находится в табличной части, надо было говорить заранее
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |