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

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    47542    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    28134    113    87    

52

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

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

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

20.01.2023    1807    aldar    0    

7

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

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

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

2 стартмани

03.01.2023    2992    19    AndreyPonom    7    

9

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

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

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

2 стартмани

04.05.2022    11847    44    aximo    3    

11

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

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

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

1 стартмани

01.05.2022    11140    6    zemskov    7    

5

Вывод изображений штрихкодов на СКД

СКД Этикетки, ценники Система компоновки данных 8.3.14 Конфигурации 1cv8 Россия Абонемент ($m)

Расширение и отчет для вывода изображений штрихкодов номенклатуры в СКД. Может быть использована как заготовка для создания собственного отчета.

1 стартмани

27.04.2022    4602    21    SergeyPZU    13    

18
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
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" - косяк. Не обратил внимание.
Писал пример под идею, просто для статьи и не причесывал.
Оставьте свое сообщение