helpf.pro
Регистрация
 0 
Распечатать

Пример простой реализации OLE доступа из 8 к 77

Код 1C v 8.х
  V77 = Новый COMОбъект("V77M.Application");
Если V77.Initialize(V77.RMTrade,"ИсточникСтр","") Тогда
Сообщить("Успех");
Накл= V77.EvalExpr("CreateObject(""Документ.РасходнаяНакладная"")");
ДокОсн= V77.EvalExpr("CreateObject(""Документ"")");

Накл.ВыбратьДокументы();
Пока Накл.ПолучитьДокумент()=1 Цикл
Номер=СокрЛП(Накл.НомерДок);
ДокСоотв=Документы.РеализацияТоваров.НайтиПоНомеру(СокрЛП(Номер), Накл.ДатаДок);
Если Накл.Проведен()=0 Тогда
Продолжить;

КонецЕсли;
Если ДокСоотв=Документы.РеализацияТоваров.ПустаяСсылка() Тогда
Сообщить("! для "+Накл.Вид()+" "+Накл.НомерДок+" не найдено соответстствие");
Продолжить;

КонецЕсли;
Если Накл.ДокументОснование.Выбран()=0 Тогда
Продолжить;
КонецЕсли;
// и т.д.

Иначе Предупреждение("Ошибка открытия информационной базы");
Возврат;
КонецЕсли;
Разместил:   Версии: | 8.x |  Дата:   Прочитано: 13204
 0 
Распечатать
Возможно, вас также заинтересует
10060 (0x0000274C): Попытка установить соединение была безуспешной 0
Установили новый терминальный сервер, на нем подняли 1С, терминальные пользователе неописуемо довольны, все просто летает :) И вот же надо было такому случиться, главному бухгалтеру не понравилось работать через...
COM-подключение к базе 7.7 из 8.2 1С 4
Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине. Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)): НаКлиенте Процедура Загрузки() ПутьКБазе="...
Cообщение: "Не удалось удалить чеки ККМ!" 2
Пользователь с правами Администратор ККМ проводит Закрытие кассовой смены (Z). Выходит сообщение: " Не удалось удалить чеки ККМ!" ФР печатает Z -отчет, но Отчет о рознчничных продажах не формируется. Необходимо дать...
V82.COMConnector.1: Не найдена лицензия COM-соединением 1
При подключении из одной базы к другой через COM внезапно стала появляться следующая ошибка: «V82.COMConnector.1: Не найдена лицензия COM-соединением», хотя никаких изменений на серверах не делалось. Релиз платформы был 8.2.13....
ZIP-архив Создание 0
Для того чтобы записать файлы в ZIP-архив необходимо выполнить несколько простых действий: * Создать архив с необходимыми параметрами, в который будут помещаться файлы. * Поместить в архив необходимые файлы. * Записать...
Посмотреть все результаты поиска похожих
Комментарии
IKSparrow
18.01.2010 11:03Комментарий: 3
IKSparrow
Я обычно пишу так:
Код 1C v 8.х
 БазаОле.ПроцентНДС(Перечисление.ЗначенияНДС." +  ТовОле.СтавкаНДС.Идентификатор()+")");   

а не так:
Код 1C v 8.х
 БазаОле.EvalExpr("ПроцентНДС(Перечисление.ЗначенияНДС." +  ТовОле.СтавкаНДС.Идентификатор()+")");   

Работают оба варианта. Но если почитать архивные ветки на мисте про работу с OLE-объектами, то достаточно часто можно напороться на то, что использование первой конструкции приводит к непредсказуемым значениям расчётов - система возвращает информационный мусор. Тогда как использование конструкции EvalExpr, вроде как, гарантирует возврат корректного результата в вычислениях. )
E_Migachev
15.01.2010 14:56Комментарий: 2
E_Migachev
Если вкратце, то: при запуске базы автоматически компилируется глобальный модуль, соответственно нам становятся доступны функции и процедуры глобального модуля с признаком "Экспорт" и различные системные функции 1С.
А доступны они нам через функцию 1С OLE -EvalExpr(), в 8-ых версиях - Выполнить().
На пример:
Код 1C v 7.x
 ДатаАктуальностиОле = БазаОле.EvalExpr("ПолучитьДатуТА()");
// Возвращает дату актуальности
ИмяПользователяОле = БазаОле.EvalExpr("ИмяПользователя()");
// возвращает строку с именем пользователя

// попробуем теперь получить числовое значение НДС у элемента номенклатуры
// через функцию глобального модуля ПроцентНДС(СтавкаНДС) Экспорт!
ТовОле = БазаОле.CreateObject("Справочник.Номенклатура");
ТовОле.ВыбратьЭлементы();
// Найдем элемент справочника (не группа!)
Пока ТовОле.ПолучитьЭлемент()=1 Цикл
Если ТовОле.ЭтоГруппа()=0 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
ЧисловоеЗначениеПроцентаНДСТовараОле = БазаОле.EvalExpr("ПроцентНДС(Перечисление.ЗначенияНДС." + ТовОле.СтавкаНДС.Идентификатор()+")");
IKSparrow
15.01.2010 13:14Комментарий: 1
IKSparrow
А вот в какие моменты лучше применять конструкцию .EvalExpr чем непосредственное обращение к методам подключённой через OLE базы?
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.