Адрес этой странички:
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 кб).