|
![]() |
#1 |
Участник
|
Я склоняюсь, что этот текст был "Копи-Пейст"..
Да и ктому же, методы возвращающие внутренние переменныие "коллекции" идут на свой же интерфеис. По ходу дела Buffer Overflow Exception ![]() скорее всего Ахапта не буделала память, или Word что-то пытается обратно отдать.. Цитата:
Problem signature:
Problem Event Name: BEX Application Name: Ax32.exe Application Version: 5.0.1500.3761 Application Timestamp: 4cd58bc2 Fault Module Name: StackHash_0a9e Последний раз редактировалось Delfins; 31.03.2011 в 17:38. |
|
![]() |
#2 |
Участник
|
Решением данной проблемы может быть такой вариант:
Написал NET сборку, которая выполняет все необходимые операции с WORD- ом, и затем уже ее использую в Аксапта. Минус данного решения таков, что придется подключить в reference Axapta, а также копировать ее на каждого клиента, работающего с WORD - ом. (В папку BIN клиента. В GAC добавлять не обязательно) Но другого решения, кажется нет. - COM технология работы с WORD - не работоспособна в Axapta на последних версиях OS (у нас глючит на WIN SERVER 2008 терминал, обсуждалось на форуме) - NET - не работает напрямую из за "падения" Аксапты. (см обсуждение выше) После такого случая заявления Microsoft о том что ее решения, в т.ч Ax "Хорошо интегрируются с продуктами Office" - звучат слишком самоуверенно ![]() Для того чтобы заработало, написал такой класс на С# в Visual Studio X++: namespace AxFunctions { public class word { Microsoft.Office.Interop.Word.ApplicationClass app; Microsoft.Office.Interop.Word.Document doc; object missing = System.Reflection.Missing.Value; public Microsoft.Office.Interop.Word.Document document() { return doc; } public void openFile(System.Object fileName) { if (app == null) { app = new Microsoft.Office.Interop.Word.ApplicationClass(); } app.Visible = true; doc = app.Documents.Open(ref fileName, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing); } public void setFieldValue(string fieldName, string fieldValue) { Microsoft.Office.Interop.Word.FormFields fields = doc.FormFields; foreach (Microsoft.Office.Interop.Word.FormField field in fields) { if (field.Name == fieldName) { field.Range.Text = fieldValue; } } } } } - открыть документ - присвоить заданное значение полю документа по его имени. Если кому то потребуется что то еще - это легко сделать. Ну а работать с этим в Аксапта очень просто: X++: static void Job22(Args _args) { AxFunctions.word word; ; word = new AxFunctions.word(); word.openFile("c:\\Contract.doc"); word.setFieldValue("NumContract", "1043564/03-2010"); // NumContract - это имя поля в шаблоне документа } Последний раз редактировалось someOne; 07.07.2011 в 11:17. Причина: Файл забыл... |
|
|
За это сообщение автора поблагодарили: Logger (6), suicest (1). |
![]() |
#3 |
Участник
|
Приветсвую!
Ни кто случайно не нашел решение данного вопроса без разработки отдельной dll? Неужели без dll никак? ![]() |
|
Теги |
.net, ax2009, clr interop, clrobject, office, word, баг, ошибка, ядро |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|