Имя: Пароль:
1C
1С v8
Помогите с обработкой) ЗУП 3.1
0 mixasik2005
 
13.07.18
14:39
Вот собственно Код.
#Область ТиповаяОбластьВПФ

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

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

Функция СведенияОВнешнейОбработке() Экспорт
    
    МассивНазначений     = Новый Массив;
    МассивНазначений.Добавить("Документ.ПереносОтпуска"); //Указываем документ к которому делаем внешнюю печ. форму
    
    ПараметрыРегистрации = Новый Структура;
    ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма"); //может быть – ПечатнаяФорма, ЗаполнениеОбъекта, ДополнительныйОтчет, СозданиеСвязанныхОбъектов…
    ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
    ПараметрыРегистрации.Вставить("Наименование", "ООО Визир Перенос Отпуска Приказ"); //имя под которым обработка будет зарегестрирована в справочнике внешних обработок
    ПараметрыРегистрации.Вставить("БезопасныйРежим", ЛОЖЬ);
    ПараметрыРегистрации.Вставить("Версия", "9,0");
    ПараметрыРегистрации.Вставить("Информация", "ООО Визир Приказ о переносе отпуска");
    ТаблицаКоманд = ПолучитьТаблицуКоманд();
    ДобавитьКоманду(ТаблицаКоманд, "ООО Визир Приказ о переносе отпуска",  "ПереносОтпускаПриказ", "ВызовСерверногоМетода", Истина, "ПечатьMXL");
    
    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
    
    Возврат ПараметрыРегистрации;
    
КонецФункции    // СведенияОВнешнейОбработке

Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    
    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ПереносОтпускаПриказ") Тогда
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "ПереносОтпускаПриказ", "Приказ о предоставлении дней дополнительного отдыха", ПечатьПриказ(МассивОбъектов[0], ОбъектыПечати, "ПереносОтпускаПриказ"));
    КонецЕсли;
    
КонецПроцедуры // Печать()
#КонецОбласти

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

//- фамилия, имя или отчество или всё сразу в нужном падеже
// !42! Осел + Соловей + Воробей + Немец + Кормилец + Силиец // !41! отчества оканчивающиеся на "ы" считаются женскими ?
// Функция для склонения одного слова!!! // z1 - само слово
// z2 - номер падежа // z3 - пол
// z4 - 1-склонять как фамилию, 2-имя, 3-отчество
Функция ПадежС(z1,Знач z2=2,Знач z3="*",z4=0) Экспорт
    z5=Найти(z1,"-");
    z6=?(z5=0,"","-"+ПадежС(Сред(z1,z5+1,СтрДлина(z1)-z5+1),z2,z3,z4));
    z1=НРег(?(z5=0,z1,Лев(z1,z5-1)));
    z7=Прав(z1,3);z8=Прав(z7,2);z9=Прав(z8,1);
    z5=СтрДлина(z1);
    za=Найти("ая ия ел ок яц ий па да ца ша ба та га ка",z8);
    zb=Найти("аеёийоуэюяжнгхкчшщ",Лев(z7,1));
    zc=Макс(z2,-z2);
    zd=?(za=4,5,Найти("айяь",z9));
    zd=?((zc=1)или(z9=".")или((z4=2)и(Найти("оиеу"+?(z3="ч","","бвгджзклмнпрстфхцчшщъ"),z9)>0))или((z4=1)и(Найти("мия мяэ лия кия жая лея",z7)>0)),9,?((zd=4)и(z3="ч"),2,?(z4=1,?(Найти("оеиую",z9)+Найти("их ых аа еа ёа иа оа уа ыа эа юа яа",z8)>0,9,?(z3<>"ч",?(za=1,7,?(z9="а",?(za>18,1,6),9)),?(((Найти("ой ый",z8)>0)и(z5>4)и(Прав(z1,4)<>"опой"))или((zb>10)и(za=16)),8,zd))),zd)));
    ze=Найти("лец вей бей дец пец мец нец рец вец аец иец ыец бер",z7);
    zf=?((zd=8)и(zc<>5),?((zb>15)или(Найти("жий ний",z7)>0),"е","о"),?(z1="лев","ьв",?((Найти("аеёийоуэюя",Сред(z1,z5-3 ,1))=0)и((zb>11)или(zb=0))и(ze<>45),"",?(za=7,"л",?(za=10,"к",?(za=13,"йц",?(ze=0,"",?(ze<12,"ь"+?(ze=1,"ц",""),?(ze<37,"ц",?(ze<49,"йц","р"))))))))));
    //  zf=?((zd=9)или((z4=3)и(z3="ы")),z1,Лев(z1,z5-?((zd>6)или(zf<>""),2,?(zd>0,1,0)))+zf+СокрП(Сред("а у а "+Сред("оыые",Найти("внч",z9)+1,1)+"ме "+?(Найти("гжкхш",Лев(z8,1))>0,"и","ы")+" е у ойе я ю я ем"+?(za=16,"и","е")+" и е ю ейе и и ь ьюи и и ю ейи ойойу ойойойойуюойойгомуго"+?((zf="е")или(za=16)или((zb>12)и(zb<16)),"и","ы")+"мм",10*zd+2*zc-3,2)));
    zf=?((zd=9)или((z4=3)и(Прав(z1,1)="ы")),z1,Лев(z1,z5-?((zd>6)или(zf<>""),2,?(zd>0,1,0)))+zf+СокрП(Сред("а у а "+Сред("оыые",Найти("внч",z9)+1,1)+"ме "+?(Найти("гжкхш",Лев(z8,1))>0,"и","ы")+" е у ойе я ю я ем"+?(za=16,"и","е")+" и е ю ейе и и ь ьюи и и ю ейи ойойу ойойойойуюойойгомуго"+?((zf="е")или(za=16)или((zb>12)и(zb<16)),"и","ы")+"мм",10*zd+2*zc-3,2)));
    Возврат ?(""=z1,"",?(z4>0,ВРег(Лев(zf,1))+?((z2<0)и(z4>1),".",Сред(zf,2)),zf)+z6);
КонецФункции

//_____________________________________________________________________________
// z1 - фамилия имя отчество например Железняков Юрий Юрьевич
// z2 - Падеж ( по  умолчанию = 2 - родительный)
// 2 - родительный  ( нет кого?    ) Железнякова Юрия Юрьевича      // 3 - дательный    ( кому?        ) Железнякову Юрию Юрьевичу  
// 4 - винительный  ( вижу кого?   ) Железнякова Юрия Юрьевича   // 5 - творительный ( кем?         ) Железняковым Юрием Юрьевичем    
// 6 - предложный   ( о ком?       ) Железнякове Юрии Юрьевиче  // Если задать Z2 меньше 0, то на выходе получим от -1=Железняков Ю. Ю. до -6=Железнякове Ю. Ю.
// z3 - параметр Пол может не указываться, но при наличии фамилий с  // инициалами точное определение пола невозможно, поэтому предлагается задавать пол этим
// параметром  1 - мужской 2 - женский   // ДЛЯ СКЛОНЕНИЯ ПРОФЕССИЙ ИСПОЛЬЗУЙТЕ ФУНКЦИЮ ПАДЕЖП И БУДЕТ ВАМ СЧАСТЬЕ!
// --------------------------------------------------------------------------------------- // Бибик Галушка Цой Николайчик Наталия Петровна Герценберг Кривошей Капица-Метелица
// Если Падеж(Фио ,1 ,3),       то на выходе получим Фамилия Имя Отчество и т.д. // Если Падеж(Фио ,1 ,3,"1" ),  то                   Фамилия  
// Если Падеж(Фио ,1 ,3,"2" ),  то                   Имя  // Если Падеж(Фио ,1 ,3,"3" ),  то                   Отчество  
// Если Падеж(Фио, 1 ,3,"12" ), то                   Фамилия Имя  // Если Падеж(Фио, 1 ,3,"23" ), то                   Имя Отчество  
// Если Падеж(Фио,-1 ,3,"231" ),то                   И. О. Фамилия  // Если Падеж(Фио,-1 ,3,"23" ), то                   И. О.  
// 10-11-2003 3-20
Функция Падеж(z1,z2=2,z3=3,z4="123",z5=1) Экспорт
    z6=Нрег(Прав(СокрП(z1),4));
    z7=Прав(z6,1);
    Возврат?(z5<4,Падеж(СокрЛП(СтрЗаменить(Сред(z1,Найти(z1+" "," ")+1),".",". ")),z2,z3,СтрЗаменить(z4,z5,ПадежС(?((z5=3)и(z7="ы"),z1,Лев(z1,Найти(z1+" "," ")-1)),z2,Сред("ча"+z7,?(z3=3,?(z6="оглы",1,?(z6="кызы",1,3)),z3),1),z5)+" "),z5+1),z4);
КонецФункции

Функция ПадежП(Знач z1,Знач z2,z3=0) Экспорт
    z1=СокрЛП(z1);z4=Найти(z1+" "," ")+1;z5=Лев(z1,z4-2);z6=Прав(z5,2);
    z7=?((Найти("ая ий ый",z6)>0)и(Найти("ющий нный",Сред(z1,z4-5,4))=0)и(z3=0),"1","*");
    Возврат НРег(?((z6="ая")или(Прав(z6,1)="а"),ПадежС(z5,z2,z7,1)+" "+ПадежС(Сред(z1,z4),z2),ПадежС(z5,z2,"ч",1)+?((z6="ий")и(Найти(z1," ")=0),""," "+?(z7="1",ПадежП(Сред(z1,z4),z2,Число(z7)),Сред(z1,z4)))));
КонецФункции



Дело в том что есть два графика отпуска. И эта обработка не правильно выдает номер графика.
1 evorle145
 
13.07.18
14:42
(0) и что?
2 hhhh
 
13.07.18
14:50
(0) ну всё правильно. Никак не задается здесь график. Поэтому они оба правильные. Вы не сообщили обработке, какой правильный, какой неправильный.
3 mixasik2005
 
13.07.18
14:52
А как же тогда это сделать. Я просто не профи в этом деле. Только можно сказать учусь, и это мое первое творение)))
4 hhhh
 
13.07.18
15:13
(3) но почему вы решили что номер графика неправильный? От этого надо плясать. То есть условие какое-то поставить в запросе, чтобы только правильные графики выбирались.
5 ptiz
 
13.07.18
15:17
(0) Господи, падежи-то зачем так делать?
6 hhhh
 
13.07.18
15:23
(5) да, и почему-то там если отчество заканчивается на "ы", то значит женский род. Что это за отчества на "ы"?
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn