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 |  Дата:   Прочитано: 28544
 0 
Распечатать
Возможно, вас также заинтересует
10060 (0x0000274C): Попытка установить соединение была безуспешной 24
Установили новый терминальный сервер, на нем подняли 1С, терминальные пользователе неописуемо довольны, все просто летает :) И вот же надо было такому случиться, главному бухгалтеру не понравилось работать через терминал, а еще у нее свой ноутбук и
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 50
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ
COM-подключение к базе 7.7 из .NET, .NET Core 1
Инсталяция: dotnet add package sabatex.V1C77 или добавить через NUGET пакет sabatex.V1C77. Добавить пространство имен: using sabatex.V1C77; пример использованя: ---C# static void Main(string args) { // создаем строку соединен
COM-подключение к базе 7.7 из 8.2 1С 7
Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине. Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)): НаКлиенте Процедура Загрузки() ПутьКБазе=" D:ВашаБаза1с77" ; Пользователь=
Cообщение: "Не удалось удалить чеки ККМ!" 2
Пользователь с правами Администратор ККМ проводит Закрытие кассовой смены (Z). Выходит сообщение: " Не удалось удалить чеки ККМ!" ФР печатает Z -отчет, но Отчет о рознчничных продажах не формируется. Необходимо дать роли Администратор ККМ прав
Посмотреть все результаты поиска похожих
Комментарии
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 базы?
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.