Имя: Пароль:
1C
1С v8
не могу заполнить макет
0 wwwqwert2014
 
30.05.13
16:49
Хочу заполнить макет при нажатии кнопки Печать и напечатать его.


&НаКлиенте
Процедура Печать(Команда)
   
   ПолучениеМакета();
   // Вставить содержимое обработчика.
       
   
КонецПроцедуры

&НаСервере
Процедура ПолучениеМакета()
   Макет = ПолучитьМакет("Макет");
   ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
   ОбластьШапка.Номер = Объект.Номер;
   ОбластьШапка.Дата = Объект.Дата;
   ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
   Для Каждого Строка Из Объект.СписокНоменклатуры Цикл
       ОбластьСтрока.Товар = Строка.Номенклатура;
       Областьстрока.Стеллаж = "Стеллаж " + Строка.Ячейка.Ряд;
       Областьстрока.Количество = Строка.Количество;
       ОбластьСтрока.Цена = Строка.Цена;
       ОбластьСтрока.Сумма = Строка.Сумма;
   КонецЦикла;

КонецПроцедуры



Компилятор пишет, что не знает такой процедуры ПолучитьМакет(). Я ее и на клиенте и на сервере пробовал использовать. Везде ругается..
вот что я нагуглил. у человека вроде бы не ругается компилятор, а у меня ругается
подскажите, пожалуйста, что делать
1 Wobland
 
30.05.13
16:50
чей мает?
2 wwwqwert2014
 
30.05.13
16:51
пакет документа РасходнаяНакладная. Задача 1.14 из сборника задач к спецу по платформе
3 wwwqwert2014
 
30.05.13
16:53
макет*
4 Wobland
 
30.05.13
16:53
(2) а ты где-то сказал в коде об этом?
5 Mitriy
 
30.05.13
16:55
Макет = Документы.ЭтотГребаныйДокумент.ПолучитьМакет("Макет");
6 Wobland
 
30.05.13
16:56
(5) достаточно будет объекта, если я правильно стелепатировал
7 Mitriy
 
30.05.13
16:56
только это должна быть функция, которая будет возвращать табдок, который ты и будешь выставлять напоказ...
8 wwwqwert2014
 
30.05.13
16:56
ага. я понял, спасибо.
9 Mitriy
 
30.05.13
16:57
(6) не будет... надо будет тащить его на сервер, а оно на фиг надо?
10 wwwqwert2014
 
30.05.13
17:13
В макете есть область Шапка, в которой написано:
Расходная накладная № [Номер] от [Дата]        
Эта область имеет тип: Шаблон. Так как Номер и дата взяты в квадратные скобочки, по идее они теперь должны быть доступны из кода программы.

Макет = Документы.РасходнаяНакладная.ПолучитьМакет("Макет");
   ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
   ОбластьШапка.Номер = Объект.Номер;

Ругается что нет поля Номер в ОбластьШапка
11 Wobland
 
30.05.13
17:14
(10) значит, нет
12 Wobland
 
30.05.13
17:14
+(11) а в параметрах запросто может оказаться
13 ДенисЧ
 
30.05.13
17:14
ОбластьШапка.Параметры.Номер...
14 wwwqwert2014
 
30.05.13
17:15
спасибо
15 wwwqwert2014
 
30.05.13
17:28
Вроде бы се заполняется и ошибок не выдает. Но только вопрос: как отобразить макет перед печатью, чтобы посмотреть, что там назаполнялось?
16 samozvanec
 
30.05.13
17:30
(15) не хочешь ли ты сказать, что каждый раз печатал макет?
17 wwwqwert2014
 
30.05.13
17:31
нет, я не печатал еще.
Вот полностью процедуры заполнения макета:



Процедура Печать(ТабДок, Ссылка) Экспорт
   //{{_КОНСТРУКТОР_ПЕЧАТИ(Печать)
   Макет = Документы.РасходнаяНакладная.ПолучитьМакет("Печать");
   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |    РасходнаяНакладная.СписокНоменклатуры.(
   |        Номенклатура,
   |        Количество,
   |        Цена,
   |        Сумма
   |    )
   |ИЗ
   |    Документ.РасходнаяНакладная КАК РасходнаяНакладная
   |ГДЕ
   |    РасходнаяНакладная.Ссылка В (&Ссылка)";
   Запрос.Параметры.Вставить("Ссылка", Ссылка);
   Выборка = Запрос.Выполнить().Выбрать();

   ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
   ОбластьСписокНоменклатурыШапка = Макет.ПолучитьОбласть("СписокНоменклатурыШапка");
   ОбластьСписокНоменклатуры = Макет.ПолучитьОбласть("СписокНоменклатуры");
   ОбластьСписокНоменклатуры = Макет.ПолучитьОбласть("СписокСтеллажЯчейка");

   ТабДок.Очистить();
   ОбластьЗаголовок.Параметры.Номер=Ссылка.Номер;
   ОбластьЗаголовок.Параметры.Дата=Ссылка.Дата;
   ТабДок.Вывести(ОбластьЗаголовок);
   

   ВставлятьРазделительСтраниц = Ложь;
   Пока Выборка.Следующий() Цикл
       Если ВставлятьРазделительСтраниц Тогда
           ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
       КонецЕсли;

       

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

       ВставлятьРазделительСтраниц = Истина;
   КонецЦикла;
   //}}
КонецПроцедуры
18 Wobland
 
30.05.13
17:32
(15) не отобразить, а показать
19 samozvanec
 
30.05.13
17:32
(17) тогда как узнал, что все заполняется, если не печатал и не знаешь, как посмотреть?
20 wwwqwert2014
 
30.05.13
17:33
ой.  ято-то не то скопировал
21 wwwqwert2014
 
30.05.13
17:33
&НаКлиенте
Процедура Печать(Команда)
   
   ПолучениеМакета();
   // Вставить содержимое обработчика.
       
   
КонецПроцедуры

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

       Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка);
   Результат = Запрос.Выполнить();

   ВыборкаДетальныеЗаписи = Результат.Выбрать();

   Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
       // Вставить обработку выборки ВыборкаДетальныеЗаписи
       ОбластьСтрока.Параметры.Товар = ВыборкаДетальныеЗаписи.Номенклатура;
       //Областьстрока.Стеллаж = "Стеллаж " + ВыборкаДетальныеЗаписи.Ячейка.Ряд;
       Областьстрока.Параметры.Количество = ВыборкаДетальныеЗаписи.Количество;
       ОбластьСтрока.Параметры.Цена = ВыборкаДетальныеЗаписи.Цена;
       ОбластьСтрока.Параметры.Сумма = ВыборкаДетальныеЗаписи.Сумма;
   КонецЦикла;

   //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
   
   Макет.Показать();//НЕТ РЕЗУЛЬТАТА
   
   
КонецПроцедуры
22 samozvanec
 
30.05.13
17:35
(21) заполненные области надо выводить в табличный документ. показывать или печатать тоже надо его
23 salvator
 
30.05.13
17:35
Сделай из нее функцию, которая возвращает ТабДок.
На клиенте показывай его.
24 salvator
 
30.05.13
17:38
Тьфу, блин, там даже табличный документ не инициализирован.
Автор, смотри свой пример, который ты до этого скинул.
25 Wobland
 
30.05.13
17:39
для обычного:

Процедура КнопкаВыполнитьНажатие(Кнопка)
   ТабДок=ЭлементыФормы.Вывод;
   Макет=ПолучитьМакет("Печать");
   Область=Макет.ПолучитьОбласть("Заголовок");
   ТабДок.Вывести(Область);
   
   Область=Макет.ПолучитьОбласть("Строка");
   Выборка=Справочники.Номенклатура.Выбрать();
   Номер=0;
   Пока Выборка.Следующий() Цикл
       Номер=Номер+1;
       Область.Параметры.Номер=Номер;
       Область.Параметры.Заполнить(Выборка);
       ТабДок.Вывести(Область);
   КонецЦикла;
   ТабДок.Показать();
КонецПроцедуры
26 Mitriy
 
30.05.13
17:41
на клиенте:

ТабДок = Печать();
ТабДок.Показать();
27 Mitriy
 
30.05.13
17:43
то бишь:

&НаКлиенте
Процедура Печать(Команда)
   
ТабДок = ПечатьДока();
ТабДок.Показать();

Функция ПечатьДока()
   ТабДок=ЭлементыФормы.Вывод;
   Макет=ПолучитьМакет("Печать");
   Область=Макет.ПолучитьОбласть("Заголовок");
   ТабДок.Вывести(Область);
   
   Область=Макет.ПолучитьОбласть("Строка");
   Выборка=Справочники.Номенклатура.Выбрать();
   Номер=0;
   Пока Выборка.Следующий() Цикл
       Номер=Номер+1;
       Область.Параметры.Номер=Номер;
       Область.Параметры.Заполнить(Выборка);
       ТабДок.Вывести(Область);
   КонецЦикла;
   Возврат ТабДок;
КонецФункции
28 Mitriy
 
30.05.13
17:44
ну... ПипецПроцедуре пропустил...
29 Mitriy
 
30.05.13
17:44
и &НаСервере...
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший