Создание печатной формы 1с 8 пошаговая инструкция

В этой статье подробно будет рассказано, как новичку, плохо знающему 1С 8 создать печатную форму. Для примера возьмем одну из самых распространенных конфигураций 1С 8 — Бухгалтерию 2.0. Создание печатной формы 1С этапы написания:

  • Создание файла внешней печатной формы;
  • Создание макета печатной формы;
  • Написание программного кода для вывода данных печатной формы на экран;
  • Создание параметров авторегистрации печатной формы;
  • Подключение внешней печатной формы к базе 1С Предприятия.

Создание печатной формы 1С. Постановка задачи

От нас требуется в конфигурации Бухгалтерия 2.0 создать печатную форму к документу Поступление товаров и услуг. В шапке печатной формы вывести следующие данные:

  • Организацию;
  • Контрагента;
  • Договор контрагента;
  • Дату поступления.

В виде таблицы вывести данные табличной части Товары документа. Таблица должна включать в себя следующие колонки:

  • Номенклатура;
  • Количество;
  • Цена;
  • Сумма;
  • А также цена номенклатуры на текущую дату (по виду цен из документа).

Файл внешней обработки

Перейдем к решению задачи. Для начала откроем 1С 8 в режиме Конфигуратор. Именно в этом режиме осуществляются все разработки на платформе 1С 8. Теперь нам необходимо создать файл внешней обработки. Для этого кликнем по меню Файл -> Новый… или по пиктограмме нового файла.

Создание файла внешней обработки

В открывшемся окошке выберем пункт Внешняя обработка.

Выбор вида документа 1С

Далее в поле Имя необходимо вписать название внешней обработки. В нашем случае назовем ее просто: «ПечатнаяФорма», поле синоним при этом заполнится автоматически. Обратите внимание, что в поле Имя, внешней обработки, следует писать название без пробелов и знаков препинания.

Добавим реквизит внешней обработки СсылкаНаОбъект и выберем для него тип ДокументСсылка.ПоступлениеТоваровУслуг. Для этого в дереве метаданных внешней обработки 1С выделим пункт Реквизиты и нажмем кнопку Добавить (кнопка с зеленым плюсом). В правой части экрана откроется окно свойств реквизита, в поле Имя впишем — СсылкаНаОбъект. В поле Тип нажмем кнопку с тремя точками.

Создание реквизита внешней обработки

В дереве типов раскроем ветку ДокументСсылка, и найдем там элемент ПоступлениеТоваровУслуг, поставим напротив него галочку и нажмем ОК.

Сохраним файл внешней обработки на жесткий диск, для этого воспользуемся меню Файл -> Сохранить, пиктограммой Сохранить (синяя дискета), либо сочетанием клавиш Ctrl + S. Назовем сохраняемый файл «ПечатнаяФорма».

Создание макета печатной формы

Приступим к созданию макета печатной формы 1С. Макет служит шаблоном для вывода печатной формы, поэтому если хотите, чтобы ваша печатная форма выглядела хорошо, следует уделить ему внимание.

В дереве метаданных внешней обработки добавим новый макет, в окне конструктора макета ничего менять не будем и нажмем кнопку Готово.

Создание печатной формы 1С. Конструктор макета 1С

В открывшемся новом макете создадим несколько областей, необходимых для вывода печатной формы. Все необходимые нам области макета будут горизонтальными, поэтому для создания новой области следует выделить необходимое количество строк макета и перейти в меню Таблица -> Имена -> Назначить имя или использовать сочетание клавиш Ctrl + Shift + N, после чего ввести в окошке имя области. При создании области макета не бойтесь ошибиться с количеством строк их всегда можно будет добавить или убрать. Для удаления строки макета 1С выделите нужную строку и выберите в контекстном меню пункт Удалить. Для добавление новой строки в макет, выделите любую строку макета и выберите в контекстном меню пункт Раздвинуть.

Добавление шапки макета

В первую очередь создадим область Шапка, в нее будут выводится данные для заголовка печатной формы. Для данной области нам потребуется семь строк макета. Выделим их и, как я уже писал выше, нажмем сочетание клавиш Ctrl + Shift + N, в поле Имя напишем «Шапка» и нажмем кнопку ОК.

Создание области макета 1С

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

Обычно хватает тринадцать или четырнадцать ячеек макета, выделим их в первой строке области Шапка и объединим в одну ячейку (Контекстное меню -> Объединить). После этого дважды щелкнем по получившейся большой ячейке и напишем название параметра, в нашем случае «ТекстЗаголовка». Для того чтобы введенный текст стал полноценным параметром щелкнем по ячейке правой кнопкой мыши и в контекстном меню выберем пункт Свойства. На закладке Макет найдем поле Заполнение и выберем значение Параметр. Параметры в макете 1С обозначаются скобками «<>».

Заголовок печатной формы должен выделяться среди прочего текста, поэтому еще раз выделим ячейку и при помощи пиктограмм на панели форматирования макета, поставим выравнивание текста По центру и размер шрифта 14.

Форматирование ячейки макета

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

Шапка печатной формы 1С

На рисунке видно, как отличаются параметры макета, от обычного текста.

Добавление шапки таблицы макета

Последнее, что нам необходимо создать в данной области макета — это шапка таблицы, в которую будут выводится данные табличной части Товары. Колонки необходимые для таблицы были описаны в разделе «Постановка задачи». Шапку таблицы также создадим используя объединение ячеек и написания текста (названий колонок). Границы шапки таблицы выделим при помощи инструмента Рамка, который расположен на панели форматирования макета.

Создание шапки таблицы в макете 1С

Добавление таблицы в макет

Создадим в макете еще одну область — Данные. В нее будет выводится таблица данных табличной части Товары. Для данной области нам понадобится только одна строка макета. Чтобы вывести все строки табличной части в печатную форму мы будем заполнять и выводить данную область нужное количество раз. Колонки в области Данные должны совпадать с колонками шапки таблицы, поэтому заполнить ее не составит труда. Единственное отличие — в области Данные нам нужны параметры, а не просто текст. Также заметьте, что по умолчанию числовые параметры форматируются по правому краю, а текстовые по левому. Для выделения колонок, также необходимо использовать инструмент Рамка.

Область Данные макета печатной формы

Добавление подвала в макет

Последняя необходимая нам область макета — это Подвал. В нее будут выводиться итоги по количеству и сумме. Создание аналогично созданию области Данные, но дополнительно следует выделить итоги жирным шрифтом.

В итоге должен получиться макет следующего вида:

Создание печатной формы 1С макет

Создание печатной формы 1С. Программирование

Приступим к программированию — это важнейший этап создания печатной формы. В первую очередь перейдем в модуль объекта внешней печатной формы, именно там мы будем программировать. Для этого в основном окне внешней обработки нажмем Действия -> Открыть модуль объекта.

Создание печатной формы 1С - ереход в модуль объекта

В модуле объекта внешней печатной формы необходимо создать экспортную функцию Печать().

Функция Печать() Экспорт

КонецФункции

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

Инициализация основных переменных

Создадим переменную ТабДок, в которой будет содержаться табличный документ — именно он и есть печатная форма, в которую мы будем выводить заполненные области макета.

ТабДок = новый ТабличныйДокумент;

В переменную Макет получим созданный нами макет печатной формы. Для этого используем встроенную функцию ПолучитьМакет(<ИмяМакета>).

Макет = ПолучитьМакет("Макет");

Все области макета получим в переменные. Для этого используем метод макета ПолучитьОбласть(<ИмяОбласти>).

ОбластьШапки   = Макет.ПолучитьОбласть("Шапка");
ОбластьДанные  = Макет.ПолучитьОбласть("Данные");
ОбластьПодвал  = Макет.ПолучитьОбласть("Подвал");

Вывод шапки печатной формы в табличный документ

Все необходимые переменные инициализированы. Приступим к заполнению и выводу областей макета в табличный документ. В первую очередь заполним заголовок печатной формы, для этого нам необходимо передать в параметр ТекстЗаголовка, который мы создали в макете, нужный нам текст. Для заполнения значений параметров у области макета существует специальная коллекция, которая так и называется — Параметры. Из которой через «.» можно получить любой параметр. В текст заголовка передадим текст: «Печатная форма», а также номер документа.

ОбластьШапки.Параметры.ТекстЗаголовка 
    = "Печатная форма "+СсылкаНаОбъект.Номер;

Остальные параметры шапки заполним подобным образом, все необходимые для них значения получим из реквизита СсылкаНаОбъект, в котором содержится ссылка на печатаемый документ.

ОбластьШапки.Параметры.Организация        = СсылкаНаОбъект.Организация;
ОбластьШапки.Параметры.Контрагент         = СсылкаНаОбъект.Контрагент;
ОбластьШапки.Параметры.ДатаПоступления    = СсылкаНаОбъект.Дата;
ОбластьШапки.Параметры.ДоговорКонтрагента 
    = СсылкаНаОбъект.ДоговорКонтрагента;

Все параметры шапки заполнены, выведем ее в созданный нами табличный документ, для этого используем метод Вывести(<Область>).

ТабДок.Вывести(ОбластьШапки);

Написание запроса для печатной форы

Займемся заполнением и выводом области Данные. Создание печатной формы 1С подразумевает и написание запроса, нам он необходим для получения данных табличной части Товары и цен Номенклатуры на текущую дату будем использовать Запрос. Язык запросов 1С 8 похож на SQL, а точнее практически копирует возможности его оператора SELECT, но при этом весь запрос пишется на русском языке. Поэтому если вы хотя бы отдаленно знакомы с SQL, то и язык запросов 1С 8 поймете легко.

В данной печатной форме запрос будет довольно простым и многие скажут, что можно было бы обойтись и без него, но знание языка запросов и умение его грамотно использовать — одно из главных умений программиста 1С. Запросы позволяют используя меньшие ресурсы получать сложнейшие выборки данных, а также в тексте запроса намного легче разобраться, чем в программном коде написанном без использования запроса (или с минимальным его использованием). К тому же, в 1С 8 есть очень хороший конструктор запросов, позволяющий в интерактивном режиме собирать запрос из нужных таблиц.

Создадим переменную, которая будет содержать в себе запрос.

Запрос = Новый Запрос;

Текст запроса будем составлять при помощи конструктора запросов. Для начала напишем:

Запрос.Текст = "";

Поставим курсор мышки между кавычками, нажмем правую кнопку мыши. В открывшемся контекстном меню выберем пункт Конструктор запроса, он очень поможет нам в создании печатной формы 1С. После этого откроется окно конструктора запроса, оно содержит много вкладок, но для нашего запроса понадобятся только четыре: «Таблицы и поля», «Связи», «Условия», «Объединения / Псевдонимы».

 Конструктор запросов 1С

Для нашего запроса нам понадобятся две таблицы: табличная часть Товары документа Поступление товаров и услуг и срез последних на текущую дату регистра сведений Цены номенклатуры.

В левой части окна конструктора найдем столбец База данных. В нем находится дерево всех объектов метаданных, найдем нужные нам. Для этого раскроем ветку Документы и отыщем документ ПоступлениеТоваровУслуг, раскроем его и найдем табличную часть Товары, перетащим ее в столбец конструктора запросов Таблицы. Перетащить можно тремя способами: собственно перетаскиванием, двойным щелчком по таблице или выделив ее и нажав кнопку «>». Раскроем ветку РегистрыСведений и найдем там таблицу ЦеныНоменклатуры.СрезПоследних, также перетащим ее в столбец Таблицы. Этих двух таблиц достаточно для нашего запроса.

Выберем нужные нам поля из полученных таблиц. Для этого в столбце Таблицы раскроем таблицу ПоступлениеТоваровУслугТовары и найдем поля: Номенклатура, Сумма, Цена, Количество и перетащим их в третий столбец конструктора — Поля. Раскроем таблицу ЦеныНоменклатурыСрезПоследних, найдем поле Цена и тоже перетащим его в Поля.

Конструктор запросов таблицы и поля

Структура таблиц и полей нашего запроса готова, теперь займемся условиями. Нам необходимо чтобы данные табличной части Товары брались не из всех поступлений, а только из того, которое мы печатаем. Для этого наложим условие на таблицу ПоступлениеТоваровУслугТовары. Перейдем на закладку «Условия» конструктора запросов. В колонке Поля расположены выбранные нами ранее таблицы, для условия нам понадобится поле Ссылка из таблицы ПоступлениеТоваровУслугТовары, перетащим его в окно Условия.

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

После того, как в окно Условия мы добавили поле Ссылка, конструктор запросов сам создаст параметр с аналогичным названием и расположит его после знака «=». Данный параметр можно переименовать, если есть желание. В тексте запроса параметры помечаются знаком «&», но в данном случае этого делать не нужно, так как подразумевается, что во второй части условия стоит параметр, это просто надо запомнить. О том как передать значение в параметр запроса 1С будет рассказано ниже.

Условия в конструкторе запросов 1С

Так как в запросе мы используем не полную таблицу цен номенклатуры, а виртуальную (срез последних в данном случае), то нам необходимо задать условия формирования этой виртуальной таблицы, в нашем случае это дата среза и условие на тип цен (должны выбираться цены имеющие строго определенный тип цен — тот который задан в документе поступления, который мы выводим на печать).

Для заполнения параметров виртуальной таблицы перейдем на закладку Таблицы и поля конструктора запроса, в колонке Таблицы выделим таблицу ЦеныНоменклатурыСрезПоследних и нажмем кнопку Параметры виртуальной таблицы, расположенную вверху. В открывшемся окне, в поле Период следует задать параметр, в который будет передаваться дата, на которую будет делаться срез цен. В нашем случае это будет текущая дата (то есть сегодня), поэтому и параметр назовем «&ТекущаяДата». В поле условия напишем условия на тип цен, его мы тоже передадим в параметре, который назовем «&ТипЦен». Получившееся условие будет выглядеть следующим образом (где ТипЦен — измерение регистра Цены номенклатуры):

ТипЦен = &ТипЦен

Параметры виртуальной таблицы заполнены, нажмем кнопку ОК.

Заполнение параметров виртуальной таблицы

Теперь, когда мы ограничили выборку только нужным нам документом, создадим связи между таблицами запроса. Если этого не сделать, то цены из таблицы ЦеныНоменклатурыСрезПоследних не будут связаны с номенклатурой из поступления. Перейдем на вкладку Связи конструктора запросов. Создадим связь по полю Номенклатура между двумя нашими таблицами. Для этого нажмем кнопку Добавить, в поле Таблица 1 выберем таблицу ПоступлениеТоваровУслугТовары, а в поле Таблица 2 — ЦеныНоменклатурыСрезПоследних. В условиях связи выберем поля Номенклатура из обоих таблиц.

Также следует заметить, что в выборке запроса нам необходимо получить все строки из табчасти Товары и цены только в том случае, если таковые имеются на текущую дату по типу цен документа. Таким образом данные табчасти Товары являются обязательными, а данные среза цен нет. Поэтому в связях между этими таблицами необходимо использовать так называемое ЛЕВОЕ СОЕДИНЕНИЕ, причем левой (или обязательной) таблицей будет ПоступлениеТоваровУслугТовары, а правой (или необязательной) ЦеныНоменклатурыСрезПоследних. Для того чтобы левое соединение таблиц запроса заработало так как я описал выше необходимо поставить галочку Все после поля Таблица 1.

Связи между таблицами запроса

Запрос практически готов, осталось только немного поработать над псевдонимами полей. Перейдем на закладку Объединения / Псевдонимы и зададим псевдоним для поля ЦеныНоменклатурыСрезПоследних.Цена. Имя псевдонима будет — ЦенаНаСегодня, нужен он для того чтобы имена полей выборки запроса и имена параметров в макете печатной формы совпадали.

Псевдонимы полей запроса 1С

Работа в конструкторе запросов на этом закончена, нажмем кнопку ОК. После того, как окно конструктора закроется вы увидите, что строка с текстом запроса заполнена и имеет следующий вид:

Запрос.Текст = "ВЫБРАТЬ
| ПоступлениеТоваровУслугТовары.Номенклатура,
| ПоступлениеТоваровУслугТовары.Сумма,
| ПоступлениеТоваровУслугТовары.Цена,
| ПоступлениеТоваровУслугТовары.Количество,
| ЦеныНоменклатурыСрезПоследних.Цена КАК ЦенаНаСегодня
|ИЗ
|Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
|  ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
|   &ТекущаяДата, ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
|  ПО ПоступлениеТоваровУслугТовары.Номенклатура 
|      = ЦеныНоменклатурыСрезПоследних.Номенклатура
|ГДЕ
| ПоступлениеТоваровУслугТовары.Ссылка = &Ссылка";

Выполнение запроса

Передадим в запрос необходимые параметры, для этого воспользуемся методом запроса УстановитьПараметр(<ИмяПараметра>,<Значение>). Для получения текущей даты воспользуемся встроенной функцией ТекущаяДата(), она возвращает дату и время компьютера.

Запрос.УстановитьПараметр("Ссылка",СсылкаНаОбъект);
Запрос.УстановитьПараметр("ТекущаяДата",ТекущаяДата());
Запрос.УстановитьПараметр("ТипЦен",СсылкаНаОбъект.ТипЦен);

Выполним запрос для получения выборки с нужными нам данными. Для этого сначала воспользуемся методом запроса Выполнить(), а затем методом Выбрать().

Выборка = Запрос.Выполнить().Выбрать();

Заполнение таблицы печатной формы

В итоге, в переменной Выборка будет содержаться выборка результатов запроса, перемещаться по ней можно по при помощи метода Следующий(), а чтобы обойти целиком понадобится цикл Пока. Конструкция получится следующая:

Пока Выборка.Следующий() Цикл
КонецЦикла;

Именно в этом цикле мы будем заполнять и выводить область макета Данные. Но для начала инициализируем две переменные числового типа. В них будем собирать итоги по количеству и сумме, которые нам необходимо вывести в область Подвал.

ИтогоСумма      = 0;
ИтогоКоличество = 0;

Внутри цикла будем заполнять область Данные данными из текущего элемента выборки, в переменные ИтогоСумма и ИтогоКоличество добавлять значения суммы и количества, и наконец, выводить область в табличный документ при помощи уже знакомого нам метода Вывести(). Так как имена полей нашего запроса полностью совпадают с именами параметров области Данные, то для заполнения будем использовать встроенную процедуру ЗаполнитьЗначенияСвойств(<Приемник>, <Источник>), которая копирует значения свойств <Источника> в свойства <Приемника>.

Пока Выборка.Следующий() Цикл
    ЗаполнитьЗначенияСвойств(ОбластьДанные.Параметры,Выборка);

    ИтогоСумма = ИтогоСумма + Выборка.Сумма;
    ИтогоКоличество = ИтогоКоличество + Выборка.Количество;

    ТабДок.Вывести(ОбластьДанные);
КонецЦикла;

Вывод подвала печатной формы в табличный документ

Осталось заполнить и вывести последнюю область макета — Подвал. Данные для заполнения мы уже подготовили, заполнение и вывод осуществляем по той же схеме.

ОбластьПодвал.Параметры.ИтогоКоличество = ИтогоКоличество;
ОбластьПодвал.Параметры.ИтогоСумма      = ИтогоСумма;
	
ТабДок.Вывести(ОбластьПодвал);

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

Возврат ТабДок;

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

Создание печатной формы 1С. Параметры авторегистрации

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

Делается он следующим образом:

  • Во внешней обработке создаем новый макет. Называем его «Параметры_Авторегистрации» (важно не ошибиться!).
  • В первой ячейке макета пишем Документы. (или Справочники.) и имя документа к которому необходимо подключить печатную форму.

Макет с параметрами авторегистрации

Подключение к базе внешней печатной формы

  • Запустите 1С 8 в режиме Предприятие;
  • Перейдите в меню Сервис -> Дополнительные отчеты и обработки -> Дополнительные внешние печатные формы;
  • Нажмите кнопку Добавить;
  • В открывшемся окне нажмите пиктограмму Заменить файл внешней обработки;
  • Если у вас созданы параметры авторегистрации, то соглашаемся их использовать;
  • Если у вас не созданы параметры авторегистрации, то в табличную часть Принадлежность печатной формы добавляем нужный документ или справочник;
  • Нажимаем кнопку ОК.

Регистрация внешней печатной формы

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

Скачать внешнюю печатную форму рассмотренную в статье: Внешняя печатная форма


Рассмотрим написание простейшей внешней печатной формы в 1С 8.3 для управляемого приложения на примере конфигураций Бухгалтерия 3.0 и Управление торговлей 11 (данная печатная форма будет работать в обоих этих конфигурациях).

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

Создание внешней обработки

В конфигураторе 1C Предприятия 8 создаем внешнюю обработку (Файл->Новый->Внешняя обработка), задаем имя, добавляем реквизит Документ с типом ДокументСсылка.РеализацияТоваровУслуг, он не является обязательным для работы печатной формы, но пригодится нам для ее регистрации в базе.

создание пустой обработки в 1С 8.3

Создание макета печатной формы

Добавляем новый макет, тип макета оставляем Табличный документ. На макете создаем три области: Шапка, Данные и Подвал. Сделать это можно выделив нужное количество строк и нажав меню Таблица->Имена->Назначить имя (Ctrl+Shift+N).

Наша команда предоставляет услуги по консультированию, настройке и внедрению 1С.

Связаться с нами можно по телефону +7 499 350 29 00.

Услуги и цены можно увидеть по ссылке.

Будем рады помочь Вам!

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

В области Данные создадим параметры для вывода строк табличной части(Номенклатура, цена и т.д.), а в области Подвал для итогов по количеству и сумме.

создание параметра на макете

Программирование

Зайдем в модуль объекта печатной формы Действия->Открыть модуль объекта.

создание реквизита

Теперь в модуле объекта следует создать обязательную функцию СведенияОВнешнейОбработке(). Она необходима для регистрации печатной формы в справочнике ДополнительныеОтчетыИОбработки, в ней собирается структура с данными для подключения формы. Эта функция, а также ряд сопутствующих ей, практически одинаковы для всех печатных форм, поэтому их можно просто копировать в новую печатную форму ничего не меняя.

Рассмотрим содержание функции СведенияОВнешнейОбработке(). Для начала создадим ее в модуле:

Функция СведенияОВнешнейОбработке() Экспорт

КонецФункции

Создадим структуру ПараметрыРегистрации в которой и будут храниться все данные необходимые для регистрации.

ПараметрыРегистрации = Новый Структура;

Создадим массив МассивНазначений в котором будут храниться наименования документов и справочников из которых будет производиться печать.

МассивНазначений = Новый Массив;

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

Функция УказатьНаименованиеВнешнейПечатнойФормы()

    Наименование = ЭтотОбъект.Метаданные().Представление();
    Возврат Наименование;

КонецФункции

А теперь заполним переменную.

Наименование = УказатьНаименованиеВнешнейПечатнойФормы();

Заполним МассивНазначений используя реквизит внешней обработки Документ. Также вынесем получение элемента массива в отдельную функцию.

Функция ПолучитьМетаданныеДокументаПечати()

    ПолноеИмя = Документ.Метаданные().ПолноеИмя();
    Возврат ПолноеИмя;

КонецФункции

А теперь добавим полученные данные в массив.

МассивНазначений.Добавить(ПолучитьМетаданныеДокументаПечати());

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

Приступим к заполнению структуры ПараметрыРегистрации.

Вид внешней обработки, может быть: ЗаполнениеОбъекта, ДополнительныйОтчет, СозданиеСвязанныхОбъектов, ПечатнаяФорма и т.д.

ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");

Назначение заполним уже полученным массивом:

ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);

Наименование из уже заполненной переменной:

ПараметрыРегистрации.Вставить("Наименование", Наименование);

Номер версии можно поставить любой по желанию:

ПараметрыРегистрации.Вставить("Версия", "1.1");

Безопасный режим не даст печатной форме вносить изменения в базу данных. Но она у нас вполне безобидна =), поэтому ставим значение Ложь.

ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);

В поле Информация вносим описание печатной формы для пользователя. Запишем туда Наименование.

ПараметрыРегистрации.Вставить("Информация", Наименование);

Приступим к созданию команды, которая необходима для вывода на печать нашей печатной формы. Опишем колонки ТаблицыКоманд, вынеся это в отдельную функцию.

Функция ПолучитьТаблицуКоманд()

    Команды = Новый ТаблицаЗначений;
    //как будет выглядеть описание печ.формы для пользователя
    Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
    //имя макета печ.формы
    Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
    //ВызовСерверногоМетода
    Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
    Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));

    Возврат Команды;
КонецФункции

Вызовем сознанную функцию.

ТаблицаКоманд = ПолучитьТаблицуКоманд();

Добавим команду печати, вынеся этот процесс в отдельную функцию:

Функция ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")

    НоваяКоманда = ТаблицаКоманд.Добавить();
    НоваяКоманда. Представление = Представление;
    НоваяКоманда. Идентификатор= Идентификатор;
    НоваяКоманда. Использование= Использование;
    НоваяКоманда. ПоказыватьОповещение= ПоказыватьОповещение;
    НоваяКоманда. Модификатор= Модификатор;

КонецФункции

Параметры функции ДобавитьКоманду:

  • ТаблицаКоманд — созданная в предыдущей функции Таблица значений с типовым набором полей;
  • Представление — передадим в параметр Наименование печатной формы;
  • Идентификатор — передадим в параметр полное наименование внешней обработки. Вынесем процесс получения в отдельную функцию:
    Функция УказатьНаименованиеКомандыПечати()
        Наименование = ЭтотОбъект.Метаданные().ПолноеИмя();
        Возврат Наименование;
    КонецФункции
    
  • Использование * — здесь возможны два значения:
    • ВызовСерверногоМетода — если обязательная функция Печать() будет находиться в модуле объекта печатной формы и выполняться на стороне сервера(в нашем примере будем использовать именно это значение);
    • ВызовКлиентскогоМетода — если обязательная функция Печать() будет находиться в модуле основной формы внешней обработки и выполняться на стороне клиента;
  • ПоказыватьОповещение — параметр отвечает за вывод оповещения о печати;
  • Модификатор — для печатных форм используется значение ПечатьMXL.

Вызов функции выглядит так:

ДобавитьКоманду(ТаблицаКоманд, Наименование, УказатьНаименованиеКомандыПечати(), "ВызовСерверногоМетода", Истина, "ПечатьMXL");

Осталось передать заполненную таблицу команд в ПараметрыРегистрации:

ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);

И возвратить их из функции:

Возврат ПараметрыРегистрации;

На этом создание функции СведенияОВнешнейОбработке() завершено, все параметры необходимые для регистрации печатной формы собраны. Вот полный код этой и сопутствующих функций:

Функция СведенияОВнешнейОбработке() Экспорт

    ПараметрыРегистрации = Новый Структура;
    МассивНазначений = Новый Массив;

    Наименование = УказатьНаименованиеВнешнейПечатнойФормы();

    МассивНазначений.Добавить(ПолучитьМетаданныеДокументаПечати());
    //может быть - ЗаполнениеОбъекта, ДополнительныйОтчет, СозданиеСвязанныхОбъектов...
    ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");
    ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
    //имя под которым обработка будет зарегестрирована в справочнике внешних обработок
    ПараметрыРегистрации.Вставить("Наименование", Наименование);
    ПараметрыРегистрации.Вставить("Версия", "1.1");
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
    //так будет выглядеть описание печ.формы для пользователя
    ПараметрыРегистрации.Вставить("Информация", Наименование);

    ТаблицаКоманд = ПолучитьТаблицуКоманд();
    ДобавитьКоманду(ТаблицаКоманд, Наименование, УказатьНаименованиеКомандыПечати(), "ВызовСерверногоМетода", Истина, "ПечатьMXL");

    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);

    Возврат ПараметрыРегистрации;

КонецФункции

Функция ПолучитьТаблицуКоманд()

    Команды = Новый ТаблицаЗначений;
    //как будет выглядеть описание печ.формы для пользователя
    Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
    //имя макета печ.формы
    Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
    //ВызовСерверногоМетода
    Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
    Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));

    Возврат Команды;
КонецФункции

Функция УказатьНаименованиеВнешнейПечатнойФормы()

    Наименование = ЭтотОбъект.Метаданные().Представление();
    Возврат Наименование;

КонецФункции

Функция УказатьНаименованиеКомандыПечати()

    Наименование = ЭтотОбъект.Метаданные().ПолноеИмя();
    Возврат Наименование;

КонецФункции

Функция ПолучитьМетаданныеДокументаПечати()

    ПолноеИмя = Документ.Метаданные().ПолноеИмя();
    Возврат ПолноеИмя;

КонецФункции

Функция ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")

    НоваяКоманда = ТаблицаКоманд.Добавить();
    НоваяКоманда. Представление = Представление;
    НоваяКоманда. Идентификатор= Идентификатор;
    НоваяКоманда. Использование= Использование;
    НоваяКоманда. ПоказыватьОповещение= ПоказыватьОповещение;
    НоваяКоманда. Модификатор= Модификатор;

КонецФункции

Приступим к написанию кода, который будет формировать нашу печатную форму. Так как при создании команды печати мы использовали параметр ВызовСерверногоМетода, то в модуле объекта создаем обязательную серверную процедуру Печать(если использовать ВызовКлиентскогоМетода, то процедура Печать должна быть клиентской и располагаться в модуле основной формы обработки).

Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

КонецПроцедуры
  • МассивОбъектов — массив содержащий ссылки на печатаемые документы или справочники(аналог СсылкаНаОбъект в обычном приложении);
  • КоллекцияПечатныхФорм — таблица значений содержащая сформированные табличные документы;
  • ОбъектыПечати — строковой параметр, в котором передаются имена макетов печатных форм перечисленные через запятую;
  • ПараметрыВывода – параметры вывода табличных документов на печать.

В процедуре Печать нам следует сформировать табличный документ с данными нашей печатной формы и добавить его в Коллекцию печатных форм. Для заполнения табличного документа создадим в модуле объекта серверную функцию ПечатьФормы, передадим в параметр массив со ссылками на печатаемые документы(МассивОбъектов).

Функция ПечатьФормы(МассивОбъектов)

КонецФункции

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

ТабДок = новый ТабличныйДокумент;

Макет = ПолучитьМакет("Макет");

ОбластьШапки   = Макет.ПолучитьОбласть("Шапка");
ОбластьДанные  = Макет.ПолучитьОбласть("Данные");
ОбластьПодвал  = Макет.ПолучитьОбласть("Подвал");

Для того чтобы получить строки табличной части Товары всех печатаемых документов используем запрос.

Запрос = новый запрос;
Запрос.УстановитьПараметр("МассивОбъектов",МассивОбъектов);
Запрос.Текст = "ВЫБРАТЬ
|   РеализацияТоваровУслугТовары.Номенклатура,
|   РеализацияТоваровУслугТовары.Сумма,
|   РеализацияТоваровУслугТовары.Цена,
|   РеализацияТоваровУслугТовары.Количество,
|   РеализацияТоваровУслугТовары.Ссылка
|ИЗ
|   Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
|ГДЕ
|   РеализацияТоваровУслугТовары.Ссылка В(&МассивОбъектов)";

В параметр запроса передаем МассивОбъектов, что бы указать в условии ГДЕ, что нам нужны данные только тех документов из которых выводим печатную форму. Чтобы получить выборку запроса, сначала выполняем его, а затем выгружаем.

ОбщаяВыборка = Запрос.Выполнить().Выгрузить();

Теперь при помощи цикла обойдем все ссылки из массива объектов и в одном табличном документесформируем печатные формы для всех выбранных документов.

Для Каждого СсылкаНаОбъект из МассивОбъектов Цикл

КонецЦикла;

В данном цикле начнем формирование печатных форм каждого из документов.

Заполним параметры шапки и выведем ее в табличный документ.

ОбластьШапки.Параметры.ТекстЗаголовка = "Печатная форма "+СсылкаНаОбъект.Номер;
ОбластьШапки.Параметры.Организация = СсылкаНаОбъект.Организация;

ТабДок.Вывести(ОбластьШапки);

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

Отбор = Новый Структура;
Отбор.Вставить("Ссылка",СсылкаНаОбъект);

Теперь отберем нужные строки используя метод НайтиСтроки(<Структура отбора>) и получим выборку по документу.

Выборка = ОбщаяВыборка.НайтиСтроки(Отбор);

Далее в цикле заполняем параметры области Данные для каждой строки выборки документа и выводим их в табличный документ. Также в цикле считаем итоговые значения количества и суммы. Заполнять каждый параметр в отдельности мы не будем, а используем процедуру ЗаполнитьЗначенияСвойств((<Приемник>, <Источник>) из глобального контекста, она копирует значения свойств <Источника> в свойства <Приемника>. Сопоставление производится по именам свойств. Подробнее об этом можно прочитать в синтаксис-помощнике 1С Предприятия 8.

ИтогоСумма      = 0;
ИтогоКоличество = 0;

Для Каждого Стр из Выборка Цикл
    ЗаполнитьЗначенияСвойств(ОбластьДанные.Параметры,Стр);

    ИтогоСумма = ИтогоСумма + Стр.Сумма;
    ИтогоКоличество = ИтогоКоличество + Стр.Количество;

    ТабДок.Вывести(ОбластьДанные);
КонецЦикла;

Заполним и выведем область Подвал.

ОбластьПодвал.Параметры.ИтогоКоличество = ИтогоКоличество;
ОбластьПодвал.Параметры.ИтогоСумма      = ИтогоСумма;

ТабДок.Вывести(ОбластьПодвал);

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

ТабДок.ВывестиГоризонтальныйРазделительСтраниц();

Возвращаем заполненный табличный документ из функции ПечатьФормы.

Возврат ТабДок;

Код функции ПечатьФормы целиком:

Функция ПечатьФормы(МассивОбъектов) Экспорт
    ТабДок = новый ТабличныйДокумент;

    Макет = ПолучитьМакет("Макет");

    ОбластьШапки   = Макет.ПолучитьОбласть("Шапка");
    ОбластьДанные  = Макет.ПолучитьОбласть("Данные");
    ОбластьПодвал  = Макет.ПолучитьОбласть("Подвал");

    Запрос = новый запрос;
    Запрос.УстановитьПараметр("МассивОбъектов",МассивОбъектов);
    Запрос.Текст = "ВЫБРАТЬ
    |   РеализацияТоваровУслугТовары.Номенклатура,
    |   РеализацияТоваровУслугТовары.Сумма,
    |   РеализацияТоваровУслугТовары.Цена,
    |   РеализацияТоваровУслугТовары.Количество,
    |   РеализацияТоваровУслугТовары.Ссылка
    |ИЗ
    |   Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
    |ГДЕ
    |   РеализацияТоваровУслугТовары.Ссылка В(&МассивОбъектов)";

    ОбщаяВыборка = Запрос.Выполнить().Выгрузить();

    Для Каждого СсылкаНаОбъект из МассивОбъектов Цикл

        ОбластьШапки.Параметры.ТекстЗаголовка = "Печатная форма "+СсылкаНаОбъект.Номер;
        ОбластьШапки.Параметры.Организация = СсылкаНаОбъект.Организация;

        ТабДок.Вывести(ОбластьШапки);

        Отбор = Новый Структура;
        Отбор.Вставить("Ссылка",СсылкаНаОбъект);

        Выборка = ОбщаяВыборка.НайтиСтроки(Отбор);

        ИтогоСумма      = 0;
        ИтогоКоличество = 0;

        Для Каждого Стр из Выборка Цикл
            ЗаполнитьЗначенияСвойств(ОбластьДанные.Параметры,Стр);

            ИтогоСумма = ИтогоСумма + Стр.Сумма;
            ИтогоКоличество = ИтогоКоличество + Стр.Количество;

            ТабДок.Вывести(ОбластьДанные);
        КонецЦикла;

        ОбластьПодвал.Параметры.ИтогоКоличество = ИтогоКоличество;
        ОбластьПодвал.Параметры.ИтогоСумма      = ИтогоСумма;

        ТабДок.Вывести(ОбластьПодвал);

        ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
    КонецЦикла;

    возврат ТабДок;
КонецФункции

Теперь осталось добавить сформированный табличный документ Коллекцию печатных форм. Для добавления табличного документа в коллекцию можно воспользоваться типовой процедурой ВывестиТабличныйДокументВКоллекцию из модуля УправлениеПечатью(процедура есть и в Бухгалтерии 3.0и в Управление торговлей 11). В параметры этой процедуры необходимо передать:

  • КоллекцияПечатныхФорм — таблица значений содержащая сформированные табличные документы;;
  • ИмяМакета — наименование команды печати;
  • СинонимМакета — наименование печатной формы;
  • ТабличныйДокумент — заполненный табличный документ.

Для параметров ИмяМакета и СинонимМакета используем уже созданные нами процедуры, которые использовались для заполнения сведений о внешней обработки. Таким образом процедура Печать будет выглядеть следующим образом:

Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

    УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
        КоллекцияПечатныхФорм,
        УказатьНаименованиеКомандыПечати(),
        УказатьНаименованиеВнешнейПечатнойФормы(),
        ПечатьФормы(МассивОбъектов));

КонецПроцедуры

Обратите внимание, что для заполнения параметра ТабличныйДокумент вызывается функция ПечатьФормы, которая описана выше.

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

Продолжение следует…

Смотрите видео по созданию внешней печатной формы для управляемого приложения:

В 1С Бухгалтерия 3.0 можно создавать свои печатные формы к справочникам и документам 1С (с релиза 3.0.113). Расскажем, как создать новые формы для печати без помощи программиста.

Принцип работы функционала

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

Что-то похожее реализовано сейчас в 1С Бухгалтерия 3.0 в пользовательском режиме.

Функционал размещается в разделе Администрирование — Внешние печатные формы, отчеты и обработки — Макеты печатных форм:

При открытии формы макетов открывается список документов и справочников 1С с установленными типовыми печатными формами:

Чтобы создать свою печатную форму к определенному объекту конфигурации, найдите его в этом списке, установите курсор на нужной строке и нажмите кнопку Создать:

Программа откроет специальный инструмент — Конструктор создания печатных форм. Перейдите в него, предварительно задав имя новой печатной формы:

В левой части Конструктор создания печатных форм располагается окно макета печатной формы (на этом этапе пустое), в правой части — список доступных реквизитов для использования в печатной форме:

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

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

Создание новой печатной формы

Требуется создать печатную форму к справочнику Сотрудники, где была бы информация по личным данным физического лица и дополнительным сведениям, которые указаны в дополнительных реквизитах к справочнику Сотрудники:

  • ФИО;
  • Дата рождения;
  • Место проживания;
  • ИНН;
  • Банковский счет;
  • Категория;
  • Аттестация;
  • Медосмотр;
  • Замещает сотрудника;
  • Повышение квалификации.

Дополнительная информация для сотрудников заведена в Дополнительных реквизитах и сведениях раздела Администрирование — Общие настройки — Дополнительные реквизиты и сведения. В типовые отчеты мы не можем без программиста вставить дополнительные реквизиты и сведения, но в Конструкторе создания печатных форм нам подвластно и это.

Пошаговая инструкция создания печатной формы Дополнительная информация:

  1. Откройте макеты печатных форм объектов 1С в разделе Администрирование — Внешние печатные формы, отчеты и обработки — Макеты печатных форм.
  2. Найдите в списке объектов строчку Сотрудники, установите на нее курсор и нажмите кнопку Создать.
  3. В открывшемся окне введите наименование объекта Дополнительная информация:
    Так в списке печатных форм будет называться новая печатная форма.
  4. В форме Конструктора создания печатных форм в правом окне найдите нужные реквизиты для переноса в макет:
    • Аттестация;
    • Замещает сотрудника;
    • Категория;
    • Медосмотр;
    • Повышение квалификации;
    • Физическое лицо;
  5. Определитесь со структурой печатной формы. В нашем примере личные данные сотрудника мы выводим в таблицу печатной формы, а дополнительную информацию — построчно.
  6. В левом окне вручную введите название Дополнительная информация и перетяните из правого окошка в левое ссылку Физическое лицо. Чтобы выделить заголовок жирным шрифтом и увеличить буквы, используйте командную панель редактирования «Увеличить шрифт» и «Жирный шрифт»:
  7. Нарисуйте таблицу для расположения в ней личных данных сотрудника: День рождения, ИНН, Место проживания и Банковский счет. В нашем примере сотрудник получает зарплату на карточку:
    Для прорисовки таблицы используйте соответствующую кнопку командной панели. Разместите в Шапке заголовки колонок и перетащите в каждую колонку нужную информацию из данных ссылки Физическое лицо:
    Чтобы строки не обрезались, а автоматически переносились в колонке, если не помещаются полностью, можно использовать вызов команды правой кнопки мыши Свойства — Размещение — Переносить:  
  8. Расположите дополнительную информацию по сотруднику, перетянув нужные данные из правого окна в макет:
    Для красивого размещения данных вызовите правой кнопкой мыши команду контекстного меню Объединить:

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

  9. Сохраните макет по кнопке Записать и закрыть. В списке макетов появится неактивный новый макет Дополнительная информация. Установите флаг доступности печатной формы для активации ее в справочнике Сотрудники:
    После записи новой печатной формы в списке доступных печатных форм справочника Сотрудники добавится созданная форма Дополнительная информация:
  10. Откройте справочник Сотрудники и протестируйте работу новой печатной формы:

См. также:

  • Путеводитель по заполнению документов
  • Загрузка данных из табличного документа 1С 8.3
  • История изменения объектов
  • Подписи на электронных документах

Если Вы еще не подписаны:

Активировать демо-доступ бесплатно →

или

Оформить подписку на Рубрикатор →

После оформления подписки вам станут доступны все материалы по 1С:Бухгалтерия, записи поддерживающих эфиров и вы сможете задавать любые вопросы по 1С.

Подписывайтесь на наши YouTube и Telegram чтобы не пропустить
важные изменения 1С и законодательства

Помогла статья?

Получите еще секретный бонус и полный доступ к справочной системе БухЭксперт8 на 14 дней бесплатно

Оцените публикацию

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд

(2 оценок, среднее: 4,00 из 5)

Загрузка…

Содержание:

1.       Конструктор печатных форм

2.       Работа с макетом печатных форм 1С

3.       Алгоритм создания печатных форм  

1. Конструктор печатных форм

Доброго времени суток, уважаемый читатель! В данной публикации я хочу рассмотреть такой аспект работы программиста 1С как создание печатных форм 1С. Статья может помочь начинающим разработчикам лучше понять основные принципы и механизмы, используемые при создании печатных форм.

В первую очередь стоит сказать, что самый простой способ начать делать печатную форму для документа 1С – воспользоваться конструктором печатных форм. Сделать это можно, зайдя в палитру свойств нужного документа (Рисунок 1).

Конструктор печатных форм

Рисунок 1

Следующий шаг при создании печатных форм в 1С 8.3 — выбор названия процедуры для печати. Назовём её «Печать акта об оказании услуг» (Рисунок 2).

Печать акта об оказании услуг

Рисунок 2

Далее конструктор предложит выбрать реквизиты, которые будут находиться в шапке, табличной части и подвале печатной формы 1С. Выбирать какие-либо реквизиты не обязательно, но я советую выбрать реквизиты для шапки и табличной части, так как в таком случае будет немного проще писать код.

Пример созданного макета печатной формы в 1С 8.3 представлен Рисунком 3.

макет печатной формы в 1С 8.3

Рисунок 3  

2. Работа с макетом печатных форм 1С

С макетами печатных форм 1С программный код работает при помощи областей. По умолчанию создается от 0 до 5 областей в зависимости от того, что выбиралось в конструкторе. Обратите внимание, что при разработке сложных форм может потребоваться и больше областей. Для управления областями используются кнопки, выделенные на рисунке 4.

Работа с макетом печатных форм 1С

Рисунок 4

Чтобы добавить область печатной формы документа, необходимо выбрать нужные строки и нажать «Назначить имя». Если имя новой области будет совпадать с именем другой области, то система предложит удалить старую область или не создавать новую.

Перейдем к ячейкам. Они могут содержать:

• простой текст, не содержащий в себе значений, которые нужно выводить из документа (не меняется);

• параметр, который выводятся из документа (меняются каждый раз в зависимости от данных документа и обозначаются треугольными скобками <>);

• шаблон, содержащий в себе и текст, и параметры; параметры при использовании шаблона обозначаются в квадратных скобках [].

После изменения макет будет выглядеть так, как показано на Рисунке 5.

После изменения макет будет выглядеть

Рисунок 5

По завершении работы с макетом печатной формы необходимо отредактировать программный код 1С, созданный конструктором печатных форм.  

3. Алгоритм создания печатных форм

1. Сперва делается запрос, получающий необходимые данные:

Алгоритм создания печатных форм

2. Получаем области которые ранее создавали в макете:

области которые ранее создавали в макете

3. Обходим выборку и заполняем параметры печатной формы 1С удобным способом. Если параметры совпадают с результатом запроса 1С 8.3 по имени, можно воспользоваться функцией Параметры.Заполнить(Выборка). Можно также и прямо указать, чему равен тот или иной параметр печатной формы 1С через ИмяОбласти.Параметры.ИмяПараметра = Значение

4. После заполнения параметров в области ее необходимо вывести с помощью ТабДок.Вывести(ИмяОбласти).

ТабДок.Вывести(ИмяОбласти)

В нашем случае необходимо лишь отредактировать запрос, добавив в него необходимые поля, после чего заполнить параметры полученными значениями и вывести все в табличный документ 1С 8.

Результат нашей работы будет выглядеть следующим образом:

отредактировать запрос в 1С

Специалист компании «Кодерлайн»

Айдар Фархутдинова

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

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

Для примера возьмём печатную форму «Унифицированная форма №Т-61» или по-другому «Записка-расчет при прекращении (расторжении) трудового договора с работником (увольнении)». Будем использовать конфигурацию 1С Управление производственным предприятием.

Пользователи попросили добавить в документ «Увольнение из организаций» данную печатную форму. Рассмотрим процесс создания печатной формы, заполнение её макета и подключения печатной формы.

Для создания новой обработки в 1С необходимо запустить 1С в режиме «Конфигуратор».

1с внешняя печатная форма

В Конфигураторе в меню «Файл» необходимо выбрать пункт «Новый», так же можно воспользоваться комбинацией клавиш Ctrl+N или кнопкой на панели быстрого доступа.

печатная форма 1с

По сути внешняя печатная форма – это внешняя обработка, предназначенная для формирования печатной формы, поэтому в появившемся окне выбираем вариант «Внешняя обработка» и нажимаем «ОК».

внешняя печатная форма

В открывшемся окне новой обработки необходимо задать ей имя. Назовём нашу обработку «УвольнениеТ61», автоматически формируется синоним, который будет виден пользователям.

1с создание внешней печатной формы

Добавим реквизит «СсылкаНаОбъект» и укажем тип «ДокументСсылка.УвольнениеИзОрганизаций» т.к. мы собираемся подключать обработку именно к данному документу.

1с редактирование печатной формы

Теперь необходимо создать форму для нашей обработки. Выбираем в списке «Формы» и нажимаем «Добавить».

редактирование печатных форм

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

настройка печатных форм

На данной вкладке установим флаг у реквизита «СсылкаНаОбъект» для того, чтобы он появился на форме, затем нажимаем «Готово».

1с печатные формы изменение

Нажимаем правой кнопкой мыши на кнопку «Выполнить» и выбираем пункт «КнопкаВыполнитьНажатие».

настройка печатной формы 1с

В процедуру выполнить нажатие добавим следующий код:

печатная форма

Так же нам понадобятся две переменные «ВалютаРегламентированногоУчета» и «ВалютаУправленческогоУчёта».

заполнение печатной формы

В модуле формы больше никакого кода писать не нужно. Следующим шагом создадим макет печатной формы. Выберем «Макет» и нажмём кнопку «Добавить»

внешние формы 1С

В появившемся окне необходимо установить имя макета. Назовём макет «Т_61» и установим тип макета «Табличный документ».

внешняя печатная форма 1С

Перед нами откроется окно пустого табличного документа, которое необходимо заполнить в соответствии с внешним видом «Унифицированной формы №Т-61». Опустим шаги по заполнению макета, покажем только конечный результат.

Создание и настройка печатных форм в 1С

Создание внешних печатных форм 1С

Заполнение макета печатной формы

Код для заполнения макета необходимо расположить в «Модуле объекта». Для этого нажмём на кнопку «Действия» нашей обработки и выберем пункт «Открыть модуль объекта».

Создание внешней печатной формы в 1С 8.3

Процесс написания кода аналогичен процессу заполнения обычного табличного документа, поэтому приведём готовый листинг кода, разобраться в котором начинающим программистам не составит никакого труда.

Перем мДлинаСуток;

// Механизм исправлений

Перем мВосстанавливатьДвижения;

Перем мСоответствиеДвижений;

Перем мИсправляемыйДокумент;

Функция СформироватьЗапросДляПечати(Режим)

Запрос = Новый Запрос;

// Установим параметры запроса

Запрос.УстановитьПараметр(«ДокументСсылка»,            СсылкаНаОбъект.Ссылка);

Запрос.УстановитьПараметр(«ДатаДокумента»,              СсылкаНаОбъект.Дата);

Запрос.УстановитьПараметр(«Организация»,     СсылкаНаОбъект.Организация);

Если Режим = «ПоРеквизитамДокумента» Тогда

Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;

Запрос.УстановитьПараметр(«СтруктурнаяЕдиница»,СсылкаНаОбъект.Организация);

Запрос.Текст = ФормированиеПечатныхФормЗК.ПолучитьТекстЗапросаПоОтветственнымЛицам(

«ДатаДокумента»,

«ОтветственноеЛицо = ЗНАЧЕНИЕ(Перечисление.ОтветственныеЛицаОрганизаций.Руководитель)

|И СтруктурнаяЕдиница = &Организация»);

Запрос.Выполнить();

Запрос.Текст =

«ВЫБРАТЬ РАЗРЕШЕННЫЕ

|              УвольнениеИзОрганизаций.Номер КАК НомерДок,

|              УвольнениеИзОрганизаций.Дата КАК ДатаДок,

|              УвольнениеИзОрганизаций.Организация.НаименованиеПолное КАК НазваниеОрганизации,

|              УвольнениеИзОрганизаций.Организация.КодПоОКПО КАК КодПоОКПО,

|              ОтветственныеЛицаОрганизаций.Должность КАК ДолжностьРуководителя,

|              ОтветственныеЛицаОрганизаций.НаименованиеОтветственногоЛица КАК ФИОРуководителя,

|              УвольнениеИзОрганизаций.Организация.Префикс

|ИЗ

|              Документ.УвольнениеИзОрганизаций КАК УвольнениеИзОрганизаций

|                              ЛЕВОЕ СОЕДИНЕНИЕ ВТДанныеОбОтветственномЛице КАК ОтветственныеЛицаОрганизаций

|                              ПО УвольнениеИзОрганизаций.Организация = ОтветственныеЛицаОрганизаций.СтруктурнаяЕдиница

|ГДЕ

|              УвольнениеИзОрганизаций.Ссылка = &ДокументСсылка»;

ИначеЕсли Режим = «ПоТабличнойЧастиДокумента» Тогда

Запрос.УстановитьПараметр(«ГоловнаяОрганизация», ОбщегоНазначенияЗК.ГоловнаяОрганизация(СсылкаНаОбъект.Организация));

Запрос.УстановитьПараметр(«ПустаяОрганизация» , Справочники.Организации.ПустаяСсылка());

Запрос.Текст =

«ВЫБРАТЬ РАЗРЕШЕННЫЕ

|              ЕСТЬNULL(ФИОФизЛицСрезПоследних.Фамилия + «» «» + ФИОФизЛицСрезПоследних.Имя + «» «» + ФИОФизЛицСрезПоследних.Отчество, УвольнениеИзОрганизацииРаботники.Сотрудник.Наименование) КАК Работник,

|              УвольнениеИзОрганизацииРаботники.Физлицо.Пол,

|              УвольнениеИзОрганизацииРаботники.Сотрудник.ДатаДоговора КАК ТрудовойДоговорДата,

|              УвольнениеИзОрганизацииРаботники.Сотрудник.НомерДоговора КАК ТрудовойДоговорНомер,

|              УвольнениеИзОрганизацииРаботники.НомерСтроки КАК НомерСтроки,

|              УвольнениеИзОрганизацииРаботники.ДатаУвольнения,

|              УвольнениеИзОрганизацииРаботники.СтатьяТКРФ.Наименование КАК СтатьяТКРФ,

|              УвольнениеИзОрганизацииРаботники.СтатьяТКРФ.ТекстОснования,

|              УвольнениеИзОрганизацииРаботники.ОснованиеУвольнения КАК ОснованиеУвольнения,

|              ВЫБОР

|                              КОГДА Работники.ПериодЗавершения <= УвольнениеИзОрганизацииРаботники.ДатаУвольнения

|                                                             И Работники.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)

|                                              ТОГДА Работники.ПодразделениеОрганизацииЗавершения

|                              ИНАЧЕ Работники.ПодразделениеОрганизации

|              КОНЕЦ КАК Подразделение,

|              ВЫБОР

|                              КОГДА Работники.ПериодЗавершения <= УвольнениеИзОрганизацииРаботники.ДатаУвольнения

|                                                             И Работники.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)

|                                              ТОГДА Работники.ОЦРВ_ПодразделениеОрганизацииЗавершения

|                              ИНАЧЕ Работники.ОЦРВ_ПодразделениеОрганизации

|              КОНЕЦ КАК ОЦРВ_Подразделение,

|              ВЫБОР

|                              КОГДА Работники.ПериодЗавершения <= УвольнениеИзОрганизацииРаботники.ДатаУвольнения

|                                                             И Работники.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)

|                                              ТОГДА Работники.ДолжностьЗавершения

|                              ИНАЧЕ Работники.Должность

|              КОНЕЦ КАК Должность,

|              УвольнениеИзОрганизацииРаботники.Сотрудник.Код КАК ТабельныйНомер,

|              УвольнениеИзОрганизацииРаботники.РабочийГодС,

|              УвольнениеИзОрганизацииРаботники.РабочийГодПо,

|              УвольнениеИзОрганизацииРаботники.ДнейЧасовКомпенсацииУдержанияОтпуска КАК Компенс,

|              УвольнениеИзОрганизацииРаботники.ПризнакКомпенсацииОтпуска

|ИЗ

|              Документ.УвольнениеИзОрганизаций.РаботникиОрганизации КАК УвольнениеИзОрганизацииРаботники

|                              ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ

|                                              СписокДат.Сотрудник КАК Сотрудник,

|                                              РаботникиОрганизации.ПодразделениеОрганизации.Наименование КАК ПодразделениеОрганизации,

|                                              РаботникиОрганизации.Должность.Наименование КАК Должность,

|                                              РаботникиОрганизации.ПодразделениеОрганизацииЗавершения.Наименование КАК ПодразделениеОрганизацииЗавершения,

|                                              РаботникиОрганизации.ОЦРВ_ПодразделениеОрганизации.Наименование КАК ОЦРВ_ПодразделениеОрганизации,

|                                              РаботникиОрганизации.ОЦРВ_ПодразделениеОрганизацииЗавершения.Наименование КАК ОЦРВ_ПодразделениеОрганизацииЗавершения,

|                                              РаботникиОрганизации.ДолжностьЗавершения.Наименование КАК ДолжностьЗавершения,

|                                              РаботникиОрганизации.ПериодЗавершения КАК ПериодЗавершения

|                              ИЗ

|                                              (ВЫБРАТЬ

|                                                             РаботникиВнутри.Сотрудник КАК Сотрудник,

|                                                             МАКСИМУМ(РаботникиВнутри.Период) КАК ДатаПоследнегоИзменения

|                                              ИЗ

|                                                             РегистрСведений.РаботникиОрганизаций КАК РаботникиВнутри

|                                                                             ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.УвольнениеИзОрганизаций.РаботникиОрганизации КАК Док

|                                                                             ПО РаботникиВнутри.Период <= Док.ДатаУвольнения

|                                                                                             И РаботникиВнутри.Сотрудник = Док.Сотрудник

|                                              ГДЕ

|                                                             Док.Ссылка = &ДокументСсылка

|                                                             И НЕ Док.Сторно

|

|                                              СГРУППИРОВАТЬ ПО

|                                                             РаботникиВнутри.Сотрудник) КАК СписокДат

|                                                             ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизации

|                                                             ПО СписокДат.ДатаПоследнегоИзменения = РаботникиОрганизации.Период

|                                                                             И СписокДат.Сотрудник = РаботникиОрганизации.Сотрудник) КАК Работники

|                              ПО УвольнениеИзОрганизацииРаботники.Сотрудник = Работники.Сотрудник

|                              ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФИОФизЛиц.СрезПоследних(

|                                                             &ДатаДокумента,

|                                                             Физлицо В

|                                                                             (ВЫБРАТЬ РАЗЛИЧНЫЕ

|                                                                                             УвольнениеИзОрганизацииРаботники.Сотрудник.Физлицо

|                                                                             ИЗ

|                                                                                             Документ.УвольнениеИзОрганизаций.РаботникиОрганизации КАК УвольнениеИзОрганизацииРаботники

|                                                                             ГДЕ

|                                                                                             УвольнениеИзОрганизацииРаботники.Ссылка = &ДокументСсылка)) КАК ФИОФизЛицСрезПоследних

|                              ПО УвольнениеИзОрганизацииРаботники.Сотрудник.Физлицо = ФИОФизЛицСрезПоследних.ФизЛицо

|ГДЕ

|              УвольнениеИзОрганизацииРаботники.Ссылка = &ДокументСсылка

|              И НЕ УвольнениеИзОрганизацииРаботники.Сторно

|

|УПОРЯДОЧИТЬ ПО

|              НомерСтроки»;

Иначе

Возврат Неопределено;

КонецЕсли;

Возврат Запрос.Выполнить();

КонецФункции

Функция ПечатьТ61() Экспорт

ТабДокумент = Новый ТабличныйДокумент;

// получаем данные для печати

ВыборкаДляШапки   = СформироватьЗапросДляПечати(«ПоРеквизитамДокумента»).Выбрать();

ВыборкаРаботники  = СформироватьЗапросДляПечати(«ПоТабличнойЧастиДокумента»).Выбрать();

// Начинаем формировать выходной документ

Пока ВыборкаРаботники.Следующий() Цикл

Макет = ПолучитьМакет(«Т_61»);

ТабДокумент.ПолеСверху = 0;

ТабДокумент.ПолеСлева  = 0;

ТабДокумент.ПолеСнизу  = 0;

ТабДокумент.ПолеСправа = 0;

ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;

//Получаем области макета

СекцияРасчетСреднего = Макет.ПолучитьОбласть(«РасчетСреднего»);

СекцияДополнительнаяСтрокаЗаработка = Макет.ПолучитьОбласть(«ДополнительнаяСтрокаЗаработка»);

СекцияЛицеваяСторона = Макет.ПолучитьОбласть(«ЛицеваяСторона»);

СекцияРасчетСреднегоИтого = Макет.ПолучитьОбласть(«РасчетСреднегоИтого»);

СекцияПодвал = Макет.ПолучитьОбласть(«Подвал»);

// выводим данные о руководителях организации

Если ВыборкаДляШапки.Следующий() Тогда

СекцияЛицеваяСторона.Параметры.Заполнить(ВыборкаДляШапки); // Шапка документа.

СекцияЛицеваяСторона.Параметры.НазваниеОрганизации           = СокрЛП(СекцияЛицеваяСторона.Параметры.НазваниеОрганизации);

СекцияПодвал.Параметры.Заполнить(ВыборкаДляШапки); // Для подвала.

НомерДокДляПечати                                                                                                                    = ВыборкаДляШапки.НомерДок;

СекцияЛицеваяСторона.Параметры.НомерДокумента    = НомерДокДляПечати;

СекцияЛицеваяСторона.Параметры.ДатаДокумента      = ВыборкаДляШапки.ДатаДок;

ВыводитьДатуОзнакомленияСПриказом = ПроцедурыУправленияПерсоналом.ЗначениеУчетнойПолитикиПоПерсоналуОрганизации(глЗначениеПеременной(«глУчетнаяПолитикаПоПерсоналуОрганизации»), СсылкаНаОбъект.Организация, «ПроставлятьАвтоматическиДатуОзнакомленияВКадровыхПриказах»);

КонецЕсли;

// Каждый приказ на отдельной странице.

Если ТабДокумент.ВысотаТаблицы > 0 Тогда

ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();

КонецЕсли;

ПредставлениеДатыДоговора                                                   = Формат(ВыборкаРаботники.ТрудовойДоговорДата, «ДЛФ=DD»);

ПредставлениеДатыУвольнения                                                = Формат(ВыборкаРаботники.ДатаУвольнения, «ДЛФ=DD»);

СекцияЛицеваяСторона.Параметры.ДатаУвольнения                     = ?(ЗначениеЗаполнено(ВыборкаРаботники.ДатаУвольнения), ПредставлениеДатыУвольнения, »      «);

СекцияЛицеваяСторона.Параметры.ОснованиеУвольнения                           = ?(ВыборкаРаботники.СтатьяТКРФ = NULL, «», ВыборкаРаботники.СтатьяТКРФ) + «. » + ВыборкаРаботники.СтатьяТКРФТекстОснования;

СекцияЛицеваяСторона.Параметры.ТабельныйНомер                                    = ВыборкаРаботники.ТабельныйНомер;

СекцияЛицеваяСторона.Параметры.ФИО                                                                                          = ВыборкаРаботники.Работник;

СекцияЛицеваяСторона.Параметры.Подразделение                                        = ВыборкаРаботники.Подразделение;

СекцияЛицеваяСторона.Параметры.Должность                                                               = ВыборкаРаботники.Должность;

СекцияЛицеваяСторона.Параметры.РабочийГодС                                                          = ВыборкаРаботники.РабочийГодС;

СекцияЛицеваяСторона.Параметры.РабочийГодПо                                                        = ВыборкаРаботники.РабочийГодПо;

Если ВыборкаРаботники.ПризнакКомпенсацииОтпуска = Истина Тогда

СекцияЛицеваяСторона.Параметры.ДнейКомпенсации      = ВыборкаРаботники.Компенс;

Иначе

СекцияЛицеваяСторона.Параметры.ДнейУдержания        = ВыборкаРаботники.Компенс;

КонецЕсли;

ТабДокумент.Вывести(СекцияЛицеваяСторона);

ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();

ТабДокумент.Вывести(СекцияРасчетСреднего);

ТабДокумент.Вывести(СекцияДополнительнаяСтрокаЗаработка);

ТабДокумент.Вывести(СекцияПодвал);

КонецЦикла;

Возврат ТабДокумент;

КонецФункции // ПечатьТ61()

Функция Печать(КоличествоЭкземпляров = 1, НаПринтер = Ложь) Экспорт

ТабДокумент = ПечатьТ61();

УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, КоличествоЭкземпляров, НаПринтер, , );

КонецФункции

// ОПЕРАТОРЫ ОСНОВНОЙ ПРОГРАММЫ

мДлинаСуток                     = 86400; // в секундах

мСведенияОВидахРасчета = Новый Соответствие;

мУдержаниеЗаОтпускУменьшаетНалоги = Неопределено;

Сохраняем нашу готовую печатную форму на диск и запускаем 1С в режиме «Предприятие».

Подключение внешней печатной формы к документу

Подключение внешней печатной формы производится аналогично подключению внешней обработки.

В меню «Операции» выберем пункт «Справочник».

подключение внешней формы 1С

В открывшемся окне выберем справочник «Внешние обработки».

Печатные формы 1С

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

внешние формы 1С

В появившемся окне нового элемента справочника необходимо указать вид элемента. Выбираем значение «Печатная форма».

регистрация внешней печатной формы

Выбираем файл нашей печатной формы

создание внешней печатной формы

Имя печатной формы в 1С заполнилось автоматически. Теперь необходимо указать «Принадлежность печатной формы». Нажимаем кнопку «Добавить».

принадлежность печатной формы 1С

Выбираем документ «Увольнение из организаций» и нажимаем «ОК».

принадлежность печатной формы

Сохраняем нашу внешнюю печатную форму и открываем документ «Увольнение из организаций». В кнопке «Печать» добавился новый пункт с нашей печатной формой «Форма Т-61 (внешняя печатная форма)».

сохранение внешней печатной формы 1с

Как оптимизировать работу с программой?

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

Даже если у вас есть программисты 1С, мы предлагаем оставить за ними важные стратегические задачи, а за сопровождением 1С к профессионалам, в компанию «ПРОГРАММЫ 93».

Почему нас выбирают?

ООО «ПРОГРАММЫ 93» — это компания с большим штатом сотрудников, в который входят не только специалисты 1С, но и бухгалтера, кадровики, юристы и другие эксперты. Вы больше не зависите от одного сотрудника, вам не нужно тратить деньги на приглашенных специалистов для решения каждой задачи и переживать насчет того, что у вас не хватает компетенции для проверки работы сотрудника. Для вас работает целая команда, любая задача дополнительно проверяется, а заболевший специалист тут же заменяется другим незаметно для вас.

Мы рады предложить вам:

  • доработку программы под ваши нужды;
  • поддержку продуктов 1С;
  • интеграцию программы с сайтом;
  • внедрение других продуктов 1С;
  • сопровождение бухгалтерского и налогового учета.

Позвоните по номеру телефона, указанному на сайте, или заполните форму обратной связи, чтобы мы могли ответить на все возникающие вопросы и рассказать о том, как начать сотрудничество!

Понравилась статья? Поделить с друзьями:
  • Создание отдела продаж с нуля инструкции
  • Создание ооо с одним учредителем пошаговая инструкция 2022
  • Создание ооо с одним учредителем пошаговая инструкция 2020
  • Создание ооо в 2022 году пошаговая инструкция
  • Создание одностраничного сайта с нуля самостоятельно пошаговая инструкция