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

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

ОСНОВНЫЕ СРЕДСТВА ИЗ 1С 8.1 в VFP9
LUCIAN
Автор

Сообщений: 327
Откуда: Лида Беларусь
Дата: 18.11.11 11:04:54
На основании модулей из 1С 8.1 для достижения указанной цели создал такой код:
* СОЗДАДИМ КУРСОР В КОТОРЫЙ БУДЕМ ЗАГОНЯТЬ ДАННЫЕ ИЗ 1С  
  SELECT 0  
  CREATE CURSOR CINV (GRUPPA C(70),KOD C(9),NAM C(70),TIP_DOK C(70),D_DOK D(8),TIP_SPIS C(70),SROK_PI N(6,2),INV_N C(9),P_STOIM N(15,2),TIP_POG C(70),KOD_MOL C(10),MOL C(70),KOD_POD C(10),PODR C(70),D_WWODA D(8),WOST_STOM N(15,2),NAC_AMORT N(15,2),IZNOS N(15,2))  
    
  obj = CreateObject("V81.Application")      
  obj.Connect("File='D:\1c1\Data\База ОС 2009';Usr='';")   
    
 * ВЫБОРКА ВСЕХ ОБЪЕКТОВ ОСНОВНЫХ СРЕДСТВ  
  TEXT TO текст NOSHOW     
  	ВЫБРАТЬ РАЗРЕШЕННЫЕ  
  		ПервоначальныеСведенияОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство КАК ОсновноеСредство  
  	ИЗ  
  		РегистрСведений.ПервоначальныеСведенияОСБухгалтерскийУчет.СрезПоследних(&ДатаСведений) КАК ПервоначальныеСведенияОСБухгалтерскийУчетСрезПоследних  
  ENDTEXT  
  oQue=obj.NewObject('Запрос')     
  oQue.Текст=текст    
  oQue.УстановитьПараметр("ДатаСведений", DATE())   
  oResULT = oQue.Выполнить()  
  oRes = oResULT.Выгрузить()   
    
 *ВЫБРАННЫЕ  ОБЬЕКТЫ ОСНОВНЫХ СРЕДСТВ ПОМЕЩАЕМ В МАССИВ   
  kstr=0     
  FOR EACH oRow IN oRes   
  	kstr=kstr+1  
  	DIMENSION OSNSR(KSTR)  
  	OSNSR(KSTR)= oRow.ОсновноеСредство  
  ENDFOR	  
    
 * ТЕКСТ ЗАПРОСА ДЛЯ ВЫБОРКИ  ОСНОВНЫХ РЕКВИЗИТОВ ОС  
  TEXT TO текст NOSHOW     
  	ВЫБРАТЬ РАЗРЕШЕННЫЕ  
  		ПРЕДСТАВЛЕНИЕ(ПервоначальныеСведенияОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство.ГруппаОС) КАК ГруппаОС,  
  		ПервоначальныеСведенияОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство КАК ОсновноеСредство,  
  		ПервоначальныеСведенияОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство.КОД КАК КОД,  
  		ПервоначальныеСведенияОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство.НАИМЕНОВАНИЕ КАК НАИМЕНОВАНИЕ,  
  		ПервоначальныеСведенияОСБухгалтерскийУчетСрезПоследних.ИнвентарныйНомер КАК ИнвентарныйНомер,  
  		ПервоначальныеСведенияОСБухгалтерскийУчетСрезПоследних.СпособПоступления КАК СпособПоступленияБУ,  
  		ПервоначальныеСведенияОСБухгалтерскийУчетСрезПоследних.ПорядокПогашенияСтоимости КАК ПорядокПогашенияСтоимостиБУ,  
  		ПервоначальныеСведенияОСБухгалтерскийУчетСрезПоследних.СпособНачисленияАмортизации КАК СпособНачисленияАмортизацииБУ,  
  		ЕСТЬNULL(ПервоначальныеСведенияОСБухгалтерскийУчетСрезПоследних.ПервоначальнаяСтоимость, 0) КАК ПервоначальнаяСтоимостьБУ,  
  		ПервоначальныеСведенияОСБухгалтерскийУчетСрезПоследних.ПараметрВыработки КАК ПараметрВыработкиБУ,  
  		ПРЕДСТАВЛЕНИЕ(ПервоначальныеСведенияОСБухгалтерскийУчетСрезПоследних.ПараметрВыработки.ЕдиницаИзмерения) КАК ЕдиницаПараметраВыработкиБУ,  
  		МестонахождениеОСБухгалтерскийУчетСрезПоследних.МОЛ КАК МОЛБУ,  
  		МестонахождениеОСБухгалтерскийУчетСрезПоследних.Местонахождение КАК ПодразделениеБУ,  
  		ЕСТЬNULL(ПараметрыАмортизацииОСБухгалтерскийУчетСрезПоследних.СрокПолезногоИспользования, 0) КАК СрокИспользованияБУ,  
  		ДобавитьКДате(ПервоначальныеСведенияОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство.фДатаВвода,Месяц,ЕСТЬNULL(ПараметрыАмортизацииОСБухгалтерскийУчетСрезПоследних.СрокПолезногоИспользования, 0)) КАК ДатаИзноса,  
  		ЕСТЬNULL(ПараметрыАмортизацииОСБухгалтерскийУчетСрезПоследних.ОбъемПродукцииРабот, 0) КАК ОбъемРаботБУ,  
  		ЕСТЬNULL(ПараметрыАмортизацииОСБухгалтерскийУчетСрезПоследних.КоэффициентАмортизации, 0) КАК ПроцентГодовойАмортизацииБУ,  
  		ЕСТЬNULL(ПараметрыАмортизацииОСБухгалтерскийУчетСрезПоследних.КоэффициентУскорения, 0) КАК КоэффициентУскоренияБУ,  
  		ГрафикиАмортизацииОСБухгалтерскийУчетСрезПоследних.ГрафикАмортизации КАК ГодовойГрафикБУ,  
  		СпособыОтраженияРасходовПоАмортизацииОСБухгалтерскийУчетСрезПоследних.СпособыОтраженияРасходовПоАмортизации КАК СпособОтраженияРасходовПоАмортизацииБУ,  
  		СчетаБухгалтерскогоУчетаОССрезПоследних.СчетУчета КАК СчетУчетаБУ,  
  		СчетаБухгалтерскогоУчетаОССрезПоследних.СчетНачисленияАмортизации КАК СчетНачисленияАмортизацииБУ,  
  		ХозрасчетныйОстаткиСтоимость.СуммаОстатокДт КАК ТекущаяСтоимостьБУ,  
  		ХозрасчетныйОстаткиАмортизация.СуммаОстатокКт КАК ТекАмортизацияБУ,  
  		ХозрасчетныйОстаткиАмортизация.СуммаОстатокДт КАК ТекИзносБУ  
  	ИЗ  
  		РегистрСведений.ПервоначальныеСведенияОСБухгалтерскийУчет.СрезПоследних(&ДатаСведений, ОсновноеСредство = &ОсновноеСредство) КАК ПервоначальныеСведенияОСБухгалтерскийУчетСрезПоследних  
  			ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.МестонахождениеОСБухгалтерскийУчет.СрезПоследних(  
  			&ДатаСведений,  
  			Организация = &Организация  
  			    И ОсновноеСредство = &ОсновноеСредство) КАК МестонахождениеОСБухгалтерскийУчетСрезПоследних  
  			ПО ПервоначальныеСведенияОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство = МестонахождениеОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство  
  			ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПараметрыАмортизацииОСБухгалтерскийУчет.СрезПоследних(  
  			&ДатаСведений,  
  			Организация = &Организация  
  			    И ОсновноеСредство = &ОсновноеСредство) КАК ПараметрыАмортизацииОСБухгалтерскийУчетСрезПоследних  
  			ПО ПервоначальныеСведенияОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство = ПараметрыАмортизацииОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство  
  			ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГрафикиАмортизацииОСБухгалтерскийУчет.СрезПоследних(  
  			&ДатаСведений,  
  			Организация = &Организация  
  			    И ОсновноеСредство = &ОсновноеСредство) КАК ГрафикиАмортизацииОСБухгалтерскийУчетСрезПоследних  
  			ПО ПервоначальныеСведенияОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство = ГрафикиАмортизацииОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство  
  			ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СпособыОтраженияРасходовПоАмортизацииОСБухгалтерскийУчет.СрезПоследних(  
  			&ДатаСведений,  
  			Организация = &Организация  
  			    И ОсновноеСредство = &ОсновноеСредство) КАК СпособыОтраженияРасходовПоАмортизацииОСБухгалтерскийУчетСрезПоследних  
  			ПО ПервоначальныеСведенияОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство = СпособыОтраженияРасходовПоАмортизацииОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство  
  			ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СчетаБухгалтерскогоУчетаОС.СрезПоследних(  
  			&ДатаСведений,  
  			Организация = &Организация  
  			    И ОсновноеСредство = &ОсновноеСредство) КАК СчетаБухгалтерскогоУчетаОССрезПоследних  
  				ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки(  
  			&ДатаСведений,  
  			,  
  			&ВидСубконтоОС,  
  			Организация = &Организация  
  			    И Субконто1 = &ОсновноеСредство) КАК ХозрасчетныйОстаткиСтоимость  
  				ПО СчетаБухгалтерскогоУчетаОССрезПоследних.СчетУчета = ХозрасчетныйОстаткиСтоимость.Счет  
  				ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки(  
  			&ДатаСведений,  
  			,  
  			&ВидСубконтоОС,  
  			Организация = &Организация  
  			    И Субконто1 = &ОсновноеСредство) КАК ХозрасчетныйОстаткиАмортизация  
  				ПО СчетаБухгалтерскогоУчетаОССрезПоследних.СчетНачисленияАмортизации = ХозрасчетныйОстаткиАмортизация.Счет  
  			ПО ПервоначальныеСведенияОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство = СчетаБухгалтерскогоУчетаОССрезПоследних.ОсновноеСредство  
  ENDTEXT  
    
  СубконтоОС = obj.NewObject('Массив')     
  СубконтоОС.Добавить(obj.ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ОсновныеСредства)  
  cfirma=obj.Справочники.Организации.НайтиПоКоду('000000001')    
    
 * ПО КАЖДОМУ ОБЬЕКТУ ОС ИЗ МАССИВА OSNSR С ПОМОЩЬЮ ЗАПРОСА ВЫБИРАЕМ ОСНОВНЫХ РЕКВИЗИТЫ  
  FOR I=1 TO KSTR  
  	oQue=obj.NewObject('Запрос')     
  	oQue.Текст=текст    
  	oQue.УстановитьПараметр("Организация", cfirma)      
  	oQue.УстановитьПараметр("ДатаСведений", DATE())   
  	oQue.УстановитьПараметр("ВидСубконтоОС", СубконтоОС)  
  	oQue.УстановитьПараметр("ОсновноеСредство",OSNSR(I))  
  	oResULT = oQue.Выполнить()  
  	oRes = oResULT.Выгрузить()   
 * ВЫБРАННЫЕ РЕКВИЗИТЫ ОС ПОМЕЩАЕМ В КУРСОР CINV  
  	FOR EACH oRow IN oRes   
  		INSERT INTO CINV (GRUPPA,KOD,NAM,SROK_PI,INV_N,P_STOIM,KOD_MOL,MOL,KOD_POD,PODR,D_WWODA,WOST_STOM,NAC_AMORT,IZNOS) ;  
  		VALUES (oRow.ГруппаОС,oRow.КОД,oRow.НАИМЕНОВАНИЕ,oRow.СрокИспользованияБУ,oRow.ИнвентарныйНомер,oRow.ПервоначальнаяСтоимостьБУ,;  
  		oRow.МОЛБУ.КОД,oRow.МОЛБУ.НАИМЕНОВАНИЕ,oRow.ПодразделениеБУ.КОД,oRow.ПодразделениеБУ.НАИМЕНОВАНИЕ,oRow.ОсновноеСредство.фДатаВвода,;  
  		NVL(oRow.ТекущаяСтоимостьБУ,0),NVL(oRow.ТекАмортизацияБУ,0),NVL(oRow.ТекИзносБУ,0))  
  	ENDFOR	  
  ENDFOR  
    
 * ПОМЕТКА СПИСАННЫХ и ВЫБЫВШИХ  
    
  TEXT TO текст NOSHOW   
  ВЫБРАТЬ   
  	СобытияОСОрганизаций.ОсновноеСредство КАК ОсновноеСредство,  
      Документы.Дата КАК Дата,  
      Документы.ТипВыбытия КАК ТипВыбытия,  
      Документы.ТипДокумента КАК ТипДокумента  
   ИЗ     
  (ВЫБРАТЬ  
  	СписаниеОС.Ссылка,  
  	СписаниеОС.Дата КАК Дата,  
  	("СписаниеОС") КАК ТипВыбытия,  
  	СписаниеОС.ПричинаСписания.Представление КАК ТипДокумента  
  ИЗ  
  	Документ.СписаниеОС КАК СписаниеОС  
  ОБЪЕДИНИТЬ ВСЕ  
  	ВЫБРАТЬ  
  		ПередачаОС.Ссылка,  
  		ПередачаОС.ДокПодготовкаКПередачеОС.Дата,  
  		("ПередачаОС"),  
  		("")  
  	ИЗ  
  		Документ.ПередачаОС КАК ПередачаОС  
  		ГДЕ ПередачаОС.ДокПодготовкаКПередачеОС ССЫЛКА Документ.ПодготовкаКПередачеОС  
  		  
  ОБЪЕДИНИТЬ ВСЕ  
  		  
  		ВЫБРАТЬ  
  			ПередачаОС.Ссылка,  
  			ПередачаОС.Дата,  
  			("ПередачаОС"),  
  			("")  
  		ИЗ  
  			Документ.ПередачаОС КАК ПередачаОС  
  			ГДЕ НЕ ПередачаОС.ДокПодготовкаКПередачеОС ССЫЛКА Документ.ПодготовкаКПередачеОС) КАК Документы  
  	ВНУТРЕННЕЕ СОЕДИНЕНИЕ  
  	РегистрСведений.СобытияОСОрганизаций КАК СобытияОСОрганизаций   
  	ПО СобытияОСОрганизаций.Регистратор = Документы.Ссылка  
  ENDTEXT  
  oQue=obj.NewObject('Запрос')     
  oQue.Текст=текст    
  oResULT = oQue.Выполнить()  
  oRes = oResULT.Выгрузить()   
  SELECT 0  
  CREATE CURSOR CSPIS (D_DOK D(8),TIP_SPIS C(70),KOD C(9))  
    
  FOR EACH oRow IN oRes   
  	INSERT INTO CSPIS (D_DOK,TIP_SPIS,KOD) VALUES (NVL(oRow.Дата,{^9999/12/31}),oRow.ТипДокумента,oRow.ОсновноеСредство.Код)  
  ENDFOR	  
  UPDATE CINV SET D_DOK = CSPIS.D_DOK,TIP_SPIS = CSPIS.TIP_SPIS FROM CSPIS WHERE CINV.KOD = CSPIS.KOD  
    
  obj.ЗавершитьРаботуСистемы(.F.)        
  obj=.null.

Как избавиться в этом коде от цикла в котором выполняется длинный запрос,этот цикл возникает из за "ОсновноеСредство = &ОсновноеСредство",т.е. если ОС содержит 1000 обьектов то будет выполнятся 1000 запросов ,а хотелось бы одним запросом
Ratings: 0 negative/0 positive

Re: ОСНОВНЫЕ СРЕДСТВА ИЗ 1С 8.1 в VFP9
Foxtrot

Сообщений: 3378
Откуда: Куда:
Дата: 18.11.11 16:54:24
мобыть поменять ОсновноеСредство = &ОсновноеСредство на ОсновноеСредство В (&ОсновноеСредство)


------------------
P.S. будете проходить мимо, не стесняйтесь, проходите
Ratings: 0 negative/0 positive

Re: ОСНОВНЫЕ СРЕДСТВА ИЗ 1С 8.1 в VFP9
LUCIAN
Автор

Сообщений: 327
Откуда: Лида Беларусь
Дата: 18.11.11 17:12:54
Foxtrot
мобыть поменять ОсновноеСредство = &ОсновноеСредство на ОсновноеСредство В (&ОсновноеСредство)
Чтобы достичь желаемого необходимо большой запрос переписать так ,чтобы в нем выражение " = &ОсновноеСредство"
исчезло,так этот запрос я списал из модуля для ФормаЭлемента справочника ос,т.е. этот запрос построен для одного заданного обьекта



Исправлено: LUCIAN, 18.11.11 17:23
Ratings: 0 negative/0 positive

Re: ОСНОВНЫЕ СРЕДСТВА ИЗ 1С 8.1 в VFP9
medstrax

Сообщений: 4474
Дата: 18.11.11 17:42:55
И что? Тебе шашечки иди ехать? Фокстрот уже указал, сделай в запросе условие не на равенство, а на вхождение в список. Перебираешь справочник ОС, заполняешь список (или массив, пофигу), передаешь этот список параметром в запрос.
Ratings: 0 negative/0 positive

Re: ОСНОВНЫЕ СРЕДСТВА ИЗ 1С 8.1 в VFP9
LUCIAN
Автор

Сообщений: 327
Откуда: Лида Беларусь
Дата: 18.11.11 17:58:05
medstrax
сделай в запросе условие не на равенство, а на вхождение в список. Перебираешь справочник ОС, заполняешь список (или массив, пофигу), передаешь этот список параметром в запрос.
Спасибо всем,а то я Фокстрота не понял ,так как незнал ,что есть такая возможность в запросе проверять на вхождение в список,
хотя в Vfp такую возможность использовал
Ratings: 0 negative/0 positive

Re: ОСНОВНЫЕ СРЕДСТВА ИЗ 1С 8.1 в VFP9
medstrax

Сообщений: 4474
Дата: 18.11.11 22:05:17
По хорошему решается не так. Если есть возм-сть править целевую конфигу 1С, то лучше объявить там экспортируемые процедуры и звать их. В фоксе, как и любом клиенте, куча ограничений, многие участки кода тупо не выполняются. Банальные НачатьТранзакцию() ... ЗафиксироватьТранзакцию() через OLE тупо не работают, верней работают, но с кучей извратов.
Поэтому не рекомендую работать с БД 1с из клиента. Косяков потенциальных и практических море.
Ratings: 0 negative/0 positive

Re: ОСНОВНЫЕ СРЕДСТВА ИЗ 1С 8.1 в VFP9
LUCIAN
Автор

Сообщений: 327
Откуда: Лида Беларусь
Дата: 21.11.11 10:17:25
medstrax
Поэтому не рекомендую работать с БД 1с из клиента. Косяков потенциальных и практических море.
Работать с БД 1С из клиента никто не будет,а будет лишь по мере необходимости обновляться БД Vfp
с целью чтобы некоторые службы предприятия не дурили голову бухгалтеру ведущему ОС с выдачей для них информации.
На предприятии только ОС на 1С и на одном компьютере. Поэтому для всех желающих посмотреть ОС будет такая форма(vfp9):
Ratings: 0 negative/0 positive

Re: ОСНОВНЫЕ СРЕДСТВА ИЗ 1С 8.1 в VFP9
Foxtrot

Сообщений: 3378
Откуда: Куда:
Дата: 22.11.11 07:05:29
судя по всему конфа не самописная
тады добавляешь общий модуль доступный для внешнего соединения дабы при следующем обновлении не потерять наработки и в нем создаешь функцию типа
функция майсуперфанкшн(типос = неопределено) экспорт  
   запрос = новый запрос;  
   ...  
   возврат запрос.выпольнить().выбрать();  
  конецфункции


------------------
P.S. будете проходить мимо, не стесняйтесь, проходите
Ratings: 0 negative/0 positive

Re: ОСНОВНЫЕ СРЕДСТВА ИЗ 1С 8.1 в VFP9
LUCIAN
Автор

Сообщений: 327
Откуда: Лида Беларусь
Дата: 22.11.11 12:24:24
Когда применил "ОсновноеСредство В (&ОсновноеСредство))" вместо "ОсновноеСредство = &ОсновноеСредство" то не заметил ускорения
выборки данных, при этом кол-во выбранных обьектов не изменилось зато суммовые реквизиты сильно увеличились,поэтому решил оставить прежний вариант запроса.
Foxtrot
добавляешь общий модуль доступный для внешнего соединения дабы при следующем обновлении не потерять наработки и в нем создаешь функцию типа
функция майсуперфанкшн(типос = неопределено) экспорт  
   запрос = новый запрос;  
   ...  
   возврат запрос.выпольнить().выбрать();  
  конецфункции
Спасибо,попытаюсь это внедрить.
Ratings: 0 negative/0 positive



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

On-line: 29 Ник  (Гостей: 28)

25.06.2019 22:34:44 exec: 0.47
Mem: 1.246 Mb

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