![]() |
|
УФ. Как сохранить ТабличныйДокумент в реквизит Документа? | ☑ | ||
---|---|---|---|---|
0
Nemoj
09.09.15
✎
21:12
|
Мне нужно в документе Заявка хранить печатную форму Соглашения. Печатная форма может быть руками изменена, и нужно хранить именно измененный вариант, поэтому заново ее генерировать при надобности - не вариант.
На форме документа Заявка у меня есть ПолеТабличногоДокумента, в котором создается и правится руками печатная форма. В объекте Документ.Заявка есть реквизит ХранилищеПечатнойФормы типа ХранилищеЗначения. Пытаюсь сделать так: &НаКлиенте Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) ПередЗаписьюНаСервере(ПечатнаяФорма); КонецПроцедуры &НаСервере Процедура ПередЗаписьюНаСервере(Док) Объект.ХранилищеПечатнойФормы = Новый ХранилищеЗначения(Док); КонецПроцедуры Получаю это: {Документ.Заявка.Форма.ФормаДокумента.Форма(143)}: Поле объекта не обнаружено (ХранилищеПечатнойФормы) Объект.ХранилищеПечатнойФормы = Новый ХранилищеЗначения(Док); Другие реквизиты документа видны, а именно реквизит ХранилищеПечатнойФормы не виден. Что делать? |
|||
1
Брегорьян
09.09.15
✎
21:14
|
переворачивать реквизит формы ("Объект") в значение
|
|||
2
Славен
09.09.15
✎
21:14
|
Поместитьвхранилище как то так назывался
|
|||
3
Славен
09.09.15
✎
21:15
|
+(2) а в реквизите путь храни
|
|||
4
Брегорьян
09.09.15
✎
21:16
|
можно в строку внутр пихать ещу
|
|||
5
Nemoj
09.09.15
✎
21:21
|
(1) Не понимаю.
Объект.Ссылка.ПолучитьОбъект() Так? (2) ПоместитьВоВременноеХранилище? (4) И хранить как строку? |
|||
6
Брегорьян
09.09.15
✎
21:22
|
(5) а почему бы и нет, Ватсон?
на (1) забей, кури (2) |
|||
7
Славен
09.09.15
✎
21:23
|
(5) в точку, именно поместитьвовременноехранилище
|
|||
8
Славен
09.09.15
✎
21:24
|
(7) хотя нет, тебе надо в хранилище закинуть, во временном оно долго не живет
|
|||
9
Nemoj
09.09.15
✎
21:25
|
(4)Про ЗначениеВСтрокуВнутр синтакспомощник говорит так:
Используется для сохранения функциональной совместимости с 1С:Предприятием 7.7. Использовать для других целей не рекомендуется. |
|||
10
Nemoj
09.09.15
✎
21:26
|
(8) Где бы увидеть образец?
|
|||
11
Брегорьян
09.09.15
✎
21:27
|
(10) могу показать самописку, в которой я вордовские файлы хранил и гонял меж клиентом и сервером. можешь сам подглядеть в типовых
|
|||
12
Nemoj
09.09.15
✎
21:31
|
(11) Ткни носом, куда смотреть?
|
|||
13
Брегорьян
09.09.15
✎
21:33
|
(12) картинки у номенклатуры
|
|||
14
Nemoj
09.09.15
✎
21:34
|
(13) Спасибо. Пошел изучать.
|
|||
15
Nemoj
09.09.15
✎
22:42
|
Посмотрел УТ11.
Картинки номенклатуры хранятся не в самом справочнике Номенклатура, а в специальном справочнике ПрикрепленныеФайлы. |
|||
16
Nemoj
09.09.15
✎
22:52
|
Сделал пока через ЗначениеВСтрокуВнутр
Вроде работает. |
|||
17
palsergeich
10.09.15
✎
00:02
|
(16) ЗначениеВСтрокуВнутр не кошерно, есть в платформе только для совместимости с 77, могут и убрать. Есть кошерное ХранилищеЗначения. (11) При более менее значимом количестве документов в базе будут ощутимые тормоза. Так же придется забыть об обращениях через точку, потому что при каждом считывании объекта через объектную модель будет так же тянутся и этот документ, что методически неверно, и будут совем не иллюзорные тормоза.
|
|||
18
palsergeich
10.09.15
✎
00:10
|
Ваша ошибка в следующем:
1) ПередЗаписьюНаСервере - предопределенный обработчик!!!!! НИКОГДЕ НЕ ПЕРЕОПРЕДЕЛЯЙТЕ стандартные обработчики!!!!!!!!! Ниже то, что надо сделать и все шикарно будет работать &НаКлиенте Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) ЗаписатьМакет(ПечатнаяФорма); КонецПроцедуры &НаСервере Процедура ЗаписатьМакет(Док) ДокументОбъект = РеквизитФормыВЗначение("Объект"); ДокументОбъект.ХранилищеПечатнойФормы = Новый ХранилищеЗначения(Док); ЗначениеВРеквизитФормы(ДокументОбъект,Объект) КонецПроцедуры |
|||
19
palsergeich
10.09.15
✎
00:11
|
ЗначениеВРеквизитФормы(ДокументОбъект,"Объект")
|
|||
20
Nemoj
10.09.15
✎
00:25
|
Спасибо, буду изучать.
|
|||
21
Nemoj
10.09.15
✎
00:52
|
Что-то не работает.
ДокументОбъект.ХранилищеПечатнойФормы = Новый ХранилищеЗначения(Док); отрабатывает А потом теряется при переводе в реквизит формы. Может быть это потому, что у меня ХранилищеПечатнойФормы не привязано к полю формы? Объект.Ссылка.ХранилищеПечатнойФормы.Получить() Возвращает неопределено. Ну это понятно, пока запись не отработала, ссылка содержит старые значения. А реквизит ХранилищеПечатнойФормы в самом Объекте не существует вообще. |
|||
22
palsergeich
10.09.15
✎
00:56
|
а вообще задача решается в одну строчку в стандартном обработчике ПерезЗаписьюНаСервере()
&НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) ТекущийОбъект.ХранилищеПечатнойФормы = Новый ХранилищеЗначения(Док); КонецПроцедуры Где Док - Реквизит формы типа табличный документ |
|||
23
Nemoj
10.09.15
✎
01:09
|
Сделал так:
&НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) ТекущийОбъект.ХранилищеПечатнойФормы = Новый ХранилищеЗначения(Элементы.ПолеПечатнойФормы); КонецПроцедуры Получил это: {Документ.Заявка.Форма.ФормаДокумента.Форма(135)}: Ошибка при вызове конструктора (ХранилищеЗначения) ТекущийОбъект.ХранилищеПечатнойФормы = Новый ХранилищеЗначения(эЛЕМЕНТЫ.ПолеПечатнойФормы); по причине: Переданное значение не может быть помещено в ХранилищеЗначения, поскольку не сериализуется или содержит вложенный несериализуемый элемент |
|||
24
palsergeich
10.09.15
✎
01:22
|
Нужно пихать реквизит формы.
А вы суете элемент коллекции Элементы. |
|||
25
palsergeich
10.09.15
✎
01:26
|
||||
26
Nemoj
10.09.15
✎
01:27
|
Ффухх... Заработало.
Спасибо большое! Без вас я бы не сделал этого. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |