Как присоединить области с разным количеством строк? Способ формирования печатной формы под тип ценников, но с различными по высоте областями.

22.10.13

Задачи пользователя - Этикетки, ценники

Когда нужно присоединять к таблице области с разным количеством строк, первое, что приходит на ум, сформировать промежуточную ТЗ, в которой подготовить данные для вывода в Таблицу, и потом уже из нее выводить данные. Но есть и другой способ.

Скачать исходный код

Наименование Файл Версия Размер
Пример
.epf 8,48Kb
63
.epf 8,48Kb 63 Скачать

Задача.

Вывести в печатную форму, на подобии печати ценников, мини-прайсы. Т.е. некий набор номенклатуры с ценами.

Для тех кто не в курсе как печатаются ценники (на примере УТ11) выводятся фиксированные блоки поочередно присоединяя их, пока они по размеру входят в выводимую область. Как только присоединение не возможно, данные выводятся на «новой строке» Таблицы. Проверка осуществляется ч/з проверить присоединение и проверить вывод

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

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

 

Решение

Если коротко, то алгоритм следующий:

  1. Создаем «подставной» табличный документ
  2. Получаем из макета области для формирования мини-прайса (в примере Шапка, строка, подвал)
  3. В цикле по сгруппированным данным (по данным шапки)
    1. Очищаем подставной макет
    2. Выводим в него шапку
    3. Выводим все строки (цикл по строкам)
    4. Выводим подвал
    5. Получаем область из подставной табличной части, в которую вывели данные.
    6. Далее работаем с этой областью так же, как  как если бы мы получили ее из макета целиком (проверяем на вывод и выводим)

Алгоритм не сложный, и думаю что не я первый, кто пользуется таким способом.

 

PS: Возможно, данная реализация не самая красивая и есть еще варианты. Предлагаю обсудить в комментах.

Ниже небольшая выдержка из кода обработки, прикрепленной для скачивания (демо пример в которой на ряду со «сборной» областью выводится фиксированная область, типа ценника)

 

    ТабличныйДокумент   = Новый ТабличныйДокумент;
   
ВременнаяОбласть    = Новый ТабличныйДокумент;

   
ФиксОбласть = Макет.ПолучитьОбласть("ФиксХ|У");
   
ФиксОбласть.Параметры.Текст = ТекстФиксированногоМакета;

   
Х_Шапка = Макет.ПолучитьОбласть("Х_Шапка|У");
   
Х_Строка = Макет.ПолучитьОбласть("Х_Строка|У");
   
Х_Подвал = Макет.ПолучитьОбласть("Х_Подвал|У");

   
ПерваяКолонка = Истина;
    Если
ВыводитьФиксированнуюОбласть Тогда
       
Область = ФиксОбласть;
       
ВывестиОбласть(ТабличныйДокумент, Область, ПерваяКолонка);
    КонецЕсли;
    Для
х = 1 по СтрокиТаблицы.Количество() Цикл

       
СтрокаТаблицы = СтрокиТаблицы[х-1];
       
ВременнаяОбласть.Очистить();
       
Х_Шапка.параметры.Наименование = СтрокаТаблицы.Наименование;
       
ВременнаяОбласть.Вывести(Х_Шапка);
        Для Каждого
строкаТ из СтрокаТаблицы.Строки Цикл
           
ЗаполнитьЗначенияСвойств(Х_Строка.Параметры, строкаТ);
           
ВременнаяОбласть.Вывести(Х_Строка);
        КонецЦикла;
       
ВременнаяОбласть.Вывести(Х_Подвал);
       
Область = ВременнаяОбласть.ПолучитьОбласть("R1C1:R"+ВременнаяОбласть.ВысотаТаблицы+"C"+ВременнаяОбласть.ШиринаТаблицы);

       
ВывестиОбласть(ТабличныйДокумент, Область, ПерваяКолонка);

        Если
ВыводитьФиксированнуюОбласть Тогда
           
Область = ФиксОбласть;
           
ВывестиОбласть(ТабличныйДокумент, Область, ПерваяКолонка);
        КонецЕсли;

    КонецЦикла;

См. также

Штрих-коды в шаблоне этикетки

Этикетки, ценники Программист Пользователь Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 Россия Управленческий учет Платные (руб)

Решение позволяет в шаблон этикетки с типом "Этикетка (обувь, одежда, табак...)" добавлять штрих-коды другого типа, например, GTIN в Code128.

4000 руб.

09.06.2021    15318    8    6    

12

Ценники и этикетки со штрих-кодом для 1С 8.х любой конфигурации

Этикетки, ценники Пользователь Платформа 1С v8.3 Конфигурации 1cv8 Розничная и сетевая торговля (FMCG) Рестораны, кафе и фаст-фуд Беларусь Украина Россия Управленческий учет Платные (руб)

Простая в использовании обработка для формирования и печати ценников и этикеток со штрих-кодом, с дополнительной ценой, для 1С8.х любой конфигурации. Большое разнообразие шаблонов печатных форм. Управляемая форма (Такси) + Обычный режим.

3588 руб.

11.11.2020    48236    55    44    

65

Печать ценников. (Розница 2.3, УНФ 1.6, две цены + серийные номера) + УНФ 3.0

Этикетки, ценники Пользователь Платформа 1С v8.3 Управляемые формы 1С:Розница 2 1С:Управление нашей фирмой 1.6 Платные (руб)

Встроенная в конфигурации Розница 2.3 и УНФ 1.6 подсистема печати ценников по мне слишком неповоротлива и с усилиями поддается тонкой настройке, решил с нуля написать свою универсальную печать ценников для этих конфигураций.

2000 руб.

04.11.2019    28507    113    87    

52

Печать из Андроид

Этикетки, ценники Программист Мобильная платформа Бесплатно (free)

Печать этикеток на принтер WiFi без драйвера.

20.01.2023    2023    aldar    0    

8

Ценники (этикетки) для термопринтера

Этикетки, ценники Пользователь Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Абонемент ($m)

Внешняя печатная форма для принтера этикеток. В отличие от базовой обработки для печати этикеток эта может выводить на печать дополнительные свойства справочника Номенклатура, а также в ней несложный программный код, что позволяет легко дорабатывать обработку под свои нужды.

2 стартмани

03.01.2023    3297    21    AndreyPonom    7    

10

Набор готовых макетов этикеток (ценников) для Розницы 2.3

Этикетки, ценники Пользователь Платформа 1С v8.3 1С:Розница 2 Розничная и сетевая торговля (FMCG) Россия Управленческий учет Абонемент ($m)

Архив с экспортными шаблонами этикеток (ценников) формата 58х40. Для тех, кто не хочет сам рисовать их.

2 стартмани

04.05.2022    12798    44    aximo    3    

11

Шаблон этикетки для УНФ (1С:Фреш)

Этикетки, ценники Программист Пользователь Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 Розничная и сетевая торговля (FMCG) Россия Абонемент ($m)

Описан механизм создания этикетки для термопринтера ТSC TDP-225 в подробностях. Приложен XML-файл с самим шаблоном.

1 стартмани

01.05.2022    11774    6    zemskov    7    

5
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Evgen.Ponomarenko 567 22.10.13 10:29 Сейчас в теме
Тема весьма актуальна, только-только решал аналогичную задачу используя ТЗ.
3. MarSeN 984 22.10.13 11:17 Сейчас в теме
(1) Evgen.Ponomarenko, (2) makas,
Спасибо! Надеюсь пригодится на практике.
9. Evgeniy_begin_progger 28.02.15 23:41 Сейчас в теме
(1) Evgen.Ponomarenko, кинь на почту, плз KrasevE@yandex.ru
2. makas 44 22.10.13 11:14 Сейчас в теме
Прочитал с интересом!
4. Crush 23.10.13 11:12 Сейчас в теме
Спасибо! Возьму на заметку
5. RimidalV 23.10.13 11:27 Сейчас в теме
Актуальная тема, постоянно натыкаюсь на эти грабли. Молодец.
6. Algiz 23.10.13 22:31 Сейчас в теме
Спасибо, возьму на заметку
7. sudmorsh 57 26.10.13 11:48 Сейчас в теме
Очень интересно Спасибо! Надеюсь пригодится на практике
8. пользователь 28.02.15 23:39
Сообщение было скрыто модератором.
...
10. HystriX 27.04.15 12:56 Сейчас в теме
Если уж так любите, чтобы код был красивым, зачем используете конкатенацию при получении области? Есть же вариант метода с простым указанием четырех параметров. Вместо этого собираете строку, на это тратится лишнее время и жрется память. Причем этот вариант не будет работать, если строк будет больше 1000, формат по умолчанию группирует разряды чисел по три, получите вместо "R1000" строку "R1 000" и вылезет ошибка. Тогда уж нужно делать Формат(..., "ЧГ=0"). Про этот нюанс вообще любят забывать очень многие разработчики.

Если по существу публикации, неплохой альтернативный метод решения задачи.
11. MarSeN 984 08.05.15 13:47 Сейчас в теме
(10)
"R1 000" - косяк. Не обратил внимание.
Писал пример под идею, просто для статьи и не причесывал.
Оставьте свое сообщение