Имя: Пароль:
1C
1С v8
Оцените красоту кода / пятничное.
🠗 (Волшебник 22.04.2016 13:34)
, ,
0 Feunoir
 
22.04.16
11:52
1. Это божественно! 60% (6)
2. Это больше, чем божественно! 40% (4)
Всего мнений: 10

Выношу на всеобщее обсуждение красоту и утончённость кода. Писал сотрудник франчайзи.


Процедура ЗаписьОбИстеченииСрокаДокументаТС() Экспорт
    
    ПравоНастройка = ПланыВидовХарактеристик.уатПраваИНастройки.ДниДоОкончанияДействияДокументовТС;    
    СписокПользователей = Новый Массив;
        
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Пользователи.Ссылка
        |ИЗ
        |    Справочник.Пользователи КАК Пользователи";
    
    РезультатЗапроса = Запрос.Выполнить();
    
    Выборка = РезультатЗапроса.Выбрать();
    
    Пока Выборка.Следующий()Цикл
         СписокПользователей.Добавить(Выборка.Ссылка);
    КонецЦикла;
    
    СписокДиспетчеров = ОтобратьДиспетчеровПоОрганизации(СписокПользователей);    
    
    ЗапросНастроек = Новый Запрос;
        ЗапросНастроек.Текст =
                     "ВЫБРАТЬ
                     |    уатПраваИНастройки.Объект,
                     |    уатПраваИНастройки.ПравоНастройка,
                     |    уатПраваИНастройки.Значение
                     |ИЗ
                     |    РегистрСведений.уатПраваИНастройки КАК уатПраваИНастройки
                     |ГДЕ
                     |    уатПраваИНастройки.ПравоНастройка = &ПравоНастройка";
                                         
        ЗапросНастроек.УстановитьПараметр("ПравоНастройка", ПравоНастройка);
        ТаблНастроек = ЗапросНастроек.Выполнить().Выгрузить();
                 
    ЗапросОрганизаций = Новый Запрос;
        ЗапросОрганизаций.Текст =
                    "ВЫБРАТЬ
                    |    Организации.Ссылка
                    |ИЗ
                    |    Справочник.Организации КАК Организации";
    ТаблОрганизаций = ЗапросОрганизаций.Выполнить().Выгрузить();
            Для Каждого СтрокаОрганизаций Из ТаблОрганизаций Цикл
                
                Организация = СтрокаОрганизаций.Ссылка;
                
                Для Каждого СтрокаНастроек из ТаблНастроек Цикл
                    Если Организация = СтрокаНастроек.Объект Тогда
                        ДатаОкончания = ТекущаяДата() + СтрокаНастроек.Значение * 86400;
                    КонецЕсли;
                КонецЦикла;
                
                ЗапросДокументов = Новый Запрос;
                    ЗапросДокументов.Текст =
                        "ВЫБРАТЬ
                        |    уатДокументыТС.ВидДокумента,
                        |    уатДокументыТС.Номер,
                        |    уатДокументыТС.ТС,
                        |    уатДокументыТС.ДатаОкончания,
                        |    уатДокументыТС.ТС.Организация
                        |ИЗ
                        |    РегистрСведений.уатДокументыТС КАК уатДокументыТС
                        |ГДЕ
                        |    уатДокументыТС.ДатаОкончания <= &ДатаОкончания";
                    
                    ЗапросДокументов.УстановитьПараметр("ДатаОкончания", ДатаОкончания);    
                    ТаблДокументов = ЗапросДокументов.Выполнить().Выгрузить();
                                        
                    Для Каждого Диспетчер из СписокДиспетчеров Цикл
                        Индекс = 0;
                        
                    ЗапросГруппы = Новый Запрос;
                        ЗапросГруппы.Текст =  
                                    "ВЫБРАТЬ
                                    |    ГруппыПользователей.Ссылка
                                    |ИЗ
                                    |    Справочник.ГруппыПользователей КАК ГруппыПользователей";
                        Группы = ЗапросГруппы.Выполнить().Выгрузить();
                        МассивГрупп = Новый Массив;
                        Для каждого СтрокаГруппы из Группы Цикл
                                
                                Для каждого Стр из СтрокаГруппы.Ссылка.Состав Цикл
                                Если Стр.Пользователь = Диспетчер Тогда
                                    МассивГрупп.Добавить(СтрокаГруппы);
                                КонецЕсли;
                            КонецЦикла;    
                                
                        КонецЦикла;
                            
                        //Выбираем записи из регистра с группами в которые входит выбранный пользователь
                        ЗапросДоступа = Новый Запрос;
                        ЗапросДоступа.Текст =        
                                    "ВЫБРАТЬ
                                    |    ордс_НастройкаПравДоступаПользователей.ОбъектДоступа
                                       |ИЗ
                                    |    РегистрСведений.ордс_НастройкаПравДоступаПользователей КАК ордс_НастройкаПравДоступаПользователей
                                    |ГДЕ
                                    |    ордс_НастройкаПравДоступаПользователей.Пользователь В (&МассивГрупп)";
                              
                        ЗапросДоступа.УстановитьПараметр("МассивГрупп", МассивГрупп);
                        РезультатДоступа = ЗапросДоступа.Выполнить().Выгрузить();                            
                        МассивДоступа = Новый Массив;
                        Для Каждого СтрокаДоступа Из РезультатДоступа Цикл
                            МассивДоступа.Добавить(СтрокаДоступа.ОбъектДоступа);
                        КонецЦикла;
                        
                        Для Каждого СтрокаДокументов Из ТаблДокументов Цикл
                            Для Каждого ЭлементДоступа Из МассивДоступа Цикл
                                Если ЭлементДоступа = СтрокаДокументов.ТС.Организация И
                                Организация = СтрокаДокументов.ТС.Организация Тогда
                                МенеджерЗаписи = РегистрыСведений.НапоминанияПользователя.СоздатьМенеджерЗаписи();
                                МенеджерЗаписи.Пользователь = Диспетчер;
                                МенеджерЗаписи.ВремяСобытия = ТекущаяДата() + Индекс;
                                МенеджерЗаписи.СрокНапоминания = ТекущаяДата() + Индекс;
                                МенеджерЗаписи.Описание = "Внимание! " + Строка(СтрокаДокументов.ДатаОкончания) +
                                    " Истекает срок документа " + Строка(СтрокаДокументов.ВидДокумента) +  
                                    " № " + Строка(СтрокаДокументов.Номер) +
                                    " ТС " + Строка(СтрокаДокументов.ТС);
                                МенеджерЗаписи.Записать();
                                Индекс = Индекс + 1;
                            КонецЕсли;
                        КонецЦикла;
                    КонецЦикла;
                КонецЦикла;
            КонецЦикла;
    
КонецПроцедуры    
46 nordbox
 
22.04.16
12:47

Это больше, чем божественно!
48 lubitelxml
 
22.04.16
12:50
вот

Это больше, чем божественно!
55 1Снеговик
 
гуру
22.04.16
13:31
Если работает, какие претензии?

З.Ы. Я из франча :)

Это больше, чем божественно!
57 Starhan
 
22.04.16
13:38
(55)Я вот тоже не понимаю этих претензий чувак по любому либо в мыле делал, либо у него еще опыта не хватало, а его кинули на серьезное дело.

Вот если бы это был всеми уважаемый дядька про кодер, тогда понятно.

Это больше, чем божественно!