Имя: Пароль:
1C
1С v8
Внешний отчет БП 3.0
0 breaktrough
 
21.07.14
09:19
Всем привет.
Конфа БП 3.0. Выгрузил внешний отчет "кассовая книга".
Все работает, но при после редактирования печатной формы в нем, в самом отчете она остается прежней. Видимо подхватывается из вшитого в конфу отчета. Не могу понять как добраться до процедур формирующих результат на сервере. Отладчиком в сервеные не залезть. Подскажите как быть?
Вот та самая функция которая вызывается при вызове команды  "Сформировать":
&НаСервере
Функция СформироватьОтчетНаСервере()
    
    Если НЕ ПроверитьЗаполнение() Тогда
        Возврат Новый Структура("ЗаданиеВыполнено", Истина);
    КонецЕсли;
    
    ИдентификаторЗадания = Неопределено;
    ИБФайловая = ОбщегоНазначения.ИнформационнаяБазаФайловая();
    ДлительныеОперации.ОтменитьВыполнениеЗадания(ИдентификаторЗадания);
    ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(Элементы.Результат, "НеИспользовать");
    
    ПараметрыОтчета = ПодготовитьПараметрыОтчета();
    
    Если ИБФайловая Тогда
        АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор);
        Отчеты.КассоваяКнига.СформироватьОтчет(ПараметрыОтчета, АдресХранилища);
        РезультатВыполнения = Новый Структура("ЗаданиеВыполнено", Истина);
    Иначе
        РезультатВыполнения = ДлительныеОперации.ЗапуститьВыполнениеВФоне(
            УникальныйИдентификатор,
            "Отчеты.КассоваяКнига.СформироватьОтчет",
            ПараметрыОтчета,
            БухгалтерскиеОтчетыКлиентСервер.ПолучитьНаименованиеЗаданияВыполненияОтчета(ЭтаФорма));
        
        АдресХранилища       = РезультатВыполнения.АдресХранилища;
        ИдентификаторЗадания = РезультатВыполнения.ИдентификаторЗадания;
    КонецЕсли;
    
    Если РезультатВыполнения.ЗаданиеВыполнено Тогда
        ЗагрузитьПодготовленныеДанные();
    КонецЕсли;
    
    Элементы.Сформировать.КнопкаПоУмолчанию = Истина;
    
    Возврат РезультатВыполнения;
    
КонецФункции
1 breaktrough
 
21.07.14
09:20
(0) Хочу просто поправить макет.
2 Kurbash
 
21.07.14
09:23
А МАКЕТ ОН ОТКУДА ПОДХВАТЫВАЕТ?
3 Kurbash
 
21.07.14
09:24
тебе надо шаманить процедуры-ты используешь ссылки на штатные процедуры в конфигурации, а в них прописан макет не в твоей внешней обработке а в конфигурации, поэтому твои изменения и не видны
4 Kamas
 
21.07.14
09:27
(0) вах как красиво пишете прям как в типовой ))
Точка остановы и F11 решит проблему))
5 breaktrough
 
21.07.14
09:29
(2) В том-то и дело, что ХЗ. В этом и вопрос)
(4) Под...б засчитан)
6 breaktrough
 
21.07.14
09:30
(4) Как же я попаду в серверные процедуры?))
Может дело в этой строчке: "Отчеты.КассоваяКнига.СформироватьОтчет" ??
7 breaktrough
 
21.07.14
09:34
(3) Да, я тоже так думаю. Но куда копать? не знаю...
8 Kurbash
 
21.07.14
09:39
ставь ТО и вперед в отладчике
9 breaktrough
 
21.07.14
09:40
(8) Как мне зайти в серверную процедуру в отладчике???
10 breaktrough
 
21.07.14
09:40
(8) Ставлю, но ее проходит и сразу уже готовый отчет вылазит.
11 Kurbash
 
21.07.14
09:41
F11 а не F10 когда курсор стоит на процедуре
12 breaktrough
 
21.07.14
09:43
(11) Вот пример процедуры:
&НаКлиенте
Процедура СформироватьОтчет(Команда)
    
    ОчиститьСообщения();
    
    ОтключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания");
    
    РезультатВыполнения = СформироватьОтчетНаСервере();
    Если НЕ РезультатВыполнения.ЗаданиеВыполнено Тогда
        ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания);
        ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", 1, Истина);
        ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(Элементы.Результат, "ФормированиеОтчета");
    КонецЕсли;
    
    ПодключитьОбработчикОжидания("Подключаемый_ЗакрытьНастройки", 0.1, Истина);
    
КонецПроцедуры

Ставлю точку останова на строке "РезультатВыполнения = СформироватьОтчетНаСервере();"
Отладчик просто проходит ее и все. Внутрь не попасть!
13 breaktrough
 
21.07.14
09:45
Флаг "разрешить отладку на сервере" стоит.
14 Kurbash
 
21.07.14
09:45
поставь на  ОтключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания"); и когда нажмешь F10 курсор встанет на РезультатВыполнения = СформироватьОтчетНаСервере(); вот тут нажмешь F11(шагнуть в) в отладчике
15 breaktrough
 
21.07.14
09:49
(14) А ты сам попробуй) В серверную процедуру СформироватьОтчетНаСервере() не проваливается, а проходит ее и вылазит на следующей строке сразу. В том-то и проблема.
16 Новенький_2009
 
21.07.14
09:51
(13) а ты посмотри что в реестре? Дебаг ключ есть? Как поставил - службу сервера рестартовал после этого?
17 breaktrough
 
21.07.14
09:58
(16) Щас перезапущу)
18 smotritel
 
21.07.14
12:00
(0) внешние отчеты в БП, да и в других конфах на упр.формах так не переделаешь. т.к. при работе отчета используется код Модуля менеджера - а в "Внешнем" отчете модуля менеджера нет как класса.

Ты выгрузила отчет во внешний файл, но при этом код формы продолжает вызывать код модуля менеджера "типового" отчета. А типовой отчет и макеты берет из конфигурации, а не из твоего внешнего отчета.
19 smotritel
 
21.07.14
12:04
чтобы запустить "внешнюю" кассовую книгу, нужно все процедуры из Модуля менеджера типового отчета перенести в Модуль объекта твоего внешнего отчета - обычным копи-пастом.

Затем нужно в модуле формы, в функции СформироватьОтчетНаСервере() закомментировать код:

    Если ИБФайловая Тогда
        АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор);
        Отчеты.КассоваяКнига.СформироватьОтчет(ПараметрыОтчета, АдресХранилища);
        РезультатВыполнения = Новый Структура("ЗаданиеВыполнено", Истина);
    Иначе
        РезультатВыполнения = ДлительныеОперации.ЗапуститьВыполнениеВФоне(
            УникальныйИдентификатор,
            "Отчеты.КассоваяКнига.СформироватьОтчет",
            ПараметрыОтчета,
            БухгалтерскиеОтчетыКлиентСервер.ПолучитьНаименованиеЗаданияВыполненияОтчета(ЭтотОбъект));
        
        АдресХранилища       = РезультатВыполнения.АдресХранилища;
        ИдентификаторЗадания = РезультатВыполнения.ИдентификаторЗадания;
    КонецЕсли;

а вместо него написать код:

АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор);
РеквизитФормыВЗначение("Отчет").СформироватьОтчет(ПараметрыОтчета, АдресХранилища); // !!!
РезультатВыполнения = Новый Структура("ЗаданиеВыполнено", Истина);
20 smotritel
 
21.07.14
12:05
(18) извиняюсь, "выгрузиЛ", конечно ;)
21 smotritel
 
21.07.14
12:08
p.s. если не секрет, что правишь в макете?