Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Вызовы 1CPP.DLL из PHP. Возможно ли это (число прочтений - 13861 )
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
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 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
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 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
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 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
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 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 записан
 
desty
Full Member
***
Отсутствует



Сообщений: 135
Зарегистрирован: 19. Апреля 2007
Пол: Мужской
Re: Вызовы 1CPP.DLL из PHP. Возможно ли это
Ответ #15 - 13. Июня 2007 :: 11:19
Печать  
Вот и именно делаю так как раз...

Смущённый

Да только... Что то потом EvalExpr никак не хочет отрабатывать

Пишет Цитата:
Call to undefined function EvalExpr()



Код
Выбрать все
<?php
  $v77 = new COM("V7Server.Connection") or die("Невозможно соединиться с сервером 1С");
  $Date = $v77.EvalExpr("РабочаяДата()");
  
  echo $Date;
  
  
  $v77 = "";
?> 



Значит где-то я в php не то делаю, будем искать Смущённый
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Вызовы 1CPP.DLL из PHP. Возможно ли это
Ответ #16 - 13. Июня 2007 :: 11:29
Печать  
Код
Выбрать все
$Date = $v77.AppDispatch.EvalExpr("РабочаяДата()"); 

  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
desty
Full Member
***
Отсутствует



Сообщений: 135
Зарегистрирован: 19. Апреля 2007
Пол: Мужской
Re: Вызовы 1CPP.DLL из PHP. Возможно ли это
Ответ #17 - 13. Июня 2007 :: 11:35
Печать  
Код
Выбрать все
<?php
  $v77 = new COM("V7Server.Connection") or die("Невозможно соединиться с сервером 1С");
  
  
  try {
  $Date = $v77->EvalExpr("РабочаяДата()");
  }
  catch (com_exception $e) {
        print $e . "\n";
  }

  print "Рабочая дата базы - " . $Date;
  
  
  $v77 = "";
?>
 



Вот так будет работать, Улыбка
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Вызовы 1CPP.DLL из PHP. Возможно ли это
Ответ #18 - 13. Июня 2007 :: 12:20
Печать  
точно Улыбка
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Вызовы 1CPP.DLL из PHP. Возможно ли это
Ответ #19 - 14. Июня 2007 :: 04:10
Печать  
Плюс к тому, что писал DmitrO. Недавно наконец-то сделал примочку для генерации view'шек (как советовал МуМу), оказывается очень удобная штука. Запросы можно прям в QA писать, не напрягаясь.  Выглядит примерно так
Код
Выбрать все
SELECT
   Склад, Товар, Количество
FROM
   регОстаткиТоваровИтоги
WHERE
   ПериодИтогов = @ДатаТА 


генерилка прилагается
  

CreateViews.rar ( 7 KB | Загрузки )
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Вызовы 1CPP.DLL из PHP. Возможно ли это
Ответ #20 - 14. Июня 2007 :: 04:19
Печать  
ADirks писал(а) 14. Июня 2007 :: 04:10:
сделал примочку для генерации view'ше

а толку от таких представлений? ониж не проиндексированы.
  
Наверх
ICQ  
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Вызовы 1CPP.DLL из PHP. Возможно ли это
Ответ #21 - 14. Июня 2007 :: 04:25
Печать  
View - это всего лишь эдакий алиас к таблице и её полям. Соответственно и индексы используются от таблиц, на которые накручена вьюшка.  А план запроса когда смотришь, там вообще показываются исходные таблицы и их поля.
  
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Вызовы 1CPP.DLL из PHP. Возможно ли это
Ответ #22 - 14. Июня 2007 :: 06:26
Печать  
ADirks писал(а) 14. Июня 2007 :: 04:25:
View - это всего лишь эдакий алиас к таблице и её полям.

В простом случае так.
  
Наверх
ICQ  
IP записан
 
yudin
Full Member
***
Отсутствует


Краткость - с.т.

Сообщений: 131
Местоположение: Ростов - на - Дону
Зарегистрирован: 25. Мая 2006
Пол: Мужской
Re: Вызовы 1CPP.DLL из PHP. Возможно ли это
Ответ #23 - 18. Июня 2007 :: 06:39
Печать  
ADirks писал(а) 14. Июня 2007 :: 04:10:
генерилка прилагается


А вот бы еще текст функции СписокВСтроку посмотреть..
  

С уваженьем, дата, подпись
Наверх
wwwICQ  
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Вызовы 1CPP.DLL из PHP. Возможно ли это
Ответ #24 - 18. Июня 2007 :: 06:50
Печать  
yudin писал(а) 18. Июня 2007 :: 06:39:
ADirks писал(а) 14. Июня 2007 :: 04:10:
генерилка прилагается


А вот бы еще текст функции СписокВСтроку посмотреть..

да тупо там всё  Улыбка
Код
Выбрать все
Функция СписокВСтроку(Сп, Разделитель = ",", ВключатьПустыеЗначения = 0) Экспорт
	Перем н, Стр, Значение, Зпт;

	Стр = ""; Зпт = "";
	Для н = 1 По Сп.РазмерСписка() Цикл
		Значение = Строка( Сп.ПолучитьЗначение(н) );
		Если (ПустаяСтрока(Значение) = 0) ИЛИ (ВключатьПустыеЗначения = 1) Тогда
			Стр = Стр + Зпт + Значение;
			Зпт = Разделитель;
		КонецЕсли;
	КонецЦикла;

	Возврат Стр;
КонецФункции
 

  
Наверх
 
IP записан
 
yudin
Full Member
***
Отсутствует


Краткость - с.т.

Сообщений: 131
Местоположение: Ростов - на - Дону
Зарегистрирован: 25. Мая 2006
Пол: Мужской
Re: Вызовы 1CPP.DLL из PHP. Возможно ли это
Ответ #25 - 18. Июня 2007 :: 06:58
Печать  
Тупо не тупо, но все равно полезно...

А что вот это такое?
МетаРекв = Метаданные.ОбщийРеквизитДокумента("идДок13");

Я так понимаю что в конфе должен быть реквизит идДок13? без него можно обойтись? может можно заменить на sunstring(date_time_iddoc,1,13)?
  

С уваженьем, дата, подпись
Наверх
wwwICQ  
IP записан
 
yudin
Full Member
***
Отсутствует


Краткость - с.т.

Сообщений: 131
Местоположение: Ростов - на - Дону
Зарегистрирован: 25. Мая 2006
Пол: Мужской
Re: Вызовы 1CPP.DLL из PHP. Возможно ли это
Ответ #26 - 18. Июня 2007 :: 07:05
Печать  
не на substring не заменить и с iddocdef тоже не сложить. обойдусь-ка я пока без полного представления документа в таблице журнала...
  

С уваженьем, дата, подпись
Наверх
wwwICQ  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Вызовы 1CPP.DLL из PHP. Возможно ли это
Ответ #27 - 19. Июня 2007 :: 03:19
Печать  
Видимо без твоей конфигурации это чудо не работает!

И хранимые функции как то "ПредставлениеДокумента" тоже не у всех есть Печаль
  
Наверх
ICQ  
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Вызовы 1CPP.DLL из PHP. Возможно ли это
Ответ #28 - 19. Июня 2007 :: 04:47
Печать  
Nick писал(а) 19. Июня 2007 :: 03:19:
Видимо без твоей конфигурации это чудо не работает!

И хранимые функции как то "ПредставлениеДокумента" тоже не у всех есть Печаль

Ну как обычно, выдрал из конфы не особо задумываясь...  Вот, выложу ещё раз, вроде всё почистил.
  

CreateViews_001.rar ( 7 KB | Загрузки )
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Вызовы 1CPP.DLL из PHP. Возможно ли это
Ответ #29 - 19. Июня 2007 :: 05:02
Печать  
Спасибо, тока ещё при каждом создании View ругается:

CREATE VIEW докФактЗаявкаНаПроизводство AS
SELECT
     IDDoc,
     IDDoc идДок9,
     SP660 Комментарий,
     SP28269 IDDoc,
     SP28271 Количество,
     SP28274 КолвоКг
FROM DH28276 (NoLock)

State 42S21, native 4506, message [Microsoft][ODBC SQL Server Driver][SQL Server]Column names in each view or function must be unique. Column name 'IDDoc' in view or function 'докФактЗаявкаНаПроизводство' is specified more than once.

Это нормально?
  
Наверх
ICQ  
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Вызовы 1CPP.DLL из PHP. Возможно ли это
Ответ #30 - 19. Июня 2007 :: 05:34
Печать  
SP28269 IDDoc Это ты поле в документе обозвал IDDoc?  На такие издевательства я не рассчитывал  Улыбка)
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Вызовы 1CPP.DLL из PHP. Возможно ли это
Ответ #31 - 19. Июня 2007 :: 05:43
Печать  
ADirks писал(а) 19. Июня 2007 :: 05:34:
SP28269 IDDoc Это ты поле в документе обозвал IDDoc?  На такие издевательства я не рассчитывал  Улыбка)


Слушай точно, я и забыл, только это был не я а лет этак пару назад Улыбка общий реквизит в конфу вставили Улыбка
извиняюсь
  
Наверх
ICQ  
IP записан
 
yudin
Full Member
***
Отсутствует


Краткость - с.т.

Сообщений: 131
Местоположение: Ростов - на - Дону
Зарегистрирован: 25. Мая 2006
Пол: Мужской
Re: Вызовы 1CPP.DLL из PHP. Возможно ли это
Ответ #32 - 19. Июня 2007 :: 06:14
Печать  
А что делает ХП Представление документа?
  

С уваженьем, дата, подпись
Наверх
wwwICQ  
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Вызовы 1CPP.DLL из PHP. Возможно ли это
Ответ #33 - 19. Июня 2007 :: 06:55
Печать  
yudin писал(а) 19. Июня 2007 :: 06:14:
А что делает ХП Представление документа?

Просто строковое представление документа.  В основном используется для дерева документов.  Во вьюшку я его включил исключительно для удобства писания запросов в QA
  
Наверх
 
IP записан
 
yudin
Full Member
***
Отсутствует


Краткость - с.т.

Сообщений: 131
Местоположение: Ростов - на - Дону
Зарегистрирован: 25. Мая 2006
Пол: Мужской
Re: Вызовы 1CPP.DLL из PHP. Возможно ли это
Ответ #34 - 19. Июня 2007 :: 11:06
Печать  
А откуда ты его берешь? Если я не ошибаюсь, строкове представление документа - это Док.ПредставлениеВида() + Док.НомерДок+Док.ДатаДок, при этом ПредставлениеВида()  лежит только в MD, а следовательно в sql базе его нет... Или ты ее (ХП) генеришь из 1С и обновляешь при изменении конфы? Или я думаю не в том направлении?
  

С уваженьем, дата, подпись
Наверх
wwwICQ  
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Вызовы 1CPP.DLL из PHP. Возможно ли это
Ответ #35 - 19. Июня 2007 :: 12:11
Печать  
yudin писал(а) 19. Июня 2007 :: 11:06:
А откуда ты его берешь? Если я не ошибаюсь, строкове представление документа - это Док.ПредставлениеВида() + Док.НомерДок+Док.ДатаДок, при этом ПредставлениеВида()  лежит только в MD, а следовательно в sql базе его нет... Или ты ее (ХП) генеришь из 1С и обновляешь при изменении конфы? Или я думаю не в том направлении?

Да, там просто тупая ХПшка с офигенным CASE'ом.
Код
Выбрать все
	| CREATE FUNCTION ПредставлениеДокумента(@ИдДок9 Char(9), @ПоказыватьДату Bit, @ПоказыватьНомер Bit)
	| RETURNS varChar(100)
	| AS
	| Begin
	| --версия функции: "+Константа.РелизКонфигурации+"
	| 	Declare @СтрокаРезультата varChar(100), @ВидДок Int, @идДокОсн char(9), @ВидДокОсн Int
	|
	//| 	Set @ВидДока = IsNull((Select Top 1 IDDOCDEF From _1SJOURN (NoLock) Where IDDOC = @ИдДок9),0)
	|	SELECT TOP 1 @ВидДок = IsNull(IDDOCDEF, 0), @идДокОсн = Right($ОбщийРеквизит.ДокументОснование, 9)
	|	FROM _1SJOURN (NoLock)
	|	WHERE IDDOC = @ИдДок9
	| 	Set @ВидДокОсн = IsNull((Select Top 1 IDDOCDEF From _1SJOURN (NoLock) Where IDDOC = @идДокОсн),0)
	|
	| 	If @ВидДок = 0 Begin
	| 		Set @СтрокаРезультата = ''
	| 	End Else Begin
	| 		Set @СтрокаРезультата = Case @ВидДок";

	Для Н = 1 По Метаданные.Документ() Цикл
		ВидДокумента = Метаданные.Документ(Н).Идентификатор;
		ИмяДокумента = Метаданные.Документ(Н).Представление();
		ИДДокумента  = РадугаМД.ИДДокумента(ВидДокумента);

		Если ВидДокумента = "ЗакрытиеОстатков" Тогда
			ТекстЗапроса = ТекстЗапроса + "
			|			When "+ИДДокумента+" Then Case IsNull((Select Top 1 IDDOCDEF From _1SJOURN (NoLock) Where IDDOC = @идДокОсн),0)
			|				When $ВидДокумента.ЗаказТовараУПоставщика Then 'Закрытие заказа поставщику'
			|				When $ВидДокумента.ТранзитТовараОтПоставщика Then 'Закрытие транзита'
			|				When $ВидДокумента.ЗаявкаНаКомплектацию Then 'Закрытие заявки на комплектацию'
			|				When $ВидДокумента.Счет Then 'Закрытие счёта'
			|				When $ВидДокумента.ЗаявкаНаСклад Then 'Закрытие заявки на склад'
			|				Else '"+ИмяДокумента+"'
			|				End";
		ИначеЕсли ВидДокумента = "ЗаявкаНаСклад" Тогда
			ТекстЗапроса = ТекстЗапроса + "
			|			When "+ИДДокумента+" Then Case IsNull((SELECT $Заявка.фДляФилиала FROM $Документ.ЗаявкаНаСклад Заявка (NoLock) WHERE Заявка.IDDoc = @ИдДок9), 0)
			|				When 1 Then 'Заявка на склад (ф)'
			|				Else 'Заявка на склад'
			|				End";
		ИначеЕсли ВидДокумента = "РасходнаяНакладная" Тогда
			ТекстЗапроса = ТекстЗапроса + "
			|			When "+ИДДокумента+" Then Case IsNull((SELECT $РасхНакл.фДоставка FROM $Документ.РасходнаяНакладная РасхНакл (NoLock) WHERE РасхНакл.IDDoc = @ИдДок9), 0)
			|				When 1 Then 'Доставка'
			|				Else 'Расходная накладная'
			|				End";
		ИначеЕсли ВидДокумента = "ПереоценкаТоваров" Тогда
			ТекстЗапроса = ТекстЗапроса + "
			|			When "+ИДДокумента+" Then Case IsNull((SELECT $ПереоценкаТоваров.фПоВременномуХранению FROM $Документ.ПереоценкаТоваров ПереоценкаТоваров (NoLock) WHERE ПереоценкаТоваров.IDDoc = @ИдДок9), 0)
			|				When 1 Then 'Переоценка товаров (вр.хр)'
			|				Else 'Переоценка товаров'
			|				End";
		Иначе
			ТекстЗапроса = ТекстЗапроса + "
			|			When "+ИДДокумента+" Then '"+ИмяДокумента+"'";
		КонецЕсли;
	КонецЦикла;

	ТекстЗапроса = ТекстЗапроса + "
	| 			Else ''
	| 			End
	|
	| 		If @СтрокаРезультата <> '' Begin
	| 			If @ПоказыватьНомер = 1
	| 				Set @СтрокаРезультата = @СтрокаРезультата + ' № ' + (Select Top 1 LTrim(RTrim(DocNo)) From _1SJOURN (NoLock) Where IDDOC = @ИдДок9)
	| 			If @ПоказыватьДату = 1
	| 				Set @СтрокаРезультата = @СтрокаРезультата + ' от ' + (Select Top 1 Convert(Char(10),Cast(LEFT(DATE_TIME_IDDOC,8) As DateTime),104) From _1SJOURN (NoLock) Where IDDOC = @ИдДок9)
	| 		End
	| 	End
	|
	| 	Return @СтрокаРезультата
	| End
	| ";
 



ни в каких местах, где скорость критична её конечно использовать нельзя
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать