Имя: Пароль:
1C
1С v8
Не работает процедура обработкаВыбора
0 skupidom
 
30.10.18
18:49
Процедура ДопДниБольничныхОтпусковСотрудниковОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)

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

Процедура КоманднаяПанель1ОчиститьТП(Кнопка)
    
     ДопДниБольничныхОтпусковСотрудников.Очистить();
    
КонецПроцедуры

Процедура ОткрытьФормуВыбораФЛ(Владелец, Ключ, ЗакрыватьПриВыборе) Экспорт
    
    СтандартнаяОбработка = Ложь;
    ЗакрыватьПриВыборе   = Ложь;
    
    Форма = Справочники.ФизическиеЛица.ПолучитьФормуВыбора(,,);
    Форма.ЗакрыватьПриВыборе = ЗакрыватьПриВыборе;
    Форма.Заголовок = "Выберите Физических лиц: ";
    Форма.Открыть();
    
КонецПроцедуры      

Процедура КоманднаяПанельПодбор(Кнопка)
    //ОткрытьФормуВыбораФЛ(ЭлементыФормы.ДопДниБольничныхОтпусковСотрудников,ЭтотОбъект,Ложь);
    ОткрытьФормуВыбораФЛ(ЭлементыФормы.ДопДниБольничныхОтпусковСотрудников,ЭтотОбъект,Ложь);
КонецПроцедуры
1 skupidom
 
30.10.18
18:50
из документа подбор множественный в таб. часть из справочника физ. лиц
2 skupidom
 
30.10.18
18:50
УПП 1.3
3 hhhh
 
30.10.18
19:24
(1) ПолучитьФормуВыбора(,,)

где тут владелец? одни запятые
4 skupidom
 
30.10.18
21:36
не зависимо
5 ДНН
 
30.10.18
21:39
(4) чтобы автоматически отрабатывала обработка выбора должен быть указан владелец, иначе нужно "оповестить о выборе"
6 skupidom
 
30.10.18
22:38
спасибо
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший