Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Макет Фиксация

Есть макет, использую его не для стандартных нужд, а для выбора цвета по клику мышки. Что бы пользователь не мог сколлить макет и случайно спрятать его содержимое я подумал сделать фиксации сверху и слева. Не могу понять, почему по отдельности фиксации работают, а если вместе, то фиксируется последнее команда фиксации

// в данном случае зафиксируется ФиксацияСлева

ЭлементыФормы.ПолеТабличногоДокументаColorSlider.ФиксацияСверху = 259;
ЭлементыФормы.ПолеТабличногоДокументаColorSlider.ФиксацияСлева = 2;

// а в этом случае зафиксируется ФиксацияСверху 

ЭлементыФормы.ПолеТабличногоДокументаColorSlider.ФиксацияСлева = 2;
ЭлементыФормы.ПолеТабличногоДокументаColorSlider.ФиксацияСверху = 259;

Если есть идеи по другому запретить сколл у макета - буду рад услышать. Заранее спасибо.
Ответ: Тема совсем умерла :(
Вопрос: Как ускорить создание макетов сложных печатных форм?

Мне тут попалась шабашка по созданию и заполнению сложных печатных форм для частных предпринимателей Украины. Никакие официальные программы эти формы не поддерживают. Оригиналы макетов представлены только в ворде, иногда в pdf, один раз было в экселе, но этим макетом воспользоваться не удалось, так он был сделан через одно место.

В конце концов, я эти формы (около десятка) сделал вручную в 1С, в «семерке» (можно было в «восьмерке», но вынужден был привязываться к конфигурации клиента). В принципе, если рука набита, то за день подобный макет вполне реально сделать. Однако возникли некоторые вопросы по эффективности работы.

Просто тупо лепить макеты довольно скучновано и утомительно. Пробовал ваять в экселе, а потом конвертировать в моксел. Работать можно, но особого прироста производительности не было. Потом формировал макеты в «восьмерке» и сохранял в формате «семерки». Табличный редактор в 1С8х помощнее будет, чем в 1С77, но не всегда полученные файлы открываются в «семерке», есть риск проделать работу зря.

Изучая данный вопрос, открыл для себя процессор FOP, который на базе двух xml-файлов (один файл с данными, другой с xsl:fo разметкой печатного макета) формирует нужный отчет в форматах pdf, rtf и некоторых других. Есть там и превьюер, так, что он вполне может служить альтернативой системе печати в 1С.

Сравнивание двух систем построения макетов печатных форм (в графическом виде – в 1С и в текстовом виде – в FOP) навеяло мысль, что они принципиально отличаются между собой как табличная и блочная верстки в веб-дизайне. В Интернете до сих пор ведутся ожесточенные споры между адептами двух систем верстки.

Потенциальное преимущество текста (хотя «блочность» определяет не текст а сама парадигма ФОП) перед графикой кроется в повышении производительности. Например, если вам нужно набрать пару формул для диплома, то удобно воспользоваться вордом с Microsoft Equation, ну а если нужно сверстать большую статью или книгу со сложной математикой, то гораздо удобней применить TeX (или MathType, тот же TeX, только в ворде). Конечно, формулы набирать в текстовом виде поначалу непривычно, однако тыкание мышкой очень часто проигрывает клавиатурному набору.

Тоже самое и при построении макетов в текстовом виде (в xml-разметке xsl:fo). Поначалу сложно, зато интересно и потенциально более эффективно. Заметим, что в тексте можно набирать и сериализованные xml-файлы для файлов моксел, но принцип «табличности» или «блочности» это не меняет.

Другая возможная выгода, это способность использования чужих макетов. Не знаю как в России, но в Украине, есть программы OPZ (на базе hta) и Medoc (на Net Framework) с сотнями, если не тысячами макетов печатных форм в формате FOP (правда относительно доступными в первой программе и практически недоступными (зашифрованными) во второй). Эти программы также используют экранные формы для ввода и редактирования данных, что с одной стороны удобно, а с другой бестолково, в силу убогой реализации, хотя Медок уже под пару гигабайт будет.

Поэтому логично данные хранить в 1С. Там экранные формы тоже можно делать на базе того же моксела, хотя этот вариант мне кажется не слишком оптимальным (в смысле трудоемкости создания этих форм). Однако вводить очень разнородные данные, различные для разных отчетов в 1С тоже не слишком удобно. В данной шабашке я выкрутился созданием псевдоленточных форм списков данных, которые генерю автоматически для каждого отчета.

Другими словами нужно строить дерево данных, на основании которых будут сформированы xml-данные. Для этого удобно применять ленточные формы списков (как в окнах свойств) с возможностью редактирования независимых таблиц для выбранных элементов. Пока это можно только пытаться имитировать в 1С. Как вариант – использовать экранные формы. Но таковых в FOP'е нет, а рисовать их в 1С муторно. Конвертация блочной верстки ФОП в табличную 1С (xml-сериализация для mxl-файлов) и обратно – весьма нетривиальна задача. Оставаться в парадигме OPZ (Hta + JavaScript + Fop) не очень интересно из-за отсутствия нормального движка базы данных и не слишком удобных экранных форм (может быть просто плохо спроектированных?).

В общем, хочется сделать аналог OPZ, но на базе 1С. Кстати, может кто знает, используется ли FOP в российских отчетных системах?

Интересно выслушать мнения в развитие этой темы.

P.S. Кажется я понял, почему оригиналы макетов любят предоставлять в ворде, а не в экселе. Эксел это типичный табличный процессор, а ворд – блочный. В блочном процессоре (также в отчетах акцесса) сложные формы делать проще, чем в табличном. Для примера можно рассмотреть форму средней сложности «Форма2НДФЛс2015» из «1С:ERP Управление предприятием 2». Обратите внимание на колонки и строки разной ширины. В блочной верстке (в ФОП’е) об этом можно не беспокоиться.
Ответ:
Zerro
скинь ссылку ..не пользовался. Может попробуем если сложные формы нужны будут



ФОП – штука хорошая, только немного сложноватая при первоначальном изучении. Тем более что информации на русском очень мало, в основном для старых версий. Но старые версии не поддерживают rtf, только pdf. Далее, насчет верстки печатных макетов. Здесь полная аналогия с интернет вёрсткой. Хороший шаблон получается при ручном наборе. Использование различных графических средств возможно, но качество кода будет менее прозрачным, да и особых преимуществ перед тем же табличным редактором 1С или там редактированием макетов в акцессе, не будет. Я вот думаю, может быть написать некоторые скрипты, чтобы облегчить себе создание печатных макетов для ФОП'а.

Второй вариант это xml-сериализация mxl-файлов. Там структура данных будет не сложнее фоповского формата xsl:fo. Есть некоторые нюансы, но разобраться можно будет. Эти файлы тоже можно пробовать формировать вручную или с помощью собственных скриптов, затем конвертировать их стандартными средствами 1С в формат моксел.

Разница здесь только в способе организации данных: с помощью таблиц или с помощью блоков (div аналог в html-верстке).

Лично я пока еще в раздумьях.
Вопрос: 1c Табличая часть документа в одной строке (макет)как это сделать?

мне надо сделать чтобы перечисление адресов было в строчку в печатной форме!пример: (в одну ячейку 1)р. Казахстан, г.Астана по ТТН 2)г. Новосибирск ул. Ленина 18 и тог дальше). я нашло одно обсуждение тока че то у меня оно не работает!!!

Кликните здесь для просмотра всего текста
Код 1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
Процедура СчетФактура(ТабДок, Ссылка) Экспорт
    //{{_КОНСТРУКТОР_ПЕЧАТИ(СчетФактура)
    Макет = Документы.Счет.ПолучитьМакет("СчетФактура");
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |   Счет.Водитель,
    |   Счет.Дата,
    |   Счет.Заказчик,
    |   Счет.Исполнитель,
    |   Счет.Номер,
    |   Счет.Сумма,
    |   Счет.СуммаНалога,
    |   Счет.Транспорт,
    |   Счет.ЦенаТарифа,
    |   Счет.товар.(
    |       НомерСтроки,
    |       Ссылка.Водитель,
    |       Ссылка.Транспорт,
    |       Ссылка.Дата,
    |       Ссылка.Сумма,
    |       Ссылка.Цена,
    |       Ссылка.КолВо,
    |       Ссылка.ЦенаТарифа,
    |       Ссылка.СтоимостьУслуги,
    |       Ссылка.СуммаНалога,
    |       Ссылка.Сумма КАК Сумма1,
    |       Адрес,
    |       Ссылка
    |   ),
    |   Счет.Исполнитель.Банк КАК испБанк,
    |   Счет.Исполнитель.Бик КАК испБик,
    |   Счет.Исполнитель.КорреспонденскийСчет КАК испКорреспонденскийСчет,
    |   Счет.Исполнитель.ИНН КАК иИНН,
    |   Счет.Исполнитель.КПП КАК иКПП,
    |   Счет.Исполнитель.Наименование КАК ИСП,
    |   Счет.Исполнитель.НомерСчета КАК оргНомерСчета,
    |   Счет.Исполнитель.ЮридическийАдрес.Страна КАК иСтрана,
    |   Счет.Исполнитель.ЮридическийАдрес.Индекс КАК иИндекс,
    |   Счет.Исполнитель.ЮридическийАдрес.Город КАК иГород,
    |   Счет.Исполнитель.ЮридическийАдрес.Улица КАК иУлица,
    |   Счет.Исполнитель.ТелефонФакс КАК иТелефонФакс,
    |   Счет.Заказчик.ИНН КАК зИНН,
    |   Счет.Заказчик.КПП КАК зКПП,
    |   Счет.Заказчик.ЮридическийАдрес.Наименование КАК зЮАдрес,
    |   Счет.Исполнитель.ФИОДиректор КАК иФИОДиректор,
    |   Счет.ПрописьЧисла1,
    |   Счет.ПрописьЧисла,
    |   Счет.СтоимостьУслуги,
    |   Счет.Адрес1
    |ИЗ
    |   Документ.Счет КАК Счет
    |ГДЕ
    |   Счет.Ссылка В(&Ссылка)";
    Запрос.Параметры.Вставить("Ссылка", Ссылка);
    Выборка = Запрос.Выполнить().Выбрать();
    
 
    Шапка1                 = Макет.ПолучитьОбласть("Шапка1");
    ОбластьтоварШапка      = Макет.ПолучитьОбласть("товарШапка");
    Областьтовар           = Макет.ПолучитьОбласть("товар");
    ТоварПодвал            = Макет.ПолучитьОбласть("ТоварПодвал");
    Подвал                 = Макет.ПолучитьОбласть("Подвал");
 
    ТабДок.Очистить();
    
    
    ВставлятьРазделительСтраниц = Ложь;
    Пока Выборка.Следующий() Цикл
        Если ВставлятьРазделительСтраниц Тогда
            ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
        КонецЕсли;
 
        Шапка1.Параметры.Заполнить(Выборка);
        ТабДок.Вывести(Шапка1, Выборка.Уровень());
 
        
        ТабДок.Вывести(ОбластьтоварШапка);
        Выборкатовар = Выборка.товар.Выбрать();
        //Пока Выборкатовар.Следующий() Цикл
        //  Областьтовар.Параметры.Заполнить(Выборкатовар);
        //  ТабДок.Вывести(Областьтовар, Выборкатовар.Уровень());
        //  КонецЦикла;
 
 
//  ???????????????????????????????????????????????????????????????????????????????
Пока Выборкатовар.Следующий() Цикл
             ДокСчет = Выборкатовар.Ссылка;
               //(реакция на пустую ТЧ по ситуации)
             Для каждого стр Из ДокСчет.Товар Цикл
                 Если стр.НомерСтроки = 1 Тогда
                    Областьтовар.Параметры.Заполнить(ДокСчет);
                    ТабДок.Вывести(Областьтовар);                
                 Иначе
                     Областьтовар.Параметры.Заполнить(стр);
                     
                     //Областьтовар.Параметры.Адрес ="";
                     
                     ТабДок.Вывести(Областьтовар); 
                 КонецЕсли
             КонецЦикла;   
        КонецЦикла
//  ???????????????????????????????????????????????????????????????????????????????????????????     
               
        
        ТоварПодвал.Параметры.Заполнить(Выборка);
        ТабДок.Вывести(ТоварПодвал, Выборка.Уровень());
 
 
        Подвал.Параметры.Заполнить(Выборка);
        ТабДок.Вывести(Подвал);
 
        ВставлятьРазделительСтраниц = Истина;
    КонецЦикла;
    //}}
КонецПроцедуры
Ответ: Все получилось! Огромное спасибо!!!
рабочая версия

Код 1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
Процедура СчетФактура(ТабДок, Ссылка) Экспорт
    //{{_КОНСТРУКТОР_ПЕЧАТИ(СчетФактура)
    Макет = Документы.Счет.ПолучитьМакет("СчетФактура");
    Запрос = Новый Запрос;
    Запрос.Текст =
          "ВЫБРАТЬ
          | Счет.Исполнитель,
          | Счет.Исполнитель.ЮридическийАдрес.Индекс КАК иИндекс,
          | Счет.Исполнитель.ЮридическийАдрес.Страна КАК иСтрана,
          | Счет.Исполнитель.ЮридическийАдрес.Город КАК иГород,
          | Счет.Исполнитель.ЮридическийАдрес.Улица КАК иУлица,
          | Счет.Исполнитель.ИНН КАК иИНН,
          | Счет.Исполнитель.КПП КАК иКПП,
          | Счет.Заказчик,
          | Счет.Заказчик.ЮридическийАдрес КАК зЮАдрес,
          | Счет.Заказчик.ИНН КАК зИНН,
          | Счет.Заказчик.КПП КАК зКПП,
          | Счеттовар.Ссылка,
          | Счеттовар.НомерСтроки,
          | Счеттовар.вид,
          | Счеттовар.Адрес,
          | Счет.ДатаПрихода,
          | Счет.Водитель,
          | Счет.Транспорт,
          | Счет.Транспорт.Полуприцеп,
          | Счет.Транспорт.ВидТс,
          | Счет.КолВо,
          | Счет.ЦенаТарифа,
          | Счет.СтоимостьУслуги,
          | Счет.СуммаНалога,
          | Счет.Сумма,
          | Счет.Заказчик.ФИОДиректор,
          | Счет.Исполнитель.ФИОДиректор
          |ИЗ
          | Документ.Счет.товар КАК Счеттовар
          |     ЛЕВОЕ СОЕДИНЕНИЕ Документ.Счет КАК Счет
          |     ПО Счеттовар.Ссылка = Счет.Ссылка
          |ГДЕ
          | Счет.Ссылка В(&Ссылка)";
    Запрос.Параметры.Вставить("Ссылка", Ссылка);
    Выборка = Запрос.Выполнить().Выбрать();
     
     НомерСтроки = (",  ");
    ВТ = Запрос.Выполнить().Выгрузить();
    МассивАдресов = ВТ.ВыгрузитьКолонку("Адрес");
    СтрокаАдресов = "";
    МассивНомеров = ВТ.ВыгрузитьКолонку("НомерСтроки");
    СтрокаНомеров = "";
    
    Для Каждого Адрес ИЗ МассивАдресов Цикл
        СтрокаАдресов = СтрокаАдресов  + Адрес + НомерСтроки;
    КонецЦикла;
 
 
    ВставлятьРазделительСтраниц = Ложь;
    Пока Выборка.Следующий() Цикл
          Если ВставлятьРазделительСтраниц Тогда
            ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
        КонецЕсли;
        Шапка                   = Макет.ПолучитьОбласть("Шапка");
        Шапка.Параметры.Адреса = СтрокаАдресов;// вместо "Адреса" пиши как параметр в макете зовется (если он в шапке)
        Шапка.Параметры.Заполнить(Выборка);
        ТабДок.Очистить();
 
        ТабДок.Вывести(Шапка, Выборка.Уровень());
        
        
       
 
        ВставлятьРазделительСтраниц = Истина;
    КонецЦикла;
        //}}
КонецПроцедуры
Вопрос: Работа с макетом

Подскажите как можно с макета перейти сразу в Справочник.ЛицевыеСчетаАбонентов
Вот код макета

Код 1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
Процедура ОсновныеДействияФормыОсновныеДействияФормыВыполнить(Кнопка)
    ТабДок = Новый ТабличныйДокумент;
    Макет=ПолучитьМакет("Макет");
    ОбластьМакета=Макет.ПолучитьОбласть("Шапка");
    Областьмакета.Параметры.НазваниеТемы="Список льготников по" + " " + Регион;
    ТабДок.Вывести(ОбластьМакета);
    ОбластьМакета = Макет.ПолучитьОбласть("Заголовок");
    ТабДок.Вывести(ОбластьМакета);
    
    Запрос = Новый Запрос;
    ТекстЗапроса =
    "ВЫБРАТЬ
    |   ЛицевыеСчетаАбонентовЛьготники.Ссылка,
    |   ЛицевыеСчетаАбонентовЛьготники.Льгота,
    |   ЛицевыеСчетаАбонентов.Регион,
    |   ЛицевыеСчетаАбонентовЛьготники.ФИО.Наименование КАК ИмяЛьготник,
    |   ЛицевыеСчетаАбонентовЛьготники.ФИО.ДатаРождения КАК РожденияЛьготник,
    |   ЛицевыеСчетаАбонентов.Наименование КАК Адрес,
    |   ЛицевыеСчетаАбонентов.Код
    |ИЗ
    |   Справочник.ЛицевыеСчетаАбонентов.Льготники КАК ЛицевыеСчетаАбонентовЛьготники
    |       ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЛицевыеСчетаАбонентов КАК ЛицевыеСчетаАбонентов
    |       ПО ЛицевыеСчетаАбонентовЛьготники.Ссылка = ЛицевыеСчетаАбонентов.Ссылка";
    
    Если ЗначениеЗаполнено(Регион) Тогда
        ТекстЗапроса=ТекстЗапроса+"
        |ГДЕ
        |   ЛицевыеСчетаАбонентов.Регион=&Регион";
        Запрос.УстановитьПараметр("Регион",Регион);
    КонецЕсли;  
    Запрос.Текст=ТекстЗапроса;
    Результат = Запрос.Выполнить().Выбрать();
    Номер = 0;
    Пока Результат.Следующий() Цикл
        Номер = Номер + 1;
        Областьмакета=Макет.ПолучитьОбласть("Строка");
        ОбластьМакета.Параметры.Номер = Номер;
        ОбластьМакета.Параметры.ЛС = Результат.Код;
        ОбластьМакета.Параметры.ФИО = Результат.ИмяЛьготник;
        ОбластьМакета.Параметры.Дата = Формат(Результат.РожденияЛьготник,"ДЛФ=Д");
        ОбластьМакета.Параметры.Адрес = Результат.Адрес;
        ОбластьМакета.Параметры.КодЛьгот = Результат.Льгота.Код;
        ТабДок.Вывести(ОбластьМакета);
        Состояние("Количество льготников =" + " " + Номер);
    КонецЦикла;
    ТабДок.ОриентацияСтраницы=ОриентацияСтраницы.Портрет;
    ТабДок.АвтоМасштаб=Истина;
    ТабДок.ОтображатьСетку = Ложь;
    ТабДок.Защита = Ложь;
    ТабДок.ТолькоПросмотр = Истина;
    ТабДок.ОтображатьЗаголовки = Ложь; 
    ТабДок.ПовторятьПриПечатиСтроки=ТабДок.Область("R4:R5");  
    ТабДок.Показать();
    
КонецПроцедуры
Ответ: А я на работу ушел. Думал понятно и так будет. Все равно напишу.

1. В запросе берешь ссылку на элемент справочника
Код 1C
1
... ВЫБРАТЬ ЛицевыеСчетаАбонентов.Ссылка СчетаСсылка ...
2. В макете, в требуемой ячейке указываешь "Параметр расшифровки" СчетаСсылка
3. При обработке результата запроса просто подставляешь в параметры области
Код 1C
1
2
3
4
выводимаяОбласть = макет.ПолучитьОбласть(...)
...
выводимаяОбласть.Параметры.СчетаСсылка = результатЗапроса.СчетаСсылка
// ну или так тоже работает выводимаяОбласть.Параметры.Заполнить(результатЗапроса);
4. Закрываешь табличный документ от редактирования. Все и никакого кода для обработки открытия простой ссылки на элемент справочника не нужно писать.
Вопрос: вопрос про "ПараметрРасшифровки" при обращении Макет.Область("R5C4") в макете

Здравствуйте!

Так работает:
Макет.Область("R5C3").Текст = Выборка.НоменклатураНаименование;

Теперь захотелось, чтобы Макет.Область("R5C3") стала кликабельной и открывала нужную "Номенклатуру" из "Справочника"

В макете в свойствах указал Заполнение "Параметр" и ПараметрРасшифровки прописал "СсылкаНаНоменклатуру"

Теперь в цикле делаю так:
Макет.Область("R5C3").Параметр = Выборка.НоменклатураНаименование;
Макет.Область("R5C3").ПараметрРасшифровки.СсылкаНаНоменклатуру = Выборка.СсылкаНаНоменклатуру

В результате ошибка:
Значение не является значением объектного типа (СсылкаНаНоменклатуру)
        Макет.Область("R5C4").ПараметрРасшифровки.СсылкаНаНоменклатуру = Выборка.Номенклатура;


Неужели нельзя обращаться к ячейкам-параметрам через Область("R5C3") по координатам?... Или я что-то не так делаю :)
Ответ: всем спасибо еще раз, в данной ситуации рабочий вариант оказался такой:

        Макет.Область("R5C4").Текст = Выборка.НоменклатураНаименование;        
        Макет.Область("R5C4").Расшифровка = Выборка.НоменклатураСсылка;
Вопрос: Правильный перенос текста в макете печати

Добрый день, прошу помочь с решением проблемы с переносом текста строки на следующую страницу.
Конфигурация УНФ 1.6, Документ Заказ покупателя - печатная форма Коммерческое предложение
В печатную форму выводится информация из описания номенклатуры - т.к. текста в описании много, часть текста не влазит на страницу и переносится на следующую. Но возникает проблема с тем что рвется текст пополам.
Приложил файл тест в котором показан разрыв текста на печати
и файл макета печатной формы

В коде для вывода строки описание используются следующие параметры:
ОписаниеНоменклатуры = ВыборкаСтрокПроверка.Комментарий;
ОбластьМакетаСтрока.Параметры.ОписаниеНоменклатуры = ОписаниеНоменклатуры;

Код формирования печатной формы:
Код:
ТабличныйДокумент = Новый ТабличныйДокумент;
    ТабличныйДокумент.ПолеСверху = 15;
    ТабличныйДокумент.ПолеСлева = 7;
    ТабличныйДокумент.ПолеСнизу = 0;
    ТабличныйДокумент.ПолеСправа = 7;
    ТабличныйДокумент.КлючПараметровПечати = "ПараметрыПечати_КоммерческоеПредложение";
Пока ВыборкаСтрокПроверка.Следующий() Цикл
            ФайлКартинкиНоменклатуры = ВыборкаСтрокПроверка.ФайлКартинки;
            ОписаниеНоменклатуры = ВыборкаСтрокПроверка.Комментарий;
            Если ЗначениеЗаполнено(ОписаниеНоменклатуры) ИЛИ ЗначениеЗаполнено(ФайлКартинкиНоменклатуры) Тогда
                ЕстьДанные = ЕстьДанные + 1;
            КонецЕсли;
        КонецЦикла;

        Если ЕстьДанные > 0 Тогда
            ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
            ОбластьМакетаПоставщик = Макет.ПолучитьОбласть("ПоставщикНоменклатура");
            ОбластьМакетаПоставщик.Параметры.Заполнить(Шапка);
            ДанныеКартинки = ПрисоединенныеФайлы.ПолучитьДвоичныеДанныеФайла(Шапка.Организация.ФайлЛоготип);
            ОбластьМакетаПоставщик.Рисунки.ЛоготипНоменклатура.Картинка = Новый Картинка(ДанныеКартинки);
            ОбластьМакетаПоставщик.Параметры.НаименованиеПоставщика = УправлениеНебольшойФирмойСервер.ОписаниеОрганизации(СведенияОбОрганизации, "Представление,");
            ОбластьМакетаПоставщик.Параметры.АдресПоставщика = УправлениеНебольшойФирмойСервер.ОписаниеОрганизации(СведенияОбОрганизации, "ЮридическийАдрес,");
            ОбластьМакетаПоставщик.Параметры.ТелефонПоставщика = УправлениеНебольшойФирмойСервер.ОписаниеОрганизации(СведенияОбОрганизации, "Телефоны,");
            ОбластьМакетаПоставщик.Параметры.ЭлектроннаяПочтаПоставщика = УправлениеНебольшойФирмойСервер.ОписаниеОрганизации(СведенияОбОрганизации, "ЭлектроннаяПочта,");
            Колонки = Справочники.Организации.ОсновнаяОрганизация.КонтактнаяИнформация.Выгрузить();
            Перечисление = Перечисления.ТипыКонтактнойИнформации.ВебСтраница;
            ОбластьМакетаПоставщик.Параметры.ВебСтраница = ВебСтраница;
            ОбластьМакетаПоставщик.Параметры.Отпустил = Шапка.Ответственный;
            ОбластьМакетаПоставщик.Параметры.ОтпустилТелефон = УправлениеНебольшойФирмойСервер.ПолучитьКонтактнуюИнформацию(Шапка.Ответственный.ФизЛицо, Справочники.ВидыКонтактнойИнформации.ТелефонФизЛица);
            ТабличныйДокумент.Вывести(ОбластьМакетаПоставщик);
            ОбластьМакетаЗаголовок = Макет.ПолучитьОбласть("ЗаголовокНоменклатуры");
            ОбластьМакетаЗаголовок.Параметры.ТекстЗаголовкаНоменклатуры = "Описание, фото и технические характеристики продукции.";
            ТабличныйДокумент.Вывести(ОбластьМакетаЗаголовок);
            ОбластьМакетаШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицыНоменклатуры");
            ТабличныйДокумент.Вывести(ОбластьМакетаШапкаТаблицы);
            Пока ВыборкаСтрокНоменклатура.Следующий() Цикл
                ФайлКартинкиНоменклатуры = ВыборкаСтрокНоменклатура.ФайлКартинки;
                Если ЗначениеЗаполнено(ФайлКартинкиНоменклатуры) Тогда
                    ОбластьМакетаСтрока = Макет.ПолучитьОбласть("СтрокаНоменклатуры");
                Иначе
                    ОбластьМакетаСтрока = Макет.ПолучитьОбласть("СтрокаНоменклатурыБезФото");
                КонецЕсли;
                    ОбластьМакетаСтрока.Параметры.Заполнить(ВыборкаСтрокНоменклатура);
                    ОписаниеНоменклатуры = ВыборкаСтрокНоменклатура.Комментарий;
                    ОбластьМакетаСтрока.Параметры.НаименованиеНоменклатуры = ВыборкаСтрокНоменклатура.Запас +":";
                    ОбластьМакетаСтрока.Параметры.ОписаниеНоменклатуры = ОписаниеНоменклатуры;
                    ЕстьДанныеНоменклатура = 0;
                    Если ЗначениеЗаполнено(ОписаниеНоменклатуры) ИЛИ ЗначениеЗаполнено(ФайлКартинкиНоменклатуры) Тогда
                        Если ЗначениеЗаполнено(ФайлКартинкиНоменклатуры) Тогда
                            ДанныеКартинки = ПрисоединенныеФайлы.ПолучитьДвоичныеДанныеФайла(ВыборкаСтрокНоменклатура.ФайлКартинки);
                            КартинкаНоменклатуры = Новый Картинка(ДанныеКартинки);
                            ОбластьМакетаСтрока.Рисунки["ФотоНоменклатуры"].Картинка = КартинкаНоменклатуры;
                        КонецЕсли;
                        НомерСтрокиНоменклатура = НомерСтрокиНоменклатура + 1;
                        ОбластьМакетаСтрока.Параметры.НомерСтрокиНоменклатура = НомерСтрокиНоменклатура;
                        ЕстьДанныеНоменклатура = ЕстьДанныеНоменклатура + 1;
                    КонецЕсли;
                    Если ЕстьДанныеНоменклатура > 0 Тогда
                           ТабличныйДокумент.Вывести(ОбластьМакетаСтрока);
                    КонецЕсли;
            КонецЦикла;
                ОбластьМакетаПодвал = Макет.ПолучитьОбласть("ПодвалНомеклатура");
                ТабличныйДокумент.Вывести(ОбластьМакетаПодвал)
        КонецЕсли;

        УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, Шапка.Ссылка);
    КонецЦикла;

    ТабличныйДокумент.АвтоМасштаб = Истина;

Вложения:

  • Размер файла:
    427,9 КБ
    Просмотров:
    1
  • Размер файла:
    32 КБ
    Просмотров:
    1
Ответ:
Нашел такую интересную особенность, если выставить не стандартные поля - например 7 слева, 7 справа, 7 снизу и 15 сверху то макет кривой
если же вернуть все по 10 то все становится на место. теперь вопрос как заставить правильно масштабировать документ при нестандартных настройках
Вопрос: Одна кнопка и несколько вариантов макета

Есть документ в нем два макета,в модуле менеджера описаны функции вывода в макет. Не знаю как и в каком месте сделать чтобы по нажатии кнопки печать выбор какой макет вывести.
Гугл не помог
Ответ:
Вопрос закрыт,всем большое спасибо 
Что сделала:
Создала "Группы команд" на ветке "Общее" 
В свойствах Категория:Командная панель формы

Было создано две стандартные команды печати конструктором 
В свойствах:

Группа:Командная панель формы.<Имя группы>
Тип параметра команды: ДокументСсылка.<Имя Документа>
Режим Использования : Множественный

В модуле команды :

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

&НаСервере
Процедура Печать(ТабДок, ПараметрКоманды)
    Документы.КонсолидированныйБаланс.ПечатьОтчетБаланс(ТабДок, ПараметрКоманды);
КонецПроцедуры


В модуле менеджера:
Функция ПечатьОтчетБаланс(ТабДок, Ссылка) Экспорт
    
    Макет = Документы.КонсолидированныйБаланс.ПолучитьМакет("ОтчетБаланс");
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    КонсолидированныйБаланс.Дата КАК Дата,
    |    КонсолидированныйБаланс.Номер КАК Номер,
    |    КонсолидированныйБаланс.Организация.НаимЮЛПол КАК НаимЮЛПол,
    |    КонсолидированныйБаланс.Организация.КодПоОКПО КАК КодПоОКПО,
    |    КонсолидированныйБаланс.Организация.ГКЭД КАК ГКЭД,
    |    КонсолидированныйБаланс.Организация.КодПравовойФормы КАК КодПравовойФормы,
    |    КонсолидированныйБаланс.Организация.НаимГКЭД КАК НаимГКЭД,
    |    КонсолидированныйБаланс.Организация.ОргПравФорм КАК ОргПравФорм,
    |    КонсолидированныйБаланс.Организация.ОрганУправления КАК ОрганУправления,
    |    КонсолидированныйБаланс.Организация.ИННЮЛ КАК ИННЮЛ,
    |    КонсолидированныйБаланс.Организация.АдрЮР КАК АдрЮР,
    |    КонсолидированныйБаланс.Организация.ТелГБ КАК ТелГБ,
    |    КонсолидированныйБаланс.Организация.ФИОРук КАК ФИОРук,
    |    КонсолидированныйБаланс.Организация.ФИОБух КАК ФИОБух,
    |    ПРЕДСТАВЛЕНИЕ(КонсолидированныйБаланс.Организация) КАК Предприятие,
    |    КонсолидированныйБаланс.ДатаНПП КАК ДатаН,
    |    КонсолидированныйБаланс.ДатаКПП КАК ДатаК,
    |    КонсолидированныйБаланс.Отчет.(
    |        Наименование КАК Наименование,
    |        НаименованиеК КАК НаименованиеК,
    |        Строка КАК Строка,
    |        Сумма КАК СуммаН,
    |        СуммаПП КАК СуммаК
    |    ) КАК Отчет
    |ИЗ
    |    Документ.КонсолидированныйБаланс КАК КонсолидированныйБаланс
    |ГДЕ
    |    КонсолидированныйБаланс.Ссылка В(&Ссылка)";
    
    Запрос.Параметры.Вставить("Ссылка", Ссылка);
    Выборка = Запрос.Выполнить().Выбрать();
    
    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    ОбластьШапка = Макет.ПолучитьОбласть("ШапкаТаблицы");
    ОбластьДетали = Макет.ПолучитьОбласть("Детали");
    ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
    
    ТабДок.Очистить();
    
    ВставлятьРазделительСтраниц = Ложь;
    Пока Выборка.Следующий() Цикл
        Если ВставлятьРазделительСтраниц Тогда
            ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
        КонецЕсли;
        
        ТабДок.Вывести(ОбластьЗаголовок);
        
        ОбластьШапка.Параметры.Заполнить(Выборка);
        ТабДок.Вывести(ОбластьШапка, Выборка.Уровень());
        
        
        ВыборкаОтчет = Выборка.Отчет.Выбрать();
        
        Пока ВыборкаОтчет.Следующий() Цикл
            ОбластьДетали.Параметры.Заполнить(ВыборкаОтчет);
            ТабДок.Вывести(ОбластьДетали, ВыборкаОтчет.Уровень());
        КонецЦикла;
        
        ОбластьПодвал.Параметры.Заполнить(Выборка);
        ТабДок.Вывести(ОбластьПодвал);
        ВставлятьРазделительСтраниц = Истина;
    КонецЦикла;
    
    Возврат ТабДок;
    
КонецФункции
Вопрос: Поскажите как обратится в уф к макету

в стандартной обработке 1с получение макета идет так
Макет = УправлениеПечатью.МакетПечатнойФормы("Обработка.ПечатьТТН.ПФ_MXL_ТТН");

Мне нужно получить макет во внешней обработке. Как это сделать?
Ответ:
Код:
{ОбщийМодуль.УправлениеПечатью.Модуль(524)}: Макет "ТабличныйДокумент" не найден. Операция прервана.
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Макет ""%1"" не найден. Операция прервана.'"), ПолныйПутьКМакету);
Код:
    ДанныеПечати        = ДанныеДляПечати.РезультатПоШапке.Выбрать();
    ВыборкаПоДокументам = ДанныеДляПечати.РезультатПоТабличнойЧасти.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
  
    Макет = УправлениеПечатью.МакетПечатнойФормы(ЭтотОбъект.ПолучитьМакет("ПФ_MXL_ТТН"));   //"Обработка.ПечатьТТН.ПФ_MXL_ТТН"
--- Объединение сообщений, 23 янв 2017 ---
Извините я дурачек Макет = ЭтотОбъект.ПолучитьМакет("ПФ_MXL_ТТН"); все работает, понедельник день тяжелый
Вопрос: Вывод ТЗ на уже созданный макет печати

На форме документа есть ТЗ СтоимостьУслуг, которая заполняется по кнопке из внешней базы. Данные с этой ТЗ нужно поместить на макет печати (он ранее создан) в определенную ячейку. На макете сделала параметр СтоимостьУслуг и пытаюсь туда засунуть данные.
Код 1C
1
2
3
4
5
6
7
8
9
10
11
12
 Форма = ЭтотОбъект.ПолучитьФорму("ФормаДокумента");
        СтоимостьУслуг = Форма.ЭлементыФормы.СтоимостьУслуг.Значение;
Обл   = Макет.ПолучитьОбласть("Оборотная");
 
 
 
Для каждого стр из СтоимостьУслуг Цикл
 
обл.Параметры.СтоимостьУслуг=стр;
ТабДокумент.Вывести(обл);
 
КонецЦикла;
на макете выводиться СтрокаТаблицыЗначений

пробовала еще создать в области Обл еще одну область Усл
Код 1C
1
2
3
4
5
6
7
8
9
10
11
  Форма = ЭтотОбъект.ПолучитьФорму("ФормаДокумента");
        СтоимостьУслуг = Форма.ЭлементыФормы.СтоимостьУслуг.Значение;
Усл   = Обл.ПолучитьОбласть("Усл");
 
 
Для каждого стр из СтоимостьУслуг Цикл
 
усл.Параметры.Заполнить(стр);
ТабДокумент.Вывести(усл);
 
КонецЦикла; 
так вообще на макете пусто
Ответ:
Сообщение от Swetlana521991
на метод ДобавитьОбласть() ругается
я его сам придумал
Сообщение от Swetlana521991
дублируется весь макет 3 раза
ну, это уж с циклами надо причесать
Вопрос: Подстановка значений в параметры макета

Нужно реализовать подстановку значений в макет отчета по нажатию кнопки

Есть макет, у него несколько параметров ( <Всего>, <ВГод> )

Как передать значения из регистра накопления(Овощи.Обороты, Овощи.Остатки) в эти параметры программно?
Ответ: lDarknessl,
1) Метод "ПолучитьМакет" необходимо применять с директивой компиляции
1C
1
&НаСервере
2) Метод вызывается у объекта, например твой макет создан у объекта
1C
1
ДокументСсылка.Накладная
- тогда вызываешь метод так:
1C
1
макет = Документы.Накладная.ПолучитьМакет("ИмяМакета");
. Если это общий макет то директива компиляции так же
1C
1
&НаСервере
а метод:
1C
1
макет = ПолучитьОбщийМакет("ИмяМакета");