Ну что делает в этом случае программист? Если не получается решить проблему «с наскока», то они либо откладывается в долгий ящик, либо решается как-то другим путем. Например, поставили закрытие месяца на ночь и на сервере, и вроде бы проблема смогла отложиться до следующего месяца.
Но в следующем месяце опять повторилось то же самое…
И вот через еще один месяц стали поступать еще новые жалобы, но уже на документ «ОчетДальвальцеМеждуОрганизациями» и опять на очень долгое формирование.
Как это выражалось? Сотрудник выполнял некоторую последовательность команд «Финансовый результат и контроллинг» - «Отчеты давальцу к оформлению».
И появлялась форма «Отчеты давальцу к оформлению».
После выбора «Переработчика» и/или «Давальца» и нажатия на кнопку «Оформить» происходило зависание программы.
Тут уж сверху прилетело конкретно. Отложить работу с этим документом на ночь уже не получалось. Он был нужен здесь и сейчас. Так что пришлось заняться данным вопросом в плотную.
Начал с анализа данного документа и отладчиком проходить по коду. После чего обнаружилось, что сбор данных происходит в процессе «собирания» запроса.
В модуле менеджера документа есть
Функция ЗапросОстаткиОтчетовКОформлению(Параметры) Экспорт
И если закомментировать строку, то проблема исчезает. Всё начинает формировать очень быстро.
| МАКСИМУМ(НАЧАЛОПЕРИОДА(ЕСТЬNULL(ТоварыОтчетовДавальцу.Ссылка.Дата, ДАТАВРЕМЯ(1,1,1)),
МЕСЯЦ)) КАК МесяцКрайнегоОтчета
Копаем дальше… Начинаем анализировать данный вопрос и натыкаемся вот на такую строку.
ПО СторноПартии.СторнируемыйДокумент = ОтчетыДавальцу.Ссылка
И вот тут возникает вопрос, а точно ли там должно быть «СторноПартии», а не «СторноОтчета» во втором случае? В первом случае такого вопроса точно не возникает.
В расширении создаю копию этой функции и пишу в ней следующий код:
&Вместо("ЗапросОстаткиОтчетовКОформлению")
Функция Расш1_ЗапросОстаткиОтчетовКОформлению(Параметры)
Результат = ПродолжитьВызов(Параметры);
Результат.Текст = СтрЗаменить(Результат.Текст, "ПО СторноПартии.СторнируемыйДокумент = ОтчетыДавальцу.Ссылка", "ПО СторноОтчета.СторнируемыйДокумент = ОтчетыДавальцу.Ссылка");
Возврат Результат;
КонецФункции
Затем сохраняем и запускаем базы в режиме «1С:Предприятие». Проверяю. Всё работает очень даже быстро. С этим видом документов проблема решена!
Возвращаемся к нашему закрытию месяца. Начинаем проверять и убеждаемся, что и тут долгое формирование закрытия месяца исчезло.
Получается, что одним выстрелом убили сразу «двух зайцев».
Так как на работе, конфигурация ERP довольно таки «древняя», решил скачать самую свежую версию и посмотреть, а не исправлено ли это там? Хотя это надо было сделать еще в самом начале, ведь иногда некоторые ошибки решаются именно таким образом.
Но после скачиванию новой версии.
Обнаружил, что там так ничего в запросе и не исправлено. Так что, даже после обновления базы на новый релиз, это расширение будет продолжать работать дальше.
Вступайте в нашу телеграмм-группу Инфостарт