Когда текст будет скопирован в модуль формы, то строки, начинающиеся с двойного слэша , будут выделены зеленым это комментарии, в них описано, что выполняет каждая строчка кода.
1С:Бухгалтерия 8.Тонкая настройка: создаем внешние печатные формы
Жизнь идет, меняется законодательство, разработчик выпускает обновления конфигураций и перед нами снова выбор: установить обновление самому или опять звонить программисту, чтобы «поставил новый релиз»…
Давайте познакомимся с механизмом изменения печатных форм в 1С:Бухгалтерии 8 без изменения конфигурации.
Ну что, какова задача? Кажется слишком сложной? Ну что ж, чем она сложнее, тем интереснее, и тем больше ее хочется решить. Тогда за работу.
Важно! Имя обработки не должно содержать пробелов, так как же, как и имена переменных.
1С: Бухгалтерия 8. Тонкая настройка: создаем внешние печатные формы
- Нужно создать реквизит в обработке «СсылкаНаОбъект» с типом «ЛюбаяСсылка»
- Нужно создать в модуле обработки процедуру «Печать() Экспорт» без параметров и обязательно указать ключевое слово «Экспорт«
Что такое «макет»
Ячейка может содержать значение одного из трех видов:
- текст – значение такого вида будет выведено на печать в том же виде;
- параметр – ячейка такого вида содержит имя переменной, значение которой будет выведено на печать.
- шаблон – ячейки такого вида являются комбинацией первого и второго варианта. Ячейка может содержать текст и переменные. Чтобы программа могла отличить текст от переменной, переменные нужно заключать в квадратные скобки: «Сегодня [Дата]».
Важно! Значение ячеек второго и третьего вида табличный редактор отображает в треугольных скобках. На рисунке 2 ячейка с текстом «Покупатель» — имеет вид текст, а правее ячейки «ПредставлениеПокупателя» — параметр.
Зачем я все это рассказываю? Теперь вы знаете, в каких ячейках можно легко поменять содержимое, и в каких нежелательно что-то менять, так как нужно будет вносить изменения в алгоритм вывода на печать.
Промокоды на Займер на скидки
Вернемся теперь к нашей задаче. Мы создали обработку, скопировали макет и готовы его доработать под себя. Для начала внимательно его рассмотрим.
Поскольку построитель отчета недоступен на сервере 1С Предприятия и не используется в модуле внешнего соединения, то в этих случаях необходимо использовать построитель запроса, который аналогичен построителю отчета, но не имеет визуальных свойств и методов Макет , ВыводитьЗаголовокОтчета , Вывести , ОформитьМакет.
Лабораторная работа №6 Редактирование Макета и Формы документа в среде «1с Предприятие 8.1»
Откроем конфигуратор, раскроем дерево документа ОказаниеУслуги и дважды щелкнем на макете Печать. Как видите, макет документа состоит из именованных областей, которые в определенном порядке выводятся на печать.
Добавим новую область для вывода итоговой суммы документа (рисунок 6.1). Выделим мышью две пустые строки и выполним команду Таблица Имена Назначить имя…
Рисунок 6.1 – Выделим мышью две строки и зададим имя области
Назовем область Всего. В созданной области, в колонке Цена, напишем Всего, а в колонке Сумма напишем ВсегоПоДокументу.
Вызвав палитру свойств для последней заполненной нами ячейки, укажем, что в этой ячейке будет находиться не текст, а параметр (рисунок 6.2):
Рисунок 6.2 — Укажем, что в ячейке должен находиться не текст, а параметр…
Здесь следует сказать о том, что каждая ячейка редактируемого нами табличного документа может содержать либо текст, либо некоторый параметр, либо шаблон.
Текст, содержащийся в ячейке, будет показан на экране.
Параметр будет заменен некоторым значением, которое может быть присвоено ему средствами встроенного языка. Текст, содержащийся в ячейке, является именем этого параметра.
Шаблон представляет собой текстовую строку, в определенные места которой будут вставлены значения параметров.
Поэтому, указав для ячейки в качестве заполнения Параметр, мы определили параметр области с именем ВсегоПоДокументу, которому присвоим нужное нам значение при формировании печатной формы.
Теперь откроем модуль формы документа ОказаниеУслуги — ФормаДокумента. Найдем в нем процедуру Печать и после цикла Для Каждого ТекСтрокатчНоменклатура Из тчНоменклатура Цикл добавим в нее следующие строки (листинг 6.1):
Подобным образом, используя свойства ячеек макета и управляя порядком их вывода, разработчик имеет возможность создать печатную форму любого дизайна.
А теперь, для того чтобы наш документ ОказаниеУслуги, выглядел вполне законченным, добавим итоговую сумму по документу и на экранную форму, чтобы пользователь мог видеть ее в процессе заполнения табличной части документа.
Откроем в конфигураторе форму документа ОказаниеУслуги – ФормаДокумента. Откроем палитру свойств для табличного поля, расположенного в форме, и установим свойство Подвал, которое определяет наличие подвала у элемента управления Табличное поле (рисунок 6.3).
Затем откроем свойства колонки Цена и установим Текст подвала – Всего:, Горизональноеположение в подвале – Прижать вправо и в шрифте подвала изменим начертание на Жирный.
После этого откроем свойства колонки Сумма, установим Горизонтальное положение в подвале – Прижать вправо, установим флаг Показывать итог в подвале и в шрифте подвала тоже изменим начертание на Жирный.
Запустим 1С:Предприятие в режиме отладки и посмотрим, как теперь выглядит форма документа Оказание услуги №1 (рисисунок 6.4):
Как получить макет внешней обработки в 1С
Для тех кто не в курсе как печатаются ценники на примере УТ11 выводятся фиксированные блоки поочередно присоединяя их, пока они по размеру входят в выводимую область.
Решение
- Создаем «подставной» табличный документ
- Получаем из макета области для формирования мини-прайса (в примере Шапка, строка, подвал)
- В цикле по сгруппированным данным (по данным шапки)
- Очищаем подставной макет
- Выводим в него шапку
- Выводим все строки (цикл по строкам)
- Выводим подвал
- Получаем область из подставной табличной части, в которую вывели данные.
- Далее работаем с этой областью так же, как как если бы мы получили ее из макета целиком (проверяем на вывод и выводим)
Алгоритм не сложный, и думаю что не я первый, кто пользуется таким способом.
PS: Возможно, данная реализация не самая красивая и есть еще варианты. Предлагаю обсудить в комментах.
Ниже небольшая выдержка из кода обработки, прикрепленной для скачивания (демо пример в которой на ряду со «сборной» областью выводится фиксированная область, типа ценника)
ТабличныйДокумент = Новый ТабличныйДокумент ;
ВременнаяОбласть = Новый ТабличныйДокумент ;ФиксОбласть = Макет . ПолучитьОбласть ( «ФиксХ|У» );
ФиксОбласть . Параметры . Текст = ТекстФиксированногоМакета ;Х_Шапка = Макет . ПолучитьОбласть ( «Х_Шапка|У» );
Х_Строка = Макет . ПолучитьОбласть ( «Х_Строка|У» );
Х_Подвал = Макет . ПолучитьОбласть ( «Х_Подвал|У» );ПерваяКолонка = Истина;
Если ВыводитьФиксированнуюОбласть Тогда
Область = ФиксОбласть ;
ВывестиОбласть ( ТабличныйДокумент , Область , ПерваяКолонка );
КонецЕсли;
Для х = 1 по СтрокиТаблицы . Количество () ЦиклВывестиОбласть ( ТабличныйДокумент , Область , ПерваяКолонка );
Если ВыводитьФиксированнуюОбласть Тогда
Область = ФиксОбласть ;
ВывестиОбласть ( ТабличныйДокумент , Область , ПерваяКолонка );
КонецЕсли;1С присоединить область справа//укажем параметры области
Область. Параметры .НомерДокумента = Номер;
Область.Параметры.От = Дата;
Область.Параметры.Кому = Контрагент;Вывести Область в Области Макета 1C
Как присоединить области с разным количеством строк? Способ формирования печатной формы под тип ценников, но с различными по высоте областями.
Когда нужно присоединять к таблице области с разным количеством строк, первое, что приходит на ум, сформировать промежуточную ТЗ, в которой подготовить данные для вывода в Таблицу, и потом уже из нее выводить данные. Но есть и другой способ.
Вывести в печатную форму, на подобии печати ценников, мини-прайсы. Т.е. некий набор номенклатуры с ценами.
Для тех кто не в курсе как печатаются ценники (на примере УТ11) выводятся фиксированные блоки поочередно присоединяя их, пока они по размеру входят в выводимую область. Как только присоединение не возможно, данные выводятся на «новой строке» Таблицы. Проверка осуществляется ч/з проверить присоединение и проверить вывод
Проблема заключается в том, что количество строк в каждом мини-прайсе различна, и заранее определить фиксированную область в макете для их присоединения (методом присоединить) не представляется возможным.
Решение, приведенное выше, конечно, рабочее и может применяться (даже применяется) на практике. Но к моему глубокому сожалению, для меня не приемлемо по моим внутренним убеждениям (люблю, чтоб код был простым и красивым). Поэтому у меня придумался другой подход.
Микрофинансирование → Микрокредиты → Специальные предложения → Скачать файлы → Обзор Быстроденег → Предмет договора → Ответственность сторон → Отличные наличные→ Экспресс займы
💥Принимайте участие в опросе и получайте бесплатную консультацию