|   |   | 
| 
 | ЗУП-3. Автоматическое создание регламентированной отчетности. | ☑ | ||
|---|---|---|---|---|
| 0
    
        Антиквар 27.04.18✎ 18:00 | 
        Всем привет!
 Требуется создавать некоторые регламентированные отчеты автоматически. Связано это с большим кол-вом обособленных подразделений, по которым должна быть отдельная форма отчета. Думал проблем особых не вызовет. В ЗУП 2.5 такое уже делал. Но столкнулся с проблемами. Возьмем к примеру отчетность по статистике П4. Есть объект Отчет.РегламентированныйОтчетСтатистикаФормаП4 У этого отчета есть форма ФормаОтчета2018Кв1 У этой формы есть экспортная процедура заполнения отчета и экспортная процедура записи отчета. Всё вроде просто: создаю форму, вызываю по очереди процедуру заполнения, потом процедуру записи. При необходимости форму открываю (если при открытии какие-то нужные переменные или действия выполняются). После записи форму закрываю. Но ежкин кот, 1С это всё реализовала через кучу различных оповещений (Новый ОписаниеОповещения()) и обработчиков ожидания. В результате, если вызывать процедуру заполнения отчета, а за ней процедуру записи отчета, то отчет запишется раньше, чем заполнится :) Как программно отловить этот момент, когда отчет заполнен и его уже можно записать? Если у кого есть опыт или мнение, поделитесь идеями. | |||
| 1
    
        piter3 27.04.18✎ 18:03 | 
        А кто будет отвечать головой за хреновые данные?Или мы это опускаем     | |||
| 2
    
        BigShmax 27.04.18✎ 18:09 | 
        (1)  тот кто её подаёт, главбух короче.     | |||
| 3
    
        fedoss 27.04.18✎ 18:10 | 
        Как простой вариант - запустить 1С /РежимОтладки, тогда все будет выполняться без фоновых заданий     | |||
| 4
    
        Антиквар 27.04.18✎ 19:47 | 
        (1) Почему данные хреновые? Я же хочу формировать отчетность стандартным функционалом 1С. Мне только нужно зациклить создание одного отчета. Да и выхода другого нет. Один отчет П4 формируется около 3 минут. Обособленных подразделений около 2 тысяч. Вручную не реально!
 (3) Причем тут фоновые задания, не понял? | |||
| 5
    
        piter3 27.04.18✎ 20:45 | 
        (4) При том,что вот у тебя учет идеальный?А отвечать кому?
 Фоновые очень даже причем,но у вас слишком экономят на кадрах. И кстати формы забудь как класс | |||
| 6
    
        Антиквар 27.04.18✎ 21:08 | 
        (5) Можешь пояснить?
 Учет конечно не идеальный. Но как это связано с автоматическим формированием П4? Если есть ошибки в учете, то и ручное формирование П4 будет с ошибками. Не могу понять, к чему клонишь. Фоновые задания всё-таки причем? Почему забыть формы, в каком контексте это понимать? | |||
| 7
    
        piter3 27.04.18✎ 21:11 | 
        (6) Заполниться фигней,так понятней?Вот,а если ты заполнишь авто то ты будешь отвечать.
 В том что тебе надо найти запрос для заполнения,уже не помню,что там в статистике,но вроде ничего сложного. А фоновые тебе нужны,что бы запустить параллельно формирование файлов или чего тебе нужно | |||
| 8
    
        piter3 27.04.18✎ 21:14 | 
        Или ты хочешь заставить своих бухов нажимать кнопки для выгрузки)     | |||
| 9
    
        Антиквар 27.04.18✎ 21:32 | 
        (7) А, понял тебя. Я буду отвечать, если при моем автоматическом заполнении заполнится фигнёй, отличной от фигни при ручном заполнении :)
 Запрос для заполнения я не хотел использовать. Я хотел вызывать стандартные процедуры заполнения, чтобы при изменении всех этих запросов фирмой 1С у меня всё работало. Ну т.е. типа вызвать процедуру ЗаполнитьОтчет(), затем процедуру СохранитьОтчет(). И не важно что внутри этих процедур, какой код и какие запросы. И процедуры то эти нашел, только вот отчет сохраняется быстрее чем заполняется, из-за системы оповещений и обработок ожидания. Думал и над тем, чтоб запрос найти по получению всех показателей П4. Нашел несколько версий. Последняя текущая версия самая неудобная, через схему компоновки, не разобрался пока. Я даже подумал забить на формирование отчетности, а сразу запросами получать показатели и формировать файлы. И сделается в 10 раз быстрее, и не хранить в базе ежемесячно 2 тысячи отчетов. Но минус - бухам вообще ничего не посмотреть, не проверить, да и постоянно отслеживать что там 1С могла в этих запросах поменять. | |||
| 10
    
        Антиквар 27.04.18✎ 21:35 | 
        (8) А зачем фоновые задания для выгрузки? Я планировал такую же обработку. Первая обработка формирует все отчеты: создает, заполняет и записывает. Дальше бухи смотрят всё ли так (смотреть навряд ли кто будет, но это уже не мои проблемы).
 Когда бухи дали отмашку, запускается вторая обработка, которая выгружает все отчеты. | |||
| 11
    
        Gucci76 27.04.18✎ 21:40 | 
        А если не запускать сохранение пока реквизит какой-то отчета не заполнен 
 Сделать цикл и в нем проверять ЗначениеЗаполнено() Но надо наверно сделать прерывание цикла при каких либо условиях | |||
| 12
    
        Антиквар 27.04.18✎ 21:41 | 
        Кстати, может кто-нибудь попробовать, сколько по времени формируется П4 по одному обособленному подразделению?
 У нас около 3 минут. Это жесть как долго. И дело не в объеме базы, база то новая, только перешли. И не в количестве сотрудников (брал даже маленькое обособленное подразделение, где всего 6 человек). Либо 1С так круто реализовала, либо что-то у нас не так, не знаю правда что может быть не так, с настройками серверов, железом,... Но в 2.5 как-то всё крутилось. Кому не лень, прикиньте пожалуйста ваше время, мне чтоб понимать, штатно это или нет. Просто создать отчет, выбрать обособленное подразделение и нажать Заполнить. Сколько по времени заполнять будет? | |||
| 13
    
        Антиквар 27.04.18✎ 21:45 | 
        (11) Спасибо, как вариант. Подумаю. Но если отчет формируется 3 минуты, я своим циклом не подвешу всё на хрен :)     | |||
| 14
    
        piter3 27.04.18✎ 22:00 | 
        3 минуты,а сколько сотров?Что-то много     | |||
| 15
    
        Антиквар 27.04.18✎ 22:16 | 
        (14) Сотров много, работающих в текущий момент тысяч 15 наверное. Но вот в данном тестируемом обособленном подразделении всего 6 человек.     | |||
| 16
    
        Антиквар 28.04.18✎ 11:02 | 
        ап     | |||
| 17
    
        ГдеСобака Зарыта 28.04.18✎ 11:24 | 
        Теоретически. Стандартные отчеты формируются фоновыми заданиями и возвращают результат в хранилище, адрес которого есть реквизит формы. Нужно запустить формирование и проверять обработчиком ожидания это хранилище, как будет готов результат запускать сохранение.     | |||
| 18
    
        ГдеСобака Зарыта 28.04.18✎ 11:34 | 
        Хотя не, там все иначе.. Но в любом случае формирование идет фоновым заданием. Вот его результат тебе и надо проверить.     | |||
| 19
    
        Антиквар 28.04.18✎ 12:35 | 
        (18) Жесть. Не понимаю как эти фоновые задания тут работают.
 Вижу в коде проверку, можно запускать в фоне или нельзя. Если база файловая или чего то там ещё, то нельзя. В итоге если нельзя, то вызывается процедура: ЗаполнитьОтчет(ИДОтчета, ИДРедакцииОтчета, ПараметрыОтчета, Контейнер) А если можно, то вызывается процедура: Процедура ЗаполнитьОтчетВФоне(ПараметрыОтчета, АдресХранилища) Экспорт ЗаполнитьОтчет(ПараметрыОтчета.ИДОтчета, ПараметрыОтчета.ИДРедакцииОтчета, ПараметрыОтчета.ПараметрыОтчета, ПараметрыОтчета.Контейнер); ПоместитьВоВременноеХранилище(ПараметрыОтчета.Контейнер, АдресХранилища); КонецПроцедуры Т.е. в случае фонового задания вызывается та же процедура ЗаполнитьОтчет(), но после неё ещё процедура ПоместитьВоВременноеХранилище() И где тут выполнение в фоне? | |||
| 20
    
        piter3 28.04.18✎ 12:43 | 
        РегламентированныйОтчетСтатистикаФормаП4 нельзя поискать по конфе?     | |||
| 21
    
        ГдеСобака Зарыта 28.04.18✎ 13:07 | 
        (19) Ну вот же у тебя как раз и АдресХранилища. Его и проверяй обработкой ожидания.     | |||
| 22
    
        ГдеСобака Зарыта 28.04.18✎ 13:14 | 
        Даже проще можно. Смотри Процедура Подключаемый_ПроверитьВыполнениеЗадания() в форме отчета.     | |||
| 23
    
        fedoss 28.04.18✎ 14:45 | 
        (19) Не знаю, какая у вас версия ЗУП, у меня в 3.1.6.6
 РегламентированныйОтчетСтатистикаФормаП4.ФормаОтчета2018Кв1 Функция ЗаполнитьАвтоНаСервере() ... РезультатВыполнения = ДлительныеОперации.ВыполнитьВФоне("РегламентированнаяОтчетностьПереопределяемый.ЗаполнитьОтчетВФоне", Новый Структура("ИДОтчета, ИДРедакцииОтчета, ПараметрыОтчета, Контейнер", ИДОтчета, ИДРедакцииОтчета, ПараметрыОтчета, Контейнер), ПараметрыВыполненияВФоне); ... Если РезультатВыполнения.ЗаданиеВыполнено Тогда ЗагрузитьПодготовленныеДанные(); КонецЕсли; Там запускается фоновое задание (если база не файловая и не РежимОтладки) Поэтому я и предложил как простой вариант запустить в режиме отладки. Так код выполняется без фонового задания и после вызова процедуры заполнения получается уже заполненный отчет. Да и вызывать даже не надо ничего, у формы есть параметр "СформироватьФормуОтчетаАвтоматически" А если с вызовом руками и фоновым заданием - можно перед вызовом заполнения поставить Модифицированность = Ложь и подключить обработчик ожидания с проверкой. После заполнения Модифицировнность устанавливается в Истина. А ЗаданиеВыполнено не очень хорошо, т.к. после выполнения фонового задания там происходит загрузка данных и расчет. | |||
| 24
    
        Антиквар 28.04.18✎ 15:15 | 
        (23) "Не знаю, какая у вас версия ЗУП, у меня в 3.1.6.6"
 У меня 3.1.4.171. Но процедура такая же, и код внутри такой же есть. "Поэтому я и предложил как простой вариант запустить в режиме отладки. Так код выполняется без фонового задания и после вызова процедуры заполнения получается уже заполненный отчет." В том и дело, что не получается. Я все эксперименты делаю на файловой базе сейчас. Рабочая база на SQL, а тестовая пока файловая. Тоже вижу уже проверки, что если база файловая, то запускать не в фоне. Но при этом всё-равно программа не останавливается на процедуре заполнения, идет дальше. Да и если интерактивно в 1С заполнять отчет, то при этом можно запросто нажать Записать или закрыть форму отчета, обработка заполнения не блокирует ничего. Я почему в самом начале и писал про оповещения, что видимо из-за них так. "Да и вызывать даже не надо ничего, у формы есть параметр "СформироватьФормуОтчетаАвтоматически"" Вчера пробовал, тоже не помогло. Причем в ПриСозданииНаСервере() вызывается процедура Инициализация(), в которой есть такой код: Если СтруктураРеквизитовФормы.СформироватьФормуОтчетаАвтоматически Тогда ЗаполнитьАвтоНаСервере(); КонецЕсли; Я записал в параметры формы СформироватьФормуОтчетаАвтоматически = Истина и программно открываю форму. По идее при её открытии она должна и заполниться. Но это не произошло, открылась пустая. Возможно в чем-то не разобрался. "А ЗаданиеВыполнено не очень хорошо, т.к. после выполнения фонового задания там происходит загрузка данных и расчет." Да, это так | |||
| 25
    
        fedoss 28.04.18✎ 15:33 | 
        Я попробовал не на клиент-серверной. С ключем /C РежимОтладки заполнение происходит не в фоне, на время заполнения все блокируется.
 А чем не нравится вариант с ОбработчикомОжидания и проверкой модифицированности? | |||
| 26
    
        ptiz 28.04.18✎ 15:51 | 
        (13) В файловой демо-базе отчет формируется больше 2х минут :)
 Самая долгая строка: ОбщийМодуль.СтатистикаПерсоналаРасширенный.Модуль 2 081 МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновки, 134,722673 сек 97,55% | |||
| 27
    
        fedoss 28.04.18✎ 16:06 | 
        Забавно. Оказывается у 1С есть своя функция СформироватьАвтоматическиРеглОтчет, которая запускает заполнение регл. отчета фоновым заданием и записывает его, не дожидаясь завершения :)     | |||
| 28
    
        Антиквар 28.04.18✎ 22:16 | 
        (25) "Я попробовал не на клиент-серверной. С ключем /C РежимОтладки заполнение происходит не в фоне, на время заполнения все блокируется."
 Странно, у меня не блокируется. Пробую в файловой базе, причем 1С запускаю из конфигуратора, сразу в режиме отладки запускается. "А чем не нравится вариант с ОбработчикомОжидания и проверкой модифицированности?" Вы пишете: "После заполнения Модифицировнность устанавливается в Истина." Пока не совсем ясно, где находится это "После заполнения". В каком месте кода ставить этот признак. Но идея вроде рабочая. | |||
| 29
    
        Антиквар 28.04.18✎ 22:19 | 
        (27) Ну прямо мой метод :)     | |||
| 30
    
        Антиквар 28.04.18✎ 22:24 | 
        (26) Спасибо за замеры. Теперь хоть понимаю, что он в принципе так долго работает и навряд ли что можно улучшить.
 У меня и в локальной файловой базе, и в серверной около 3 минут один отчет. И я так посчитал, около 4 суток будет по всем обособленным формировать :( Думаю надо попробовать выдернуть запрос, который получает все показатели и не создавать никакие отчеты в программе, сразу самому формировать файлы XML. Хотя судя из замеров уважаемого "ptiz" как раз выполнение запроса и занимает почти всё время :( | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |