Обновим 1С с гарантией сохранности базы
Поможем с 1С 24/7, без выходных
Установим сервисы 1С бесплатно
Оперативно решим любые задачи по 1С
В случае, если необходимо добавить какую-либо печатную форму в систему, то отличным вариантом это сделать является создание дополнительной печатной формы. При использовании дополнительной печатной формы нет никакой необходимости вносить изменения в конфигурацию.
Часто пользователям необходимо внести небольшие изменения в печатную форму, уже существующую. В этом случае также лучше использовать дополнительную форму, а не вносить поправки в стандартную, т.к. при последующих обновлениях системы могут возникнуть серьёзные проблемы.
Для примера возьмём печатную форму «Унифицированная форма №Т-61» или по-другому «Записка-расчет при прекращении (расторжении) трудового договора с работником (увольнении)». Будем использовать конфигурацию 1С Управление производственным предприятием.
Пользователи попросили добавить в документ «Увольнение из организаций» данную печатную форму. Рассмотрим процесс создания печатной формы, заполнение её макета и подключения печатной формы.
Для создания новой обработки в 1С необходимо запустить 1С в режиме «Конфигуратор».
В Конфигураторе в меню «Файл» необходимо выбрать пункт «Новый», так же можно воспользоваться комбинацией клавиш Ctrl+N или кнопкой на панели быстрого доступа.
По сути внешняя печатная форма – это внешняя обработка, предназначенная для формирования печатной формы, поэтому в появившемся окне выбираем вариант «Внешняя обработка» и нажимаем «ОК».
В открывшемся окне новой обработки необходимо задать ей имя. Назовём нашу обработку «УвольнениеТ61», автоматически формируется синоним, который будет виден пользователям.
Добавим реквизит «СсылкаНаОбъект» и укажем тип «ДокументСсылка.УвольнениеИзОрганизаций» т.к. мы собираемся подключать обработку именно к данному документу.
Теперь необходимо создать форму для нашей обработки. Выбираем в списке «Формы» и нажимаем «Добавить».
В появившемся окне формы выбираем параметры для формы нашей обработки. Тип формы установим «Форма обработки», проконтролируем флаг «Назначить форму основной». Можно задать форме имя, но мы оставим стандартное. В данном примере оно не играет никакой роли. Нажимаем «Далее».
На данной вкладке установим флаг у реквизита «СсылкаНаОбъект» для того, чтобы он появился на форме, затем нажимаем «Готово».
Нажимаем правой кнопкой мыши на кнопку «Выполнить» и выбираем пункт «КнопкаВыполнитьНажатие».
В процедуру выполнить нажатие добавим следующий код:
Так же нам понадобятся две переменные «ВалютаРегламентированногоУчета» и «ВалютаУправленческогоУчёта».
В модуле формы больше никакого кода писать не нужно. Следующим шагом создадим макет печатной формы. Выберем «Макет» и нажмём кнопку «Добавить»
В появившемся окне необходимо установить имя макета. Назовём макет «Т_61» и установим тип макета «Табличный документ».
Перед нами откроется окно пустого табличного документа, которое необходимо заполнить в соответствии с внешним видом «Унифицированной формы №Т-61». Опустим шаги по заполнению макета, покажем только конечный результат.
Код для заполнения макета необходимо расположить в «Модуле объекта». Для этого нажмём на кнопку «Действия» нашей обработки и выберем пункт «Открыть модуль объекта».
Процесс написания кода аналогичен процессу заполнения обычного табличного документа, поэтому приведём готовый листинг кода, разобраться в котором начинающим программистам не составит никакого труда.
Перем мДлинаСуток;
// Механизм исправлений
Перем мВосстанавливатьДвижения;
Перем мСоответствиеДвижений;
Перем мИсправляемыйДокумент;
Функция СформироватьЗапросДляПечати(Режим)
Запрос = Новый Запрос;
// Установим параметры запроса
Запрос.УстановитьПараметр(«ДокументСсылка», СсылкаНаОбъект.Ссылка);
Запрос.УстановитьПараметр(«ДатаДокумента», СсылкаНаОбъект.Дата);
Запрос.УстановитьПараметр(«Организация», СсылкаНаОбъект.Организация);
Если Режим = «ПоРеквизитамДокумента» Тогда
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр(«СтруктурнаяЕдиница»,СсылкаНаОбъект.Организация);
Запрос.Текст = ФормированиеПечатныхФормЗК.ПолучитьТекстЗапросаПоОтветственнымЛицам(
«ДатаДокумента»,
«ОтветственноеЛицо = ЗНАЧЕНИЕ(Перечисление.ОтветственныеЛицаОрганизаций.Руководитель)
|И СтруктурнаяЕдиница = &Организация»);
Запрос.Выполнить();
Запрос.Текст =
«ВЫБРАТЬ РАЗРЕШЕННЫЕ
| УвольнениеИзОрганизаций.Номер КАК НомерДок,
| УвольнениеИзОрганизаций.Дата КАК ДатаДок,
| УвольнениеИзОрганизаций.Организация.НаименованиеПолное КАК НазваниеОрганизации,
| УвольнениеИзОрганизаций.Организация.КодПоОКПО КАК КодПоОКПО,
| ОтветственныеЛицаОрганизаций.Должность КАК ДолжностьРуководителя,
| ОтветственныеЛицаОрганизаций.НаименованиеОтветственногоЛица КАК ФИОРуководителя,
| УвольнениеИзОрганизаций.Организация.Префикс
|ИЗ
| Документ.УвольнениеИзОрганизаций КАК УвольнениеИзОрганизаций
| ЛЕВОЕ СОЕДИНЕНИЕ ВТДанныеОбОтветственномЛице КАК ОтветственныеЛицаОрганизаций
| ПО УвольнениеИзОрганизаций.Организация = ОтветственныеЛицаОрганизаций.СтруктурнаяЕдиница
|ГДЕ
| УвольнениеИзОрганизаций.Ссылка = &ДокументСсылка»;
ИначеЕсли Режим = «ПоТабличнойЧастиДокумента» Тогда
Запрос.УстановитьПараметр(«ГоловнаяОрганизация», ОбщегоНазначенияЗК.ГоловнаяОрганизация(СсылкаНаОбъект.Организация));
Запрос.УстановитьПараметр(«ПустаяОрганизация» , Справочники.Организации.ПустаяСсылка());
Запрос.Текст =
«ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ЕСТЬ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С заполнилось автоматически. Теперь необходимо указать «Принадлежность печатной формы». Нажимаем кнопку «Добавить».
Выбираем документ «Увольнение из организаций» и нажимаем «ОК».
Сохраняем нашу внешнюю печатную форму и открываем документ «Увольнение из организаций». В кнопке «Печать» добавился новый пункт с нашей печатной формой «Форма Т-61 (внешняя печатная форма)».
Кроме установки и настройки программы, существует также необходимость обновления 1С, подключение программы к периферическим устройствам и много других задач, отнимающих время ваших сотрудников и замедляющих рабочие процессы.
Даже если у вас есть программисты 1С, мы предлагаем оставить за ними важные стратегические задачи, а за сопровождением 1С к профессионалам, в компанию «ПРОГРАММЫ 93».
ООО «ПРОГРАММЫ 93» — это компания с большим штатом сотрудников, в который входят не только специалисты 1С, но и бухгалтера, кадровики, юристы и другие эксперты. Вы больше не зависите от одного сотрудника, вам не нужно тратить деньги на приглашенных специалистов для решения каждой задачи и переживать насчет того, что у вас не хватает компетенции для проверки работы сотрудника. Для вас работает целая команда, любая задача дополнительно проверяется, а заболевший специалист тут же заменяется другим незаметно для вас.
Мы рады предложить вам:
Позвоните по номеру телефона, указанному на сайте, или заполните форму обратной связи, чтобы мы могли ответить на все возникающие вопросы и рассказать о том, как начать сотрудничество!
Яндекс 360 для бизнеса представляет собой настоящий виртуальный офис, который дарит Вашей команде доступ к корпоративной почте, календарю, облачному хранилищу,…
Согласно последним изменениям в законодательстве, в частности Закону от 04.08.2023 г. № 427-ФЗ, был внесен новый пункт в статью 431…
Плательщики налога на упрощенной системе налогообложения (УСН) обязаны не забыть подать в налоговую инспекцию уведомление о суммах рассчитанных авансов по…