Имя: Пароль:
1C
 
Запрос по двум табличным частям документа
0 NIGHTHUNTER
 
26.05.22
12:46
Подскажите пожалуйста по запросу.
Есть документ. У этого документа есть 2 табличных части. В первой ссылки на другой документ. У которого так же 2 нужные табличные части.
Необходимо выбирать номенклатуру второго (другого документа), из одной табличной части, по ссылкам первой части документа и если Грузоотправитель = ПодразделениеЗаказчик, из этого другого документа.

Выберет ли это правильно вот этот запрос? нужно делать подобный потом по ПодразделениеИсполнитель, я вот делать решил двумя разными запросами. Интересует выполнится ли условие в И?

    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    ХХХ_НарядЗадание_ОтгруженоЗаказчиком.Ссылка КАК ДокументСсылка,
                   |    ВЫБОР
                   |        КОГДА ХХХ_НарядЗадание_ОтгруженоЗаказчиком.Номенклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
                   |            ТОГДА ХХХ_НарядЗадание_ОтгруженоЗаказчиком.Комментарий
                   |        ИНАЧЕ ХХХ_НарядЗадание_ОтгруженоЗаказчиком.Номенклатура
                   |    КОНЕЦ КАК Номенклатура,
                   |    ХХХ_НарядЗадание_ОтгруженоЗаказчиком.Количество КАК Количество
                   |ИЗ
                   |    Документ.ХХХ_НарядЗадание.ОтгруженоЗаказчиком КАК ХХХ_НарядЗадание_ОтгруженоЗаказчиком
                   |ГДЕ
                   |    ХХХ_НарядЗадание_ОтгруженоЗаказчиком.Ссылка В(&Ссылки)
                   |    И ХХХ_НарядЗадание_ОтгруженоЗаказчиком.Ссылка.ПодразделениеЗаказчик = &ПодразделениеЗаказчик";
1 NIGHTHUNTER
 
26.05.22
12:54
Всего у меня получился такой код. Я сделал вот так. Вижу что можно было бы через объединение делать.
Это сработает?

    Запрос       = Новый Запрос;
    Запрос.Текст = "
        |ВЫБРАТЬ
        |    ХХХ_НарядЗадание_ОтгруженоЗаказчиком.Ссылка КАК ДокументСсылка,
        |    ВЫБОР
        |        КОГДА ХХХ_НарядЗадание_ОтгруженоЗаказчиком.Номенклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
        |            ТОГДА ХХХ_НарядЗадание_ОтгруженоЗаказчиком.Комментарий
        |        ИНАЧЕ ХХХ_НарядЗадание_ОтгруженоЗаказчиком.Номенклатура
        |    КОНЕЦ КАК Номенклатура,
        |    ХХХ_НарядЗадание_ОтгруженоЗаказчиком.Количество КАК Количество
        |ИЗ
        |    Документ.ХХХ_НарядЗадание.ОтгруженоЗаказчиком КАК ХХХ_НарядЗадание_ОтгруженоЗаказчиком
        |ГДЕ
        |    ХХХ_НарядЗадание_ОтгруженоЗаказчиком.Ссылка В(&Ссылки)
        |    И ХХХ_НарядЗадание_ОтгруженоЗаказчиком.Ссылка.ПодразделениеЗаказчик = &Грузоотправитель";
    Запрос.УстановитьПараметр("Ссылки",           Объект.ХХХ_Основание.Выгрузить().ВыгрузитьКолонку("ДокументСсылка"));
    Запрос.УстановитьПараметр("Грузоотправитель", Объект.Грузоотправитель);
    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать();
    Пока Выборка.Следующий() Цикл
        НоваяСтрока                = Объект.ХХХ_Товары.Добавить();
        НоваяСтрока.Номенклатура   = Выборка.Номенклатура;
        НоваяСтрока.Количество     = Выборка.Количество;
        НоваяСтрока.ДокументСсылка = Выборка.ДокументСсылка;
    КонецЦикла;
    // Если Грузоотправитель = ПодразделениеИсполнитель, то запрос по Тч.ОтгруженоИсполнителем
    Запрос       = Новый Запрос;
    Запрос.Текст = "
        |ВЫБРАТЬ
        |    ХХХ_НарядЗадание_ОтгруженоИсполнителем.Ссылка КАК ДокументСсылка,
        |    ВЫБОР
        |        КОГДА ХХХ_НарядЗадание_ОтгруженоИсполнителем.Номенклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
        |            ТОГДА ХХХ_НарядЗадание_ОтгруженоИсполнителем.Комментарий
        |        ИНАЧЕ ХХХ_НарядЗадание_ОтгруженоИсполнителем.Номенклатура
        |    КОНЕЦ КАК Номенклатура,
        |    ХХХ_НарядЗадание_ОтгруженоИсполнителем.Количество КАК Количество
        |ИЗ
        |    Документ.ХХХ_НарядЗадание.ОтгруженоИсполнителем КАК ХХХ_НарядЗадание_ОтгруженоИсполнителем
        |ГДЕ
        |    ХХХ_НарядЗадание_ОтгруженоИсполнителем.Ссылка В(&Ссылки)
        |    И ХХХ_НарядЗадание_ОтгруженоИсполнителем.Ссылка.ПодразделениеИсполнитель = &Грузоотправитель";
    Запрос.УстановитьПараметр("Ссылки",           Объект.ХХХ_Основание.Выгрузить().ВыгрузитьКолонку("ДокументСсылка"));
    Запрос.УстановитьПараметр("Грузоотправитель", Объект.Грузоотправитель);
    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать();
    Пока Выборка.Следующий() Цикл
        НоваяСтрока                = Объект.ХХХ_Товары.Добавить();
        НоваяСтрока.Номенклатура   = Выборка.Номенклатура;
        НоваяСтрока.Количество     = Выборка.Количество;
        НоваяСтрока.ДокументСсылка = Выборка.ДокументСсылка;
    КонецЦикла;
2 NIGHTHUNTER
 
26.05.22
12:55
(1+) верхняя строчка перед первым запросом

    // Если Грузоотправитель = ПодразделениеЗаказчик, то запрос по Тч.ОтгруженоЗаказчиком
3 Kassern
 
26.05.22
12:56
(0) "ХХХ_НарядЗадание" - даже не хочу представлять, что это за наряд такой и какие там задания)
4 NIGHTHUNTER
 
26.05.22
12:57
Сам вопрос в том что, будет ли работать вот это условие?

        |ГДЕ
        |    ХХХ_НарядЗадание_ОтгруженоЗаказчиком.Ссылка В(&Ссылки)
        |    И ХХХ_НарядЗадание_ОтгруженоЗаказчиком.Ссылка.ПодразделениеЗаказчик = &Грузоотправитель";

Когда идет выборка документа по ссылкам, из первой табличной части, и ещё по условию на подразделение, одно из
5 Kassern
 
26.05.22
12:57
не знаете как отработает соединения таблиц - прочитайте про них, протестируйте на простых примерах с минимальным количеством строк
6 NIGHTHUNTER
 
26.05.22
12:57
(3) Да обычный документ, в использовании. Такие вот кто то придумал идентификаторы. А так ничего необычного.
7 Kassern
 
26.05.22
12:58
(4) вы должны понимать, что ГДЕ отрабатывает уже с итоговой таблицей после СВЯЗИ таблиц
8 NIGHTHUNTER
 
26.05.22
12:58
(5) Сейчас вопрос сработает ли запросы в (1) читать ничего нет времени. Это сейчас нужно выяснить. а не читать что то идти.
9 NIGHTHUNTER
 
26.05.22
13:00
(7) Там нет никаких связей, происходит отбор номенклатуры табличной части документа, по переданным в ГДЕ Ссылкам, из первой табличной части другого документа.
Сработает ли это если накладывается ещё условие в И ?

  |    И ХХХ_НарядЗадание_ОтгруженоЗаказчиком.Ссылка.ПодразделениеЗаказчик = &Грузоотправитель";
10 Kassern
 
26.05.22
13:01
(9) значит еще проще для вас, раз нет. Условия с И отработаются, куда они денутся. Вы не знаете как работает И? Отберутся все строчки, которые удовлетворяют обоим условиям.
11 Ryzeman
 
26.05.22
13:01
(7) ТЫ видишь у него связь таблиц?
12 kobzon2
 
26.05.22
13:02
(8) Что значит сработает ли запрос? В (5) правильно написали, заполни документы минимальными данными и тестируй.
13 Kassern
 
26.05.22
13:04
(11) я даже заглядывать не стал) Не ожидал, что будет вопрос по поводу И в условии) Это же блин самые азы
14 NIGHTHUNTER
 
26.05.22
13:05
(13) Для меня вот это как то необычно было

        |    ХХХ_НарядЗадание_ОтгруженоЗаказчиком.Ссылка В(&Ссылки)

И ещё плюс отбор, как то не мог сообразить как это будет.
15 Kassern
 
26.05.22
13:08
(14) И что тут не обычного? Простое условие на вхождение ссылки в коллекцию. Вот и получается, если ссылка входит в коллекцию и у нее все по жизни хорошо, тогда выводить строчку)
16 Kassern
 
26.05.22
13:09
я одного понять не могу, неужели для вас быстрее написать пост на Мисте, чем просто взять в консоли запросов быстро проверить результат?
17 NIGHTHUNTER
 
26.05.22
13:15
(16) Я открываю консоль сейчас. тут ещё к ней подлезть нужно. И ещё и на тестирование времени может не оказаться.
Я в теории хотел узнать, отрабатывает ли то что я привел в (1). Хоть и таким. не оптимальным образом. Консоль ещё тут только под тонким клиентом может работать.

Я хотел спросить и делать.
18 Kassern
 
26.05.22
13:17
(17) вы так это описываете, как будто целая история - открыть консоль)) Можно же просто через файл->Открыть и все дела. Или же поставить звездочку для быстрого доступа, если прикрутили ее к 1с. Щелк и консоль открылась, туда просто текст запроса вставили и параметры указали. Делов на 2 минуты, вы столько же по времени писали сам пост)
19 NIGHTHUNTER
 
26.05.22
13:19
(18) В голове буря. видимо нет энергии или силы. что бы сидеть самому и рубиться. Может вышла?!
Вчера например. я обнаружил что у меня нет карточки.
Мысли подсказали, что я ее оставил в штанах, что нес, перешивать и подшивать другие. А ателье вчера не работало день. От всего, так.