Ошибка при программном заполнении непериодического независимого регистра сведений

1. гаврюша 3 08.09.19 10:21 Сейчас в теме
Подскажите, пожалуйста: нужно в непериодический, независимый РС записать данные о статусе и годности номенклатуры.
Статус и годность нужны только на текущий момент, поэтому непериодический. Формирую записи документом. Если в документ, сформированный ранее никаких записей не добавлять, то все записывается нормально. Если необходимо добавить запись (еще номенклатуру), то при проведении документа выдается ошибка: "Запись не верна! Значение поля не соответствует установленному отбору: МойРегистр, Склад, Номенклатура". Хотелось бы не подчиненный регистратору, чтобы можно было при необходимости исправить статус номенклатуры вручную. Что необходимо исправить чтобы можно было добавлять запись в документ и он проводился?
	// + Очищаю ранее записанные записи этого документа	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	элдРеестрМатериалов.Склад,
		|	элдРеестрМатериалов.Номенклатура,
		|	элдРеестрМатериалов.Статус,
		|	элдРеестрМатериалов.Годность
		|ИЗ
		|	РегистрСведений.элдРеестрМатериалов КАК элдРеестрМатериалов
		|ГДЕ
		|	элдРеестрМатериалов.Документ = &Документ";

	Запрос.УстановитьПараметр("Документ", ЭтотОбъект.Ссылка);
	Выборка = Запрос.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл
		НЗап=РегистрыСведений.элдРеестрМатериалов.СоздатьНаборЗаписей();
	        НЗап.Отбор.Номенклатура.Установить(Выборка.Номенклатура);
	        НЗап.Отбор.Склад.Установить(Выборка.Склад);
			НЗап.Очистить();
			НЗап.Записать();
	КонецЦикла;
	// - Очищаю ранее записанные записи этого документа	
	
	//  + Записываю записи документа в регистр
	ТЧ = ЭтотОбъект.Номенклатура.Выгрузить();
	
		Для каждого строка из ТЧ Цикл
		
		Если строка.Статус <> Справочники.Статус.ПустаяСсылка() Тогда
			
	        НоваяЗапись=РегистрыСведений.элдРеестрМатериалов.СоздатьНаборЗаписей();
	        
	        НоваяЗапись.Отбор.Номенклатура.Установить(строка.Номенклатура);
	        НоваяЗапись.Отбор.Склад.Установить(строка.Склад);
			
	        ДобавленнаяСтрока=НоваяЗапись.Добавить();
	        ДобавленнаяСтрока.Склад                               = ЭтотОбъект.Склад;
	        ДобавленнаяСтрока.Номенклатура                 = строка.номенклатура;
	        ДобавленнаяСтрока.Статус                              = строка.Статус;
	        ДобавленнаяСтрока.Годность	          = Строка.Годность;
	        ДобавленнаяСтрока.Документ	          = ЭтотОбъект.Ссылка;
	        
	        НоваяЗапись.Записать(Истина);
		КонецЕсли;	
	КонецЦикла;
Показать
По теме из базы знаний
Найденные решения
2. nomad_irk 79 08.09.19 10:41 Сейчас в теме
Либо читайте набор записей и добавляйте в него новые строки, либо используйте МенеджерЗаписи() для добавления записей.
7. гаврюша 3 08.09.19 13:48 Сейчас в теме
(2) Через менеджер записывается, но у меня реквизит - Документ (из которого данные записываются). Почему-то этот документ через менеджер не записывается в реквизиты...
			РС=РегистрыСведений.элдРеестрМатериалов.СоздатьМенеджерЗаписи();
				РС.Склад = ЭтотОбъект.Склад;
				РС.Номенклатура = Строка.Номенклатура;
				РС.Статус = Строка.Статус;
				РС.Годность = Строка.Годность;
				РС.Документ = ЭтотОбъект.Ссылка;
				РС.Прочитать();
				Если не РС.Выбран() Тогда
					РС.Склад = ЭтотОбъект.Склад;
					РС.Номенклатура = Строка.Номенклатура;
					РС.Статус = Строка.Статус;
					РС.Годность = Строка.Годность;
					РС.Документ = ЭтотОбъект.Ссылка;
			            РС.Записать();
Показать


Разобралась. Ошиблась при записи документа (ссылка), а без документа регистр не очищается...
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 79 08.09.19 10:41 Сейчас в теме
Либо читайте набор записей и добавляйте в него новые строки, либо используйте МенеджерЗаписи() для добавления записей.
5. гаврюша 3 08.09.19 12:59 Сейчас в теме
(2)Исправила:
 НоваяЗапись=РегистрыСведений.элдРеестрНеликвидовМатериалов.СоздатьНаборЗаписей();
			
			НоваяЗапись.Отбор.Номенклатура.Установить(Выборка.Номенклатура);
			НоваяЗапись.Отбор.Номенклатура.Использование = Истина;
	        НоваяЗапись.Отбор.Склад.Установить(Выборка.Склад);
			НоваяЗапись.Отбор.Склад.Использование = Истина;

			НоваяЗапись.Прочитать();
			
	        ДобавленнаяСтрока=НоваяЗапись.Добавить();
Показать


Ошибка осталась
6. гаврюша 3 08.09.19 13:24 Сейчас в теме
(2) Спасибо! Менеджер записи помог
7. гаврюша 3 08.09.19 13:48 Сейчас в теме
(2) Через менеджер записывается, но у меня реквизит - Документ (из которого данные записываются). Почему-то этот документ через менеджер не записывается в реквизиты...
			РС=РегистрыСведений.элдРеестрМатериалов.СоздатьМенеджерЗаписи();
				РС.Склад = ЭтотОбъект.Склад;
				РС.Номенклатура = Строка.Номенклатура;
				РС.Статус = Строка.Статус;
				РС.Годность = Строка.Годность;
				РС.Документ = ЭтотОбъект.Ссылка;
				РС.Прочитать();
				Если не РС.Выбран() Тогда
					РС.Склад = ЭтотОбъект.Склад;
					РС.Номенклатура = Строка.Номенклатура;
					РС.Статус = Строка.Статус;
					РС.Годность = Строка.Годность;
					РС.Документ = ЭтотОбъект.Ссылка;
			            РС.Записать();
Показать


Разобралась. Ошиблась при записи документа (ссылка), а без документа регистр не очищается...
3. dhurricane 08.09.19 11:26 Сейчас в теме
Могу предположить, что ошибка здесь:
            НоваяЗапись.Отбор.Номенклатура.Установить(строка.Номенклатура);
            НоваяЗапись.Отбор.Склад.Установить(строка.Склад);   // <-- в отбор склад устанавливается один
            
            ДобавленнаяСтрока=НоваяЗапись.Добавить();
            ДобавленнаяСтрока.Склад                               = ЭтотОбъект.Склад; // <-- у записи склад совсем другой
            ДобавленнаяСтрока.Номенклатура                 = строка.номенклатура;
4. гаврюша 3 08.09.19 12:52 Сейчас в теме
(3) Я писала
	        НоваяЗапись.Отбор.Номенклатура.Установить(Выборка.Номенклатура);
			НоваяЗапись.Отбор.Номенклатура.Использование = Истина;
	        НоваяЗапись.Отбор.Склад.Установить(Выборка.Склад);
			НоваяЗапись.Отбор.Склад.Использование = Истина;

Все равно ошибка
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот