Вывожу на макет Варианты исполнения. И вот у Варианта Лайм софт два варианта поставщика, и вот последняя пустая не добавляется
А у белый софт-Белый/с должен быть в последнем столбце,т.е. до него должны добавиться 2 пустых варианта поставщика.
Подскажите пожалуйста,как подправить...
А у белый софт-Белый/с должен быть в последнем столбце,т.е. до него должны добавиться 2 пустых варианта поставщика.
Подскажите пожалуйста,как подправить...
Если _ИмяГр = "ВариантИсполнения" тогда
СтруктураОтбора = Новый Структура("Номенклатура,ВариантИсполнения", ВхЗапрВыб.Номенклатура, ВхЗапрВыб.ВариантИсполнения);
МассивПост=ТаблНомПост.НайтиСтроки(СтруктураОтбора);
Если МассивПост.Количество() = 0 Тогда
Сч=0;
пока Сч<>3 Цикл
Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Поставщик");
ВхТаблДок.Присоединить(Область);
Сч=Сч+1;
КонецЦикла;
КонецЕсли;
Сч2=0;
Для Каждого стр из МассивПост цикл
Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Поставщик");
Если _ИмяГр = "ВариантИсполнения" и ТипЗнч(стр.Поставщик) = Тип("СправочникСсылка.Контрагенты")
тогда
Область.Параметры.ЗначениеГрСтрПостав = стр.ВариантИсполненияПоставщика;
ВхТаблДок.Присоединить(Область);
Сч2=Сч2+1;
КонецЕсли;
Если Сч2 = 3 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
ПоказатьПрикрепленные файлы:
По теме из базы знаний
- Как присоединить области с разным количеством строк? Способ формирования печатной формы под тип ценников, но с различными по высоте областями.
- Отражение зарплаты в бухучете: вывод изменений при перезаполнении и свертка таблиц
- Печать макета MS Word в любом документе с помощью БСП
- По-настоящему свои макеты в отчетах СКД. Исследование процесса компоновки и генерация кода отчета
- Печать гарантийных талонов для Розницы 2.3 (расширение)
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Вместо этого
так:
МассивПост=ТаблНомПост.НайтиСтроки(СтруктураОтбора);
Если МассивПост.Количество() = 0 Тогда
Сч=0;
пока Сч<>3 Цикл
Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Поставщик");
ВхТаблДок.Присоединить(Область);
Сч=Сч+1;
КонецЦикла;
Если МассивПост.Количество() = 0 Тогда
Сч=0;
пока Сч<>3 Цикл
Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Поставщик");
ВхТаблДок.Присоединить(Область);
Сч=Сч+1;
КонецЦикла;
так:
МассивПост=ТаблНомПост.НайтиСтроки(СтруктураОтбора);
Если МассивПост.Количество() < 3 Тогда
Сч=МассивПост.Количество();
пока Сч<>3 Цикл
Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Поставщик");
ВхТаблДок.Присоединить(Область);
Сч=Сч+1;
КонецЦикла;
(2)нет, я вот в этом месте перебираю элементы массива,присваиваю и присоединяю область,а в том месте где вы попросили поправить,я вывожу пустые строки в том случае если массив пустой
Для Каждого стр из МассивПост цикл
Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Поставщик");
Если _ИмяГр = "ВариантИсполнения" и ТипЗнч(стр.Поставщик) = Тип("СправочникСсылка.Контрагенты")
тогда
Область.Параметры.ЗначениеГрСтрПостав = стр.ВариантИсполненияПоставщика;
ВхТаблДок.Присоединить(Область);
Сч2=Сч2+1;
КонецЕсли;
Если Сч2 = 3 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Показать
(4) МассивПост.Количество() < 3 так не пойдет,у меня там группировки и количество не верное. Пробую сделать вот так,но когда массив пустой,то выходит ошибка- Индекс находится вне границ массива
Если МассивПост[0].Поставщик < 3 Тогда
Сч=МассивПост[0].Поставщик;
пока Сч<>3 Цикл
Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Поставщик");
ВхТаблДок.Присоединить(Область);
Сч=Сч+1;
КонецЦикла;
КонецЕсли;
Показать
(5)Тогда так:
Если _ИмяГр = "ВариантИсполнения" тогда
СтруктураОтбора = Новый Структура("Номенклатура,ВариантИсполнения", ВхЗапрВыб.Номенклатура, ВхЗапрВыб.ВариантИсполнения);
МассивПост=ТаблНомПост.НайтиСтроки(СтруктураОтбора);
Сч2=0;
Для Каждого стр из МассивПост цикл
Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Поставщик");
Если _ИмяГр = "ВариантИсполнения" и ТипЗнч(стр.Поставщик) = Тип("СправочникСсылка.Контрагенты")
тогда
Область.Параметры.ЗначениеГрСтрПостав = стр.ВариантИсполненияПоставщика;
ВхТаблДок.Присоединить(Область);
Сч2=Сч2+1;
КонецЕсли;
Если Сч2 = 3 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Для Сч = Сч2 По 2 Цикл
Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Поставщик");
ВхТаблДок.Присоединить(Область);
КонецЦикла;
КонецЕсли;
Показать
(7)
Ладно, тогда так6
Просто по скрину не очень понятно, что не так, как должно быть и какой код за что отвечает.
Ладно, тогда так6
Если _ИмяГр = "ВариантИсполнения" тогда
СтруктураОтбора = Новый Структура("Номенклатура,ВариантИсполнения", ВхЗапрВыб.Номенклатура, ВхЗапрВыб.ВариантИсполнения);
МассивПост=ТаблНомПост.НайтиСтроки(СтруктураОтбора);
КоличествоЗаполненныхПоставщиков = 0;
Для Каждого стр из МассивПост цикл
Если _ИмяГр = "ВариантИсполнения"
И ТипЗнч(стр.Поставщик) = Тип("СправочникСсылка.Контрагенты") Тогда
КоличествоЗаполненныхПоставщиков = КоличествоЗаполненныхПоставщиков + 1;
КонецЕсли;
Если КоличествоЗаполненныхПоставщиков = 3 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Для Сч = КоличествоЗаполненныхПоставщиков По 2 Цикл
Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Поставщик");
ВхТаблДок.Присоединить(Область);
КонецЦикла;
Сч2=0;
Для Каждого стр из МассивПост цикл
Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Поставщик");
Если _ИмяГр = "ВариантИсполнения" и ТипЗнч(стр.Поставщик) = Тип("СправочникСсылка.Контрагенты")
тогда
Область.Параметры.ЗначениеГрСтрПостав = стр.ВариантИсполненияПоставщика;
ВхТаблДок.Присоединить(Область);
Сч2=Сч2+1;
КонецЕсли;
Если Сч2 = 3 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли
ПоказатьПросто по скрину не очень понятно, что не так, как должно быть и какой код за что отвечает.
(11)
Процедура ВывестиГруппировку(ВхМакет, ВхЗапрВыб, ВхТипГр, ВхНомГр, ВхТаблГр, ВхУровень, ВхТаблДок, ВхТаблПакетныйЗаказПоставщику = Неопределено)
РезультатыЗапросаПост = ПолучитьДанные();
РезультатЗапросаПост = РезультатыЗапросаПост[2];
ТаблНомПост = РезультатЗапросаПост.Выгрузить();
_ДнейВМесяце = 30;
Если ВхУровень >= 5 Тогда // максимум 5 уровней (0-4)
Возврат;
КонецЕсли;
_ИмяСекции = ?(ВхТипГр = "Строки", "Гр" + ВхУровень, "ГрИтоги");
_ИмяГр = ВхТаблГр[ВхНомГр].ИмяИзмерения;
_ВыводитьИтогиПоГруппировке = ВхТаблГр[ВхНомГр].ВыводитьИтоги;
_ТипИзмерения = ВхТаблГр[ВхНомГр].ТипИзмерения;
Пока ВхЗапрВыб.Следующий() Цикл
// "_ИмяСекции|Начало"
Если ВхТипГр = "Итоги" Тогда
Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Начало");
ВхТаблДок.Вывести(Область, ВхУровень);
Иначе
_ЗначениеГр = ВхЗапрВыб[_ИмяГр]; // значение группировки по имени
Если ВхНомГр = (ВхТаблГр.Количество() - 1) И _ИмяГр = "ВариантИсполнения" Тогда // последняя группировка ("ВариантИсполнения")
Если глПустоеЗначение(_ЗначениеГр) Тогда
Продолжить;
КонецЕсли;
КонецЕсли;
Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Начало");
Если ТипЗнч(_ЗначениеГр) = Тип("СправочникСсылка.Номенклатура") Тогда
Если _ЗначениеГр.ЭтоГруппа Тогда
Область.Параметры.ЗначениеГрСтр = ВРЕГ(глНоменклатураСтр(_ЗначениеГр));
Иначе
Если мИспользоватьАртикулы Тогда
Область.Параметры.Артикул = _ЗначениеГр.Артикул;
КонецЕсли;
Область.Параметры.ЗначениеГрСтр = глНоменклатураСтр(_ЗначениеГр, Ложь) + ", " + _ЗначениеГр[ИспользуемыеЕдиницыИзмерения];
// для номенклатуры (элементов -> итоги будем выводить при условии, что тип измерения выбран как "Иерархия")
Если _ТипИзмерения = ТипИзмеренияПостроителяОтчета.Иерархия Тогда
_ВыводитьИтогиПоГруппировке = Истина;
КонецЕсли;
КонецЕсли;
Иначе
Если мИспользоватьАртикулы
И ТипЗнч(_ЗначениеГр) = Тип("СправочникСсылка.ВариантыИсполнения") Тогда
Область.Параметры.Артикул = _ЗначениеГр.Артикул;
КонецЕсли;
Область.Параметры.ЗначениеГрСтр = _ЗначениеГр;
КонецЕсли;
Область.Параметры.Расшифровка = _ЗначениеГр;
ВхТаблДок.Вывести(Область, ВхУровень);
КонецЕсли;
// "_ИмяСекции|ВертикальныйРазделитель"
Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|ВертикальныйРазделитель1");
ВхТаблДок.Присоединить(Область);
Если _ИмяГр = "ОснПоставщик" тогда
Сч=0;
пока Сч<>3 Цикл
Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Поставщик");
ВхТаблДок.Присоединить(Область);
Сч=Сч+1;
КонецЦикла;
КонецЕсли;
Если _ИмяГр = "Номенклатура" тогда
Отбор=Новый Структура("Номенклатура",ВхЗапрВыб.Номенклатура);
МассивПост=ТаблНомПост.НайтиСтроки(Отбор);
Сч1=0;
Для Каждого стр из МассивПост цикл
Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Поставщик");
Если _ИмяГр = "Номенклатура" // И ВхЗапрВыб.РазрешитьНесколькоВариантовИсполнения
и
ТипЗнч(стр.Поставщик) = Тип("СправочникСсылка.Контрагенты")
Тогда
Область.Параметры.ЗначениеГрСтрПостав =""""+Строка(стр.Поставщик)+""""+ " " + Строка(стр.НоменклатураПоставщика);
ВхТаблДок.Присоединить(Область);
Сч1=Сч1+1;
КонецЕсли;
Если Сч1 = 3 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Для Сч = Сч1 По 2 Цикл
Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Поставщик");
ВхТаблДок.Присоединить(Область);
КонецЦикла;
КонецЕсли;
//
Если _ИмяГр = "ВариантИсполнения" тогда
СтруктураОтбора = Новый Структура("Номенклатура,ВариантИсполнения", ВхЗапрВыб.Номенклатура, ВхЗапрВыб.ВариантИсполнения);
МассивПост=ТаблНомПост.НайтиСтроки(СтруктураОтбора);
КоличествоЗаполненныхПоставщиков = 0;
Для Каждого стр из МассивПост цикл
Если _ИмяГр = "ВариантИсполнения"
И ТипЗнч(стр.Поставщик) = Тип("СправочникСсылка.Контрагенты") Тогда
КоличествоЗаполненныхПоставщиков = КоличествоЗаполненныхПоставщиков + 1;
КонецЕсли;
Если КоличествоЗаполненныхПоставщиков = 3 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Для Сч = КоличествоЗаполненныхПоставщиков По 2 Цикл
Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Поставщик");
ВхТаблДок.Присоединить(Область);
КонецЦикла;
Сч2=0;
Для Каждого стр из МассивПост цикл
Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Поставщик");
Если _ИмяГр = "ВариантИсполнения" и ТипЗнч(стр.Поставщик) = Тип("СправочникСсылка.Контрагенты")
тогда
Область.Параметры.ЗначениеГрСтрПостав = стр.ВариантИсполненияПоставщика;
ВхТаблДок.Присоединить(Область);
Сч2=Сч2+1;
КонецЕсли;
Если Сч2 = 3 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Показать
(12)Когда вы выводите группировку с колонками, видимо, поставщиков, вам надо запомнить порядок их вывода.
И потом, когда выводится группировка "ВариантИсполнения" - искать не просто по номенклатуре и варианту исполнения, но и по поставщику, графа которого выводится.
Если нашли - выводится область с данными, если не нашли, то выводится пустая область.
И потом, когда выводится группировка "ВариантИсполнения" - искать не просто по номенклатуре и варианту исполнения, но и по поставщику, графа которого выводится.
Если нашли - выводится область с данными, если не нашли, то выводится пустая область.
(15)Возможно, так:
Процедура ВывестиГруппировку(ВхМакет, ВхЗапрВыб, ВхТипГр, ВхНомГр, ВхТаблГр, ВхУровень, ВхТаблДок, ВхТаблПакетныйЗаказПоставщику = Неопределено)
РезультатыЗапросаПост = ПолучитьДанные();
РезультатЗапросаПост = РезультатыЗапросаПост[2];
ТаблНомПост = РезультатЗапросаПост.Выгрузить();
_ДнейВМесяце = 30;
Если ВхУровень >= 5 Тогда // максимум 5 уровней (0-4)
Возврат;
КонецЕсли;
_ИмяСекции = ?(ВхТипГр = "Строки", "Гр" + ВхУровень, "ГрИтоги");
_ИмяГр = ВхТаблГр[ВхНомГр].ИмяИзмерения;
_ВыводитьИтогиПоГруппировке = ВхТаблГр[ВхНомГр].ВыводитьИтоги;
_ТипИзмерения = ВхТаблГр[ВхНомГр].ТипИзмерения;
Пока ВхЗапрВыб.Следующий() Цикл
// "_ИмяСекции|Начало"
Если ВхТипГр = "Итоги" Тогда
Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Начало");
ВхТаблДок.Вывести(Область, ВхУровень);
Иначе
_ЗначениеГр = ВхЗапрВыб[_ИмяГр]; // значение группировки по имени
Если ВхНомГр = (ВхТаблГр.Количество() - 1) И _ИмяГр = "ВариантИсполнения" Тогда // последняя группировка ("ВариантИсполнения")
Если глПустоеЗначение(_ЗначениеГр) Тогда
Продолжить;
КонецЕсли;
КонецЕсли;
Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Начало");
Если ТипЗнч(_ЗначениеГр) = Тип("СправочникСсылка.Номенклатура") Тогда
Если _ЗначениеГр.ЭтоГруппа Тогда
Область.Параметры.ЗначениеГрСтр = ВРЕГ(глНоменклатураСтр(_ЗначениеГр));
Иначе
Если мИспользоватьАртикулы Тогда
Область.Параметры.Артикул = _ЗначениеГр.Артикул;
КонецЕсли;
Область.Параметры.ЗначениеГрСтр = глНоменклатураСтр(_ЗначениеГр, Ложь) + ", " + _ЗначениеГр[ИспользуемыеЕдиницыИзмерения];
// для номенклатуры (элементов -> итоги будем выводить при условии, что тип измерения выбран как "Иерархия")
Если _ТипИзмерения = ТипИзмеренияПостроителяОтчета.Иерархия Тогда
_ВыводитьИтогиПоГруппировке = Истина;
КонецЕсли;
КонецЕсли;
Иначе
Если мИспользоватьАртикулы
И ТипЗнч(_ЗначениеГр) = Тип("СправочникСсылка.ВариантыИсполнения") Тогда
Область.Параметры.Артикул = _ЗначениеГр.Артикул;
КонецЕсли;
Область.Параметры.ЗначениеГрСтр = _ЗначениеГр;
КонецЕсли;
Область.Параметры.Расшифровка = _ЗначениеГр;
ВхТаблДок.Вывести(Область, ВхУровень);
КонецЕсли;
// "_ИмяСекции|ВертикальныйРазделитель"
Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|ВертикальныйРазделитель1");
ВхТаблДок.Присоединить(Область);
Если _ИмяГр = "ОснПоставщик" тогда
Сч=0;
пока Сч<>3 Цикл
Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Поставщик");
ВхТаблДок.Присоединить(Область);
Сч=Сч+1;
КонецЦикла;
КонецЕсли;
Если _ИмяГр = "Номенклатура" тогда
Отбор=Новый Структура("Номенклатура",ВхЗапрВыб.Номенклатура);
МассивПост=ТаблНомПост.НайтиСтроки(Отбор);
МассивПоставщиковГруппировки = Новый Массив;
Сч1=0;
Для Каждого стр из МассивПост цикл
Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Поставщик");
Если _ИмяГр = "Номенклатура" // И ВхЗапрВыб.РазрешитьНесколькоВариантовИсполнения
и
ТипЗнч(стр.Поставщик) = Тип("СправочникСсылка.Контрагенты")
Тогда
Область.Параметры.ЗначениеГрСтрПостав =""""+Строка(стр.Поставщик)+""""+ " " + Строка(стр.НоменклатураПоставщика);
ВхТаблДок.Присоединить(Область);
Сч1=Сч1+1;
МассивПоставщиковГруппировки.Добавить(стр.Поставщик);
КонецЕсли;
Если Сч1 = 3 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Для Сч = Сч1 По 2 Цикл
Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Поставщик");
ВхТаблДок.Присоединить(Область);
КонецЦикла;
КонецЕсли;
//
Если _ИмяГр = "ВариантИсполнения" тогда
Для Инд = 0 По 2 Цикл
Если МассивПоставщиковГруппировки.Количество()>Инд Тогда
ТекПоставщик = МассивПоставщиковГруппировки[Инд];
Иначе
ТекПоставщик = Неопределено;
КонецЕсли;
СтруктураОтбора = Новый Структура("Номенклатура,ВариантИсполнения,Поставщик", ВхЗапрВыб.Номенклатура, ВхЗапрВыб.ВариантИсполнения,ТекПоставщик);
МассивПост=ТаблНомПост.НайтиСтроки(СтруктураОтбора);
Если МассивПост.Количество() Тогда
Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Поставщик");
Область.Параметры.ЗначениеГрСтрПостав = МассивПост[0].ВариантИсполненияПоставщика;
ВхТаблДок.Присоединить(Область);
Иначе
Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Поставщик");
ВхТаблДок.Присоединить(Область);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот