Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
06 дек 2025, 19:34

Программный СЗ

Автор sali, Вчера в 07:42

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

sali

как сохранить значения программно созданного списка значений?
когда открываешь форму поле пустое, пробовал через хранилище значений
реквизит ХЗ
на форме создал таблицу значений с двумя колонками - наименование , гуид
при записи  сохраняю значения в ХЗ, а при открытии беру , но адрес настроек хранилища пустой

antoneus

Цитата: sali от Вчера в 07:42при записи  сохраняю значения в ХЗ, а при открытии беру , но адрес настроек хранилища пустой

Какой адрес настроек хранилища? Что это такое? В хранилище значения же записываешь, какой адрес?
 
Использовать хранилище общих настроек.
Или добавить табличную часть и не страдать фигнёй.
 

sali

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
ТекущийОбъект.ГУИДТипЦены = XMLСтрока(ЭтотОбъект.ТипЦены.УникальныйИдентификатор());
ТекущийОбъект.ГУИДСклад = XMLСтрока(ЭтотОбъект.Склад.УникальныйИдентификатор());
ТекущийОбъект.ГУИДСотрудник = XMLСтрока(ЭтотОбъект.Сотрудник.УникальныйИдентификатор());
ТекущийОбъект.ГУИДКасса = XMLСтрока(ЭтотОбъект.Касса.УникальныйИдентификатор());

 
Если ЭтоАдресВременногоХранилища(АдресНастроекМаршрутов) Тогда

ДанныеНастроек = ПолучитьИзВременногоХранилища(АдресНастроекМаршрутов);
ТекущийОбъект.ГУИДМаршрутов = Новый ХранилищеЗначения(ДанныеНастроек.МаршрутыАгентов);
КонецЕсли;

КонецПроцедуры 

&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
Если не ЭтоБП И ЗначениеЗаполнено(ЭтотОбъект.МаршрутыАгентов) Тогда
//ЭтотОбъект.МаршрутыАгентовВыбранные = Новый Массив;
Для каждого СтрокаСЗ Из ЭтотОбъект.МаршрутыАгентов Цикл
ЭтотОбъект.МаршрутыАгентовВыбранные.Добавить(Новый Структура(
"ГУИДМаршрута,Наименование",
XMLСтрока(СтрокаСЗ.Значение.УникальныйИдентификатор()),
СтрокаСЗ.Значение.Наименование)); 

СтрокаТЗ = ЭтотОбъект.Маршруты.Добавить();
СтрокаТЗ.НаименованиеМаршрута = СтрокаСЗ.Значение.Наименование;
СтрокаТЗ.ГУИДМаршрута = XMLСтрока(СтрокаСЗ.Значение.УникальныйИдентификатор());
КонецЦикла; 

        СтруктураМаршрутов = Новый Структура;
СтруктураМаршрутов.Вставить("ТаблицаМаршрутов", ЭтотОбъект.Маршруты);
СтруктураМаршрутов.Вставить("МаршрутыАгентов", ЭтотОбъект.МаршрутыАгентовВыбранные);

АдресНастроекМаршрутов = ПоместитьВоВременноеХранилище(ЭтотОбъект.МаршрутыАгентовВыбранные, УникальныйИдентификатор);

КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура ПриОткрытииНаСервере()
    Если ЭтоАдресВременногоХранилища(АдресНастроекМаршрутов) Тогда

    КонецЕсли;
КонецПроцедуры

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

antoneus

Ну естественно он будет пустой, откуда там какому-то адресу взяться?
В ПриСозданииНаСервере

МаршрутыАгентов = РеквизитФормыВЗначение("Объект").ГУИДМаршрутов.Получить()
Но всё это какие-то мудовые рыдания.

sali

antoneus, ЗАБЫЛ ЗА НЕЕ
скажите , почему результат есть,  а выборка.следующий() = ложь
Результат = Неопределено;

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

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

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); // ссылка нашлась
Если ВыборкаДетальныеЗаписи.Следующий() Тогда //результат Ложь
Результат = ВыборкаДетальныеЗаписи.Ссылка;
КонецЕсли;

Возврат Результат;

antoneus

Результат есть, потому что запрос выполнился.
Выборка.Следующий() = ложь, потому что ссылка не нашлась.

sali


antoneus

А тогда откуда инфа, что Выборка.Следующий() = ложь?

sali

antoneus, есть версия , я выполняю загрузку устройства на сервер. к примеру заполняю новыми данными кассу, сотрудник, маршруты и идет загрузка всего устройства на сервер, идет так
ВидЦеныСсылка = Неопределено;
Если Контекст.Запрос.Поля.general.Свойство("typeID") Тогда
ВидЦеныСсылка = Справочники.ВидыЦен.НайтиПоГУИД(Контекст.Клиент, Контекст.Запрос.Поля.general.typeID);

Если НЕ ЗначениеЗаполнено(ВидЦеныСсылка) Тогда                             
ВидЦеныСсылка = Справочники.ВидыЦен.ПолучитьСсылку();
ВидЦеныОбъект = Справочники.ВидыЦен.СоздатьЭлемент();
ВидЦеныОбъект.УстановитьСсылкуНового(ВидЦеныСсылка);
Иначе     
ВидЦеныОбъект = ВидЦеныСсылка.ПолучитьОбъект();
КонецЕсли;

ВидЦеныОбъект.Владелец = Контекст.Клиент;
ВидЦеныОбъект.Наименование = Контекст.Запрос.Поля.general.typeName;
ВидЦеныОбъект.ГУИДИсточника = Контекст.Запрос.Поля.general.typeID;

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

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

Если РезультатЗапроса.Пустой() Тогда                             
СправочникОбъект = Справочники.ТорговоеОборудование.СоздатьЭлемент();
СправочникОбъект.ГУИДИсточника = Контекст.ГУИДТорговогоОборудования;
КоличествоДобавлено = 1;
Иначе
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
ВыборкаДетальныеЗаписи.Следующий();
СправочникОбъект = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
КоличествоОбновлено = 1;
КонецЕсли;

СправочникОбъект.Владелец = Контекст.Клиент;
СправочникОбъект.Наименование = Контекст.Запрос.Поля.general.name;
СправочникОбъект.ТипОборудования = Контекст.Запрос.Поля.general.type;
СправочникОбъект.ИмяБазыДанных = Контекст.Запрос.Заголовки.ИмяКонфигурации;
Если ЗначениеЗаполнено(ВидЦеныСсылка) Тогда
СправочникОбъект.ВидЦены = ВидЦеныСсылка;
КонецЕсли;
Если ЗначениеЗаполнено(СкладСсылка) Тогда
СправочникОбъект.Склад = СкладСсылка;
КонецЕсли;

// Настройки.
Если Контекст.Запрос.Поля.general.Свойство("settings") Тогда
СправочникОбъект.КодДоступа = Контекст.Запрос.Поля.general.settings.accessCode;
СправочникОбъект.ПолныйДоступ = Контекст.Запрос.Поля.general.settings.isAgent;

Контекст.Запрос.Поля.general.settings.Свойство("useClients", СправочникОбъект.ИспользоватьКлиенты);
Контекст.Запрос.Поля.general.settings.Свойство("useSettings", СправочникОбъект.ИспользоватьНастройки);
КонецЕсли;

СправочникОбъект.Записать();

Результат = Новый Структура;
Результат.Вставить("addItem", КоличествоДобавлено);
Результат.Вставить("updItem", КоличествоОбновлено);

Возврат Результат;


возможно выборка = ложь потому что до того как происходит поиск устройства я ищу его , но ссылка не сформировалась

antoneus

Цитата: sali от Вчера в 11:12до того как происходит поиск устройства я ищу его

Че?

Теги:

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

Рейтинг@Mail.ru

Поиск