Как заменить значение ресурса регистра сведений — универсальная процедура (1С: Программисту: Регистры сведений) — 1C-h
 

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

В том случае, когда в каком-то регистре сведений нужно заменить несколько видов значений какого-то конкретного ресурса на заданное значение, лучше использовать вот такую универсальную процедуру (при ее вызове достаточно подставить название регистра, название ресурса и передать старые заменяемые значения и новое, на которое они заменяются):

// Процедура выполняет в независимом регистре сведений "ИмяРегистраСведений" замену 
// всех значений ресурса "ИмяИзменяемогоРесурса", // соответствующих массиву "МассивСтарыхЗначенийРесурса"
// на новое значение ресурса "НовоеЗначениеРесурса".
// В запрос можно передать дополнительное условие, ограничивающее выборку данных из регистра "ДопУсловие"
Процедура ЗаменаРесурсаНезависимогоРегистра(ИмяРегистраСведений, ИмяИзменяемогоРесурса, МассивСтарыхЗначенийРесурса, НовоеЗначениеРесурса, ДопУсловие = "")
	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("МассивСтарыхЗначенийИзмерения",	МассивСтарыхЗначенийРесурса);
	Запрос.УстановитьПараметр("НовоеЗначениеИзмерения",			НовоеЗначениеРесурса);

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

	Сообщить("1 Приступаем к выполнению запроса к данным регистра """ + ИмяРегистраСведений + """ - " + ТекущаяДата());

	ТаблицаЗаполнения = Запрос.Выполнить().Выгрузить();

	Сообщить("2 Приступаем к обработке результата запроса к регистру """ + ИмяРегистраСведений + """ - " + ТекущаяДата());

	// заполнение строки progress bar
	ЭлементыФормы.Индикатор2.Значение = 0; // обнуляем, чтобы при повторном запуске статусбар сбросился в 0
	ЭлементыФормы.Индикатор2.МаксимальноеЗначение = ТаблицаЗаполнения.Количество(); // задаем значение для 100%

	// для каждой строки таблицы значений установим отбор и перезапишем регистр
	Для Каждого СтрокаЗаполнения Из ТаблицаЗаполнения Цикл

		ЭлементыФормы.Индикатор2.Значение = ЭлементыФормы.Индикатор2.Значение + 1; //указываем прирост внутри цикла

		// попробуем через СоздатьМенеджерЗаписи()
		текЗапись = РегистрыСведений[ИмяРегистраСведений].СоздатьМенеджерЗаписи();

		ЗаполнитьЗначенияСвойств(текЗапись, СтрокаЗаполнения);

		// прочитаем эту запись (внимание, эта команда обязательна, иначе можно ненароком очистить весь регистр!)
		текЗапись.Прочитать();

		Если текЗапись.Выбран() Тогда // убедились, что спозиционироваться удалось
			// сообщаем, что именно и на какое значение нужно изменить в регистре
			текЗапись[ИмяИзменяемогоРесурса] = НовоеЗначениеРесурса;

			// записываем изменения в регистре
			текЗапись.Записать();

		Иначе // спозиционироваться не удалось, можно выходить
			Сообщить("Возникла проблема определения " + НовоеЗначениеРесурса + " в регистре через менеджер записи " + НовоеЗначениеРесурса);
		КонецЕсли;

	КонецЦикла;
	Сообщить("3 Окончание исправления регистра """ + ИмяРегистраСведений + """ - " + ТекущаяДата());
КонецПроцедуры // ЗаменаИзмеренияНезависимогоРегистра()

Здесь можно скачать пример обработки замены ресурса и измерения (в зависимости от регистра) «ПартияТовара» во всех регистрах сведений на примере конфигурации логистики
В этой обработке используется приведенная тут универсальная процедура — можно посмотреть пример ее использования.
Возможность скачивания закрыта в целях безопасности. Если Вы хотели бы получить обработку, напишите комментарий к этой статье, вышлем.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Next Post

Как реализовать отключение пользователей в случае простоя - для экономии количества задействованных лицензий (1С: Программисту)

Чт Апр 14 , 2011
Конфигурации 1С, предоставляемые партнерами фирмы 1С, обычно защищены лицензиями. Расход лицензий при этом осуществляется «покомпьютерно». Т.е. если на одном компьютере запустить несколько экземпляров 1С:Предприятия, то на все будет затрачена одна лицензия. Чтобы не покупать лишние лицензии, а также чтобы пользователи не запускали 1С и не уходили «гулять», заняв при этом […]