gifts2017

Обновление нумерации объекта

Опубликовал Анатолий Сычёв (stolya) в раздел Обработки - Обработка документов

Обработка для обновления нумераций/кодов объектов информационной базы

Функциональные возможности:

  • Выбор объекта, у которого длина кода/номера отлична от нуля
  • Отключение контроля записи (ОбменДанными.Загрузка = Истина)
  • Выполнение обновления нумерации в одной транзакции
  • Присвоение префикса всем обновляемым объектам
  • Настройка произвольного отбора
  • Настройка произвольной сортировки

Принцип работы

Обработка является самодостаточной для исполнения, поэтому подходит для любой конфигурации. После запуска обработки необходимо выбрать "Объект", по которому требуется обновить нумерацию. Все остальные параметры являются опциональными и заполняются/устанавливаются при необходимости. Обновление нумерации выполняется по кнопке "Обновить".

Основной функционал обработки

МетаданныеОбъекта = Метаданные.НайтиПоПолномуИмени(ПолноеИмяОбъекта);
ВидОбъекта        = СтрРазделить(ПолноеИмяОбъекта, ".")[0];
ПолеНомера        = ?(ВидОбъекта = "Документ" ИЛИ ВидОбъекта = "БизнесПроцесс" ИЛИ ВидОбъекта = "Задача", "Номер", "Код");
ФорматнаяСтрока   = "ЧЦ=" + (МетаданныеОбъекта["Длина" + ПолеНомера + "а"] - СтрДлина(Префикс)) + "; ЧВН=; ЧГ=0";

Если ВыполнитьВТранзакции Тогда
	НачатьТранзакцию();
КонецЕсли;

Попытка
	
	Номер = 0;
	Для Каждого ТекСтрока Из КоллекцияЗначений Цикл
		
		Номер = Номер + 1;
		
		Объект = ТекСтрока.Ссылка.ПолучитьОбъект();
		Объект[ПолеНомера] = Префикс + Формат(Номер, ФорматнаяСтрока);
		
		Если ОтключитьКонтрольЗаписи Тогда
			Объект.ОбменДанными.Загрузка = Истина;
		КонецЕсли;
		
		Объект.Записать();
		
	КонецЦикла;
	
	ОбновитьНумерациюОбъектов(МетаданныеОбъекта);
	
	Если ВыполнитьВТранзакции Тогда
		ЗафиксироватьТранзакцию();
	КонецЕсли;
	
Исключение
	
	Если ВыполнитьВТранзакции Тогда
		ОтменитьТранзакцию();
	КонецЕсли;
	
	СообщениеПользователю = Новый СообщениеПользователю;
	СообщениеПользователю.Текст = ОписаниеОшибки();
	СообщениеПользователю.Сообщить();
	
	Возврат Ложь;
	
КонецПопытки;
 
Все функциональные возможности, описанные выше, реализованы в прикрепленной обработке.

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Обновление нумерации объекта
.epf 10,33Kb
06.07.16
4
.epf 1.0.0.1 10,33Kb 4 Скачать

См. также

Contragent+ 5.0 от 2 500
Подписаться Добавить вознаграждение

Комментарии

1. Капитан Немо (capitan) 09.07.16 19:11
В обработке исключения отменять транзакцию уже бессмысленно, система ее отменит автоматически
И что будет если Префикс + Формат(Номер, ФорматнаяСтрока) выдаст номер который уже сть у объекта в базе ?
Как раз в исключение и вылетит обработка
2. Анатолий Сычёв (stolya) 10.07.16 12:06
(1) capitan, неявное указание отмены транзакции (то как ты рекомендуешь) не считается правильным программированием, так как система будет ожидать либо команду зафиксирования транзации или команду отмены и если дойдя до конца обработчика не будет одной из двух команд, то система автоматически отменит транзакцию и освободит используемые ресурсы - в итоге не оптимальное использование ресурсов системы.
Другой аналогичный пример: в начале обработчика выполняется получение большой таблицы значений с сохранением ее в переменной для разового использования. Если после использования таблицы не очистить переменную, то данные таблицы будут храниться в памяти на протяжении всей обработки, что в свою очередь может повлечь превышения объема доступной оперативной памяти.
Исключение по уникальности номера можно отключить используя признак "Отключить контроль записи".
3. Капитан Немо (capitan) 13.07.16 10:15
Внимательность мой друг
система ее отменит автоматически
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа