![]() |
|
Как добавить картинку в макет из хранилища значений документа | ☑ | ||
---|---|---|---|---|
0
Shogun
08.01.20
✎
07:10
|
Всем привет. Есть документ куда я вставляю картинку геометки. Как можно добавить в макет печати эту картинку? Понять не могу как мне вытащить ее из хранилища значений реквизита документа. Либо у меня изначально косяк на этапе записи документа. Но с другой стороны эта картинка подтягивается при создании документа.
Вот кусок кода где я вставляю эту картинку: &AtClient Procedure GetMap(Command) Connection = New HTTPConnection("static-maps.yandex.ru/1.x/?ll="+Object.Longitude+","+Object.Latitude+"&size=450,450&z=13&l=map&pt="+Object.Longitude+","+Object.Latitude+",pmwtm1~37.64,55.76363,pmwtm99"); Request = New HTTPRequest(""); Result = Connection.Get(Request); FolderMap = "C:\Users\Admin\Documents\Test\Map"; FieldMap = FolderMap + "\test.png"; Result.GetBodyAsBinaryData().Write(FieldMap); Picture = New Picture(FieldMap); TempStorageAddress = PutToTempStorage(Picture, New UUID); ThisObject.PictureMap = TempStorageAddress; EndProcedure &AtServer Procedure BeforeWriteAtServer(Cancel, CurrentObject, WriteParameters) If IsTempStorageURL(PictureMap) Then CurrentObject.Picture = new ValueStorage(GetFromTempStorage(PictureMap)); EndIf; EndProcedure &AtServer Procedure OnCreateAtServer(Cancel, StandardProcessing) PictureMap = GetURL(Object.Ref, "Picture"); EndProcedure Макет печати сделал в помощью конструктора. Картинка должна выводиться в области подвала (Footer) Procedure Печать(Spreadsheet, Ref) Export //{{_PRINT_WIZARD(Печать) Template = Documents.Shipment.GetTemplate("Печать"); Query = New Query; Query.Text = "SELECT | Shipment.AddressDelivery, | Shipment.Company, | Shipment.Date, | Shipment.DeliveryDate, | Shipment.Latitude, | Shipment.Longitude, | Shipment.Number, | Shipment.Picture, | Shipment.ShippingCarrier, | Shipment.CustomerOrderList.( | LineNumber, | Order | ) |FROM | Document.Shipment AS Shipment |WHERE | Shipment.Ref IN (&Ref)"; Query.Parameters.Insert("Ref", Ref); Selection = Query.Execute().Select(); AreaCaption = Template.GetArea("Caption"); Header = Template.GetArea("Header"); AreaCustomerOrderListHeader = Template.GetArea("CustomerOrderListHeader"); AreaCustomerOrderList = Template.GetArea("CustomerOrderList"); Footer = Template.GetArea("Footer"); Spreadsheet.Clear(); InsertPageBreak = False; While Selection.Next() Do If InsertPageBreak Then Spreadsheet.PutHorizontalPageBreak(); EndIf; Spreadsheet.Put(AreaCaption); Header.Parameters.Fill(Selection); Spreadsheet.Put(Header, Selection.Level()); Spreadsheet.Put(AreaCustomerOrderListHeader); SelectionCustomerOrderList = Selection.CustomerOrderList.Select(); While SelectionCustomerOrderList.Next() Do AreaCustomerOrderList.Parameters.Fill(SelectionCustomerOrderList); Spreadsheet.Put(AreaCustomerOrderList, SelectionCustomerOrderList.Level()); EndDo; Footer.Parameters.Fill(Selection); Spreadsheet.Put(Footer); InsertPageBreak = True; EndDo; //}} EndProcedure |
|||
1
Shogun
08.01.20
✎
07:14
|
Сейчас при печати просто выводится текст Picture ValueStorage
|
|||
2
fisher
08.01.20
✎
10:09
|
Так ты же даже не пытался выводить картинку.
Заставь себя вбить в гугле "1С предприятие вывод картинки в табличный документ" |
|||
3
ДенисЧ
08.01.20
✎
10:13
|
(1) Ну... Радуйся, что 1с. А не я...
|
|||
4
Shogun
08.01.20
✎
12:42
|
(2) Я пытаюсь получить картинку, но мне выдается ошибка что путь не найден.
|
|||
5
Shogun
08.01.20
✎
12:43
|
(4) PictureMap = GetURL(Ref[0], "Picture");
Picture = New Picture(PictureMap,True); |
|||
6
Shogun
08.01.20
✎
12:43
|
При чем при открытии формы документа этот путь корректный, т.к. картинка подтягивается и отображается на форме.
|
|||
7
ДенисЧ
08.01.20
✎
12:46
|
А зачем ты на табдок выводишь ХЗ знает что?
Может, туда имеет смысл таки картинку выводить, полученную из этого ХЗ? |
|||
8
Shogun
08.01.20
✎
12:48
|
Я в табдок вывожу хз что, потому что я вообще не понимаю как мне туда вытащить картинку. Вообще впервые это делаю. До этого пару раз в отчет выводил и все. Вообще не понимаю с какого конца подступиться.
|
|||
9
ДенисЧ
08.01.20
✎
12:53
|
(8) google://1с+как+вывести+картинку+в+табличный+документ
Там никакого рокет-сайнса. |
|||
10
Shogun
08.01.20
✎
12:58
|
(9) я уже по сто раз все пересмотрел, но так и не нашел подходящего паттерна, где бы по шагам объяснили как вставить картинку в макет печатной формы.
Я через конструктор сделал макет. Все вроде работает. Мне нужно теперь этот макет модифицировать, чтобы там печаталась моя картинка. Что для этого нужно сделать? Есть где нибудь мануал для новичков? |
|||
11
ДенисЧ
08.01.20
✎
13:00
|
(10) Воткни в макет в нужное место картинку, растяни по месту.
Потом при выводе через табдок.Картинки найди свой элемент и запихни в него Новый Картинка(из твоего ХЗ). Наслаждайся. ЗЫ. И не вынуждай меня поднимать впн на удалёнку и тащить оттуда свой код ))) |
|||
12
fisher
08.01.20
✎
13:05
|
(10) Первый пример из первой ссылки из (9):
//Как вывести картинку в табличный документ? ТабДок = Новый ТабличныйДокумент; Макет = ОбработкаОбъект.ПолучитьМакет("Макет"); ОбластьКартинки = Макет.ПолучитьОбласть("ОбластьСКартинкой"); Картинка = Новый Картинка(ПутьККартинке); // Элемент управления "Логотип" входит в коллекцию картинок области. ОбластьКартинки.Рисунки.Логотип.Картинка = Картинка; ТабДок.Вывести(ОбластьКартинки); ТабДок.Показать(); |
|||
13
fisher
08.01.20
✎
13:09
|
(5) Внимательнее читай справку. Конструктор картинки должен принимать ДвоичныеДанные, а ты туда строку с навигационной ссылкой пихаешь.
|
|||
14
fisher
08.01.20
✎
13:13
|
Насколько я понял, в реквизите PictureMap у тебя уже должна лежать ссылка на картинку во временном хранилище.
Соответственно получай картинку просто как GetFromTempStorage(PictureMap) |
|||
15
Shogun
08.01.20
✎
13:17
|
(13) так у меня вроде так и есть мейчас
АдресКартинки = GetURL(Ссылка[0],"Картинка"); Картинка = Новый Картинка(ПолучитьИзВременногоХранилища(АдресКартинки), Истина); За синтаксис сорри, пишу на память с телефона. |
|||
16
Shogun
08.01.20
✎
13:18
|
Выдает ошибку неверный путь. При этом тот же путь применяется при открытии формы.
|
|||
17
Shogun
08.01.20
✎
13:19
|
В макете у меня есть реквизит Картинка с типом картинка.
|
|||
18
Shogun
08.01.20
✎
13:22
|
Я в упор не могу понять как происходит обращение к параметру макета и как туда передать переменную картинку, которую я должен получить по навигационной ссылке.
|
|||
19
Shogun
08.01.20
✎
13:23
|
Во первых, я ничего не получаю. У меня ошибка неверный путь. А во-вторых, как это все связать вообще загадка.
|
|||
20
fisher
08.01.20
✎
13:25
|
(15) Во-первых, во временном хранилище УЖЕ картинка. Не надо ее передавать в конструктор картинки.
Во-вторых, я прогнал. Надо не из временного хранилища брать (это для отображения на форме). Надо брать из реквизита документа: Картинка = Picture.Get(); |
|||
21
fisher
08.01.20
✎
13:27
|
У тебя ведь картинка сохраняется в реквизите документа "Picture" типа ХранилищеЗначения/ValueStorage.
Метод Получить/Get на сервере - вернет готовую картинку из него. А ее уже присваивай нужному рисунку из коллекции рисунков области. |
|||
22
Shogun
08.01.20
✎
13:30
|
(20) ну ок. Она во временном хранилище. При открытии формы, я ее вывел на саму форму. Далее я создаю переменную
Картинка = Картинка.Получить(); А как мне ее передать параметру макета? В макете у меня есть область "ОбластьКартинки" и там размещен параметр КартинкаМакета с типом картинка |
|||
23
ДенисЧ
08.01.20
✎
13:32
|
(22) ты (12) прочитал внимательно?
|
|||
24
Shogun
08.01.20
✎
13:39
|
(23) то есть синтаксис такой?
//Picture - реквизит документа типа Хранилище Значений, где хранится нужна картинка. КартинкаМакета = Picture.Получить(); И он отобразится в макете? |
|||
25
Shogun
08.01.20
✎
13:40
|
КартинкаМакета - параметр макета с типом картинка
|
|||
26
fisher
08.01.20
✎
13:42
|
(22) Не. Не через параметр. Из палитры инструментов работы с табличным документом ты можешь в табличный документ вставить Рисунок. Он будет доступен через коллекцию рисунков области табличного документа. Смотри (12). Ему и назначешь картинку.
Теперь смотри. Если у тебя процедура Печать - в модуле менеджера документа, то тебе нужно получить картинку из реквизита Picture твоего документа, ссылка на который в параметре Ref Procedure Печать(Spreadsheet, Ref) Export Тут ньюанс, так как я не помню, можно ли получать запросом реквизиты документа типа "ХранилищеЗначений". По-моему, нельзя. А тогда теряется смысл вообще использовать запрос, так как при обращении "через точку" к ссылке кэшируются все данные документа. Это, кстати, причина по которой не рекомендуется в справочники/документы пихать большие данные в реквизиты типа "ХранилищеЗначения". Обычно регистр сведений для этого заводят. Но у тебя прямо сейчас это будет выглядеть как Header.Drawings.ИмяВставленногоРисунка.Picture = Ref.Picture.Get(); Где Header - имя секции табличного документа со вставленным рисунком. |
|||
27
ДенисЧ
08.01.20
✎
13:42
|
(24) цЫтирую..
Картинка = Новый Картинка(ПутьККартинке); ОбластьКартинки.Рисунки.Логотип.Картинка = Картинка; ТабДок.Вывести(ОбластьКартинки); Какая буква конкретно не понятна? |
|||
28
Shogun
08.01.20
✎
13:48
|
Завтра попробую ещё раз. Большое спасибо за помощь!
|
|||
29
fisher
08.01.20
✎
13:57
|
(26) + Тьфу. "Где Header - имя секции табличного документа со вставленным рисунком."
Не имя секции, а вот эта хрень: Header = Template.GetArea("Header"); Ну ты понял, короче. |
|||
30
Shogun
09.01.20
✎
08:53
|
(29) Все получилось! Спасибо!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |