Регистр сведений как перезаполнить реквизиты

 +35 

   

Распечатать

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

Код 1C v 8.х

 НаборЗаписей = РегистрыСведений.НумерацияДоговоров.СоздатьНаборЗаписей();  			
НаборЗаписей.Отбор.Период.Установить(НачалоГода(Дата));
НаборЗаписей.Отбор.Организация.Установить(Организация);
НаборЗаписей.Прочитать();
Если НаборЗаписей.Количество() = 0 Тогда
НовыйНомер = НаборЗаписей.Добавить();
НовыйНомер.Организация = Организация;
НовыйНомер.Период = НачалоГода(Дата);
НовыйНомер.Номер = 2; ном=1;
ИначеЕсли НаборЗаписей.Количество() = 1 Тогда
НовыйНомер = НаборЗаписей[0];
ном = НовыйНомер.Номер;
НовыйНомер.Номер = ном+1;
КонецЕсли;
НаборЗаписей.Записать();
Номер = Организация.Префикс + "-" + Ном + "/" + Строка(Прав(Год(ТекущаяДата()),2));

Код 1C v 8.х

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

Код 1C v 8.х

  //В регистр были ошибочно записаны штрихкоды. 
// Нужно по заданным Номенклатуре (Товар) и Характеристике (ХарактеристикаТовара) найти эту запись и заменить там штрихкод.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ШтрихкодыНоменклатуры.Штрихкод КАК Штрихкод
|ИЗ
| РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
|ГДЕ
| ШтрихкодыНоменклатуры.Номенклатура = &Номенклатура И
| ШтрихкодыНоменклатуры.Характеристика = &Характеристика";

Запрос.УстановитьПараметр("Номенклатура", Товар);
Запрос.УстановитьПараметр("Характеристика", ХарактеристикаТовара);

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

ТекЗапись.Штрихкод = Штрихкод;
Попытка
ТекЗапись.Записать();
Исключение
КонецПопытки;

КонецЕсли;

всем привет. Пытаюсь получить объект регистра сведени запросом. для того чтобы записать в реквизит данные. но ошибка такого рода:

{Форма.Форма(343)}: Поле объекта недоступно для записи (НомерКарты)

                    Рез.НомерКарты = СтрПолучитьСтроку(Строки2,1);

Запрос.Текст = «ВЫБРАТЬ

                       |    уатВодителиОрганизаций.Физлицо.Наименование КАК Наименование,

                       |    уатВодителиОрганизаций.Физлицо.Ссылка КАК Ссылка,

                       |    уатВодителиОрганизаций.Организация.Наименование КАК Орган,

                       |    уатВодителиОрганизаций.НомерКарты КАК НомерКарты

                       |ИЗ

                       |    РегистрСведений.уатВодителиОрганизаций КАК уатВодителиОрганизаций

                       |ГДЕ

                       |    уатВодителиОрганизаций.Физлицо.Наименование = &ФИО

                       |    И уатВодителиОрганизаций.Организация.Наименование = &Орг

                       |

                       |ДЛЯ ИЗМЕНЕНИЯ

                       |    РегистрСведений.уатВодителиОрганизаций»;

                        
        Запрос.УстановитьПараметр(«ФИО», ФИО);

        Запрос.УстановитьПараметр(«Орг», Орг);

        
        
        
        Рез = Запрос.Выполнить().Выбрать();

                Если Рез.Следующий() Тогда

                    Сообщить(Рез.Орган + » — » + Рез.Наименование);

                    Рез = Рез.Пол

                    Рез.НомерКарты = СтрПолучитьСтроку(Строки2,1);

                    
                    
                    
                    кол = кол + 1;

                КонецЕсли;

                
    КонецЦикла;

Анализируем вид регистра для выбора варианта редактирования записей

Регистры сведений по режиму записи подразделяются на независимые регистры и регистры с подчинением регистратору. Программная работа с этими регистрами имеет различия, поэтому вначале определите какой регистр Вам нужно изменить. Для этого откройте свойства регистра сведений и определите его режим записи:

Дополнительно обратите внимание на периодичность регистра сведений — если регистр периодический, все данные в нем записываются в разрезе по периоду. Более подробно этот момент мы рассмотрим ниже на примерах.

После того, как Вы определились с режимом записи изменяемого регистра сведений, Вы можете выбрать вариант изменения записей регистра.

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

Давайте рассмотрим пример изменения записей в регистре сведений КурсыВалют. Ниже показаны свойства этого регистра (сразу обращайте внимание на состав измерений регистра, режим записи и периодичность):

К примеру, нам необходимо перезаписать курс валюты. В первом варианте мы установим курс валюты без анализа уже записанных данных:

Процедура УстановитьКурсВалюты(Период, Валюта, Курс, Кратность) Запись = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи(); Запись.Период = Период; Запись.Валюта = Валюта; Запись.Курс = Курс; Запись.Кратность = Кратность; Запись.Записать(); КонецПроцедуры

Т.к. регистр сведений у нас периодический — дополнительно мы указываем период для курса валюты.

Теперь, используя объект МенеджерЗаписи, мы перезапишем только курс валюты. Для этого сперва установим отбор по периоду и валюте и прочитаем данные из регистра сведений:

Процедура УстановитьКурсВалюты(Период, Валюта, Курс) Запись = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи(); Запись.Период = Период; Запись.Валюта = Валюта; Запись.Прочитать(); Если Запись.Выбран() Тогда Запись.Курс = Курс; Запись.Записать(); КонецЕсли; КонецПроцедуры

С помощью функции Выбран() мы проверяем, считана запись или нет. Если запись существует (по установленному периоду и валюте) — мы устанавливаем новый курс. В этом варианте уже не нужно устанавливать кратность т.к. ее значение не изменится и будет записано старое значение.

А теперь давайте выполним аналогичные действия с использованием объекта НаборЗаписей для изменения данных в регистре сведений:

Процедура УстановитьКурсВалюты(Период, Валюта, Курс) Набор = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); Набор.Отбор.Период.Установить(Период); Набор.Отбор.Валюта.Установить(Валюта); Набор.Прочитать(); Если Набор.Количество() Тогда Запись = Набор[0]; Запись.Курс = Курс; Набор.Записать(); КонецЕсли; КонецПроцедуры

В примере выше мы создаем набор записей и устанавливаем для него отбор по измерениям и периоду. После установки отбора считываем записи. В результате в наборе будут ранее записанные записи. Т.к. мы установили полный отбор по измерениям (периоду и валюте) — максимальное количество записей в отборе равно 1. Поэтому мы проверяем набор на количество и если запись есть — устанавливаем новый курс валюты.

Все примеры, описанные выше, выполнят одинаковые действия по установке нового курса валют. Выбирайте вариант, который Вам более удобен и понятен.

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

В отличие от независимого регистра сведений, все записи в таком регистре подчиненны конкретному регистратору. Поэтому для редактирования записей Вам нужно установить отбор по регистратору и прочитать данные. После этого можно изменять запись в регистре. Давайте выполним эти действия на примерах.

В качестве примера будем использовать регистр сведений ЦеныНоменклатуры. Ниже показаны свойства этого регистра:

В примере ниже мы будем увеличивать оптовую цену номенклатуры в записях по одному заданному регистратору: 

Процедура УвеличитьЦенуНоменклатуры(Регистратор, Номенклатура, ВидЦеныОптовая) Набор = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей(); Набор.Отбор.Регистратор.Установить(Регистратор); Набор.Прочитать(); Для Каждого Запись Из Набор Цикл Если Запись.Номенклатура = Номенклатура И Запись.ВидЦены = ВидЦеныОптовая Тогда Запись.Цена = Запись.Цена * 1.3; КонецЕсли; КонецЦикла; Если Набор.Модифицированность() Тогда Набор.Записать(); КонецЕсли; КонецПроцедуры

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

А теперь увеличим все оптовые цены без указания конкретного регистратора. Для этого будем использовать запрос, чтобы определить все регистраторы, по которым есть нужные нам записи в регистре сведений:

Процедура УвеличитьЦенуНоменклатуры(Номенклатура, ВидЦеныОптовая) Запрос = Новый Запрос( "ВЫБРАТЬ | ЦеныНоменклатуры.Регистратор КАК Регистратор |ИЗ | РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры |ГДЕ | ЦеныНоменклатуры.Номенклатура = &Номенклатура | И ЦеныНоменклатуры.ВидЦены = &ВидЦеныОптовая"); Запрос.УстановитьПараметр("Номенклатура", Номенклатура); Запрос.УстановитьПараметр("ВидЦеныОптовая", ВидЦеныОптовая); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Набор = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей(); Набор.Отбор.Регистратор.Установить(Выборка.Регистратор); Набор.Прочитать(); Для Каждого Запись Из Набор Цикл Если Запись.Номенклатура = Номенклатура И Запись.ВидЦены = ВидЦеныОптовая Тогда Запись.Цена = Запись.Цена * 1.3; КонецЕсли; КонецЦикла; Если Набор.Модифицированность() Тогда Набор.Записать(); КонецЕсли; КонецЦикла; КонецПроцедуры

Если сравните этот пример с первым — изменилось только определение регистратора. Если первый пример изменял данные только в одном регистраторе — последний пример изменит записи по всем регистраторам в регистре сведений.

На этих небольших примерах мы рассмотрели основные особенности изменения отдельных записей в регистрах сведений. Каждый регистр требует своего особенного подхода — но если Вы поймете общую последовательность действий по изменению регистра сведений, сложностей по работе с регистрами у Вас не будет.

В дополнение приводим пример работы с нашей обработкой по изменению записей в произвольных регистрах сведений, скачать которую Вы можете по этой ссылке.

Наши разработки:

Регистры сведений позволяют хранить произвольные данные в разрезе нескольких измерений. Они позволяют получить срез информации (текущее значение показателей) на любой момент времени.

Для регистров сведений связь с регистраторами не всегда обязательна.

Добавление записей в регистр сведений

Программно добавить записи в регистр сведений можно двумя способами:

  • с помощью объекта МенеджерЗаписи;
  • с помощью объекта НаборЗаписей.

Добавление записей с помощью объекта МенеджерЗаписи

Объект МенеджерЗаписи можно использовать только для работы с независимыми регистрами. Причем можно обрабатывать только одну запись. Таким образом, для того, чтобы в периодический, независимый регистр сведений “КурсыВалют” с измерением “Валюта” и ресурсами “Курс” и “Кратность” добавить одну запись – курс и кратность валюты на определенную дату – можно использовать следующий код:

КурсыВалютМенеджерЗаписи = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();

КурсыВалютМенеджерЗаписи.Период     = ДатаУстановкиКурса; // Дата курса 
КурсыВалютМенеджерЗаписи.Валюта     = Валюта; // СправочникСсылка.Валюты
КурсыВалютМенеджерЗаписи.Курс       = ЗначениеКурсаНаДату; // Устанавливаемый курс
КурсыВалютМенеджерЗаписи.Кратность  = 1; // Кратность

КурсыВалютМенеджерЗаписи.Записать();

Добавление записей в независимый регистр сведений помощью объекта НаборЗаписей

Добавление записей в независимый регистр сведений с помощью НабораЗаписей выполняется по следующему алгоритму:

  1. Создание объекта НабораЗаписи;
  2. Установка отбора по измерениям и периоду (если регистр периодический);
  3. Добавление и заполнение значений полей записи;
  4. Запись набора.

Для примера выполним добавление записей в тот же регистр сведений “КурсыВалют“, предварительно установив отбор по измерению “Валюта” и периоду.

КурсыВалютНаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();

КурсыВалютНаборЗаписей.Отбор.Валюта.Установить(Валюта);
КурсыВалютНаборЗаписей.Отбор.Период.Установить(ДатаУстановкиКурса);

Запись = КурсыВалютНаборЗаписей.Добавить();
Запись.Период = ДатаУстановкиКурса;
Запись.Валюта = Валюта; // СправочникСсылка.Валюты
Запись.Курс   = ЗначениеКурсаНаДату; // Устанавливаемый курс
Запись.Кратность = 1; // Кратность

КурсыВалютНаборЗаписей.Записать();

Добавление записей в регистр сведений, подчиненный регистратору

Для добавление записей в регистр сведений, подчиненный регистратору, выполняется с помощью объекта НаборЗаписей по следующему алгоритму:

  1. Создание объекта НаборЗаписей;
  2. Установка отбора по определенному регистратору;
  3. Заполнение записей набора;
  4. Запись набора.
// ДанныеДляПроведения - хранит данные для заполнения регистра сведений (например, выгрузка результата запроса)

НаборЗаписей = РегистрыСведений.МероприятияТрудовойДеятельности.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Регистратор);

ЗаполнитьЗначенияСвойств(НаборЗаписей.Добавить(), ДанныеДляПроведения);

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

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

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

Изменять записи в независимом регистре сведений можно как с помощью МенеджераЗаписи, так и с помощью НабораЗаписей. Изменение записей выполняется по следующему алгоритму:

  1. Создание объекта МенеджерЗаписи или НаборЗаписи;
  2. Установить отборы;
  3. Чтение записей из базы данных, соответствующих наложенному отбору;
  4. Редактирование полученных записей;
  5. Запись измененных записей.

При изменении записей в независимом регистре сведений с помощью объекта МенеджерЗаписи, действуют такие же ограничения как и при добавлении. При изменении записи с помощью менеджера, после чтения значений выполним проверку – есть ли записи для изменения.

КурсыВалютМенеджерЗаписи = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();

КурсыВалютМенеджерЗаписи.Период     = ДатаУстановкиКурса; // Дата курса 
КурсыВалютМенеджерЗаписи.Валюта     = Валюта; // СправочникСсылка.Валюты

КурсыВалютМенеджерЗаписи.Прочитать();

Если КурсыВалютМенеджерЗаписи.Выбран() Тогда
    КурсыВалютМенеджерЗаписи.Курс       = ЗначениеКурсаНаДату; // Устанавливаемый курс
    КурсыВалютМенеджерЗаписи.Кратность  = 1; // Кратность

    КурсыВалютМенеджерЗаписи.Записать();
КонецЕсли;

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

КурсыВалютНаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();

КурсыВалютНаборЗаписей.Отбор.Валюта.Установить(Валюта);
КурсыВалютНаборЗаписей.Отбор.Период.Установить(ДатаУстановкиКурса);

КурсыВалютНаборЗаписей.Прочитать();

Для Каждого Запись Из КурсыВалютНаборЗаписей Цикл
    Запись.Курс   = ЗначениеКурсаНаДату; // Устанавливаемый курс
    Запись.Кратность = 1; // Кратность
КонецЦикла;

КурсыВалютНаборЗаписей.Записать();

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

Изменение записей регистров, подчиненных регистраторам, возможно только с помощью наборов записей. При этом всегда используется отбор по регистратору. Нельзя добавлять или удалять отдельные записи. Можно только считывать и записывать записи по регистратору.

Изменение записей выполняется по следующему алгоритму:

  1. Создать объект НаборЗаписей;
  2. Установить отбор по определенному регистратору;
  3. Прочитать набор;
  4. Изменить записи набора;
  5. Записать набор.
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    МероприятияТрудовойДеятельности.Регистратор КАК Регистратор
    |ИЗ
    |    РегистрСведений.МероприятияТрудовойДеятельности КАК МероприятияТрудовойДеятельности";
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();

Пока Выборка.Следующий() Цикл
    
    Сообщить(СтрШаблон("Изменение записей по регистратору: %1", Выборка.Регистратор));

    НаборЗаписей = РегистрыСведений.МероприятияТрудовойДеятельности.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Регистратор.Установить(Регистратор);

    Для каждого Запись Из НаборЗаписей Цикл
        Запись.ДатаМероприятия = Дата(2021, 12, 12);
    КонецЦикла;

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

КонецЦикла;

Удаление записи в регистре сведений

Удаление записи из независимого регистра сведений

Для удаления записи из независимого регистра сведений выполняется по следующему алгоритму:

  1. Создать объект НаборЗаписей;
  2. Установить нужные отборы по измерениям и, если регистр периодический, периоду;
  3. Записать набор без предварительного чтения.
НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();

НаборЗаписей.Отбор.Валюта.Установить(Валюта);
НаборЗаписей.Отбор.Период.Установить(ДатаУстановкиКурса);

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

Удаление записи из регистра сведений подчиненного регистратору

  1. Создать объект НаборЗаписей;
  2. Установить отбор по определенному регистратору;
  3. Прочитать набор;
  4. Удалить записи из набора (по условию);
  5. Записать набор.
НаборЗаписей = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Регистратор);

НаборЗаписей.Прочитать();

Для Каждого Запись Из НаборЗаписей Цикл

    Если Запись.Валюта = Валюта Тогда 
        // Предположим, что хотим удалить записи по регистратору
        // с определенной Валютой

        НаборЗаписей.Удалить(Запись);

    КонецЕсли;

КонецЦикла;

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

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

Изменение записи в регистре сведений, частая задача для программиста 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с – ссылка

Добрый день. У нас Зарплата и управление персоналом КОРП, редакция 3.1 (3.1.14.635) . Выяснилось, что в мае была Ошибка 10229965 (https://partners.v8.1c.ru/forum/topic/1976382) , у некоторых сотрудников (по которым было несколько изменений оплаты труда) исчезли плановые начисления/удержания, при чем в документах стоят корректно (профвзносы, у некоторых ежемесячная премия, введенные еще в 2020. Версия тогда была 3.1.14.615. ) Как можно поправить регистр (Значения периодических показателей расчета зарплаты (для сотрудников) интервальный). Насколько я понимаю, испортился этот регистр , а он не подчинен регистратору и исправлена ли эта ошибка в версии (3.1.14.635), пересчитается/перезаполнится ли регистр автоматом ,если перейдем на 3.18 ? И как найти тех кому надо восстановить плановые начисления/удержания? Перепровести первоначальный документ-не вариант, так как многие уволились и они действительно не должны быть в этом регистре.

Добавлено через 1 минуту
Ну тогда занудство от первоисточника

Назначение и особенности использования менеджера записи регистра сведений
Объект РегистрСведенийМенеджерЗаписи используется для работы с независимыми регистрами сведений (не подчиненными регистратору). Можно сказать, что данный объект является вспомогательным.

Основным объектом, предназначенным для модификации записей регистра сведений, является РегистрСведенийНаборЗаписей. Он позволяет считывать и записывать группы записей, отобранные по значениям измерений и периоду (для периодических регистров сведений). В модуле набора записей имеются обработчики событий, позволяющие контролировать все операции изменения данных регистра.

Объект РегистрСведенийМенеджерЗаписи используется в тех случаях, когда необходимо выполнить операцию только над одной записью. При этом менеджер записи использует для выполнения записи два набора записей, устанавливая им соответствующие значения отборов. Поэтому обработчики событий набора записей вызываются и тогда, когда для записи данных используется менеджер записи.

При редактировании записи в списке регистра сведений система использует именно менеджер записи. На примере редактирования списка видно, что менеджер записей предоставляет разработчику модель манипулирования записями регистра, допускающую корректировку значений измерений. То есть менеджер выполняет удаление записи со старыми значениями измерений и запись с новыми значениями. Именно такая модель выглядит в списке для пользователя как редактирование записи. Таким образом, основное назначение менеджера записи — обеспечить без дополнительных сложностей редактирование отдельных записей в интерактивных режимах.

С точки зрения производительности использование наборов записей будет максимально эффективным. Использование менеджера записей в некоторых случаях будет столь же эффективным, а в некоторых менее, так как будут выполняться лишние действия.

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