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