pozitr0n/1C-Project-Automation-of-the-Company

Very responsible and hard task!!! Create the last document processing

Closed this issue · 2 comments

Tasks:

  1. Add new fields "№ТрудовогоДоговора" and "ДатаТрудовогоДоговора" to the register of information "Контракты"
  2. Add the movings to the register of informations "Контракты"
  3. Add the field-form into the document ПеремещениеСотрудника
  4. Add the printing form to the document ПеремещениеСотрудника

Done.

#Если Клиент Тогда 

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

    АктивныйДокумент = ПолучитьМакет("ПФ_DOC_ПечатьДопСоглашения").Получить();
    ПечатьВВорд(СсылкаНаОбъект.ПолучитьОбъект(), АктивныйДокумент);

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

Процедура ПечатьВВорд(Объект, КомОбъект, НаПринтер = Ложь, Ворд = Неопределено) Экспорт  

    //Проверка документа
    Если Объект.ЭтоНовый() Тогда
        Предупреждение("Документ можно распечатать только после его записи");
        Возврат;
    ИначеЕсли Не УправлениеПользователями.РазрешитьПечатьНепроведенныхДокументов(Объект.Проведен) Тогда
        Предупреждение("Недостаточно полномочий для печати непроведенного документа!");
        Возврат;
    КонецЕсли; 

    Если Не РаботаСДиалогами.ПроверитьМодифицированность(Объект) Тогда
        Возврат;
    КонецЕсли;
    //------------------

    Попытка
        СоответствиеРеквизитов = Новый Соответствие;
        СоответствиеРеквизитов = ДополнитьРеквизитами_МН(Объект.Ссылка, СоответствиеРеквизитов);

        Для Каждого ЭлементСоответствия Из СоответствиеРеквизитов Цикл
            //Сообщить(Строка(ЭлементСоответствия.Ключ) + "    -   " + Строка(ЭлементСоответствия.Значение));
            ЗначениеВЗакладку(КомОбъект, ЭлементСоответствия.Ключ, ЭлементСоответствия.Значение);
        КонецЦикла;

        //Вывод документа
        КомОбъект.Application.Visible=1;       
    Исключение
        Сообщить(ОписаниеОшибки());   
    КонецПопытки;

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

Функция ДополнитьРеквизитами_МН(Документ, Результат)

    Перем НоваяСтрока;

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

    Запрос.УстановитьПараметр("ПараметрДата", Документ.ДатаПеремещения);
    Запрос.УстановитьПараметр("ФизЛицо", Документ.ФизЛицо);

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

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        НомерТрудовогоКонтракта = ВыборкаДетальныеЗаписи.НомерТрудовогоДоговора;
        ДатаТрудовогоКонтракта = ВыборкаДетальныеЗаписи.ДатаТрудовогоДоговора;
    КонецЦикла;

    Результат = Новый Соответствие;

    Результат.Вставить("НомерСоглашения", Документ.НомерДополнительногоСоглашения);
    Результат.Вставить("НомерСоглашения_Англ", Документ.НомерДополнительногоСоглашения);

    Результат.Вставить("ДатаТрудовогоКонтракта", Формат(ДатаТрудовогоКонтракта, "ДЛФ=DD"));
    Результат.Вставить("НомерТрудовогоКонтракта", НомерТрудовогоКонтракта);
    Результат.Вставить("ДатаТрудовогоКонтракта_Англ", Формат(ДатаТрудовогоКонтракта, "Л=en_US; ДЛФ=DD"));
    Результат.Вставить("НомерТрудовогоКонтракта_Англ", НомерТрудовогоКонтракта);

    Результат.Вставить("ДатаТрудовогоКонтракта_2", Формат(ДатаТрудовогоКонтракта, "ДЛФ=DD"));
    Результат.Вставить("НомерТрудовогоКонтракта_2", НомерТрудовогоКонтракта);
    Результат.Вставить("ДатаТрудовогоКонтракта_Англ_2", Формат(ДатаТрудовогоКонтракта, "Л=en_US; ДЛФ=DD"));
    Результат.Вставить("НомерТрудовогоКонтракта_Англ_2", НомерТрудовогоКонтракта);

    Результат.Вставить("ДатаПеремещения", Формат(Документ.ДатаПеремещения, "ДЛФ=DD"));
    Результат.Вставить("ДатаПеремещения_Англ", Формат(Документ.ДатаПеремещения, "Л=en_US; ДЛФ=DD"));

    Результат.Вставить("ДатаПеремещения_2", Формат(Документ.ДатаПеремещения, "ДЛФ=DD"));
    Результат.Вставить("ДатаПеремещения_Англ_2", Формат(Документ.ДатаПеремещения, "Л=en_US; ДЛФ=DD"));

    ИмяФизЛицаИменительныйПадеж = Документ.ФизЛицо;

    //ИмяФизЛица = ОбщегоНазначенияЛокализация.Падеж(Строка(ИмяФизЛицаИменительныйПадеж),4,"3","123");
    Фамилия  = " " + ВыделитьСлово(ИмяФизЛицаИменительныйПадеж);
    Имя      = " " + ВыделитьСлово(ИмяФизЛицаИменительныйПадеж);
    Отчество = " " + ВыделитьСлово(ИмяФизЛицаИменительныйПадеж);

    ФИО = Врег(Фамилия) + Имя + Отчество;

    Результат.Вставить("ИмяФизЛица", ФИО);
    Результат.Вставить("ИмяФИзЛица_Англ", Транслит(ФИО));
    Результат.Вставить("ИмяФизЛица_2", ФИО);
    Результат.Вставить("ИмяФИзЛица_Англ_2", Транслит(ФИО));

    Результат.Вставить("ЧТС", Документ.ЧасоваяСтавка);
    Результат.Вставить("ЧТС_Англ", Документ.ЧасоваяСтавка);
    Результат.Вставить("ЧТС_Транслит", ЧислоПрописью(Цел(Документ.ЧасоваяСтавка), "L=ru_RU; НД = Ложь; НП=Ложь"," , , , , , , , ,") + " копеек");

    //Результат.Вставить("ЧТС_Транслит_Англ", Транслит(ЧислоПрописью(Документ.ЧасоваяСтавка)));
    Результат.Вставить("ЧТС_Транслит_Англ", ЧислоПрописью(Цел(Документ.ЧасоваяСтавка), "L=en_EN; НД = Ложь; НП=Ложь"," , , , , , , , ,0") + " kopecks");
    Возврат Результат;

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

Процедура ЗначениеВЗакладку(Документ, Закладка, Значение) Экспорт 

    Попытка
        Документ.Bookmarks(СокрЛП(Закладка)).Select(); 
        Врем=СокрЛП(Значение);
        Документ.Application.Selection.Text = Врем;             
    Исключение
        //Сообщить("Не найдена закладка! "+Закладка,СтатусСообщения.Важное);    
        //Сообщить(ОписаниеОшибки(),СтатусСообщения.Важное);
    КонецПопытки;

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

Функция ВыделитьСлово(ИсходнаяСтрока)

    Буфер = СокрЛ(ИсходнаяСтрока);
    ПозицияПослПробела = Найти(Буфер, " ");

    Если ПозицияПослПробела = 0 Тогда
        ИсходнаяСтрока = "";
        Возврат Буфер;
    КонецЕсли;

    ВыделенноеСлово = СокрЛП(Лев(Буфер, ПозицияПослПробела));
    ИсходнаяСтрока = Сред(ИсходнаяСтрока, ПозицияПослПробела + 1);

    Возврат ВыделенноеСлово;

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

Функция Транслит(Вход) 
    Коды = Новый Соответствие;
    Коды.Вставить("ё","yo");
    Коды.Вставить("Ё","Yo");
    Нач = КодСимвола("А");
    Англ = "A" "B" "V" "G" "D" "E" "Zh" "Z" "I" "Y" "K" "L" "M" "N" "O" "P" "R" "S" "T" "U" "F" "Kh" "Ts" "Ch" "Sh" "Shch" "" "Y" "" "E" "Yu" "Ya" "a" "b" "v" "g" "d" "e" "zh" "z" "i" "y" "k" "l" "m" "n" "o" "p" "r" "s" "t" "u" "f" "kh" "ts" "ch" "sh" "shch" "" "y" "" "e" "yu" "ya";
    Для К = Нач по КодСимвола("я") Цикл
        Коды.Вставить(Символ(К), СтрПолучитьСтроку(Англ, К - Нач + 1));
    КонецЦикла;
    Выход = "";
    Для К=1 по СтрДлина(Вход) Цикл
        Бкв = Сред(Вход,К,1);
        Зн = Коды.Получить(Бкв);
        Выход = Выход + ?(Зн = Неопределено, Бкв, Зн);
    КонецЦикла;
    Возврат Выход;
КонецФункции

#КонецЕсли