Имя: Пароль:
1C
1С v8
Запись в регистр сведений
0 Shalun
 
10.02.22
12:56
Всем привет! Видел аналогичную тему, но из массы ответов ни одного дельного и не нашел. По этому прошу ответить по существу.
ИМЕЕМ: Не периодический регистр сведений, с измерением "Номенклатура" и ресурс "Поставщик"
Пишем КОД в документе:
НаборЗаписи = РегистрыСведений.ОсновныеПоставщики.СоздатьНаборЗаписей();
    Для каждого Строка Из Товары Цикл
        СтрЗаписи = НаборЗаписи.Добавить();
        СтрЗаписи.Номенклатура = Строка.Номенклатура;
        СтрЗаписи.Поставщик = Контрагент;
    КонецЦикла;
НаборЗаписи.Записать();

НУЖНО:Записи с новыми измерениями добавлял, с существующимим - замещал.

В данном случае, замещаются все записи в регистре новыми.
Если установить параметр Записать(ЛОЖЬ), записи добавляются, но тогда и с имеющемся измерением выдает ошибку, не замещает.
ВОПРОС: Как сделать что бы Записи с новыми измерениями добавлялись, а с существующими - замещались?
Заранее благодарю за конкретные ответы.
1 НЕА123
 
10.02.22
12:59
НаборЗаписи.Прочитать()
2 Ёпрст
 
10.02.22
13:00
(0) отбор
3 fisher
 
10.02.22
13:00
Нужно устанавливать отборы по измерениям. Запись без отборов - замещает ВСЕ содержимое регистра.
ЗЫ. Структура регистра плохая. В общем случае может быть больше одного поставщика одной номенклатуры.
4 NurSagen
 
10.02.22
13:01
Чтоб совсем не боятся затереть - можно внутри цикла писать создать менеджер записи и в него писать, вместо набора записей.
5 Повелитель
 
10.02.22
13:01
(0)
Набор тут лишний, нужна запись
мЗапись = РегистрыСведений.ОсновныеПоставщики.СоздатьМенеджерЗаписи();
    Для каждого Строка Из Товары Цикл
        СтрЗаписи = мЗапись .Добавить();
        СтрЗаписи.Номенклатура = Строка.Номенклатура;
        СтрЗаписи.Поставщик = Контрагент;
    КонецЦикла;
мЗапись.Записать();
6 Повелитель
 
10.02.22
13:02
(5) Упс.

Для каждого Строка Из Товары Цикл
мЗапись = РегистрыСведений.ОсновныеПоставщики.СоздатьМенеджерЗаписи();
        СтрЗаписи = мЗапись .Добавить();
        СтрЗаписи.Номенклатура = Строка.Номенклатура;
        СтрЗаписи.Поставщик = Контрагент;
    КонецЦикла;
мЗапись.Записать();
7 Повелитель
 
10.02.22
13:02
(6) Не мой день ))

Для каждого Строка Из Товары Цикл
мЗапись = РегистрыСведений.ОсновныеПоставщики.СоздатьМенеджерЗаписи();
        СтрЗаписи = мЗапись .Добавить();
        СтрЗаписи.Номенклатура = Строка.Номенклатура;
        СтрЗаписи.Поставщик = Контрагент;
мЗапись.Записать(Истина);
КонецЦикла;
8 fisher
 
10.02.22
13:04
Если писать через менеджер записи - желательно транзакцией обрамить. Если сильно "жирная" будет - то бить на несколько.
9 Shalun
 
10.02.22
13:21
Парни, СПАСБО!
Не совсем разобрался с Отборм, и Прочитать, ку да их вставлять, внутрь цикла что ли?
Но помогло через МенеджерЗаписи:

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

(Повелитель) У МенеджераЗаписи нет метода "Добавить".
10 mistеr
 
10.02.22
13:26
(0) Раз пишешь код в документе, значит регистр подчинен регистратору. А раз подчинен, то нужно всегда делать отбор по регистратору.
11 unbred
 
10.02.22
13:44
(10) может "товары" - это переменная, а не ТЧ))
12 unbred
 
10.02.22
13:45
(10) пардон. "КОД в документе"..
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший