Тема 3.8 Взаимодействие с внешними приложениями
На практике очень часто возникает необходимость в организации взаимодействия с внешним приложением из программы 1С. Пример - операции импорта или экспорта данных или внедрение одного документа в другой через технологию OLE-Automation. Система 1С:Предприятие предоставляет мощные механизмы для выполнения таких операций.
Использование текстовых файлов для переноса данных
Для работы с файлами в системе используется специальный агрегатный тип данных – «ФС». По умолчанию в системе всегда доступен уже существующий объект с именем «ФС», к которому можно применять методы объекта типа «ФС». Кроме того, можно создать произвольное число объектов типа «ФС» при помощи функции «СоздатьОбъект(«ФС»)».
У объекта типа «ФС» имеются стандартные функции для работы с файлами: «ВыбратьФайл()» – открывает диалог выбора файла, «ВыбратьКаталог()»– открывает диалог выбора каталога, «СуществуетФайл()» – проверяет, существует ли файл с указанным именем, «КопироватьФайл()», «УдалитьФайл()», «ПереименоватьФайл()» и др.
Для работы с текстами в системе используется специальный тип данных «Текст». Средства языка позволяют выводить строк в текстовые файлы и считывать из имеющихся файлов текст с последующим разбором его по строкам.
Для чтения данных из файла используют следующие свойства этого объекта:
- Открыть(<ИмяФайла>) – открывает файл.
- КодоваяСтраница(<Режим>) – получить/установить режим кодировки. <Режим> = 0 – Windows-кодировка, 1 – DOS-кодировка
- Показать(<Заголовок>,<ИмяФайла>) – открыть окно редактирования текста.
- Записать(<ИмяФайла>) – записывает текст в файл.
- КоличествоСтрок() – количество строк в тексте.
- ПолучитьСтроку(<НомерСтроки>) – получить строку текста по номеру
Листинг 38. Загрузка данных из текстового файла
Спр=СоздатьОбъект(«Справочник.Номенклатура»); Текст = СоздатьОбъект(«Текст»); Список = СоздатьОбъект(«СписокЗначений»); Текст.Открыть(«exp_imp.txt»); Для Ном=1 По Текст.КоличествоСтрок() Цикл Стр = Текст.ПолучитьСтроку(Ном); //преобразуем строку в список значений Список.ИзСтрокиСРазделителями(Стр); Если Спр.НайтиПоКоду(Список.ПолучитьЗначение(1))=0 Тогда Спр.Новый(); Спр.Код= Список.ПолучитьЗначение(1); Спр.Наименование= Список.ПолучитьЗначение(2); Спр.Записать(); КонецЕсли; КонецЦикла;
Для выполнения записи в файл используют такие свойства объекта “Текст”:
- ВставитьСтроку(<НомерСтроки>,<Строка>) – вставить строку с указанным номером.
- ЗаменитьСтроку(<НомерСтроки>,<Строка>) – заменить строку с указанным номером.
- УдалитьСтроку(<НомерСтроки>) – удалить строку с указанным номером.
- ДобавитьСтроку(<Строка>) – добавить строку в конец текста.
- Очистить()–удалить все строки текста.
В листинге 39 приведен пример записи данных в текстовый файл.
Листинг 39. Выгрузка данных в текстовый файл
Текст = СоздатьОбъект(«Текст»); Список = СоздатьОбъект(«СписокЗначений»); Спр=СоздатьОбъект(«Справочник.Номенклатура»); Спр.ВыбратьЭлементы(); Пока Спр.ПолучитьЭлемент()=1 Цикл Список.ДобавитьЗначение(Спр.Код); Список.ДобавитьЗначение(Спр.Наименование); ... // выводим список в текст Текст.ДобавитьСтроку(Список.ВСтрокуСРазделителями()); Список.УдалитьВсе();// очищаем список КонецЦикла; Текст.Записать(«exp_imp.txt»);
Работа с файлами в формате «DBF»
В качестве основного формата локальных баз данных 1С использует xbase-овместимый формат .dbf (он используется также в СУБД Paradox, dBase и FoxPro). Для работы с этим форматом в 1С предназначен объект типа «XBase». При этом надо учитывать следующие ограничения:- Не поддерживаются поля типа memo.
- База данных открывается монопольно
- Поддерживаются только индексные файлы в формате “CDX”
Листинг 40. Работа с объектом XBase
БД=СоздатьОбъект(“XBase”); БД.ОткрытьФайл(«data.dbf»); Если БД.Открыта()=1 Тогда БД.Первая();//встаем на первую запись Пока 1=1 Цикл // Обработка записи базы данных Сообщить(Строка(БД.CODE) + « » + БД.Name); Если БД.Следующая()=0 Тогда // не удалось перейти к следующей записи Прервать; КонецЕсли; КонецЦикла; КонецЕсли;
Обмен данными с помощью OLE Automation
Для запуска системы 1С:Предприятие в качестве сервера OLE Automation из внешнего приложения (например, из другой программы 1С), выполняется следующая последовательность действий:
- Создается объект с OLE идентификатором:
- V1СEnterprise.Application — версия независимый ключ;
- V77.Application — версия зависимый ключ;
- V77S.Application — версия зависимый ключ, SQL версия;
- V77L.Application — версия зависимый ключ, локальная версия;
- V77M.Application — версия зависимый ключ, сетевая версия.
- Выполняется инициализация системы 1С:Предприятие методом Initialize.
- Вызываются атрибуты и методы системы 1С:Предприятие как OLE Automation сервера
В листинге 41 приведен пример организации взаимодействия между двумя программами 1С.
Листинг 41. Интеграция приложений
Процедура Загрузить() Если ФС.Существуетфайл(Путь + " UL") = 0 Тогда Предупреждение("Путь информационной базы не найден!"); Иначе V7 = СоздатьОбъект("V77.Application"); Открыта = V7.Initialize(V7.RMTrade, "/d" + Путь +" /M /N" + Пользователь, ""); Если Открыта = 0 Тогда Предупреждение("Ошибка открытия информационной базы"); Возврат; КонецЕсли; Импорт = V7.CreateObject("Справочник.Контрагенты"); Импорт.ВыбратьЭлементы(); Пока Импорт.ПолучитьЭлемент() = 1 Цикл Если Импорт.ЭтоГруппа() = 0 Тогда Сообщить(Импорт.Наименование); КонецЕсли; КонецЦикла; КонецЕсли; КонецПроцедуры
CC-BY-CA Анатольев А.Г., 24.04.2014