Имя: Пароль:
1C
1С v8
Передать массив в запрос.
0 slitov
 
27.03.17
15:58
УПП 1.3 (толстый клиент)
Есть задачка вывести отчет по выделенным строкам обработки. Строк может быть несколько, придумал передать их в массив. Но никогда не работал с передачей параметра массив в запрос, помогите пжл, что я делаю не так (((

        МассивСтрок = Новый Массив;
        Для Каждого Строка Из ЭлементыФормы.ТаблицаЗаказов.ВыделенныеСтроки Цикл
        
            
        МассивСтрок.Добавить(Строка);    
        
                
        КонецЦикла;

        Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ПРЕДСТАВЛЕНИЕ(ЗаказПокупателяТовары.Номенклатура),
        |    СУММА(ЗаказПокупателяТовары.КоличествоКоробок) КАК КолКороб,
        |    ЗначенияСвойствОбъектов.Значение КАК Короб,
        |    ЗначенияСвойствОбъектов.Значение.ЕдиницаДляОтчетов.Объем КАК Объем
        |ИЗ
        |    Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары
        |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения
        |        ПО ЗаказПокупателяТовары.Номенклатура = ЕдиницыИзмерения.Владелец
        |            И ЗаказПокупателяТовары.ЕдиницаИзмеренияУпаковки.Наименование = ЕдиницыИзмерения.Наименование
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
        |        ПО ЗаказПокупателяТовары.Номенклатура = ЗначенияСвойствОбъектов.Объект
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектовСопутка
        |        ПО ЗаказПокупателяТовары.Номенклатура = ЗначенияСвойствОбъектовСопутка.Объект
        |ГДЕ
        |    ЗаказПокупателяТовары.Ссылка В(&Заказ)
        |    И ЗаказПокупателяТовары.ЕдиницаИзмеренияУпаковки = &Коробка
        |    И ЗначенияСвойствОбъектов.Свойство.Код = ""20000000904""
        |    И ЗначенияСвойствОбъектовСопутка.Свойство.Код = ""20000000790""
        |    И ЗначенияСвойствОбъектовСопутка.Значение = ЛОЖЬ
        |
        |СГРУППИРОВАТЬ ПО
        |    ЗначенияСвойствОбъектов.Значение,
        |    ЗначенияСвойствОбъектов.Значение.ЕдиницаДляОтчетов.Объем,
        |    ПРЕДСТАВЛЕНИЕ(ЗаказПокупателяТовары.Номенклатура)
        |
        |ОБЪЕДИНИТЬ ВСЕ
        |
        |ВЫБРАТЬ
        |    ПРЕДСТАВЛЕНИЕ(ЗаказПокупателяТовары.Номенклатура),
        |    СУММА(ЗаказПокупателяТовары.КоличествоКоробок),
        |    ""Сопутка"",
        |    ЕдиницыИзмерения.Объем
        |ИЗ
        |    Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары
        |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения
        |        ПО ЗаказПокупателяТовары.Номенклатура = ЕдиницыИзмерения.Владелец
        |            И ЗаказПокупателяТовары.ЕдиницаИзмеренияУпаковки.Наименование = ЕдиницыИзмерения.Наименование
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
        |        ПО ЗаказПокупателяТовары.Номенклатура = ЗначенияСвойствОбъектов.Объект
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектовСопутка
        |        ПО ЗаказПокупателяТовары.Номенклатура = ЗначенияСвойствОбъектовСопутка.Объект
        |ГДЕ
        |    ЗаказПокупателяТовары.Ссылка В(&Заказ)
        |    И ЗаказПокупателяТовары.ЕдиницаИзмеренияУпаковки = &Коробка
        |    И ЗначенияСвойствОбъектов.Свойство.Код = ""20000000904""
        |    И ЗначенияСвойствОбъектовСопутка.Свойство.Код = ""20000000790""
        |    И ЗначенияСвойствОбъектовСопутка.Значение = ИСТИНА
        |
        |СГРУППИРОВАТЬ ПО
        |    ЕдиницыИзмерения.Объем,
        |    ПРЕДСТАВЛЕНИЕ(ЗаказПокупателяТовары.Номенклатура)
        |
        |ОБЪЕДИНИТЬ ВСЕ
        |
        |ВЫБРАТЬ
        |    ВложенныйЗапрос.НоменклатураПредставление,
        |    ВЫРАЗИТЬ(ВложенныйЗапрос.КГ / 8 + 0.499 КАК ЧИСЛО(10, 0)),
        |    Номенклатура.Ссылка,
        |    Номенклатура.ЕдиницаДляОтчетов.Объем
        |ИЗ
        |    (ВЫБРАТЬ
        |        ЗаказПокупателяТовары.Ссылка КАК Ссылка,
        |        СУММА(ЗаказПокупателяТовары.Количество * ЕдиницыИзмерения.Вес) КАК КГ,
        |        ПРЕДСТАВЛЕНИЕ(ЗаказПокупателяТовары.Номенклатура) КАК НоменклатураПредставление
        |    ИЗ
        |        Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары
        |            ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения
        |            ПО ЗаказПокупателяТовары.ЕдиницаИзмерения = ЕдиницыИзмерения.Ссылка
        |    ГДЕ
        |        ЗаказПокупателяТовары.Ссылка = &Заказ
        |        И ЗаказПокупателяТовары.ЕдиницаИзмеренияУпаковки <> &Коробка
        |    
        |    СГРУППИРОВАТЬ ПО
        |        ЗаказПокупателяТовары.Ссылка,
        |        ПРЕДСТАВЛЕНИЕ(ЗаказПокупателяТовары.Номенклатура)) КАК ВложенныйЗапрос,
        |    Справочник.Номенклатура КАК Номенклатура
        |ГДЕ
        |    Номенклатура.Ссылка = &КрасныйЯщик";

        
    Запрос.УстановитьПараметр("Заказ", МассивСтрок);    
    Запрос.УстановитьПараметр("Коробка",Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду("18"));
    Запрос.УстановитьПараметр("КрасныйЯщик", Справочники.Номенклатура.НайтиПоКоду("00000080242"));
        
    Результат = Запрос.Выполнить();

    Макет = ПолучитьМакет("ОтчетОбъем");


Массив содержит много строк, нужная мне строка называется "Заказ", вот как ее передать в запрос, голову уже сломал... Помогите пжл, люди добрые.
1 kolts23381
 
27.03.17
16:01
Передавать надо не массив строк а массив ссылок на заказы.
А в запросе отбор выглядит так
...
ГДЕ ЗаказПокупателяТовары.Ссылка = В Заказ
...
2 slitov
 
27.03.17
16:01
Если в отладке провалиться в массив, то имеем МассивСтрок[0].Заказ
Заказ | Заказ покупателя ТДР00027067 от 20.03.2017 17:51:44 | ДокументСсылка.ЗаказПокупателя
3 olegves
 
27.03.17
16:02
вместо:
ЗаказПокупателяТовары.Ссылка = &Заказ

надо:

ЗаказПокупателяТовары.Ссылка в (&Заказ)


только в массиве не строки должны быть, а ссылки
4 Asmody
 
27.03.17
16:02
(0) Ты в массив собираешь строки табличного поля, а тебе, по логике, нужен массив ссылок на документы.
Т.е., в твоей таблице заказов, по-идее, должна быть колонка типа ДокументСсылка.ЗаказПокупателя. Вот их надо собирать и передавать в запрос.
5 Asmody
 
27.03.17
16:03
(2) Вот и пиши        
МассивСтрок.Добавить(Строка.Заказ);
6 Alexandr_U1982
 
27.03.17
16:04
МассивЗаказов = Новый Массив;
Для Каждого Строка Из ЭлементыФормы.ТаблицаЗаказов.ВыделенныеСтроки Цикл
    МассивЗаказов.Добавить(Строка.Заказ);    
КонецЦикла;
Запрос.УстановитьПараметр("Заказ", МассивЗаказов);


В запросах строчку "= &Заказ" заменить на "В (&Заказ)".
7 Alex_MA
 
27.03.17
16:06
вместо "В" лучше использовать внутреннее соединение, т.к. индекс не всегда может быть использован.
8 Timon1405
 
27.03.17
16:07
-что это у вас в &КрасномЯщике?
-Ааааавтомобиль
9 slitov
 
27.03.17
16:12
(3) (6) Спасибо, помогло ))))
(5) Странно, но передаваемый массив не изменился.
10 dezss
 
27.03.17
16:15
(9) он изменился...просто это не сильно заметно)
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn