8.х Создание внешней печатной формы Командировочного Удостоверения

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем lutdan, 7 дек 2012.

  1. TopicStarter Overlay
    lutdan
    Offline

    lutdan

    Регистрация:
    29 ноя 2012
    Сообщения:
    12
    Симпатии:
    0
    Баллы:
    1
    Здравствуйте! Помогите новичку разобраться с внешними печатными формами.
    Необходимо составить командировочное удостоверение по макету принятому в организации.
    Как решал: В тестовой базе изменил существующий макет (Т10_от_5_1_2004) и чуть переписал код. Все работает как надо.
    Теперь этот макет я решил перенести в боевую БД, как внешняя печатная форма.
    1)Создал внешнюю форму: Файл >Новый > ВнешняяОбработка.
    2)Создал реквизит: СсылкаНаОбъект, тип: ДокументОбъект.КомандировкиОрганизаций.
    3)Скопировал макет переделанный в МАКЕТЫ.
    4) Начал плясать с бубном в Модуле Объекта внешней обработки. Скопировал в коде Модуля Объекта "КомандировкиОрганизаций" переделанный ранее мною рабочий код
    5) Ctrl+F7 посмотрел, что ошибка с переменными и добавил СсылкаНаОбъект. Получился след. код:


    Код:
    Функция Печать(ИмяМакета) Экспорт
    ИмяФормы = "";
    Если Лев(ИмяМакета,4) = "Т10_" Тогда
    ИмяФормы = " (форма Т10)";
    ТабДокумент = ПечатьТ10(ИмяМакета);
    КонецЕсли;
    ПараметрыПечати = СформироватьЗапросДляПечати(СсылкаНаОбъект.Режим);
    ТабДокумент = ПечатьТ10(ИмяМакета);
    Возврат ТабДокумент;
    КонецФункции // Печать
    
    
    // Формирует запрос по документу и связанным регистрам сведений
    //
    // Параметры:
    // Режим - строка, может принимать значения:
    //	"ПоРеквизитамДокумента"
    //	"ПоТабличнойЧастиДокумента"
    //
    // Возвращаемое значение:
    // Результат запроса с данными об организации или о работниках из табличной части
    //
    Функция СформироватьЗапросДляПечати(Режим)Запрос = Новый Запрос;
    // Установим параметры запроса
    Запрос.УстановитьПараметр("ДокументСсылка", СсылкаНаОбъект.Ссылка);
    Запрос.УстановитьПараметр("ДатаДокумента", СсылкаНаОбъект.Дата);Если Режим = "ПоРеквизитамДокумента" Тогда
    Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    Запрос.УстановитьПараметр("СтруктурнаяЕдиница",СсылкаНаОбъект.Организация);
    
    Запрос.Текст = ФормированиеПечатныхФормЗК.ПолучитьТекстЗапросаПоОтветственнымЛицам(
    "ДатаДокумента",
    "ОтветственноеЛицо = ЗНАЧЕНИЕ(Перечисление.ОтветственныеЛицаОрганизаций.Руководитель)
    |И СтруктурнаяЕдиница = &СтруктурнаяЕдиница");
    Запрос.Выполнить();
    
    Запрос.Текст =
    "ВЫБРАТЬ
    | КомандировкиОрганизаций.Дата КАК ДатаДок,
    | КомандировкиОрганизаций.Номер КАК НомерДок,
    | КомандировкиОрганизаций.Организация.НаименованиеПолное КАК НазваниеОрганизации,
    | КомандировкиОрганизаций.Организация.КодПоОКПО КАК КодПоОКПО,
    | КомандировкиОрганизаций.СтранаНазначения,
    | КомандировкиОрганизаций.ОрганизацияНазначения,
    | КомандировкиОрганизаций.ОснованиеКомандировки,
    | ОтветственныеЛицаОрганизаций.Должность КАК ДолжностьРуководителя,
    | ОтветственныеЛицаОрганизаций.НаименованиеОтветственногоЛица КАК ФИОРуководителя
    |ИЗ
    | Документ.КомандировкиОрганизаций КАК КомандировкиОрганизаций
    |  ЛЕВОЕ СОЕДИНЕНИЕ ссылканаобъект.ВТДанныеОбОтветственномЛице КАК ОтветственныеЛицаОрганизаций
    |  ПО (ИСТИНА)
    |ГДЕ
    | КомандировкиОрганизаций.Ссылка = &ДокументСсылка";ИначеЕсли Режим = "ПоТабличнойЧастиДокумента" Тогда
    Запрос.УстановитьПараметр("Организация",  СсылкаНаОбъект.Организация);
    Запрос.УстановитьПараметр("ГоловнаяОрганизация", ОбщегоНазначения.ГоловнаяОрганизация(СсылкаНаОбъект.Организация));
    
    Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    Запрос.Текст =
    "ВЫБРАТЬ
    | КомандировкиОрганизацииРаботники.НомерСтроки,
    | КомандировкиОрганизацииРаботники.Сотрудник.Физлицо КАК Физлицо,
    | КомандировкиОрганизацииРаботники.Сотрудник КАК Сотрудник,
    | КомандировкиОрганизацииРаботники.ФизЛицо.Пол КАК ФизЛицоПол,
    | КомандировкиОрганизацииРаботники.ДатаНачала,
    | КомандировкиОрганизацииРаботники.ДатаОкончания,
    | КомандировкиОрганизацииРаботники.ОсвобождатьСтавку,
    | КомандировкиОрганизацииРаботники.Цель,
    | КомандировкиОрганизацииРаботники.ИсточникФинансирования,
    | КомандировкиОрганизацииРаботники.НапомнитьПоЗавершении,
    | КомандировкиОрганизацииРаботники.ВремяНахожденияВПути,
    | КомандировкиОрганизацииРаботники.Сотрудник.Код КАК ТабельныйНомер
    |ПОМЕСТИТЬ ВТСотрудники
    |ИЗ
    | Документ.КомандировкиОрганизаций.РаботникиОрганизации КАК КомандировкиОрганизацииРаботники
    |ГДЕ
    | КомандировкиОрганизацииРаботники.Ссылка = &ДокументСсылка
    | И (НЕ КомандировкиОрганизацииРаботники.Сторно)
    |
    |ИНДЕКСИРОВАТЬ ПО
    | Сотрудник";
    Запрос.Выполнить();
    
    Запрос.Текст =
    "ВЫБРАТЬ
    | ЕСТЬNULL(ФИОФизЛиц.Фамилия + "" "" + ФИОФизЛиц.Имя + "" "" + ФИОФизЛиц.Отчество, КомандировкиОрганизацииРаботники.Сотрудник.Наименование) КАК Работник,
    | ЕСТЬNULL(ПаспортныеДанныеФизЛицСрезПоследних.ДокументВид.Наименование + "", серия "" + ПаспортныеДанныеФизЛицСрезПоследних.ДокументСерия + "", №"" + ПаспортныеДанныеФизЛицСрезПоследних.ДокументНомер, """") КАК РеквизитыПаспорта,
    | КомандировкиОрганизацииРаботники.НомерСтроки КАК НомерСтроки,
    | КомандировкиОрганизацииРаботники.ФизЛицоПол,
    | КомандировкиОрганизацииРаботники.ДатаНачала,
    | КомандировкиОрганизацииРаботники.ДатаОкончания,
    | КомандировкиОрганизацииРаботники.ВремяНахожденияВПути,
    | КомандировкиОрганизацииРаботники.Цель,
    | ВЫБОР
    |  КОГДА Работники.ПериодЗавершения <= КомандировкиОрганизацииРаботники.ДатаНачала
    |	И Работники.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
    |   ТОГДА Работники.ПодразделениеОрганизацииЗавершения
    |  ИНАЧЕ Работники.ПодразделениеОрганизации
    | КОНЕЦ КАК ПодразделениеРаботника,
    | ВЫБОР
    |  КОГДА Работники.ПериодЗавершения <= КомандировкиОрганизацииРаботники.ДатаНачала
    |	И Работники.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
    |   ТОГДА Работники.ДолжностьЗавершения
    |  ИНАЧЕ Работники.Должность
    | КОНЕЦ КАК Должность,
    | КомандировкиОрганизацииРаботники.ИсточникФинансирования,
    | КомандировкиОрганизацииРаботники.ТабельныйНомер
    |ИЗ
    | ВТСотрудники КАК КомандировкиОрганизацииРаботники
    |  ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    |   СписокДат.Сотрудник КАК Сотрудник,
    |   Работники.ПодразделениеОрганизации.Наименование КАК ПодразделениеОрганизации,
    |   Работники.Должность.Наименование КАК Должность,
    |   Работники.ПодразделениеОрганизацииЗавершения.Наименование КАК ПодразделениеОрганизацииЗавершения,
    |   Работники.ДолжностьЗавершения.Наименование КАК ДолжностьЗавершения,
    |   Работники.ПериодЗавершения КАК ПериодЗавершения
    |  ИЗ
    |   (ВЫБРАТЬ
    |	РаботникиВнутри.Сотрудник КАК Сотрудник,
    |	МАКСИМУМ(РаботникиВнутри.Период) КАК ДатаПоследнегоИзменения
    |   ИЗ
    |	РегистрСведений.РаботникиОрганизаций КАК РаботникиВнутри
    |	 ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТСотрудники КАК КомандировкиОрганизаций
    |	 ПО РаботникиВнутри.Период <= КомандировкиОрганизаций.ДатаНачала
    |	  И РаботникиВнутри.Сотрудник = КомандировкиОрганизаций.Сотрудник
    |  
    |   СГРУППИРОВАТЬ ПО
    |	РаботникиВнутри.Сотрудник) КАК СписокДат
    |	ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК Работники
    |	ПО СписокДат.ДатаПоследнегоИзменения = Работники.Период
    |	 И СписокДат.Сотрудник = Работники.Сотрудник) КАК Работники
    |  ПО КомандировкиОрганизацииРаботники.Сотрудник = Работники.Сотрудник
    |  ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФИОФизЛиц.СрезПоследних(
    |	&ДатаДокумента,
    |	ФизЛицо В
    |	 (ВЫБРАТЬ
    |	  Сотрудники.Физлицо
    |	 ИЗ
    |	  ВТСотрудники КАК Сотрудники)) КАК ФИОФизЛиц
    |  ПО КомандировкиОрганизацииРаботники.Сотрудник.Физлицо = ФИОФизЛиц.ФизЛицо
    |  ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПаспортныеДанныеФизЛиц.СрезПоследних(
    |	&ДатаДокумента,
    |	ФизЛицо В
    |	 (ВЫБРАТЬ
    |	  Сотрудники.Физлицо
    |	 ИЗ
    |	  ВТСотрудники КАК Сотрудники)) КАК ПаспортныеДанныеФизЛицСрезПоследних
    |  ПО КомандировкиОрганизацииРаботники.Сотрудник.Физлицо = ПаспортныеДанныеФизЛицСрезПоследних.ФизЛицо
    |
    |УПОРЯДОЧИТЬ ПО
    | НомерСтроки";Иначе
    Возврат Неопределено;
    
    КонецЕсли;
    Возврат Запрос.Выполнить();КонецФункции // СформироватьЗапросДляПечати()
    // Функция формирует табличный документ с печатной формой "Т-10",
    //
    // Возвращаемое значение:
    //  Табличный документ - печатная форма
    //
    Функция ПечатьТ10(ИмяМакета)
    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_КомандировкиОрганизации_Т10";
    ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
    
    // получаем данные для печати
    ВыборкаДляШапки   = СформироватьЗапросДляПечати("ПоРеквизитамДокумента").Выбрать();
    ВыборкаРаботники = СформироватьЗапросДляПечати("ПоТабличнойЧастиДокумента").Выбрать();// запоминаем области макета
    Макет = ПолучитьМакет(имяМакета);
    ОбластьМакетаШапка = Макет.ПолучитьОбласть("Шапка");   // Шапка документа
    ОбластьМакетаПодвал = Макет.ПолучитьОбласть("Подвал");   // Подвал документа
    ОбластьМакета  = Макет.ПолучитьОбласть("Работник");  // строка работника
    ОбластьМакетаОтметки  = Макет.ПолучитьОбласть("Отметки");
    Оборот   = Макет.ПолучитьОбласть("Оборот"); // оборот удостоверения - отметки от прибытии-выбытии
    // ОборотОтметки  = Макет.ПолучитьОбласть("Отметки");
    // выводим данные о руководителях организации
    Если ВыборкаДляШапки.Следующий() Тогда
    ОбластьМакетаШапка.Параметры.Заполнить(ВыборкаДляШапки); // Шапка документа.
    ОбластьМакетаШапка.Параметры.НазваниеОрганизации = СокрЛП(ОбластьМакетаШапка.Параметры.НазваниеОрганизации);
    ОбластьМакетаПодвал.Параметры.Заполнить(ВыборкаДляШапки); // Для подвала.
    ОбластьМакета.Параметры.Заполнить(ВыборкаДляШапки); // область работника
    НомерДокДляПечати = ВыборкаДляШапки.НомерДок;
    КонецЕсли;НомерФормы = 0;
    ПечататьПостфикс = ВыборкаРаботники.Количество() > 1;
    // Начинаем формировать выходной документ
    Пока ВыборкаРаботники.Следующий() Цикл
    // Каждый приказ на отдельной странице.
    Если ТабДокумент.ВысотаТаблицы > 0 Тогда
    ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    КонецЕсли;  // Шапка документа.
    Если ПечататьПостфикс Тогда
    НомерФормы = НомерФормы + 1;
    ОбластьМакетаШапка.Параметры.НомерДок = НомерДокДляПечати + "/" + НомерФормы
    КонецЕсли;
    ТабДокумент.Вывести(ОбластьМакетаШапка);
    // Данные по работнику.
    ОбластьМакета.Параметры.Заполнить(ВыборкаРаботники);
    
    //уберем из табельного номера префикс
    ОбластьМакета.Параметры.ТабельныйНомер = ВыборкаРаботники.ТабельныйНомер;
    
    // в этой форме продолжительность командировки указывается без времени в пути
    ОбластьМакета.Параметры.Продолжительность = ?(ЗначениеЗаполнено(ВыборкаРаботники.ДатаОкончания),Цел((ВыборкаРаботники.ДатаОкончания - ВыборкаРаботники.ДатаНачала + 1) / СсылкаНаОбъект.мДлинаСуток) + 1 - ВыборкаРаботники.ВремяНахожденияВПути,"");
    ТабДокумент.Вывести(ОбластьМакета);  // Подвал документа.
    ТабДокумент.Вывести(ОбластьМакетаПодвал);
    ТабДокумент.Вывести(ОбластьМакетаОтметки);
    // выводим оборот удостоверения
    // ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    ТабДокумент.Вывести(Оборот);
    //ТабДокумент.Вывести(Оборот);
    //ТабДокумент.Вывести(Оборот);
    //ТабДокумент.Вывести(Оборот);
    ТабДокумент.Вывести(Оборот);
    ТабДокумент.Вывести(Оборот);КонецЦикла;
    // если не было ни одного работника - выводим пустой бланк
    Если ТабДокумент.ВысотаТаблицы = 0 Тогда
    ТабДокумент.Вывести(ОбластьМакетаШапка);
    ТабДокумент.Вывести(ОбластьМакета);
    ТабДокумент.Вывести(ОбластьМакетаПодвал);
    ТабДокумент.Вывести(ОбластьМакетаОтметки);  // выводим оборот удостоверения
    ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    ТабДокумент.Вывести(Оборот);
    ТабДокумент.Вывести(Оборот);
    ТабДокумент.Вывести(Оборот);
    
    КонецЕсли;
    Возврат ТабДокумент;
    КонецФункции // ПечатьТ10()

    6) Запустил и проверил. Выдает ошибку:
    " Не удалось сформировать внешнюю печатную форму!
    Недостаточно фактических параметров"

    Что не так и как сделать печать ?

    Код Модуля Объекта "КомандировкиОрганизаций" откуда печатается стандартное КОМАНДИРОВОЧНОЕ УДОСТОВЕРЕНИЕ:
    Код:
    
    Модуля Объекта "КомандировкиОрганизаций"
    ////////////////////////////////////////////////////////////////////////////////
    // ПЕРЕМЕННЫЕ МОДУЛЯПерем мДлинаСуток Экспорт;  
    // Механизм исправлений
    Перем мВосстанавливатьДвижения;
    Перем мСоответствиеДвижений;
    Перем мИсправляемыйДокумент;////////////////////////////////////////////////////////////////////////////////
    // ЭКСПОРТНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ ДОКУМЕНТА
    #Если ТолстыйКлиентОбычноеПриложение Тогда// Процедура осуществляет печать документа. Можно направить печать на
    // экран или принтер, а также распечатать необходимое количество копий.
    //
    // Название макета печати передается в качестве параметра,
    // по переданному названию находим имя макета в соответствии.
    //
    // Параметры:
    // НазваниеМакета - строка, название макета.
    //
    Функция Печать(ИмяМакета, КоличествоЭкземпляров = 1, НаПринтер = Ложь) Экспорт
    
    // Получить экземпляр документа на печать
    ИмяФормы = "";
    Если Лев(ИмяМакета,4) = "Т9а_" Тогда
    ИмяФормы = " (форма Т-9а)";
    ТабДокумент = ПечатьТ9а(ИмяМакета);
    
    ИначеЕсли Лев(ИмяМакета,4) = "Т9_о" Тогда
    ИмяФормы = " (форма Т-9)";
    ТабДокумент = ПечатьТ9(ИмяМакета);
    
    ИначеЕсли Лев(ИмяМакета,4) = "Т10а" Тогда
    ИмяФормы = " (форма Т-10а)";
    ТабДокумент = ПечатьТ10а(ИмяМакета);
    
    ИначеЕсли Лев(ИмяМакета,4) = "Т10_" Тогда
    ИмяФормы = " (форма Т-10)";
    ТабДокумент = ПечатьТ10(ИмяМакета);
    
    КонецЕсли;
    
    Возврат УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, КоличествоЭкземпляров, НаПринтер, ОбщегоНазначения.СформироватьЗаголовокДокумента(ЭтотОбъект,Метаданные().Синоним + ИмяФормы),,ТабДокумент);
    
    КонецФункции // Печать()
    #КонецЕсли// Возвращает доступные варианты печати документа
    //
    // Возвращаемое значение:
    // Структура, каждая строка которой соответствует одному из вариантов печати
    //
    Функция ПолучитьСтруктуруПечатныхФорм() Экспорт
    
    СтруктураМакетов = Новый Структура;
    СтруктураМакетов.Вставить("Т9а_от_5_1_2004", "Форма Т-9а");
    СтруктураМакетов.Вставить("Т9_от_5_1_2004",  "Форма Т-9");
    СтруктураМакетов.Вставить("Т10_от_5_1_2004", "Форма Т-10");
    СтруктураМакетов.Вставить("Т10а_от_5_1_2004", "Форма Т-10а");
    СтруктураМакетов.Вставить("AТ10_от_5_1_2005", "Форма Т-10-Новая");
    Возврат СтруктураМакетов;КонецФункции // ПолучитьСтруктуруПечатныхФорм()
    // Заполняет документ по перерассчитываемому документу
    // ИсходныйДокумент - тип ДокументОбъект.КомандировкиОрганизаций
    //
    Процедура ЗаполнитьПоПерерассчитываемомуДокументу(ИсходныйДокумент, Сотрудники = Неопределено) Экспорт
    
    ПроведениеРасчетов.ЗаполнитьИсправлениеПоКадровомуДокументу(ЭтотОбъект, ИсходныйДокумент.Ссылка, Сотрудники);
    
    КонецПроцедуры // ЗаполнитьПоПерерассчитываемомуДокументу()////////////////////////////////////////////////////////////////////////////////
    // ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ
    #Если ТолстыйКлиентОбычноеПриложение Тогда// Формирует запрос по документу и связанным регистрам сведений
    //
    // Параметры:
    // Режим - строка, может принимать значения:
    //	"ПоРеквизитамДокумента"
    //	"ПоТабличнойЧастиДокумента"
    //
    // Возвращаемое значение:
    // Результат запроса с данными об организации или о работниках из табличной части
    //
    Функция СформироватьЗапросДляПечати(Режим)
    Запрос = Новый Запрос;// Установим параметры запроса
    Запрос.УстановитьПараметр("ДокументСсылка", Ссылка);
    Запрос.УстановитьПараметр("ДатаДокумента", Дата);
    Если Режим = "ПоРеквизитамДокумента" Тогда  Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    Запрос.УстановитьПараметр("СтруктурнаяЕдиница",Организация);
    
    Запрос.Текст = ФормированиеПечатныхФормЗК.ПолучитьТекстЗапросаПоОтветственнымЛицам(
    "ДатаДокумента",
    "ОтветственноеЛицо = ЗНАЧЕНИЕ(Перечисление.ОтветственныеЛицаОрганизаций.Руководитель)
    |И СтруктурнаяЕдиница = &СтруктурнаяЕдиница");
    Запрос.Выполнить();
    
    Запрос.Текст =
    "ВЫБРАТЬ
    | КомандировкиОрганизаций.Дата КАК ДатаДок,
    | КомандировкиОрганизаций.Номер КАК НомерДок,
    | КомандировкиОрганизаций.Организация.НаименованиеПолное КАК НазваниеОрганизации,
    | КомандировкиОрганизаций.Организация.КодПоОКПО КАК КодПоОКПО,
    | КомандировкиОрганизаций.СтранаНазначения,
    | КомандировкиОрганизаций.ОрганизацияНазначения,
    | КомандировкиОрганизаций.ОснованиеКомандировки,
    | ОтветственныеЛицаОрганизаций.Должность КАК ДолжностьРуководителя,
    | ОтветственныеЛицаОрганизаций.НаименованиеОтветственногоЛица КАК ФИОРуководителя
    |ИЗ
    | Документ.КомандировкиОрганизаций КАК КомандировкиОрганизаций
    |  ЛЕВОЕ СОЕДИНЕНИЕ ВТДанныеОбОтветственномЛице КАК ОтветственныеЛицаОрганизаций
    |  ПО (ИСТИНА)
    |ГДЕ
    | КомандировкиОрганизаций.Ссылка = &ДокументСсылка";
    ИначеЕсли Режим = "ПоТабличнойЧастиДокумента" Тогда  Запрос.УстановитьПараметр("Организация",  Организация);
    Запрос.УстановитьПараметр("ГоловнаяОрганизация", ОбщегоНазначения.ГоловнаяОрганизация(Организация));
    
    Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    Запрос.Текст =
    "ВЫБРАТЬ
    | КомандировкиОрганизацииРаботники.НомерСтроки,
    | КомандировкиОрганизацииРаботники.Сотрудник.Физлицо КАК Физлицо,
    | КомандировкиОрганизацииРаботники.Сотрудник КАК Сотрудник,
    | КомандировкиОрганизацииРаботники.ФизЛицо.Пол КАК ФизЛицоПол,
    | КомандировкиОрганизацииРаботники.ДатаНачала,
    | КомандировкиОрганизацииРаботники.ДатаОкончания,
    | КомандировкиОрганизацииРаботники.ОсвобождатьСтавку,
    | КомандировкиОрганизацииРаботники.Цель,
    | КомандировкиОрганизацииРаботники.ИсточникФинансирования,
    | КомандировкиОрганизацииРаботники.НапомнитьПоЗавершении,
    | КомандировкиОрганизацииРаботники.ВремяНахожденияВПути,
    | КомандировкиОрганизацииРаботники.Сотрудник.Код КАК ТабельныйНомер
    |ПОМЕСТИТЬ ВТСотрудники
    |ИЗ
    | Документ.КомандировкиОрганизаций.РаботникиОрганизации КАК КомандировкиОрганизацииРаботники
    |ГДЕ
    | КомандировкиОрганизацииРаботники.Ссылка = &ДокументСсылка
    | И (НЕ КомандировкиОрганизацииРаботники.Сторно)
    |
    |ИНДЕКСИРОВАТЬ ПО
    | Сотрудник";
    Запрос.Выполнить();
    
    Запрос.Текст =
    "ВЫБРАТЬ
    | ЕСТЬNULL(ФИОФизЛиц.Фамилия + "" "" + ФИОФизЛиц.Имя + "" "" + ФИОФизЛиц.Отчество, КомандировкиОрганизацииРаботники.Сотрудник.Наименование) КАК Работник,
    | ЕСТЬNULL(ПаспортныеДанныеФизЛицСрезПоследних.ДокументВид.Наименование + "", серия "" + ПаспортныеДанныеФизЛицСрезПоследних.ДокументСерия + "", №"" + ПаспортныеДанныеФизЛицСрезПоследних.ДокументНомер, """") КАК РеквизитыПаспорта,
    | КомандировкиОрганизацииРаботники.НомерСтроки КАК НомерСтроки,
    | КомандировкиОрганизацииРаботники.ФизЛицоПол,
    | КомандировкиОрганизацииРаботники.ДатаНачала,
    | КомандировкиОрганизацииРаботники.ДатаОкончания,
    | КомандировкиОрганизацииРаботники.ВремяНахожденияВПути,
    | КомандировкиОрганизацииРаботники.Цель,
    | ВЫБОР
    |  КОГДА Работники.ПериодЗавершения <= КомандировкиОрганизацииРаботники.ДатаНачала
    |	И Работники.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
    |   ТОГДА Работники.ПодразделениеОрганизацииЗавершения
    |  ИНАЧЕ Работники.ПодразделениеОрганизации
    | КОНЕЦ КАК ПодразделениеРаботника,
    | ВЫБОР
    |  КОГДА Работники.ПериодЗавершения <= КомандировкиОрганизацииРаботники.ДатаНачала
    |	И Работники.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
    |   ТОГДА Работники.ДолжностьЗавершения
    |  ИНАЧЕ Работники.Должность
    | КОНЕЦ КАК Должность,
    | КомандировкиОрганизацииРаботники.ИсточникФинансирования,
    | КомандировкиОрганизацииРаботники.ТабельныйНомер
    |ИЗ
    | ВТСотрудники КАК КомандировкиОрганизацииРаботники
    |  ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    |   СписокДат.Сотрудник КАК Сотрудник,
    |   Работники.ПодразделениеОрганизации.Наименование КАК ПодразделениеОрганизации,
    |   Работники.Должность.Наименование КАК Должность,
    |   Работники.ПодразделениеОрганизацииЗавершения.Наименование КАК ПодразделениеОрганизацииЗавершения,
    |   Работники.ДолжностьЗавершения.Наименование КАК ДолжностьЗавершения,
    |   Работники.ПериодЗавершения КАК ПериодЗавершения
    |  ИЗ
    |   (ВЫБРАТЬ
    |	РаботникиВнутри.Сотрудник КАК Сотрудник,
    |	МАКСИМУМ(РаботникиВнутри.Период) КАК ДатаПоследнегоИзменения
    |   ИЗ
    |	РегистрСведений.РаботникиОрганизаций КАК РаботникиВнутри
    |	 ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТСотрудники КАК КомандировкиОрганизаций
    |	 ПО РаботникиВнутри.Период <= КомандировкиОрганизаций.ДатаНачала
    |	  И РаботникиВнутри.Сотрудник = КомандировкиОрганизаций.Сотрудник
    |  
    |   СГРУППИРОВАТЬ ПО
    |	РаботникиВнутри.Сотрудник) КАК СписокДат
    |	ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК Работники
    |	ПО СписокДат.ДатаПоследнегоИзменения = Работники.Период
    |	 И СписокДат.Сотрудник = Работники.Сотрудник) КАК Работники
    |  ПО КомандировкиОрганизацииРаботники.Сотрудник = Работники.Сотрудник
    |  ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФИОФизЛиц.СрезПоследних(
    |	&ДатаДокумента,
    |	ФизЛицо В
    |	 (ВЫБРАТЬ
    |	  Сотрудники.Физлицо
    |	 ИЗ
    |	  ВТСотрудники КАК Сотрудники)) КАК ФИОФизЛиц
    |  ПО КомандировкиОрганизацииРаботники.Сотрудник.Физлицо = ФИОФизЛиц.ФизЛицо
    |  ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПаспортныеДанныеФизЛиц.СрезПоследних(
    |	&ДатаДокумента,
    |	ФизЛицо В
    |	 (ВЫБРАТЬ
    |	  Сотрудники.Физлицо
    |	 ИЗ
    |	  ВТСотрудники КАК Сотрудники)) КАК ПаспортныеДанныеФизЛицСрезПоследних
    |  ПО КомандировкиОрганизацииРаботники.Сотрудник.Физлицо = ПаспортныеДанныеФизЛицСрезПоследних.ФизЛицо
    |
    |УПОРЯДОЧИТЬ ПО
    | НомерСтроки";
    Иначе
    Возврат Неопределено;
    
    КонецЕсли;Возврат Запрос.Выполнить();
    КонецФункции // СформироватьЗапросДляПечати()// Функция формирует табличный документ с печатной формой "Т-9а",
    //
    // Возвращаемое значение:
    // Табличный документ - печатная форма
    //
    Функция ПечатьТ9а(ИмяМакета)
    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.ПолеСлева = 0;
    ТабДокумент.ПолеСправа = 0;
    ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_КомандировкиОрганизации_Т9а";// получаем данные для печати
    ВыборкаДляШапкиИПодвала = СформироватьЗапросДляПечати("ПоРеквизитамДокумента").Выбрать();
    ВыборкаРаботники  = СформироватьЗапросДляПечати("ПоТабличнойЧастиДокумента").Выбрать();
    // запоминаем области макета
    Макет = ПолучитьМакет(ИмяМакета);
    ОбластьМакетаШапка	= Макет.ПолучитьОбласть("Шапка"); // Шапка документа.
    ОбластьМакетаПодвал	= Макет.ПолучитьОбласть("Подвал");// Подвал документа
    ОбластьМакетаБоковойЗаголовок = Макет.ПолучитьОбласть("ЗаголовокРаботников"); // "боковик" формы
    ОбластьМакета	  = Макет.ПолучитьОбласть("Работник"); // область работника// выводим данные о руководителях организации
    Если ВыборкаДляШапкиИПодвала.Следующий() Тогда
    ОбластьМакетаШапка.Параметры.Заполнить(ВыборкаДляШапкиИПодвала); // Шапка документа.
    ОбластьМакетаШапка.Параметры.НазваниеОрганизации = СокрЛП(ОбластьМакетаШапка.Параметры.НазваниеОрганизации);
    ОбластьМакетаПодвал.Параметры.Заполнить(ВыборкаДляШапкиИПодвала); // Для подвала
    ОбластьМакета.Параметры.Заполнить(ВыборкаДляШапкиИПодвала); // область работника
    КонецЕсли;
    // Начинаем формировать выходной документ
    ТабДокумент.Вывести(ОбластьМакетаШапка); // Шапка документа.
    ТабДокумент.Вывести(ОбластьМакетаБоковойЗаголовок); // "боковик" формыВыведеноСтрок = 0; ВыведеноСтрокВДокумент = 0;
    // выводим строки по работникам
    Пока ВыборкаРаботники.Следующий() Цикл
    // Каждый приказ на отдельной странице.
    Если ВыведеноСтрок = 3 Тогда
    
    // выводим предварительно подготовленный Подвал документа.
    ТабДокумент.Область(20 + ВыведеноСтрокВДокумент,4,20 + ВыведеноСтрокВДокумент,9).Объединить();
    ТабДокумент.Область(21 + ВыведеноСтрокВДокумент,4,21 + ВыведеноСтрокВДокумент,9).Объединить();
    ТабДокумент.Вывести(ОбластьМакетаПодвал);
    ВыведеноСтрокВДокумент = ТабДокумент.ВысотаТаблицы;
    ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    // начинаем новую страницу
    ВыведеноСтрок = 0;
    ТабДокумент.Вывести(ОбластьМакетаШапка); // Шапка документа.
    ТабДокумент.Вывести(ОбластьМакетаБоковойЗаголовок); // "боковик" формы
    КонецЕсли;  // Данные по работнику.
    ОбластьМакета.Параметры.Заполнить(ВыборкаРаботники);
    
    РезультатСклонения = "";
    Если УниверсальныеМеханизмы.Просклонять(глЗначениеПеременной("глКомпонентаСклоненияФИО"), ВыборкаРаботники.Работник, 4,ВыборкаРаботники.ФизЛицоПол, РезультатСклонения) Тогда
    ОбластьМакета.Параметры.Работник = РезультатСклонения
    КонецЕсли;
    
    //уберем из табельного номера префикс
    ОбластьМакета.Параметры.ТабельныйНомер = ВыборкаРаботники.ТабельныйНомер;
    
    ОбластьМакета.Параметры.Продолжительность = ?(ЗначениеЗаполнено(ВыборкаРаботники.ДатаОкончания),Цел((ВыборкаРаботники.ДатаОкончания - ВыборкаРаботники.ДатаНачала + 1) / мДлинаСуток) + 1, "");
    ТабДокумент.Присоединить(ОбластьМакета);
    ВыведеноСтрок = ВыведеноСтрок + 1;
    КонецЦикла;ОбластьМакета = Макет.ПолучитьОбласть("Работник"); // область работника
    Для Сч = ВыведеноСтрок + 1 По 3 Цикл
    ТабДокумент.Присоединить(ОбластьМакета);
    КонецЦикла;
    ТабДокумент.Область(20 + ВыведеноСтрокВДокумент,4,20 + ВыведеноСтрокВДокумент,9).Объединить();
    ТабДокумент.Область(21 + ВыведеноСтрокВДокумент,4,21 + ВыведеноСтрокВДокумент,9).Объединить();
    
    // выводим предварительно подготовленный Подвал документа.
    ТабДокумент.Вывести(ОбластьМакетаПодвал);
    Возврат ТабДокумент;КонецФункции // ПечатьТ9а()
    // Функция формирует табличный документ с печатной формой "Т-9",
    //
    // Возвращаемое значение:
    // Табличный документ - печатная форма
    //
    Функция ПечатьТ9(ИмяМакета)
    
    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_КомандировкиОрганизации_Т9";
    ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
    
    // получаем данные для печати
    ВыборкаДляШапки  = СформироватьЗапросДляПечати("ПоРеквизитамДокумента").Выбрать();
    ВыборкаРаботники = СформироватьЗапросДляПечати("ПоТабличнойЧастиДокумента").Выбрать();// запоминаем области макета
    Макет = ПолучитьМакет(ИмяМакета);
    ОбластьМакетаШапка = Макет.ПолучитьОбласть("Шапка"); // Шапка документа
    ОбластьМакетаПодвал = Макет.ПолучитьОбласть("Подвал"); // Подвал документа
    ОбластьМакета  = Макет.ПолучитьОбласть("Работник"); // строка работника
    // выводим данные о руководителях организации
    Если ВыборкаДляШапки.Следующий() Тогда
    ОбластьМакетаШапка.Параметры.Заполнить(ВыборкаДляШапки); // Шапка документа.
    ОбластьМакетаШапка.Параметры.НазваниеОрганизации = СокрЛП(ОбластьМакетаШапка.Параметры.НазваниеОрганизации);
    ОбластьМакетаПодвал.Параметры.Заполнить(ВыборкаДляШапки); // Для подвала.
    ОбластьМакета.Параметры.Заполнить(ВыборкаДляШапки); // область работника
    ВыводитьДатуОзнакомленияСПриказом = ПроцедурыУправленияПерсоналом.ЗначениеУчетнойПолитикиПоПерсоналуОрганизации(глЗначениеПеременной("глУчетнаяПолитикаПоПерсоналуОрганизации"), Организация, "ПроставлятьАвтоматическиДатуОзнакомленияВКадровыхПриказах");
    Если Не ВыводитьДатуОзнакомленияСПриказом Тогда
    ОбластьМакетаПодвал.Параметры.ДатаДок = ФормированиеПечатныхФормЗК.ПустаяДатаВПечатнойФорме();
    КонецЕсли;
    НомерДокДляПечати = ВыборкаДляШапки.НомерДок;
    КонецЕсли;НомерФормы = 0;
    ПечататьПостфикс = ВыборкаРаботники.Количество() > 1;
    
    // Начинаем формировать выходной документ
    Пока ВыборкаРаботники.Следующий() Цикл
    // Каждый приказ на отдельной странице.
    Если ТабДокумент.ВысотаТаблицы > 0 Тогда
    ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    КонецЕсли;  // Шапка документа.
    Если ПечататьПостфикс Тогда
    НомерФормы = НомерФормы + 1;
    ОбластьМакетаШапка.Параметры.НомерДок = НомерДокДляПечати + "/" + НомерФормы
    КонецЕсли;
    ТабДокумент.Вывести(ОбластьМакетаШапка);
    // Данные по работнику.
    ОбластьМакета.Параметры.Заполнить(ВыборкаРаботники);
    
    РезультатСклонения = "";
    Если УниверсальныеМеханизмы.Просклонять(глЗначениеПеременной("глКомпонентаСклоненияФИО"), ВыборкаРаботники.Работник, 4,ВыборкаРаботники.ФизЛицоПол, РезультатСклонения) Тогда
    ОбластьМакета.Параметры.Работник = РезультатСклонения
    КонецЕсли;
    
    //уберем из табельного номера префикс
    ОбластьМакета.Параметры.ТабельныйНомер = ВыборкаРаботники.ТабельныйНомер;
    
    ОбластьМакета.Параметры.Продолжительность = ?(ЗначениеЗаполнено(ВыборкаРаботники.ДатаОкончания),Цел((ВыборкаРаботники.ДатаОкончания - ВыборкаРаботники.ДатаНачала + 1) / мДлинаСуток) + 1,"");
    ТабДокумент.Вывести(ОбластьМакета);
    
    Если Не ВыводитьДатуОзнакомленияСПриказом Тогда
    ОбластьМакетаПодвал.Параметры.ДатаДок = ФормированиеПечатныхФормЗК.ПустаяДатаВПечатнойФорме();
    КонецЕсли;
    
    // Подвал документа.
    ТабДокумент.Вывести(ОбластьМакетаПодвал);КонецЦикла;
    // если не было ни одного работника - выводим пустой бланк
    Если ТабДокумент.ВысотаТаблицы = 0 Тогда
    ТабДокумент.Вывести(ОбластьМакетаШапка);
    ТабДокумент.Вывести(ОбластьМакета);
    ТабДокумент.Вывести(ОбластьМакетаПодвал);
    КонецЕсли;Возврат ТабДокумент;
    КонецФункции // ПечатьТ9()// Функция формирует табличный документ с печатной формой "Т-10",
    //
    // Возвращаемое значение:
    //  Табличный документ - печатная форма
    //
    Функция ПечатьТ10(ИмяМакета)
    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_КомандировкиОрганизации_Т10";
    ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
    
    // получаем данные для печати
    ВыборкаДляШапки   = СформироватьЗапросДляПечати("ПоРеквизитамДокумента").Выбрать();
    ВыборкаРаботники = СформироватьЗапросДляПечати("ПоТабличнойЧастиДокумента").Выбрать();
    // запоминаем области макета
    Макет = ПолучитьМакет(ИмяМакета);
    ОбластьМакетаШапка = Макет.ПолучитьОбласть("Шапка");   // Шапка документа
    ОбластьМакетаПодвал = Макет.ПолучитьОбласть("Подвал");   // Подвал документа
    ОбластьМакета  = Макет.ПолучитьОбласть("Работник");  // строка работника
    ОбластьМакетаОтметки  = Макет.ПолучитьОбласть("Отметки");
    Оборот   = Макет.ПолучитьОбласть("Оборот"); // оборот удостоверения - отметки от прибытии-выбытии
    // ОборотОтметки  = Макет.ПолучитьОбласть("Отметки");// выводим данные о руководителях организации
    Если ВыборкаДляШапки.Следующий() Тогда
    ОбластьМакетаШапка.Параметры.Заполнить(ВыборкаДляШапки); // Шапка документа.
    ОбластьМакетаШапка.Параметры.НазваниеОрганизации = СокрЛП(ОбластьМакетаШапка.Параметры.НазваниеОрганизации);
    ОбластьМакетаПодвал.Параметры.Заполнить(ВыборкаДляШапки); // Для подвала.
    ОбластьМакета.Параметры.Заполнить(ВыборкаДляШапки); // область работника
    НомерДокДляПечати = ВыборкаДляШапки.НомерДок;
    КонецЕсли;
    НомерФормы = 0;
    ПечататьПостфикс = ВыборкаРаботники.Количество() > 1;
    // Начинаем формировать выходной документ
    Пока ВыборкаРаботники.Следующий() Цикл  // Каждый приказ на отдельной странице.
    Если ТабДокумент.ВысотаТаблицы > 0 Тогда
    ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    КонецЕсли;
    // Шапка документа.
    Если ПечататьПостфикс Тогда
    НомерФормы = НомерФормы + 1;
    ОбластьМакетаШапка.Параметры.НомерДок = НомерДокДляПечати + "/" + НомерФормы
    КонецЕсли;
    ТабДокумент.Вывести(ОбластьМакетаШапка);  // Данные по работнику.
    ОбластьМакета.Параметры.Заполнить(ВыборкаРаботники);
    
    //уберем из табельного номера префикс
    ОбластьМакета.Параметры.ТабельныйНомер = ВыборкаРаботники.ТабельныйНомер;
    
    // в этой форме продолжительность командировки указывается без времени в пути
    ОбластьМакета.Параметры.Продолжительность = ?(ЗначениеЗаполнено(ВыборкаРаботники.ДатаОкончания),Цел((ВыборкаРаботники.ДатаОкончания - ВыборкаРаботники.ДатаНачала + 1) / мДлинаСуток) + 1 - ВыборкаРаботники.ВремяНахожденияВПути,"");
    ТабДокумент.Вывести(ОбластьМакета);
    // Подвал документа.
    ТабДокумент.Вывести(ОбластьМакетаПодвал);
    ТабДокумент.Вывести(ОбластьМакетаОтметки);  // выводим оборот удостоверения
    // ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    ТабДокумент.Вывести(Оборот);
    //ТабДокумент.Вывести(Оборот);
    //ТабДокумент.Вывести(Оборот);
    //ТабДокумент.Вывести(Оборот);
    ТабДокумент.Вывести(Оборот);
    ТабДокумент.Вывести(Оборот);
    КонецЦикла;// если не было ни одного работника - выводим пустой бланк
    Если ТабДокумент.ВысотаТаблицы = 0 Тогда
    ТабДокумент.Вывести(ОбластьМакетаШапка);
    ТабДокумент.Вывести(ОбластьМакета);
    ТабДокумент.Вывести(ОбластьМакетаПодвал);
    ТабДокумент.Вывести(ОбластьМакетаОтметки);
    // выводим оборот удостоверения
    ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    ТабДокумент.Вывести(Оборот);
    ТабДокумент.Вывести(Оборот);
    ТабДокумент.Вывести(Оборот);
    
    КонецЕсли;Возврат ТабДокумент;
    КонецФункции // ПечатьТ10()// Функция формирует табличный документ с печатной формой "Т-10а",
    //
    // Возвращаемое значение:
    // Табличный документ - печатная форма
    //
    Функция ПечатьТ10а(ИмяМакета)
    
    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_КомандировкиОрганизации_Т10а";
    ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
    
    // получаем данные для печати
    ВыборкаДляШапки   = СформироватьЗапросДляПечати("ПоРеквизитамДокумента").Выбрать();
    ВыборкаРаботники = СформироватьЗапросДляПечати("ПоТабличнойЧастиДокумента").Выбрать();
    // запоминаем области макета
    Макет = ПолучитьМакет(ИмяМакета);
    ОбластьМакетаШапка = Макет.ПолучитьОбласть("Шапка");  // Шапка документа
    ОбластьМакетаПодвал = Макет.ПолучитьОбласть("Подвал");  // Подвал документа
    ОбластьМакета  = Макет.ПолучитьОбласть("Работник"); // строка работника// выводим данные о руководителях организации
    Если ВыборкаДляШапки.Следующий() Тогда
    ОбластьМакетаШапка.Параметры.Заполнить(ВыборкаДляШапки); // Шапка документа.
    ОбластьМакетаШапка.Параметры.НазваниеОрганизации = СокрЛП(ОбластьМакетаШапка.Параметры.НазваниеОрганизации);
    ОбластьМакетаПодвал.Параметры.Заполнить(ВыборкаДляШапки); // Для подвала.
    ОбластьМакета.Параметры.Заполнить(ВыборкаДляШапки);   // область работника
    НомерДокДляПечати = ВыборкаДляШапки.НомерДок;
    КонецЕсли;
    НомерФормы = 0;
    ПечататьПостфикс = ВыборкаРаботники.Количество() > 1;
    // Начинаем формировать выходной документ
    Пока ВыборкаРаботники.Следующий() Цикл  // Каждый приказ на отдельной странице.
    Если ТабДокумент.ВысотаТаблицы > 0 Тогда
    ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    КонецЕсли;
    // Шапка документа.
    Если ПечататьПостфикс Тогда
    НомерФормы = НомерФормы + 1;
    ОбластьМакетаШапка.Параметры.НомерДок = НомерДокДляПечати + "/" + НомерФормы
    КонецЕсли;
    ТабДокумент.Вывести(ОбластьМакетаШапка);  // Данные по работнику.
    ОбластьМакета.Параметры.Заполнить(ВыборкаРаботники);
    
    //уберем из табельного номера префикс
    ОбластьМакета.Параметры.ТабельныйНомер = ВыборкаРаботники.ТабельныйНомер;
    
    // в этой форме выводим два варианта продолжительности командировки
    ОбластьМакета.Параметры.Продолжительность = ?(ЗначениеЗаполнено(ВыборкаРаботники.ДатаОкончания),Цел((ВыборкаРаботники.ДатаОкончания - ВыборкаРаботники.ДатаНачала + 1) / мДлинаСуток) + 1,"");
    ОбластьМакета.Параметры.ПродолжительностьЧистая = ?(ЗначениеЗаполнено(ВыборкаРаботники.ДатаОкончания),Цел((ВыборкаРаботники.ДатаОкончания - ВыборкаРаботники.ДатаНачала + 1) / мДлинаСуток) + 1 - ВыборкаРаботники.ВремяНахожденияВПути,"");
    ТабДокумент.Вывести(ОбластьМакета);
    // Подвал документа.
    ТабДокумент.Вывести(ОбластьМакетаПодвал);КонецЦикла;
    // если не было ни одного работника - выводим пустой бланк
    Если ТабДокумент.ВысотаТаблицы = 0 Тогда
    ТабДокумент.Вывести(ОбластьМакетаШапка);
    ТабДокумент.Вывести(ОбластьМакета);
    ТабДокумент.Вывести(ОбластьМакетаПодвал);
    КонецЕсли;Возврат ТабДокумент;
    КонецФункции // ПечатьТ10а()#КонецЕсли
    ////////////////////////////////////////////////////////////////////////////////
    // ПРОЦЕДУРЫ И ФУНКЦИИ ДЛЯ ОБЕСПЕЧЕНИЯ ПРОВЕДЕНИЯ ДОКУМЕНТА// Формирует запрос по шапке документа
    //
    // Параметры:
    // Режим - режим проведения
    //
    // Возвращаемое значение:
    // Результат запроса
    //
    Функция СформироватьЗапросПоШапке(Режим)
    Запрос = Новый Запрос;// Установим параметры запроса
    Запрос.УстановитьПараметр("ДокументСсылка",  Ссылка);
    Запрос.УстановитьПараметр("ПустаяОрганизация", Справочники.Организации.ПустаяСсылка());
    Запрос.Текст =
    "ВЫБРАТЬ
    | КомандировкиОрганизаций.Дата,
    | КомандировкиОрганизаций.Организация,
    | ВЫБОР
    |  КОГДА КомандировкиОрганизаций.Организация.ГоловнаяОрганизация = &ПустаяОрганизация
    |   ТОГДА КомандировкиОрганизаций.Организация
    |  ИНАЧЕ КомандировкиОрганизаций.Организация.ГоловнаяОрганизация
    | КОНЕЦ КАК ГоловнаяОрганизация,
    | КомандировкиОрганизаций.Ссылка
    |ИЗ
    | Документ.КомандировкиОрганизаций КАК КомандировкиОрганизаций
    |ГДЕ
    | КомандировкиОрганизаций.Ссылка = &ДокументСсылка";Возврат Запрос.Выполнить();
    КонецФункции // СформироватьЗапросПоШапке()// Формирует запрос по таблице "РаботникиОрганизации" документа
    //
    // Параметры:
    // Режим - режим проведения
    //
    // Возвращаемое значение:
    // Результат запроса. В запросе данные документа дополняются значениями
    // проверяемых параметров из связанного с
    //
    Функция СформироватьЗапросПоРаботникиОрганизации(ВыборкаПоШапкеДокумента, КонтрольКоличестваСтавокШтатногоРасписания)
    Запрос = Новый Запрос;// Установим параметры запроса
    Запрос.УстановитьПараметр("ДокументСсылка",   Ссылка);
    Запрос.УстановитьПараметр("ГоловнаяОрганизация", ВыборкаПоШапкеДокумента.ГоловнаяОрганизация);
    // Описание текста запроса:
    // Первая часть запроса  - вид строки запроса "ДанныеДляДвиженийКадров":
    // 1. Выборка "ТЧРаботникиОрганизации":
    //  Выбираются строки документа.
    // 2. Выборка "ДанныеПоРаботникуДоНазначения":
    //  Для каждой строки ТЧРаботникиОрганизации выполняем срез по регистру РаботникиОрганизации на дату ДатаНачала
    //  для выполнения движений и проверки "Работает ли работник на дату перемещения"
    //  (Использует данные выборки "ДатыПоследнегоДвиженияРаботника")
    // 3. Выборка "ПересекающиесяСтроки":
    //  Среди остальных строк документа ищем строки, имеющие пересекающийся период действия
    //
    // Вторая часть запроса - вид строки запроса "КонфликтныйДокумент" - поиск конфликтных документов:
    // 1. Выборка "ТЧРаботникиОрганизации":
    //  Выбираются строки документа
    // 2. Выборка "Работники":
    //  Для каждой строки ТЧРаботникиОрганизации ищем движения по регистру РаботникиОрганизации за период [ДатаНачала, ДатаОкончания]
    //  по измерению <Сотрудник>
    
    Запрос.Текст =
    "ВЫБРАТЬ
    | ТЧРаботникиОрганизации.НомерСтроки КАК НомерСтроки,
    | ТЧРаботникиОрганизации.Сотрудник,
    | ТЧРаботникиОрганизации.Сотрудник.Наименование,
    | ТЧРаботникиОрганизации.Сотрудник.Физлицо КАК Физлицо,
    | ТЧРаботникиОрганизации.ДатаНачала,
    | ТЧРаботникиОрганизации.ДатаОкончания,
    | ТЧРаботникиОрганизации.ВремяНахожденияВПути,
    | ТЧРаботникиОрганизации.НапомнитьПоЗавершении,
    | ТЧРаботникиОрганизации.ОсвобождатьСтавку,
    | ВЫБОР
    |  КОГДА ТЧРаботникиОрганизации.Сотрудник.Организация = &ГоловнаяОрганизация
    |   ТОГДА ЛОЖЬ
    |  ИНАЧЕ ИСТИНА
    | КОНЕЦ КАК ОшибкаНеСоответствиеСотрудникаИОрганизации,
    | ВЫБОР
    |  КОГДА ДанныеПоРаботникуДоНазначения.ПериодЗавершения <= ТЧРаботникиОрганизации.ДатаНачала
    |	И ДанныеПоРаботникуДоНазначения.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
    |   ТОГДА ДанныеПоРаботникуДоНазначения.ПодразделениеОрганизацииЗавершения
    |  ИНАЧЕ ДанныеПоРаботникуДоНазначения.ПодразделениеОрганизации
    | КОНЕЦ КАК ПодразделениеОрганизации,
    | ВЫБОР
    |  КОГДА ДанныеПоРаботникуДоНазначения.ПериодЗавершения <= ТЧРаботникиОрганизации.ДатаНачала
    |	И ДанныеПоРаботникуДоНазначения.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
    |   ТОГДА ДанныеПоРаботникуДоНазначения.ДолжностьЗавершения
    |  ИНАЧЕ ДанныеПоРаботникуДоНазначения.Должность
    | КОНЕЦ КАК Должность,
    | ВЫБОР
    |  КОГДА ДанныеПоРаботникуДоНазначения.ПериодЗавершения <= ТЧРаботникиОрганизации.ДатаНачала
    |	И ДанныеПоРаботникуДоНазначения.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
    |   ТОГДА ДанныеПоРаботникуДоНазначения.ЗанимаемыхСтавокЗавершения
    |  ИНАЧЕ ДанныеПоРаботникуДоНазначения.ЗанимаемыхСтавок
    | КОНЕЦ КАК ЗанимаемыхСтавок,
    | ПересекающиесяСтроки.КонфликтнаяСтрокаНомер,
    | ИмеющиесяСостояния.Состояние КАК КонфликтноеСостояние,
    | ИмеющиесяСостояния.Регистратор.Представление КАК КонфликтныйДокумент
    |ИЗ
    | Документ.КомандировкиОрганизаций.РаботникиОрганизации КАК ТЧРаботникиОрганизации
    |  ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    |   ТЧРаботникиОрганизации.НомерСтроки КАК НомерСтроки,
    |   МАКСИМУМ(Работники.Период) КАК ДатаДвижения
    |  ИЗ
    |   Документ.КомандировкиОрганизаций.РаботникиОрганизации КАК ТЧРаботникиОрганизации
    |	ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК Работники
    |	ПО (Работники.Период <= ТЧРаботникиОрганизации.ДатаНачала)
    |	 И ТЧРаботникиОрганизации.Сотрудник = Работники.Сотрудник
    |  ГДЕ
    |   ТЧРаботникиОрганизации.Ссылка = &ДокументСсылка
    |   И (НЕ ТЧРаботникиОрганизации.Сторно)
    |
    |  СГРУППИРОВАТЬ ПО
    |   ТЧРаботникиОрганизации.НомерСтроки) КАК ДатыПоследнегоДвиженияРаботника
    |  ПО (ДатыПоследнегоДвиженияРаботника.НомерСтроки = ТЧРаботникиОрганизации.НомерСтроки)
    |  ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК ДанныеПоРаботникуДоНазначения
    |  ПО (ДанныеПоРаботникуДоНазначения.Период = ДатыПоследнегоДвиженияРаботника.ДатаДвижения)
    |   И ТЧРаботникиОрганизации.Сотрудник = ДанныеПоРаботникуДоНазначения.Сотрудник
    |  ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    |   ТЧРаботникиОрганизации.НомерСтроки КАК НомерСтроки,
    |   МИНИМУМ(ТЧРаботникиОрганизации2.НомерСтроки) КАК КонфликтнаяСтрокаНомер
    |  ИЗ
    |   Документ.КомандировкиОрганизаций.РаботникиОрганизации КАК ТЧРаботникиОрганизации
    |	ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.КомандировкиОрганизаций.РаботникиОрганизации КАК ТЧРаботникиОрганизации2
    |	ПО (ТЧРаботникиОрганизации2.Ссылка = &ДокументСсылка)
    |	 И ТЧРаботникиОрганизации.НомерСтроки <> ТЧРаботникиОрганизации2.НомерСтроки
    |	 И ТЧРаботникиОрганизации.ДатаНачала <= ТЧРаботникиОрганизации2.ДатаНачала
    |	 И ТЧРаботникиОрганизации.Сотрудник = ТЧРаботникиОрганизации2.Сотрудник
    |	 И (ВЫБОР
    |	  КОГДА ТЧРаботникиОрганизации.ДатаОкончания = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
    |	   ТОГДА ИСТИНА
    |	  КОГДА ТЧРаботникиОрганизации.НапомнитьПоЗавершении
    |	   ТОГДА ИСТИНА
    |	  ИНАЧЕ ТЧРаботникиОрганизации.ДатаОкончания >= ТЧРаботникиОрганизации2.ДатаНачала
    |	 КОНЕЦ)
    |	 И ТЧРаботникиОрганизации.Сторно = ТЧРаботникиОрганизации2.Сторно
    |  ГДЕ
    |   ТЧРаботникиОрганизации.Ссылка = &ДокументСсылка
    |   И (НЕ ТЧРаботникиОрганизации.Сторно)
    |
    |  СГРУППИРОВАТЬ ПО
    |   ТЧРаботникиОрганизации.НомерСтроки) КАК ПересекающиесяСтроки
    |  ПО ТЧРаботникиОрганизации.НомерСтроки = ПересекающиесяСтроки.НомерСтроки
    |  ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостояниеРаботниковОрганизаций КАК ИмеющиесяСостояния
    |  ПО ТЧРаботникиОрганизации.ДатаНачала = ИмеющиесяСостояния.Период
    |   И ТЧРаботникиОрганизации.Ссылка <> ИмеющиесяСостояния.Регистратор
    |   И ТЧРаботникиОрганизации.Сотрудник = ИмеющиесяСостояния.Сотрудник
    |ГДЕ
    | ТЧРаботникиОрганизации.Ссылка = &ДокументСсылка
    | И (НЕ ТЧРаботникиОрганизации.Сторно)
    |
    |УПОРЯДОЧИТЬ ПО
    | НомерСтроки";
    
    Возврат Запрос.Выполнить();КонецФункции // СформироватьЗапросПоРаботникиОрганизации()
    // Проверяет правильность заполнения шапки документа.
    // Если какой-то из реквизитов шапки, влияющий на проведение не заполнен или
    // заполнен не корректно, то выставляется флаг отказа в проведении.
    // Проверка выполняется по выборке из результата запроса по шапке,
    // все проверяемые реквизиты должны быть включены в выборку по шапке.
    //
    // Параметры:
    // ВыборкаПоШапкеДокумента - выборка из результата запроса по шапке документа,
    // Отказ	  - флаг отказа в проведении.
    // Заголовок	- Заголовок для сообщений об ошибках проведения
    //
    Процедура ПроверитьЗаполнениеШапки(ВыборкаПоШапкеДокумента, Отказ, Заголовок)// Организация
    Если Не ЗначениеЗаполнено(ВыборкаПоШапкеДокумента.Организация) Тогда
    ОбщегоНазначения.ВывестиИнформациюОбОшибке(ОбщегоНазначения.ПреобразоватьСтрокуИнтерфейса("Не указана организация, сотрудники которой отправляются в командировку!"), Отказ, Заголовок);
    КонецЕсли;
    КонецПроцедуры // ПроверитьЗаполнениеШапки()// Проверяет правильность заполнения реквизитов в строке ТЧ "РаботникиОрганизации" документа.
    // Если какой-то из реквизитов, влияющий на проведение не заполнен или
    // заполнен не корректно, то выставляется флаг отказа в проведении.
    // Проверка выполняется по выборке из результата запроса по строке ТЧ документа,
    // все проверяемые реквизиты должны быть включены в выборку.
    //
    // Параметры:
    // ВыборкаПоШапкеДокумента  - выборка из результата запроса по шапке документа,
    // ВыборкаПоСтрокамДокумента - спозиционированная на определенной строке выборка
    //		  из результата запроса по работникам,
    // Отказ	  - флаг отказа в проведении.
    // Заголовок	 - Заголовок для сообщений об ошибках проведения
    //
    Процедура ПроверитьЗаполнениеСтрокиРаботникаОрганизации(ВыборкаПоШапкеДокумента, ВыборкаПоСтрокамДокумента, Отказ, Заголовок)
    
    СтрокаНачалаСообщенияОбОшибке =
    "В строке номер """+ СокрЛП(ВыборкаПоСтрокамДокумента.НомерСтроки) + """ табл. части ""Сотрудники"": ";
    
    // Сотрудник
    НетСотрудника = НЕ ЗначениеЗаполнено(ВыборкаПоСтрокамДокумента.Сотрудник);
    Если НетСотрудника Тогда
    ОбщегоНазначения.ВывестиИнформациюОбОшибке(СтрокаНачалаСообщенияОбОшибке + "не выбран сотрудник!", Отказ, Заголовок);
    КонецЕсли;
    
    // ДатаНачала
    НетДатыНачала = НЕ ЗначениеЗаполнено(ВыборкаПоСтрокамДокумента.ДатаНачала);
    Если НетДатыНачала Тогда
    ОбщегоНазначения.ВывестиИнформациюОбОшибке(СтрокаНачалаСообщенияОбОшибке + "не указана дата начала командировки!", Отказ, Заголовок);
    КонецЕсли;
    
    Если НетСотрудника ИЛИ НетДатыНачала Тогда
    Возврат;
    КонецЕсли;
    
    Если ЗначениеЗаполнено(ВыборкаПоСтрокамДокумента.ДатаОкончания) Тогда
    Если ВыборкаПоСтрокамДокумента.ДатаНачала > ВыборкаПоСтрокамДокумента.ДатаОкончания Тогда
    ОбщегоНазначения.ВывестиИнформациюОбОшибке(СтрокаНачалаСообщенияОбОшибке + "дата начала командировки не может превышать дату окончания!", Отказ, Заголовок);
    
    ИначеЕсли ВыборкаПоСтрокамДокумента.ДатаНачала + мДлинаСуток * ВыборкаПоСтрокамДокумента.ВремяНахожденияВПути > ВыборкаПоСтрокамДокумента.ДатаОкончания Тогда
    ОбщегоНазначения.ВывестиИнформациюОбОшибке(СтрокаНачалаСообщенияОбОшибке + "время нахождения в пути не может превышать срок командировки!", Отказ, Заголовок);
    
    КонецЕсли;
    КонецЕсли;
    
    // Организация сотрудника должна совпадать с организацией документа
    Если ВыборкаПоСтрокамДокумента.ОшибкаНеСоответствиеСотрудникаИОрганизации Тогда
    ОбщегоНазначения.ВывестиИнформациюОбОшибке(СтрокаНачалаСообщенияОбОшибке + ОбщегоНазначения.ПреобразоватьСтрокуИнтерфейса("указанный сотрудник оформлен на другую организацию!"), Отказ, Заголовок);
    КонецЕсли;
    
    // Проверка: ранее работник должен быть принят на работу
    Если ВыборкаПоСтрокамДокумента.ЗанимаемыхСтавок = NULL Тогда
    СтрокаПродолжениеСообщенияОбОшибке = "на " + Формат(ВыборкаПоСтрокамДокумента.ДатаНачала, "ДЛФ=DD") + " сотрудник " + ВыборкаПоСтрокамДокумента.СотрудникНаименование + " еще не принят на работу!";
    ОбщегоНазначения.ВывестиИнформациюОбОшибке(СтрокаНачалаСообщенияОбОшибке + СтрокаПродолжениеСообщенияОбОшибке, Отказ, Заголовок);
    
    ИначеЕсли ВыборкаПоСтрокамДокумента.ЗанимаемыхСтавок = 0 Тогда
    СтрокаПродолжениеСообщенияОбОшибке = "на " + Формат(ВыборкаПоСтрокамДокумента.ДатаНачала, "ДЛФ=DD") + " сотрудник " + ВыборкаПоСтрокамДокумента.СотрудникНаименование + " уже уволен!";
    ОбщегоНазначения.ВывестиИнформациюОбОшибке(СтрокаНачалаСообщенияОбОшибке + СтрокаПродолжениеСообщенияОбОшибке, Отказ, Заголовок);
    
    КонецЕсли;
    
    // Проверка: противоречие другой строке документа
    Если ВыборкаПоСтрокамДокумента.КонфликтнаяСтрокаНомер <> NULL Тогда
    СтрокаСообщениеОбОшибке = "период командировки пересекается с периодом строки " + ВыборкаПоСтрокамДокумента.КонфликтнаяСтрокаНомер + "!";
    ОбщегоНазначения.ВывестиИнформациюОбОшибке(СтрокаНачалаСообщенияОбОшибке + СтрокаСообщениеОбОшибке, Отказ, Заголовок);
    КонецЕсли;
    
    // Проверка: в регистре уже есть такое движение
    Если ВыборкаПоСтрокамДокумента.КонфликтноеСостояние <> NULL Тогда
    Расшифровки = Новый Массив;
    Расшифровки.Добавить(Новый Структура("Представление, Расшифровка", ВыборкаПоСтрокамДокумента.КонфликтныйДокумент, ВыборкаПоСтрокамДокумента.КонфликтныйДокумент));
    СтрокаСообщениеОбОшибке = "сотрудник уже переведен в состояние """ + ВыборкаПоСтрокамДокумента.КонфликтноеСостояние + """ документом " + ВыборкаПоСтрокамДокумента.КонфликтныйДокумент + "!";
    ОбщегоНазначения.ВывестиИнформациюОбОшибке(СтрокаНачалаСообщенияОбОшибке + СтрокаСообщениеОбОшибке, Отказ, Заголовок);
    КонецЕсли;
    
    КонецПроцедуры // ПроверитьЗаполнениеСтрокиРаботникаОрганизации()
    // По строке выборки результата запроса по документу формируем движения по регистрам
    //
    // Параметры:
    // ВыборкаПоШапкеДокумента - выборка из результата запроса по шапке документа,
    // ВыборкаПоРаботникиОрганизации
    // УчетнаяПолитикаПоПерсоналуОрганизации
    //
    // Возвращаемое значение:
    // Нет.
    //
    Процедура ДобавитьСтрокуВДвиженияПоРегистрамСведений(ВыборкаПоШапкеДокумента, ВыборкаПоРаботникиОрганизации)
    
    // движения по дате "с"
    Движение = Движения.СостояниеРаботниковОрганизаций.Добавить();
    
    // Свойства
    Движение.Период	   = ВыборкаПоРаботникиОрганизации.ДатаНачала;
    
    // Измерения
    Движение.Сотрудник	  = ВыборкаПоРаботникиОрганизации.Сотрудник;
    Движение.Организация	 = ВыборкаПоШапкеДокумента.ГоловнаяОрганизация;
    
    // Ресурсы
    Движение.Состояние	  = Перечисления.СостоянияРаботникаОрганизации.Командировка;
    
    // Реквизиты
    Движение.ПервичныйДокумент	= ВыборкаПоШапкеДокумента.Ссылка;
    
    Если ЗначениеЗаполнено(ВыборкаПоРаботникиОрганизации.ДатаОкончания) Тогда
    
    Если НЕ ВыборкаПоРаботникиОрганизации.НапомнитьПоЗавершении Тогда
    // Свойства
    Движение.ПериодЗавершения  = ВыборкаПоРаботникиОрганизации.ДатаОкончания + мДлинаСуток;
    
    // Ресурсы
    Движение.СостояниеЗавершения = Перечисления.СостоянияРаботникаОрганизации.Работает;
    
    Иначе
    Движение = Движения.НамеченныеСобытияПоПерсоналу.Добавить();
    
    // Свойства
    Движение.Период	 = ВыборкаПоРаботникиОрганизации.ДатаОкончания + мДлинаСуток;
    
    // Измерения
    Движение.Сотрудник	= ВыборкаПоРаботникиОрганизации.Сотрудник;
    Движение.Организация   = ВыборкаПоШапкеДокумента.ГоловнаяОрганизация;
    Движение.ДатаИзменения   = ВыборкаПоРаботникиОрганизации.ДатаОкончания + мДлинаСуток;
    Движение.ПланируемоеСобытие  = Перечисления.НамеченныеСобытияПоПерсоналу.Командировка;
    
    // Реквизиты
    Движение.ЗанимаемыхСтавок  = ВыборкаПоРаботникиОрганизации.ЗанимаемыхСтавок;
    Движение.ЗаниматьСтавку   = ВыборкаПоРаботникиОрганизации.ОсвобождатьСтавку;
    
    КонецЕсли;
    
    КонецЕсли;
    
    Если ВыборкаПоРаботникиОрганизации.ОсвобождатьСтавку Тогда
    Движение = Движения.СотрудникиОсвободившиеСтавкиВОрганизациях.Добавить();
    
    // Свойства
    Движение.Период	= ВыборкаПоРаботникиОрганизации.ДатаНачала;
    
    // Измерения
    Движение.Сотрудник   = ВыборкаПоРаботникиОрганизации.Сотрудник;
    Движение.Организация  = ВыборкаПоШапкеДокумента.ГоловнаяОрганизация;
    
    // Ресурсы
    Движение.ОсвобождатьСтавку = Истина;
    
    Если ЗначениеЗаполнено(ВыборкаПоРаботникиОрганизации.ДатаОкончания) и НЕ ВыборкаПоРаботникиОрганизации.НапомнитьПоЗавершении Тогда
    
    // Свойства
    Движение.ПериодЗавершения = ВыборкаПоРаботникиОрганизации.ДатаОкончания + мДлинаСуток;
    
    // Ресурсы
    Движение.ОсвобождатьСтавкуЗавершения = Ложь;
    
    КонецЕсли;
    КонецЕсли;КонецПроцедуры // ДобавитьСтрокуВДвиженияПоРегистрамСведений()
    ////////////////////////////////////////////////////////////////////////////////
    // ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙПроцедура ОбработкаПроведения(Отказ, Режим)
    
    // Если документ перенесен - движения не делаем
    Если ДанныеПрошлойВерсии Тогда
    Возврат;
    КонецЕсли;
    
    ОбработкаКомментариев = глЗначениеПеременной("глОбработкаСообщений");
    ОбработкаКомментариев.УдалитьСообщения();
    
    // Заголовок для сообщений об ошибках проведения.
    Заголовок = ОбщегоНазначения.ПредставлениеДокументаПриПроведении(Ссылка);
    
    РезультатЗапросаПоШапке = СформироватьЗапросПоШапке(Режим);
    
    // Получим реквизиты шапки из запроса
    ВыборкаПоШапкеДокумента = РезультатЗапросаПоШапке.Выбрать();
    
    Если ВыборкаПоШапкеДокумента.Следующий() Тогда
    
    Движения.СостояниеРаботниковОрганизаций.мВыполнятьСписаниеФактическогоОтпуска = Истина;
    
    //Надо позвать проверку заполнения реквизитов шапки
    ПроверитьЗаполнениеШапки(ВыборкаПоШапкеДокумента, Отказ, Заголовок);
    
    // Движения стоит добавлять, если в проведении еще не отказано (отказ = ложь)
    Если НЕ Отказ Тогда
    
    // Получение учетной политики по персоналу организации
    УчетнаяПолитикаПоПерсоналуОрганизации = глЗначениеПеременной("глУчетнаяПолитикаПоПерсоналуОрганизации");
    КонтрольКоличестваСтавокШтатногоРасписания	= ПроцедурыУправленияПерсоналом.ЗначениеУчетнойПолитикиПоПерсоналуОрганизации(УчетнаяПолитикаПоПерсоналуОрганизации, Организация, "КонтрольКоличестваСтавокШтатногоРасписания");
    
    РезультатЗапросаПоРаботники  = СформироватьЗапросПоРаботникиОрганизации(ВыборкаПоШапкеДокумента, КонтрольКоличестваСтавокШтатногоРасписания);
    ВыборкаПоРаботникиОрганизации = РезультатЗапросаПоРаботники.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    
    Пока ВыборкаПоРаботникиОрганизации.Следующий() Цикл
    
    // проверим очередную строку табличной части
    ПроверитьЗаполнениеСтрокиРаботникаОрганизации(ВыборкаПоШапкеДокумента, ВыборкаПоРаботникиОрганизации, Отказ, Заголовок);
    Если НЕ Отказ Тогда
    // Заполним записи в наборах записей регистров
    ДобавитьСтрокуВДвиженияПоРегистрамСведений(ВыборкаПоШапкеДокумента, ВыборкаПоРаботникиОрганизации);	КонецЕсли;
    КонецЦикла;
    
    КонецЕсли;КонецЕсли;
    ОбработкаКомментариев.ПоказатьСообщения();
    
    КонецПроцедуры // ОбработкаПроведения()// Процедура - обработчик события "ОбработкаЗаполнения" модуля объекта
    //
    Процедура ОбработкаЗаполнения(Основание)
    ТипОснования = ТипЗнч(Основание);
    Если ТипОснования = Тип("СправочникСсылка.СотрудникиОрганизаций") Тогда
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | СотрудникиОрганизаций.Ссылка КАК Сотрудник,
    | СотрудникиОрганизаций.Физлицо,
    | СотрудникиОрганизаций.Организация,
    | СотрудникиОрганизаций.ОбособленноеПодразделение
    |ИЗ
    | Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
    |ГДЕ
    | СотрудникиОрганизаций.Ссылка = &Сотрудник";
    Запрос.УстановитьПараметр("Сотрудник", Основание);
    Выборка = Запрос.Выполнить().Выбрать();
    
    Если Выборка.Следующий() Тогда
    Если Не Выборка.ОбособленноеПодразделение.Пустая() Тогда
    Организация = Выборка.ОбособленноеПодразделение;
    Иначе
    Организация = Выборка.Организация;
    КонецЕсли;
    
    НоваяСтрока = РаботникиОрганизации.Добавить();
    ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка);
    НоваяСтрока.ДатаНачала = ОбщегоНазначения.ПолучитьРабочуюДату();
    КонецЕсли;
    
    КонецЕсли;
    
    КонецПроцедуры // ОбработкаЗаполнения()Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    
    Если ОбменДанными.Загрузка Тогда
    Возврат;
    КонецЕсли;
    
    МассивТЧ = Новый Массив();
    МассивТЧ.Добавить(РаботникиОрганизации);
    
    КраткийСоставДокумента = ПроцедурыУправленияПерсоналом.ЗаполнитьКраткийСоставДокумента(МассивТЧ);
    
    ПроведениеРасчетов.ИсправлениеКадровогоДокументаПередЗаписью(Отказ, РежимЗаписи, РежимПроведения, ЭтотОбъект, мВосстанавливатьДвижения, мИсправляемыйДокумент, мСоответствиеДвижений);
    
    КонецПроцедуры // ПередЗаписью()
    Процедура ПриЗаписи(Отказ)
    
    Если ОбменДанными.Загрузка Тогда
    Возврат;
    КонецЕсли;
    
    ПроведениеРасчетов.ИсправлениеКадровогоДокументаПриЗаписи(Отказ, мВосстанавливатьДвижения, мИсправляемыйДокумент, мСоответствиеДвижений);
    
    КонецПроцедуры////////////////////////////////////////////////////////////////////////////////
    // ОПЕРАТОРЫ ОСНОВНОЙ ПРОГРАММЫ
    мДлинаСуток = 86400;
    мВосстанавливатьДвижения = Ложь;
    
    Заранее СПАСИБО!!!
  2. TopicStarter Overlay
    lutdan
    Offline

    lutdan

    Регистрация:
    29 ноя 2012
    Сообщения:
    12
    Симпатии:
    0
    Баллы:
    1
    1С 8.2, Конфигурация: Зарплата и кадры
  3. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    В ВПФ процедура печать() должна быть без параметров.
  4. TopicStarter Overlay
    lutdan
    Offline

    lutdan

    Регистрация:
    29 ноя 2012
    Сообщения:
    12
    Симпатии:
    0
    Баллы:
    1
    Функция Печать()

    КонецФункции // Печать

    Получается просто без всяких дополнительных запросов и функций?
  5. nbIpKuH_BaH9I
    Online

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.978
    Симпатии:
    397
    Баллы:
    104
    Функция Печать() в типовом варианте не имеет параметров. Именно она вызывается при попытки сформировать печатную форму.
    Вопрос не понятен. Что значит дополнительные запросы? Какие надо такие и пишите.
  6. TopicStarter Overlay
    lutdan
    Offline

    lutdan

    Регистрация:
    29 ноя 2012
    Сообщения:
    12
    Симпатии:
    0
    Баллы:
    1
    Немного отредактировал и открывается макет, но данных в нем нет.

    Код:
    Функция Печать() Экспорт
    
    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_КомандировкиОрганизации_Т10";
    ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
    
    // получаем данные для печати
    ВыборкаДляШапки   = СформироватьЗапросДляПечати("ПоРеквизитамДокумента").Выбрать();
    ВыборкаРаботники = СформироватьЗапросДляПечати("ПоТабличнойЧастиДокумента").Выбрать();
    // запоминаем области макета
    Макет = ПолучитьМакет("Т10_от_5_1_2004");
    ОбластьМакетаШапка = Макет.ПолучитьОбласть("Шапка");   // Шапка документа
    ОбластьМакетаПодвал = Макет.ПолучитьОбласть("Подвал");   // Подвал документа
    ОбластьМакета  = Макет.ПолучитьОбласть("Работник");  // строка работника
    ОбластьМакетаОтметки  = Макет.ПолучитьОбласть("Отметки");
    Оборот   = Макет.ПолучитьОбласть("Оборот"); // оборот удостоверения - отметки от прибытии-выбытии
    // ОборотОтметки  = Макет.ПолучитьОбласть("Отметки");
    // выводим данные о руководителях организации
    Если ВыборкаДляШапки.Следующий() Тогда
    ОбластьМакетаШапка.Параметры.Заполнить(ВыборкаДляШапки); // Шапка документа.
    ОбластьМакетаШапка.Параметры.НазваниеОрганизации = СокрЛП(ОбластьМакетаШапка.Параметры.НазваниеОрганизации);
    ОбластьМакетаПодвал.Параметры.Заполнить(ВыборкаДляШапки); // Для подвала.
    ОбластьМакета.Параметры.Заполнить(ВыборкаДляШапки); // область работника
    НомерДокДляПечати = ВыборкаДляШапки.НомерДок;
    КонецЕсли;
    НомерФормы = 0;
    ПечататьПостфикс = ВыборкаРаботники.Количество() > 1;
    // Начинаем формировать выходной документ
    Пока ВыборкаРаботники.Следующий() Цикл
    // Каждый приказ на отдельной странице.
    Если ТабДокумент.ВысотаТаблицы > 0 Тогда
    ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    КонецЕсли;
    // Шапка документа.
    Если ПечататьПостфикс Тогда
    НомерФормы = НомерФормы + 1;
    ОбластьМакетаШапка.Параметры.НомерДок =НомерДокДляПечати + "/" + НомерФормы
    КонецЕсли;
    ТабДокумент.Вывести(ОбластьМакетаШапка);
    // Данные по работнику.
    ОбластьМакета.Параметры.Заполнить(ВыборкаРаботники);
    
    //уберем из табельного номера префикс
    ОбластьМакета.Параметры.ТабельныйНомер = ВыборкаРаботники.ТабельныйНомер;
    
    // в этой форме продолжительность командировки указывается без времени в пути
    ОбластьМакета.Параметры.Продолжительность = ?(ЗначениеЗаполнено(ВыборкаРаботники.ДатаОкончания),Цел((ВыборкаРаботники.ДатаОкончания - ВыборкаРаботники.ДатаНачала + 1) / СсылкаНаОбъект.мДлинаСуток) + 1 - ВыборкаРаботники.ВремяНахожденияВПути,"");
    ТабДокумент.Вывести(ОбластьМакета);
    // Подвал документа.
    ТабДокумент.Вывести(ОбластьМакетаПодвал);
    ТабДокумент.Вывести(ОбластьМакетаОтметки);
    // выводим оборот удостоверения
    // ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    ТабДокумент.Вывести(Оборот);
    //ТабДокумент.Вывести(Оборот);
    //ТабДокумент.Вывести(Оборот);
    //ТабДокумент.Вывести(Оборот);
    ТабДокумент.Вывести(Оборот);
    ТабДокумент.Вывести(Оборот);
    КонецЦикла;
    // если не было ни одного работника - выводим пустой бланк
    Если ТабДокумент.ВысотаТаблицы = 0 Тогда
    ТабДокумент.Вывести(ОбластьМакетаШапка);
    ТабДокумент.Вывести(ОбластьМакета);
    ТабДокумент.Вывести(ОбластьМакетаПодвал);
    ТабДокумент.Вывести(ОбластьМакетаОтметки);
    // выводим оборот удостоверения
    ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    ТабДокумент.Вывести(Оборот);
    ТабДокумент.Вывести(Оборот);
    ТабДокумент.Вывести(Оборот);
    
    КонецЕсли;
    Возврат ТабДокумент;
    КонецФункции
    
    Как вытащить данные? в первом моем сообщении, как я понимаю, запрос ( функция СформироватьЗапросДляПечати(Режим)), который нужен для печати в стандартной конфигурации, но он не работает в модуле ВПФ. Каким образом поступить? Как вбить данные в макет
  7. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    а где эта функция расположена (функция СформироватьЗапросДляПечати(Режим))?
  8. TopicStarter Overlay
    lutdan
    Offline

    lutdan

    Регистрация:
    29 ноя 2012
    Сообщения:
    12
    Симпатии:
    0
    Баллы:
    1
    1 мое сообщение> Скрытый текст. Это сам код модуля для которого хочу сделать внешнюю печатную форму.
  9. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Перенесите эту функцию из модуля документа в ВПФ.
  10. TopicStarter Overlay
    lutdan
    Offline

    lutdan

    Регистрация:
    29 ноя 2012
    Сообщения:
    12
    Симпатии:
    0
    Баллы:
    1
    Как видите с первого сообщения я переносил. Но возможно функция и работает, но не выдает данные в макет
  11. VIPOS
    Offline

    VIPOS Опытный в 1С

    Регистрация:
    12 сен 2012
    Сообщения:
    565
    Симпатии:
    1
    Баллы:
    29
    Код:
    ТабДокумент.Показать()
  12. nbIpKuH_BaH9I
    Online

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.978
    Симпатии:
    397
    Баллы:
    104
    Зачем, это же ВПФ. Там все само происходит.
  13. TopicStarter Overlay
    lutdan
    Offline

    lutdan

    Регистрация:
    29 ноя 2012
    Сообщения:
    12
    Симпатии:
    0
    Баллы:
    1
    Каким-то чудом чуть подправил код и получилось. Спасибо за советы. Тему можно закрыть.
  14. nbIpKuH_BaH9I
    Online

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.978
    Симпатии:
    397
    Баллы:
    104
    С божьей помощью видать :))))
  15. VIPOS
    Offline

    VIPOS Опытный в 1С

    Регистрация:
    12 сен 2012
    Сообщения:
    565
    Симпатии:
    1
    Баллы:
    29
    Согласен, промаргал немного=)))

Поделиться этой страницей