:: Вопросы по 1С
ОСНОВНЫЕ СРЕДСТВА ИЗ 1С 8.1 в VFP9
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 запросов ,а хотелось бы одним запросом
Ratings: 0 negative/0 positive
Re: ОСНОВНЫЕ СРЕДСТВА ИЗ 1С 8.1 в VFP9
Foxtrot

Сообщений: 3408
Откуда: Куда:
Дата регистрации: 25.04.2003
мобыть поменять ОсновноеСредство = &ОсновноеСредство на ОсновноеСредство В (&ОсновноеСредство)


------------------
Мойте ноги, моя ноги вы моете и руки
Ratings: 0 negative/0 positive
Re: ОСНОВНЫЕ СРЕДСТВА ИЗ 1С 8.1 в VFP9
LUCIAN
Автор

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



Исправлено 1 раз(а). Последнее : LUCIAN, 18.11.11 17:23
Ratings: 0 negative/0 positive
Re: ОСНОВНЫЕ СРЕДСТВА ИЗ 1С 8.1 в VFP9
medstrax
Забанен

Сообщений: 5964
Дата регистрации: 23.03.2007
И что? Тебе шашечки иди ехать? Фокстрот уже указал, сделай в запросе условие не на равенство, а на вхождение в список. Перебираешь справочник ОС, заполняешь список (или массив, пофигу), передаешь этот список параметром в запрос.
Ratings: 0 negative/0 positive
Re: ОСНОВНЫЕ СРЕДСТВА ИЗ 1С 8.1 в VFP9
LUCIAN
Автор

Сообщений: 343
Откуда: Лида Беларусь
Дата регистрации: 25.03.2008
medstrax
сделай в запросе условие не на равенство, а на вхождение в список. Перебираешь справочник ОС, заполняешь список (или массив, пофигу), передаешь этот список параметром в запрос.
Спасибо всем,а то я Фокстрота не понял ,так как незнал ,что есть такая возможность в запросе проверять на вхождение в список,
хотя в Vfp такую возможность использовал
Ratings: 0 negative/0 positive
Re: ОСНОВНЫЕ СРЕДСТВА ИЗ 1С 8.1 в VFP9
medstrax
Забанен

Сообщений: 5964
Дата регистрации: 23.03.2007
По хорошему решается не так. Если есть возм-сть править целевую конфигу 1С, то лучше объявить там экспортируемые процедуры и звать их. В фоксе, как и любом клиенте, куча ограничений, многие участки кода тупо не выполняются. Банальные НачатьТранзакцию() ... ЗафиксироватьТранзакцию() через OLE тупо не работают, верней работают, но с кучей извратов.
Поэтому не рекомендую работать с БД 1с из клиента. Косяков потенциальных и практических море.
Ratings: 0 negative/0 positive
Re: ОСНОВНЫЕ СРЕДСТВА ИЗ 1С 8.1 в VFP9
LUCIAN
Автор

Сообщений: 343
Откуда: Лида Беларусь
Дата регистрации: 25.03.2008
medstrax
Поэтому не рекомендую работать с БД 1с из клиента. Косяков потенциальных и практических море.
Работать с БД 1С из клиента никто не будет,а будет лишь по мере необходимости обновляться БД Vfp
с целью чтобы некоторые службы предприятия не дурили голову бухгалтеру ведущему ОС с выдачей для них информации.
На предприятии только ОС на 1С и на одном компьютере. Поэтому для всех желающих посмотреть ОС будет такая форма(vfp9):
Ratings: 0 negative/0 positive
Re: ОСНОВНЫЕ СРЕДСТВА ИЗ 1С 8.1 в VFP9
Foxtrot

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


------------------
Мойте ноги, моя ноги вы моете и руки
Ratings: 0 negative/0 positive
Re: ОСНОВНЫЕ СРЕДСТВА ИЗ 1С 8.1 в VFP9
LUCIAN
Автор

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


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

On-line: 2 (Гостей: 2)

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