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

Код 1C v 8.х
  V77 = Новый COMОбъект("V77M.Application");

Если V77.Initialize(V77.RMTrade,"ИсточникСтр","") Тогда
Сообщить("Успех");
Накл= V77.EvalExpr("CreateObject(""Документ.РасходнаяНакладная"")");
ДокОсн= V77.EvalExpr("CreateObject(""Документ"")");

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

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

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

Иначе Предупреждение("Ошибка открытия информационной базы");
Возврат;
КонецЕсли;




 Дополнительные возможности:

Если информация оказалась для Вас полезной, появились замечания и дополнения
или Вы хотите поделиться своим вариантом кода,
пожалуйста, оставьте комментарии!

IKSparrow 1Мужчина Персональная информация
1.73
  •  
Дата: 18.01.10 11:03:06Комментарий № 3
Я обычно пишу так:
Код 1C v 8.х
 БазаОле.ПроцентНДС(Перечисление.ЗначенияНДС." +  ТовОле.СтавкаНДС.Идентификатор()+")");   

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

Работают оба варианта. Но если почитать архивные ветки на мисте про работу с OLE-объектами, то достаточно часто можно напороться на то, что использование первой конструкции приводит к непредсказуемым значениям расчётов - система возвращает информационный мусор. Тогда как использование конструкции EvalExpr, вроде как, гарантирует возврат корректного результата в вычислениях. :)

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

// Возвращает дату актуальности
ИмяПользователяОле = БазаОле.EvalExpr("ИмяПользователя()");
// возвращает строку с именем пользователя

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

IKSparrow 1Мужчина Персональная информация
1.73
  •  
Дата: 15.01.10 13:14:46Комментарий № 1
А вот в какие моменты лучше применять конструкцию .EvalExpr чем непосредственное обращение к методам подключённой через OLE базы?

Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.

[ Главная | Все | 7.х | 8.х | 8.2 УП | Поиск | Файлы | Вопросы | Задать вопрос | Поддержать проект | Реклама | Статистика | Обратная связь ]

 Help1C.com «Помощник по "1С"» - это библиотека полезных функций, примеров и советов для "1С:Предприятия". Которая будет полезна как начинающему программисту или пользователю, так и опытному, забывшему некоторые моменты программирования или работы в среде "1С". Вы можете также поучаствовать в составлении библиотеки, отвечая на вопросы пользователей, находя ошибки, оставляя комментарии и добавляя свои полезные функции и примеры.

HitsВсе материалы, размещенные на сайте, взяты из свободных источников или присланы посетителями сайта. Подробнее... Принимаем банковские карты
© Help1C.com Admin : Евгений Мигачев (WickeD).