Переключение на Главную Страницу Страницы: [1] 2 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) Вызовы 1CPP.DLL из PHP. Возможно ли это (число прочтений - 12931 )
EGO
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 4
Зарегистрирован: 14. Февраля 2007
Вызовы 1CPP.DLL из PHP. Возможно ли это
14. Февраля 2007 :: 06:02
Печать  
Стоит задача выполнять вызовы функций 1CPP.DLL (PHP5).
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Вызовы 1CPP.DLL из PHP. Возможно ли это
Ответ #1 - 14. Февраля 2007 :: 06:04
Печать  
например каких  Озадачен
  

1&&2&&3
Наверх
 
IP записан
 
EGO
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 4
Зарегистрирован: 14. Февраля 2007
Re: Вызовы 1CPP.DLL из PHP. Возможно ли это
Ответ #2 - 14. Февраля 2007 :: 06:06
Печать  
Объект ODBCRecordset. И работа через него.
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Вызовы 1CPP.DLL из PHP. Возможно ли это
Ответ #3 - 14. Февраля 2007 :: 06:20
Печать  
а если использовать штатные для php средства доступа к БД?
  

1&&2&&3
Наверх
 
IP записан
 
EGO
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 4
Зарегистрирован: 14. Февраля 2007
Re: Вызовы 1CPP.DLL из PHP. Возможно ли это
Ответ #4 - 14. Февраля 2007 :: 06:23
Печать  
В 1сpp удобный транслятор запроса в "чистый" sql.
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Вызовы 1CPP.DLL из PHP. Возможно ли это
Ответ #5 - 14. Февраля 2007 :: 06:35
Печать  
да, удобный.
Но, для работы метапарсера необходимы метаданные.
Если говорить по-простому, то сама-по-себе 1с++ не может работать с метаданными. Она это делает используя "среду" в которой работает - 1с:предприятие
  

1&&2&&3
Наверх
 
IP записан
 
EGO
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 4
Зарегистрирован: 14. Февраля 2007
Re: Вызовы 1CPP.DLL из PHP. Возможно ли это
Ответ #6 - 14. Февраля 2007 :: 07:29
Печать  
видимо придется свое писать. спасибо!
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Вызовы 1CPP.DLL из PHP. Возможно ли это
Ответ #7 - 14. Февраля 2007 :: 07:49
Печать  
Да, я тоже так думаю.
Нужно сделать некоторый словарь (метаимена - объекты БД), который бы генерился единовременно в среде 1с:предприятие, ну и после каждой реструктуризации тоже.
И используя этот словарь написать транслятор на пхп
  

1&&2&&3
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Вызовы 1CPP.DLL из PHP. Возможно ли это
Ответ #8 - 14. Февраля 2007 :: 18:54
Печать  
А нельзя ли в 1CPP сделать функцию формирующую такой словарь?
Или 1CPP не анализирует 1Cv7.DDS?

У меня таже проблема.
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Вызовы 1CPP.DLL из PHP. Возможно ли это
Ответ #9 - 15. Февраля 2007 :: 05:55
Печать  
Цитата:
Или 1CPP не анализирует 1Cv7.DDS?

1c++ не анализирует ни 1cv7.md, ни 1cv7.dds, ни какой-либо другой словарь. Для получения информации о метаданных на использует внутренние данные самой 1С, точно те же что и использует сама 1С, которые сама 1с и строит при запуске.
Цитата:
А нельзя ли в 1CPP сделать функцию формирующую такой словарь?

А зачем? Есть объект Метаданные, есть MetaDataWork, каждый может себе построить метаданные семерочной базы в том виде и формате в котором ему удобно.

Например для доступа из 8-ки я использую метаданные 7.7 в виде вложеных структур:

Код
Выбрать все
Функция ЗагрузитьМетаданные(КаталогИБ, ИмяПользователяV7, ПарольПользователяV7) Экспорт
	МД = Новый Структура;

	Состояние("Подключение к " + КаталогИБ);

	V7 = Новый COMОбъект("V77.Application");
	Если V7.Initialize(V7.RMTrade, "/d"""+КаталогИБ+""" /n"+ИмяПользователяV7+" /p"+ПарольПользователяV7, "NO_SPASH_SHOW") = 0 Тогда
		Сообщить("Нет доступа к информационной базе.");
		Возврат Ложь;
	КонецЕсли;

	MDW = V7.CreateObject("MetaDataWork");

	MD = V7.Метаданные;

	Состояние("Загрузка справочников..");
	Ст1 = Новый Структура;
	МД.Вставить("Справочник", Ст1);
	Для Номер1 = 1 По MD.Справочник() Цикл
		МДСправочник = MD.Справочник(Номер1);
		Ст2 = Новый Структура;
		Ст1.Вставить(МДСправочник.Идентификатор, Ст2);
		Ст2.Вставить("ИД", MDW.ИДОбъекта(МДСправочник));
		Для Номер2 = 1 По МДСправочник.Реквизит() Цикл
			МДРеквизит = МДСправочник.Реквизит(Номер2);
			Ст2.Вставить(МДРеквизит.Идентификатор, MDW.ИДОбъекта(МДРеквизит));
		КонецЦикла;
	КонецЦикла;

	Состояние("Загрузка перечислений..");
	Ст1 = Новый Структура;
	МД.Вставить("Перечисление", Ст1);
	Для Номер1 = 1 По MD.Перечисление() Цикл
		МДПеречисление = MD.Перечисление(Номер1);
		Ст2 = Новый Структура;
		Ст1.Вставить(МДПеречисление.Идентификатор, Ст2);
		Ст2.Вставить("ИД", MDW.ИДОбъекта(МДПеречисление));
		Для Номер2 = 1 По МДПеречисление.Значение() Цикл
			МДЗначение = МДПеречисление.Значение(Номер2);
			Ст2.Вставить(МДЗначение.Идентификатор, V7.EvalExpr("_idtostr("+MDW.ИДОбъекта(МДЗначение)+")")+"   ");
		КонецЦикла;
	КонецЦикла;

	Состояние("Загрузка документов..");
	Ст1 = Новый Структура;
	МД.Вставить("Документ", Ст1);
	Для Номер1 = 1 По MD.Документ() Цикл
		МДДокумент = MD.Документ(Номер1);
		Ст2 = Новый Структура;
		Ст1.Вставить(МДДокумент.Идентификатор, Ст2);
		Ст2.Вставить("ИД", MDW.ИДОбъекта(МДДокумент));
		Для Номер2 = 1 По МДДокумент.РеквизитШапки() Цикл
			МДРеквизит = МДДокумент.РеквизитШапки(Номер2);
			Ст2.Вставить(МДРеквизит.Идентификатор, MDW.ИДОбъекта(МДРеквизит));
		КонецЦикла;
		Для Номер2 = 1 По МДДокумент.РеквизитТабличнойЧасти() Цикл
			МДРеквизит = МДДокумент.РеквизитТабличнойЧасти(Номер2);
			Ст2.Вставить(МДРеквизит.Идентификатор, MDW.ИДОбъекта(МДРеквизит));
		КонецЦикла;
	КонецЦикла;

	Состояние("Загрузка регистров..");
	Ст1 = Новый Структура;
	МД.Вставить("Регистр", Ст1);
	Для Номер1 = 1 По MD.Регистр() Цикл
		МДРегистр = MD.Регистр(Номер1);
		Ст2 = Новый Структура;
		Ст1.Вставить(МДРегистр.Идентификатор, Ст2);
		Ст2.Вставить("ИД", MDW.ИДОбъекта(МДРегистр));
		Для Номер2 = 1 По МДРегистр.Измерение() Цикл
			МДИзмерение = МДРегистр.Измерение(Номер2);
			Ст2.Вставить(МДИзмерение.Идентификатор, MDW.ИДОбъекта(МДИзмерение));
		КонецЦикла;
		Для Номер2 = 1 По МДРегистр.Ресурс() Цикл
			МДРесурс = МДРегистр.Ресурс(Номер2);
			Ст2.Вставить(МДРесурс.Идентификатор, MDW.ИДОбъекта(МДРесурс));
		КонецЦикла;
		Для Номер2 = 1 По МДРегистр.Реквизит() Цикл
			МДРеквизит = МДРегистр.Реквизит(Номер2);
			Ст2.Вставить(МДРеквизит.Идентификатор, MDW.ИДОбъекта(МДРеквизит));
		КонецЦикла;
	КонецЦикла;

	Константы.МетаданныеУдаленнойИБ.Установить(Новый ХранилищеЗначения(МД));
	Возврат Истина;
КонецФункции
 



При этом для построения запросов метаданные используются примерно так:
Код
Выбрать все
Процедура ЗагрузитьПродажи(Connection, Отказ)

	КомментироватьПроцесс("Загружаются продажи..");

	МДПродажи = МД.Регистр.Продажи;

	ТекстЗапроса = "
	|select
	|	Данные.Период,
	|	Данные.СтавкаНДС,
	|	Данные.КассовыйТерминал,
	|	Кассы.code as КассовыйТерминалКод,
	|	Кассы.descr as КассовыйТерминалНаименование,
	|	Данные.Выручка
	|from (
	|	select
	|		rg.period as Период,
	|		rg.sp"+МДПродажи.СтавкаНДС+" as СтавкаНДС,
	|		rg.sp"+МДПродажи.КассовыйТерминал+" as КассовыйТерминал,
	|		sum(rg.sp"+МДПродажи.Выручка+") as Выручка
	|	from rg"+МДПродажи.ИД+" rg (nolock)
	|	where period between '"+мДатаНач+"' and '"+мДатаКон+"'
	|	group by rg.period, rg.sp"+МДПродажи.СтавкаНДС+", rg.sp"+МДПродажи.КассовыйТерминал+"
	|	having sum(rg.sp"+МДПродажи.Выручка+") != 0
	|) as Данные
	|left join sc"+МД.Справочник.Кассы.ИД+" Кассы (nolock) on Кассы.id = Данные.КассовыйТерминал
	|order by Данные.Период, Кассы.descr
	|
	|";

	РезультатЗапроса = мУтилиты.ADORecordsetВРезультатЗапроса(Connection.Execute(ТекстЗапроса), "Максимум(КассовыйТерминалКод), Максимум(КассовыйТерминалНаименование), Сумма(Выручка) по Период, СтавкаНДС");
....
 



Думаю что такой принцип применим в любой среде разработки.
  
Наверх
ICQ  
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Вызовы 1CPP.DLL из PHP. Возможно ли это
Ответ #10 - 15. Февраля 2007 :: 07:39
Печать  
Хмм... когда разжуют - все легко и просто кажется Улыбка

Спасибо, ДмитрО!
  
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Вызовы 1CPP.DLL из PHP. Возможно ли это
Ответ #11 - 15. Февраля 2007 :: 16:21
Печать  
EGO писал(а) 14. Февраля 2007 :: 06:02:
Стоит задача выполнять вызовы функций 1CPP.DLL (PHP5).

1С++ не будет работать без 1С. Поэтому оттолкнемся от этого. Т.е. чтобы использовать 1С++, мы должны запустить 1С. Запустить 1С из PHP можно легко через COM (OLE Automation). Из с 1С++ уже можно будет взаимодействовать через OLE. Проблема только в том, что веб-страницы, как правило, должны очень быстро выводиться, а тут добавляется время на запуск 1С...
  
Наверх
 
IP записан
 
nikolka
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 83
Зарегистрирован: 15. Января 2007
Re: Вызовы 1CPP.DLL из PHP. Возможно ли это
Ответ #12 - 15. Февраля 2007 :: 16:52
Печать  
Вобще то 1С Можно использовать как конструктор SQL скриптов для PHP.
Таким образом стоит задача перевести 1С в SQL...
с помошью 1С++ и своих наработок.
Если объем и специфика не большие то  задача мне кажеться
вполне разрешимой.
  
Наверх
 
IP записан
 
desty
Full Member
***
Отсутствует



Сообщений: 135
Зарегистрирован: 19. Апреля 2007
Пол: Мужской
Re: Вызовы 1CPP.DLL из PHP. Возможно ли это
Ответ #13 - 13. Июня 2007 :: 10:34
Печать  
Uzhast писал(а) 15. Февраля 2007 :: 16:21:
Запустить 1С из PHP можно легко через COM (OLE Automation).


Можно уточнить легко это каким кодом?

Код
Выбрать все
<?php
$v77 = new COM("V77.Application");
?> 



Вот таким?
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Вызовы 1CPP.DLL из PHP. Возможно ли это
Ответ #14 - 13. Июня 2007 :: 10:54
Печать  
desty писал(а) 13. Июня 2007 :: 10:34:
Код
Выбрать все
<?php
$v77 = new COM("V77.Application");
?> 


Вот таким?

В свете вновь открывшихся обстоятельств можно и таким:
Код
Выбрать все
<?php
$v77 = new COM("v7AppServer.Connection");
?> 

  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 
ОтправитьПечать