Ускорение работы 1С: Пересчет итогов или эксперимент работоспособности

12.05.26

База данных - HighLoad оптимизация

Практическое применение пересчета итогов. Сравнение пересчета итогов из предприятия и пересчета из конфигурации.

Введение


Думаю, проблема «тормозов» в 1С знакома каждому, кто хоть раз работал в бухгалтерии или на производстве. Это какая-то эпидемия: на каждом предприятии, где я бывал, обязательно есть жалобы на быстродействие. И вот совсем недавно и до нас добралась эта беда.

Поступила конкретная жалоба от главбуха: документы стали перепроводиться «по чайной ложке» — особенно в период закрытия месяца. 

Закрытие месяца в бухгалтерии превратилось в квест: нажимаешь кнопку и идёшь пить чай, потому что «летает» там только время, потраченное впустую.  

Пришлось включать голову и думать, что можно сделать.

Написали на листе все возможные варианты по ускорению.

Из них были такие варианты как:

  • Оптимизация кода - (Изменение "тяжелого" кода при проведении документов)
  • Пересчет итогов - (Чистка регистров итогов. Может происходить из предприятия и конфигурации)
  • Оптимизация базы данных (не бралась как вариант оптимизации так как на предприятии происходит регулярно)     

Ну вот и получилось что оптимизацию базы данных отбросили, так как DBA сами регулярно ее оптимизируют, оптимизация кода заняла бы существенное количество времени. Решено было сначала провести эксперимент с пересчетом итогов.

Так и начали с пересчета итогов. Восстановили рабочую базу в тестовую базу на текущее состояние рабочей базы и начали эксперименты по оптимизации работы пользователей. 


Эксперименты над пересчетом итогов (до пересчета итогов)


После восстановления базы можно было бы, конечно, сразу попробовать протестировать пересчет итогов из предприятия 1С, но, как было известно, такой пересчет каждый месяц происходит при закрытии месяца, но и также регулярно выполняется вручную.

Поэтому сразу мы начали эксперимент с конфигурации.

Для достоверности эксперимента, чтобы понять, действительно ли пересчет итогов из конфигурации сможет ускорить проведение документов, решили сделать так:

Далее будет описана последовательность действий эксперимента.

Цель: Доказать эмпирически, что способ оптимизации для "Пересчет Итогов" из конфигурации сможет ускорить работу пользователей при закрытии месяца.

В самом начале что нам необходимо сделать так:

  1. Выбрать "пучок" документов, которые имеют самое долгое по времени проведение (в моем случае - это реализация).
  2. Найти самый оптимальный способ для фиксации времени проведения документов. При этом фиксировать нужно время для каждой итерации проведения.

То есть проводим "пучок" документов, фиксируем время, потом проводим еще раз этот же пучок и также фиксируем его время, так делаем минимум 3 раза и находим среднее время для каждой итерации проведения. Так нужно чтобы отбросить то что не относится к записи в регистр.

Для проведения и фиксации времени, есть два известные мне способа: с помощью кода какой-нибудь внешней обработки или можно воспользоваться замером времени.

Замером времени мы не стали пользоваться, так как кто-то сказал что для использования замера времени из конфигуратора 1С также может тратить ресурсы.    

Таким образом проведение и фиксация времени проводились с помощью внешней обработки, с кодом:

	ДатаНачалаЗамера = ТекущаяДатаСеанса();
	РеализацииДляПроверки = Новый Запрос;
	РеализацииДляПроверки.Текст = "ВЫБРАТЬ
	                              |	РеализацияТоваровУслуг.Ссылка КАК Ссылка
	                              |ИЗ
	                              |	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
	                              |ГДЕ
	                              |	РеализацияТоваровУслуг.Дата МЕЖДУ &ДатаНачала И &ДатаКонца
	                              |	И РеализацияТоваровУслуг.Проведен";
	РеализацииДляПроверки.УстановитьПараметр("ДатаНачала", Период.ДатаНачала);
	РеализацииДляПроверки.УстановитьПараметр("ДатаКонца",  Период.ДатаОкончания);    
	
	ТЗ = РеализацииДляПроверки.Выполнить().Выгрузить();
	Для каждого Строка Из ТЗ Цикл
		Реализация = Строка.Ссылка.ПолучитьОбъект();	
	    Реализация.Записать(РежимЗаписиДокумента.Проведение);
	КонецЦикла;
	
	ДатаКонцаЗамера = ТекущаяДатаСеанса();
	
	Сообщить("Начало: " + ДатаНачалаЗамера);
	Сообщить("Конец: " + ДатаКонцаЗамера);

Что мы делаем с помощью кода:

Зафиксируем время начала выполнения проверки

ДатаНачалаЗамера = ТекущаяДатаСеанса();

Выберем "пучок" документов с помощью запроса

	РеализацииДляПроверки = Новый Запрос;
	РеализацииДляПроверки.Текст = "ВЫБРАТЬ
	                              |	РеализацияТоваровУслуг.Ссылка КАК Ссылка
	                              |ИЗ
	                              |	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
	                              |ГДЕ
	                              |	РеализацияТоваровУслуг.Дата МЕЖДУ &ДатаНачала И &ДатаКонца
	                              |	И РеализацияТоваровУслуг.Проведен";

На форме есть реквизит "период" с типом "Стандартная дата". С помощью него устанавливаем ограничение выборки документов, вводим параметры.

	РеализацииДляПроверки.УстановитьПараметр("ДатаНачала", Период.ДатаНачала);
	РеализацииДляПроверки.УстановитьПараметр("ДатаКонца",  Период.ДатаОкончания);    

И выполняем запрос.

ТЗ = РеализацииДляПроверки.Выполнить().Выгрузить();

Теперь "пробегаемся" по полученным документам и проводим их по очереди.

	Для каждого Строка Из ТЗ Цикл
		Реализация = Строка.Ссылка.ПолучитьОбъект();	
	    Реализация.Записать(РежимЗаписиДокумента.Проведение);
	КонецЦикла;

Операции закончены, нужно получить время окончания их выполнения.

ДатаКонцаЗамера = ТекущаяДатаСеанса();

Далее просто выводим начало и конец выполнения операций.

	Сообщить("Начало: " + ДатаНачалаЗамера);
	Сообщить("Конец: " + ДатаКонцаЗамера);

Теперь после получения данных о перепроведении документов до пересчета итогов, нужно выполнить пересчет итогов.  

Пересчет итогов в предприятии выполняется с помощью обработки "Управление итогами", но чтобы выполнить через конфигуратор нужно выполнить действия ниже.

Чтобы пересчет итогов выполнить через конфигуратор, нужно в конфигураторе зайти в раздел "администрирование" и нажать пункт "Тестирование и исправление". 

 

 

Высветится окно, в котором платформа будет просить сохранить резервную копию. Здесь сама платформа предупреждает вас о том что действия происходящие в "Тестировании и исправлении" должны быть обдуманными, поэтому если нужно, сделайте сохранение пользовательских данных обязательно, если на сервере не делается резервная копия. Так как в некоторых случаях при выполнении действий в "тестировании и исправлении" результат может привести к неисправимым ошибкам.

 

 

После сохранения пользовательских данных (если делали) нажимаем "Продолжить".  И перед  нами откроется окно с настройками "тестирования и исправления", нам нужен только пересчет итогов, поэтому обратимся к списку посередине.

Здесь отключаем все галки кроме галки "Пересчет итогов", она должна быть включена. Так мы установили "Пересчет итогов" и отключили все лишнее.

 

 

После того как мы все сделали, нажимаем кнопку "Выполнить".

Теперь ждем выполнение пересчета итогов и продолжаем эксперимент. Для выполнения операции пересчета мне пришлось ждать примерно 30 минут, время выполнения зависит от того насколько давно чистились итоги. 


Что должно происходить при пересчете итогов?


При выполнении действия пересчета итогов, в базе данных в таблицах, которые принадлежат регистрам и которые содержат их итоги очищаются записи, таблица становится абсолютно пустой. Такое необходимо делать для того чтобы очистить таблицу итогов от старых неактуальных записей и сократить выборку данных при взаимодействии с этими таблицами, например получение данных и перезапись. А как известно при сокращении выборки, сокращается время выполнения запроса.


Откуда берутся неактуальные записи?


При проведении документа в этих таблицах создаются записи с проводками (итогами) этого документа. При повторном проведении записи с итогами в этих таблицах перезаписываются. Но если документ был распроведен, запись в таблице никуда не исчезнет. Подобное явление связано с тем, что создание записи для базы данных происходит тяжелее, чем перезапись уже существующей записи. Со временем таких записей становится очень много и многие из них становятся неактуальными, так как предприятие функционирует, а таблица не чистится, время выполнения запросов к этой таблице растет. Поэтому пересчет итогов важен для каждого предприятия работающего с 1С и лучше проводить его регулярно, чтобы не допускать замедления работы пользователей.


Продолжим эксперимент после пересчета итогов


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

Но не будем торопить события, здесь необходимо обратить внимание на то что было описано выше:

Создание записи для базы данных происходит тяжелее, чем перезапись уже существующей записи.

Что происходит во время пересчета итогов? Мы очищаем таблицу итогов. А значит сразу после пересчета она пустая и эксперимент не будет достоверным если мы зачтем первое перепроведение в расчеты.

Выполняем первое перепроведение после пересчета итогов. Далее еще три раза перепроводим.

В результате получилась такая таблица. (Результаты округлены в меньшую сторону)

Итоговая таблица расчетов

 

Номер итерации Время проведения до пересчета (мин) Время первого перепроведения после пересчета Время проведения после пересчета (мин.)    
1 13 13 12    
2 14   11    
3 15   10    
Среднее 14 -\\- 11    

Выводы проведенного эксперимента


Эксперимент использовал проведение примерно в 10 документов. Результат эксперимента дал очевидный ответ в ускорении 1С.

Пересчет итогов из конфигурации дал результат прироста скорости примерно в 3 минуты. Если рассматривать это в контексте закрытия месяца, время выполнения может сократится в часы, так как количество перепроводимых документов при закрытии месяца намного больше.           

Выводы для себя: раньше была уверенность, что пересчет итогов из предприятия и конфигурации - это одно и то же действие, но теперь есть сомнения, так как пересчет из предприятия не давал таких результатов как пересчет из конфигурации. 

Вступайте в нашу телеграмм-группу Инфостарт

Оптимизация тестирование и исправление пересчет итогов

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

HighLoad оптимизация Программист 1С 8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Использование оператора «В» для полей или данных составного типа (например, Регистратор) может приводить к неочевидным проблемам.

10.11.2025    8187    ivanov660    48    

53

HighLoad оптимизация Программист 1С:Предприятие 8 1C:ERP Бесплатно (free)

Приведем примеры использования различных в динамических списках и посмотрим, почему это плохо.

18.02.2025    10089    ivanov660    39    

61

HighLoad оптимизация Технологический журнал Системный администратор Программист Бесплатно (free)

Обсудим поиск и разбор причин длительных серверных вызовов CALL, SCALL.

24.06.2024    12663    ivanov660    13    

64

HighLoad оптимизация Программист 1С:Предприятие 8 Бесплатно (free)

Метод очень медленно работает, когда параметр приемник содержит намного меньше свойств, чем источник.

06.06.2024    19184    Evg-Lylyk    73    

46

HighLoad оптимизация Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Анализ простого плана запроса. Оптимизация нагрузки на ЦП сервера СУБД используя типовые индексы.

13.03.2024    9401    spyke    29    

54

HighLoad оптимизация Программист 1С:Предприятие 8 Бесплатно (free)

Оказывается, в типовых конфигурациях 1С есть, что улучшить!

13.03.2024    12999    vasilev2015    22    

47
Комментарии
Подписаться на ответы Инфостарт бот МАКС МАКС бот Сортировка: Древо развёрнутое
Свернуть все
1. paulwist 12.05.26 09:08 Сейчас в теме
Подобное явление связано с тем, что создание записи для базы данных происходит тяжелее, чем перезапись уже существующей записи.


Поясните свою мысль, в чём конкретно выражается "тяжелее", в каких "попугаях" ??
3. SVLong 49 12.05.26 09:56 Сейчас в теме
(1)
При проектировании реляционных СУБД считается (считалось) что операции CRUD (Create, Read, Update, Delete) по затратам ресурсов распределяются следующим образом

1. Легкие: Read, Update
2. Средние: Create
3. Тяжелая: Delete
цитирую автора с инфостарта "lustin"
9. paulwist 12.05.26 10:10 Сейчас в теме
(3)
цитирую автора с инфостарта "lustin"


Хм, ссылочкой поделитесь, это первое.

Второе, а сами, как думаете/знаете, в чём конкретно выражается "тяжелее", в каких "попугаях" ??

PS у "lustin" смешались "кони-люди", операции DML и DDL.
11. SVLong 49 12.05.26 10:14 Сейчас в теме
(9) https://infostart.ru/1c/articles/177171/?ysclid=mp2ae1fd9c835466780, первый комментарий этой статьи.

Если знаете
операции DML и DDL.
, расскажите, что неверно?
12. paulwist 12.05.26 10:33 Сейчас в теме
(11)
первый комментарий этой статьи.


Хех, вы прочитайте коммент 151 поста из вашей же ссылки :) :)


(11)
, расскажите, что неверно?


Мдя, операции DDL создают объекты БД, например, что происходит при create table для MSSQL... глава Экстенты и страницы карт распределения

Операции DML "манипулируют" данными, там же читай главу Изменение данных

Про "что не верно", думаю, сами догадаетесь,.. всё неверно. :)
2. Sashares 33 12.05.26 09:16 Сейчас в теме
Что происходит во время пересчета итогов? Мы очищаем таблицу итогов. А значит сразу после пересчета она пустая и эксперимент не будет достоверным если мы зачтем первое перепроведение в расчеты.

То есть сразу после пересчета итогов нет? Серьезно?
4. SVLong 49 12.05.26 09:58 Сейчас в теме
(2) поясните вопрос
5. Sashares 33 12.05.26 10:01 Сейчас в теме
(4) Вы пишите, что после пересчета итогов нет итогов.
Это очевидно не соответствует действительности.
По вашему, при пересчете итогов куча времени на пересчет итогов это операция Delete table что ли?
Операция в ТИИ называется пересчет итогов, то есть после очистки существующих итогов они рассчитываются заново.
6. SVLong 49 12.05.26 10:02 Сейчас в теме
(5) По-вашему что происходит при пересчете?
7. Sashares 33 12.05.26 10:04 Сейчас в теме
(6) Ох, чел, ну посмотри ты в sql, есть записи в таблице итогов после пересчета или нет.
8. SVLong 49 12.05.26 10:07 Сейчас в теме
(7) Увы, не стоит говорить то чего не знаешь. Проведу ЛикБез для вас, https://infostart.ru/1c/articles/177171/?ysclid=mp2ae1fd9c835466780, здесь подробно описано что происходит при пересчете.
10. Sashares 33 12.05.26 10:12 Сейчас в теме
(8) Статья конечно интересная, спасибо.
А теперь давайте прочитаем ее вместе:
1)
Выполним эту процедуру и посмотрим в СУБД на ту же таблицу
Видно, что в актуальных итогах (первая строка) нулевых записей больше нет.

2)
Фактически платформе 1С сначала надо очистить огромный объем записей в таблицах итогов, а потом заново их наполнить обновленными данными меньшего размера.

Где в ней написано, что после пересчета, итогов нет?
13. SVLong 49 12.05.26 11:59 Сейчас в теме
(10) Понял принял, но ведь и не написано что сразу после пересчета там что-то есть. Если работает ютуб, вот наглядный пример: https://youtu.be/uOlfyBlk5fQ?si=7Jatt-3-6f02CYjO. Чел делает пересчёт и показывает что происходит в БД postgres и вот те раз, она пустая (спойлер).
Если у вас есть опыт в DBA по 1С, пожалуйста, поделитесь, а не стоит закидывать камнями.
14. Sashares 33 12.05.26 12:15 Сейчас в теме
(13)
но ведь и не написано что сразу после пересчета там что-то есть.

Скрин с таблицей из раздела "И где проблема?" - записи таблицы итогов до пересчета.
Скрин с таблицей из раздела "Как исправить ситуацию?" - записи таблицы итогов после пересчета.
Данный скрин показывает, что записи в таблице итогов есть.
Прикрепленные файлы:
15. SVLong 49 12.05.26 12:22 Сейчас в теме
(14) это пересчет итогов из предприятия, это не то))))
16. Sashares 33 12.05.26 12:29 Сейчас в теме
(15) Это не важно из чего пересчет. Записи в таблице итогов будут.
Можете самостоятельно убедиться, выполнив запросы в sql к нужной таблице итогов, приведенные в этой статье.
17. pablo_escobar 12.05.26 16:56 Сейчас в теме
Откуда берутся неактуальные записи?

При проведении документа в этих таблицах создаются записи с проводками (итогами) этого документа.


По вашему в таблице итогов есть привязка к документу?
18. pablo_escobar 12.05.26 16:58 Сейчас в теме
Для проведения и фиксации времени, есть два известные мне способа: с помощью кода какой-нибудь внешней обработки или можно воспользоваться замером времени.

Если конфа современная, типовая, то есть встроенный apdex
Для отправки сообщения требуется регистрация/авторизация