Учебно-методические материалы для студентов кафедры АСОИУ

Тема 3.8 Взаимодействие с внешними приложениями

На практике очень часто возникает необходимость в организации взаимодействия с внешним приложением из программы 1С. Пример - операции импорта или экспорта данных или внедрение одного документа в другой через технологию OLE-Automation. Система 1С:Предприятие предоставляет мощные механизмы для выполнения таких операций.

Использование текстовых файлов для переноса данных

Для работы с файлами в системе используется специальный агрегатный тип данных – «ФС». По умолчанию в системе всегда доступен уже существующий объект с именем «ФС», к которому можно применять методы объекта типа «ФС». Кроме того, можно создать произвольное число объектов типа «ФС» при помощи функции «СоздатьОбъект(«ФС»)».

У объекта типа «ФС» имеются стандартные функции для работы с файлами: «ВыбратьФайл()» – открывает диалог выбора файла, «ВыбратьКаталог()»– открывает диалог выбора каталога, «СуществуетФайл()» – проверяет, существует ли файл с указанным именем, «КопироватьФайл()», «УдалитьФайл()», «ПереименоватьФайл()» и др.

Для работы с текстами в системе используется специальный тип данных «Текст». Средства языка позволяют выводить строк в текстовые файлы и считывать из имеющихся файлов текст с последующим разбором его по строкам.

Для чтения данных из файла используют следующие свойства этого объекта:

Пример использования текстового файла в качестве источника данных приведен в листинге 38. Из файла «exp_imp.txt» загружается справочник номенклатуры

Листинг 38. Загрузка данных из текстового файла

Спр=СоздатьОбъект(«Справочник.Номенклатура»); Текст = СоздатьОбъект(«Текст»); Список = СоздатьОбъект(«СписокЗначений»); Текст.Открыть(«exp_imp.txt»); Для Ном=1 По Текст.КоличествоСтрок() Цикл Стр = Текст.ПолучитьСтроку(Ном); //преобразуем строку в список значений Список.ИзСтрокиСРазделителями(Стр); Если Спр.НайтиПоКоду(Список.ПолучитьЗначение(1))=0 Тогда Спр.Новый(); Спр.Код= Список.ПолучитьЗначение(1); Спр.Наименование= Список.ПолучитьЗначение(2); Спр.Записать(); КонецЕсли; КонецЦикла;

Для выполнения записи в файл используют такие свойства объекта “Текст”:


В листинге 39 приведен пример записи данных в текстовый файл.

Листинг 39. Выгрузка данных в текстовый файл

Текст = СоздатьОбъект(«Текст»); Список = СоздатьОбъект(«СписокЗначений»); Спр=СоздатьОбъект(«Справочник.Номенклатура»); Спр.ВыбратьЭлементы(); Пока Спр.ПолучитьЭлемент()=1 Цикл Список.ДобавитьЗначение(Спр.Код); Список.ДобавитьЗначение(Спр.Наименование); ... // выводим список в текст Текст.ДобавитьСтроку(Список.ВСтрокуСРазделителями()); Список.УдалитьВсе();// очищаем список КонецЦикла; Текст.Записать(«exp_imp.txt»);

Работа с файлами в формате «DBF»

В качестве основного формата локальных баз данных 1С использует xbase-овместимый формат .dbf (он используется также в СУБД Paradox, dBase и FoxPro). Для работы с этим форматом в 1С предназначен объект типа «XBase». При этом надо учитывать следующие ограничения:
  1. Не поддерживаются поля типа memo.
  2. База данных открывается монопольно
  3. Поддерживаются только индексные файлы в формате “CDX”
Доступ к полям базы данных осуществляется через точку с указанием именем поля.

Листинг 40. Работа с объектом XBase

БД=СоздатьОбъект(“XBase”); БД.ОткрытьФайл(«data.dbf»); Если БД.Открыта()=1 Тогда БД.Первая();//встаем на первую запись Пока 1=1 Цикл // Обработка записи базы данных Сообщить(Строка(БД.CODE) + « » + БД.Name); Если БД.Следующая()=0 Тогда // не удалось перейти к следующей записи Прервать; КонецЕсли; КонецЦикла; КонецЕсли;

Обмен данными с помощью OLE Automation

Для запуска системы 1С:Предприятие в качестве сервера OLE Automation из внешнего приложения (например, из другой программы 1С), выполняется следующая последовательность действий:

  1. Создается объект с OLE идентификатором:
  1. Выполняется инициализация системы 1С:Предприятие методом Initialize.
  2. Вызываются атрибуты и методы системы 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