Изменение записи в регистре сведений

Как изменить запись регистра сведений

Изменение записи в регистре сведений, частая задача для программиста 1с в заметке рассмотрим несколько способов изменить запись в регистре. Рассмотрим два варианта создание набора записей и установка отбора и создание менеджера записей.

Изменение записи в регистре сведений через набор записей и отбор

В примере ниже решим следующую задачу:

Оператор неверно записал штрихкод для товара с цветом и размером в базу данных. Необходимо зная товар (Номенклатура) и цвет с размером (Характеристика) найти штрихкод и исправить его. Неверный штрихкод мы не знаем.

Для решения задачи поступим следующим образом:

  1. Создадим набор записей регистра сведений
  2. Установим отбор
  3. Прочитаем запись
  4. Выбираем следующее действие в зависимости от количества найденных записей
    1. Если записи не найдены добавляем новую запись и добавляем штрихкод
    2. Если найдена 1 запись, то обновляем в ней штрихкод
    3. Если найдено несколько записей ничего не делаем, потому что не знаем какая запись с ошибкой
  5. Сообщаем результат работы
  6. Записываем изменения
НаборЗаписей = РегистрыСведений.ШтрихкодыНоменклатуры.СоздатьНаборЗаписей();  			
НаборЗаписей.Отбор.Номенклатура.Установить(Номенклатура);
НаборЗаписей.Отбор.Характеристика.Установить(Характеристика);
НаборЗаписей.Прочитать();

Если НаборЗаписей.Количество() = 0 Тогда
	НовыйНомер = НаборЗаписей.Добавить();
	НовыйНомер.Номенклатура		= Номенклатура;
	НовыйНомер.Характеристика	= Характеристика;
	НовыйНомер.Штрихкод			= Штрихкод;
	Текст = "Штрихкод записан, но у номенклатуры не было штрихкода";
ИначеЕсли НаборЗаписей.Количество() = 1 Тогда
	НовыйНомер = НаборЗаписей[0];
	НовыйНомер.Штрихкод = Штрихкод;
	Текст = "Штрихкод Исправлен";
ИначеЕсли НаборЗаписей.Количество() > 1 Тогда
	Текст = "У номенклатуры несколько штрихкодов, операция не выполнена";
КонецЕсли;

Сообщить(Текст);
НаборЗаписей.Записать();

Рассмотрим ещё один пример в котором установим курс валют для валюты USD.

КурсыВалют = РегистрыСведений.КурсыВалют;
НаборКурсов = КурсыВалют.СоздатьНаборЗаписей();
Доллар = Справочники.Валюты.НайтиПоНаименованию("USD");
НаборКурсов.Отбор.Валюта.Установить(Доллар);
НаборКурсов.Отбор.Период.Установить(НачалоДня(ТекущаяДатаСеанса()));
НаборКурсов.Прочитать();
Если НаборКурсов.Количество() = 0 Тогда
    НовыйКурс = НаборКурсов.Добавить();
    НовыйКурс.Валюта = Доллар;
    НовыйКурс.Период = ТекущаяДата();
ИначеЕсли НаборКурсов.Количество() > 0 Тогда
    ПоказатьПредупреждение("Курс валюты задается один раз в день.", 60);
    Возврат;
КонецЕсли;

НовыйКурс.Курс = 59.13;
НовыйКурс.Кратность = 1;
НаборКурсов.Записать();   

Изменение записи через менеджер записей

Реализуем внесение штрихкода номенклатуры программно м помощью менеджера записи. Порядок действий следующий:

  1. Создаем менеджер записей
  2. Вносим данные о номенклатуре штрихкоде и характеристике
  3. Пытаемся записать
МенеджерЗаписи = РегистрыСведений.ШтрихкодыНоменклатуры.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Номенклатура = Номенклатура;
МенеджерЗаписи.Штрихкод  = Штрихкод;
Если ЗначениеЗаполнено(Характеристика) Тогда
	МенеджерЗаписи.Характеристика = Характеристика;
Иначе    
	МенеджерЗаписи.Характеристика = Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка();
КонецЕсли;
	
Попытка
	МенеджерЗаписи.Записать();
Исключение
	Сообщить(ОписаниеОшибки());
КонецПопытки;

Реализуем внесение штрихкода, через менеджер записей с отбором.

  1. Создадим менеджер записи регистра сведений
  2. Установим отборы
  3. Прочитаем регистр
  4. Далее действуем в зависимости от того найдена запись в регистре или нет
    1. Если запись найдена заменяем штрихкод
    2. Если запись не найдена заполняем все реквизиты
  5. Записываем запись в регистр
МенеджерЗаписи = РегистрыСведений.ШтрихкодыНоменклатуры.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Номенклатура		= Номенклатура;
МенеджерЗаписи.Характеристика	= Характеристика;
МенеджерЗаписи.Прочитать();

Если МенеджерЗаписи.Выбран() Тогда
	МенеджерЗаписи.Штрихкод			= Штрихкод;
Иначе
	МенеджерЗаписи.Номенклатура		= Номенклатура;
	МенеджерЗаписи.Характеристика	= Характеристика;
	МенеджерЗаписи.Штрихкод			= Штрихкод;
КонецЕсли;

Попытка
	МенеджерЗаписи.Записать();
Исключение
	Сообщить(ОписаниеОшибки());
КонецПопытки;

Дополнительная информация по теме:

  1. Про регистры сведений на сайте v8.1c — ссылка
  2. Заметки про программирование на платформе 1с — ссылка

Опубликовано

в

от

Комментарии

Один комментарий на ««Как изменить запись регистра сведений»»

  1. Аватар пользователя Davidthync

    браво…так держать… супер

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