Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

[чайникапост] есть отчет,есть макет,есть вопрос

[чайникапост] есть отчет,есть макет,есть вопрос
Я
   npkerz
 
16.07.19 - 10:45
Пытаюсь написать отчет я
В отчете есть форма отчета - где есть кнопка Сформировать
В отчете так же есть макет - который должен заполнятся

Можно ли сделать так,что при нажатии кнопки Сформировать, открывается печатный макет? Пока что просто открывается
Еще вопрос:
Есть модуль объекта,модуль менеджера, модуль отчета - в каком из этих модулей мне надо будет делать запрос на выборку из регистра?
Может кто есть добрый на этом форуме,кратко и доходчиво объяснить разницу между модулями

Заранее спасибо
 
 
   RomaH
 
1 - 16.07.19 - 10:48
отчеты и обработки - могут быть внешними 
модуль менеджера лучше не применять

что такое модуль отчета?
   npkerz
 
2 - 16.07.19 - 10:50
Модуль отчета - если корректнее, у отчета есть форма -  а у этой формы есть модуль
модуль формы отчета*
   Fish
 
3 - 16.07.19 - 11:01
Что такое печатный макет?
   npkerz
 
4 - 16.07.19 - 11:09
Печатный макет - если корректнее, у отчета есть макет - который нужно вывести на печать
Макет отчета*

Вот что я написала в модуле объекта:

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

Область = Макет.ПолучитьОбласть("ИмяОтчетаХз");
ТабДок.Вывести(Область);

Область = Макет.ПолучитьОбласть("Шапка");
ТабДок.Вывести(Область);

Область = Макет.ПолучитьОбласть("Результат");
ТабДок.Вывести(Область);

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

____________________
Хочу чтоб макет появился в отдельном окне при нажатии кнопки Сформировать..но что-то как-то не получается
   npkerz
 
5 - 16.07.19 - 11:13
Ничего не происходит скорее всего потому что,как я поняла команда Сформировать,которая принадлежит кнопке формы - эта команда должна описываться в модуле отчета да? а не в общем модуле, но если я пишу в модуле отчета,то он не видит собст макет
   catena
 
6 - 16.07.19 - 11:15
А где ТабДок.Показать()?
Отчеты.клПроба.ПолучитьМакет(Макет); - тут что есть Макет? Как зовут макет отчета?
   npkerz
 
7 - 16.07.19 - 11:16
Макет так и называется Макет)
Щас попробую
   catena
 
8 - 16.07.19 - 11:20
(7)Так что такое Макет тогда?

ПолучитьМакет(<Макет>)
Параметры:

<Макет> (обязательный)

Тип: Строка; ОбъектМетаданных: Макет.
Имя макета, как оно задано в конфигураторе, или объект описания метаданного требуемого макета.
Возвращаемое значение:

Тип: ТабличныйДокумент; ТекстовыйДокумент; другой объект, который может быть макетом.

Описание:

Получает макет отчета.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Пример:

МакетОтчета = Отчеты.ОстаткиНоменклатуры.ПолучитьМакет("Основной");
   Grekos2
 
9 - 16.07.19 - 11:21
(4) Макет =  Отчеты.клПроба.ПолучитьМакет("Макет");

   Имя типа строка должно быть.
   Grekos2
 
10 - 16.07.19 - 11:22
Или так
Макет1 = "Макет";
Макет =  Отчеты.клПроба.ПолучитьМакет(Макет1);
   npkerz
 
11 - 16.07.19 - 11:31
Имя типа строка...не совсем могу понять

Что такое Макет - у моего отчета есть Макет,с названием Макет - вот к нему я и обращаюсь,точнее хочу его вытащить при нажатии кнопки Сформировать

Щас попробую сделать как вы написали, мб получится

Мне просто дикая идея в голову пришла..если допустим он с модуля формы отчета не видит макет этого же отчета, мб мне в модуле объекта создать перем к которой я присвою этот макет
А потом в модуле формы отчета к ней обращусь..нз
   npkerz
 
12 - 16.07.19 - 11:38
А поняла вроде..
Макет =  Отчеты.клПроба.ПолучитьМакет("Макет");

но все равно ничего не происходит
   Grekos2
 
13 - 16.07.19 - 11:38
Вот так должно работать:

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

Область = Макет.ПолучитьОбласть("ИмяОтчетаХз");
ТабДок.Вывести(Область);

Область = Макет.ПолучитьОбласть("Шапка");
ТабДок.Вывести(Область);

Область = Макет.ПолучитьОбласть("Результат");
ТабДок.Вывести(Область);

ТабДок.Показать();

КонецПроцедуры
   Grekos2
 
14 - 16.07.19 - 11:39
ТабДок.Показать(); <========= !!!!!
         :)
   npkerz
 
15 - 16.07.19 - 11:42
Да,я это добавила)

Вот возвращаюсь опять к вопросу по модулям: модуль объекта, модуль менеджера, модуль формы отчета

Я вот этот код написала в модуле объекта..не там да? Т.к. кнопка на форме отчета,то наверно ее функционал надо в модуле форме отчета описывать?
Или не
   Grekos2
 
16 - 16.07.19 - 11:47
(15) Кнопка связана с командой.
     Команда с процедурой.
     Вот в этой процедуре и надо писать код.
   npkerz
 
17 - 16.07.19 - 12:56
"Вот в этой процедуре и надо писать код" - написала
следующее:

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

Область = Макет.ПолучитьОбласть("ИмяОтчета");
ТабДок.Вывести(Область);

Область = Макет.ПолучитьОбласть("Шапка");
ТабДок.Вывести(Область);

Область = Макет.ПолучитьОбласть("Результат");
ТабДок.Вывести(Область);

ТабДок.Показать();

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


Выходит ошибка при проверке синтаксиса:
{Отчет.клПроба.Форма.клПроба.Форма(6,10)}: Переменная не определена (Отчеты)
Макет =  <<?>>Отчеты.клПроба.ПолучитьМакет("клМакет"); (Проверка: Тонкий клиент)

__________________________

Попробовала в общем модуле сделать так:

&НаСервере
ПЕРЕМ клМакет;
клМакет =  Отчеты.клПроба.ПолучитьМакет("клМакет");

А в модуле формы отчета так:

&НаСервере
ПЕРЕМ клМакет Экспорт;

Процедура Сформировать(Команда)
    
ТабДок = Новый ТабличныйДокумент;
Макет =  клМаке;

Область = Макет.ПолучитьОбласть("ИмяОтчета");
ТабДок.Вывести(Область);

Область = Макет.ПолучитьОбласть("Шапка");
ТабДок.Вывести(Область);

Область = Макет.ПолучитьОбласть("Результат");
ТабДок.Вывести(Область);

ТабДок.Показать();

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


Ни в первом,ни во втором случае при нажатии кнопки Сформировать - никакая табл часть не выходит..
Делала точку остановы на самой процедуре, он ее при нажатии как-будто не выполняет
   hhhh
 
18 - 16.07.19 - 13:02
(17) ты чего-то из крайности в крайность кидаешься. Должно быть и &НаКлиенте и &НаСервере.

на клиенте это у тебя Показать(), потому что на сервере не покажет. а на сервере Отчеты и всякая другая муть.
   Grekos2
 
19 - 16.07.19 - 13:09
&НаКлиенте 
Процедура Сформировать(Команда)
    
ТабДок = Новый ТабличныйДокумент;

ТабДок = получитьТабДок(ТабДок);

ТабДок.Показать();

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

&НаСервере
Функция получитьТабДок(ТабДок)
    клМакет =  Отчеты.клПроба.ПолучитьМакет("клМакет");
    Макет =  клМаке;

   Область = Макет.ПолучитьОбласть("ИмяОтчета");
   ТабДок.Вывести(Область);

   Область = Макет.ПолучитьОбласть("Шапка");
   ТабДок.Вывести(Область);

  Область = Макет.ПолучитьОбласть("Результат");
  ТабДок.Вывести(Область);    
    
  возврат ТабДок;
КонецФункции
   npkerz
 
20 - 16.07.19 - 13:13
(19) да заработало..
А обязательно так всегда делать,через процедуру И функцию?
   npkerz
 
21 - 16.07.19 - 13:14
Почитаю мат.часть)
   Valkyrie
 
22 - 16.07.19 - 13:30
А зачем: клМакет =  Отчеты.клПроба.ПолучитьМакет("клМакет"); ?
Можно же просто клМакет = ПолучитьМакет("клМакет")
   Grekos2
 
23 - 16.07.19 - 13:32
(22) Ну это уже детали.
     Главное хоть что то заработало. :)
   Grekos2
 
24 - 16.07.19 - 13:37
(21) Почитай, какие функции и данные доступны наКлиенте и наСервере.
     Тогда поймешь почему "через функцию" 

    Например: Показать() - Доступность:
Тонкий клиент, веб-клиент, толстый клиент

    Отчеты - Доступность:
Сервер, толстый клиент, внешнее соединение.
   npkerz
 
25 - 16.07.19 - 13:40
Хорошо
   D_E_S_131
 
26 - 16.07.19 - 14:05
Может хорош издеваться над человеком и кинете уже в нее книжкой Хрусталевой "Разработка сложных отчетов"?
   npkerz
 
27 - 16.07.19 - 14:07
А если например я захочу,не чтоб отдельно открывался макет
А допустим добавить в отчет реквизит(который будет табл. документом)  и попробовать результат вывести в форму отчета
Это мне тогда не нужно будет создавать новую табл часть?
Ну т.е. вот этот код:

ТабДок = Новый ТабличныйДокумент;

ТабДок = ПолучитьТабДок(ТабДок);

 (26) почитаю,спасибо)


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.