OLE в 1С-Предприятии

09.08.08

Разработка - Математика и алгоритмы

Небольшая инструкция с примерами - как работать с OLE

Краткая справка по использованию OLE в 1С-Предприятии.

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

  1. Создается объект с OLE идентификатором (регистр символов непринципиален):
    • V1CEnterprise.Application - версия независимый ключ;
    • V77.Application - версия зависимый ключ;
    • V77S.Application - версия зависимый ключ, SQL версия;
    • V77L.Application - версия зависимый ключ, локальная версия;
    • V77M.Application - версия зависимый ключ, сетевая версия.
  2. Выполняется инициализация системы 1С-Предприятие методом Initialize().
  3. Вызываются атрибуты и методы системы 1С-Предприятия как OLE Automation сервера.

1С-Предприятие в качестве OLE Automation сервера имеет 4 метода:

  • Initialize() - выполнить инициализацию системы 1С-Предприятие.
  • CreateObject() - Создает объект агрегатного типа данных 1С-Предприятия и возвращает ссылку на него.
  • EvalExpr() - Вычислить выражение системы 1С-Предприятие.
  • ExecuteBatch() - Выполнить последовательность операторов системы 1С-Предприятие.

Методы:

1. Initialize() - открыть базу.

Синтаксис метода такой:

Initialize(<Имя объекта>.RMTrade, <Командная строка>, <Пустая строка>)

где:

<Имя объекта>.RMTrade - имя переменной и ключевое слово RMTrade.
<Командная строка> - командная строка, в которой можно прописать путь к базе, имф пользователя и пароль.
<Пустая строка>) - либо пустая строка, либо "NO_SPLASH_SHOW" - чтобы не показывать заставку при загрузке.

Для того, чтобы открыть базу через OLE - необходимо создать объект с идентификатором OLE, выполнить инициализацию базы и проверить успешность выполнения инициализации. В своем примере я не указываю никаких дополнительных параметров, поэтому открывается квадратное окошко выбора базы, предлагается выбрать пользователя и ввести пароль.

ДругаяБаза=СоздатьОбъект("V77.Application");
Открыта=ДругаяБаза.Initialize(ДругаяБаза.RMTrade,,);
Если Открыта=0 Тогда
    // True=-1, False=0. Для всех OLE команд.
    Сообщить("База не была открыта.");
    Возврат;
КонецЕсли; 

2. CreateObject() - создать объект агрегатного типа.

Этот метод создает объект агрегатного типа данных системы 1С-Предприятия и возвращает ссылку на него.

Синтаксис метода такой:

CreateObject(<ИмяАгрегатногоТипа>)

где:

<ИмяАгрегатногоТипа> - строковое выражение, значение которого содержит имя агрегатного типа данных, заданного в конфигураторе. Например: "Справочник.Номенклатура", "Документ.ПриходнаяНакладная".

3. EvalExpr() - вычислить выражение.

Синтаксис метода такой:

EvalExpr(<СтрокаВыражения>)

где:

<СтрокаВыражения> - строковое выражение, записанное на встроенном языке 1С-Предприятия.

Результатом выражения может быть число, строка, дата или значение любого агрегатного типа данных. Результат с неопределенным типом преобразуется к строковому типу.

4. ExecuteBatch() - выполнить последовательность операторов.

Синтаксис метода такой:

ExecuteBatch(<СтрокаОператоров>)

где:

<СтрокаОператоров> - строковое выражение, текст программы на встроенном языке 1С-предприятия.

Возвращает значение логического типа: TRUE, если последовательность операторов выполнена успешно, FALSE, если нет. В OLE Automation TRUE и FALSE имеют соответственно значения -1 (минус единица) и 0.

Пример: создание документа в другой базе, открытой через OLE.

Выгрузка происходит из обработки. ВыбДокумент - документ, выбранный пользователем для выгрузки в другую базу.

ДругаяБаза=СоздатьОбъект("v77.application");
Открыта=ДругаяБаза.Initialize(ДругаяБаза.RMTrade,,);
Если Открыта=0 Тогда
    Сообщить("База не была открыта.");
    Возврат;
КонецЕсли;
дДок=ДругаяБаза.CreateObject("Документ.ПриходнаяНакладная");
дТовар=ДругаяБаза.CreateObject("Справочник.Номенклатура");
дДок.Новый();
дДок.ДатаДок=ВыбДокумент.ДатаДок;
дДок.Фирма=ДругаяБаза.evalexpr("Константа.ОсновнаяФирма");
дДок.Склад=ДругаяБаза.evalexpr("Константа.ОсновнойСклад");
дДок.КатегорияЦен=ДругаяБаза.evalexpr("Константа.ПриходнаяКатегорияЦен");
дДок.ВариантРасчетаНалогов=ДругаяБаза.evalexpr("Константа.ОсновнойВариантРасчетаНалогов");
дДок.Валюта=ДругаяБаза.evalexpr("Константа.БазоваяВалюта");//рубли
дДок.Дата_курса=дДок.ДатаДок;
дДок.ТипУчета=1;
дДок.Автор=ДругаяБаза.evalexpr("глПользователь");
дДок.ПризнакНакладной=ДругаяБаза.evalexpr("Перечисление.ПризнПрихНакл.Закупка");
дДок.Курс=1;//рубли
дДок.Комментарий=ВыбДОкумент.Комментарий;
ВыбДОкумент.ВыбратьСтроки();
Пока ВыбДокумент.ПолучитьСтроку()=1 Цикл
    дДок.НоваяСтрока();
    ТовКод=СокрЛП(ВыбДОкумент.Товар.Код);
    Если дТовар.НайтиПоКоду(ТовКод)=0 Тогда
        Сообщить("Не найден товар с кодом "+ТовКод);
        Возврат;
    КонецЕсли;
    дТовар.ИспользоватьДату(дДок.ДатаДок);
    дДок.Товар=дТовар.ТекущийЭлемент();
    дДок.Количество=ВыбДокумент.Количество;
    дДок.Единица=дТовар.ЕдиницаПоУмолчанию;
    дДок.Цена=ВыбДОкумент.Цена;
    дДок.Коэффициент=1;
    дДок.Всего=ВыбДОкумент.Сумма;
    дДок.Сумма=ВыбДОкумент.Сумма-ВыбДокумент.НП;
    дДок.СтавкаНДС=дТовар.СтавкаНДС;
    дДок.НДС=ВыбДокумент.НДС;
    дДок.СтавкаНП=дТовар.СтавкаНП;
    дДок.СуммаНП=ВыбДокумент.НП;
КонецЦикла;
дДок.УстановитьНовыйНомер(ДругаяБаза.evalexpr("Константа.ПрефиксНомеровДокументовУпрУчета"));
Сообщить(""+дДок.НомерДок);
дДок.Записать();

Этот пример на 100% рабочий. Используется у меня для выгрузки документов из одной конфигурации в другую.

Сравнение в базе OLE. Константы, перечисления, элементы справочников.

Для сравнения значений агрегатных типов данных в базе, открытой через Оле, использовать стандартный алгоритм с использование знаков равно и неравно (=,<>) не получается. Выход простой. Необходимо перейти от сравнения агрегатных типов данных к простым типам данных - дата, строка и число.

Отсюда вывод: мы сравниваем не сами элементы, а их уникальные атрибуты. Например, для элементов справочника - это код (если он есть), либо наименование. Для перечисления используется метод Идентификатор(). Вот два примера:

//Сравнение реквизита номенклатуры с Константой БазоваяВалюта
Если дТовар.ВалютаУчета.Код<>Другая.Константа.БазоваяВалюта.Код Тогда
    дТовар.ВалютаУчета=Другая.Константа.БазоваяВалюта;
КонецЕсли;
//Сравнение реквизита номенклатуры с перечислением
Если дТовар.ТипТовара.Идентификатор()<>Другая.Перечисление.ТипыТоваров.Штучный.Идентификатор() Тогда
    дТовар.ТипТовара=Другая.Перечисление.ТипыТоваров.Штучный;
КонецЕсли;

См. также

SALE! 10%

Перенос данных из 1С:Бухгалтерия 7.7 в БП 3.0. Переносятся остатки, документы и справочники

Файловый обмен (TXT, XML, DBF), FTP Обмен между базами 1C Платформа 1С v7.7 Платформа 1С v8.3 1С:Бухгалтерия 7.7 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Перенос данных из 1С:Бухгалтерия 7.7 в БП 3.0 | Продукт является развитием и исправлением ошибок стандартной обработки для выгрузки данных из 1С Бухгалтерии 7.7 в Бухгалтерию 3.0 | Предоставляем техподдержку | Обновляем на новые релизы 1С | Перенос из 7.7 является сложным, и на рынке сложно найти специалистов 1С по "семерке" - наши сотрудники помогут вам выполнить переход в рамках техподдержки предлагаемого переноса данных!

50722 45650 руб.

26.05.2020    34090    10    67    

16

Конфигурация "Информационный киоск". Обработки выгрузки товаров для ТиС 9.2, УТ 10.3, УТ 11 (обмен данными с любой конфигурацией 1С 7.7, 8.х)

Оптовая торговля Розничная торговля Обмен между базами 1C Сканер штрих-кода Платформа 1С v7.7 Платформа 1С v8.3 Конфигурации 1cv8 Конфигурации 1cv7 Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Рестораны, кафе и фаст-фуд Управленческий учет Платные (руб)

Конфигурация предназначена для организации offline доступа клиента (покупателя) к информации о товарах, услугах или дисконтных картах посредством сканирования штрих-кода. Основная цель – мгновенно предоставить наиболее актуальную информацию о цене, остатках, наименовании товара (услуги) или накоплениях, держателе, состоянии дисконтной карты.

1800 руб.

21.12.2014    59320    8    21    

20

Выгрузка из 1С ТиС 9.2 в 1С БП 3.0 с дополнительными фильтрами по Фирме, Складу, Контрагенту, Проекту, Автору и Юрлицу

Файловый обмен (TXT, XML, DBF), FTP Обмен между базами 1C Платформа 1С v8.3 Оперативный учет 7.7 1С:Торговля и склад 7.7 1С:Бухгалтерия 3.0 Бухгалтерский учет Управленческий учет Абонемент ($m)

Обработка и правила обмена данными для выгрузки документов и всех связанных с ними справочников из 1С7.7 ТиС 9.2 в 1С8.3 БП 3.0 через файл XML. В типовых конфигурациях уже есть такое решение. Это немного доработанные правила и сама обработка выгрузки, добавлена возможность устанавливать отбор по выгружаемым документам по Фирме, Контрагенту, Складу, Проекту, Автору, ЮрЛицу. А также это внешняя обработка, что даёт возможность адаптировать её под нетиповую ТиС. Обработка и правила тестировались на платформах: 1С: Предприятие 7.7 и 1С: Предприятие 8.3.18.1334. На типовых конфигурациях: «Торговля + склад», редакция 9.2 (7.70 1004) и «Бухгалтерия предприятия» редакция 3.0 (3.0.96.30).

1 стартмани

13.08.2021    8436    52    Kuzya_brаtsk    8    

11

Переход с 1С:Комплексной 7.7 на 1С:УТ 10.3

Обмен между базами 1C Платформа 1С v7.7 Платформа 1С v8.3 Платформа 1C v8.2 1С:Управление торговлей 10 1С:Комплексная 7.7 Россия Управленческий учет Платные (руб)

Начните вести учет в УТ 10.3! Перенесите все свои данные в УТ 10.3 в любом месяце года и продолжите вести учет! Программа перенесёт любое количество баз с документами и остатками в больших количествах. Обработка выгрузки выполнит проверку исходных данных и сформирует отчет о найденных ошибках в справочниках и документах. Партии переносятся с себестоимостью. Штрихкоды номенклатуры загружаются. Цена переносится. Автор консультирует.

8400 руб.

17.03.2021    15563    5    13    

6

Обмен данными ЗУП 3.1 - Бухгалтерия 7.7

Зарплата Обмен между базами 1C Бухгалтерский учет 7.7 Сложные периодические расчеты 1С:Бухгалтерия 7.7 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Платные (руб)

Как известно, Бухгалтерия 7.7 не имеет штатной возможности для обмена с ЗУП 3.1. Данная разработка пригодится тем, кто перешел с ЗиК 2.3 на ЗУП 3.1, но вынужден по каким-то своим причинам оставаться на Бухгалтерии 7.7.

18000 руб.

29.09.2020    13598    2    0    

5

Выгрузка данных из 1С 7.7. в формате EnterpriseData 1.6 (универсальный формат обмена) в конфигурации 8.3

Обмен между базами 1C Платформа 1С v7.7 Платформа 1С v8.3 1С:Торговля и склад 7.7 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Обработка позволяет выгружать данные из ТиС 7.7 в конфигурации 8.3 для сдачи отчетности, для переноса данных при переходе на 8.3, для организации обмена внутри компании при использовании разных версий 1С в структурных подразделениях или формирования отгрузочных накладных для клиентов.

6000 руб.

18.05.2020    22796    59    39    

36

Конвертация данных из 1С 8.3 в 7.7 (версия КД 2.1). Перенос данных из 8.3 в 7.7. Создание в современной 1С 8.3 XML в формате КД2. Инструкции и примеры переноса данных из любой современной 1С 8.3 в устаревшую конфигурацию 1С 7.7, через Конвертацию данных 2

Обмен между базами 1C Платформа 1С v7.7 Платформа 1С v8.3 1С:Конвертация данных Бесплатно (free)

При переходе на новую версию 1С в период параллельной эксплуатации может возникнуть необходимость обратной конвертации данных (по правилам КД версии 2.1) из 1С:Предприятие 8.3 в 1С:Предприятие 7.7 для переноса данных из 1С:Предприятие 8.3 в 7.7. Сделать это поможет следующая инструкция по КД2 о том, как создать новую конвертацию из 8.3 в 7.7, сохранить модуль и правила загрузки данных, сделать загрузку данных. КД2.

17.10.2019    14147    ksnik    0    

15

Перенос остатков и документов (обмен) из Комплексной конфигурации 7.7, редакция 4.5, в конфигурацию Управление предприятием ERP 2.0 (Комплексная автоматизация 2.0)

Файловый обмен (TXT, XML, DBF), FTP Обмен между базами 1C Платформа 1С v7.7 Платформа 1С v8.3 1С:Комплексная 7.7 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х Абонемент ($m)

Разработка позволяет перенести остатки по всем счетам бух. учета из "1С:Комплексная конфигурация, редакция 4.5 (7.7)" в программу "1С:Управление предприятием ERP 2.0", на выбранную дату начала ведения учета. Также переносятся документы за период и вся необходимая справочная информация. Конфигурация "1С:Управление предприятием ERP 2.0" является полностью типовой.

5 стартмани

11.01.2019    15753    39    sulig    14    

13
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. recommend 51 13.08.08 11:05 Сейчас в теме
А что изменится если вместо
дДок.Фирма=ДругаяБаза.evalexpr("Константа.ОсновнаяФирма");
написать
дДок.Фирма=ДругаяБаза.Константа.ОсновнаяФирма;
?
+
2. valerasv 135 13.08.08 11:15 Сейчас в теме
****А что изменится если****
Не прокатит
+
3. recommend 51 13.08.08 11:31 Сейчас в теме
Сдается мне, что "покатит "
да и выполняться быстрее будет
+
4. g789 13.08.08 16:04 Сейчас в теме
100% - "покатит", у меня работает
ОлдДата = База.Константа.ДатаЗапретаРедактирования;
+
5. Minotavrik 1635 14.08.08 07:20 Сейчас в теме
В итоге получишь тоже самое, единственное может чуть медленнее, т.к функция EvalExpr() является COM т.е. храниться по сути в dll, которая подгружается в память скорее всего при загрузке компа и является голимым кодом для исполнения :))
+
6. Sanario 26 03.09.16 09:15 Сейчас в теме
Курс же периодический реквизит - будет 0 равен, если установить, как установлено в коде про создание нового документа
+
7. white-mount 03.09.16 11:37 Сейчас в теме
дДок=ДругаяБаза.CreateObject("Документ.ПриходнаяНакладная");
дТовар=ДругаяБаза.CreateObject("Справочник.Номенклатура");
дДок.Новый();
...

На мой взгляд основная ошибка данного метода в манипулировании открываемой базой.
Создавать объекты необходимо в базе-приёмнике.
источник это только источник данных.

Необходимость открытия ИБ для перепроверки это не самое главное.
Возможные ошибки при таком переносе потом дольше вылавливать.
Сбой целостности это тот ещё подарок.
+
Оставьте свое сообщение