Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Проблема с периодическими реквизитами (число прочтений - 3417 )
Sky7003
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 16
Зарегистрирован: 27. Августа 2007
Проблема с периодическими реквизитами
07. Мая 2008 :: 07:04
Печать  
Запрос
работает.
|Select
     |Период.objid as Идент,
     |Период.value as Состояние
     |from 1sconst as Период
     |where
     | Период.date IN
     |(Select
     |max(Константа.date)
     |from 1sconst as Константа
     |where
     |(Константа.date<=:ВыбДата~~)
Добавляю строку идентификации
     "|and(Константа.objid=Период.objid)"

, и он перестаёт работать. Ошибка

FAILED! ICommandText::Execute(): Operation is invalid for a Memo, General or Picture field.
подскажите в чём проблема.
  
Наверх
 
IP записан
 
FAM
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 16
Зарегистрирован: 19. Мая 2006
Re: Проблема с периодическими реквизитами
Ответ #1 - 07. Мая 2008 :: 08:38
Печать  
ты опиши задачу - тогда с запросом помогу...
  
Наверх
 
IP записан
 
Sky7003
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 16
Зарегистрирован: 27. Августа 2007
Re: Проблема с периодическими реквизитами
Ответ #2 - 07. Мая 2008 :: 08:54
Печать  
     |SELECT Сотрудники.CODE Код
     |      , Сотрудники.DESCR Наименование
     |      , $Сотрудники.ДокументУдЛичность ДокументУдЛичность
     |,Сотрудники1.СостояниеФизлица  СостояниеФизлица
     |FROM $Справочник.Сотрудники AS Сотрудники
     |left join
     |(Select Период.objid as objid,
     |Период.value as СостояниеФизлица
     |from 1sconst as Период
     |where
     | Период.date IN
     |(Select
     |max(Константа.date)
     |from 1sconst as Константа
     |where (Константа.date<=:ВыбДата~~)
     |and (Константа.id=$ИсторияРеквизита.Сотрудники.СостояниеФизлица)
     |and(Константа.objid=Период.objid)
     |)and
     | (период.id=$ИсторияРеквизита.Сотрудники.СостояниеФизлица)
     | ) as Сотрудники1 on Сотрудники1.objid=Сотрудники.id
     |GROUP BY Сотрудники.CODE
     |      , Сотрудники.DESCR
     |      , $Сотрудники.ДокументУдЛичность
     |";
Это полностью запрос.

Задача получить из зика состояние сотрудников, т.е. работают или уволены.

Запрос выдаёт ошибку синтаксиса, когда начинаю смотреть подзапрос по периодическим реквизитам выдаёт вышеописанную ошибку
  
Наверх
 
IP записан
 
FAM
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 16
Зарегистрирован: 19. Мая 2006
Re: Проблема с периодическими реквизитами
Ответ #3 - 07. Мая 2008 :: 09:13
Печать  
ТекстЗапроса =
"
|Select
|      Сотры.Code as Код,
|      RtRim(Сотры.Descr) as Наименование,
|      RtRim($Сотры.ДокументУдЛичность) as ДокументУдЛичность,
|      IsNull(
|            (
|            Select Top 1
|                  Value
|            From
|                  _1SConst With(NoLock)
|            Where
|                  ObjId = Сотры.Id and
|                  Id = $ИсторияРеквизита.Сотрудники.СостояниеФизлица and
|                  Date <= '"+Формат(ВыбДата,"Д ГГГГММДД")+"'
|            Order by
|                  date desc, time desc, docid desc, row_id desc
|            ),'     0   ') as СостояниеФизлица
|From
|      $Справочник.Сотрудники Сотры With(NoLock)
|Order by
|      Наименование
|";
  
Наверх
 
IP записан
 
Sky7003
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 16
Зарегистрирован: 27. Августа 2007
Re: Проблема с периодическими реквизитами
Ответ #4 - 07. Мая 2008 :: 09:24
Печать  
но ведь это не SQL база а дбф.  Поэтому и запрос такой работать не будет.
И ещё это обращение из основной базы к зику...
  
Наверх
 
IP записан
 
Sky7003
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 16
Зарегистрирован: 27. Августа 2007
Re: Проблема с периодическими реквизитами
Ответ #5 - 08. Мая 2008 :: 04:03
Печать  
Ещё паралельный вопрос.

база DBF. Я пытаюсь использовать 1с++ подзапросы, и у меня всё время выпадает ошибка синтаксиса. Отдельно подзапрос работает.

|SELECT Сотрудники.CODE Код
|,(
     |Select
     |max(Константа.date)
     |from 1sconst as Константа
     |where (Константа.date<=:ВыбДата~~)
     |and(Константа.objid=Сотрудники.objid)
     |)
|FROM $Справочник.Сотрудники AS Сотрудники
|GROUP BY Сотрудники.CODE
|";
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Проблема с периодическими реквизитами
Ответ #6 - 08. Мая 2008 :: 04:35
Печать  
Покажи строку подключения. Думаю что ты используешь не OLE DB
  
Наверх
IP записан
 
Sky7003
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 16
Зарегистрирован: 27. Августа 2007
Re: Проблема с периодическими реквизитами
Ответ #7 - 08. Мая 2008 :: 04:44
Печать  
     oledb=СоздатьОбъект("OLEDBData");      
     СтрокаСоединения="Provider=VFPOLEDB.1;Deleted=Yes;Data Source="+фирмы1.путьзик+";Mode=ReadWrite;Collating Sequence=Machine";
           Сообщить(фирмы1.путьзик);
     oledb.ПрисоединитьИБ(СокрЛП(фирмы1.путьзик),СтрокаСоединения);
     command=oledb.СоздатьКоманду();

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


I Love YaBB 2!

Сообщений: 148
Зарегистрирован: 24. Мая 2006
Re: Проблема с периодическими реквизитами
Ответ #8 - 08. Мая 2008 :: 05:24
Печать  
[quote author=Sky7003 link=1210143863/0#7 date=1210221884]      oledb=СоздатьОбъект("OLEDBData");      
     СтрокаСоединения="Provider=VFPOLEDB.1;Deleted=Yes;Data Source="+фирмы1.путьзик+";Mode=ReadWrite;Collating Sequence=Machine";
           Сообщить(фирмы1.путьзик);
     oledb.ПрисоединитьИБ(СокрЛП(фирмы1.путьзик),СтрокаСоединения);
     command=oledb.СоздатьКоманду();

[/quote]
Если SP2 то не нужно Deleted=Yes;
Вот мой код когда перекидывал Сотров из ЗиК(DBF) в SQL бухию новую и не стандартной конфы
не оптимален, но для разовой операции 1 мин  или 10 сек роли не играют
[code]
[quote author=Sky7003 link=1210143863/0#7 date=1210221884]      oledb=СоздатьОбъект("OLEDBData");      
     СтрокаСоединения="Provider=VFPOLEDB.1;Deleted=Yes;Data Source="+фирмы1.путьзик+";Mode=ReadWrite;Collating Sequence=Machine";
           Сообщить(фирмы1.путьзик);
     oledb.ПрисоединитьИБ(СокрЛП(фирмы1.путьзик),СтрокаСоединения);
     command=oledb.СоздатьКоманду();

[/quote]
Если SP2 то не нужно Deleted=Yes;
Вот мой код когда перекидывал Сотров из ЗиК(DBF) в SQL бухию новую и не стандартной конфы
не оптимален, но для разовой операции 1 мин  или 10 сек роли не играют
           МД = СоздатьОбъект("MetaDataWork");
           БД=СоздатьОбъект("OLEDBData");
           Каталог=СокрЛП(ПутьКБазе)+"\";
           СтрокаСоединения="Provider=VFPOLEDB.1;Data Source="+Каталог+";Mode=ReadWrite;Extended Properties="";User ID="";Password="";Mask Password=False;Collating Sequence=RUSSIAN;DSN=""";;
           БД.ПрисоединитьИБ(Каталог,СтрокаСоединения);
           РС=БД.СоздатьКоманду();            
           
           МД.ПрисоединитьМД(Каталог+"1cv7.md");
           Текст="
           | SELECT
           | Сотр.Code  AS Код
           |,Сотр.Descr as ФИО      
           |,$Сотр.АдресПрописка as АдресПрописка
           |,$Сотр.ИНН as ИНН
           |,$Сотр.ДокументУдЛичность as ДокументУдЛичность
           |,cСостояние.value as Состояние
           |,cПодразделение.Value as   КодПодр
           |,Подр.Code as КодПодразделения  
           |,Долж.Descr as Должность
           |,cДолжность.Value as Дол
           |FROM $Справочник.Сотрудники as Сотр
           |INNER JOIN
           |(
           |
           |   SELECT   DISTINCT
           |       c_dt.objid as objid,
           |       c_dt.value as value
           |   FROM 1sconst as c_dt
           |   WHERE
           |       c_dt.date IN (SELECT MAX(c.date)
           |           FROM 1sconst as c
           |           WHERE
           |               (c.date <= :ВыбДата ~~)
           |               AND (c.id = $ИсторияРеквизита.Сотрудники.СостояниеФизлица)
           |               AND (c.objid = c_dt.objid)
           |       ) AND (c_dt.id = $ИсторияРеквизита.Сотрудники.СостояниеФизлица)
           |) as cСостояние ON cСостояние.objid = Сотр.id AND cСостояние.value = '    66   '    
           |
           |INNER JOIN
           |(
           |   SELECT   DISTINCT
           |       c_dt.objid as objid,
           |       c_dt.value as value
           |   FROM 1sconst as c_dt
           |   WHERE
           |       c_dt.date IN (SELECT MAX(c.date)
           |           FROM 1sconst as c
           |           WHERE
           |               (c.date <= :ВыбДата ~~)
           |               AND (c.id = $ИсторияРеквизита.Сотрудники.Подразделение)
           |               AND (c.objid = c_dt.objid)
           |       ) AND (c_dt.id = $ИсторияРеквизита.Сотрудники.Подразделение)
           |) as cПодразделение ON cПодразделение.objid = Сотр.id  
           |
           |LEFT JOIN (SELECT * FROM $Справочник.Подразделения AS Под ) as Подр  ON Подр.ID =   cПодразделение.Value    
           | -- Должность    
           |
           |INNER JOIN
           |(
           |
           |   SELECT   DISTINCT
           |       c_dt.objid as objid,
           |       c_dt.value as value
           |   FROM 1sconst as c_dt
           |   WHERE
           |       c_dt.date IN (SELECT MAX(c.date)
           |           FROM 1sconst as c
           |           WHERE
           |               (c.date <= :ВыбДата ~~)
           |               AND (c.id = $ИсторияРеквизита.Сотрудники.Должность)
           |               AND (c.objid = c_dt.objid)
           |       ) AND (c_dt.id = $ИсторияРеквизита.Сотрудники.Должность)
           |) as cДолжность ON cДолжность.objid = Сотр.id
           |
           |LEFT JOIN (SELECT * FROM $Справочник.Должности AS Дол ) as Долж  ON Долж.ID =  cДолжность.Value    
           |
           |
           |WHERE Сотр.ISFOLDER =2      
           |And Сотр.IsMark = ''
           |
           |";
           РС.отладка(0);
           РС.УстановитьТекстовыйПараметр("ВыбДата",Дата("01.04.2008"));
           ТЗ=РС.ВыполнитьИнструкцию(Текст );



[/code]
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Проблема с периодическими реквизитами
Ответ #9 - 08. Мая 2008 :: 05:25
Печать  
Код
Выбрать все
SELECT
 Сотрудники.CODE as Код
,Константа.Дата as ДатаКонстанты
FROM $Справочник.Сотрудники AS Сотрудники
  Left Join
  (
  Select
  max(1sconst.date) as Дата
  from 1sconst) as Константа
  ON
  (Константа.objid=Сотрудники.objid) and (Константа.date<=:ВыбДата~~)
GROUP BY Сотрудники.CODE"; 

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


I Love YaBB 2!

Сообщений: 16
Зарегистрирован: 27. Августа 2007
Re: Проблема с периодическими реквизитами
Ответ #10 - 08. Мая 2008 :: 07:58
Печать  
особой разницы между вашими вариантами и своим я ненашёл. Попробовал и то и другое. неработает.

     |SELECT Сотрудники.CODE Код
     |      , Сотрудники.DESCR Наименование
     |      , $Сотрудники.ДокументУдЛичность ДокументУдЛичность
     |,cСостояние.СостояниеФизлица  СостояниеФизлица
     |,:база база
     |FROM $Справочник.Сотрудники AS Сотрудники
     |INNER JOIN
     |(
     |
     |   SELECT   DISTINCT
     |       c_dt.objid as objid,
     |       c_dt.value as value
     |   FROM 1sconst as c_dt
     |   WHERE
     |       c_dt.date IN (SELECT MAX(c.date)
     |           FROM 1sconst as c
     |           WHERE
     |               (c.date <= :ВыбДата ~~)
     |               AND (c.id = $ИсторияРеквизита.Сотрудники.СостояниеФизлица)
     |               AND (c.objid = c_dt.objid)
     |       ) AND (c_dt.id = $ИсторияРеквизита.Сотрудники.СостояниеФизлица)
     |) as cСостояние ON cСостояние.objid = Сотр.id AND cСостояние.value = '    66   '   
     |
     |GROUP BY Сотрудники.CODE
     |      , Сотрудники.DESCR
     |      , $Сотрудники.ДокументУдЛичность
     |";
ошибка синтаксиса

Может у меня стоит какаята глюченая версия драйвера VFPOLEDB???
  
Наверх
 
IP записан
 
Sky7003
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 16
Зарегистрирован: 27. Августа 2007
Re: Проблема с периодическими реквизитами
Ответ #11 - 08. Мая 2008 :: 07:59
Печать  
|SELECT Сотрудники.CODE Код
     |      , Сотрудники.DESCR Наименование
     |      , $Сотрудники.ДокументУдЛичность ДокументУдЛичность
     |,cСостояние.СостояниеФизлица  СостояниеФизлица
     |,:база база
     |FROM $Справочник.Сотрудники AS Сотрудники
     |INNER JOIN 
     |(
     |
     |   SELECT   DISTINCT
     |       c_dt.objid as objid, 
     |       c_dt.value as value 
     |   FROM 1sconst as c_dt 
     |   WHERE 
     |       c_dt.date IN (SELECT MAX(c.date) 
     |           FROM 1sconst as c 
     |           WHERE 
     |               (c.date <= :ВыбДата ~~) 
     |               AND (c.id = $ИсторияРеквизита.Сотрудники.СостояниеФизлица) 
     |               AND (c.objid = c_dt.objid) 
     |       ) AND (c_dt.id = $ИсторияРеквизита.Сотрудники.СостояниеФизлица) 
     |) as cСостояние ON cСостояние.objid = Сотрудники.id AND cСостояние.value = '    66   '    
     |
     |GROUP BY Сотрудники.CODE
     |      , Сотрудники.DESCR
     |      , $Сотрудники.ДокументУдЛичность
     |";
ошибка синтаксиса
  
Наверх
 
IP записан
 
Sky7003
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 16
Зарегистрирован: 27. Августа 2007
Re: Проблема с периодическими реквизитами
Ответ #12 - 08. Мая 2008 :: 08:18
Печать  
проблема решена. Всем спасибоУлыбка

Я использовал старый драйвер vfpoledb из за этово он и не принимал верные запросы
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать