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 |  Дата:   Прочитано: 29796
 0 
Распечатать
Возможно, вас также заинтересует
10060 (0x0000274C): Попытка установить соединение была безуспешной 24
Установили новый терминальный сервер, на нем подняли 1С, терминальные пользователе неописуемо довольны, все просто летает :) И вот же надо было такому случиться, главному бухгалтеру не понравилось работать через терминал, а еще у нее свой ноутбук и
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 53
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ
COM-подключение к базе 7.7 из .NET, .NET Core 2
Инсталяция: 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 базы?
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.
Загрузка... Дождитесь завершения!