Имя: Пароль:
1C
 
Как напечатать документ через OLE
0 rino
 
13.07.09
16:16
Добрый день.
в общем, есть задача которая перепала мне с параллельного проекта.
Что люди хотят:
Есть две программы, одна написана в среде Delphi, другая 1С Предприятие версии 7.7
Необходимо сделать так, чтобы документ, который формируется, а точнее его реквизиты можно было по нажатию кнопки записать в определенный документ в 1С (т.е. создать новый документ) и там же (в 1С) вывести на печать.
Вообщем задачу с добавление документа и записью в него данных я решил. Вопрос только в одном. Добавлял данные я через объект Документ.Имя. Но вот как вывести этот документ программным способом на печать через OLE?
1 ТелепатБот
 
гуру
13.07.09
16:16
2 skunk
 
13.07.09
16:17
также как и без оли
3 rino
 
13.07.09
16:24
хорошо. как это сделать? есть в модуле формы процедура, которая заполняет отчет документа перед выводом на печать. Но как ее вызвать я ума не приложу
4 ZDenis
 
13.07.09
16:57
(3) Ты ее не вызывай, а напиши заново в базе не оле
5 rino
 
13.07.09
17:06
блин. я наверное не так написал.
вызываю я и передаю данные как раз из программы написанной на Delphi в 1С Предприятие (некоторые реквизиты заношу в документ). Но не знаю как мне после этого напечатать этот же документ в 1С именно через OLE
Задача может показаться бредовой, но вот начальник хочет чтоб было именно так.
6 v_rtex
 
13.07.09
17:09
пусть начальник учет ведет на дельфи и забудет про 1С..
7 Serginio1
 
13.07.09
17:13
Посмотри если в документе при открытии вызов печати, тода вызывай открыть форму с параметрами, если нет то сделай отчет либо метод для печати .
Посмотри Задание условия в запросе через OLE
8 Ёпрст
 
гуру
13.07.09
17:14
(5) см. (2).
9 rino
 
13.07.09
17:15
в том то и дело, что это начальник делает так как хочет заказчик, заказчик ведет учет в 1С бухгалтерии по студгородку. А вот поселение хочет делать в программе которую умники на делфи написали. Вот теперь получается, половина функционала там, половина здесь, а я голову ломаю.
10 v_rtex
 
13.07.09
17:16
(9) см. (7): там дело написано, но надо чуток подправить форму документа, процедуру ПриОткрытии()
11 Serginio1
 
13.07.09
17:21
Да не забудь, что Delphi методами вызывает с параметрами по ссылке.
Иногда это не проходит, особенно для строк. Как вариант вызывать из одельной процедуры передав параметр как const.
12 Serginio1
 
13.07.09
17:40
+11 либо Передавай как ''+Параметр. Тогда Delphi сформирует вызов по значению.
13 Torquader
 
13.07.09
21:30
Не знаю, как у вас там в Delphi, но в Visual Basic никаких проблем нет:
' создаём "наше чудо"
Set Ole1C=CreateObject("V77.Application")
' не забываем, что надо выполнить инициализацию
if Ole1C.Initialize(Ole1C.rmTrade,InitString,"NO_SPLASH_SHOW")=1 then
Set Doc=Ole1C.CreateObject("Document.ПростоДокумент")
Doc.New()
' можно повторить для каждого реквизита
' если поле записано латинскими буквами, то можно Doc.FieldName
' если русскими, то не каждый язык это потерпит
' но всегда есть выход
Doc.SetAttrib("ПростоРеквизит",ValueForSet)
' сохраняем документ в базе
Doc.Write()
' открываем форму со специальным параметром
Ole1C.OpenFormModal(Doc.CurrentDocument(),"Ole:Печать")
' завершаем работу 1С корректно
Ole1C.ExitSystem()
end if

В модуле формы документа в 1С должно быть:

// предопределённая процедура, которая вызывается при открытии нашей формы
Процедура ПриОткрытии()
// здесь должен выполняться код, который создаёт какие-то объекты формы
// которые могут нам понадобиться при печати
//
// проверим, что открыли форму в модальном режиме
Если МодальныйРежим()=1 Тогда
 Если Форма.Параметр="Ole:Печать" Тогда
 // вызываем нашу процедуру, которая выполняет печать
  ВыполнитьПечать();
  // сообщаем системе, что форму открывать не надо
  СтатусВозврата(0);
  // и завершаем выполнение
  Возврат;
 КонецЕсли;
КонецЕсли;
// здесь далее будет идти обычный код
// который выполняется при открытии документа
// и создаёт объекты необходимые для работы с формой документа,
// но которые для печати не нужны
КонецПроцедуры
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.