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

Заполнение печатной формы документа

Автор Funt432286, 26 июл 2023, 23:22

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

Funt432286

Всем доброго времени суток!
Создал макет печатной формы, а теперь не могу сообразить как правильно его программно заполнить.
Вариант макета представлен на фото 3, вариант желаемого результата на фото 4.

Подскажите пожалуйста, как реализовать такую задумку?

alexandr_ll

Funt432286, А в чем вы видите сложность? В объединении ячеек?

Kvark5d

Funt432286, предлагаю следующее решение. Скорее всего оно не самое корректное, но я таким пользуюсь. Возможные мелкие недочеты, так как без данных не проверить, но думаю суть будет ясна
Запрос=Новый Запрос;                         
//группировочными данными для каждого набора номенклатуры являются:
// Заказчик, ТипДоставки, ТипУпаковки, ТранспортнаяКомапния,ДокОтгрузки, ПолучательПлательщик
// значит в запросе выведем итоги по ним
Запрос.Текст="
|...
|Итоги по
|Заказчик,
|ТипДоставки,
|ТипУпаковки,
|ТранспортнаяКомпания,
|ДокОтгрузки,
|ПолучательПлательщик";
РезультатЗапроса=Запрос.Выполнить();

ТабДок = Новый ТабличныйДокумент; // основной
Макет = ПолучитьМакет("МАкет");
ШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
ТабДок.Вывести(ШапкаТаблицы);
ПолеТаблицы = Макет.ПолучитьОбласть("ПолеТаблицы");

ВыборкаЗаказчик = РезультатЗапроса.Выбрать(ОбходрезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаЗаказчик.Следующий() Цикл
    ВыборкаТипДоставки = ВыборкаЗаказчик.Выбрать(ОбходрезультатаЗапроса.ПоГруппировкам);
    Пока ВыборкаТипДоставки.Следующий() Цикл
        ВыборкаТипДоставки = ВыборкаЗаказчик.Выбрать(ОбходрезультатаЗапроса.ПоГруппировкам);
        Пока ВыборкаТипДоставки.Следующий() Цикл
            ВыборкаТипДоставки = ВыборкаЗаказчик.Выбрать(ОбходрезультатаЗапроса.ПоГруппировкам);
            Пока ВыборкаТипДоставки.Следующий() Цикл
                ВыборкаТипДоставки = ВыборкаЗаказчик.Выбрать(ОбходрезультатаЗапроса.ПоГруппировкам);
                Пока ВыборкаТипДоставки.Следующий() Цикл
                    ВыборкаТипДоставки = ВыборкаЗаказчик.Выбрать(ОбходрезультатаЗапроса.ПоГруппировкам);
                    Пока ВыборкаТипДоставки.Следующий() Цикл
                        // для каждого такого набора создадим свой табличный документ
                        // в котором будем производить объединения ячеек
                        ТабДокОрг = Новый ТабличныйДокумент;           
                        КолВоНоменклатуры=0; //
                        ВыборкаДетальныеЗаписи = ВыборкаТипДоставки.Выбрать();
                        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
                            ПолеТаблицы.Параметры.Заполнить(ВыборкаДетальныеЗаписи);
                            ТабДокОрг.Вывести(ПолеТаблицы);
                            КолВоНоменклатуры=КолВоНоменклатуры+1;
                        КонецЦикла;
                        // важно понимать что для каждой номенклатуры выводилось две строки
                        // значит всего выведено строк = КолВоНоменклатуры * 2
                        // объединим ячейки первой и шестой колонок
                        ВсегоСтрокВыведено = ТабДокОрг.ВысотаТаблицы; // кол-во строк всего выведенных в ТабДокОрг
                        ТабДокОрг.Область("R1C1:R"+ВсегоСтрокВыведено+"C1").Объединить();
                        ТабДокОрг.Область("R1C6:R"+ВсегоСтрокВыведено+"C6").Объединить();
                        // 4 и 5 колонки делят выведенные строки пополам
                        ТабДокОрг.Область("R1C4:R"+КолВоНоменклатуры+"C4").Объединить();
                        ТабДокОрг.Область("R"+(КолВоНоменклатуры+1)+"C4:R"+ВсегоСтрокВыведено+"C4").Объединить();
                        ТабДокОрг.Область("R1C5:R"+КолВоНоменклатуры+"C5").Объединить();
                        ТабДокОрг.Область("R"+(КолВоНоменклатуры+1)+"C5:R"+ВсегоСтрокВыведено+"C5").Объединить(); 
                       
                        //проверим влезают ли данные на страницу основного таб. док-а
                        Если ТабДок.ПроверитьВывод(ТабДокОрг) Тогда
                            ТабДок.Вывести(ТабДокОрг);
                        Иначе
                            ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
                            ТабДок.Вывести(ТабДокОрг);
                        КонецЕсли;
                    КонецЦикла;
                КонецЦикла;
            КонецЦикла;
        КонецЦикла;
    КонецЦикла;
КонецЦикла;

Funt432286

alexandr_ll, Да, проблема с пониманием объединения ячеек

Funt432286

исходные данные выглядят как на фото, единственное

Funt432286

это данные документа из которого формируется печатная форма

alexandr_ll

Funt432286, Во втором сообщении вам написали примерный ход выполнения.

Funt432286

alexandr_ll, собрал в конструкторе код, но почему-то выдает ошибку.
Мне нужно вывести Итог по реквизиту из таблицы
ВЫБРАТЬ
Ф_ДокЗаявкаНаСклад.Дата КАК Дата,
Ф_ДокЗаявкаНаСклад.ТЧ_ЗаказыКлиентов.(
Номенклатура КАК Номенклатура,
Количество КАК Количество,
Грузополучатель КАК Грузополучатель,
Плательщик КАК Плательщик,
АдресДоставки КАК АдресДоставки,
ТранспортКомпания КАК ТранспортКомпания,
ДокОтгрузки КАК ДокОтгрузки,
ТипДоставки КАК ТипДоставки,
ТипУпаковки КАК ТипУпаковки
) КАК ТЧ_ЗаказыКлиентов
ИЗ
Документ.Ф_ДокЗаявкаНаСклад КАК Ф_ДокЗаявкаНаСклад
ГДЕ
Ф_ДокЗаявкаНаСклад.Ссылка = &Ссылка
ИТОГИ ПО
ТранспортКомпания

Дальнейшая группировка идет так же по реквизитам из вложенной таблицы

antoneus

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

Funt432286

с запросом вроде бы разобрался, а вот с выводом таб док как тяжко, никак не получается правильно объединить ячейки
во вложении две фото: текущий результат (с заказчиком в каждой ячейке) и желаемый (с объединенными ячейками заказчика),
Код построения и запроса тоже прилагаю!

    ТабДок = Новый ТабличныйДокумент;
    ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
    Макет = ОбработкаОбъект.ПолучитьМакет("Ф_ЗаявкаНаОтгрузку");
    ТКомпания = Макет.ПолучитьОбласть("ТКомпания");
   
    ТекСтр = ЭлементыФормы.ТП_СписокЗаявок.ТекущиеДанные;
   
    //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
   
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Ф_ДокЗаявкаНаСкладЗаказы.Ссылка.Дата КАК Дата,
        |    Ф_ДокЗаявкаНаСкладЗаказы.ТранспортКомпания КАК ТранспортКомпания,
        |    Ф_ДокЗаявкаНаСкладЗаказы.Заказчик КАК Заказчик,
        |    Ф_ДокЗаявкаНаСкладЗаказы.Номенклатура КАК Номенклатура,
        |    Ф_ДокЗаявкаНаСкладЗаказы.Количество КАК Количество,
        |    Ф_ДокЗаявкаНаСкладЗаказы.Грузополучатель КАК Грузополучатель,
        |    Ф_ДокЗаявкаНаСкладЗаказы.Плательщик КАК Плательщик,
        |    Ф_ДокЗаявкаНаСкладЗаказы.АдресДоставки КАК АдресДоставки,
        |    Ф_ДокЗаявкаНаСкладЗаказы.ДокОтгрузки КАК ДокОтгрузки,
        |    Ф_ДокЗаявкаНаСкладЗаказы.ТипДоставки КАК ТипДоставки,
        |    Ф_ДокЗаявкаНаСкладЗаказы.ТипУпаковки КАК ТипУпаковки
        |ИЗ
        |    Документ.Ф_ДокЗаявкаНаСклад.ТЧ_ЗаказыКлиентов КАК Ф_ДокЗаявкаНаСкладЗаказы
        |ГДЕ
        |    Ф_ДокЗаявкаНаСкладЗаказы.Ссылка = &Ссылка
        |ИТОГИ ПО
        |    ТранспортКомпания,
        |    Заказчик";
   
    Запрос.УстановитьПараметр("Ссылка", ТекСтр.СсылкаЗаявки);
   
    РезультатЗапроса = Запрос.Выполнить();
   
    ВыборкаТранспортКомпания = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
   
    Пока ВыборкаТранспортКомпания.Следующий() Цикл
        Если ВыборкаТранспортКомпания.ТранспортКомпания = "ПЭК"
            Тогда ТКомпания.Параметры.ТКомпания = "ПЭК / АДРЕС: ул. Базовая, д. 2 / с 9.00 до 16.00 / Страховка у ВСЕХ";
        ИначеЕсли ВыборкаТранспортКомпания.ТранспортКомпания = "КИТ"
            Тогда ТКомпания.Параметры.ТКомпания = "КИТ / СДАЧА ОБОРУДОВАНИЯ ПО АДРЕСУ: Тутаевское шоссе, д. 6 / с 9.00 до 18.00 / Страховка у ВСЕХ";
        ИначеЕсли ВыборкаТранспортКомпания.ТранспортКомпания = "ТК Энергия"
            Тогда ТКомпания.Параметры.ТКомпания = "тк ЭНЕРГИЯ / Адрес: ул. Промышленная, д. 8 / УПАКОВКА у всех  - ОБРЕШЕТКА + Страховка";
        ИначеЕсли ВыборкаТранспортКомпания.ТранспортКомпания = "Деловые линии"
            Тогда ТКомпания.Параметры.ТКомпания = "Деловые линии / Адрес: Промышленная ул., 18д, с 9.00 до 19.00 /";
        КонецЕсли;
       
        ТабДок.Вывести(ТКомпания);
       
        ВыборкаЗаказчик = ВыборкаТранспортКомпания.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
   
        Пока ВыборкаЗаказчик.Следующий() Цикл
            Заявка = Макет.ПолучитьОбласть("ПолеТаблицы");
            //ТабДок.Вывести(Заказчик);
           
            Выборка = ВыборкаЗаказчик.Выбрать();
            ЗаказКол = Выборка.Количество();
           
            КолНом = 0;
   
            Пока Выборка.Следующий() Цикл
                //Заявка = Макет.ПолучитьОбласть("ПолеТаблицы");
                Заявка.Параметры.Заказчик = ВыборкаЗаказчик.Заказчик;
                ВыбЗаказчик = ВыборкаЗаказчик.Заказчик;
                Заявка.Параметры.Номенклатура    = Выборка.Номенклатура;
                Заявка.Параметры.Количество        = Выборка.Количество;
                Заявка.Параметры.ТипДоставки    = Выборка.ТипДоставки;
                Заявка.Параметры.ТипУпаковки    = Выборка.ТипУпаковки;
                КолНом = КолНом + 1;
                ТабДок.Вывести(Заявка);
            КонецЦикла;
        КонецЦикла;
    КонецЦикла;
   
    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

    ТабДок.Показать();

Подскажите пожалуйста, что как!

Теги:

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

Рейтинг@Mail.ru

Поиск