Программная запись данных в регистр сведений

1. YA_1446545432 07.08.24 11:11 Сейчас в теме
Есть задачка записать цены на номенклатуру программно в РС.
Подробнее: Для начала мы грузим файл, потом записываем данные в номенклатуру и вместе с этим же записывать данные в РС "Цены на номенклатуру", а после нажимаем на кнопку "Создать Документ", где выбираем номенклатуру и цены автоматически проставляются.

Возникает ошибка после "НаборЗаписей.Отбор." - не выбирается регистратор.

Код:

&НаКлиенте
Процедура ЗаписатьДанные(Команда)
	ЗаписатьДанныеНаСервере();
КонецПроцедуры

&НаСервере
Процедура ЗаписатьДанныеНаСервере()
	Для Каждого СтрокаДанных Из Объект.ДанныеФайла Цикл 
		Наименование = СтрокаДанных.ITEMNO + "| " + СтрокаДанных.GENDER + "| " + СтрокаДанных.STORY + "| " + СтрокаДанных.DESCRIPTION + "| " + СтрокаДанных.COLOUR;
		Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(Наименование, Истина);
		
		Если Не ЗначениеЗаполнено(Номенклатура) Тогда
			Номенклатура = Справочники.Номенклатура.СоздатьЭлемент(); 
		Иначе
			Номенклатура = Номенклатура.ПолучитьОбъект();
		КонецЕсли;
		
		Номенклатура.Артикул = СтрокаДанных.ITEMNO;
		Номенклатура.Наименование = Наименование;
		Номенклатура.Родитель = СоздатьГруппу(СтрокаДанных);
		//Функция на возвращение созданной группы. вернуть в переменную номенклатура.родитель
		Номенклатура.Записать();
		
		НаборЗаписей = РегистрыСведений.Цены.СоздатьНаборЗаписей();
		НаборЗаписей.Отбор.Регистратор.Установить(Номенклатура);
		НоваяЗапись = НаборЗаписей.Добавить();
		НоваяЗапись.Номенклатура = Номенклатура;
		НоваяЗапись.РозничнаяЦена = СтрокаДанных.STANDARDFOBCNY;
		НоваяЗапись.ЗакупочнаяЦена = СтрокаДанных.FOBCNY;
		НаборЗаписей.Записать();
	КонецЦикла;	
	Сообщить("Группы созданы");
	Сообщить("Загрузка выполнена успешно!");	
КонецПроцедуры

&НаКлиенте
Процедура СоздатьДокумент(Команда)
	СоздатьДокументНаСервере();
КонецПроцедуры

&НаСервере
Процедура СоздатьДокументНаСервере()
	НовыйДокумент = Документы.УстановкаЦенНоменнклатуры.СоздатьДокумент();
	НовыйДокумент.Дата = ТекущаяДата();   
	Для каждого СтрокаДанных Из Объект.ДанныеФайла Цикл
		Строка = НовыйДокумент.ПереченьНоменклатуры.Добавить();
		Строка.Номенклатура = СтрокаДанных.Номенклатура.Артикул;
		Строка.ЗакупочнаяЦена = СтрокаДанных.STANDARDFOBCNY;
		Строка.РозничнаяЦена = СтрокаДанных.FOBCNY;
	КонецЦикла;
	НовыйДокумент.Записать();
КонецПроцедуры
Показать
По теме из базы знаний
Найденные решения
9. Lenten 25 07.08.24 12:05 Сейчас в теме
1 проверьте название регистра Цены (не ЦеныНоменклатуры ?)


2 запись в регистр рекомендую копировать из синтаксис помощника


КурсыВалют = РегистрыСведений.КурсыВалют;
НаборКурсов = КурсыВалют.СоздатьНаборЗаписей();
Доллар = Справочники.Валюты.НайтиПоНаименованию("USD");
НаборКурсов.Отбор.Валюта.Установить(Доллар);
НаборКурсов.Отбор.Период.Установить(НачалоДня(ТекущаяДата()));
НаборКурсов.Прочитать();
Если НаборКурсов.Количество() = 0 Тогда
    НовыйКурс = НаборКурсов.Добавить();
    НовыйКурс.Валюта = Доллар;
    НовыйКурс.Период = ТекущаяДата();
ИначеЕсли НаборКурсов.Количество() = 1 Тогда
    НовыйКурс = НаборКурсов[0];
Иначе
    Предупреждение(НСтр("ru = 'Курс валюты задается один раз в день.';"
     + " en = 'Rate is set once a day.'"), 60);
    Возврат;
КонецЕсли;
НовыйКурс.Курс = 31.44;
НовыйКурс.Кратность = 1;
НаборКурсов.Записать();
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
7. user1619761 07.08.24 12:02 Сейчас в теме
(1)
"НаборЗаписей.Отбор."
так попробуйте
НоменклатураДляЗаписи = Номенклатура.Ссылка;
НаборЗаписей = РегистрыСведений.Цены.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(НоменклатураДляЗаписи);
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Номенклатура = НоменклатураДляЗаписи;
НоваяЗапись.РозничнаяЦена = СтрокаДанных.STANDARDFOBCNY;
НоваяЗапись.ЗакупочнаяЦена = СтрокаДанных.FOBCNY;
НаборЗаписей.Записать();
2. пользователь 07.08.24 11:13
Сообщение было скрыто модератором.
...
4. пользователь 07.08.24 11:49
Сообщение было скрыто модератором.
...
5. пользователь 07.08.24 11:50
Сообщение было скрыто модератором.
...
6. пользователь 07.08.24 11:57
Сообщение было скрыто модератором.
...
8. пользователь 07.08.24 12:03
Сообщение было скрыто модератором.
...
9. Lenten 25 07.08.24 12:05 Сейчас в теме
1 проверьте название регистра Цены (не ЦеныНоменклатуры ?)


2 запись в регистр рекомендую копировать из синтаксис помощника


КурсыВалют = РегистрыСведений.КурсыВалют;
НаборКурсов = КурсыВалют.СоздатьНаборЗаписей();
Доллар = Справочники.Валюты.НайтиПоНаименованию("USD");
НаборКурсов.Отбор.Валюта.Установить(Доллар);
НаборКурсов.Отбор.Период.Установить(НачалоДня(ТекущаяДата()));
НаборКурсов.Прочитать();
Если НаборКурсов.Количество() = 0 Тогда
    НовыйКурс = НаборКурсов.Добавить();
    НовыйКурс.Валюта = Доллар;
    НовыйКурс.Период = ТекущаяДата();
ИначеЕсли НаборКурсов.Количество() = 1 Тогда
    НовыйКурс = НаборКурсов[0];
Иначе
    Предупреждение(НСтр("ru = 'Курс валюты задается один раз в день.';"
     + " en = 'Rate is set once a day.'"), 60);
    Возврат;
КонецЕсли;
НовыйКурс.Курс = 31.44;
НовыйКурс.Кратность = 1;
НаборКурсов.Записать();
Показать
10. YA_1446545432 07.08.24 12:08 Сейчас в теме
(9) Нет, "Цены". Потому как я выполняю задание в существующей базе
11. Lenten 25 07.08.24 12:13 Сейчас в теме
(10) не знаю как в вашей базе, но скорее всего

НаборЗаписей.Отбор.Регистратор.Установить(Номенклатура);


регистратор тут документ установки цен номенклатуры, а не справочник номенклатуры.

еще у вас Прочитать не хватает
12. YA_1446545432 07.08.24 12:37 Сейчас в теме
(11) Имеете ввиду так?:

НаборЗаписей = РегистрыСведений.Цены.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Цены.Установить(Номенклатура);
НаборЗаписей.Прочитать();
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Номенклатура = Номенклатура;
НоваяЗапись.РозничнаяЦена = СтрокаДанных.STANDARDFOBCNY;
НоваяЗапись.ЗакупочнаяЦена = СтрокаДанных.FOBCNY;
НаборЗаписей.Записать();
13. Lenten 25 07.08.24 12:45 Сейчас в теме
(12) проверьте наличие цены как тут

Если НаборКурсов.Количество() = 0 Тогда
    НовыйКурс = НаборКурсов.Добавить();
    НовыйКурс.Валюта = Доллар;
    НовыйКурс.Период = ТекущаяДата();
ИначеЕсли НаборКурсов.Количество() = 1 Тогда
    НовыйКурс = НаборКурсов[0];
Иначе


и еще проверьте что заполняете все измерения регистра (например тип цен)
14. user1619761 07.08.24 13:19 Сейчас в теме
(12) в отладчике какое значение покажет у строки
НаборЗаписей.Отбор.Регистратор.ТипЗначения.Типы().Найти(ТипЗнч(Номенклатура))
?
15. user2033930 07.08.24 13:27 Сейчас в теме
(14) Ну вот, пришёл, и всю малину... ))) Тут так интересно было!
Оставьте свое сообщение

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