Изменение записи в регистре сведений, частая задача для программиста 1с в заметке рассмотрим несколько способов изменить запись в регистре. Рассмотрим два варианта создание набора записей и установка отбора и создание менеджера записей.
Изменение записи в регистре сведений через набор записей и отбор
В примере ниже решим следующую задачу:
Оператор неверно записал штрихкод для товара с цветом и размером в базу данных. Необходимо зная товар (Номенклатура) и цвет с размером (Характеристика) найти штрихкод и исправить его. Неверный штрихкод мы не знаем.
Для решения задачи поступим следующим образом:
- Создадим набор записей регистра сведений
- Установим отбор
- Прочитаем запись
- Выбираем следующее действие в зависимости от количества найденных записей
- Если записи не найдены добавляем новую запись и добавляем штрихкод
- Если найдена 1 запись, то обновляем в ней штрихкод
- Если найдено несколько записей ничего не делаем, потому что не знаем какая запись с ошибкой
- Сообщаем результат работы
- Записываем изменения
НаборЗаписей = РегистрыСведений.ШтрихкодыНоменклатуры.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Номенклатура.Установить(Номенклатура);
НаборЗаписей.Отбор.Характеристика.Установить(Характеристика);
НаборЗаписей.Прочитать();
Если НаборЗаписей.Количество() = 0 Тогда
НовыйНомер = НаборЗаписей.Добавить();
НовыйНомер.Номенклатура = Номенклатура;
НовыйНомер.Характеристика = Характеристика;
НовыйНомер.Штрихкод = Штрихкод;
Текст = "Штрихкод записан, но у номенклатуры не было штрихкода";
ИначеЕсли НаборЗаписей.Количество() = 1 Тогда
НовыйНомер = НаборЗаписей[0];
НовыйНомер.Штрихкод = Штрихкод;
Текст = "Штрихкод Исправлен";
ИначеЕсли НаборЗаписей.Количество() > 1 Тогда
Текст = "У номенклатуры несколько штрихкодов, операция не выполнена";
КонецЕсли;
Сообщить(Текст);
НаборЗаписей.Записать();
Рассмотрим ещё один пример в котором установим курс валют для валюты USD.
КурсыВалют = РегистрыСведений.КурсыВалют;
НаборКурсов = КурсыВалют.СоздатьНаборЗаписей();
Доллар = Справочники.Валюты.НайтиПоНаименованию("USD");
НаборКурсов.Отбор.Валюта.Установить(Доллар);
НаборКурсов.Отбор.Период.Установить(НачалоДня(ТекущаяДатаСеанса()));
НаборКурсов.Прочитать();
Если НаборКурсов.Количество() = 0 Тогда
НовыйКурс = НаборКурсов.Добавить();
НовыйКурс.Валюта = Доллар;
НовыйКурс.Период = ТекущаяДата();
ИначеЕсли НаборКурсов.Количество() > 0 Тогда
ПоказатьПредупреждение("Курс валюты задается один раз в день.", 60);
Возврат;
КонецЕсли;
НовыйКурс.Курс = 59.13;
НовыйКурс.Кратность = 1;
НаборКурсов.Записать();
Изменение записи через менеджер записей
Реализуем внесение штрихкода номенклатуры программно м помощью менеджера записи. Порядок действий следующий:
- Создаем менеджер записей
- Вносим данные о номенклатуре штрихкоде и характеристике
- Пытаемся записать
МенеджерЗаписи = РегистрыСведений.ШтрихкодыНоменклатуры.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Номенклатура = Номенклатура;
МенеджерЗаписи.Штрихкод = Штрихкод;
Если ЗначениеЗаполнено(Характеристика) Тогда
МенеджерЗаписи.Характеристика = Характеристика;
Иначе
МенеджерЗаписи.Характеристика = Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка();
КонецЕсли;
Попытка
МенеджерЗаписи.Записать();
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
Реализуем внесение штрихкода, через менеджер записей с отбором.
- Создадим менеджер записи регистра сведений
- Установим отборы
- Прочитаем регистр
- Далее действуем в зависимости от того найдена запись в регистре или нет
- Если запись найдена заменяем штрихкод
- Если запись не найдена заполняем все реквизиты
- Записываем запись в регистр
МенеджерЗаписи = РегистрыСведений.ШтрихкодыНоменклатуры.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Номенклатура = Номенклатура;
МенеджерЗаписи.Характеристика = Характеристика;
МенеджерЗаписи.Прочитать();
Если МенеджерЗаписи.Выбран() Тогда
МенеджерЗаписи.Штрихкод = Штрихкод;
Иначе
МенеджерЗаписи.Номенклатура = Номенклатура;
МенеджерЗаписи.Характеристика = Характеристика;
МенеджерЗаписи.Штрихкод = Штрихкод;
КонецЕсли;
Попытка
МенеджерЗаписи.Записать();
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
Дополнительная информация по теме:
