Использование VBScript в корыстных целях
Добавлено: 15 окт 2010, 17:44
Для тех кто не очень любит FR, на примере покажу как с помощью VB Script решить нетривиальные (с точки зрения FCOM и не только) задачи.
Задача очень простая по сути, но только не для инструментария Галактики. Необходимо в трудовом договоре выводить в колонтитул ФИО сотрудника.
Для решения задачи потребуется два шага:
1. В нужной форме ТД создаем колонтитул содержащий блок с комментарием FIO. Для этого вызываем меню Вставка/Поле - выбираем поле COMMENTS. В качестве примечания задаем FIO. Сохраняем форму.
2. После формирования формы нам необходимо выполнить скрипт для модификации колонтитула. Для этого докомпиливаем интерфейс RPD_1;
Вот таким образом используя объектную модель ворда и VBScript решается задачка.
Задача очень простая по сути, но только не для инструментария Галактики. Необходимо в трудовом договоре выводить в колонтитул ФИО сотрудника.
Для решения задачи потребуется два шага:
1. В нужной форме ТД создаем колонтитул содержащий блок с комментарием FIO. Для этого вызываем меню Вставка/Поле - выбираем поле COMMENTS. В качестве примечания задаем FIO. Сохраняем форму.
2. После формирования формы нам необходимо выполнить скрипт для модификации колонтитула. Для этого докомпиливаем интерфейс RPD_1;
Код: Выделить всё
#component "Z_Staff"
alter interface RPD_1 (fix 'Изменение колонтитула');
Procedure PushMacro;
{
If isValid ( tnPersons )
{
var iStrFunc : StringFunctions;
var FileName, VBSFileName : string;
FileName := CreateTmpFileName;
VBSFileName := TranslatePath ( GetStringParameter ( 'Files','OutputFilesDirectory', 0 ) + 'tdmacro.vbs' );
LogStrToFile ( FileName, oem2ansi( 'wdReplaceAll = 2') );
LogStrToFile ( FileName, oem2ansi( 'Dim oWord') );
LogStrToFile ( FileNAme, oem2ansi( 'On Error Resume Next' ) );
LogStrToFile ( FileName, oem2ansi( 'Set oWord = GetObject(,"Word.Application")') );
LogStrToFile ( FileName, oem2ansi( 'If Not (oWord Is Nothing) then') );
LogStrToFile ( FileName, oem2ansi( 'Dim oDoc') );
LogStrToFile ( FileName, oem2ansi( 'For iDoc = 1 To oWord.Documents.Count') );
LogStrToFile ( FileName, oem2ansi( 'Set oDoc = oWord.Documents.Item(iDoc)') );
LogStrToFile ( FileName, oem2ansi( 'If InStr(1,oDoc.Name,"' + iStrFunc.GetFirstName ( Persons.FIO )+ string ( Persons.StrTabN ) + '") then') );
LogStrToFile ( FileName, oem2ansi( 'Dim CodeText') );
LogStrToFile ( FileName, oem2ansi( 'For iSec=1 To oDoc.Range(0,0).sections.count' ) );
LogStrToFile ( FileName, oem2ansi( ' For iFoot=1 To oDoc.Range(0,0).sections.item(iSec).footers.count' ) );
LogStrToFile ( FileName, oem2ansi( ' For iFil=1 To oDoc.Range(0,0).sections.item(iSec).footers.item(iFoot).Range.Fields.Count' ) );
LogStrToFile ( FileName, oem2ansi( ' Set CodeText = oDoc.Range(0,0).sections.item(iSec).footers.item(iFoot).Range.Fields.item(iFil).Code' ) );
LogStrToFile ( FileName, oem2ansi( ' If InStr(1,CodeText.Text,"COMMENTS FIO") > 0 then' ) );
LogStrToFile ( FileName, oem2ansi( ' CodeText.Text = "COMMENTS " + chr(34) + "' + iStrFunc.GetFIO ( Persons.FIO ) + '____________________ " + chr(34)' ) );
LogStrToFile ( FileName, oem2ansi( ' End If') );
LogStrToFile ( FileName, oem2ansi( ' oDoc.Range(0,0).sections.item(iSec).footers.item(iFoot).Range.Fields.item(iFil).Update' ) );
LogStrToFile ( FileName, oem2ansi( ' Next') );
LogStrToFile ( FileName, oem2ansi( ' oDoc.Range(0,0).sections.item(iSec).footers.item(iFoot).Range.Fields.Update' ) );
LogStrToFile ( FileName, oem2ansi( ' Next') );
LogStrToFile ( FileName, oem2ansi( 'Next') );
LogStrToFile ( FileName, oem2ansi( 'End If') );
LogStrToFile ( FileName, oem2ansi( 'Next') );
LogStrToFile ( FileName, oem2ansi( 'End If') );
If FileExist ( VBSFileName )
DeleteFile ( VBSFileName );
If CopyMoveFile ( FileName, VBSFileName, true, ecmfClientFrom + ecmfClientTo )
ExecProgram ( 'start', VBSFileName,'Изменение колонтитула...',0,0 );
If FileExist ( VBSFileName )
DeleteFile ( VBSFileName );
};
};
HandleEvent
cmStaffWordDoc :
{
if inherited::handleevent(cmStaffWordDoc) <> heAbort
PushMacro;
};
end;
end.