AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.05.2010, 15:36   #1  
3oppo is offline
3oppo
Участник
Аватар для 3oppo
 
222 / 32 (2) +++
Регистрация: 30.06.2005
Запрет на печать и сохранение документов doc, xls.
АХ 3.0 SP 5

Как наложить запрет (выборочно) на печать и сохранение, открываемых документов (doc, xls)?

Смотрел как вариант отключение этих опций меню макросами, но как эти макросы привязать к любому файлу? Открытие в АктивХ, нескольких документов привело к проблемам.. В связи с чем вопрос, может кто уже делал подобное?
Старый 26.05.2010, 15:40   #2  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Макросы можно вставлять (и запускать) программно в момент создания документов.

Вставка макроса:

X++:
public void setVBACode(str _code)
{
     COM vbp;              
     COM vbc;              
     COM vbmdl;          
     COM vbcode;        
     ;
     vbp = comDocument.VBProject();
     vbc = vbp.VBComponents();
     vbmdl = vbc.Add(1);
     vbcode = vbmdl.CodeModule();
     vbcode.InsertLines(vbcode.CountOfLines() + 1, _code);
}
Запуск макроса:

X++:
void runVBACode(str _name)
{
    comApplication.run(_name);
}
Перед использованием надо разрешить программный доступ к Excel в его настройках.

Последний раз редактировалось Андре; 26.05.2010 в 15:43.
Старый 26.05.2010, 15:44   #3  
3oppo is offline
3oppo
Участник
Аватар для 3oppo
 
222 / 32 (2) +++
Регистрация: 30.06.2005
Документ уже создан до меня.. Мне его нужно только открыть, так что бы нельзя было печатать и сохранять.
Старый 26.05.2010, 15:45   #4  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Вставляйте макросы и запускайте их в момент открытия документа.
Старый 26.05.2010, 15:51   #5  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Собственно сам текст макроса, который надо вставлять в открываемый документ:

X++:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
    Cancel = True
End Sub
Старый 26.05.2010, 16:42   #6  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
По большому счету - это невозможно. Если на экране отображена "картинка" то распечатать ее можно будт очень многими способами. Начиная от PrintScreen и копирования в другой файл и кончая банальной перезаписью с листа.

Максимум что Вы можете сделать - это заблокировать отдельные пункты меню. Но, во-первых, это потребует фактически отключение систем безопасности (разрешение записи и выполнения макросов), а, во-вторых, как было указано ранее, если пользователю очень надо, он найдет способ обойти ограничение
Старый 26.05.2010, 16:46   #7  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Не, ну если очень нужно - можно реализовать задачу, которая запускается на AOS-е или пакетном сервере, открывает документ, сохраняет его в JPEG или PDF и добавляет серую надпись поперек листа - DRAFT (чтобы нельзя было распечатать). Полученный PDF возвращается пользователю.
Старый 26.05.2010, 16:58   #8  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Серая надпись никак не может воспрепятствовать печати. Ну, разве что это не будет официальным документом. Так и запрет обычно пытаются ввести вовсе не для официальных документов, а для неких отчетов. Только напрочь забывают, что циферки из отчета банально можно переписать на бумажку
Старый 26.05.2010, 17:01   #9  
3oppo is offline
3oppo
Участник
Аватар для 3oppo
 
222 / 32 (2) +++
Регистрация: 30.06.2005
Цитата:
Сообщение от Андре Посмотреть сообщение
Вставляйте макросы и запускайте их в момент открытия документа.
Чето не доганяю чего то..

Есть файл, abs.doc.. Как в него вставить макрос, а потом запустить?
Я ведь открываю файл во внешнем приложении WinApi::shellExecute(), так как ActiveX глючит (не хочет работать с несколькими файлами), как получить comDocument?
Старый 26.05.2010, 17:04   #10  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Как то так:

X++:
ComExcelDocument_Ru doc = new ComExcelDocument_Ru();
;
doc.open(filename);
doc.setVBACode(macro_text);
Код setVBACode(), который я привел, отсутствует в стандартном ComExcelDocument_RU - нужно будет создать соответствующий метод.
За это сообщение автора поблагодарили: 3oppo (1).
Старый 26.05.2010, 17:11   #11  
3oppo is offline
3oppo
Участник
Аватар для 3oppo
 
222 / 32 (2) +++
Регистрация: 30.06.2005
Цитата:
Сообщение от Андре Посмотреть сообщение
Не, ну если очень нужно - можно реализовать задачу, которая запускается на AOS-е или пакетном сервере, открывает документ, сохраняет его в JPEG или PDF и добавляет серую надпись поперек листа - DRAFT (чтобы нельзя было распечатать). Полученный PDF возвращается пользователю.
Интересно.. Что можно почитать по этой теме?
Старый 26.05.2010, 17:24   #12  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
PHP код:
 Интересно.. Что можно почитать по этой теме
Так сразу не скажу, но есть подозрение, что проще это сделать не X++ средствами. Например, создать .Net сборку, которая будет вызываться из Axapta и на основе Excel создавать PDF. Библиотеки под DOT.NET работающие с PDF имеются.

Еще можно посмотреть последние версии офиса - не умеют ли они сохранять данные в PDF формате (OpenOffice давно его поддерживает).
Старый 26.05.2010, 17:28   #13  
3oppo is offline
3oppo
Участник
Аватар для 3oppo
 
222 / 32 (2) +++
Регистрация: 30.06.2005
Возникает вот такая ошибочка..
Цитата:
Метод "VBProject" в COM-объекте класса "_Workbook" возвратил код ошибки 0x800A03EC (<неизвестно>), который означает: Программный доступ к проекту Visual Basic не является доверенным.
Как это лечится?
Старый 26.05.2010, 17:28   #14  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,510 / 435 (18) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Серая надпись никак не может воспрепятствовать печати. Ну, разве что это не будет официальным документом. Так и запрет обычно пытаются ввести вовсе не для официальных документов, а для неких отчетов. Только напрочь забывают, что циферки из отчета банально можно переписать на бумажку
Возможно, речь идёт как раз об официальных документах, типа Торг-12 или СФ.
Только в этом случае ИМХО проще новый репорт нарисовать - его заведомо не поправишь и не пересохранишь
__________________
С уважением,
Вячеслав
Старый 26.05.2010, 17:35   #15  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
Как это лечится?
В настройках Excel надо разрешить программный доступ. Местоположение настройки зависит от версии Excel:

2003: Tools - Macro - Security - Trusted Publishers - Trust Access To VB Project
2007: Excel Options - Trust Center - Trust Center Settings - Macro Settings - Trust Access To VB Project
Старый 26.05.2010, 17:46   #17  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
100% - дело в этом. Проверьте не осталось ли запущенных экземпляров Excel, так как эта настройка разделяется между всеми экземплярами Excel.
Старый 26.05.2010, 17:49   #18  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Вот, кстати, я писал два метода. Один проверяет - установлена ли данная настройка. Второй - устанавливает флаг. Не гарантирую, что будет работать со всеми версиями Excel:

X++:
static boolean checkTrustedAccessToVBA()
{
    #winapi
    container   keyValue;
    int         regKey;
    str         keyPath = @"Software\Microsoft\Office\%1\Excel\Security";
    ;
    keyPath = strfmt(keyPath, gm_reportExcelApplication::getExcelVersion());
    regKey = WinAPI::regOpenKey(#HKEY_CURRENT_USER, keyPath, #KEY_READ);
    if(!regKey)
        return true;

    keyValue = WinAPI::regGetValue(regKey, 'AccessVBOM');
    WinAPI::regCloseKey(regKey);

    if(conlen(keyValue) != 1)
        return true;

    if(conpeek(keyValue, 1) == 1)
        return true;
    else
        return false;
X++:
static void setTrustedAccessToVBA()
{
    #winapi
    container   keyValue;
    int         regKey;
    str         keyPath = @"Software\Microsoft\Office\%1\Excel\Security";
    ;
    keyPath = strfmt(keyPath, gm_reportExcelApplication::getExcelVersion());
    regKey = WinAPI::regOpenKey(#HKEY_CURRENT_USER, keyPath, #KEY_WRITE);
    if(regKey)
    {
        WinAPI::regSetValueEx(regKey, 'AccessVBOM', #REG_DWORD, 1);
        WinApi::regCloseKey(regKey);
    }
За это сообщение автора поблагодарили: alex55 (1).
Старый 26.05.2010, 18:08   #19  
3oppo is offline
3oppo
Участник
Аватар для 3oppo
 
222 / 32 (2) +++
Регистрация: 30.06.2005
Ооо.. еще раз сенкс..
Но вот только макрос приведенный вами отказывается работать..
Прописывается нормально, но только почему то не отрабатывает?!
Старый 26.05.2010, 23:00   #20  
konopello is offline
konopello
SAP
SAP
 
628 / 76 (4) ++++
Регистрация: 08.11.2005
Адрес: Минск
А я как то делал отчеты с макроссами, я тогда создавал темплейт и в нем писал макрос для автоматического выравнивания объединенных ячеек. Далее создавал новый документ на основании шаблона, на мой взгляд, это куда проще чем вставлять прямо в коде. Хотя как сказать....
Теги
excel, word, печать

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Печать самих файлов PDF Владимир Максимов DAX: База знаний и проекты 9 17.08.2017 10:34
Печать (сохранение) отчета в PDF konfet DAX: Программирование 41 12.12.2012 10:13
Печать документов по Заказам, Закупкам Swetik DAX: Функционал 8 11.04.2008 20:07
Серии документов ax_f DAX: Функционал 3 23.09.2004 19:51
Печать документов от разных юр. лиц из одной компании May DAX: Функционал 15 11.02.2004 09:47
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 05:43.