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