Имя: Пароль:
1C
1С v8
вытащить данные запросом
0 ic-kat
 
31.01.13
11:54
есть регистр, в нем поля

регистратор   дата   сотрудник  должность  старший

в поле старший тип справочник.сотрудники
1 Wobland
 
31.01.13
11:54
да!
2 ic-kat
 
31.01.13
11:56
ой.
разорвалось.

нужно запросом вытащить информаицю о старшести в таком ключе: если у сотрудника указан старший, у которого одинаковая с ним должность, то у этого старшего признак старшести истина.
понимаю, что нужно таблицу саму с собой соединить, а как, не соображу
3 Wobland
 
31.01.13
11:56
выбор когда старший.должность=должность тогда истина
4 Evrepid
 
31.01.13
11:58
не забыть что бы сотрудник не был одним и тем же лицом :)
5 samozvanec
 
31.01.13
11:59
таб1.старший = таб2.сотрудник

и поле выбирай таб1.должность = таб2.должность
6 Ayvengo
 
31.01.13
12:00
(2) а зачем чего-то привязывать?

ВЫБРАТЬ
   Контрагенты.Ссылка КАК Контрагент,
   ВЫБОР
       КОГДА Контрагенты.ГоловнойКонтрагент = Контрагенты.Ссылка
               ИЛИ Контрагенты.ГоловнойКонтрагент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
           ТОГДА ИСТИНА
       ИНАЧЕ ЛОЖЬ
   КОНЕЦ КАК ГоловнойКонтрагент
ИЗ
   Справочник.Контрагенты КАК Контрагенты
7 ic-kat
 
31.01.13
12:00
(3) так нельзя, нужна именно должность из регистра. потому что сотрудник может в нескольких должностях в смены работать
8 PuhUfa
 
31.01.13
12:02
(7) чья должность из регистра? в (3) пока все правильно написано
9 ic-kat
 
31.01.13
12:03
сотрудник  должность  старший
сотр11      грузчик    сотр8
сотр1       грузчик    сотр11
сотр2       грузчик    сотр11

у сотр1 и сотр2 в поле старший стоит сотр11, котороый в той же должности, что и они, нужно получить:

сотрудник  должность  старший
сотр11      грузчик      +
сотр1       грузчик      -
сотр2       грузчик      -
10 Ayvengo
 
31.01.13
12:04
+(6) не, ну понятно, что регистр должностей надо привязать. А дальше через выбор и будет счастье :)
11 ic-kat
 
31.01.13
12:05
должности есть в этом регистре, просто по документу, который формирует движения по регистру, один и тот же сотрудник в разные смены может быть в разных должностях
12 Ayvengo
 
31.01.13
12:05
Таблица в таком виде -
Сотрудник | СтаршийСотрудник | ДолжностьСотрудника | ДолжностьСтаршегоСотрудника | Старший (булево, определяется методом ВЫБОР)
13 samozvanec
 
31.01.13
12:06
(8) че там правильно? должности в регистре, это не реквизит справочника

(11) чем (5) не устраивает?
14 Ayvengo
 
31.01.13
12:06
(11) ну так в чем проблема? у тебя же на момент времени выполняется отчет? Видимо по документу.
15 PuhUfa
 
31.01.13
12:09
(13) так там и сравнивается с должностью из регистра. А про должность старшего у ТС ни слова... и раз ее нет в регистре делаем предположение, что она реквизит этого самого старшего
16 samozvanec
 
31.01.13
12:12
(15) в смысле нету?
17 ic-kat
 
31.01.13
12:12
за разные периоды может быть и разная должность и разное старшинство

период   сотрудник     должность  старший
период1     сотр11      грузчик    сотр8
период1     сотр1       грузчик    сотр11
период1     сотр2      грузчик    сотр11
период2     сотр1      упаковщик  сотр5
период2     сотр18      упаковщик  сотр1
период2     сотр19      упаковщик  сотр1

период   сотрудник  должность  старший
период1     сотр11      грузчик      +
период1     сотр1       грузчик      -
период1     сотр2       грузчик      -
период2     сотр1       упаковщик    +
период2     сотр18      упаковщик    -
период2     сотр19      упаковщик    -
18 ic-kat
 
31.01.13
12:13
(15) у старшего должность тоже в регистре указана
19 PuhUfa
 
31.01.13
12:13
(16) всмысле на момент написания (3) и (8) не было. Про то что должность старшего в этом же регистре и другой записью, появилось позже
20 samozvanec
 
31.01.13
12:15
(19) все там было еще в (0)

(18) тебе прям запрос написать? слова из (5) не доходят?
21 samozvanec
 
31.01.13
12:16
(19) дабы избежать дальнейших споров - "в поле старший тип справочник.сотрудники", а раз сотрудник, значит он в этом регистре тоже есть
22 ic-kat
 
31.01.13
12:16
словами так: если у сотрудника в поле старший стоит сотрудник, у которого в эту смену (в этот период, с этим регистратором) такая же должность, то этот сотрудник не старший, а то, который у него стоит в старшести, тот старший
23 ic-kat
 
31.01.13
12:17
(20) из (5) сейчас попробую
24 samozvanec
 
31.01.13
12:18
(23) по регистратору, при желании, тоже можно приравнять
25 cleaner
 
31.01.13
12:24
Мне кажется, нужно постановку задачи изменить:) А то яйца в корзине с гвоздями вперемешку...

Пусть регистратор делает движения не по одному регистру, а по двум. Во втором регистре будет два реквизита: смена и сотрудник (старший). И будет счастье!
26 cleaner
 
31.01.13
12:25
Да, и в первый регистр добавить реквизит "Смена".

PS: Это если под сменой не подразумевалась "Дата", конечно
27 ic-kat
 
31.01.13
12:26
(25) если бы все так просто было. можно было бы и этим регистром обойтись, просто добавить еще одно поле булево и при проведении документа обсчитывать все и туда признак писать.
решили, что нецелесообразно менять структуры бд ради одного отчета, вот и приходится изголяться
28 ic-kat
 
31.01.13
12:26
(26) смена - это день, фактически дата
29 samozvanec
 
31.01.13
12:35
у тебя получилось?
30 ic-kat
 
31.01.13
12:37
нет пока, режет записи, смотрю почему
31 cleaner
 
31.01.13
12:43
(27) Неправда ваша.

Это решение имеет больше достоинств, чем недостатков:
1) Оптимизируется размер данных (ведь регистр планируется использовать очень долго - люди выходят на работу каждый день)
2) Упрощается поддержка и доработка (Например, представим себе ситуацию, когда старший сотрудник не вышел на работу - знакомо? Что будем делать в обоих случаях - также понятно... Или нужно будет узнать, насколько компетентно тот или иной старший руководил сменой - в моем случае запрос будет намного короче и понятнее)
3) Да и вообще при разработке нужно уделять внимание качеству кода. При наличии одного регистра через несколько месяцев будете писать парсер для разбора текста запроса:) Шучу, конечно, но это близко к истине
32 ic-kat
 
31.01.13
12:45
(31) моя как раз правда) я предложила такие доработки регистра, архитектор базы тормознул
(29) сделала, теперь отсекаются подчиненные и им ставится истина в признаке, хотя им как раз должно ставить ложь, а тому, кто у них в поле старший, истину
33 cleaner
 
31.01.13
12:51
(32) Архитектор базы должен согласиться с моими доводами. Для него на первом месте всегда: логичность структуры (см. "Инфологическое проектирование"), простота поддержки, скорость работы
34 ic-kat
 
31.01.13
12:55
(33) сейчас речь не об этом. решение принято, а мне нужно выполнить поставленную задачу. в запросе, похоже придется костыль делать
35 ic-kat
 
31.01.13
13:01
(29) дело в том, что не по всем должностям проставляется признак старшинства. т.е. у сотрудника в эту смену может быть старший, но у него другая должность, тогда его старшему старшинство не ставится
36 samozvanec
 
31.01.13
13:22
(35) сотрудника бери из второй таблицы. признак старшинства ты верно получаешь.
37 samozvanec
 
31.01.13
14:00
(36) фигня получается...
38 samozvanec
 
31.01.13
14:04
как вариант после такого соединения ты получишь (12). а дальше хз, я послеобедний сейчас)
39 ic-kat
 
31.01.13
14:16
(38) да, это я получила, только поменяла местами истина и ложь в признаке и теперь сделала костыль в виде: если должность в списке (тех, где может быть старшинство), то пошла проверка на соответствие должности старшего и сотрудника, а если не в списке, то ложь
доделываю, посмотрю, что получится.
там еще одна как минимум закавыка получится: в запрос передается список сотрудников, если при этом чьего-то старшего не будет в этом списке, то тоже фигня получится.
надо тогда брать все записи из этого периода и только в последнюю очередь резуть ненужных сотров. или еще как-то думать...
40 ic-kat
 
31.01.13
14:29
неа, фигня получается, подчиненных определяет, а старшего нет :( какие-то еще есть идеи?
41 samozvanec
 
31.01.13
14:33
(40) старших с плюсом во временную таблицу, с ледующем пакете выбираешь все из нее и всех, кого там нет, объединяешь
42 ic-kat
 
31.01.13
14:34
не поняла
43 samozvanec
 
31.01.13
14:41
выбрать
   таб.старший,
   ИСТИНА КАК ПризнакСтарший
поместить ВТСтаршие
   из ТаблицаКоторуюТыИмеешь КАК ТАБ
/////////////////////////
выбрать
   таб.старший,
   ИСТИНА КАК ПризнакСтарший
   из ВТСтаршие

ОБЪЕДИНИТЬ

выбрать
   таб.сотрудник,
   ЛОЖЬ
   из ТаблицаКоторуюТыИмеешь КАК таб
ГДЕ
  НЕ Сотрудник В (таб.старший из ВТСтаршие)
44 samozvanec
 
31.01.13
14:42
+ в конце там вместо  (таб.старший из ВТСтаршие)
(ВЫБРАТЬ таб.старший из ВТСтаршие)


примерно так
45 samozvanec
 
31.01.13
14:56
ВЫБРАТЬ
   СотрудникиСменыСрезПоследних.Сотрудник,
   СотрудникиСменыСрезПоследних.Должность,
   СотрудникиСменыСрезПоследних.Старший,
   СотрудникиСменыСрезПоследних1.Должность КАК ДолжностьСтаршего,
   ВЫБОР
       КОГДА СотрудникиСменыСрезПоследних.Должность = СотрудникиСменыСрезПоследних1.Должность
           ТОГДА ИСТИНА
       ИНАЧЕ ЛОЖЬ
   КОНЕЦ КАК ПризнакСтаршинства
ПОМЕСТИТЬ ВТКакВСообщении12
ИЗ
   РегистрСведений.СотрудникиСмены.СрезПоследних(&ДатаСреза, ) КАК СотрудникиСменыСрезПоследних
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СотрудникиСмены.СрезПоследних(&ДатаСреза, ) КАК СотрудникиСменыСрезПоследних1
       ПО СотрудникиСменыСрезПоследних.Старший = СотрудникиСменыСрезПоследних1.Сотрудник
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ВТКакВСообщении12.Старший,
   ВТКакВСообщении12.ПризнакСтаршинства
ПОМЕСТИТЬ ВТСтаршие
ИЗ
   ВТКакВСообщении12 КАК ВТКакВСообщении12
ГДЕ
   ВТКакВСообщении12.ПризнакСтаршинства
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ВТСтаршие.Старший,
   ВТСтаршие.ПризнакСтаршинства,
   NULL КАК Сотрудник,
   NULL КАК Поле1
ИЗ
   ВТСтаршие КАК ВТСтаршие

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
   NULL,
   NULL,
   ВТКакВСообщении12.Сотрудник,
   ЛОЖЬ
ИЗ
   ВТКакВСообщении12 КАК ВТКакВСообщении12
ГДЕ
   НЕ ВТКакВСообщении12.Сотрудник В
               (ВЫБРАТЬ
                   ВТСтаршие.Старший
               ИЗ
                   ВТСтаршие КАК ВТСтаршие)
46 samozvanec
 
31.01.13
14:57
да ёперный тятр... в последнем пакете нулы убери
47 ic-kat
 
31.01.13
18:47
срезы не нужны.
мне в итоге нужно количество смен в должности с признаком и без признака старшинства.
48 ic-kat
 
31.01.13
18:51
сделала вот так:
ВЫБРАТЬ
   СтаршийЗвена.Регистратор,
   ШтатноеРасписание.Сотрудник КАК Сотрудник,
   ШтатноеРасписание.Должность КАК Должность,
   ШтатноеРасписание.Старший КАК Старший,
   СтаршийЗвена.Сотрудник КАК СотрудникСтарший,
   СтаршийЗвена.Должность КАК ДолжностьСтаршего,
   ВЫБОР
       КОГДА ШтатноеРасписание.Должность В (&СписокДолжностей)
           ТОГДА ВЫБОР
                   КОГДА ПРЕДСТАВЛЕНИЕ(ШтатноеРасписание.Должность) = ПРЕДСТАВЛЕНИЕ(СтаршийЗвена.Должность)
                       ТОГДА 0
                   ИНАЧЕ 1
               КОНЕЦ
       ИНАЧЕ 0
   КОНЕЦ КАК признак
ИЗ
   РегистрСведений.ШтатноеРасписание КАК ШтатноеРасписание
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ШтатноеРасписание КАК СтаршийЗвена
       ПО ШтатноеРасписание.Регистратор = СтаршийЗвена.Регистратор
           И ШтатноеРасписание.Старший = СтаршийЗвена.Сотрудник
ГДЕ
   ШтатноеРасписание.Период МЕЖДУ &ДатаНачало И &ДатаКонец
   И (НЕ ШтатноеРасписание.Сотрудник.ЭтоГруппа)
   И (НЕ ШтатноеРасписание.Сотрудник.ПометкаУдаления)
   И ШтатноеРасписание.Регистратор.Подразделение = &Подразделение

УПОРЯДОЧИТЬ ПО
   Сотрудник,
   Должность,
   признак

но в итоге обнаружился сотрудник, у которого старший не с такой должностью, но он не старший, потому как сам нигде как старший не фигурирует.
похоже вообще не в том направлении шла :(
49 ic-kat
 
31.01.13
19:19
хотя... нужно выяснить, есть ли сотрудник в столбце старших. если есть то признак истина.
50 ic-kat
 
31.01.13
19:20
подскажите, уже туплю под вечер
51 cleaner
 
01.02.13
03:04
(50) Мышки плакали и кололись, но продолжали есть кактус:) Сильно сложно получается
52 ic-kat
 
01.02.13
09:12
(51) про мышек к чему вообще?
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший