Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
20 мая 2024, 06:14

Запросы в макетах

Автор trialex3, 14 июн 2018, 14:34

0 Пользователей и 1 гость просматривают эту тему.

trialex3

Добрый день. Помогите пожалуйста. Есть макет 4 столбцами. В первый столбец выводится циклом Характеристика товара из заказа. Т.Е. если в заказе характеристика А в количестве 20шт и характеристика Б в количестве 5 шт то в макете будет 20 строчек с А и 5 строчек с Б.
Там получается цикл в цикле. Первый обходит характеристики, а второй их количество. На основании характеристики составляется еще 1 запрос. Он ищет все записи в регистре по данной характеристике и выводит их в оставшиеся 3 столбца. Если характеристик 20 а записей 10, то соответственно 10 строчек будут заполнены только 1ым столбцом. Проблема в том что 2ой запрос ведет себя странно и выводит не все записи. т.е. если характеристик 5 и записей 2 то напротив 2-х характеристик должны быть данные, но заполняется только 1ая строчка.
скрин

Хотя если в консоли запросов выполнить запрос например на 2-ую характеристику то получается правильно 2 записи
скрин

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

|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|АР_ИсторияИзделий.КодИзделия.ХарактеристикаСсылка КАК КодИзделияХарактеристикаСсылка,
|участокОТК.НомерИсполнителя КАК НомерОТК,
|АР_ИсторияИзделий.НомерИсполнителя,
|участокОТК.КодИзделия Как КодИзделия
|ИЗ
|РегистрСведений.АР_ИсторияИзделий КАК АР_ИсторияИзделий
| ПОЛНОЕ СОЕДИНЕНИЕ участокОТК КАК участокОТК
| ПО АР_ИсторияИзделий.КодИзделия = участокОТК.КодИзделия
|ГДЕ
|АР_ИсторияИзделий.КодИзделия.ЗаказНаПроизводство = &ссыль
|И АР_ИсторияИзделий.Участок = &участок2
|И АР_ИсторияИзделий.КодИзделия.ХарактеристикаСсылка.Ссылка = &Характеристика
|";

Запрос.УстановитьПараметр("ссыль", СсылкаНаОбъект);
Запрос.УстановитьПараметр("участок1", Участок1);
Запрос.УстановитьПараметр("участок2", Участок2);
    Запрос.УстановитьПараметр("Характеристика", ВыборкаПродукции.ХарактеристикаСсылка);
ВыборкаУчастки = Запрос.Выполнить().Выбрать();
//ВыборкаУчастки.Следующий();

Пока Кол <= ВыборкаПродукции.Количество Цикл  //ЭТО УЖЕ ВТОРОЙ ЦИКЛ КОТОРЫЙ ДЕЛАЕТ ЗАПИСИ ПО КОЛИЧЕСТВУ ХАРАКТЕРИСТИК
ОбластьМакета.Параметры.НомерСтроки = НомСтр;
ОбластьМакета.Параметры.ХарактеристикаНоменклатуры = ВыборкаПродукции.ХарактеристикаНоменклатуры;
// ВОТ ТУТ Я И ЗАНОШУ ДАННЫЕ С МОЕГО ЗАПРОСА
Если ВыборкаУчастки.Следующий() Тогда
ВыборкаУчастки.Следующий();
ОбластьМакета.Параметры.НомерИзделия = ВыборкаУчастки.КодИзделия;
ОбластьМакета.Параметры.Сборщик = ВыборкаУчастки.НомерИсполнителя;
ОбластьМакета.Параметры.ОТК = ВыборкаУчастки.НомерОТК;
Иначе //ТУТ ДЕЛАЮ ПОЛЯ ПУСТЫМИ ЕСЛИ ЗАПИСИ В ЗАПРОСЕ ЗАКОНЧИЛИСЬ
ОбластьМакета.Параметры.НомерИзделия = " ";
ОбластьМакета.Параметры.Сборщик = " ";
ОбластьМакета.Параметры.ОТК = " ";
КонецЕсли;
Если СокрЛП(ВыборкаПродукции.Номенклатура) = "Невозвратная тара-ящики" Тогда
ИначеЕсли СокрЛП(ВыборкаПродукции.Номенклатура) = "Переходы" Тогда
            ИначеЕсли СокрЛП(ВыборкаПродукции.Номенклатура) = "РКДМ" Тогда
ИначеЕсли СокрЛП(ВыборкаПродукции.Номенклатура) = "Приводная система КЛАПАР" или СокрЛП(ВыборкаПродукции.Номенклатура) = "Крышка с рамкой КЛАПАР" или СокрЛП(ВыборкаПродукции.Номенклатура) = "Основание КЛАПАР" Тогда
ОбластьМакета.Параметры.ХарактеристикаНоменклатуры = СокрЛП(ВыборкаПродукции.Номенклатура)+ "("+ВыборкаПродукции.ХарактеристикаНоменклатуры + ")";
ТабДокумент.Вывести(ОбластьМакета);
      НомСтр = НомСтр + 1;
            Иначе
ТабДокумент.Вывести(ОбластьМакета);
НомСтр = НомСтр + 1;
КонецЕсли;
Кол = Кол + 1;
КонецЦикла;
   КонецЦикла;


trialex3

Может быть функция Следующий() не срабатывает...Но если вместо нее использовать условие ЗначениеЗаполнено или Не Неопределено то он копирует 1-у строку на весь макет...
Добавлено: 15 июн 2018, 09:34


проблема решена

Теги:  

Похожие темы (5)

Рейтинг@Mail.ru

Поиск