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