Очистка треков за период (АгентПлюс, AgentPlus), ускорение работы и исправление ошибок. Новый метод обработки записей регистра сведений

30.10.18

Разработка - Инструментарий разработчика

Обработка "Очистка Треков За Период" входит в поставку программного комплекса АгентПлюс мобильная торговля и предназначена для удаления записей регистра сведений за период по выбранным торговым агентам (Далее ТА). Предложен нестандартный метод удаления записей регистра сведений. Стимулом к внесению исправлений в обработку является желание исправить ошибки и сократить время работы. Платформа 1С:Предприятие 8.3 (8.3.12.1440)

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Очистка треков за период (АгентПлюс, AgentPlus), ускорение работы и исправление ошибок. Новый метод обработки записей РС.:
.epf 14,07Kb
2 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Обработка кпкОчисткаТрековЗаПериод входит в поставку программного комплекса АгентПлюс мобильная торговля и предназначена для удаления записей регистра сведений за период по выбранным торговым агентам (Далее ТА).

 

Стимулом к внесению исправлений в обработку является желание исправить ошибки и сократить время работы.

 

Ошибка.

В обработке есть цикл формирования списка по выбранным ТА. Но в цикле нет проверки на то, что является выбранным , а что нет.

 

Было:

Для Каждого СтрокаМас Из МассивАгентов Цикл
   СписАгентов.Добавить(СтрокаМас);         
КонецЦикла; 

 

Стало:

	Для Каждого СтрокаТаб Из ТаблицаАгентов Цикл
		Если СтрокаТаб.Пометка Тогда
			СписАгентов.Добавить(СтрокаТаб.Агент);	
		КонецЕсли;
	КонецЦикла;

 

 

Кроме того в Процедуре ЗаполнитьТаблицуАгентов Испльзуется запрос к РС кпкСведенияАгента, что не дает возможности получить весь список ТА когда либо работавших на предприятии. Поэтому вносились изменения и в процедуру ЗаполнитьТаблицуАгентов.

 

Было:

 

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

 

Стало:

Процедура ЗаполнитьТаблицуАгентов() Экспорт
	
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
		|	кпкСведенияПоГПСТрекам.Агент КАК Агент,
		|	кпкСведенияПоГПСТрекам.Агент.Наименование КАК Наименование
		|	
		|ИЗ
		|	РегистрСведений.кпкСведенияПоГПСТрекам КАК кпкСведенияПоГПСТрекам
		|
		|СГРУППИРОВАТЬ ПО
		|	кпкСведенияПоГПСТрекам.Агент
		|
		|УПОРЯДОЧИТЬ ПО
		|	Наименование
		|	
		|";
	
	ВыборкаРегистра = Запрос.Выполнить().Выбрать();
	
	ТаблицаАгентов.Очистить();
	Пока ВыборкаРегистра.Следующий() Цикл
		СтрАгента         = ТаблицаАгентов.Добавить();
		СтрАгента.Агент   = ВыборкаРегистра.Агент;
		СтрАгента.Пометка = Истина;
	КонецЦикла;
КонецПроцедуры

 

Изменения коснулись и главной процедуры ВыполнитьОчисткуТреков. Дело в том, что авторами предложен метод удаления записей регистров по одной используя Менеджер. Этот метод чрезвычайно медленный и в случае удаления за длительный период обработка выполняется чрезвычайно долго.

 

Было:

Процедура ВыполнитьОчисткуТреков() Экспорт

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

 

Стало:

 

Процедура ВыполнитьОчисткуТреков() Экспорт

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

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

	Если (ТЗ.Количество() > 100000) Тогда 
		Сообщить("Записей к удалению "+ВыборкаГПС.Количество()+"					"+ТекущаяДата());
		//Запрос 2 т.е. Оригинал
		
		Менеджер = РегистрыСведений.кпкСведенияПоГПСТрекам.СоздатьМенеджерЗаписи();
		Сообщить("Работает Оригинальный способ			"+ТекущаяДата());
		Счетчик = 1;
		Сч100 =1;
		Пока ВыборкаГПС.Следующий() Цикл
			Менеджер.Период       = ВыборкаГПС.Период;
			Менеджер.Агент        = ВыборкаГПС.Агент;
			Менеджер.Ключ         = ВыборкаГПС.Ключ;
			Менеджер.Прочитать();
			
			Если Менеджер.Выбран() Тогда
				Менеджер.Удалить();
			КонецЕсли;
			Если Сч100 = 1000 Тогда 
				Сообщить("Обработано: 	" +Счетчик+"--		"+ТекущаяДата());
				Сч100= 0;
			КонецЕсли;	
			Счетчик = Счетчик +1;
			Сч100=Сч100+1;
			ОбработкаПрерыванияПользователя();
		КонецЦикла;
		Сообщить("Обработано: 	" +(Счетчик-1)+"--		"+ТекущаяДата());
		
	Иначе
		//Запрос 1 
		Сообщить("Метод от остатка");
		Сообщить("Остаток Записей "+ТЗ.Количество()+"			"+ТекущаяДата());
		НаборЗаписей = РегистрыСведений.кпкСведенияПоГПСТрекам.СоздатьНаборЗаписей();
		НаборЗаписей.Загрузить(ТЗ);
		Сообщить("Записи Загружены в РС					"+ТекущаяДата());
		ТЗ.Очистить();
		Сообщить("ТЗ Очищена								"+ТекущаяДата());
		НаборЗаписей.Записать();
		Сообщить("РС кпкСведенияПоГПСТрекам Записан!		"+ТекущаяДата());
	КонецЕсли;
	
КонецПроцедуры //ВыполнитьОчисткуТреков()

Некоторые пояснения.

  1. Предложен и реализован метод при котором переписываются только те записи РС, которые действительно необходимо оставить в РС.
  2. Опытным путем было получено ориентировочное число записей в 100000 при котором обработка не завершается ошибкой нехватки памяти.
  3. В случае если число записей РС , которые необходимо оставить в РС превышает 100000, обработка иcпользует оригинальный метод удаления, т.е. по записям с использованием Менеджера.

 

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

 

Прошу знатоков высказать свое мнение  по поводу предложенного метода работы с РС.

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

Обработка Удаление записей Регистр сведений Менеджер записей Массовое удаление записей из регистра АгентПлюс Мобильная торговля AgentPlus

См. также

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку одновременно в несколько потоков. А так же автоматически, без непосредственного участия пользователя. Решение в Реестре отечественного ПО

24900 руб.

20.08.2024    63753    333    162    

298

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С:Предприятие 8 Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

16500 руб.

02.09.2020    251578    1392    421    

1147

Инструментарий разработчика Нейросети Платные (руб)

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

15250 руб.

25.08.2025    48186    100    27    

113

Пакетная печать Печатные формы Инструментарий разработчика Программист 1С:Предприятие 8 Платные (руб)

Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм.

22570 руб.

06.10.2023    36590    96    40    

116

Инструменты администратора БД Инструментарий разработчика Роли и права Программист 1С:Предприятие 8 1C:Бухгалтерия Россия Платные (руб)

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

17000 руб.

10.11.2023    24322    92    42    

101

Инструментарий разработчика Программист 1С:Предприятие 8 Платные (руб)

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

9500 руб.

17.05.2024    51223    180    63    

210

Мастера заполнения Поиск данных Инструментарий разработчика Подбор и обработка объектов 1С 8.3 1С 8.5 Платные (руб)

Infostart MagicInput улучшает подбор в полях ввода 1С: ищет по любой части названия и по нескольким ключевым фрагментам, распознаёт ввод в другой раскладке и показывает иконки/статусы объектов прямо в списке. Поддерживает вставку навигационной ссылки/представления документа для автоподбора; для разработчиков доступны поиск по GUID и полному имени предопределённого. Работает в управляемых формах и подключается в большинстве конфигураций 1С 8.3/8.5.

5000 руб.

25.02.2026    2580    10    1    

14
Для отправки сообщения требуется регистрация/авторизация