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

30.10.18

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

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

Файлы

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

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

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

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

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

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

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

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

 

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

 

Ошибка.

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

 

Было:

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

 

Стало:

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

 

 

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

 

Было:

 

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

 

Стало:

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

 

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

 

Было:

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

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

 

Стало:

 

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

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

	ТЗ = Запрос.Выполнить().Выгрузить();
	Сообщить("Запрос Выполнен							"+ТекущаяДата());
	
	Запрос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, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы, интерфейс 8.5. Может выполнять свертку одновременно в несколько потоков, а также без непосредственного участия пользователя. Решение в Реестре отечественного ПО.

24900 руб.

20.08.2024    75055    379    170    

325

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

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

10000 руб.

02.09.2020    268224    1494    421    

1179

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

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

22570 руб.

06.10.2023    40112    113    54    

126

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

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

15250 руб.

25.08.2025    63602    130    36    

137

Инструментарий разработчика Разработка Администрирование веб-серверов Системный администратор Программист Бизнес-аналитик Руководитель проекта 1С 8.3 Платные (руб)

Analyzer 1C сводит выгрузку 1С — основную конфигурацию и все расширения — в единый граф знаний. Любой запрос по связям за доли секунды, с пометками «Доб.» / «Заимств.» / «Переопределено». Новое в 2.0 — обновление поставки: сравнение и объединение версий деревом «как в Конфигураторе» с выгрузкой плана решений; поиск конфликтов из-за перехватов расширений и висячих ссылок; загрузка из бинарных .cf/.cfe; циклические зависимости. Плюс анализ влияния, запросы BSL, роли и RLS, граф вызовов. Минута на развёртывание через Docker без необходимости подключения к Интернет. Любая 1С:Предприятие 8.3+.

14000 руб.

17.04.2026    8856    38    46    

51

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

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

17000 руб.

10.11.2023    26397    98    46    

104

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

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

6000 руб.

25.02.2026    4821    16    1    

20

Информационная безопасность Инструменты администратора БД Инструментарий разработчика Учет документов Системный администратор Программист Бизнес-аналитик Бухгалтер Пользователь Руководитель проекта 1С 8.3 1С 8.5 Розничная и сетевая торговля (FMCG) Платные (руб)

Контроль ввода данных в 1С: проверка заполнения реквизитов, обязательные поля, контроль перед записью и проведением, запрет проведения документа. Позволяет настраивать любые проверки данных в 1С 8.3/8.5 от обязательных полей до сложных условий – без открытия конфигуратора и написания кода. Готовое расширение, которое подключается и работает сразу.

6000 руб.

15.04.2026    2597    6    0    

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