Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2, свеженьких 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Массив как параметр для запроса , Ошибка "Не задано значение параметра..."          
sanytch Подменю пользователя
сообщение 30.09.16, 11:25
Сообщение #1

Говорящий
***
Группа: Пользователи
Сообщений: 93
Спасибо сказали: 0 раз
Рейтинг: 0

Здравствуйте, Такая вот проблема:
Запрос формирует количественный оборот с отбором по Номенклатурным Группам. Список групп для передачи в запрос как параметр, формирую в массив, но...
Приведу фрагменты кода где формирую массив
Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    НоменклатурныеГруппы.Наименование КАК НаименованиеГруппы
    |ИЗ
    |    Справочник.НоменклатурныеГруппы КАК НоменклатурныеГруппы";
    
    Результат = Запрос.Выполнить().Выбрать();
    Если Результат = 0 Тогда
        Возврат
    КонецЕсли;
    
    СпНомГрупп = Новый Массив;
    Пока Результат.Следующий() Цикл
        СпНомГрупп.Добавить(Результат.НаименованиеГруппы);
    КонецЦикла;

и использую его как параметр
    |ВложенныйЗапрос.НоменклатурнаяГруппа В(&СпНомГрупп)

и получаю в результате

Ситуация осложнена тем что наименования номенклатурных групп имеют вид - ХХ-Наименование, где ХХ - число. Отчет формируется в 2-х вариантах т.к. номенклатурные группы разделены как раз по ХХ на 2 вида, но это уже другая задача. Я же не могу получить результат даже без деления номенклатурных групп.

этот же запрос отлично отрабатывает в СКД, но при переносе в модуль не работает...

Посему прошу помощи и буду благодарен за любые наставления.

podcast Подменю пользователя
сообщение 30.09.16, 11:49
Сообщение #2

Оратор
Иконка группы
Группа: Местный
Сообщений: 306
Спасибо сказали: 74 раз
Рейтинг: 0

sanytch @ Сегодня, 12:25 * ,
А где вы задаете значение параметра? Ошибка что не задан параметр.
Запрос.УстановитьПараметр("НазваниеПараметра", СпНомГрупп);


sanytch Подменю пользователя
сообщение 30.09.16, 12:34
Сообщение #3

Говорящий
***
Группа: Пользователи
Сообщений: 93
Спасибо сказали: 0 раз
Рейтинг: 0

podcast @ Сегодня, 12:49 *
Извиняюсь, забыл про эту строчку - она есть конечно же
    Запрос.УстановитьПараметр("НоменклатурнаяГруппа", СпНомГрупп);

Как бы увидеть сам массив или в каком виде нужно передать параметр из нескольких значений? в СКД в параметрах вот так выглядит

Не обращайте внимание на названия Групп, баловался smile.gif
Даже уже из значений массива формировал строковую переменную, в которой значения разделял и , и ; но все равно ничего

Acid Подменю пользователя
сообщение 30.09.16, 12:55
Сообщение #4

Про1С-ник
Иконка группы
За заслуги на форуме в 2010 году
Группа: Местный
Сообщений: 2104
Из: Занзибар
Спасибо сказали: 377 раз
Рейтинг: 260.7

sanytch @ Сегодня, 13:34 * ,
Покажите текст запроса полностью.


Signature

Документируйте Код! мать вашу...


logist Подменю пользователя
сообщение 30.09.16, 13:20
Сообщение #5

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Цитата(sanytch @ 30.09.16, 12:25) *
Приведу фрагменты кода где формирую массив

Научиться программировать на 8-ке возможно, разучиться программировать на 7-ке никогда...


Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    НоменклатурныеГруппы.Наименование КАК НаименованиеГруппы
    |ИЗ
    |    Справочник.НоменклатурныеГруппы КАК НоменклатурныеГруппы";
    
    СпНомГрупп = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("НаименованиеГруппы");


    Если Результат = 0 Тогда
        Возврат
    КонецЕсли;

Странно, а тут у вас ошибку не выдает? Ведь в вашем код Результат будет не число и не булевою


Signature
Личные бесплатные консультации не даю, для этого есть форум!

sanytch Подменю пользователя
сообщение 30.09.16, 13:35
Сообщение #6

Говорящий
***
Группа: Пользователи
Сообщений: 93
Спасибо сказали: 0 раз
Рейтинг: 0

logist @ Сегодня, 14:20 * ,
Да нет, все нормально. upset.gif

Acid @ Сегодня, 13:55 * ,
Вот так в модуле
    Запрос.Текст = 
    "
    |ВЫБРАТЬ
    |ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Номенклатура,
    |ВложенныйЗапрос.Коэффициент КАК "+?(ТипА = 1,"Литраж","ШТвПач")+",
    |ХозрасчетныйОстаткиИОбороты.КоличествоОборотДт КАК ОборотДТ,
    |ХозрасчетныйОстаткиИОбороты.КоличествоОборотДт * ВложенныйЗапрос.Коэффициент / "+?(ТипА=1,"10000","1000000")+" КАК ВсегоПриобретено"+?(ТипА=1,"ТысДал","МлнШт")+",
    |ХозрасчетныйОстаткиИОбороты.КоличествоОборотКт КАК ОборотКТ,
    |ХозрасчетныйОстаткиИОбороты.КоличествоОборотКт * ВложенныйЗапрос.Коэффициент / "+?(ТипА=1,"10000","1000000")+" КАК ВсегоРеализовано"+?(ТипА=1,"ТысДал","МлнШт")+",
    |ХозрасчетныйОстаткиИОбороты.КоличествоНачальныйОстаток КАК НачОстаток,
    |ХозрасчетныйОстаткиИОбороты.КоличествоКонечныйОстаток КАК КонОстаток,
    |ХозрасчетныйОстаткиИОбороты.КоличествоНачальныйОстаток * ВложенныйЗапрос.Коэффициент / "+?(ТипА=1,"10000","1000000")+" КАК НачОстаток"+?(ТипА=1,"ТысДал","МлнШт")+",
    |ХозрасчетныйОстаткиИОбороты.КоличествоКонечныйОстаток * ВложенныйЗапрос.Коэффициент / "+?(ТипА=1,"10000","1000000")+" КАК КонОстаток"+?(ТипА=1,"ТысДал","МлнШт")+",
    |ХозрасчетныйОстаткиИОбороты.ПериодСекунда,
    |ВложенныйЗапрос.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа
    |ИЗ
    |РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачПериода, &КонПериода, Авто, ДвиженияИГраницыПериода, , , ) КАК ХозрасчетныйОстаткиИОбороты
    |    ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    |        НоменклатураЕдиницыИзмерения.Коэффициент КАК Коэффициент,
    |        НоменклатураЕдиницыИзмерения.Ссылка КАК Номен,
    |        НоменклатураЕдиницыИзмерения.Ссылка.НаименованиеПолное КАК НаименованиеПолное,
    |        НоменклатураЕдиницыИзмерения.Ссылка.Наименование КАК Наименование,
    |        Номенклатура.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа
    |    ИЗ
    |        Справочник.Номенклатура.ЕдиницыИзмерения КАК НоменклатураЕдиницыИзмерения
    |            ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
    |            ПО НоменклатураЕдиницыИзмерения.Ссылка = Номенклатура.Ссылка
    |    ГДЕ
    |        НоменклатураЕдиницыИзмерения.ЕдиницаИзмерения = &ЕдИзм) КАК ВложенныйЗапрос
    |    ПО ХозрасчетныйОстаткиИОбороты.Субконто1 = ВложенныйЗапрос.Номен
    |ГДЕ
    |ВложенныйЗапрос.НоменклатурнаяГруппа В(&СпНомГрупп)
    |
    |     СГРУППИРОВАТЬ ПО
    |     ХозрасчетныйОстаткиИОбороты.ПериодСекунда,
    |     ХозрасчетныйОстаткиИОбороты.Субконто1,
    |     ВложенныйЗапрос.Коэффициент,
    |     ХозрасчетныйОстаткиИОбороты.КоличествоОборотДт,
    |     ХозрасчетныйОстаткиИОбороты.КоличествоОборотКт,
    |     ХозрасчетныйОстаткиИОбороты.КоличествоНачальныйОстаток,
    |     ХозрасчетныйОстаткиИОбороты.КоличествоКонечныйОстаток,
    |ВложенныйЗапрос.НоменклатурнаяГруппа
    |
    |УПОРЯДОЧИТЬ ПО
    |НоменклатурнаяГруппа";

а так в СКД
ВЫБРАТЬ
    ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Номенклатура,
    ВложенныйЗапрос.Коэффициент КАК Литраж,
    ХозрасчетныйОстаткиИОбороты.КоличествоОборотДт КАК ОборотДТ,
    ХозрасчетныйОстаткиИОбороты.КоличествоОборотДт * ВложенныйЗапрос.Коэффициент / 1000000 КАК ВсегоПриобретеноТысДал,
    ХозрасчетныйОстаткиИОбороты.КоличествоОборотКт КАК ОборотКТ,
    ХозрасчетныйОстаткиИОбороты.КоличествоОборотКт * ВложенныйЗапрос.Коэффициент / 1000000 КАК ВсегоРеализованоТысДал,
    ХозрасчетныйОстаткиИОбороты.КоличествоНачальныйОстаток КАК НачОстаток,
    ХозрасчетныйОстаткиИОбороты.КоличествоКонечныйОстаток КАК КонОстаток,
    ХозрасчетныйОстаткиИОбороты.КоличествоНачальныйОстаток * ВложенныйЗапрос.Коэффициент / 1000000 КАК НачОстатокДал,
    ХозрасчетныйОстаткиИОбороты.КоличествоКонечныйОстаток * ВложенныйЗапрос.Коэффициент / 1000000 КАК КонОстатокДал,
    ХозрасчетныйОстаткиИОбороты.ПериодСекунда,
    ВложенныйЗапрос.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа
ИЗ
    РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(, , Авто, ДвиженияИГраницыПериода, , , ) КАК ХозрасчетныйОстаткиИОбороты
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            НоменклатураЕдиницыИзмерения.Коэффициент КАК Коэффициент,
            НоменклатураЕдиницыИзмерения.Ссылка КАК Номен,
            НоменклатураЕдиницыИзмерения.Ссылка.НаименованиеПолное КАК НаименованиеПолное,
            НоменклатураЕдиницыИзмерения.Ссылка.Наименование КАК Наименование,
            Номенклатура.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа
        ИЗ
            Справочник.Номенклатура.ЕдиницыИзмерения КАК НоменклатураЕдиницыИзмерения
                ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
                ПО НоменклатураЕдиницыИзмерения.Ссылка = Номенклатура.Ссылка
        ГДЕ
            НоменклатураЕдиницыИзмерения.ЕдиницаИзмерения = &ЕдиницаИзмерения) КАК ВложенныйЗапрос
        ПО ХозрасчетныйОстаткиИОбороты.Субконто1 = ВложенныйЗапрос.Номен,
    (ВЫБРАТЬ
        КонтактнаяИнформация.Объект КАК Контрагент,
        ВЫРАЗИТЬ(КонтактнаяИнформация.Представление КАК СТРОКА(200)) КАК Адрес
    ИЗ
        РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация) КАК ЗапросАдреса
ГДЕ
    ВложенныйЗапрос.НоменклатурнаяГруппа В(&НоменклатурнаяГруппа)

СГРУППИРОВАТЬ ПО
    ХозрасчетныйОстаткиИОбороты.ПериодСекунда,
    ХозрасчетныйОстаткиИОбороты.Субконто1,
    ВложенныйЗапрос.Коэффициент,
    ХозрасчетныйОстаткиИОбороты.КоличествоОборотДт,
    ХозрасчетныйОстаткиИОбороты.КоличествоОборотКт,
    ХозрасчетныйОстаткиИОбороты.КоличествоНачальныйОстаток,
    ХозрасчетныйОстаткиИОбороты.КоличествоКонечныйОстаток,
    ВложенныйЗапрос.НоменклатурнаяГруппа

УПОРЯДОЧИТЬ ПО
    НоменклатурнаяГруппа


в СКД формируются обороты только по алкоголю, а в модуле сделал чтобы и по алкоголю и по табаку. Чтобы было понятнее это отчеты 1РА и 1РТ, в которых нужно отобразить обороты по алкоголю в тыс.дал (1 дал = 10л.) и по табаку в млн.шт.

Acid Подменю пользователя
сообщение 30.09.16, 14:30
Сообщение #7

Про1С-ник
Иконка группы
За заслуги на форуме в 2010 году
Группа: Местный
Сообщений: 2104
Из: Занзибар
Спасибо сказали: 377 раз
Рейтинг: 260.7

sanytch @ Сегодня, 14:35 * ,
нет, так не пойдет.
Во-первых - Отбор надо делать первым делом в вашем вложенном запросе.
Во-вторых - левое соединение соединяется по совсем разным объектам.
В-третих - ваш вложенный запрос надо поставить основным, а к нему уже присоединять данные по бухгалтерии.

Конструируйте ваш запрос - небольшими этапами. так легче.

Сообщение отредактировал Acid - 30.09.16, 14:33


Signature

Документируйте Код! мать вашу...


Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 19.04.24, 4:36
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!