Имя: Пароль:
 
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) да, и почему-то там если отчество заканчивается на "ы", то значит женский род. Что это за отчества на "ы"?
Ошибка? Это не ошибка, это системная функция.