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

Обработка запроса печатной формы

Автор Dmitrii_VVV, 18 авг 2023, 10:00

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

Dmitrii_VVV


Всем доброго!

Учебная конф-я

Делаю свою вторую печатную форму)

Проблемы:
1. При выводе на печать дублируется колонка Товар

2. В шапку необходимо вывести Контрагента, они лежат в справочнике, не понимаю как добавить

Код:


&НаКлиенте
Процедура Печать(Команда)
   
    ТабДок = Новый ТабличныйДокумент;
    ПечатьДок(ТабДок,ДокументСсылка);
   
    ТабДок.Показать();
   
КонецПроцедуры


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

    Выборка = РезультатЗапроса.Выбрать();
   
    СтрокиТаблицы = МакетОбработки.ПолучитьОбласть("СтрокаТаблицы");
    Пока Выборка.Следующий() Цикл
        СтрокиТаблицы.Параметры.Заполнить(Выборка);
        Табдок.Вывести(СтрокиТаблицы);
    КонецЦикла;
   
  КонецЦикла;
КонецЦикла;

   
    //Заполняем подвал
    ОбластьПодвал = МакетОбработки.ПолучитьОбласть("Подвал");
    ОбластьПодвал.Параметры.СуммаИтого = Ссылка.СписокНоменклатуры.Итог("Сумма");
   
    ТабДок.Вывести(ОбластьПодвал);

КонецПроцедуры

Скрины:

https://wampi.ru/image/RIhz88E

https://wampi.ru/image/RIhzOoP



Максим75

Dmitrii_VVV, в запросе выбраны вообще все поля, вопрос: ЗАЧЕМ???
вот есть такой прием, выкладываю код
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПриходнаяНакладная.Номер КАК Номер,
| ПриходнаяНакладная.Дата КАК Дата,
| ПриходнаяНакладная.СуммаДокумента КАК СуммаДокумента,
| ПриходнаяНакладная.Поставщик.Наименование КАК Поставщик
|ИЗ
| Документ.ПриходнаяНакладная КАК ПриходнаяНакладная
|ГДЕ
| ПриходнаяНакладная.Ссылка = &СсылкаНаДокумент
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ПриходнаяНакладнаяТМЦ.НомерСтроки КАК НомерСтроки,
| ПриходнаяНакладнаяТМЦ.Товар.Наименование КАК Товар,
| ПриходнаяНакладнаяТМЦ.Колво КАК Колво,
| ПриходнаяНакладнаяТМЦ.Цена КАК Цена,
| ПриходнаяНакладнаяТМЦ.Сумма КАК Сумма
|ИЗ
| Документ.ПриходнаяНакладная.ТМЦ КАК ПриходнаяНакладнаяТМЦ
|ГДЕ
| ПриходнаяНакладнаяТМЦ.Ссылка = &СсылкаНаДокумент";

Запрос.УстановитьПараметр("СсылкаНаДокумент", СсылкаНаДокумент);

МассивРезультатовЗапроса = Запрос.ВыполнитьПакет();//выполняется пакет запросов
//один по шапке документа
//второй по табличной части
//получаем массив результатов выполнения запроса
//обращение к каждому результату как к элементы массива.

ВыборкаШапка = МассивРезультатовЗапроса[0].Выбрать();//выборка по первому элементу массива, т.е. по шапке документа
ВыборкаТовары = МассивРезультатовЗапроса[1].Выбрать();//выборка по второму элементу массива, т.е. по табличной части товары

ВыборкаШапка.Следующий();//в выборке всего 1 строка, поэтому на ней и позиционируемся


Пока ВыборкаТовары.Следующий() цикл
// тоже пишем вывод уже табличной части
КОнецЦикла;

смысл следующий: делается пакет запросов по шапке и табличной части нужного дока, пакет выполняется, получается массив результатов запроса, в первом элементе массива данные шапки, во втором элементе массива данные табличной части.
и с каждой выборкой уже потом работаете и получаете то, что нужно. Поставщика (клиента) берете с первой выборки и выводите в табличный документ, ну а все товары берете со второй выборки.

LexaK

Dmitrii_VVV, у вас уже есть нормальный/рабочий пример печати формы документа.
возьмите его за пример и по его аналогии сделайте новую печатную форму.
80-90% разработки в 1С именно так и происходит, берется уже готовый алгоритм/код и дорабатывается под новую задачу
(особенно печатные формы, по одному документу их может быть десятки,
делаяется копия, подправляется и вот у вас уже несколько Печатных форм одного документа)

если помогло нажмите: Спасибо!

Dmitrii_VVV

Цитата: Максим75 от 18 авг 2023, 10:17Dmitrii_VVV, в запросе выбраны вообще все поля, вопрос: ЗАЧЕМ???
Конф-я учебная, набиваю руку , так сказать) понимаю, что так не работают

Цитата: Максим75 от 18 авг 2023, 10:17смысл следующий: делается пакет запросов по шапке и табличной части нужного дока, пакет выполняется, получается массивМассив (Array) в 1С - это коллекция значений, позволяющая наиболее оперативно управлять данными. Массив - это тип значения, состоящий из некоторого количества элементов. Каждый элемент массива ...Массив (Array) в 1С - это коллекция значений, позволяющая наиболее оперативно управлять данными. Массив - это тип значения, состоящий из некоторого количества элементов. Каждый элемент массива ... результатов запроса, в первом элементе массива данные шапки, во втором элементе массива данные табличной части.
и с каждой выборкой уже потом работаете и получаете то, что нужно. Поставщика (клиента) берете с первой выборки и выводите в табличный документ, ну а все товары берете со второй выборки.

Спасибо, попробую разобраться...

Dmitrii_VVV

Цитата: LexaK от 18 авг 2023, 11:11Dmitrii_VVV, у вас уже есть нормальный/рабочий пример печати формы документа.
возьмите его за пример и по его аналогии сделайте новую печатную форму.
80-90% разработки в 1С именно так и происходит, берется уже готовый алгоритм/код и дорабатывается под новую задачу
(особенно печатные формы, по одному документу их может быть десятки,
делаяется копия, подправляется и вот у вас уже несколько Печатных форм одного документа)



Спасибо за полезную инф-ю)
Печатные формы и запросы только начинаю осваивать, пытаюсь для себя выстроить логику и
понять, что откуда берётся

Теги:

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

Рейтинг@Mail.ru

Поиск