Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
23 апр 2024, 11:24

Загрузить список значений в регистр сведений

Автор uchenik96, 18 июл 2018, 17:29

0 Пользователей и 2 гостей просматривают эту тему.

uchenik96

Всем здравствуйте!!
У меня есть реквизит на форме номенклатуры с типом СписокЗначений(типзначения строка).
Заполняю этот реквизит в предприятии, НЕ программно.Список может заполняться как угодно.
И этот список значений естественно не сохраняется, потому как не объект формы.
Следовательно тогда, хочу этот списокзначений сохранять в регистр сведений, чтобы при повторном открытии у меня в этот реквизит подтягивалось значение по данной номенклатуре.
Не могу понять как этот списокзначений сохранить в ресурс регистра сведений:dfbsdfbsdf:
Прилагаю код..

МультСелектСписок = Новый СписокЗначений;

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


LexaK

какая-то ерунда у вас в коде написана,
вот может вам поможет такая подсказка
создайте в регистре ресурс с типом ХранилищеЗначения
тогда перед записью в регистр, свой список значений помещаете в ХЗ

НоваяЗапись.ХранилищеСпискаЗначений = Новый ХранилищеЗначения(ВашСписокЗначений);

а после чтения/получения данных из регистра, "распаковываете"

ВашСписокЗначений = Запись.ХранилищеСпискаЗначений.Получить();

надеюсь это вам помогло в решении вашей задачи.
(есть еще и другие методы, но попробуйте пока этот)


если помогло нажмите: Спасибо!

uchenik96

Цитата: LexaK от 18 июл 2018, 18:06
какая-то ерунда у вас в коде написана,
вот может вам поможет такая подсказка
создайте в регистре ресурс с типом ХранилищеЗначения
тогда перед записью в регистр, свой список значений помещаете в ХЗ

НоваяЗапись.ХранилищеСпискаЗначений = Новый ХранилищеЗначения(ВашСписокЗначений);

а после чтения/получения данных из регистра, "распаковываете"

ВашСписокЗначений = Запись.ХранилищеСпискаЗначений.Получить();

надеюсь это вам помогло в решении вашей задачи.
(есть еще и другие методы, но попробуйте пока этот)


Давайте по порядку:


&ПриЗаписиНаСервере
я пишу
Набор = РегистрыСведений.СписокЗначенийНоменклатуры.СоздатьМенеджерЗаписи();
Набор.Номенклатура = Объект.Ссылка;
Набор.СписокЗначений = Новый ХранилищеЗначения(МультСписок);
Набор.Записать();



а в процедуре

&ПриЧтенииНаСервере
будет так :
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СписокЗначенийНоменклатуры.Номенклатура КАК Номенклатура,
| СписокЗначенийНоменклатуры.СписокЗначений КАК СписокЗначений
|ИЗ
| РегистрСведений.СписокЗначенийНоменклатуры КАК СписокЗначенийНоменклатуры
|ГДЕ
| СписокЗначенийНоменклатуры.Номенклатура = &Номенклатура";

Запрос.УстановитьПараметр("Номенклатура", Объект.Ссылка);

РезультатЗапроса = Запрос.Выполнить();

Выборка = РезультатЗапроса.Выбрать();
//
Пока Выборка.Следующий() Цикл
Строка = Выборка.СписокЗначений;
КонецЦикла;

МультСписок = Набор.СписокЗначений.Получить();


так нужно? У меня ошибка вылазит на счет "Набор" при чтении.
Ресурс также переделал.
   

Alex26

Цитата: uchenik96 от 18 июл 2018, 21:06Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| СписокЗначенийНоменклатуры.Номенклатура КАК Номенклатура,
| СписокЗначенийНоменклатуры.СписокЗначений КАК СписокЗначений
|ИЗ
| РегистрСведений.СписокЗначенийНоменклатуры КАК СписокЗначенийНоменклатуры
|ГДЕ
| СписокЗначенийНоменклатуры.Номенклатура = &Номенклатура"; Запрос.УстановитьПараметр("Номенклатура", Объект.Ссылка); РезультатЗапроса = Запрос.Выполнить(); Выборка = РезультатЗапроса.Выбрать();
// Пока Выборка.Следующий() Цикл
Строка = Выборка.СписокЗначений;
КонецЦикла;
МультСписок = Набор.СписокЗначений.Получить();

В цикл добавь

Пока Выборка.Следующий() Цикл

Набор = РегистрыСведений.СписокЗначенийНоменклатуры.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор); //если у тебя регистр сведений подчинен регистратору в запросе выбери еще поле регистратор, если нет то удали эту строчку
НаборЗаписей.Прочитать();

Для каждого Запись Из НаборЗаписей Цикл
   
    Запись.//тут переменную пишешь в которую хочешь записать = //здесь переменная из которой хочешь взять данные

КонецЦикла;

НаборЗаписей.Записать();

КонецЦикла;


LexaK

просто песня какая-то

    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать();
    Пока Выборка.Следующий() Цикл
        Строка = Выборка.СписокЗначений;
    КонецЦикла;
   
    МультСписок = Набор.СписокЗначений.Получить();
    //вот это Набор - это что?



по номенклатуре в регистре одна запись, пишите проще

    Выборка = Запрос.Выполнить().Выбрать();
    Если Выборка.Следующий() Тогда
        МультСписок = Выборка.СписокЗначений.Получить();
    КонецЕсли;

учитесь писать код проще, если вы пишите 10 команд, там где нужно 2, это не значит что вы супер программист и такой молодец что знаете 10 команд. :befhbt:
   
если помогло нажмите: Спасибо!

uchenik96

Цитата: Alex26 от 19 июл 2018, 05:45
Цитата: uchenik96 от 18 июл 2018, 21:06Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| СписокЗначенийНоменклатуры.Номенклатура КАК Номенклатура,
| СписокЗначенийНоменклатуры.СписокЗначений КАК СписокЗначений
|ИЗ
| РегистрСведений.СписокЗначенийНоменклатуры КАК СписокЗначенийНоменклатуры
|ГДЕ
| СписокЗначенийНоменклатуры.Номенклатура = &Номенклатура"; Запрос.УстановитьПараметр("Номенклатура", Объект.Ссылка); РезультатЗапроса = Запрос.Выполнить(); Выборка = РезультатЗапроса.Выбрать();
// Пока Выборка.Следующий() Цикл
Строка = Выборка.СписокЗначений;
КонецЦикла;
МультСписок = Набор.СписокЗначений.Получить();

В цикл добавь

Пока Выборка.Следующий() Цикл

Набор = РегистрыСведений.СписокЗначенийНоменклатуры.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор); //если у тебя регистр сведений подчинен регистратору в запросе выбери еще поле регистратор, если нет то удали эту строчку
НаборЗаписей.Прочитать();

Для каждого Запись Из НаборЗаписей Цикл
   
    Запись.//тут переменную пишешь в которую хочешь записать = //здесь переменная из которой хочешь взять данные

КонецЦикла;

НаборЗаписей.Записать();

КонецЦикла;


Сделал по вашему примеру..в регистре запись не появляется

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СписокЗначенийНоменклатуры.Номенклатура КАК Номенклатура,
| СписокЗначенийНоменклатуры.СписокЗначений КАК СписокЗначений
|ИЗ
| РегистрСведений.СписокЗначенийНоменклатуры КАК СписокЗначенийНоменклатуры
|ГДЕ
| СписокЗначенийНоменклатуры.Номенклатура = &Номенклатура";

Запрос.УстановитьПараметр("Номенклатура", Объект.Ссылка);


Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл

НаборЗаписей = РегистрыСведений.СписокЗначенийНоменклатуры.СоздатьНаборЗаписей();
НаборЗаписей.Прочитать();

Для каждого Запись Из НаборЗаписей Цикл   
   
    Запись.СписокЗначений =  Выборка.СписокЗначений;//тут переменную пишешь в которую хочешь записать = //здесь переменная из которой хочешь взять данные

КонецЦикла;

НаборЗаписей.Записать();

КонецЦикла;



Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск