Версия для печати темы (https://pro1c.org.ua/index.php?s=a216925ffb4495b81e4e3c1110814f8d&showtopic=55271)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Размещение 18 этикеток на листе формата А4

Автор: medchuk 18.11.19, 18:13

Всем здравствуйте. Помогите начинающему программисту реализовать пакетную печать этикеток в 1с 8.3 (конф. BAS 2.1.2.1).
В справочнике Номенклатура создана печатная форма размером 4,5х7 см. Количество позиций в справочнике - 700шт.
При выборе нескольких позиций на печать выходят этикетки одним столбиком. В целях экономии бумаги принято решение разместить по 18 этикеток на одном листе А4 (как раз размещаются на одном листе).
Листинг в модуле следующий

Процедура ПечатьЕтикетки(ТабДок, Ссылка) Экспорт

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

    ПечОбл = Макет.ПолучитьОбласть("ПечОбл");
    
    ТабДок.Очистить();

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


Уже несколько дней пытаюсь найти решение - глухо. возможно кто то стыкался з подобным решением. Зарание спасибо


 ! 

https://pro1c.org.ua/index.php?act=announce&id=2: 4, 5
 

Автор: fly 18.11.19, 19:04

medchuk @ Сегодня, 19:13 * ,
Попробуйте использовать счетчик в цикле
И при каждом обходе если остаток от деления на число необходимых колонок этикеток на странице <> 0 использовать Присоединить вместо Вывести

Ну или если остаток от деления на количество колонок на странице + 1 <> о использовать присоединить, иначе вывести

Автор: medchuk 19.11.19, 17:35

fly @ Вчера, 19:04 * ,
Исходя из Вашего совета решил ситуацию подобным образом. Было решение заодно задать параметры страницы и сменить из 18 этикеток на 16, так как не совсем корректно размещались на странице.
Делюсь результатом. Возможно кому то пригодится.

Процедура ПечатьЕтикетки(ТабДок, Ссылка) Экспорт
    Макет = Справочники.Номенклатура.ПолучитьМакет("Етикетка");
    Колонка = 1;
    Строка = 1;
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    Номенклатура.Артикул,
    |    Номенклатура.Вес,
    |    Номенклатура.Комментарий,
    |    Номенклатура.Код,
    |    Номенклатура.НаименованиеПолное
    |ИЗ
    |    Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    |    Номенклатура.Ссылка В (&Ссылка)";
    
    Запрос.Параметры.Вставить("Ссылка", Ссылка);
    Выборка = Запрос.Выполнить().Выбрать();
    
    ПечОбл = Макет.ПолучитьОбласть("ПечОбл");
    ТабДок.Очистить();

    Пока Выборка.Следующий() Цикл
                        
        ПечОбл.Параметры.Заполнить(Выборка);    
        
    Если Колонка = 1 Тогда
        ТабДок.Вывести(ПечОбл);
        Иначе ТабДок.Присоединить(ПечОбл)
        КонецЕсли;
        Колонка = Колонка +1;
        
    Если Колонка > 4 Тогда
        Колонка = 1;
        Строка= Строка+1;
    КонецЕсли;
    
    Если Строка = 5 Тогда
        ТабДок.ВывестиГоризонтальныйРазделительСтраниц()
    КонецЕсли;
    
    Если Строка > 4 Тогда
        Строка = 1;
    КонецЕсли;
КонецЦикла;

    ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
    ТабДок.ПолеСлева = 5;
    ТабДок.ПолеСправа = 5;
    ТабДок.ПолеСверху = 5;
    ТабДок.ПолеСнизу = 5;
КонецПроцедуры



Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua