Версия для печати темы (https://pro1c.org.ua/index.php?s=9963d97531f5c0f7fd9aaa30b7fd5297&showtopic=45337)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование управляемых форм 1С 8.2 _ Записать структуру в реквизит с типом ХранилищеЗначения

Автор: Gigi 19.04.18, 17:15

Привет!
Заранее говорю что с этим типом ужас как не знаком...
Поэтому никто не подскажет как записать на пример структуру в данный тип реквизита.
Просто я пытался методом тыка... просто ради теста создал реквизит: "ДанныеПериода" с типом: ХранилищеЗначения
И взял и тупо в модуле объекта че то попытался туда запихнуть:

Процедура ПриЗаписи(Отказ)
СтрКвартал_1=Новый Структура("январь,февраль,март");
ДанныеПериода=СтрКвартал_1;
КонецПроцедуры

А потом уже от кнопки на форме получить то что пытался впихнуть.
Сообщить(Объект.ДанныеПериода);

Но система не видит реквизит с таким типом
Короче ... вообще не кумекаю что и как и хочу по быстрому ... поэтому если не трудно объясните
Буду признателен!



Автор: Bernet 19.04.18, 20:54

Запись в хранилище значения:

СтруктураПример = Новый Структура;
СтруктураПример.Вставить("Январь", "Январь");
СтруктураПример.Вставить("Февраль", "Февраль");
СтруктураПример.Вставить("Март", "Март");

ХранилищеЗнч = Новый ХранилищеЗначения(СтруктураПример);

Чтение из хранилища значения:
СтруктураПример = ХранилищеЗнч .Получить();
Если СтруктураПример  <> Неопределено Тогда
      Сообщить(СтруктураПример.Январь);
КонецЕсли;

Автор: Gigi 19.04.18, 22:25

Bernet @ Сегодня, 21:54 * ,
Спасибо ... вопрос думаю решен.. главное разом ..быстро и коротко.
А то перерыл все ... от страниц до видео уроков .. толи не въехал толи скорее натыкался не на то что нужно .
Теперь в таком виде...

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
СтруктураПример = Новый Структура;
СтруктураПример.Вставить("Январь", "Январь");
СтруктураПример.Вставить("Февраль", "Февраль");
СтруктураПример.Вставить("Март", "Март");
ХранилищеЗнч = Новый ХранилищеЗначения(СтруктураПример);
КонецПроцедуры


&НаКлиенте
Процедура Тест(Команда)
ХранилищеЗнч_Получить()    
КонецПроцедуры
&НаСервере
Процедура ХранилищеЗнч_Получить(ОбъектСсылка)
СтруктураПример = ОбъектСсылка.ХранилищеЗнч.Получить();
Если СтруктураПример  <> Неопределено Тогда
Для Каждого Элемент Из СтруктураПример Цикл
ЭлементКлюч=Элемент.Ключ;
ЭлементЗначение=Элемент.Значение;
Сообщить(Строка(ЭлементКлюч)+" - "+Строка(ЭлементЗначение));
КонецЦикла;
КонецЕсли;
КонецПроцедуры

И работает.
Т.е. реквизит: "ХранилищеЗнч" доступен только на сервере. И из него почитать данные даже если это реквизит родного объекта невозможно как понимаю..
Имею ввиду как обычно Объект.ИмяРеквизита
Ладно спасибо!

Автор: Prospero 21.04.18, 21:39

Gigi, чисто академический интерес, не ругайте сильно, еще сам многого не знаю, но:
Вы описываете процедуру с фактическим параметром

Процедура ХранилищеЗнч_Получить(ОбъектСсылка)

а вызываете ее без оного
ХранилищеЗнч_Получить()

и код работает.
Цитата
И работает.

я верно понял?

Автор: andr_andrey 23.04.18, 8:55

Цитата(Prospero @ 21.04.18, 22:39) *
я верно понял?

Автор как-то упоминал, что программирует на других языках, возможно там все так и работает.

Автор: Vofka 23.04.18, 9:18

andr_andrey @ Сегодня, 9:55 * ,
у Prospero вопрос в контексте 1С, полагаю.

Prospero, вряд ли так работает. Gigi, скорее всего, просто копировал этот код в разные промежутки времени.

Автор: Petre 23.04.18, 11:01

QUOTE (Vofka @ 23.04.18, 9:18) *
у Prospero вопрос в контексте 1С, полагаю.

Это, скорее, намек на то, что в любом языке это работать не будет.

Автор: Vofka 23.04.18, 13:24

Petre, в Яваскрипте это отлично работает.

Автор: andr_andrey 23.04.18, 15:22

Vofka @ Сегодня, 14:24 * ,
По идее, внутри процедуры, "ОбъектСсылка." должно вызывать исключение.

Автор: Vofka 23.04.18, 15:25

andr_andrey, по идее оно ещё при сохранении должно ругнуться. Так же, по-моему, ругнется при попытке запуска и в итоге не запустится.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua