Имя: Пароль:
1C
1С v8
Не сохраняется значение Хранилища значений
0 just86
 
04.03.19
13:16
Здравствуйте.
Подскажите, в чём ошибка.
С формы документа открываю произвольную форму. На ней есть форматированный документ. Пишу что то в нем. Закрываю форму. При закрытии формы делаю:

&НаКлиенте
Функция ПередатьЗначенияПриЗакрытии()
    СтруктураПараметров = Новый Структура;
    СтруктураПараметров.Вставить("ДатаСоздания",         ?(ЗначениеЗаполнено(ДатаСоздания), ДатаСоздания, ТекущаяДата()));
    СтруктураПараметров.Вставить("ДатаРедактирования",  ТекущаяДата());
    СтруктураПараметров.Вставить("ТекстКомментария",     Комментарий.ПолучитьТекст());
    СтруктураПараметров.Вставить("ТекстКомментарияХЗ",  ПолучитХЗ(Комментарий));
    СтруктураПараметров.Вставить("УИД",                 ?(ЗначениеЗаполнено(УИД), Строка(УИД), Строка(Новый УникальныйИдентификатор)));

    Возврат СтруктураПараметров
КонецФункции

&НаСервере
Функция ПолучитХЗ(Комментарий)
    ХЗ = Новый ХранилищеЗначения(Комментарий);
    АдресВремХран = ПоместитьВоВременноеХранилище(ХЗ, Новый УникальныйИдентификатор);
    Возврат АдресВремХран;
КонецФункции


в форме владельца получаю данные параметры и добавляю в табличную часть:

&НаКлиенте
Процедура ДобавитьИзменитьКомментарийПослеЗакрытияФормыКомментария(Результат, СтруктураПараметров) Экспорт
    МассивСтрок = Объект.Комментарии.НайтиСтроки(Новый Структура("УИД", Результат.УИД));
    Если МассивСтрок.Количество() > 0 Тогда
        Для каждого СтрокаТЧ Из МассивСтрок Цикл
            ОснРеквизит = Объект;
            ЗаполнитьТЧКомментарииНаСервере(Результат,ОснРеквизит);
            
            КопироватьДанныеФормы(ОснРеквизит,Объект)
        КонецЦикла;
    Иначе
        ОснРеквизит = Объект;
        ЗаполнитьТЧКомментарииНаСервере(Результат,ОснРеквизит);
        
        КопироватьДанныеФормы(ОснРеквизит,Объект)
    КонецЕсли;
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ЗаполнитьТЧКомментарииНаСервере(Результат,ОснРеквизит)
    ОбъектЗначение = ДанныеФормыВЗначение(ОснРеквизит, Тип("ДокументОбъект.дамТехническиеЗадания"));
    МассивСтр = ОбъектЗначение.Комментарии.НайтиСтроки(Новый Структура("УИД", Результат.УИД));
    Если МассивСтр.Количество() > 0 Тогда
        Для каждого ЭлМ Из МассивСтр Цикл
            ХЗ = ПолучитьИзВременногоХранилища(Результат.ТекстКомментарияХЗ);
            Если ХЗ <> Неопределено Тогда
                ТекстКомм = ХЗ.Получить().ПолучитьТекст();
                Если ЗначениеЗаполнено(ТекстКомм) Тогда
                    ЭлМ.ТекстКомментарияХЗ = ХЗ;
                    ТекстКомм = ХЗ.Получить().ПолучитьТекст();
                    ЭлМ.ТекстКомментария   = ?(ТекстКомм <> Неопределено, ТекстКомм,"");
                    ЭлМ.ДатаРедактирования = ТекущаяДата();
                КонецЕсли;
                
            КонецЕсли;
        КонецЦикла;
    Иначе
        Если ЗначениеЗаполнено(Результат.ТекстКомментария) Тогда
            СтрТЧ = ОбъектЗначение.Комментарии.Добавить();
            СтрТЧ.ДатаСоздания = ТекущаяДата();
            СтрТЧ.ДатаРедактирования = ТекущаяДата();
            СтрТЧ.ТекстКомментария = Результат.ТекстКомментария;
            
            ХЗ = ПолучитьИзВременногоХранилища(Результат.ТекстКомментарияХЗ);
            
            СтрТЧ.ТекстКомментарияХЗ = ХЗ;
            
            СтрТЧ.УИД = Результат.УИД;
        КонецЕсли;
    КонецЕсли;
    
    ЗначениеВДанныеФормы(ОбъектЗначение, ОснРеквизит);
КонецПроцедуры


но если после этого посмотреть - реквизит тч пустой
1 aleks_default
 
04.03.19
13:26
Дошел до этого

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

дальше читать не стал
2 just86
 
04.03.19
13:32
(1) какие ваши предложения обхода массива? по индексу?

http://catalog.mista.ru/public/153602/  - можете тут написать, что код говно ))
3 catena
 
04.03.19
13:37
(2)А где у вас внутри цикла используется обход массива? Я вижу только эн раз вызов одних и тех же процедур для одного и того же объекта. Какой высокий смысл в цикле?
4 aleks_default
 
04.03.19
13:39
(2)Там код не говно, а у тебя да. И не надо стрелки переводить если не можешь понять разницу.
5 just86
 
04.03.19
14:15
Oh My God This Is A Fucking Shit!

это существенно изменило картину.... один лишний цикл и всё заработало. чтобы я делал без aleks_default....

ЗначениеВРеквизитФормы(ОбъектЗначение, "Объект") - вот это не отрабатывает, потому что в "объект" данные формы структура
6 aleks_default
 
04.03.19
14:27
один лишний цикл = терабайт трафика между клиентом и сервером
7 just86
 
04.03.19
14:33
(6) как думаете, у меня проблема с террабайтом трафика или что не сохраняется значение?

я уже всё переделал 3 раза и всё равно это еще не конечный вариант.

было бы не плохо отвечать по существу - как записать ХранилищеЗначений переданное из произвольной формы в форму владелец
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан