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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Описание:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

__________________________

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

&НаСервере

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

  Область = Макет.ПолучитьОбласть("Результат");
  ТабДок.Вывести(Область);    
    
  возврат ТабДок;
КонецФункции
20 npkerz
 
16.07.19
13:13
(19) да заработало..
А обязательно так всегда делать,через процедуру И функцию?
21 npkerz
 
16.07.19
13:14
Почитаю мат.часть)
22 Valkyrie
 
16.07.19
13:30
А зачем: клМакет =  Отчеты.клПроба.ПолучитьМакет("клМакет"); ?

Можно же просто клМакет = ПолучитьМакет("клМакет")
23 Grekos2
 
16.07.19
13:32
(22) Ну это уже детали.
     Главное хоть что то заработало. :)
24 Grekos2
 
16.07.19
13:37
(21) Почитай, какие функции и данные доступны наКлиенте и наСервере.
     Тогда поймешь почему "через функцию"

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

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

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

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

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