Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Сохранение/восстановление ПоляТабличногоДокумента

Сохранение/восстановление ПоляТабличногоДокумента
Я
   Chuvaschow
 
08.01.18 - 14:33
Здравствуйте, уважаемые форумчане"
Тема была перенесена в архив, но понадобилось решение сейчас.
Поле табличного документа. Сохранение и вывод на печать

Подскажите, пожалуйста, как сохранять и восстанавливать значения ПолеТабличногоДокумента?
Есть документ, в котором несколько страниц с ПолеТабличногоДокумента. Я научился заполнять эти поля. Но не знаю как сохранять при записи зокумента и восстанавливать при открытии документа эти значения.

http://www.picshare.ru/view/8410499/

Хочется сделать что-то проде регламентированной отчетности как в ЗУП 2.5. В ЗУП смотрел, но, видимо, уровень знаний не тот, чтобы понять как это работает...
 
 
   Lexey_
 
1 - 08.01.18 - 14:52
(0) в реквизит с типом ХранилищеЗначения
   Chuvaschow
 
2 - 08.01.18 - 15:31
(1) Это я понимаю :)
Можно поподробнее? Научите...
   Lexey_
 
3 - 08.01.18 - 15:33
   Chuvaschow
 
4 - 08.01.18 - 18:00
Да-да. В случае с обычными формами все ок.
Как переписать на УФ?
   Lexey_
 
5 - 08.01.18 - 18:06
(4) принцип тот же, задавай конкретные вопросы
   Chuvaschow
 
6 - 08.01.18 - 18:22
Переданное значение не может быть помещено в ХранилищеЗначения, поскольку не сериализуется или содержит вложенный несериализуемый элемент

&НаСервере
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    Хранилище = Новый ХранилищеЗначения(Элементы.ПолеТабличногоДокументаСтраница1);
    Записать();
КонецПроцедуры

Или сервер не знает что там на форме?
   Lexey_
 
7 - 08.01.18 - 18:29
(6) тебе не поле нужно, а табличный документ, который в этом поле
   Chuvaschow
 
8 - 08.01.18 - 18:37
Если так

&НаСервере
Процедура ПередЗаписьюНаСервере()
    ТабДок = Новый ТабличныйДокумент;
    ТабДок.Вывести(Элементы.ПолеТабличногоДокументаСтраница1);
    Хранилище = Новый ХранилищеЗначения(ТабДок);
    Записать();
КонецПроцедуры

То вот такая ошибка:

ТабДок.Вывести(Элементы.ПолеТабличногоДокументаСтраница1);
по причине:
Несоответствие типов (параметр номер '1')
   Chuvaschow
 
9 - 08.01.18 - 18:39
   Lexey_
 
10 - 08.01.18 - 18:57
(8) бери табличный документ в связанном реквизите формы
 
 Рекламное место пустует
   Chuvaschow
 
11 - 08.01.18 - 19:07
&НаСервере
Процедура ПередЗаписьюНаСервере()
    ТабДок = Новый ТабличныйДокумент;
    ТабДок.Вывести(ПолеТабличногоДокументаСтраница1);
    Хранилище = Новый ХранилищеЗначения(ТабДок);
    Записать();
КонецПроцедуры

Вот так не ругается. Документ записывается.
Скажите, как при открытии документа теперь прочитать данные из ХранилищеЗначений?
   Lexey_
 
12 - 08.01.18 - 19:15
(11) метод Получить()
   Chuvaschow
 
13 - 08.01.18 - 19:18
ТабДок = Хранилище.Получить();

{Документ.РегламентированнаяОтчетностьФорма36.Форма.ФормаДокумента.Форма(11,12)}: Переменная не определена (Хранилище)
   Lexey_
 
14 - 08.01.18 - 19:24
(13) на сервере нужно
   Chuvaschow
 
15 - 08.01.18 - 19:26
ТАм и пытаюсь :)

&НаСервере
Процедура ПриОткрытииНаСервере()

    ТабДок = Хранилище.Получить();
    Если ТабДок <> Неопределено Тогда
        Элементы.ПолеТабличногоДокументаСтраница1.Вывести(ТабДок);
    КонецЕсли;
   Lexey_
 
16 - 08.01.18 - 19:34
(15)читай в ПриСозданииНаСервере, выводи в  реквизит, а не в элемент формы
   Chuvaschow
 
17 - 08.01.18 - 19:36
Также ругается.
   Lexey_
 
18 - 08.01.18 - 19:40
(15) в ПриЧтенииНаСервере, в параметрах есть объект, там можно обратиться к реквизитам
   h-sp
 
19 - 08.01.18 - 19:40
(17) переменная Хранилище - это где определяется у вас?
   Chuvaschow
 
20 - 08.01.18 - 19:43
Извините, не понимаю...
Есть реквизит документа Хранилище с типом ХранилищеЗначения. Но к нему не добраться. И мы его не использовали при записи, так ведь?
   Chuvaschow
 
21 - 08.01.18 - 19:43
(19) Видимо нигде.
   Chuvaschow
 
22 - 08.01.18 - 19:45
(19) Вот здесь:

&НаСервере
Процедура ПередЗаписьюНаСервере()
    ТабДок = Новый ТабличныйДокумент;
    ТабДок.Вывести(ПолеТабличногоДокументаСтраница1);
    Хранилище = Новый ХранилищеЗначения(ТабДок);
    Записать();
КонецПроцедуры
   Lexey_
 
23 - 08.01.18 - 19:46
(22) (18) читал?
   Chuvaschow
 
24 - 08.01.18 - 19:48
Читал. Не помогло. Чуть больше разжевать бы :) Буду очень признателен.
Понимаю, что ХранилищеЗначений должно быть простым - записать/прочитать/очистить. Но пока не уложу в головы что да как...
   Lexey_
 
25 - 08.01.18 - 19:50
(24) что делал по (18)?
   Chuvaschow
 
26 - 08.01.18 - 19:55
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
    Хранилище = ТекущийОбъект.Хранилище.Получить();
КонецПроцедуры
   Lexey_
 
27 - 08.01.18 - 19:56
(26) есть ошибки?
   Chuvaschow
 
28 - 08.01.18 - 19:57
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    ТабДок = Хранилище.Получить();
    Если ТабДок <> Неопределено Тогда
       ПолеТабличногоДокументаСтраница1.Вывести(ТабДок);
    КонецЕсли;

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

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
    Хранилище = ТекущийОбъект.Хранилище.Получить();
КонецПроцедуры


Да, также самая:
{Документ.РегламентированнаяОтчетностьФорма36.Форма.ФормаДокумента.Форма(145,11)}: Переменная не определена (Хранилище)
    ТабДок = <<?>>Хранилище.Получить(); (Проверка: Сервер)
   Lexey_
 
29 - 08.01.18 - 20:04
(28)  ПриСозданииНаСервере забудь, делай все в ПриЧтенииНаСервере
   Chuvaschow
 
30 - 08.01.18 - 20:14
Хорошо. Попробую.
   h-sp
 
31 - 08.01.18 - 20:45
(30) Объект.Хранилище = Новый ХранилищеЗначения(ТабДок);
   Chuvaschow
 
32 - 09.01.18 - 17:56
Снова здравствуйте!

Вот что сейчас имеем:


&НаСервере
Процедура ПередЗаписьюНаСервере()
    
    ТабДок = Новый ТабличныйДокумент;
    ТабДок.Вывести(ПолеТабличногоДокументаСтраница1);
    Хранилище = Новый ХранилищеЗначения(ТабДок);
    Записать();
    
КонецПроцедуры

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
    
        ТабДок = ТекущийОбъект.Хранилище.Получить();
    Если ТабДок <> Неопределено Тогда
       ПолеТабличногоДокументаСтраница1.Вывести(ТабДок);
    КонецЕсли;

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

Без ошибок, проводится, открывается. Но ничего не сохраняется/не восстанавливается. При открытии документа отладчик говорит ТабДок      Неопределено.
   Chuvaschow
 
33 - 09.01.18 - 17:57
(31) Так не дотягивается. Получаем:

{Документ.РегламентированнаяОтчетностьФорма36.Форма.ФормаДокумента.Форма(132)}: Поле объекта не обнаружено (Хранилище)
    Объект.Хранилище = Новый ХранилищеЗначения(ТабДок);
 
 
   Chuvaschow
 
34 - 09.01.18 - 19:17
При таком варианте:

&НаСервере
Процедура ПередЗаписьюНаСервере()
    //

    //ТабДок = Новый ТабличныйДокумент;

    //ТабДок.Вывести(ПолеТабличногоДокументаСтраница1);

    //Объект.Хранилище = Новый ХранилищеЗначения(ТабДок);

        //ТабДок.Вывести(ПолеТабличногоДокументаСтраница1);

    ДанныйОбъект = РеквизитФормыВЗначение("Объект");
    ДанныйОбъект.Хранилище = Новый ХранилищеЗначения(ТабДок);
    ЗначениеВРеквизитФормы(ДанныйОбъект,"Объект");
    Записать();

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

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
    
    //ДанныйОбъект = РеквизитФормыВЗначение("Объект");

    //Хранилище = ТекущийОбъект.Хранилище.Получить();


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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ДанныйОбъект = РеквизитФормыВЗначение("Объект");
    Хранилище = ДанныйОбъект.Хранилище.Получить();
    ПолеТабличногоДокументаСтраница1.Вывести(Хранилище);

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


При открытии Хранилище имеет тип ТабличныйДокумент.
Но ПолеТабличногоДокументаСтраница1 так и остается пустой. Хотя, возможно, он и в хранилище записывается пустым, не знаю как проверить.
   h-sp
 
35 - 09.01.18 - 19:31
Процедура ПередЗаписьюНаСервере()
    //



    Объект.Хранилище = Новый ХранилищеЗначения(ПолеТабличногоДокументаСтраница1);

КонецПроцедуры
   Chuvaschow
 
36 - 09.01.18 - 19:40
(33) (35)
   Chuvaschow
 
37 - 09.01.18 - 19:55
Весь смысл в том, что на форме есть ПолеТабличногоДокумента с типом ТабличныйДокумент, который по кнопке Заполнить заполняется необходимыми значениями в определенные области.
Необходимо то, что получилось сохранить со ссылкой на этот документ и при открытии соответственно извлечь это все и показать...
   Chuvaschow
 
38 - 09.01.18 - 20:09
А сервер не знает, что там на форме изменилось.
Он знает лишь про ТабличныйДокумент.
   Chuvaschow
 
39 - 09.01.18 - 20:29
Может правильнее после заполнения сохранять значения каждой области в массив, а при открытии этот массив перечитывать и расставлять по своим местам ?
   Lexey_
 
40 - 09.01.18 - 21:12
(34) процедуру ПередЗаписьюНаСервере руками писал? Не назначил обработчиком, если бы назначил, то увидел бы, что в параметрах есть ТекущийОбъект, и не нужны извращения с РеквизитФормыВЗначение
   Chuvaschow
 
41 - 09.01.18 - 21:52
Катастрафически просто :)

&НаСервере 
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) 
    ТекущийОбъект.Хранилище = Новый ХранилищеЗначения(ПолеТабличногоДокументаСтраница1);
КонецПроцедуры 

&НаСервере 
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
    ПолеТабличногоДокументаСтраница1 = ТекущийОбъект.Хранилище.Получить(); 
КонецПроцедуры


Не отрабатывало, видимо, потому, что процедуры не были назначены в обработчике формы...

:)))


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует