Имя: Пароль:
1C
1С v8
Помогите с внешней печатной формой, пожалуйста!
,
0 Zanzarchik
 
14.08.12
20:36
Здравствуйте, волшебники 1С! Помогите, пожалуйста, разобраться с ActiveDocument. Такая вот ситуация у меня: создаю внешнюю печатную форму, н-р, для перемещения товаров (неважно). Макет этой печатной формы я создаю на основе шаблона Excel через ActiveDocument. Вот код, прописанный в модуле объекта моей внешней обработки:
/////////////////////////////////////////////////////////////


перем ДокументДляЭксэль Экспорт;
перем АктивныйДокумент Экспорт;
Функция Печать()Экспорт
  Объект = СсылкаНаОбъект.ПолучитьОбъект();
  ТЧ = Объект.Товары;
  НашаОрганизация = Объект.Организация.Наименование;
 
  АктивныйДокумент = ПолучитьМакет("Макет");
  ДокументДляЭксэль = АктивныйДокумент.Получить();
   
  ЯчейкаОрганизация = ДокументДляЭксэль.worksheets(1).Range("Организация");
  ЯчейкаОрганизация.Value = НашаОрганизация;
     
  ОбластьСтроки = ДокументДляЭксэль.worksheets(1).Range("Строка");
  Строка = 1;
  Для каждого Стр Из ТЧ Цикл
       
  ОбластьСтроки.Cells(Строка,1).Value = Стр.НомерСтроки;
  ОбластьСтроки.Cells(Строка,11).Value = Стр.Количество;
  ОбластьСтроки.Cells(Строка,15).Value = Стр.ЦенаВРознице;
  ОбластьСтроки.Cells(Строка,18).Value = Стр.ЦенаВРознице*Стр.Количество;
  Строка = Строка + 1;    
 
  КонецЦикла;
  ДокументДляЭксэль.Application.Visible = true;
  ДокументДляЭксэль.Application.Workbooks(1).Windows(1).Visible = true;
  ДокументДляЭксэль.Activate();
  Возврат Неопределено;
 
КонецФункции

/////////////////////////////////////////////////////////////

Когда я использую просто внешнюю обработку - все работает, документ выводится на экран с заполненными параметрами. Если я подцепляю эту печатную форму к документу, то Excel открывается и сразу же закрывается. На этом форуме есть подобные темы, н-р: v8: Не получается открыть Active document Excel
Только предложенные там решения мне не помогли. Поэтому вопрос: как сделать так, чтобы печатная форма показывалась и не закрывалась?
1 Nirvana
 
14.08.12
20:43
2 Лефмихалыч
 
14.08.12
20:47
(0) не понятно, что утебя происходит и почему не работает. На кой хрен тебе вообще активдокумент? Почему не подходит штатный табличныйДокумент?
3 sanja26
 
14.08.12
20:50
http://infostart.ru/public/97718/

посмотри здесь еще. жалко уже тебя)
4 sanja26
 
14.08.12
20:53
+(3) делай уже через временный файл

+ http://infostart.ru/public/88055/
5 iceman2112
 
14.08.12
20:54
я же тебе сказал, создай кнопку в документе и вызови свою процедура печати. Сразу поймешь в чем проблема.
6 sanja26
 
14.08.12
20:54
Перем Excel Экспорт; //обязательно укажи эту переменную


Процедура Печать() // обязательно в модуле объекта, для Word'a это не критично

АктивныйДокумент = ПолучитьМакет("Макет");
   Excel = АктивныйДокумент.Получить();
   Sheet = Excel.ActiveSheet;
   Excel.Application.Workbooks(1).Windows(1).Visible = Истина;


v8: ActiveDocument Excel в 8.0
7 sanja26
 
14.08.12
20:55
8 sanja26
 
14.08.12
20:56
(0) учись пользоваться яндексом

http://yandex.ru/yandsearch?text=activeDocument+excel&lr=213&oprnd=4840924838
9 sanja26
 
14.08.12
20:56
хотя есть у тебя ))  ДокументДляЭксэль.Application.Workbooks(1).Windows(1).Visible = true;
10 sanja26
 
14.08.12
20:59
ДокументДляЭксэль.Activate(); может не надо это?
11 kotletka
 
14.08.12
21:00
(2) Унас тоже один конс затрахал мозги с печатными формами сразу в ворд, всем клиентам втюхивает про "нажимаете кнопочку и форма открывается сразу в ворде", теперь епля головного мозга, средней сложности печформа которую можно сделать за 2-3 часа теперь занимает 8-10 часов.
12 Zanzarchik
 
15.08.12
22:03
Привет, всем участникам этой ветки форума! Всем спасибо за сообщения!
(1) - я упертый иногда бываю :), хочу обратить внимание на себя :)
(2) - вот этот код для внешней печатной формы. Делаю ее через внешнюю обработку, отлаживаю - все работает, выводится макет, заполняется нужными мне параметрами. Все хорошо. НО (!!!), когда я эту печатную форму подключаю через Сервис-Дополнительные отчеты и обработки - Дополнительные внешние печатные формы - она перестает работать: ексель открывается и сразу же закрывается.
(3), (10) - обработку по конвертации xls в mxl есть-работает, вещь классная. Если нужно могу прислать на почту. Просто хотелось бы разобраться с этим. Наверно, глупость, но, блин, тема интересная. Пробовал и без ДокументДляЭксэль.Activate() - та же фигня. Причем, если указываешь ДокументДляЭксэль.Preview(), то выводить на предварительный просмотр.
(11) - с Вордом проблем нет, все понятно. Такие проблемы только с Эксэль.

П.С. еще раз всем спасибо!!!!
13 Nirvana
 
15.08.12
22:17
(12) Ни к чему для этого плодить темы - можно поднимать старые.
14 Zanzarchik
 
15.08.12
22:22
(13) - а как поднять старые?
15 Лефмихалыч
 
15.08.12
22:24
(12) эксель закрывается или в процессах excel.exe всё-таки висит? Зачем тебе эксель, почему не устраивает штатный табличный документ?
16 Zanzarchik
 
15.08.12
22:29
(15) ну, эксэль закрывается и в процессах не висит, проверял. штатный нужно рисовать, макет сложный, уходит много времени. Да, на поиск ответа на мою проблему уходит тоже много времени, но если разобраться, то на сложные макеты буду тратить намного меньше времени. Правда есть обработка - конвертация xls  в mxl, но все же хотелось бы разобраться с ексэль.
17 Nirvana
 
15.08.12
22:30
(14) Написать в них что-нибудь. :))
18 Zanzarchik
 
15.08.12
22:30
(17) уже понял :))) спасибо :)
19 Zanzarchik
 
15.08.12
22:31
я про "как поднять старые", про эксэль пока не понятно
20 Лефмихалыч
 
15.08.12
22:34
(16) хочешь сказать - за три дня, которые ты форум мучаешь своей кислой веткой про печатную форму, ты не сумел бы нарисовать этот долбаный макет?..
код, который ты привел в (0) не содержит ни чего про закрытие документа, так что:
1. Либо это не тот код, который выполняется
2. Либо проблема в конкретном инстансе экселя на конкретной машине
3. Ну, и еще вариант - ты что-то путаешь и на самом деле всё совсем не так, как ты рассказываешь
21 Zanzarchik
 
15.08.12
22:39
(20) - вот ссылка на обработку [url=http://rusfolder.com/32142717]. Если нетрудно, то посмотрите пожалуйста! Может я неправ, но нет ничего плохого, чтобы разобраться до конца с задачей. Ексэль 2007, пробовал на разных машинах.
22 Zanzarchik
 
15.08.12
22:40
Самый толковый форум, как я считаю, - это mista, на нем очень много умных людей, поэтому пишу сюда.
23 Лефмихалыч
 
15.08.12
22:52
омерзительно
24 Zanzarchik
 
15.08.12
22:56
(23) про что омерзительно?
25 Zanzarchik
 
15.08.12
23:10
На всякий случай, ссылка на скачивание моей проблемы http://rusfolder.com/32142717
Кому нетрудно - посмотрите, пожалуйста.
26 Лефмихалыч
 
15.08.12
23:18
(25) ты впустую тратишь время. Нарисовать этот макет в 1С - час делов, даже если одной руки из носа не доставать весь час. Дело скорее всего в конкретном экселе на конкретной машине
27 Zanzarchik
 
15.08.12
23:21
Лефмихалыч, правда, пробовал на разных машинах! Я нарисовал этот макет, сдал его. Просто прошу помощи разобраться в этой проблеме. Т.к. нигде ответа на этот вопрос не нашел. И очень интересно, как это решить. Может скачает обработку, Лефмихалыч, пожалуйста? Она готовая, ничего не нужно там кодить, просто открыть в 1С, а потом подцепить как внешнюю - и проблема сразу проявится.
28 Лефмихалыч
 
15.08.12
23:22
Мне не интересно колупаться в экселях
29 Zanzarchik
 
15.08.12
23:27
(28) все равно, благодарю за участие!
30 Zanzarchik
 
16.08.12
01:16
Тема актуальна :)
31 Ololoshka
 
16.08.12
08:56
Может быть я не права, но :) может сперва эксель открыть, а потом уже что то с ним делать?

   Попытка
       //Загрузка Excel
       Состояние("Загрузка Microsoft Excel...");
       ExcelПриложение = Новый COMОбъект("Excel.Application");
   Исключение
       Сообщить("Ошибка при загрузке Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
       Возврат;
   КонецПопытки;
   
   Попытка
       // Открытие файла Excel
       Состояние("Открытие файла Microsoft Excel...");
       ExcelФайл = ExcelПриложение.WorkBooks.Open(ИмяФайла);
   Исключение
       Сообщить("Ошибка открытия файла Microsoft Excel." + ИмяФайла + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
   КонецПопытки;
32 Zanzarchik
 
16.08.12
09:40
(31)Блин, может быть, попробую. Просто у меня через макет все сделано.
33 Сергиус
 
16.08.12
12:44
Типовой механизм 1с не предполагает, что у тебя в качестве макета будет Active document..он тупо ожидает Табличный документ. Если его нет..то все, писец(

Вот фрагмент кода, который задействуется при печати выводе внешних форм, где это творится(Общие модули - Универсальные механизмы - Процедура НапечататьДокумент):

Если ПечДокумент = Неопределено тогда
       Возврат;
   КонецЕсли;

   // Получить необходимое количество копий
   Если КоличествоЭкземпляров > 0 Тогда
       ПечДокумент.КоличествоЭкземпляров = КоличествоЭкземпляров;
   КонецЕсли;

   Если НЕ ПечДокумент.АвтоМасштаб
      И НЕ ЗначениеЗаполнено(ПечДокумент.ИмяПринтера) Тогда
       ПечДокумент.АвтоМасштаб = Истина;
   КонецЕсли;

   Если НаПринтер Тогда

       ПечДокумент.Напечатать(НепосредственнаяПечать = Истина);

   Иначе

       // Отобразить печатный документ на экране
       //ФормаПечати = ПолучитьОбщуюФорму("ФормаПечати",, Новый УникальныйИдентификатор);
       ФормаПечати = ПолучитьОбщуюФорму("ФормаПечати",, Заголовок + ИмяМакета + Ссылка);
       ФормаПечати.Документ = Ссылка;
       ФормаПечати.Заголовок = Заголовок;
       ФормаПечати.ИмяМакета = ИмяМакета;
       ФормаПечати.ПечатныйДокумент = ПечДокумент;
       ФормаПечати.Открыть();

   КонецЕсли;

У тебя процедура возвращает Неопределено в самом конце..если даже подменить на ДокументДляЭксэль, то все равно будет ошибка..т.к. для обработки COM-объекта надо кое-что менять..Если поменяешь, то все будет ок, а иначе так и будет закрываться.

P.s. Расслабься..проблема не в тебе и не в твоем коде)
34 Сергиус
 
16.08.12
12:49
(33) <<У тебя процедура возвращает Неопределено

Пардон, естественно, Функция..
35 Zanzarchik
 
16.08.12
13:29
(33) - спасибо! :) это я выяснил, поэтому неопределенно возвращает. Когда используешь, как внешнюю обработку - все работает, когда как печ. форму, то тоже работает, но документ сразу же закрывается.
36 Сергиус
 
16.08.12
14:31
(35)В принципе можно немного исправить типовой функционал, чтобы не закрывалось..другой вопрос - надо ли тебе оно?
37 Сергиус
 
16.08.12
14:32
Лефмихалыч верно сказал..проще сделать нормальный макет..в 1с-ке
38 Zanzarchik
 
16.08.12
22:07
(37) да я тоже так думаю, что проще нарисовать макет. Просто есть такая возможность, а реализована в 1С через заднее место. Обидно, хотел до конца разобраться с этой фигней. Ладно, спасибо всем! :) тема закрыта :)
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.