Главная » Статьи » "1С" Програмирование |
Скачивать материалы с сайта, могут только зарегистрированные пользователи.
Для регистрации заполните два поля ниже!
Через минуту Вы получите "Гостевой доступ"
OLE в 1С-Предприятии
OLE в 1С-Предприятии
Как работать с OLE небольшой пример
Краткая справка по использованию OLE в 1С-Предприятии. Для запуска системы 1С-Предприятия в качесте OLE Automation сервера из внешнего приложения выполняется следующая последовательность действий: Создается объект с OLE идентификатором (регистр символов непринципиален): V1CEnterprise.Application - версия независимый ключ; V77.Application - версия зависимый ключ; V77S.Application - версия зависимый ключ, SQL версия; V77L.Application - версия зависимый ключ, локальная версия; V77M.Application - версия зависимый ключ, сетевая версия. Выполняется инициализация системы 1С-Предприятие методом Initialize(). Вызываются атрибуты и методы системы 1с-Предприятия как OLE Automation сервера. 1С-Предприятие в качестве OLE Automation сервера имеет 4 метода: Initialize() - выполнить инициализацию системы 1С-Предприятие. CreateObject() - Создает объект агрегатного типа данных 1С-Предприятия и возвращает ссылку на него. EvalExpr() - Вычислить выражение системы 1С-Предприятие. ExecuteBatch() - Выполнить последовательность операторов системы 1С-Предприятие. 2. Методы: Initialize() - открыть базу. Синтаксис метода такой: Initialize(<Имя объекта>.RMTrade, <Командная строка>, <Пустая строка>), где: <Имя объекта>.RMTrade - имя переменной и ключевое слово RMTrade. <Командная строка> - командная строка, в которой можно прописать путь к базе, имф пользователя и пароль. <Пустая строка>) - либо пустая строка, либо "NO_SPLASH_SHOW" - чтобы не показывать заставку при загрузке. Для того, чтобы открыть базу через OLE - необходимо создать объект с идентификатором OLE, выполнить инициализацию базы и проверить успешность выполнения инициализации. В своем примере я не указываю никаких дополнительных параметров, поэтому открывается квадратное окошко выбора базы, предлагается выбрать пользователя и ввести пароль. ДругаяБаза=СоздатьОбъект("V77.Application"); Открыта=ДругаяБаза.Initialize(ДругаяБаза.RMTrade,,); Если Открыта=0 Тогда // True=-1, False=0. Для всех OLE команд. Сообщить("База не была открыта."); Возврат; КонецЕсли; 3. Методы: CreateObject() - создать объект агрегатного типа. Этот метод создает объект агрегатного типа данных системы 1С-Предприятия и возвращает ссылку на него. Синтаксис метода такой: CreateObject(<ИмяАгрегатногоТипа>), где: <ИмяАгрегатногоТипа> - строковое выражение, значение которого содержит имя агрегатного типа данных, заданного в конфигураторе. Например: "Справочник.Номенклатура", "Документ.ПриходнаяНакладная". 4. Методы: EvalExpr() - вычислить выражение. Синтаксис метода такой: EvalExpr(<СтрокаВыражения>), где: <СтрокаВыражения> - строковое выражение, записанное на встроенном языке 1С-Предприятия. Результатом выражения может быть число, строка, дата или значение любого агрегатного типа данных. Результат с неопределенным типом преобразуется к строковому типу. 5. Методы: ExecuteBatch() - выполнить последовательность операторов. Синтаксис метода такой: ExecuteBatch(<СтрокаОператоров>), где: <СтрокаОператоров> - строковое выражение, текст программы на встроенном языке 1С-предприятия. Возвращает значение логического типа: TRUE, если последовательность операторов выполнена успешно, FALSE, если нет. В OLE Automation TRUE и FALSE имеют соответственно значения -1 (минус единица) и 0. 6. Пример: создание документа в другой базе, открытой через OLE. Выгрузка происходит из обработки. ВыбДокумент - документ, выбранный пользователем для выгрузки в другую базу. ДругаяБаза=СоздатьОбъект("v77.application"); Открыта=ДругаяБаза.Initialize(ДругаяБаза.RMTrade,,); Если Открыта=0 Тогда Сообщить("База не была открыта."); Возврат; КонецЕсли; дДок=ДругаяБаза.CreateObject("Документ.ПриходнаяНакладная"); дТовар=ДругаяБаза.CreateObject("Справочник.Номенклатура"); дДок.Новый(); дДок.ДатаДок=ВыбДокумент.ДатаДок; дДок.Фирма=ДругаяБаза.evalexpr("Константа.ОсновнаяФирма"); дДок.Склад=ДругаяБаза.evalexpr("Константа.ОсновнойСклад"); дДок.КатегорияЦен=ДругаяБаза.evalexpr("Константа.ПриходнаяКатегорияЦен"); дДок.ВариантРасчетаНалогов=ДругаяБаза.evalexpr("Константа.ОсновнойВариантРасчетаНалогов"); дДок.Валюта=ДругаяБаза.evalexpr("Константа.БазоваяВалюта");//рубли дДок.Дата_курса=дДок.ДатаДок; дДок.ТипУчета=1; дДок.Автор=ДругаяБаза.evalexpr("глПользователь"); дДок.ПризнакНакладной=ДругаяБаза.evalexpr("Перечисление.ПризнПрихНакл.Закупка"); дДок.Курс=1;//рубли дДок.Комментарий=ВыбДОкумент.Комментарий; ВыбДОкумент.ВыбратьСтроки(); Пока ВыбДокумент.ПолучитьСтроку()=1 Цикл дДок.НоваяСтрока(); ТовКод=СокрЛП(ВыбДОкумент.Товар.Код); Если дТовар.НайтиПоКоду(ТовКод)=0 Тогда Сообщить("Не найден товар с кодом "+ТовКод); Возврат; КонецЕсли; дТовар.ИспользоватьДату(дДок.ДатаДок); дДок.Товар=дТовар.ТекущийЭлемент(); дДок.Количество=ВыбДокумент.Количество; дДок.Единица=дТовар.ЕдиницаПоУмолчанию; дДок.Цена=ВыбДОкумент.Цена; дДок.Коэффициент=1; дДок.Всего=ВыбДОкумент.Сумма; дДок.Сумма=ВыбДОкумент.Сумма-ВыбДокумент.НП; дДок.СтавкаНДС=дТовар.СтавкаНДС; дДок.НДС=ВыбДокумент.НДС; дДок.СтавкаНП=дТовар.СтавкаНП; дДок.СуммаНП=ВыбДокумент.НП; КонецЦикла; дДок.УстановитьНовыйНомер(ДругаяБаза.evalexpr("Константа.ПрефиксНомеровДокументовУпрУчета")); Сообщить(""+дДок.НомерДок); дДок.Записать(); Этот пример на 100% рабочий. Используется у меня для выгрузки документов из одной конфигурации в другую. 7. Сравнение в базе OLE. Константы, перечисления, элементы справочников. Для сравнения значений агрегатных типов данных в базе, открытой через Оле, использовать стандартный алгоритм с использование знаков равно и неравно (=,<>) не получается. Выход простой. Необходимо перейти от сравнения агрегатных типов данных к простым типам данных - дата, строка и число. Отсюда вывод: мы сравниваем не сами элементы, а их уникальные атрибуты. Например, для элементов справочника - это код (если он есть), либо наименование. Для перечисления используется метод Идентификатор(). Вот два примера: //Сравнение реквизита номенклатуры с Константой БазоваяВалюта Если дТовар.ВалютаУчета.Код<>Другая.Константа.БазоваяВалюта.Код Тогда дТовар.ВалютаУчета=Другая.Константа.БазоваяВалюта; КонецЕсли; //Сравнение реквизита номенклатуры с перечислением Если дТовар.ТипТовара.Идентификатор()<>Другая.Перечисление.ТипыТоваров.Штучный.Идентификатор() Тогда дТовар.ТипТовара=Другая.Перечисление.ТипыТоваров.Штучный; КонецЕсли; | |
Просмотров: 2531 | | |
Выразить благодарность - Поделиться с друзьями!
Всего комментариев: 0 | |