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

22.10.13

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Пример
.epf 8,48Kb
63
63 Скачать (1 SM) Купить за 1 850 руб.

Задача.

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

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

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

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

 

Решение

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

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

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

 

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

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

 

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

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

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

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

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

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

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

    КонецЦикла;

См. также

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

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

3588 руб.

11.11.2020    49698    60    47    

69

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

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

2000 руб.

04.11.2019    29383    116    87    

55

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

Расширение "Контроль ценников". Позволяет автоматизировать контроль над устаревшими ценниками в магазине при изменении цен на товары. Продавцы или товароведы получают список товаров с измененными ценами для замены ценников в режиме онлайн.

10 стартмани

30.10.2024    252    3    Miket78    4    

5

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

Внешняя обработка для 1С Розница 2.2.ХХХ - 2.3.ХХХ для печати формирования штрихкодов весового товара и печати на принтере термоэтикеток или кассовом аппарате.

1 стартмани

29.10.2024    302    3    independ    1    

5

Логистика, склад и ТМЦ Этикетки, ценники Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Абонемент ($m)

Выводит при печати этикетки складской ячейки в качестве штрихкода адрес ячейки вместо уникального идентификатора

1 стартмани

20.06.2024    1142    3    Alexei_Siva    4    

6

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

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

20.01.2023    2575    aldar    0    

9

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

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

2 стартмани

03.01.2023    4128    29    AndreyPonom    9    

11
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Evgen.Ponomarenko 568 22.10.13 10:29 Сейчас в теме
Тема весьма актуальна, только-только решал аналогичную задачу используя ТЗ.
3. MarSeN 987 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 58 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 987 08.05.15 13:47 Сейчас в теме
(10)
"R1 000" - косяк. Не обратил внимание.
Писал пример под идею, просто для статьи и не причесывал.
Оставьте свое сообщение