Ошибка обновления типовых конфигураций УТ/ЕРП/КА и других "Превышен максимальный расход памяти сервера за один вызов"

18.08.25

База данных - Обновление 1С

При обновлении конфигураций ЕРП/КА/УТ типовыми обновлениями можно получить ошибку  Превышен максимальный расход памяти сервера за один вызов". С чем это связано? Рассмотрим исправление этой ошибки.

Например, посмотрим регистры накопления:

  • ЗаданияНеоперативногоДопроведенияДокументов
  • ДенежныеСредстваБезналичные

В модулях менеджера которых есть процедура "ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию", в которой выполняется выборка данных.

Затем эта выборка, в качестве ТЗ или массива уходит в процедуру ОбновлениеИнформационнойБазы.ОтметитьКОбработке"

Самое забавное, что 1С  для нас (но, видимо, не для себя)  написали комментарий к процедуре 
"ОтметитьКОбработке"

// Отмечает, что переданные данные необходимо обновить.
// Важно: не рекомендуется передавать в параметр Данные сразу все данные, которые
// необходимо зарегистрировать к обработке, т.к. большие коллекции типа Массив
// или ТаблицаЗначений могут занять существенный объем памяти сервера и привести
// к сильному снижению производительности системы. Рекомендуется получать и передавать
// данные небольшими порциями, например по 1000 объектов.

Это отлично .. но при этом в обработчике обновлений ... мы получаем огромную выборку .. без каких-либо разделений на порции.. в после передачи этой выборки  (массив или ТЗ)  в "ОтметитьКОбработке".. даже на мощных серверах .. мы просто падаем ...

Выход:

1) Создаем общий модуль "РаботаСПорциямиСервер" (Сервер, внешнее соединение)

Код модуля:

 

#Область ПрограммныйИнтерфейс

Функция РазбитьМассивНаПорции(ВходящийМассив, РазмерПорции) Экспорт
	
	ПулМассивов = Новый Массив;
	
	МассивПорция = Новый Массив;
	
	Если ВходящийМассив.Количество() <= РазмерПорции Тогда
		
		ПулМассивов.Добавить(ВходящийМассив);
		Возврат ПулМассивов;
		
	КонецЕсли;

	Для Индекс = 0 По ВходящийМассив.ВГраница() Цикл
		
		Если МассивПорция.Количество() = РазмерПорции Тогда
			
			ПулМассивов.Добавить(МассивПорция);
			МассивПорция = Новый Массив;
			
		КонецЕсли;

		МассивПорция.Добавить(ВходящийМассив.Получить(Индекс));
		
	КонецЦикла;
	
	Если Индекс -1 = ВходящийМассив.ВГраница() И МассивПорция.Количество() <> 0 Тогда
		
		ПулМассивов.Добавить(МассивПорция);
		
	КонецЕсли;
	
	Возврат ПулМассивов;
	
КонецФункции

Функция РазбитьТЗНаПорции(Тз, РазмерПорции) Экспорт
	
	ПулМассивов = Новый Массив;
	
	Если Тз.Количество() <= РазмерПорции Тогда
		
		ПулМассивов.Добавить(Тз);
		Возврат ПулМассивов;
		
	КонецЕсли;
	
	ТзПорция = ПустаяТз(Тз);
	
	Для Сч = 0 По Тз.Количество() -1 Цикл
		
		Если ТзПорция.Количество() = РазмерПорции Тогда
			
			ПулМассивов.Добавить(ТзПорция);
			ТзПорция = ПустаяТз(Тз);
			
		КонецЕсли;
		
		НоСтрокаТз = ТзПорция.Добавить();
		ЗаполнитьЗначенияСвойств(НоСтрокаТз, Тз.Получить(Сч));
		
	КонецЦикла;
	
	Если Сч = Тз.Количество() И ТзПорция.Количество() <> 0 Тогда
		
		ПулМассивов.Добавить(ТзПорция);
		
	КонецЕсли;
	
	Возврат ПулМассивов;
	
КонецФункции

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

Функция ПустаяТз(Тз)
	
	Возврат Тз.СкопироватьКолонки();
	
КонецФункции

#КонецОбласти

 


Исправление в расширении выглядит так:

 
 

 

#Удаление
  ОбновлениеИнформационнойБазы.ОтметитьКОбработке(
  Параметры, Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Регистратор"), ДополнительныеПараметры);
#КонецУдаления

#Вставка
  
  РазмерПорции = 500;
  
  ДанныеДляОбработки = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Регистратор");
  ПулМассивовДляОбработки = РаботаСПорциямиСервер.РазбитьМассивНаПорции(ДанныеДляОбработки, РазмерПорции);
  
  Для Каждого ЭлМассива Из ПулМассивовДляОбработки Цикл
  
    ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, ЭлМассива, ДополнительныеПараметры);
    
  КонецЦикла;
  
#КонецВставки

 


После таких доработок, отложенные обработчики отработают штатно, и проблем возникать не будет.

PS все это справедливо для "больших баз", где первички очень много...

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

См. также

Обновление 1С Программист 1С 8.3 Россия Бесплатно (free)

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

11.02.2026    856    AntonovaElena    4    

17

Разработка внешних компонент Администрирование СУБД Linux Обновление 1С Системный администратор Программист Россия Абонемент ($m)

Cценарий python предназначен для автоматизации процессов установки СУБД PostgreSQL, клиентского приложения и сервера 1С, службы RAS а также  и деинсталляции последних в cреде операционной системы Astra Linux. Полный режим работы выполняет деинсталляцию предшествующей версии 1С и установку последующей.  Возможны также только деинсталляция или только установка. Сценарий тестирован в среде ОС Astra Linux SE v.1.7.x,v.1.8.x  

2 стартмани

03.02.2026    491    3    Магнат    1    

2

Инструменты администратора БД Обновление 1С Системный администратор Программист 1С 8.3 1С:Библиотека стандартных подсистем Россия Абонемент ($m)

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

2 стартмани

02.02.2026    394    3    burmsergey    0    

3

Обновление 1С Программист 1С 8.3 1С:Бухгалтерия 3.0 Россия Бесплатно (free)

Вы когда-нибудь обновляли старую доработанную типовую конфигурацию, доработанную на коленке? Или может вы сами хотите обновить у себя типовую, но боитесь грядущих сложностей? Рассказываю, как я типовую Бухгалтерию с самописной, сделанной "бизнесом" подсистемой обновлял. Надеюсь, мой опыт вам поможет.

27.01.2026    583    dobrotank    0    

2

Обновление 1С НДС 22% Программист Бухгалтер Пользователь 1С 8.3 1С:Управление торговлей 10 Бухгалтерский учет НДС Абонемент ($m)

В рамках обновления конфигурации УТ 1.1 реализована поддержка новых ставок НДС — 22%, 7% и 5%, а также соответствующих расчётных ставок. Изменения внедрены в соответствии с актуальными законодательными требованиями и обеспечивают корректное применение ставок в документах и справочниках. ДЛЯ ПРАВИЛЬНОЙ РАБОТЫ ОБНОВЛЕНИЯ ТРЕБУЕТСЯ СКАЧАТЬ ОБА АРХИВА (часть 1 и часть 2)

5 стартмани

26.01.2026    495    Asyst-pro    5    

1

EDT Обновление 1С Программист Бесплатно (free)

На примере рассмотрим одну из стратегий обновления проекта на новый релиз поставщика через 1С:EDT.

19.01.2026    2994    eakomarov    12    

20

Обновление 1С НДС 22% Программист Бухгалтер Пользователь 1С 8.3 1С:Управление торговлей 11 Россия НДС Абонемент ($m)

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

10 стартмани

15.01.2026    1990    5    aximo    0    

7

Обновление 1С Инструментарий разработчика Программист 1С 8.3 Абонемент ($m)

Позволяет получить список внешних отчетов/обработок, которые перестали работать после обновления конфигурации.

1 стартмани

17.12.2025    715    17    Efimoff    3    

5
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Xershi 1542 19.08.25 05:45 Сейчас в теме
Элегантное решение!
2. aximo 2599 19.08.25 07:16 Сейчас в теме
Это что у вас «большие базы» на 32-ух разрядных серверах приложений работают?
4. iolko 344 19.08.25 09:12 Сейчас в теме
3. Vladimir-R 172 19.08.25 09:03 Сейчас в теме
У вас в настройках отложенного обновления сколько потоков обновления включено?
5. iolko 344 19.08.25 09:13 Сейчас в теме
(3) Там, понимаете, дело не в потоках .. а дело в том, что передается в качестве параметра большой объем данных.
О том, что так делать нельзя, 1С пишет в комментарии:

// Важно: не рекомендуется передавать в параметр Данные сразу все данные, которые
// необходимо зарегистрировать к обработке, т.к. большие коллекции типа Массив
// или ТаблицаЗначений могут занять существенный объем памяти сервера и привести
// к сильному снижению производительности системы. Рекомендуется получать и передавать
// данные небольшими порциями, например по 1000 объектов.

Но при этом сама не выполняет данные требования
Dach; sapervodichka; +2 Ответить
6. sapervodichka 7527 19.08.25 10:24 Сейчас в теме
(3) тут я так понял дело в том, что есть 1 параметр, там весь объем и по потокам эти данные не делятся (это ведь дописывать надо кодом) машина не сможет поделить по потокам выполнение процедуры. Вот Алексей решил все также оставить в 1 потоке, но только поделить на меньшие порции, чтобы прожевывало. А так классно было бы иметь встроенную возможность поделить на порции и эти порции в разные потоки для любого обработчика обновления - но это лучше самому 1С сделать везде в обработчиках обновления.
7. iolko 344 19.08.25 12:57 Сейчас в теме
(6) Да, совершенно верно, и это (во всяком случае у нас) огромная выборка, и если она передается вся, без разбиения на порции, то получаем недостаток памяти.

Если же передать весь объем, предварительно его разделив, то он спокойно порциями встает в очередь и затем так же спокойно отложено отработает.
Потому отложенные обработчики делят данные на порции, и на каждую порцию создается отдельное рег задание.
А вот именно при подготовке данных этого нет, что и исправляем
8. Dach 390 19.08.25 13:46 Сейчас в теме
(7) на партнерку бы еще написать и носом их ткнуть в этот код
9. Vladimir-R 172 20.08.25 13:43 Сейчас в теме
(8) ответ 1С
"При анализе решено. что деградации нет или она незначительна.
Ошибкой не считается."
10. iolko 344 21.08.25 03:34 Сейчас в теме
(9) Ну что тут сказать, возможно, на каких-то объемах проблемы нет, но с нашими - они возникли..
По этому: хочешь сделать хорошо - сделай сам, как обычно
Для отправки сообщения требуется регистрация/авторизация