LUCIAN
Автор
Сообщений: 343 Откуда: Лида Беларусь Дата регистрации:
25.03.2008
|
На основании модулей из 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 запросов ,а хотелось бы одним запросом
|