Имя: Пароль:
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)Я вот тоже не понимаю этих претензий чувак по любому либо в мыле делал, либо у него еще опыта не хватало, а его кинули на серьезное дело.

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

Это больше, чем божественно!
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн