Имя: Пароль:
1C
 
Как добавить картинку в макет из хранилища значений документа
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) Все получилось! Спасибо!