Имя: Пароль:
1C
 
v8: как убрать повторяющиеся строки в запросе?
0 ЭЦ
 
08.07.09
15:51
Здравствуйте.
Имеется регистр наколения ФактическиеОтпускаОрганизаций
с полями :
Сотрудник, Период
Движения в регистр вводятся документами -регистраторами.
Требуетмся найти все джвижения выполненными разными регистраторами с одинаковым значенимм сотрудника и периода.
имеем запрос :
//--------------------------
"ВЫБРАТЬ
|ФОО.Сотрудник,
|ФОО.Период,
|ФОО.Регистратор,
|ФОО1.Регистратор
|
|ИЗ
|РегистрНакопления.ФактическиеОтпускаОрганизаций КАК ФОО
|ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ФактическиеОтпускаОрганизаций КАК ФОО1
|ПО ФОО.Сотрудник = ФОО1.Сотрудник
|И ФОО.Период = ФОО1.Период
|И ФОО.Регистратор <> ФОО1.Регистратор
//-----------------------------------------
все вроденормально за исключением того что в результатах все записи задвоены
т.е имеются строки
Рег1 Рег2 Сотр Пер
и
Рег2 Рег1 Сотрпер
прошу подсказать как лучше отфильтровать повторяющиесястроки.
СПАСИБО
1 ТелепатБот
 
гуру
08.07.09
15:51
2 чувак
 
08.07.09
15:52
Счась забанят
3 mikecool
 
08.07.09
15:53
Сгруппировать по
4 mikecool
 
08.07.09
15:53
+3 выбрать различные
5 ЭЦ
 
08.07.09
15:54
По чему группировать?
6 GenV
 
08.07.09
15:55
(0) Можно попробывать добавить условие в соединение, что первый регистратор раньше второго
7 mikecool
 
08.07.09
15:55
(5) по чему надо, по тому и группируй
9 GenV
 
08.07.09
15:59
6+ а вообще достаточно итогов по Сотрудник+Период, и получать регистраторы, если уж дважды в отпуск отправили.
10 acsent
 
08.07.09
16:00
Это классическая задача
из таблицы

К1 К2
А  1
А  2

Сделать таблицу

К1 К2 К3
А  1  2
/1C]
11 ЭЦ
 
08.07.09
16:11
(9) Имеется вв виду чтото вроде:
================
сначчала во вложенном запросе получаем сотрудников и периоды для которых имеются различные регистраторы,
затем для них выбираем всех регистраторов?
==========
тоже склоняюсь к этому, но кажется несколько громоздко,
помоему должно быть чтото попроще.
Например отобрать толькочетные записи в результате запроса ?
12 ЭЦ
 
08.07.09
16:15
(9) Имеется в виду
вовложенном запросе получить всех сотрудников и периоды для которых имеются различные регистраторы.
а затем уже для них выбирать регистраторы?
-----------
Думал также но кажется громозлко,
хотелосьбы попроще - например отобрать тлько четные строми
13 ЭЦ
 
08.07.09
16:17
(10) ну и как ее решать?
14 Ненавижу 1С
 
гуру
08.07.09
16:18
(13) тебе ж сказали, вместо:
|И ФОО.Регистратор <> ФОО1.Регистратор
поставь:
|И ФОО.Регистратор.МоментВремени < ФОО1.Регистратор.МоментВремени
15 ЭЦ
 
08.07.09
16:28
(14) ТОЛКОВО
16 ЭЦ
 
08.07.09
16:51
(14) Мысль хорошая но не работает т.к. Момнт времени для регистра это строка
врт такого типа
---------------------------
18.07.2007 0:00:00; Начисление отпуска работникам организаций ЕВ000000066 от 11.07.2007 12:02:10
------------------
и сравнение на "<" не срабатывает
будем пробовать ФОО.Период<ФОО1.Период
17 ЭЦ
 
08.07.09
16:58
(14) ПОПРАВКА 15
Мысль хорошая но не работает т.к. Момнт времени для регистра это строка
врт такого типа
---------------------------
18.07.2007 0:00:00; Начисление отпуска работникам организаций ЕВ000000066 от 11.07.2007 12:02:10
------------------
и сравнение на "<" не срабатывает
будем пробовать ФОО..Регистратор.Дата<ФОО1..Регистратор.Дата
18 Ненавижу 1С
 
гуру
08.07.09
16:59
(16) с каких пор момент времени стал строкой?

и вообще там писалось о моменте времени регистратора, а не регистра
19 ЭЦ
 
08.07.09
17:05
(18) Пардонте, но у регистратора нету момента времени - у него дата
а моментВремени как раз у регистра
и он имеет вид приведенный в 17
20 ЭЦ
 
08.07.09
17:05
+19 но мысль у вас все равно хорошая.
21 Ненавижу 1С
 
гуру
08.07.09
17:08
(18) когда это у регистратора исчез момент времени? у меня отлично есть
и это его пользовательское представление, а сам он это Период+Ссылка
22 Ненавижу 1С
 
гуру
08.07.09
17:08
(21) к (19)
23 Terv
 
08.07.09
17:16
можно так


ВЫБРАТЬ
   ФактическиеОтпускаОрганизаций.Сотрудник КАК Сотрудник,
   ФактическиеОтпускаОрганизаций.Период,
   ФактическиеОтпускаОрганизаций.Регистратор
ИЗ
   (ВЫБРАТЬ
       ФОО.Сотрудник КАК Сотрудник,
       ФОО.Период КАК Период
   ИЗ
       РегистрНакопления.ФактическиеОтпускаОрганизаций КАК ФОО
   
   СГРУППИРОВАТЬ ПО
       ФОО.Сотрудник,
       ФОО.Период
   
   ИМЕЮЩИЕ
       КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ФОО.Регистратор) > 1) КАК ВложенныйЗапрос
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ФактическиеОтпускаОрганизаций КАК ФактическиеОтпускаОрганизаций
       ПО ВложенныйЗапрос.Период = ФактическиеОтпускаОрганизаций.Период
           И ВложенныйЗапрос.Сотрудник = ФактическиеОтпускаОрганизаций.Сотрудник
ИТОГИ ПО
   Сотрудник
24 ЭЦ
 
08.07.09
17:17
Вот так обратитьсям можно :
//--------------------
ФОО.Регистратор.МоментВремени
//--------------------
но Вот это не работает
//-----------------------
|И ФОО.Регистратор.МоментВремени < ФОО1.Регистратор.МоментВремени
//----------------------
а вот так работает
//-------------------------
И ФОО.Регистратор.Дата < ФОО1.Регистратор.Дата
//----------------------------------
25 Ненавижу 1С
 
гуру
08.07.09
17:20
а у меня и так работает:
ФОО.Регистратор.МоментВремени < ФОО1.Регистратор.МоментВремени
а так некооректно вообщето:
ФОО.Регистратор.Дата < ФОО1.Регистратор.Дата
(не все пары получишь)
26 Terv
 
08.07.09
17:21
(25) а что будет если в одном периоде 3 или 4 регистратора?
27 Ненавижу 1С
 
гуру
08.07.09
17:23
(26) будут выданы все пары с точностью до следования в них элементов
28 Terv
 
08.07.09
17:27
(27) а-а.. сдается что (0) еще до этого не дошел... это будет следующая просьба.. как убрать их ;)
29 ЭЦ
 
08.07.09
17:29
(25)
ЧИТАЕМ HELP :
---------------------
МоментВремени :
Предназначен для получения и хранения момента времени для объекта в базе данных. Содержит дату и время, а также ссылку на объект базы данных. Используется в качестве значений свойств и параметров методов других объектов, имеющих тип МоментВремени.
------------------------------------
у меня
//
ФОО.Регистратор.МоментВремени < ФОО1.Регистратор.МоментВремени
//
не сработало, вероятно надо както преобразовывать к какому нибудь типу для которого выполняется сравнение на больше/меньше
30 Ненавижу 1С
 
гуру
08.07.09
17:32
(29) не сработало: ошибку выдало или неправильно сработало?
у меня сработало:

ВЫБРАТЬ
   АвансовыйОтчет.Ссылка,
   АвансовыйОтчет1.Ссылка КАК Ссылка1
ИЗ
   Документ.АвансовыйОтчет КАК АвансовыйОтчет
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.АвансовыйОтчет КАК АвансовыйОтчет1
       ПО АвансовыйОтчет.МоментВремени < АвансовыйОтчет1.МоментВремени
31 ЭЦ
 
08.07.09
17:35
(27) Это меня устраивает.
Но тут выплывает другая проблема - оказывается, что имеются документы с одинаковой датой.
:-(
(они видетели были созданы программно)
так, что как советует 23 наверное придется вернуться к вложенным запросам
32 ЭЦ
 
08.07.09
17:35
(30) не был выполнен отбор по условию
33 ЭЦ
 
08.07.09
17:43
(30+)
//
   АвансовыйОтчет.МоментВремени
//
это ссылка на таблицу документов, а у меня таблица регистра накопления
тут МоментВремени несколько другой
34 Ненавижу 1С
 
гуру
08.07.09
19:06
(33) ты меня достал! сначала говоришь что моменты времени регистраторов (читай документов) нельзя сравнивать, я показываю, что моменты времени документов вполне сравнимы. Теперь ссылаясь на этот пример, что у тебя регистр. Я вообще то в курсе, что там тоже есть момент времени.
Короче, я про фому, он про ерему