for flooders
:: Главная :: Решения :: Статьи :: Сайт М. Дроздова :: Файловый архив :: Книга по VFP 9 :: Русский Help Online :: OFF-LINE Форум
   Лисоводы   всех   стран,  объединяйтесь !!!  

Список Форумов  :: Вопросы по 1С
  

Об использовании информации 1С (8.1) в фокс приложениях
Александр Жевелев

Сообщений: 2662
Откуда: Новосибирск
Дата: 19.08.08 11:02:24
PS.Вопросы предварительно были заданы В.Пирожкову, и на все вопросы были получены исчерпывающие ответы, за что ему отдельное спасибо! И по его рекомендации публикуются здесь, дабы последователи не наступали на теже грабли! Это был мой первый опыт контакта с 1С!

Исходная задача стояла таким образом:
Есть приложение, работающее с DBF таблицами в качестве исходной информацией для запроса
информация перенесена в 1С 8.1 , требуется с минимальными доработками приложения переключить на запрос информации из 1с

Исходный запрос:
SELECT UPPER(u_kart.in) as in,CHRTRAN(UPPER(u_kart.no),'H','Н') as no,CHRTRAN(UPPER(u_kml.fio),'H','Н') as fio,u_kart.st,u_kart.nap,u_kart.ost,u_kart.kn,SubsTR(u_kart.dw,1,2) as mv,SUBSTR(u_kart.dw,3,2) as gv ;  
  	from u_kart,u_kml;  
  	WHERE u_kart.kml=u_kml.kml;  
  	order BY 1 INTO TABLE c:\robor\b_obort

после доработки это стало выглядеть так:
  
  tekdt=DATE()  
  *cfirma='НПО "ЭЛСИБ" ОАО'	  
        
  obj = CreateObject("V81.Application")    
  obj.Connect([Srvr="ERP";Ref="Enterprise-02";Usr="ЖевелевАГ";pwd=""])     
      
  USE IN SELECT('b_obort')  
  	cfirma=obj.Справочники.Организации.НайтиПоКоду('000000001')  
  	Файл=obj.NewObject('XBase')    
    	Файл.Поля.Добавить("in","S",8,0)    
    	Файл.Поля.Добавить("no","S",70,0)    
    	Файл.Поля.Добавить("fio","S",31)    
    	Файл.Поля.Добавить("st","N",18,2)  
    	Файл.Поля.Добавить("nap","N",6,0)  
    	Файл.Поля.Добавить("ost","N",15,2)  
    	Файл.Поля.Добавить("kn","s",13,0)  
    	Файл.Поля.Добавить("mv","n",2,0)  
    	Файл.Поля.Добавить("gv","n",4,0)  
   	NameBase = "c:\robor\b_obort.dbf"    
    	Файл.СоздатьФайл(NameBase)    
        
  oQue=obj.NewObject('Запрос')   
  	TEXT TO текст46 NOSHOW   
  		ВЫБРАТЬ  
  			МестонахождениеОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство.НаименованиеПолное КАК Наименование,  
  			ВложенныйЗапрос.ИнвентарныйНомерРегл КАК ИнвентарныйНомер,  
  			МЕСЯЦ(ВложенныйЗапрос.ДатаВводаВЭксплуатациюРегл) КАК МесяцВводаВЭксплуатацию,  
  			ГОД(ВложенныйЗапрос.ДатаВводаВЭксплуатациюРегл) КАК ГодВводаВЭксплуатацию,  
  			ВложенныйЗапрос.ПервоначальнаяСтоимостьБУ КАК ПервоначальнаяСтоимость,  
  			ВложенныйЗапрос.ПервоначальнаяСтоимостьБУ - ВЫБОР  
  				КОГДА СтоимостьОСБухгалтерскийУчетОстатки.АмортизацияОстаток ЕСТЬ NULL   
  					ТОГДА 0  
  				ИНАЧЕ СтоимостьОСБухгалтерскийУчетОстатки.АмортизацияОстаток  
  			КОНЕЦ КАК ОстаточнаяСтоимость,  
  			ВложенныйЗапрос.СрокПолезногоИспользованияБУ КАК СрокПолезногоИспользования,  
  			МестонахождениеОСБухгалтерскийУчетСрезПоследних.МОЛ КАК МОЛ,  
  			МестонахождениеОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство.АмортизационнаяГруппа КАК АмортизационнаяГруппа  
  		ИЗ  
  			РегистрСведений.МестонахождениеОСБухгалтерскийУчет.СрезПоследних(&Период, ) КАК МестонахождениеОСБухгалтерскийУчетСрезПоследних  
  				ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ  
  					ВводНачальныхОстатковОСОС.ИнвентарныйНомерРегл КАК ИнвентарныйНомерРегл,  
  					ВводНачальныхОстатковОСОС.ДатаВводаВЭксплуатациюРегл КАК ДатаВводаВЭксплуатациюРегл,  
  					ВводНачальныхОстатковОСОС.СрокПолезногоИспользованияБУ КАК СрокПолезногоИспользованияБУ,  
  					ВводНачальныхОстатковОСОС.ПервоначальнаяСтоимостьБУ КАК ПервоначальнаяСтоимостьБУ,  
  					ВводНачальныхОстатковОСОС.ОсновноеСредство.Ссылка КАК ОсновноеСредствоСсылка  
  				ИЗ  
  					Документ.ВводНачальныхОстатковОС.ОС КАК ВводНачальныхОстатковОСОС  
  				  
  				ОБЪЕДИНИТЬ ВСЕ  
  				  
  				ВЫБРАТЬ  
  					ПринятиеКУчетуОСОсновныеСредства.ИнвентарныйНомер,  
  					ПринятиеКУчетуОСОсновныеСредства.Ссылка.Дата,  
  					ПринятиеКУчетуОСОсновныеСредства.Ссылка.СрокПолезногоИспользованияБУ,  
  					ПринятиеКУчетуОСОсновныеСредства.Ссылка.СтоимостьБУ,  
  					ПринятиеКУчетуОСОсновныеСредства.ОсновноеСредство  
  				ИЗ  
  					Документ.ПринятиеКУчетуОС.ОсновныеСредства КАК ПринятиеКУчетуОСОсновныеСредства) КАК ВложенныйЗапрос  
  				ПО МестонахождениеОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство.Ссылка = ВложенныйЗапрос.ОсновноеСредствоСсылка  
  				ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьОСБухгалтерскийУчет.Остатки(&Период, ) КАК СтоимостьОСБухгалтерскийУчетОстатки  
  				ПО МестонахождениеОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство = СтоимостьОСБухгалтерскийУчетОстатки.ОсновноеСредство  
  					И МестонахождениеОСБухгалтерскийУчетСрезПоследних.Организация = СтоимостьОСБухгалтерскийУчетОстатки.Организация  
  		ГДЕ  
  			МестонахождениеОСБухгалтерскийУчетСрезПоследних.Организация = &Организация  
  		  
  		УПОРЯДОЧИТЬ ПО  
  			ИнвентарныйНомер  
  	 ENDTEXT  
  	  
        
    oQue.Текст=Текст46  
    oQue.УстановитьПараметр("Организация", cfirma)    
    oQue.УстановитьПараметр("Период", tekdt)    
    oRes = oQue.Выполнить().Выгрузить()    
       FOR EACH oRow IN oRes     
      	Файл.Добавить()    
  	  	Файл.in=oRow.ИнвентарныйНомер    
  	  	Файл.no=oRow.Наименование    
  	  	Файл.fio=oRow.МОЛ    
  	  	Файл.st=oRow.ПервоначальнаяСтоимость  
  	  	Файл.nap=oRow.СрокПолезногоИспользования  
  	  	Файл.ost=oRow.ОстаточнаяСтоимость   
  	  	Файл.kn=oRow.АмортизационнаяГруппа  
  	  	Файл.mv=oRow.МесяцВводаВЭксплуатацию  
  	  	Файл.gv=oRow.ГодВводаВЭксплуатацию   
  	    Файл.Записать()    
       ENDFOR       
    Файл.ЗакрытьФайл()   
  * release obj  
    obj.ЗавершитьРаботуСистемы(.F.)      
    obj=.null.  
  
при этом на момент вопросов вместо кода выделенного жирным, стояли позиции, отмеченные курсивом
при этом получался пустой запрос
и выводилось вопрос о подтверждении закрытия 1с
разрешение этих вопросов - см. жирные строки.суть которых в следующем
в качестве значения параметра нужно передавать ссылку на найденный в базе объект (1)
а второе снимает дополнительный вопрос о закрытии 1с
по пути я сделал замеры времени до и после
было 0,56сек табла на файл-сервере
стало - коннект=8с+20с запрос=28сек сервера приложений и данных разнесены
Ratings: 0 negative/0 positive

Re: Об использовании информации 1С (8.1) в фокс приложениях
piva

Сообщений: 18541
Откуда: Курган
Дата: 19.08.08 15:25:29
Саня в принципе можно было и не перегонять фирму в ссылку, хотя в ссылку будет правильнее
Можно было и так
  
  МестонахождениеОСБухгалтерскийУчетСрезПоследних.Организация.Наименование = &Организация    
  ...  
  oQue.УстановитьПараметр("Организация", cfirma)


------------------
Часто бывает так, что есть над чем задуматься, а нечем.
Ratings: 0 negative/0 positive

Re: Об использовании информации 1С (8.1) в фокс приложениях
Дмитрий Петров

Сообщений: 2508
Откуда: Пермь
Дата: 20.08.08 05:53:06
Александр, немного не по теме, но мне показалось, что
быстрей проходит инициализация у комконнектора.. попробуй то же самое

obj1 = Createobject("V8.COMConnector")  
  obj =  obj1.Connect([Srvr="ERP";Ref="Enterprise-02";Usr="ЖевелевАГ";pwd=""])  
  oQue =obj.Newobject("Запрос")

мне кажется быстрей так отрабатывает
Ratings: 0 negative/0 positive

Re: Об использовании информации 1С (8.1) в фокс приложениях
Александр Жевелев

Сообщений: 2662
Откуда: Новосибирск
Дата: 20.08.08 06:49:11
1)Петрову!
Цитата:
мне кажется быстрей так отрабатывает
да! спасибо!
2) то Piva
не понял, это место поподробнее пожалста, ведь написано же:
oQue.Текст=Текст46    
      oQue.УстановитьПараметр("Организация", cfirma)      
      oQue.УстановитьПараметр("Период", tekdt)      
      oRes = oQue.Выполнить().Выгрузить()      
         FOR EACH oRow IN oRes       
        	Файл.Добавить()      
    	  	Файл.in=oRow.ИнвентарныйНомер      
    	  	Файл.no=oRow.Наименование      
    	  	Файл.fio=oRow.МОЛ      
    	  	Файл.st=oRow.ПервоначальнаяСтоимость    
    	  	Файл.nap=oRow.СрокПолезногоИспользования    
    	  	Файл.ost=oRow.ОстаточнаяСтоимость     
    	  	Файл.kn=oRow.АмортизационнаяГруппа    
    	  	Файл.mv=oRow.МесяцВводаВЭксплуатацию    
    	  	Файл.gv=oRow.ГодВводаВЭксплуатацию     
    	    Файл.Записать()      
         ENDFOR         
      Файл.ЗакрытьФайл()     
  
Ratings: 0 negative/0 positive

Re: Об использовании информации 1С (8.1) в фокс приложениях
piva

Сообщений: 18541
Откуда: Курган
Дата: 20.08.08 06:54:06
Дык я к тому что можно передавать не ссылку на фирму а передавать ее название


------------------
Часто бывает так, что есть над чем задуматься, а нечем.
Ratings: 0 negative/0 positive

Re: Об использовании информации 1С (8.1) в фокс приложениях
piva

Сообщений: 18541
Откуда: Курган
Дата: 20.08.08 06:59:46
Некоторые вещи ограничены в использовании COMConnector поэтому приходится использовать именно Appication. Тут была задачка синхронизации двух баз (штатная синхронизаяция эээ мммм ну вобщем сломалась ) так вот получение GUID документов и справочников невозможно ни под ComConnector ни напрямую через Applicaton, пришлось использовать старые дедовские методы с переадресацией вызовов пришлось написать внешнюю обработку которая, работая в контексте COM объекта, все нормально возвращала в виде строк, из которых потом объект GUID получить запросто, но внешние доступны только в Application


------------------
Часто бывает так, что есть над чем задуматься, а нечем.
Ratings: 0 negative/0 positive

Re: Об использовании информации 1С (8.1) в фокс приложениях
Александр Жевелев

Сообщений: 2662
Откуда: Новосибирск
Дата: 20.08.08 07:04:48
что-то с названием у меня не срубило, и ты мне сам указал на то что символьную строку - это не правильно


Цитата:
надо сначала найти его как объект типа
Документы.чччч.НайтиПоКоду(или по наименованию)
полученный результат запихивать в запрос
ладно, проехали!
Попробовал по совету Д.Петрова

Цитата:
obj1 = Createobject("V8.COMConnector")
obj = obj1.Connect([Srvr="ERP";Ref="Enterprise-02";Usr="ЖевелевАГ";pwd=""])

но ругается на
Цитата:
obj.ЗавершитьРаботуСистемы(.F.)
что-то еще надо подкрутить?
Ratings: 0 negative/0 positive

Re: Об использовании информации 1С (8.1) в фокс приложениях
Дмитрий Петров

Сообщений: 2508
Откуда: Пермь
Дата: 20.08.08 07:16:49
Цитата:
obj.ЗавершитьРаботуСистемы(.F.)
что-то еще надо подкрутить?
АЛександр, может просто прибить объекты Rele...


Вадим, я возможно не совсем понял, но через комконнектор до символьного представления
GUID-дов я добирался как то так:

  
  oRes = oQue.Выполнить().Выгрузить()  
    
  		For Each oRow In oRes  
  			uid= This.obj.String(oRow.Ссылка.УникальныйИдентификатор())  
    
  		endfor
Ratings: 0 negative/0 positive

Re: Об использовании информации 1С (8.1) в фокс приложениях
piva

Сообщений: 18541
Откуда: Курган
Дата: 20.08.08 07:36:03
Это на фоксе - да А 1C-ка при обработка из ComConnectоr
GUID=Строка(Объект.УникальныйИденификатор());

Возвращает строку "COMОбъект"
Может в 8.1 чета поменялось - не пробовал пока, Пока фигачим на 8.0


------------------
Часто бывает так, что есть над чем задуматься, а нечем.
Ratings: 0 negative/0 positive

Re: Об использовании информации 1С (8.1) в фокс приложениях
piva

Сообщений: 18541
Откуда: Курган
Дата: 20.08.08 07:38:15
Мануал
Цитата:
Синтаксис:
ЗавершитьРаботуСистемы(<Запрашивать возможность>

Недоступен на сервере 1С:Предприятие. Не используется в модуле внешнего соединения.
Вроде нормально должен закрываться


------------------
Часто бывает так, что есть над чем задуматься, а нечем.
Ratings: 0 negative/0 positive

Re: Об использовании информации 1С (8.1) в фокс приложениях
Александр Жевелев

Сообщений: 2662
Откуда: Новосибирск
Дата: 20.08.08 07:44:47
Цитата:
может просто прибить объекты
действительно!
Ratings: 0 negative/0 positive

Re: Об использовании информации 1С (8.1) в фокс приложениях
Александр Жевелев

Сообщений: 2662
Откуда: Новосибирск
Дата: 20.08.08 07:50:51
Цитата:
Вроде нормально должен закрываться
через V81.application -закрывается, а через connect ругается OLE.... ну вобщем как обычно,
а release obj решает все!
Ratings: 0 negative/0 positive

Re: Об использовании информации 1С (8.1) в фокс приложениях
AleksM

Сообщений: 17704
Дата: 20.08.08 09:07:15
С точки зрения банальной эрудиции, приложение должно иметь метод типа "ВыходИзПриложения", ну а коннектор что то типа "ЗакрытСоединение". Я так думаю


------------------
Лучше переесть, чем недоспать.
Не спеши, а то успеешь.
Ratings: 0 negative/0 positive

Re: Об использовании информации 1С (8.1) в фокс приложениях
AlexK

Сообщений: 2114
Откуда: Королев,Москва
Дата: 10.09.08 10:05:49
Мое мнение - не туда идете, хотя конечно если в дальнейшем перейти в 1С
V81.application - тяжелейший объект

смотрите в сторону SQL, размещайте базу на SQL и
1. или на прямую обращайтесь к таблицам (в 8-ке есть функции возвращающие названия полей и таблиц)
2. или через Web-расширение


------------------
Береги природу, мать Вашу. Моя страничка www.genrep.net




Исправлено: AlexK, 10.09.08 10:07
Ratings: 0 negative/0 positive

Re: Об использовании информации 1С (8.1) в фокс приложениях
oleg_km
Автор

Сообщений: 487
Откуда: СПб
Дата: 11.09.08 22:55:13
Александр Жевелев
Цитата:
Вроде нормально должен закрываться
через V81.application -закрывается, а через connect ругается OLE.... ну вобщем как обычно,
а release obj решает все!

Метод ЗавершитьРаботуСистемы(<Запрашивать возможность> работает в V81.Application, т.к. в данном случае 1С запускается в виде отдельного exe, а при использовании V81.Connector в ваше приложение загружается просто dll поэтому действительно нужно просто прибить объект, хотя как я смотрел dll все равно из адресного пространства приложения все равно не выгружается
Ratings: 0 negative/0 positive



Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 6 Taran Тьма  (Гостей: 4)

16.09.2019 17:05:08 exec: 0.43
Mem: 1.376 Mb

© 2000-2019 Fox Club 
Яндекс.Метрика