Имя: Пароль:
1C
 
Обработка печать трудового договора ошибка
0 skynet7017
 
22.11.18
14:53
&НаКлиенте
Процедура ПриОткрытии(Отказ)
    
    Сотрудник=Параметры.ОбъектыНазначения[0];
    
    СтруктураНаПечать=ПечатьНаСервере(Сотрудник);
    Если СтруктураНаПечать<>Неопределено Тогда
        ИмяВрем = ПолучитьИмяВременногоФайла(".doc");
        СтруктураНаПечать.Записать(ИмяВрем);
        ЗапуститьПриложение(ИмяВрем,,,);
    КонецЕсли;
    ЭтаФорма.Закрыть();
КонецПроцедуры

&НаСервере
Функция ПечатьНаСервере(Сотрудник)
    Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет");
    КомОбъект  = Макет.Получить();
    Word = КомОбъект.Application;
    Док=Word.Documents();
    
    ИмяВремФайла=ПолучитьИмяВременногоФайла(".doc");
    Док.SaveAs(ИмяВремФайла);
    Док.Close(0);
    Попытка
        Word = Новый COMОбъект("Word.Application");
        Док = Word.Documents.Open(ИмяВремФайла);            
        Док.Activate();
        
        Файл = КаталогВременныхФайлов() + "Макет_ТД.doc";
        
        Структура = ПолучитьДанныеСотрудника(Сотрудник);
        
        Selection = Док.Content;
        ПустаяСтрока="                    ";
        Для Каждого Стр из Структура Цикл
            Selection = Док.Content;
            Если СокрЛП(Стр.Значение)<>"" Тогда
                Selection.Find.Execute("["+Стр.Ключ+"]",Истина,Истина,Ложь,,,Истина,,Истина,СокрЛП(Стр.Значение),2);
            Иначе
                Selection.Find.Execute("["+Стр.Ключ+"]",Истина,Истина,Ложь,,,Истина,,Истина,ПустаяСтрока,2);
            КонецЕсли;
        КонецЦикла;
        
        ИмяВрем = ПолучитьИмяВременногоФайла(".doc");
        Док.Save();
        Док.Close(0);
        Word.Quit();
        МойДокументВДвоичныхДанных = Новый ДвоичныеДанные(ИмяВремФайла);
        //Док.SaveAs(Файл);
        //ЗапуститьПриложение("""" + Файл + """");
        Возврат МойДокументВДвоичныхДанных;
    Исключение
        Сообщить(ОписаниеОшибки());
        Word.Quit();
    КонецПопытки;
КонецФункции

&НаСервере
Функция ПолучитьДанныеСотрудника(Сотрудник)
    
    Структура=Новый Структура;
    Структура.Вставить("НомерДоговора","");
    Структура.Вставить("ДатаДоговора","");
    Структура.Вставить("ФамилияИмяОтчество",СокрЛП(Сотрудник.ФизическоеЛицо.ФИО));
    Структура.Вставить("Подразделение","");
    Структура.Вставить("Должность","");
    Структура.Вставить("СтавкаПриНеполнойЗанятости","");
    Структура.Вставить("ДатаНачалаРаботы","");
    Структура.Вставить("ДатаОкончанияРаботы","");
    Структура.Вставить("КолМесяцевИсп","");
    Структура.Вставить("Оклад","");
    Структура.Вставить("ОкладПрописью","");
    Структура.Вставить("ФИО",СокрЛП(Сотрудник.ФизическоеЛицо.ФИО));
    Структура.Вставить("ПаспортныеДанные","");
    Структура.Вставить("АдресРегистрации","");
    Структура.Вставить("ДатаДоговораПолная","");
    Структура.Вставить("ЧислоМесяцГодДатаДоговора","");
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ОсновныеДанныеКонтрактаДоговораСотрудникаСрезПоследних.Сотрудник КАК Сотрудник,
        |    ОсновныеДанныеКонтрактаДоговораСотрудникаСрезПоследних.ДатаДоговораКонтракта КАК ДатаДоговораКонтракта,
        |    ОсновныеДанныеКонтрактаДоговораСотрудникаСрезПоследних.НомерДоговораКонтракта КАК НомерДоговораКонтракта,
        |    ОсновныеДанныеКонтрактаДоговораСотрудникаСрезПоследних.ДатаНачала КАК ДатаНачала,
        |    СведенияКонтрактаДоговораСотрудникаСрезПоследних.ДатаОкончания КАК ДатаОкончания
        |ИЗ
        |    РегистрСведений.ОсновныеДанныеКонтрактаДоговораСотрудника.СрезПоследних(, Сотрудник = &Сотрудник) КАК ОсновныеДанныеКонтрактаДоговораСотрудникаСрезПоследних
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияКонтрактаДоговораСотрудника.СрезПоследних(, Сотрудник = &Сотрудник) КАК СведенияКонтрактаДоговораСотрудникаСрезПоследних
        |        ПО ОсновныеДанныеКонтрактаДоговораСотрудникаСрезПоследних.Сотрудник = СведенияКонтрактаДоговораСотрудникаСрезПоследних.Сотрудник";
    Запрос.УстановитьПараметр("Сотрудник", Сотрудник);
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Структура.НомерДоговора = ВыборкаДетальныеЗаписи.НомерДоговораКонтракта;
        Структура.ДатаДоговора = Формат(ВыборкаДетальныеЗаписи.ДатаДоговораКонтракта,"ДФ=dd.MM.yyyy");
        Структура.ЧислоМесяцГодДатаДоговора = Формат(ВыборкаДетальныеЗаписи.ДатаДоговораКонтракта,"ДФ=dd.MM.yyyy");
        Структура.ДатаДоговораПолная = Формат(ВыборкаДетальныеЗаписи.ДатаДоговораКонтракта,"ДФ= '«dd» MMMM yyyy'");
        Структура.ДатаНачалаРаботы = Формат(ВыборкаДетальныеЗаписи.ДатаНачала,"ДФ=dd.MM.yyyy");
        Структура.ДатаОкончанияРаботы = Формат(ВыборкаДетальныеЗаписи.ДатаОкончания,"ДФ=dd.MM.yyyy");
    КонецЦикла;
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ДокументыФизическихЛицСрезПоследних.ВидДокумента КАК ВидДокумента,
        |    ДокументыФизическихЛицСрезПоследних.Серия КАК Серия,
        |    ДокументыФизическихЛицСрезПоследних.Номер КАК Номер,
        |    ДокументыФизическихЛицСрезПоследних.ДатаВыдачи КАК ДатаВыдачи,
        |    ДокументыФизическихЛицСрезПоследних.СрокДействия КАК СрокДействия,
        |    ДокументыФизическихЛицСрезПоследних.КемВыдан КАК КемВыдан,
        |    ДокументыФизическихЛицСрезПоследних.КодПодразделения КАК КодПодразделения
        |ИЗ
        |    РегистрСведений.ДокументыФизическихЛиц.СрезПоследних(
        |            ,
        |            Физлицо = &Физлицо
        |                И ВидДокумента = &ВидДокумента) КАК ДокументыФизическихЛицСрезПоследних";
    
    Запрос.УстановитьПараметр("ВидДокумента", Справочники.ВидыДокументовФизическихЛиц.ПаспортРФ);
    Запрос.УстановитьПараметр("Физлицо", Сотрудник.ФизическоеЛицо);
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Структура.ПаспортныеДанные = СокрЛП(ВыборкаДетальныеЗаписи.ВидДокумента)+" "+СокрЛП(ВыборкаДетальныеЗаписи.Серия)+" "+СокрЛП(ВыборкаДетальныеЗаписи.Номер)+" выдан  "+СокрЛП(ВыборкаДетальныеЗаписи.КемВыдан)+" "+Формат(ВыборкаДетальныеЗаписи.ДатаВыдачи,"ДФ=dd.MM.yyyy");
    КонецЦикла;
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ФизическиеЛицаКонтактнаяИнформация.Тип КАК Тип,
        |    ФизическиеЛицаКонтактнаяИнформация.Вид КАК Вид,
        |    ФизическиеЛицаКонтактнаяИнформация.Представление КАК Представление
        |ИЗ
        |    Справочник.ФизическиеЛица.КонтактнаяИнформация КАК ФизическиеЛицаКонтактнаяИнформация
        |ГДЕ
        |    ФизическиеЛицаКонтактнаяИнформация.Ссылка = &ФизЛицо
        |    И ФизическиеЛицаКонтактнаяИнформация.Тип = &Тип
        |    И ФизическиеЛицаКонтактнаяИнформация.Вид = &Вид";
    
    Запрос.УстановитьПараметр("Вид", Справочники.ВидыКонтактнойИнформации.АдресПоПропискеФизическиеЛица);
    Запрос.УстановитьПараметр("Тип", Перечисления.ТипыКонтактнойИнформации.Адрес);
    Запрос.УстановитьПараметр("ФизЛицо", Сотрудник.ФизическоеЛицо);
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Структура.АдресРегистрации = ВыборкаДетальныеЗаписи.Представление;
    КонецЦикла;
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    КадроваяИсторияСотрудниковСрезПоследних.Сотрудник КАК Сотрудник,
        |    КадроваяИсторияСотрудниковСрезПоследних.Организация КАК Организация,
        |    КадроваяИсторияСотрудниковСрезПоследних.Подразделение КАК Подразделение,
        |    КадроваяИсторияСотрудниковСрезПоследних.Должность КАК Должность,
        |    КадроваяИсторияСотрудниковСрезПоследних.КоличествоСтавок КАК КоличествоСтавок,
        |    КадроваяИсторияСотрудниковСрезПоследних.ВидДоговора КАК ВидДоговора
        |ИЗ
        |    РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних(, Сотрудник = &Сотрудник) КАК КадроваяИсторияСотрудниковСрезПоследних";
    
    Запрос.УстановитьПараметр("Сотрудник", Сотрудник);
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Структура.Подразделение = ВыборкаДетальныеЗаписи.Подразделение;
        Структура.Должность = ВыборкаДетальныеЗаписи.Должность;
        Структура.СтавкаПриНеполнойЗанятости = ВыборкаДетальныеЗаписи.КоличествоСтавок;
    КонецЦикла;
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    КадроваяИсторияСотрудниковСрезПоследних.Сотрудник КАК Сотрудник,
        |    КадроваяИсторияСотрудниковСрезПоследних.Регистратор КАК Регистратор,
        |    КадроваяИсторияСотрудниковСрезПоследних.ВидСобытия КАК ВидСобытия,
        |    КадроваяИсторияСотрудниковСрезПоследних.НомерСтроки КАК НомерСтроки
        |ИЗ
        |    РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних(, Сотрудник = &Сотрудник) КАК КадроваяИсторияСотрудниковСрезПоследних
        |ГДЕ
        |    КадроваяИсторияСотрудниковСрезПоследних.ВидСобытия = &ВидСобытия";
    
    Запрос.УстановитьПараметр("Сотрудник", Сотрудник);
    Запрос.УстановитьПараметр("ВидСобытия", Перечисления.ВидыКадровыхСобытий.Прием);
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Докум = ВыборкаДетальныеЗаписи.Регистратор;
        Если ТипЗнч(Докум)=Тип("ДокументСсылка.ПриемНаРаботу") Тогда
            Структура.КолМесяцевИсп = Докум.ДлительностьИспытательногоСрока;
        ИначеЕсли ТипЗнч(Докум)=Тип("ДокументСсылка.ПриемНаРаботуСписком") Тогда
            Структура.КолМесяцевИсп = Докум.Сотрудники[ВыборкаДетальныеЗаписи.НомерСтроки-1].ДлительностьИспытательногоСрока;
        КонецЕсли;
    КонецЦикла;
    
    Если Структура.КолМесяцевИсп="" Тогда
        Запрос = Новый Запрос;
        Запрос.Текст =
        "ВЫБРАТЬ
        |    ПриемНаРаботу.Сотрудник КАК Сотрудник,
        |    ПриемНаРаботу.ДлительностьИспытательногоСрока КАК ДлительностьИспытательногоСрока
        |ИЗ
        |    Документ.ПриемНаРаботу КАК ПриемНаРаботу
        |ГДЕ
        |    ПриемНаРаботу.Сотрудник = &Сотрудник
        |    И ПриемНаРаботу.Проведен = ИСТИНА
        |
        |ОБЪЕДИНИТЬ ВСЕ
        |
        |ВЫБРАТЬ
        |    ПриемНаРаботуСпискомСотрудники.Сотрудник,
        |    ПриемНаРаботуСпискомСотрудники.ДлительностьИспытательногоСрока
        |ИЗ
        |    Документ.ПриемНаРаботуСписком.Сотрудники КАК ПриемНаРаботуСпискомСотрудники
        |ГДЕ
        |    ПриемНаРаботуСпискомСотрудники.Сотрудник = &Сотрудник
        |    И ПриемНаРаботуСпискомСотрудники.Ссылка.Проведен = ИСТИНА";
        
        Запрос.УстановитьПараметр("Сотрудник", Сотрудник);
        РезультатЗапроса = Запрос.Выполнить();
        ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
            Структура.КолМесяцевИсп = ВыборкаДетальныеЗаписи.ДлительностьИспытательногоСрока;
        КонецЦикла;
    КонецЕсли;
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ВидыЗанятостиСотрудниковСрезПоследних.Сотрудник КАК Сотрудник,
        |    ВидыЗанятостиСотрудниковСрезПоследних.ВидЗанятости КАК ВидЗанятости
        |ИЗ
        |    РегистрСведений.ВидыЗанятостиСотрудников.СрезПоследних(, Сотрудник = &Сотрудник) КАК ВидыЗанятостиСотрудниковСрезПоследних";
    
    Запрос.УстановитьПараметр("Сотрудник", Сотрудник);
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Если ВыборкаДетальныеЗаписи.ВидЗанятости = Перечисления.ВидыЗанятости.ОсновноеМестоРаботы Тогда
            Структура.СтавкаПриНеполнойЗанятости = "";
        КонецЕсли;
    КонецЦикла;
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ПлановыеНачисленияСрезПоследних.Сотрудник КАК Сотрудник,
        |    ПлановыеНачисленияСрезПоследних.Начисление КАК Начисление,
        |    ПлановыеНачисленияСрезПоследних.Размер КАК Размер
        |ИЗ
        |    РегистрСведений.ПлановыеНачисления.СрезПоследних(, Сотрудник = &Сотрудник) КАК ПлановыеНачисленияСрезПоследних";
    
    Запрос.УстановитьПараметр("Сотрудник", Сотрудник);
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Если Найти(нрег(СокрЛП(ВыборкаДетальныеЗаписи.Начисление)),"оклад")>0 Тогда
            Структура.Оклад = Формат(ВыборкаДетальныеЗаписи.Размер,"ЧЦ=15; ЧДЦ=2");
            Структура.ОкладПрописью = ЧислоПрописью(ВыборкаДетальныеЗаписи.Размер);
        КонецЕсли;
    КонецЦикла;
    
    Возврат Структура;
    
КонецФункции

&НаСервере
Функция ПолучитьМакетНаСервере()
    ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
    СсылкаМакет = ОбработкаОбъект.ПолучитьМакет("Макет");
    Возврат СсылкаМакет;    
КонецФункции    

&НаСервере
Процедура ПриОткрытииНаСервере(Док, СписокЗамен, ФОтк)
    
    СписокЗамен = Новый Структура;
    //СписокЗамен.Вставить("ОргПродавец",                         СокрЛП(х.ОргПродавец));
    //СписокЗамен.Вставить("ПредставлениеПродавец",                 СокрЛП(ВыбраннаяСтрокаНаФормеПодпись));
    //СписокЗамен.Вставить("ФизЛицоПродавец",                        СокрЛП(ВыбраннаяСтрокаНаФормеНаименование));
    
КонецПроцедуры
1 skynet7017
 
22.11.18
14:53
Функция СведенияОВнешнейОбработке() Экспорт
  
  ПараметрыРегистрации = Новый Структура;
  ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");
  МассивНазначений = Новый Массив();
  МассивНазначений.Добавить("Справочник.Сотрудники");
  ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
  
  ПараметрыРегистрации.Вставить("Наименование", "Трудовой договор РИРЦ");
  ПараметрыРегистрации.Вставить("Версия", "1.0");
  ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
  ПараметрыРегистрации.Вставить("Информация", "Трудовой договор РИРЦ");
  
  ТаблицаКоманд = ПолучитьТаблицуКоманд();
  ДобавитьКоманду(ТаблицаКоманд,
          НСтр("ru = 'Трудовой договор РИРЦ'"),//для отображения пользователю
          "ВПФ_Договор",    //можно использовать для подмены поставляемой печатной формы
          "ОткрытиеФормы",  Использование.  Варианты: "ОткрытиеФормы", "ВызовКлиентскогоМетода", "ВызовСерверногоМетода"  
          Ложь,Показывать оповещение. Варианты Истина, Ложь
          );//Модификатор

  ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
  ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
  Возврат ПараметрыРегистрации;
КонецФункции

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

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

  Возврат Команды;

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

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

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

КонецПроцедуры
2 Mankubus
 
22.11.18
15:08
А где ошибка - то?
3 Полбатона
 
22.11.18
15:09
Автор, научись сначала правильно задавать свои вопросы. Твой говнокод тут никому не интересен
4 tesseract
 
22.11.18
15:10
(2) Читать не хочет. На сервере только ods.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn