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

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С 8.х любой конфигурации

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

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

3588 руб.

11.11.2020    47808    53    44    

64

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

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

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

2000 руб.

04.11.2019    28310    113    87    

52

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

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

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

4000 руб.

09.06.2021    15040    7    6    

10

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

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

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

20.01.2023    1901    aldar    0    

7

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

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

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

2 стартмани

03.01.2023    3111    19    AndreyPonom    7    

9

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

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

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

2 стартмани

04.05.2022    12230    44    aximo    3    

11

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

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

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

1 стартмани

01.05.2022    11391    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" - косяк. Не обратил внимание.
Писал пример под идею, просто для статьи и не причесывал.
+
Оставьте свое сообщение