Программная запись данных в регистр сведений
Есть задачка записать цены на номенклатуру программно в РС.
Подробнее: Для начала мы грузим файл, потом записываем данные в номенклатуру и вместе с этим же записывать данные в РС "Цены на номенклатуру", а после нажимаем на кнопку "Создать Документ", где выбираем номенклатуру и цены автоматически проставляются.
Возникает ошибка после "НаборЗаписей.Отбор." - не выбирается регистратор.
Код:
Подробнее: Для начала мы грузим файл, потом записываем данные в номенклатуру и вместе с этим же записывать данные в РС "Цены на номенклатуру", а после нажимаем на кнопку "Создать Документ", где выбираем номенклатуру и цены автоматически проставляются.
Возникает ошибка после "НаборЗаписей.Отбор." - не выбирается регистратор.
Код:
&НаКлиенте
Процедура ЗаписатьДанные(Команда)
ЗаписатьДанныеНаСервере();
КонецПроцедуры
&НаСервере
Процедура ЗаписатьДанныеНаСервере()
Для Каждого СтрокаДанных Из Объект.ДанныеФайла Цикл
Наименование = СтрокаДанных.ITEMNO + "| " + СтрокаДанных.GENDER + "| " + СтрокаДанных.STORY + "| " + СтрокаДанных.DESCRIPTION + "| " + СтрокаДанных.COLOUR;
Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(Наименование, Истина);
Если Не ЗначениеЗаполнено(Номенклатура) Тогда
Номенклатура = Справочники.Номенклатура.СоздатьЭлемент();
Иначе
Номенклатура = Номенклатура.ПолучитьОбъект();
КонецЕсли;
Номенклатура.Артикул = СтрокаДанных.ITEMNO;
Номенклатура.Наименование = Наименование;
Номенклатура.Родитель = СоздатьГруппу(СтрокаДанных);
//Функция на возвращение созданной группы. вернуть в переменную номенклатура.родитель
Номенклатура.Записать();
НаборЗаписей = РегистрыСведений.Цены.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Номенклатура);
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Номенклатура = Номенклатура;
НоваяЗапись.РозничнаяЦена = СтрокаДанных.STANDARDFOBCNY;
НоваяЗапись.ЗакупочнаяЦена = СтрокаДанных.FOBCNY;
НаборЗаписей.Записать();
КонецЦикла;
Сообщить("Группы созданы");
Сообщить("Загрузка выполнена успешно!");
КонецПроцедуры
&НаКлиенте
Процедура СоздатьДокумент(Команда)
СоздатьДокументНаСервере();
КонецПроцедуры
&НаСервере
Процедура СоздатьДокументНаСервере()
НовыйДокумент = Документы.УстановкаЦенНоменнклатуры.СоздатьДокумент();
НовыйДокумент.Дата = ТекущаяДата();
Для каждого СтрокаДанных Из Объект.ДанныеФайла Цикл
Строка = НовыйДокумент.ПереченьНоменклатуры.Добавить();
Строка.Номенклатура = СтрокаДанных.Номенклатура.Артикул;
Строка.ЗакупочнаяЦена = СтрокаДанных.STANDARDFOBCNY;
Строка.РозничнаяЦена = СтрокаДанных.FOBCNY;
КонецЦикла;
НовыйДокумент.Записать();
КонецПроцедуры
ПоказатьПо теме из базы знаний
- Выгрузка-загрузка любых данных из 1С (и измененных) в XML между похожими конфигурациями (ФАЙЛ, HTTP, COM) ЛЮБЫХ баз 1С 8.1-8.3 с обработкой и поиском данных по произвольным полям поиска
- Готовое решение для протоколирования записи и удаления данных в регистре сведений
- Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2/3.0
- Перенос данных из ERP 2 / КА 2 / УТ 11 в БП 3.0. Переносятся документы, начальные остатки и справочники
- Программное событие "ПослеЗавершенияТранзакции"
Найденные решения
1 проверьте название регистра Цены (не ЦеныНоменклатуры ?)
2 запись в регистр рекомендую копировать из синтаксис помощника
2 запись в регистр рекомендую копировать из синтаксис помощника
КурсыВалют = РегистрыСведений.КурсыВалют;
НаборКурсов = КурсыВалют.СоздатьНаборЗаписей();
Доллар = Справочники.Валюты.НайтиПоНаименованию("USD");
НаборКурсов.Отбор.Валюта.Установить(Доллар);
НаборКурсов.Отбор.Период.Установить(НачалоДня(ТекущаяДата()));
НаборКурсов.Прочитать();
Если НаборКурсов.Количество() = 0 Тогда
НовыйКурс = НаборКурсов.Добавить();
НовыйКурс.Валюта = Доллар;
НовыйКурс.Период = ТекущаяДата();
ИначеЕсли НаборКурсов.Количество() = 1 Тогда
НовыйКурс = НаборКурсов[0];
Иначе
Предупреждение(НСтр("ru = 'Курс валюты задается один раз в день.';"
+ " en = 'Rate is set once a day.'"), 60);
Возврат;
КонецЕсли;
НовыйКурс.Курс = 31.44;
НовыйКурс.Кратность = 1;
НаборКурсов.Записать();
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
"НаборЗаписей.Отбор."
так попробуйте НоменклатураДляЗаписи = Номенклатура.Ссылка;
НаборЗаписей = РегистрыСведений.Цены.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(НоменклатураДляЗаписи);
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Номенклатура = НоменклатураДляЗаписи;
НоваяЗапись.РозничнаяЦена = СтрокаДанных.STANDARDFOBCNY;
НоваяЗапись.ЗакупочнаяЦена = СтрокаДанных.FOBCNY;
НаборЗаписей.Записать();
1 проверьте название регистра Цены (не ЦеныНоменклатуры ?)
2 запись в регистр рекомендую копировать из синтаксис помощника
2 запись в регистр рекомендую копировать из синтаксис помощника
КурсыВалют = РегистрыСведений.КурсыВалют;
НаборКурсов = КурсыВалют.СоздатьНаборЗаписей();
Доллар = Справочники.Валюты.НайтиПоНаименованию("USD");
НаборКурсов.Отбор.Валюта.Установить(Доллар);
НаборКурсов.Отбор.Период.Установить(НачалоДня(ТекущаяДата()));
НаборКурсов.Прочитать();
Если НаборКурсов.Количество() = 0 Тогда
НовыйКурс = НаборКурсов.Добавить();
НовыйКурс.Валюта = Доллар;
НовыйКурс.Период = ТекущаяДата();
ИначеЕсли НаборКурсов.Количество() = 1 Тогда
НовыйКурс = НаборКурсов[0];
Иначе
Предупреждение(НСтр("ru = 'Курс валюты задается один раз в день.';"
+ " en = 'Rate is set once a day.'"), 60);
Возврат;
КонецЕсли;
НовыйКурс.Курс = 31.44;
НовыйКурс.Кратность = 1;
НаборКурсов.Записать();
Показать
(11) Имеете ввиду так?:
НаборЗаписей = РегистрыСведений.Цены.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Цены.Установить(Номенклатура);
НаборЗаписей.Прочитать();
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Номенклатура = Номенклатура;
НоваяЗапись.РозничнаяЦена = СтрокаДанных.STANDARDFOBCNY;
НоваяЗапись.ЗакупочнаяЦена = СтрокаДанных.FOBCNY;
НаборЗаписей.Записать();
НаборЗаписей = РегистрыСведений.Цены.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Цены.Установить(Номенклатура);
НаборЗаписей.Прочитать();
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Номенклатура = Номенклатура;
НоваяЗапись.РозничнаяЦена = СтрокаДанных.STANDARDFOBCNY;
НоваяЗапись.ЗакупочнаяЦена = СтрокаДанных.FOBCNY;
НаборЗаписей.Записать();
(12) проверьте наличие цены как тут
и еще проверьте что заполняете все измерения регистра (например тип цен)
Если НаборКурсов.Количество() = 0 Тогда
НовыйКурс = НаборКурсов.Добавить();
НовыйКурс.Валюта = Доллар;
НовыйКурс.Период = ТекущаяДата();
ИначеЕсли НаборКурсов.Количество() = 1 Тогда
НовыйКурс = НаборКурсов[0];
Иначе
и еще проверьте что заполняете все измерения регистра (например тип цен)
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот