Имя: Пароль:
1C
1С v8
Запрос и пустая таблица документа.
,
0 ValeriTim
 
29.08.13
14:54
Есть табличная часть документа с полями номенклатура и количество. Надо, чтобы запрос при пустой табличной часть возвращал одну строку с пустой номенклатурой и количеством равным 0. Не могу понять как это сделать ...
1 exwill
 
29.08.13
14:55
(0) Левое соединение + ВЫБОР ... КОГДА
2 ValeriTim
 
29.08.13
14:56
(1) левое соединение с чем ?
3 exwill
 
29.08.13
14:59
(2) Таблицы документов с таблицей табличной части.
4 MKZM
 
29.08.13
14:59
с самим собой
5 ValeriTim
 
29.08.13
15:01
(3) Я не пока в запросе не обрабатываю сам документ, а только табличную часть.
(4) и что это даст? Пустая таблица с пустой в любом случае не вернет ни одной строки.
6 exwill
 
29.08.13
15:04
(5) Вот и обрабатывай сам документ. А ты как хотел? Откуда ты возьмешь информации о документе с пустой таб. частью?
7 ValeriTim
 
29.08.13
15:10
Сейчас запрос выглядит так:

ВЫБРАТЬ
    ВЫБОР
        КОГДА ОтгрузкаПокупателямТовары.Ссылка.ДляВсейНоменклатуры
            ТОГДА ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
        ИНАЧЕ ОтгрузкаПокупателямТовары.Номенклатура
    КОНЕЦ КАК Номенклатура,
    ВЫБОР
        КОГДА ОтгрузкаПокупателямТовары.Ссылка.ДляВсейНоменклатуры
            ТОГДА ОтгрузкаПокупателямТовары.Ссылка.ПроцентНаценки
        ИНАЧЕ ОтгрузкаПокупателямТовары.ПроцентНаценки
    КОНЕЦ КАК ПроцентНаценки,
    ОтгрузкаПокупателямПолучатели.Контрагент,
    ОтгрузкаПокупателямПолучатели.Получатель
ИЗ
    Документ.ОтгрузкаПокупателям.Товары КАК ОтгрузкаПокупателямТовары
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтгрузкаПокупателям.Получатели КАК ОтгрузкаПокупателямПолучатели
        ПО (ИСТИНА)
ГДЕ
    ОтгрузкаПокупателямПолучатели.Ссылка = &Ссылка
    И ОтгрузкаПокупателямТовары.Ссылка = &Ссылка
8 ValeriTim
 
29.08.13
15:13
Поясню. В документе две табличные части - Товары (Номенклатура, ПроцентНаценки) и Получатели (Контрагент, получатель)

В итоге надо получить результирующую таблице, где к каждой строке из Товары шло по одной строке из Получатели. Загвоздка состоит в том, когда табличная часть Товары пуста - в этом случае там должна быть пустая номенклатура.
9 giallo
 
29.08.13
15:22
[ где к каждой строке из Товары шло по одной строке из Получатели.] не соответствует [ ЛЕВОЕ СОЕДИНЕНИЕ...ПО (ИСТИНА)]
10 Starhan
 
29.08.13
15:24
ЕстьNULL(Номенклатура, Значение(Справочник.Номенклатура.ПустаяССсылка))
11 1Сергей
 
29.08.13
15:24
ТЧ Покупатели - это сильно
12 ValeriTim
 
29.08.13
15:29
(9) когда табличные части заполнены как раз и соответствует.
(10) Это тоже не работает - табличная то часть пуста.
(11) что не так ?
13 giallo
 
29.08.13
15:34
(12) просто у тебя в ТЧ Покупатели одна строка, будет несколько строк, тогда каждая строка с товаром из Товары размножится по числу строк в ТЧ получатели
14 ValeriTim
 
29.08.13
15:36
(13) именно это и требуется. Я не правильно выразился выше. В ТЧ Товары 3 строки, в ТЧ Покупатели 2 строки - в результате запроса должно получится 6 строк.
15 1Сергей
 
29.08.13
15:38
(14) в любом случае надо соединять с самим документом, если ТЧ может быть пустой
16 giallo
 
29.08.13
15:38
(14) тогда сделай правое соединение и (10)
17 sirsp
 
29.08.13
15:39
(14) Если получатели _всегда_ заполнены, достаточно в запросе поменять таблицы местами и использовать (10)
18 ValeriTim
 
29.08.13
15:41
Все дело в том, что пустой может быть любая из ТЧ, но только одна. А получить результат надо выборки самого документа.
19 ValeriTim
 
29.08.13
15:42
Я изначально упростил саму задачу, чтобы легче было понять, так что (11) не обращайте внимание на название табличных частей и реквизиты.
20 le_
 
29.08.13
15:47
(0) Запрос выведет выбранные номенклатуру и количество, если ТЧ документа не заполнена:
ВЫБРАТЬ
    ВЫБОР
        КОГДА РеализацияТоваровУслугУслуги.Номенклатура ЕСТЬ NULL
            ТОГДА &НоменклатураДляПодстановки
        ИНАЧЕ РеализацияТоваровУслугУслуги.Номенклатура
    КОНЕЦ КАК Номенклатура,
    ВЫБОР
        КОГДА РеализацияТоваровУслугУслуги.Количество ЕСТЬ NULL
            ТОГДА &КоличествоДляПодстановки
        ИНАЧЕ РеализацияТоваровУслугУслуги.Количество
    КОНЕЦ КАК Количество
ИЗ
    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Услуги КАК РеализацияТоваровУслугУслуги
        ПО (РеализацияТоваровУслугУслуги.Ссылка = РеализацияТоваровУслуг.Ссылка)
            И (РеализацияТоваровУслугУслуги.Ссылка = &Ссылка)
ГДЕ
    РеализацияТоваровУслуг.Ссылка = &Ссылка
21 giallo
 
29.08.13
15:50
(19) Делай пакетный запрос

1 таб - таб часть товары
2 таб - таб часть получатели

3 запрос - левым содинением по истина эти первые две таб к таблице документа и (10)
22 ValeriTim
 
29.08.13
15:52
(21) да надо без таблицы документа это обработать ... а то бы я сделал ...
23 giallo
 
29.08.13
15:53
(22) тогда сделай полное соединение по истина и (10)
24 ValeriTim
 
29.08.13
16:06
(23) попробовал - результат тот же ... щас еще одна идея появилась ...
25 giallo
 
29.08.13
16:10
(24) тот же результат потому что условие ГДЕ Ссылка = &Ссылка делает соединение внутренним. Сделай как (21) и полное соединение в третьем запросе
26 ValeriTim
 
29.08.13
16:38
(25), (21) спасибо - попробуем
27 ValeriTim
 
29.08.13
16:57
Получилось. и даже (10) применять не надо
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn