![]() |
Адрес этой странички:
http://d1cv8.narod.ru/top_005/d1cv8_20090926_001/d1cv8_20090926_004.htm Дата: 28.09.2009 Интернет-приложение к книге "Delphi и 1С:Предприятие.Программирование информационного обмена" |
Часть
![]() |
Глава 5. Расширение
функционала 1С.
ActiveFormX в среде
1Cv8.
(продолжение)
Чтение информации из открытого (в контексте ActiveFormX) набора данных.
|
![]() |
Для данного примера требуется, чтобы на компьютере был установлен пакет BDE-5. |
Еще расширим функционал нашей ActiveX-формы.
Цель - иллюстрация процесса считывания (в контексте 1Cv8)
информации из открытого (в контексте нашей ActiveX-формы)
набора данных.
За основу возьмем часто использующийся в
среде Delphi
демонстрационный пример (FishFact). Внешний вид формы примера (FishFact)
:
|
Доработаем нашу ActiveX-форму
следующим образом :
Свойства Delphi-компонента
Table_1 :
DatabaseName := 'DBDEMOS';
TableName := 'biolife.db';
Реализация обработчиков событий
Table_1
:
Набор данных (в
контексте Table_1)
будет автоматически открываться в том случае, если
TN1.PageIndex=1
и закрываться в противном случае :
procedure TMy_ActiveFormX_01.TN1Change(Sender: TObject; NewTab: Integer;
var AllowChange: Boolean);
begin
...
...
if NewTab=1 then begin
Table_1.Active:=true;
end
else begin
Table_1.Active:=false;
end;
end;
Добавим к нашей
ActiveX-форме следующие свойства и методы (пункт
меню "View"
-> "Type Library")
:
Свойство/Метод | Вид/Атрибут | Назначение | Реализация |
DatabaseName | Свойство (только чтение) | Alias (BDE) Базы Данных |
![]() |
TableName | Свойство (только чтение) | Имя таблицы Базы Данных |
![]() |
FieldCount | Свойство (только чтение) | Количество полей открытого набора данных |
![]() |
FieldByName_Get | Метод (чтение) | Получить значение поля (по имени поля) |
![]() |
FieldByNumber_Get | Метод (чтение) | Получить значение поля (по номеру поля) |
![]() |
FieldName_Get | Метод (чтение) | Получить ИМЯ поля (по номеру поля) |
![]() |
FieldType_Get | Метод (чтение) | Получить ТИП поля (по имени поля) |
![]() |
Исходный текст функции MyFieldType_Get (определить тип поля) :
Далее, скомпилировать проект (результирующий файл :
My_ActiveFormX_01_afx.ocx).
Закрыть конфигуратор (и программу)
1Cv8.
Заменить ocx-файл с предыдущей версией нашей
ActiveX-формы (в каталоге OCX) - на
новый.
Зарегистрировать (если это еще не производилось с предыдущей версией ocx-файла)
: RegSvr32 My_ActiveFormX_01_afx.ocx
Теперь, нужно открыть конфигуратор 1Cv8 :
Откроем обработку
Тест_My_ActiveFormX_01_afx_ocx_04.epf и
доработаем ее форму следующим образом :
Исходные тексты (в контексте формы обработки) :
Здесь комментарии излишни ...
Теперь нужно сохранить изменения в новый файл:
Тест_My_ActiveFormX_01_afx_ocx_05.epf
Запустить
программу 1С:Предприятие, открыть файл внешней обработки
Тест_My_ActiveFormX_01_afx_ocx_05.epf и
перейти на вкладку "Данные" нашей
ActiveX-формы :
Чтобы убедиться в том, что функционал нашей ActiveX-формы
работает корректно - "сделаем текущей" какую-нибудь другую строку
открытого набора данных :
и убедимся, что в элементах управления на форме "внешней обработки" 1Cv8 информация меняется синхронно с перемещением по открытому набору данных в контексте нашей ActiveX-формы ...
Исходники этого примера можно скачать здесь :
Delphi-проект
(575 кб) , "Внешняя обработка" (1Cv8)
(5.6 кб).
Еще доработаем нашу ActiveX-форму
(попробуем реализовать возможность синхронного отображения "картинки" из
открытого набора данных в ActiveX-форме - в соотв.
элемент управления на форме 1Cv8).
Добавим метод Picture_SaveToFile
.
Его назначение : сохранить "картинку" из Delphi-компонента DBImage1 в заданный файл на диске :
Затем, доработаем форму
"внешней обработки" (1Cv8)
Тест_My_ActiveFormX_01_afx_ocx_05.epf следующим
образом :
Изменим исходный код
функции Прочитать_Данные_Из_Таблицы
:
Сохраним внешнюю обработку под именем
Тест_My_ActiveFormX_01_afx_ocx_06.epf и откроем ее из программы
1С:Предприятие (режим RunTime) :
Результат тестирования :
Приведенный здесь пример "считывания"
(в контексте формы 1Cv8)
"картинки" из открытого (в контексте ActiveX-формы)
набора данных - является всего лишь "мелкотравчатым" вариантом
решения задачи и не претендует на бОльшее ...
Исходники этого примера можно скачать здесь :
Delphi-проект
(575 кб) , "Внешняя обработка" (1Cv8)
(6.1 кб).