Имя: Пароль:
1C
 
1C:Документооборот - программная установка даты контроля
↓ (Волшебник 01.03.2024 10:37)
0 Trezvy
 
01.03.24
10:39
На форме процесса исполнения требуется заполнять дату контроля в зависимости от значения даты исполнения: дата контроля должна принимать значение КонецДня от даты исполнения.
Делаю в общем модуле СрокиИсполненияПроцессовКлиентСервер, в функции ЗаполнитьПредставлениеСроковИсполненияВФорме(Форма), но как-то кривовато получается. В поле даты контроля не поле СрокОбработкиРезультатов, а СрокОбработкиРезультатовПредставление. Из-за этого проблемы.
Может у кого-то есть более изящное решение?

Процедура ЗаполнитьПредставлениеСроковИсполненияВФорме
Процедура ЗаполнитьПредставлениеСроковИсполненияВФорме(Форма) Экспорт
    
    Если Форма.Объект.Свойство("Исполнители") Тогда
        ЗаполнитьПредставлениеСроковВТаблицеИсполнителей(
            Форма.Объект.Исполнители,
            Форма.ИспользоватьДатуИВремяВСрокахЗадач,
            ЗначениеЗаполнено(Форма.ДатаОтсчетаДляРасчетаСроков));
    КонецЕсли;
    
    Если Форма.Объект.Свойство("Исполнитель") Тогда
        
        Если ЗначениеЗаполнено(Форма.ДатаОтсчетаДляРасчетаСроков) Тогда
            СрокИсполнения = Форма.Объект.СрокИсполнения;
        Иначе
            СрокИсполнения = Дата(1,1,1);
        КонецЕсли;
        
        ЗаполнитьПредставлениеСроковУчастника(
            Форма.СрокИсполненияПредставление,
            СрокИсполнения,
            Форма.Объект.СрокИсполненияДни,
            Форма.Объект.СрокИсполненияЧасы,
            Форма.Объект.СрокИсполненияМинуты,
            Форма.Объект.ВариантУстановкиСрокаИсполнения,
            Форма.ИспользоватьДатуИВремяВСрокахЗадач);
    КонецЕсли;                                                            
    
    Если Форма.Объект.Свойство("СрокОбработкиРезультатов") Тогда
        
        // +++++++++++++++++++++++++++++++++++++++++++++++++++
        //
        // было
        //
        //Если ЗначениеЗаполнено(Форма.ДатаОтсчетаДляРасчетаСроков) Тогда
        //    СрокОбработкиРезультатов = Форма.Объект.СрокОбработкиРезультатов;
        //Иначе
        //    СрокОбработкиРезультатов = Дата(1,1,1);
        //КонецЕсли;
        //
        //
        // для БП исполнения установим в сроке проверки дату = дате исполнения и время в 23:59:59
        Если Форма.ИмяФормы = "БизнесПроцесс.Исполнение.Форма.ФормаБизнесПроцесса" Тогда    
            Если Форма.СрокПроверкиВручную = Ложь И Форма.Объект.Свойство("Исполнители") И Форма.Объект.Исполнители.Количество()>0 Тогда
                // перебор всех исполнителей для определения максимального срока  
                // начальная максимальная дата - пустая
                МаксимальныйСрок = Дата(1,1,1);
                // все исполнители формы
                РеквизитИсполнители = Форма.Объект.Исполнители;
                // цикл по исполнителям
                Для Каждого СтрИсполнитель Из РеквизитИсполнители Цикл
                    Если ЗначениеЗаполнено(СтрИсполнитель.СрокИсполнения) Тогда
                        ТекущийСрокИсполнения = СтрИсполнитель.СрокИсполнения;
                    Иначе
                        ТекущийСрокИсполнения = Дата(1,1,1);
                    КонецЕсли;
                    // если срок исполнения у очередного исполнителя больше текущего максимального
                    Если ТекущийСрокИсполнения > МаксимальныйСрок Тогда
                        // делаем его максимальным сроком
                        МаксимальныйСрок = ТекущийСрокИсполнения;
                    КонецЕсли;
                КонецЦикла;
                
                //Если ЗначениеЗаполнено(Форма.Объект.Исполнители[0].СрокИсполнения) Тогда
                Если ЗначениеЗаполнено(МаксимальныйСрок) Тогда
                    // срок проверки устанавливаем на конец дня срока исполнения
                    Форма.Объект.СрокОбработкиРезультатов = КонецДня(МаксимальныйСрок);
                    СрокОбработкиРезультатов = КонецДня(МаксимальныйСрок);  
                    
                    ////////////
                    Форма.СрокОбработкиРезультатовПредставление = КонецДня(МаксимальныйСрок);
                    /////////////
                    
                    
                Иначе
                    // Форма.Объект.СрокОбработкиРезультатов = Дата(1,1,1);
                    СрокОбработкиРезультатов = Дата(1,1,1);
                КонецЕсли;
                    
                // для сохранение установленного значения срока проверки
                //Если ЗначениеЗаполнено(Форма.Объект.СрокОбработкиРезультатовПредставление) Тогда //И Форма.Объект.СрокОбработкиРезультатов <> СрокОбработкиРезультатов Тогда
                     // СрокОбработкиРезультатов = Форма.Объект.СрокОбработкиРезультатов;
                //КонецЕсли
                
            Иначе
                Если ЗначениеЗаполнено(Форма.ДатаОтсчетаДляРасчетаСроков) Тогда
                    СрокОбработкиРезультатов = Форма.Объект.СрокОбработкиРезультатов;
                Иначе
                    СрокОбработкиРезультатов = Дата(1,1,1);
                КонецЕсли;
            КонецЕсли;
        
        Иначе
            // для остальных БП порядок установки срока исполнения остаётся прежним
            Если ЗначениеЗаполнено(Форма.ДатаОтсчетаДляРасчетаСроков) Тогда
                СрокОбработкиРезультатов = Форма.Объект.СрокОбработкиРезультатов;
            Иначе
                СрокОбработкиРезультатов = Дата(1,1,1);
            КонецЕсли;
        КонецЕсли;    
        // ---------------------------------------------------




1С:Документооборот 2.1
1 Волшебник
 
29.02.24
14:55
много бесполезных комментариев, а вот конца процедуры так и нет
2 Trezvy
 
01.03.24
10:39
Процедура ЗаполнитьПредставлениеСроковИсполненияВФорме
// Заполняет представление сроков исполнения в карточке процесса/шаблона
//
// Параметры:
//  Форма     - ФормаКлиентскогоПриложения     - форма процесса
//
Процедура ЗаполнитьПредставлениеСроковИсполненияВФорме(Форма) Экспорт
    
    Если Форма.Объект.Свойство("Исполнители") Тогда
        ЗаполнитьПредставлениеСроковВТаблицеИсполнителей(
            Форма.Объект.Исполнители,
            Форма.ИспользоватьДатуИВремяВСрокахЗадач,
            ЗначениеЗаполнено(Форма.ДатаОтсчетаДляРасчетаСроков));
    КонецЕсли;
    
    Если Форма.Объект.Свойство("Исполнитель") Тогда
        
        Если ЗначениеЗаполнено(Форма.ДатаОтсчетаДляРасчетаСроков) Тогда
            СрокИсполнения = Форма.Объект.СрокИсполнения;
        Иначе
            СрокИсполнения = Дата(1,1,1);
        КонецЕсли;
        
        ЗаполнитьПредставлениеСроковУчастника(
            Форма.СрокИсполненияПредставление,
            СрокИсполнения,
            Форма.Объект.СрокИсполненияДни,
            Форма.Объект.СрокИсполненияЧасы,
            Форма.Объект.СрокИсполненияМинуты,
            Форма.Объект.ВариантУстановкиСрокаИсполнения,
            Форма.ИспользоватьДатуИВремяВСрокахЗадач);
    КонецЕсли;                                                            
    
    Если Форма.Объект.Свойство("СрокОбработкиРезультатов") Тогда
        
        // +++++++++++++++++++++++++++++++++++++++++++++++++++
        // было
        //
        //Если ЗначениеЗаполнено(Форма.ДатаОтсчетаДляРасчетаСроков) Тогда
        //    СрокОбработкиРезультатов = Форма.Объект.СрокОбработкиРезультатов;
        //Иначе
        //    СрокОбработкиРезультатов = Дата(1,1,1);
        //КонецЕсли;
        //
        //
        // для БП исполнения установим в сроке проверки дату = дате исполнения и время в 23:59:59
        Если Форма.ИмяФормы = "БизнесПроцесс.Исполнение.Форма.ФормаБизнесПроцесса" Тогда    
            Если Форма.СрокПроверкиВручную = Ложь И Форма.Объект.Свойство("Исполнители") И Форма.Объект.Исполнители.Количество()>0 Тогда
                МаксимальныйСрок = Дата(1,1,1);
                РеквизитИсполнители = Форма.Объект.Исполнители;
                Для Каждого СтрИсполнитель Из РеквизитИсполнители Цикл
                    Если ЗначениеЗаполнено(СтрИсполнитель.СрокИсполнения) Тогда
                        ТекущийСрокИсполнения = СтрИсполнитель.СрокИсполнения;
                    Иначе
                        ТекущийСрокИсполнения = Дата(1,1,1);
                    КонецЕсли;
                    Если ТекущийСрокИсполнения > МаксимальныйСрок Тогда
                        МаксимальныйСрок = ТекущийСрокИсполнения;
                    КонецЕсли;
                КонецЦикла;
                
                Если ЗначениеЗаполнено(МаксимальныйСрок) Тогда
                    Форма.Объект.СрокОбработкиРезультатов = КонецДня(МаксимальныйСрок);
                    СрокОбработкиРезультатов = КонецДня(МаксимальныйСрок);  
                    Форма.СрокОбработкиРезультатовПредставление = КонецДня(МаксимальныйСрок);
                Иначе
                    СрокОбработкиРезультатов = Дата(1,1,1);
                КонецЕсли;
            Иначе
                Если ЗначениеЗаполнено(Форма.ДатаОтсчетаДляРасчетаСроков) Тогда
                    СрокОбработкиРезультатов = Форма.Объект.СрокОбработкиРезультатов;
                Иначе
                    СрокОбработкиРезультатов = Дата(1,1,1);
                КонецЕсли;
            КонецЕсли;
        Иначе
            Если ЗначениеЗаполнено(Форма.ДатаОтсчетаДляРасчетаСроков) Тогда
                СрокОбработкиРезультатов = Форма.Объект.СрокОбработкиРезультатов;
            Иначе
                СрокОбработкиРезультатов = Дата(1,1,1);
            КонецЕсли;
        КонецЕсли;    
        // ---------------------------------------------------
        
        ЗаполнитьПредставлениеСроковУчастника(
        Форма.СрокОбработкиРезультатовПредставление,
        СрокОбработкиРезультатов,
        Форма.Объект.СрокОбработкиРезультатовДни,
        Форма.Объект.СрокОбработкиРезультатовЧасы,
        Форма.Объект.СрокОбработкиРезультатовМинуты,
        Форма.Объект.ВариантУстановкиСрокаОбработкиРезультатов,
        Форма.ИспользоватьДатуИВремяВСрокахЗадач);
    КонецЕсли;
    
    Если Форма.Объект.Свойство("СрокИсполненияПроцесса") Тогда
        
        Дата = Дата(1,1,1);
        Если ЗначениеЗаполнено(Форма.ДатаОтсчетаДляРасчетаСроков)
            И ЗначениеЗаполнено(Форма.Объект.СрокИсполненияПроцесса) Тогда
            
            Дата = Форма.Объект.СрокИсполненияПроцесса;
        КонецЕсли;
        
        Дни = 0;
        Часы = 0;
        Минуты = 0;
        
        СтруктураПоиска = Новый Структура;
        СтруктураПоиска.Вставить("СрокИсполненияПроцессаДни");
        
        ЗаполнитьЗначенияСвойств(СтруктураПоиска, Форма);
        
        Если СтруктураПоиска.СрокИсполненияПроцессаДни <> Неопределено Тогда
            Дни = Форма.СрокИсполненияПроцессаДни;
            Часы = Форма.СрокИсполненияПроцессаЧасы;
            Минуты = Форма.СрокИсполненияПроцессаМинуты;
        КонецЕсли;
        
        ЗаполнитьПредставлениеСрокаИсполненияПроцесса(
            Форма.СрокИсполненияПроцессаПредставление,
            Дата, Дни, Часы, Минуты,
            Форма.ИспользоватьДатуИВремяВСрокахЗадач);
        
    КонецЕсли;
    
КонецПроцедуры
3 Волшебник
 
01.03.24
07:37
Если нужно заполнять ДАТУ, так заполняйте ДАТУ (тип "Дата"), а не представление (тип "строка").
4 Trezvy
 
01.03.24
10:36
Верно, это лишнее:

Форма.СрокОбработкиРезультатовПредставление = КонецДня(МаксимальныйСрок);


Спасибо!
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn