|
Сохранение/восстановление ПоляТабличногоДокумента | ☑ | ||
---|---|---|---|---|
0
Chuvaschow
08.01.18
✎
14:33
|
Здравствуйте, уважаемые форумчане"
Тема была перенесена в архив, но понадобилось решение сейчас. Поле табличного документа. Сохранение и вывод на печать Подскажите, пожалуйста, как сохранять и восстанавливать значения ПолеТабличногоДокумента? Есть документ, в котором несколько страниц с ПолеТабличногоДокумента. Я научился заполнять эти поля. Но не знаю как сохранять при записи зокумента и восстанавливать при открытии документа эти значения. http://www.picshare.ru/view/8410499/ Хочется сделать что-то проде регламентированной отчетности как в ЗУП 2.5. В ЗУП смотрел, но, видимо, уровень знаний не тот, чтобы понять как это работает... |
|||
1
Lexey_
08.01.18
✎
14:52
|
(0) в реквизит с типом ХранилищеЗначения
|
|||
2
Chuvaschow
08.01.18
✎
15:31
|
(1) Это я понимаю :)
Можно поподробнее? Научите... |
|||
3
Lexey_
08.01.18
✎
15:33
|
||||
4
Chuvaschow
08.01.18
✎
18:00
|
Да-да. В случае с обычными формами все ок.
Как переписать на УФ? |
|||
5
Lexey_
08.01.18
✎
18:06
|
(4) принцип тот же, задавай конкретные вопросы
|
|||
6
Chuvaschow
08.01.18
✎
18:22
|
Переданное значение не может быть помещено в ХранилищеЗначения, поскольку не сериализуется или содержит вложенный несериализуемый элемент
&НаСервере Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) Хранилище = Новый ХранилищеЗначения(Элементы.ПолеТабличногоДокументаСтраница1); Записать(); КонецПроцедуры Или сервер не знает что там на форме? |
|||
7
Lexey_
08.01.18
✎
18:29
|
(6) тебе не поле нужно, а табличный документ, который в этом поле
|
|||
8
Chuvaschow
08.01.18
✎
18:37
|
Если так
&НаСервере Процедура ПередЗаписьюНаСервере() ТабДок = Новый ТабличныйДокумент; ТабДок.Вывести(Элементы.ПолеТабличногоДокументаСтраница1); Хранилище = Новый ХранилищеЗначения(ТабДок); Записать(); КонецПроцедуры То вот такая ошибка: ТабДок.Вывести(Элементы.ПолеТабличногоДокументаСтраница1); по причине: Несоответствие типов (параметр номер '1') |
|||
9
Chuvaschow
08.01.18
✎
18:39
|
||||
10
Lexey_
08.01.18
✎
18:57
|
(8) бери табличный документ в связанном реквизите формы
|
|||
11
Chuvaschow
08.01.18
✎
19:07
|
&НаСервере
Процедура ПередЗаписьюНаСервере() ТабДок = Новый ТабличныйДокумент; ТабДок.Вывести(ПолеТабличногоДокументаСтраница1); Хранилище = Новый ХранилищеЗначения(ТабДок); Записать(); КонецПроцедуры Вот так не ругается. Документ записывается. Скажите, как при открытии документа теперь прочитать данные из ХранилищеЗначений? |
|||
12
Lexey_
08.01.18
✎
19:15
|
(11) метод Получить()
|
|||
13
Chuvaschow
08.01.18
✎
19:18
|
ТабДок = Хранилище.Получить();
{Документ.РегламентированнаяОтчетностьФорма36.Форма.ФормаДокумента.Форма(11,12)}: Переменная не определена (Хранилище) |
|||
14
Lexey_
08.01.18
✎
19:24
|
(13) на сервере нужно
|
|||
15
Chuvaschow
08.01.18
✎
19:26
|
ТАм и пытаюсь :)
&НаСервере Процедура ПриОткрытииНаСервере() ТабДок = Хранилище.Получить(); Если ТабДок <> Неопределено Тогда Элементы.ПолеТабличногоДокументаСтраница1.Вывести(ТабДок); КонецЕсли; |
|||
16
Lexey_
08.01.18
✎
19:34
|
(15)читай в ПриСозданииНаСервере, выводи в реквизит, а не в элемент формы
|
|||
17
Chuvaschow
08.01.18
✎
19:36
|
Также ругается.
|
|||
18
Lexey_
08.01.18
✎
19:40
|
(15) в ПриЧтенииНаСервере, в параметрах есть объект, там можно обратиться к реквизитам
|
|||
19
h-sp
08.01.18
✎
19:40
|
(17) переменная Хранилище - это где определяется у вас?
|
|||
20
Chuvaschow
08.01.18
✎
19:43
|
Извините, не понимаю...
Есть реквизит документа Хранилище с типом ХранилищеЗначения. Но к нему не добраться. И мы его не использовали при записи, так ведь? |
|||
21
Chuvaschow
08.01.18
✎
19:43
|
(19) Видимо нигде.
|
|||
22
Chuvaschow
08.01.18
✎
19:45
|
(19) Вот здесь:
&НаСервере Процедура ПередЗаписьюНаСервере() ТабДок = Новый ТабличныйДокумент; ТабДок.Вывести(ПолеТабличногоДокументаСтраница1); Хранилище = Новый ХранилищеЗначения(ТабДок); Записать(); КонецПроцедуры |
|||
23
Lexey_
08.01.18
✎
19:46
|
(22) (18) читал?
|
|||
24
Chuvaschow
08.01.18
✎
19:48
|
Читал. Не помогло. Чуть больше разжевать бы :) Буду очень признателен.
Понимаю, что ХранилищеЗначений должно быть простым - записать/прочитать/очистить. Но пока не уложу в головы что да как... |
|||
25
Lexey_
08.01.18
✎
19:50
|
(24) что делал по (18)?
|
|||
26
Chuvaschow
08.01.18
✎
19:55
|
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект) Хранилище = ТекущийОбъект.Хранилище.Получить(); КонецПроцедуры |
|||
27
Lexey_
08.01.18
✎
19:56
|
(26) есть ошибки?
|
|||
28
Chuvaschow
08.01.18
✎
19:57
|
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) ТабДок = Хранилище.Получить(); Если ТабДок <> Неопределено Тогда ПолеТабличногоДокументаСтраница1.Вывести(ТабДок); КонецЕсли; КонецПроцедуры &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) Хранилище = ТекущийОбъект.Хранилище.Получить(); КонецПроцедуры Да, также самая: {Документ.РегламентированнаяОтчетностьФорма36.Форма.ФормаДокумента.Форма(145,11)}: Переменная не определена (Хранилище) ТабДок = <<?>>Хранилище.Получить(); (Проверка: Сервер) |
|||
29
Lexey_
08.01.18
✎
20:04
|
(28) ПриСозданииНаСервере забудь, делай все в ПриЧтенииНаСервере
|
|||
30
Chuvaschow
08.01.18
✎
20:14
|
Хорошо. Попробую.
|
|||
31
h-sp
08.01.18
✎
20:45
|
(30) Объект.Хранилище = Новый ХранилищеЗначения(ТабДок);
|
|||
32
Chuvaschow
09.01.18
✎
17:56
|
Снова здравствуйте!
Вот что сейчас имеем: &НаСервере Процедура ПередЗаписьюНаСервере() ТабДок = Новый ТабличныйДокумент; ТабДок.Вывести(ПолеТабличногоДокументаСтраница1); Хранилище = Новый ХранилищеЗначения(ТабДок); Записать(); КонецПроцедуры &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) ТабДок = ТекущийОбъект.Хранилище.Получить(); Если ТабДок <> Неопределено Тогда ПолеТабличногоДокументаСтраница1.Вывести(ТабДок); КонецЕсли; КонецПроцедуры Без ошибок, проводится, открывается. Но ничего не сохраняется/не восстанавливается. При открытии документа отладчик говорит ТабДок Неопределено. |
|||
33
Chuvaschow
09.01.18
✎
17:57
|
(31) Так не дотягивается. Получаем:
{Документ.РегламентированнаяОтчетностьФорма36.Форма.ФормаДокумента.Форма(132)}: Поле объекта не обнаружено (Хранилище) Объект.Хранилище = Новый ХранилищеЗначения(ТабДок); |
|||
34
Chuvaschow
09.01.18
✎
19:17
|
При таком варианте:
&НаСервере Процедура ПередЗаписьюНаСервере() // //ТабДок = Новый ТабличныйДокумент; //ТабДок.Вывести(ПолеТабличногоДокументаСтраница1); //Объект.Хранилище = Новый ХранилищеЗначения(ТабДок); //ТабДок.Вывести(ПолеТабличногоДокументаСтраница1); ДанныйОбъект = РеквизитФормыВЗначение("Объект"); ДанныйОбъект.Хранилище = Новый ХранилищеЗначения(ТабДок); ЗначениеВРеквизитФормы(ДанныйОбъект,"Объект"); Записать(); КонецПроцедуры &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) //ДанныйОбъект = РеквизитФормыВЗначение("Объект"); //Хранилище = ТекущийОбъект.Хранилище.Получить(); КонецПроцедуры &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) ДанныйОбъект = РеквизитФормыВЗначение("Объект"); Хранилище = ДанныйОбъект.Хранилище.Получить(); ПолеТабличногоДокументаСтраница1.Вывести(Хранилище); КонецПроцедуры При открытии Хранилище имеет тип ТабличныйДокумент. Но ПолеТабличногоДокументаСтраница1 так и остается пустой. Хотя, возможно, он и в хранилище записывается пустым, не знаю как проверить. |
|||
35
h-sp
09.01.18
✎
19:31
|
Процедура ПередЗаписьюНаСервере()
// Объект.Хранилище = Новый ХранилищеЗначения(ПолеТабличногоДокументаСтраница1); КонецПроцедуры |
|||
36
Chuvaschow
09.01.18
✎
19:40
|
(33) (35)
|
|||
37
Chuvaschow
09.01.18
✎
19:55
|
Весь смысл в том, что на форме есть ПолеТабличногоДокумента с типом ТабличныйДокумент, который по кнопке Заполнить заполняется необходимыми значениями в определенные области.
Необходимо то, что получилось сохранить со ссылкой на этот документ и при открытии соответственно извлечь это все и показать... |
|||
38
Chuvaschow
09.01.18
✎
20:09
|
А сервер не знает, что там на форме изменилось.
Он знает лишь про ТабличныйДокумент. |
|||
39
Chuvaschow
09.01.18
✎
20:29
|
Может правильнее после заполнения сохранять значения каждой области в массив, а при открытии этот массив перечитывать и расставлять по своим местам ?
|
|||
40
Lexey_
09.01.18
✎
21:12
|
(34) процедуру ПередЗаписьюНаСервере руками писал? Не назначил обработчиком, если бы назначил, то увидел бы, что в параметрах есть ТекущийОбъект, и не нужны извращения с РеквизитФормыВЗначение
|
|||
41
Chuvaschow
09.01.18
✎
21:52
|
Катастрафически просто :)
&НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) ТекущийОбъект.Хранилище = Новый ХранилищеЗначения(ПолеТабличногоДокументаСтраница1); КонецПроцедуры &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) ПолеТабличногоДокументаСтраница1 = ТекущийОбъект.Хранилище.Получить(); КонецПроцедуры Не отрабатывало, видимо, потому, что процедуры не были назначены в обработчике формы... :))) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |