Имя: Пароль:
1C
1С v8
Программное сохранение активного табличного документа в файл
0 gamletspb
 
27.07.16
12:45
Доброго всем дня.
Вообще нужно отправлять по почте печатные формы авансовых отчетов из типовой бухгалтерии (2.0). Соответственно конфигурацию менять нельзя. Делаю через внешнюю обработку. Выбрать и распечатать документ из внешней обработки проблем нет. А вот с сохранением в файл (программно) - проблемы. Если тупо использовать метод ТабличныйДокумент.Записать(), то надо предварительно заполнять макет, т.е. переносить в мою обработку процедуру печати из модуля документа. Что мало чем отличается от правки самой конфигурации, т.к. после каждого обновления конфигурации это надо будет делать заново. Очень хочется как то перехватить уже сформированный  при печати макет, но как я понимаю штатными средствами это сделать невозможно. Или все-таки можно?
1 YFedor
 
27.07.16
12:49
Я для подобного менял процедуру в общем модуле конфигурации :-(
2 Рэйв
 
27.07.16
12:52
(0)>> т.е. переносить в мою обработку процедуру печати из модуля документа.

Зачем? Процедура печати должна быть Экспортной. Получай объект документа и вызывай ее через точку
3 mehfk
 
27.07.16
12:52
>> печатные формы авансовых отчетов из типовой бухгалтерии (2.0)...после каждого обновления конфигурации это надо будет делать заново

Угадай, когда последний раз там что-то менялось?
4 gamletspb
 
27.07.16
12:56
(2) Да она экспортная, но вот функция которая из нее вызывается и собственно возвращает ссылку на сформированный макет - нет. А так то да, достаточно сделать ту функцию экспортной и юзать ее в своей обработке.
5 gamletspb
 
27.07.16
12:59
(3) ну вообще каждый месяц обновляю
я конечно понимаю, что конкретно авансовый отчет может не скоро изменится, но тем хуже, т.к. когда это все-таки произойдет я напрочь забуду что когда-то что-то делала по этому поводу и буду мучительно вспоминать где я там чего менял )
6 mehfk
 
27.07.16
13:01
(5) Делай ВПФ, не сношай мозг.
7 gamletspb
 
27.07.16
13:03
(6) ничего не могу с собой поделать, обожаю мозгосношательство )
ну если ничего умнее не найду, придется так и делать
8 Рэйв
 
27.07.16
13:05
(5)Той функции которая вызывается не обязательно быть экспортной если вызывается она из экспортной функции.
Если ты уже попал в код экс функции дальше весь контекст должен быть доступен
9 gamletspb
 
27.07.16
13:05
Просто в 7ке я для этих целей юзаю всякие formex-ы и ёксели. И все прекрасно работает. А в восьмерке с этим делом как-то грустно все.
10 gamletspb
 
27.07.16
13:09
(8) с этого места по-подробнее. Имею вызов экспортной процедуры:

ОбъектДок.Печать(ТекМакет.Имя);

Ну и как мне получить доступ ко "всему контексту"?
11 Рэйв
 
27.07.16
13:10
(10)Если процедура начнет отрабатывать, то все вызовы из нее станут доступны экспортные они или нет
12 DrZombi
 
гуру
27.07.16
13:10
(0) Используй виртуальный PDF принтер :)
13 DrZombi
 
гуру
27.07.16
13:12
14 gamletspb
 
27.07.16
13:21
(11) было бы неплохо конечно, но боюсь сие из области фантастики )
15 Рэйв
 
27.07.16
13:34
(14)Код в модуле документа:

//-------

Процедура ЧтотоЭкспорт() Экспорт
    ЧтотоНеЭкспорт();    
КонецПроцедуры    

Процедура ЧтотоНеЭкспорт()
    Сообщить("Плюх!");
КонецПроцедуры    

//Код в форме обработки:

&НаКлиенте
Процедура Команда1(Команда)
    НажмиМеня();
КонецПроцедуры
&НаСервере
Процедура НажмиМеня()
    Док=Документы.ПриемныйАкт.СоздатьДокумент();
    Док.ЧтотоЭкспорт();
КонецПроцедуры    
//---------------
результат:
https://yadi.sk/d/4ikjF4fgtfhPE
16 gamletspb
 
27.07.16
13:52
(15) это все прекрасно, а теперь поменяй процедуру ЧтотоНеЭкспорт() на функцию и попробуй получить значение которое она возвращает извне экспортной процедуры
17 Рэйв
 
27.07.16
14:05
(16)Код в модуле документа:
//---------------
Функция  ЧтотоЭкспорт() Экспорт
    Т=ЧтотоНеЭкспорт();    
    Возврат Т;
КонецФункции

Функция ЧтотоНеЭкспорт()
    Таб=Новый ТабличныйДокумент;
    Таб.Область(1,1,1,1).Текст="Плюх!";
    
    Возврат Таб;
    
КонецФункции

//Код в форме обработки:
&НаКлиенте
Процедура Команда1(Команда)
    Т=НажмиМеня();
    Т.Показать();
КонецПроцедуры
&НаСервере
Функция НажмиМеня()
    Док=Документы.ПриемныйАкт.СоздатьДокумент();
    Таб=Док.ЧтотоЭкспорт();
    Возврат Таб;
КонецФункции
//----------------

результат:
https://yadi.sk/i/xp5yg8fbtfnte
18 gamletspb
 
27.07.16
14:22
(17) опа, а чейта мы экспортную процедуру на функцию поменяли? Э не, так не пойдет, ты давай из экспортной процедуры мне эту таблицу вытащи. )
19 Рэйв
 
27.07.16
14:30
(0)могу вытащить.Только она на сервере и там не работает .Показать() у таб дока. Изначально она и была процедурой, только когда не захотело на сервере показывать я ее в функцию переделал:-)

Так что все работает, дальше сам пробуй. а у меня раб.день закончен:-)
20 gamletspb
 
27.07.16
14:38
(19) ну как вернешься рекомендую погуглить тему "области действия переменных" - весьма полезно для общего развития
21 Рэйв
 
28.07.16
03:38
(20)Ну-ну. Боюсь, что я про эту тему знаю побольше тебя:-)
А ты вместо того чтобы разглагольствовать с умным видом - попробуй сам. Я в отличии от тебя в докозательство своих слов привожу код.а ты только бла- бла-бла:-)
22 gamletspb
 
28.07.16
13:15
(21) Да было бы чего пробовать.
Ок, имеем:
//Модуль документа
Функция ЧтотоНеЭкспорт()
    Таб=Новый ТабличныйДокумент;
    Таб.Область(1,1,1,1).Текст="Плюх!";
    Возврат Таб;
КонецФункции

Процедура ЧтотоЭкспорт() Экспорт
    Т=ЧтотоНеЭкспорт();    
КонецПроцедуры

//Наша обработка
Процедура ПриНажатииНаКнопку()
    Док=Документы.ПриемныйАкт.СоздатьДокумент();
    Док.ЧтотоЭкспорт();
КонецПроцедуры

Как мне в моей обработке, в процедуре ПриНажатииНаКнопку() получить ссылку на значение, возвращаемое функцией ЧтотоНеЭкспорт() не меняя ничего в модуле документа?
23 Рэйв
 
28.07.16
13:25
(22)Если ЧтотоЭкспорт не функция, то никак. И области видимости тут не причем. И разговор шел совсем о другом.
Ты утверждал, что ЧтотоНеЭкспорт() , став функцией ничего не сможет вернуть в экспортную процедуру

>>а теперь поменяй процедуру ЧтотоНеЭкспорт() на функцию и попробуй получить значение которое она возвращает извне экспортной процедуры<<

А теперь с умным видом переобуваешься и меняешь вопрос:-).

Как получить в  это совсем другая тема.
Проще всего найти где формируется и возвращается ТабДокумент и использовать ее. Или есл на то пошло скопировать ее к себе в обработку(что совсем кстати не одно и тоже что менять конфу если она внешняя.)
24 gamletspb
 
28.07.16
13:37
(23)
>>Если ЧтотоЭкспорт не функция, то никак
- аллилуйя! не прошло и двух суток! )
>>Ты утверждал, что ЧтотоНеЭкспорт() , став функцией ничего не сможет вернуть в экспортную процедуру
Это где же я такое утверждал, интересно знать?
25 Рэйв
 
28.07.16
13:48
(24)Как это где?
Я прямо тебя процетировал. Могу еще раз:-))

>>а теперь поменяй процедуру ЧтотоНеЭкспорт() на функцию и попробуй получить значение которое она возвращает извне экспортной процедуры<<
26 Рэйв
 
28.07.16
13:50
+ ты вообще утверждал что неэкспотрные вызовы в экспортной процедуре не будут работать, что это не так я тебе собственно и доказывал, есл ты заметил.А не про мифические "области действия переменных":-))
27 YFedor
 
28.07.16
14:04
(0) Все-таки измени одну функцию общего модуля и будет тебе счастье
28 gamletspb
 
28.07.16
14:04
(25) как из этого
>>а теперь поменяй процедуру ЧтотоНеЭкспорт() на функцию и попробуй получить значение которое она возвращает ИЗВНЕ экспортной процедуры<<
следует это:
>>Ты утверждал, что ЧтотоНеЭкспорт() , став функцией ничего не сможет вернуть В экспортную процедуру
???
>>ты вообще утверждал что неэкспотрные вызовы в экспортной процедуре не будут работать
ГДЕ??? КОГДА я ТАКОЕ мог утверждать? Т Я такой дури не то что утверждать, даже вообразить не могу. Ты там полегче что-ли, с тяжелыми то наркотиками )
29 gamletspb
 
28.07.16
14:07
(27) да я уже давно ту функцию в свою обработку вынес. Не хотелось конечно, но всяко лучше чем с поддержки снимать.
30 Рэйв
 
28.07.16
14:08
(28)да какая разница из какого ВНе она его получает?
Какое ты ИЗВНЕ интересно назовешь в качестве отмазки чтобы получив его ЧтотоНеЭкспорт не смогло вернуть?:-)Ну, напрягись:-)
32 DDwe
 
28.07.16
14:21
(31) Если такой умный, зачем на форум с вопросами лезешь?
34 YFedor
 
28.07.16
15:26
(29) Тогда все должно получиться.

Очень неудачно сделано, что Печать в модулях документов Процедура, но такова селяви
35 DrZombi
 
гуру
28.07.16
15:35
(33) иди страдай над фейковой проблемой твоей лени :)
36 DrZombi
 
гуру
28.07.16
15:36
(34) Да все он уже сделал. Тупо скопировал весь код к себе и правит в зависимости от правок в другой БД или обработке, побоку. Даже не вдумывался :)
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший