Имя: Пароль:
1C
1С v8
Запрос к реквизиту табличной части документа
0 kolp821
 
19.03.12
12:48
Есть Документ, в нем есть табличный реквизит, реквизит может быть пустой. Нужно создать запрос, на проверку заполненный/не заполненный табл. часть, в результате которого будет выполнен алгоритм, если в табл. части есть что то - то выполняется 1 ветка алгоритма, если нет нечего - то другая ветка. Как правильно создать запрос?
1 qeos
 
19.03.12
12:52
запрос:
выбрать строки где реквизит не заполнен
2 КМ155
 
19.03.12
12:54
(0) [есть табличный реквизит]
это не возможно
нет в 1С такого типа данных
3 Alex S D
 
19.03.12
12:54
ниче не понял
4 kolp821
 
19.03.12
12:55
(2) не правильно выразился, не табл реквизит а табличная часть реквизита.
5 Buster007
 
19.03.12
12:57
(4) есть реквизит табличной части
6 kolp821
 
19.03.12
12:58
(1)  а можно поподробнее? Есть несколько табличных реквизитов. Но нужно проверку на одну сделать.
7 le_
 
19.03.12
12:58
(5) У автора 1С Zimbabwe Edition.
8 КМ155
 
19.03.12
12:59
(4)[табличная часть реквизита]
ешё больший бред,
нет у реквизитов табличных частей
9 Alex S D
 
19.03.12
12:59
опять ниче не понял
10 Aleks73
 
19.03.12
12:59
(8) Может, если рекизит документ например заказ или реализация
11 Aleks73
 
19.03.12
13:00
(8)  Но что хочет автор - загадка.
12 kolp821
 
19.03.12
13:03
повторю еще вопрос.
Есть Документ, в нем есть табличный часть. Нужно создать запрос, на проверку заполненный/не заполненный табл. часть, в результате которого будет выполнен алгоритм, если в табл. части есть элементы - то выполняется 1 ветка алгоритма, если нет элементов - то другая ветка. Как правильно создать запрос?
13 qeos
 
19.03.12
13:04
(10) у реквизита нет табличной части.
14 kolp821
 
19.03.12
13:04
извиняюсь за неправильную формулировку вопроса
15 Alex S D
 
19.03.12
13:05
понял
16 Кокос
 
19.03.12
13:08
Делаешь левое соединение с таблицей результатом запроса где выборка из табличной части с полем СУММА(1) КАК ИНДИКАТОРСТРОКИ. и проверяешь потом если ВЫБОР КОГДА ЕстьNULL(Подзапрос.ИНДИКАТОРСТРОКИ,0) = 0 ТОГДА ЛОЖЬ ИНАЧЕ ИСТИНА КОНЕЙ КАК ТЧЗаполнена
17 le_
 
19.03.12
13:09
ВЫБРАТЬ ПЕРВЫЕ 1
   МойДокумент.НомерСтроки
ИЗ
   Документ.ВашДокумент.Товары КАК МойДокументТовары
ГДЕ
   МойДокумент.Ссылка = &Док

Если Запрос.Выполнить().Выбрать().Количество() < 1 Тогда
   //ТЧ пустая
Иначе
   //ТЧ не пустая
КонецЕсли;
18 le_
 
19.03.12
13:11
(17) *КАК МойДокумент
19 kolp821
 
19.03.12
13:12
(17)Что за НомерСтроки?
20 le_
 
19.03.12
13:13
(19) Номер строки в табличной части.
21 Buster007
 
19.03.12
13:13
(19) почитай-ка ты лучше книгу... от этого ещё никто не умирал ;)
22 Кокос
 
19.03.12
13:14
(19) вместо .НомерСтроки можешь использовать .Ссылка
23 le_
 
19.03.12
13:18
+(17) Только определить, есть ли строки в ТЧ документа можно проще, без написания запроса )

Если Док.Товары.Количество() < 1 Тогда
   //нет строк
Иначе
   //есть строки
КонецЕсли;
24 kolp821
 
19.03.12
13:23
(23) такой вариант подходит, но как правильно мне написать? Пишу Документы.Договір.ТабличнаяЧастьДокументиПроОсвіту.Количество() < 1 выдает ошибку что "{Документ.Договір(623)}: Поле объекта не обнаружено (ТабличнаяЧастьДокументиПроОсвіту)
    Если Документы.Договір.ТабличнаяЧастьДокументиПроОсвіту.Количество() < 1 Тогда"
25 le_
 
19.03.12
13:25
(24) Даже не знаю, что тут посоветовать... в магазин за книжкой или на курсы...
26 Кокос
 
19.03.12
13:27
Если Документы.Договір.ДокументиПроОсвіту.Количество() < 1
27 Кокос
 
19.03.12
13:27
(25) )))
28 kolp821
 
19.03.12
13:38
(26) ТабличнаяЧастьДокументиПроОсвіту это и есть имя, так предыдущий разработчик назвал табл часть )))
29 Molinor
 
19.03.12
13:40
(28)
"ДокументЫ", а не "документ".
30 Molinor
 
19.03.12
13:41
(29) Хрень написал, не читать.
31 Reset
 
19.03.12
14:11
(23) в Суть ветки не вникал, но зачем так иносказательно писать? Почему нельзя по русски Количество()=0 ? Отрабатывам варианты, когда количество строк = 0.5 или -1 ?
32 Lenka_Boo
 
19.03.12
14:28
(28)
1. Попробуй вставить название ТЧ копированием. В нем могут быть символы из другой раскладки, не догадаться какие (мне такие перлы уже встречались)
2. В отладчике посмотри, есть ли она у тебя вообще под Документы.Договір.
3. "Документы" - это у тебя что?
33 le_
 
19.03.12
14:30
(31) >Отрабатывам варианты, когда количество строк = 0.5 или -1 ?
Метод Количество() возвращает натуральное число.

(32) Думается мне, автор в (24) привел пример обращения к ДокументМенеджер, а не конкретному документу.
34 Reset
 
19.03.12
14:50
(33) Мне, думается, твой стиль мышления не постичь ;)
Я не справшивал, что возвращает метод. Я поинтересовался сакральным смыслом сравнения с единицей.
35 Reset
 
19.03.12
14:51
Забей, впрочем ;)
36 Кокос
 
19.03.12
14:51
Авфтор! Выложи сюда исходник.
37 le_
 
19.03.12
15:04
(34) Сакрального смысла нет. И ничего иносказательного нет. Можно было написать и так:
Если Док.Товары.Количество() > 0 Тогда
   //есть строки
Иначе
   //нет строк
КонецЕсли;
38 Reset
 
19.03.12
15:12
(37) И так можно:
Если Док.Товары.Количество()+1<2 тогда
// пустая

только нафига?


Пустая ТЧ - ТЧ, где 0(ноль) строк (а не та, где их меньше одной :D  - в этом иносказательность)
Пишем:
Если Док.Товары.Количество()=0 тогда
------------


+ в (17) вообще песня (я не говорю даже, что запрос нерабочий сам по себе, ну писал наспех - бывает).
Но вот об это глаз спотыкается сразу и возникают плохие мысли:
Если Запрос.Выполнить().Выбрать().Количество() < 1 Тогда

вместо Если Запрос.Выполнить().Пустой()
39 le_
 
19.03.12
15:24
(38) >И так можно: Док.Товары.Количество() + 1 < 2
Здесь лишняя операция.

По поводу (17) согласен. Про Пустой() подумал после того, как отправил.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший