|
[чайникапост] есть отчет,есть макет,есть вопрос | ☑ | ||
---|---|---|---|---|
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) почитаю,спасибо) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |