Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Нужна помощь в запросе (число прочтений - 5443 )
barbitura
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 135
Зарегистрирован: 22. Мая 2013
Пол: Мужской
Нужна помощь в запросе
31. Марта 2014 :: 06:00
Печать  
Сотрудник принялся на работу потом уволился. Потом заново приняли и уволили. И так может быть сколько угодно раз.

В запросе хочу получить таблицу как сотрудник работал по
Сотрудник|Приказ о приеме 1|Приказ об увольнении 1|
Сотрудник|Приказ о приеме 2|Приказ об увольнении 2|
...
Сотрудник|Приказ о приеме N|Приказ об увольнении N|
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Нужна помощь в запросе
Ответ #1 - 31. Марта 2014 :: 08:55
Печать  
(0) так о какой конфигурации речь ( точнен как храниться информация принят - уволен ).
также надо знать база у тебя dbf или sql
  
Наверх
 
IP записан
 
barbitura
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 135
Зарегистрирован: 22. Мая 2013
Пол: Мужской
Re: Нужна помощь в запросе
Ответ #2 - 31. Марта 2014 :: 09:47
Печать  
база sql
база не типовая
инфа хранится в документах
Документ приема (Сотрудник, дата приема, тип сотрудника, ...)
Документ увольнение (Сотрудника, дата увольнения, тип сотрудника, ...)
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Нужна помощь в запросе
Ответ #3 - 31. Марта 2014 :: 14:48
Печать  
(2) Сотрудник храниться в шапке ?
Отчет должен делаться по одному сотруднику или по нескольким ?
Какое название этоо документа
  
Наверх
 
IP записан
 
barbitura
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 135
Зарегистрирован: 22. Мая 2013
Пол: Мужской
Re: Нужна помощь в запросе
Ответ #4 - 31. Марта 2014 :: 17:50
Печать  
Z1 писал(а) 31. Марта 2014 :: 14:48:
(2) Сотрудник храниться в шапке ?
Отчет должен делаться по одному сотруднику или по нескольким ?
Какое название этоо документа


1. ПриказОПриеме - название документа
    все рекивизиты в шапке
2. ПриказОбУвольнении - название документа
    все реквизиты в шапке

Надо получить таблицу
сотрудник|Приказ о приеме 1| Приказ которым его уволили 1| ....|Реквизиты из документов
сотрудник|Приказ о приеме 1| Приказ которым его уволили 2| ....|Реквизиты из документов
....
сотрудник|Приказ о приеме N| Приказ которым его уволили N| ....|Реквизиты из документов

Надо получать данные по сотруднику для начала. Потом буду делать что бы по списку сотрудников можно было сделать.

Я пробовал сделать примерно так
SEL
Прием.Сотрудник
Прием.ДатаПриема
Увольниени.ДатаУвольниения
FROM
ПриказОПриеме as Прием
JOIN ПриказОбУвольнеии as Увольниени ON Прием.Сотрудник = Увольнение.Сотрудник
WHERE Прием.ДатаПриема <= Увольниени.ДатаУвольниения

Но если сотрудник работал к примеру так
06.08.2000 - 23.09.2003
14.11.2004 - 22.10.2007

То запрос мне даст результат
06.08.2000 - 23.09.2003
14.11.2004 - 22.10.2007
06.08.2000 - 22.10.2007

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

если просто периоды работы получить то это можно а вот именно приказы не могу.

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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Нужна помощь в запросе
Ответ #5 - 01. Апреля 2014 :: 05:20
Печать  
Как то так
Код
Выбрать все
ТекстЗапроса = "
|SELECT
|$ПриказОПриеме.ДатаПриема [Дт_или_Прием_Или_Увольнение $Дата]
|,$ПриказОПриеме.Сотрудник [Сотрудник $СправочникюСотрудники]
|,"Прием" [режим $Строка]
|FROM
|  _1SJourn Жур (nolock)
|INNER JOIN  
|  $Документ.ПриказОПриеме as ПриказОПриеме (nolock) ON ПриказОПриеме.IDDoc = Жур.IDDoc
|  AND Жур.IDDocDef = $ВидДокумента.ПриказОПриеме
|WHERE
|     Жур.ISMARK = 0
|and   $ПриказОПриеме.Сотрудник = :Зн_Сотрудник
|union all
|$ПриказОбУвольнеии.ДатаУвольнения
|,$ПриказОбУвольнеии.Сотрудник
|,"Уволить"
|FROM
|  _1SJourn Жур1 (nolock)
|INNER JOIN  
|  $Документ.ПриказОбУвольнеии as ПриказОбУвольнеии (nolock) ON ПриказОбУвольнеии.IDDoc = Жур1.IDDoc
|  AND Жур1.IDDocDef = $ВидДокумента.ПриказОбУвольнеии
|WHERE
|     Жур1.ISMARK = 0
|and   $ПриказОбУвольнеии.ПриказОбУвольнеии = :Зн_Сотрудник
|order by 1
|";
 



строки должны чередоваться прием увольнение если это не так то ошибка в данных
  
Наверх
 
IP записан
 
barbitura
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 135
Зарегистрирован: 22. Мая 2013
Пол: Мужской
Re: Нужна помощь в запросе
Ответ #6 - 01. Апреля 2014 :: 06:15
Печать  
Хотел немного не так
Запрос выдает ТЗ
Сотрудник Дата "Прием"
Сотрудник Дата "Увольнение"

а вот я хочу

Сотрудник | ДатаПриема| Документ приема| ДатаУвольниения | Документ увольнения|
Сотрудник | ДатаПриема 1| Документ приема 1| ДатаУвольниения 1 | Документ увольнения 1|
и так далее
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Нужна помощь в запросе
Ответ #7 - 01. Апреля 2014 :: 07:03
Печать  
barbitura писал(а) 01. Апреля 2014 :: 06:15:
Хотел немного не так
Запрос выдает ТЗ
Сотрудник Дата "Прием"
Сотрудник Дата "Увольнение"

а вот я хочу

Сотрудник | ДатаПриема| Документ приема| ДатаУвольниения | Документ увольнения|
Сотрудник | ДатаПриема 1| Документ приема 1| ДатаУвольниения 1 | Документ увольнения 1|
и так далее


ну тогда надо в Вашем запросе искать миним значение из дата Увольнения > ДатаПриема.



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


1C++ rocks!

Сообщений: 135
Зарегистрирован: 22. Мая 2013
Пол: Мужской
Re: Нужна помощь в запросе
Ответ #8 - 01. Апреля 2014 :: 09:01
Печать  
Z1 писал(а) 01. Апреля 2014 :: 07:03:
barbitura писал(а) 01. Апреля 2014 :: 06:15:
Хотел немного не так
Запрос выдает ТЗ
Сотрудник Дата "Прием"
Сотрудник Дата "Увольнение"

а вот я хочу

Сотрудник | ДатаПриема| Документ приема| ДатаУвольниения | Документ увольнения|
Сотрудник | ДатаПриема 1| Документ приема 1| ДатаУвольниения 1 | Документ увольнения 1|
и так далее


ну тогда надо в Вашем запросе искать миним значение из дата Увольнения > ДатаПриема.


Но если сотрудник работал к примеру так
06.08.2000 - 23.09.2003
14.11.2004 - 22.10.2007

То запрос мне даст результат
06.08.2000 - 23.09.2003
14.11.2004 - 22.10.2007
06.08.2000 - 22.10.2007
  
Наверх
 
IP записан
 
barbitura
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 135
Зарегистрирован: 22. Мая 2013
Пол: Мужской
Re: Нужна помощь в запросе
Ответ #9 - 02. Апреля 2014 :: 09:34
Печать  
хелп
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Нужна помощь в запросе
Ответ #10 - 02. Апреля 2014 :: 09:46
Печать  
barbitura писал(а) 01. Апреля 2014 :: 06:15:
Хотел немного не так
Запрос выдает ТЗ
Сотрудник Дата "Прием"
Сотрудник Дата "Увольнение"

а вот я хочу

Сотрудник | ДатаПриема| Документ приема| ДатаУвольниения | Документ увольнения|
Сотрудник | ДатаПриема 1| Документ приема 1| ДатаУвольниения 1 | Документ увольнения 1|
и так далее


Ну не знаю, я бы перебрал ту ТЗ, что выше, и получил данные в том виде, как нужно. ИМХО, это проще, чем вылизывать запрос до идеального состояния.
  
Наверх
ICQ  
IP записан
 
barbitura
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 135
Зарегистрирован: 22. Мая 2013
Пол: Мужской
Re: Нужна помощь в запросе
Ответ #11 - 02. Апреля 2014 :: 09:54
Печать  
Salimbek писал(а) 02. Апреля 2014 :: 09:46:
barbitura писал(а) 01. Апреля 2014 :: 06:15:
Хотел немного не так
Запрос выдает ТЗ
Сотрудник Дата "Прием"
Сотрудник Дата "Увольнение"

а вот я хочу

Сотрудник | ДатаПриема| Документ приема| ДатаУвольниения | Документ увольнения|
Сотрудник | ДатаПриема 1| Документ приема 1| ДатаУвольниения 1 | Документ увольнения 1|
и так далее


Ну не знаю, я бы перебрал ту ТЗ, что выше, и получил данные в том виде, как нужно. ИМХО, это проще, чем вылизывать запрос до идеального состояния.


Хочется сделать вылизанный запрос. Даже интерес появился. А то даже нет представления как сделать.
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Нужна помощь в запросе
Ответ #12 - 02. Апреля 2014 :: 10:17
Печать  
[font=Courier New]declare @t table (
     employee varchar(4)
     , doc varchar(10)
     , doc_date date
)

insert into @t
select 'user', 'employment', '20000806'
union all
select 'user', 'layoff', '20030923'
union all
select 'user', 'employment', '20041114'
union all
select 'user', 'layoff', '20071022'

select employee, doc_date datee,
     (select min(dl.doc_date)
     from @t dl
     where dl.doc_date > de.doc_date) datel
from @t de
where doc = 'employment'[/font]
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
barbitura
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 135
Зарегистрирован: 22. Мая 2013
Пол: Мужской
Re: Нужна помощь в запросе
Ответ #13 - 10. Апреля 2014 :: 19:14
Печать  
Так и не получилось у меня прикрутить к 1С.
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Нужна помощь в запросе
Ответ #14 - 11. Апреля 2014 :: 05:53
Печать  
Как-то так:

select $ПриказОПриеме.Сотрудник Сотрудник
     , ПриказОПриеме.iddoc            -- приказ о приёме
     , ПриказОбУвольнении.iddoc      -- приказ об увольнении
     -- реквизиты из документов
     , ПриказОПриеме.*
     , ПриказОбУвольнении.*
from $Документ.ПриказОПриеме as ПриказОПриеме with (nolock)
     left join $Документ.ПриказОбУвольнении as ПриказОбУвольнении with (nolock) on $ПриказОПриеме.Сотрудник = $ПриказОбУвольнении.Сотрудник
           and ПриказОбУвольнении.iddoc = (
                 select top 1 iddoc
                 from $Документ.ПриказОбУвольнении
                 where $Документ.ПриказОбУвольнении.ДатаУвольнения > $ПриказОПриеме.ДатаПриема
                 order by $Документ.ПриказОбУвольнении.ДатаУвольнения
           )


и прикрутить проверку проведённости.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать