Имя: Пароль:
1C
1С v8
Запрос на подумать
,
0 Азазелло
 
18.09.12
15:39
Есть таблица вида
"А"  "А"
"А"  "Б"
"Б"  "А"
"Б"  "Б"

На выходе запросом получить
"А"  "А"
"А"  "Б"
"Б"  "Б"
, т.е. удалить дубли "аддитивных" строк

Если кому нужно, предоставляю начальный набор данных:

ВЫБРАТЬ "1" КАК Пункт1, "1" КАК Пункт2
ПОМЕСТИТЬ втСвязи
ОБЪЕДИНИТЬ ВЫБРАТЬ "1", "2"
ОБЪЕДИНИТЬ ВЫБРАТЬ "2", "1"
ОБЪЕДИНИТЬ ВЫБРАТЬ "2", "2"
ОБЪЕДИНИТЬ ВЫБРАТЬ "2", "3"
ОБЪЕДИНИТЬ ВЫБРАТЬ "1", "3"
ОБЪЕДИНИТЬ ВЫБРАТЬ "3", "1"
10 aleks-id
 
18.09.12
16:07
(9) наполовину только
ща допишу
11 МихаилМ
 
18.09.12
16:08
в (9) правильно в (7) -неправильно
12 Азазелло
 
18.09.12
16:10
(10) ну и что получится на выходе? :)
13 Ёпрст
 
18.09.12
16:10
(12) каша вестимо
14 ssh2006
 
18.09.12
16:10
(9) +1
15 Ёпрст
 
18.09.12
16:11
(12)
если есть

"111"  "123"
надо удалить

"123"  "111"  так что ли ?
16 Азазелло
 
18.09.12
16:11
(14) эт почему вдруг?
17 Азазелло
 
18.09.12
16:11
(15) именно
18 МихаилМ
 
18.09.12
16:12
+(11)
сварачивать не нужно, само свернется
19 Mort
 
18.09.12
16:13
(7) +1
(9) После этого тупо будут пары всего чего можно.
20 Азазелло
 
18.09.12
16:13
(18) не улавливаю ход мыслей... :(
21 PR
 
18.09.12
16:13
Задача в (0) из серии "Летят два крокодила, один зеленый, а другой на юг. Сколько мне лет?".
Может стоит для начала хотя бы напомнить значение термина "Аддитивный", а то Яндекс тупит http://yandex.ru/yandsearch?text=аддитивный&lr=213 и выдает всякую хрень?
22 Азазелло
 
18.09.12
16:13
(19) после (7) будет то же самое.
23 Азазелло
 
18.09.12
16:14
(21) "аддитивный" в данном случае - нечувствительный к перестановке.
24 Ненавижу 1С
 
гуру
18.09.12
16:15
ВЫБРАТЬ Поле1, Поле2
ИЗ Т
ГДЕ
 Поле1<=Поле2

это что ли?
25 PR
 
18.09.12
16:15
(23) Я так и думал. Знал, просто забыл.
26 Ёпрст
 
18.09.12
16:15
select t.a,t.b
from table as t
inner join table as t2 on t.b+t.a <> t2.a+t2.b

не ?
27 Азазелло
 
18.09.12
16:15
Ладно, опишу суть проблемы, так сказать, физику, чтобы яснее стало. Есть регистр расстояний между городами. Так вот расстояние от города А до Б равно расстоянию от Б до А. И в регистре нет необходимости хранить 2 записи, отдельно для А-Б и отдельно для Б-А
28 Mort
 
18.09.12
16:16
(22) Ну 7 надо немного подпилить

(23) Тада в (0) херня написана.
29 PR
 
18.09.12
16:16
+(25) А, простите, перестановке чего? А то опять забыл.
30 Ненавижу 1С
 
гуру
18.09.12
16:16
(27) лишние надо удалить?
31 Азазелло
 
18.09.12
16:16
(29) ну ладно, ладно... коряво написал...
32 Axel2009
 
18.09.12
16:17
на
ВЫБРАТЬ втСвязи.* ИЗ втСвязи КАК втСвязи
ЛЕВОЕ СОЕДИНЕНИЕ втСвязи КАК втСвязи2
ПО втСвязи.Пункт1 = втСвязи2.Пункт2
И втСвязи.Пункт2 = втСвязи2.Пункт1
И втСвязи.Пункт1 > втСвязи2.Пункт1
ГДЕ втСвязи2.Пункт1 ЕСТЬ NULL
33 Kreont
 
18.09.12
16:17
(27) Ну не всегда растояние от А к Б, будет равно от Б к А, проверено на пробках :)
34 PR
 
18.09.12
16:18
А, по ходу телепат починили.
То есть из набора комбинаций
0 0
0 1
1 0
1 1
нужно удалить
1 0
и
1 1
потому что они получатся, если в
0 0
и
0 1
переставить элементы местами?
35 Axel2009
 
18.09.12
16:18
(28) как бы в 7 отфильтруются все 1,2 и 2,1
36 Азазелло
 
18.09.12
16:18
(30) лишнии просто не надо записывать. у меня сейчас есть большая таблица вида ГородА ГородБ Расстояние. так вот, мне нужно в регистре отразить расстояния между пунктами, и я не хочу плодить лишние записи. т.к. в таблице встречаются строки вида Москва Краснодар ХХХ, Краснодар Москва ХХХ
37 Axel2009
 
18.09.12
16:19
(34) нужно из
0 0
0 1
1 0
1 1
оставить
0 0
0 1 либо 1 0
1 1
38 Ненавижу 1С
 
гуру
18.09.12
16:19
ВЫБРАТЬ РАЗЛИЧНЫЕ
 ВЫБОР КОГДА Поле1<Поле2 ТОГДА Поле1 ИНАЧЕ Поле2 КОНЕЦ КАК Поле1,
 ВЫБОР КОГДА Поле1>Поле2 ТОГДА Поле1 ИНАЧЕ Поле2 КОНЕЦ КАК Поле2
ИЗ Т
39 Азазелло
 
18.09.12
16:19
(34) нет, нужно учесть 1 2, но только 1 раз, т.к. это эквивалентно 2 1
40 PR
 
18.09.12
16:19
+(34) Не видел (27).
41 Mort
 
18.09.12
16:20
(35) С какого перепугу? Мы будем объединять только по первым двум полям для отсечения.
42 Ненавижу 1С
 
гуру
18.09.12
16:20
(39) смотри (38)
43 Ёпрст
 
18.09.12
16:23
(38) красиво
44 Азазелло
 
18.09.12
16:23
(32) рабочий вариант, но (38) просто поразил!!! все гениальное, как говорится, просто...
45 PR
 
18.09.12
16:25
(44) А что, у нас у городов есть порядковый номер в каком-то реквизите?
46 Азазелло
 
18.09.12
16:26
(45) нет. но, насколко помню, для ссылок операции сравнения тоже работают
47 vmv
 
18.09.12
16:26
(0) првелбы пример с предикатами "М" и "Ж" - уже бы решили задачу деления уникальных пар множеств, в принципе ее на 1-м курсе по диккретке решают - ерунда
48 PR
 
18.09.12
16:28
(460 LOL
Тогда
ВЫБРАТЬ втСвязи.* ИЗ втСвязи КАК втСвязи1
ЛЕВОЕ СОЕДИНЕНИЕ втСвязи КАК втСвязи2
ПО втСвязи1.Пункт1 <= втСвязи2.Пункт2

Не?
49 PR
 
18.09.12
16:28
+(48) К (46) ессно.
50 Азазелло
 
18.09.12
16:29
(49) o_O
51 vmv
 
18.09.12
16:29
плагиатсвую для конкретных чуваков

Есть таблица вида

"Ж"  "Ж"
"Ж"  "М"
"М"  "Ж"
"М"  "М"


На выходе запросом получить

"Ж"  "Ж"
"Ж"  "М"
"М"  "М"

, т.е. не важно в каких позах, важно в каком составе
52 Азазелло
 
18.09.12
16:30
(51) неее, "М" "М" нам не надо!!! Требую модифицировать условия задачи )))
53 vmv
 
18.09.12
16:32
(52) такие задачи решают образно, так что если закрыть галаза на мораль, то решение очевидно в образах в случае его четкого представления
54 Classic
 
18.09.12
16:32
ВЫБРАТЬ
 втСвязи.*
ИЗ втСвязи КАК втСвязи
  ЛЕВОЕ СОЕДИНЕНИЕ втСвязи КАК втСвязи1
  ПО втСвязи.П2 = втСвязи1.П1
     И втСвязи.П1 = втСвязи1.П2
     И втСвязи.П1 > втСвязи.П2
ГДЕ
  втСвязи1.П1 Есть NULL
55 Азазелло
 
18.09.12
16:33
(54) да, уже было в (32). Но все равно (38) круче )
56 Classic
 
18.09.12
16:34
(55)
Да, (38) крутяк
57 Ненавижу 1С
 
гуру
18.09.12
16:36
ну где мой приз ужо?
58 PR
 
18.09.12
16:36
+(48) Немного не логично получилось из-за синонима.
ВЫБРАТЬ Города.* ИЗ Города КАК Города1
ЛЕВОЕ СОЕДИНЕНИЕ Города КАК Города2
ПО Города1.Ссылка <= Города2.Ссылка

А если нужно именно из втСвязи выбрать, то
ВЫБРАТЬ втСвязи.* ИЗ втСвязи КАК втСвязи
ГДЕ втСвязи.Пункт1 <= втСвязи.Пункт2
59 Classic
 
18.09.12
16:36
Хотя не, не крутяк

При наборе
1 0

Он выдаст
0 1

Что не согласуется с задачей
60 Ненавижу 1С
 
гуру
18.09.12
16:39
(59) согласуется, порядок не важен
правильно писать не "аддитивные", а "неупорядоченные пары"
61 Азазелло
 
18.09.12
16:40
(59) почему нет? вполне согласуется, особенно в примере, приведенном в (51)
62 vmv
 
18.09.12
16:40
усложним задачу

(38) круто только для тех элементов таблиц которые можно сравнить посредством примитивного оператора "<" или меньше ">", а если условия задать так

"Трава душистая"  "Трава душистая"
"Трава душистая"  "Грибы маслянные"
"Грибы маслянные" "Трава душистая"
"Грибы маслянные" "Грибы маслянные"
"Трава зернистая" "Грибы сушоные"


то приплыли
63 Classic
 
18.09.12
16:40
(60)
Про порядок нигде не сказано
64 Ненавижу 1С
 
гуру
18.09.12
16:41
(62) в чем отличие
(63) телепатию надо прокачивать ))
65 PR
 
18.09.12
16:41
+(58) Или может получиться так, что есть запись
1 0
но нет записи
0 1
?

Если так, то решается так
ВЫБРАТЬ
втСвязи.Город1 КАК Город1,
втСвязи.Город2 КАК Город2
ИЗ втСвязи КАК втСвязи
ГДЕ втСвязи.Пункт1 <= втСвязи.Пункт2
ОБЪЕДИНИТЬ
ВЫБРАТЬ
втСвязи.Город2 КАК Город1,
втСвязи.Город1 КАК Город2
ИЗ втСвязи КАК втСвязи
ГДЕ втСвязи.Пункт1 > втСвязи.Пункт2

или как у гражданина, не знающего разницы между NULL и НЕОПРЕДЕЛЕНО :))
66 Азазелло
 
18.09.12
16:41
(63) да это я так условие задачи криво поставил
67 Classic
 
18.09.12
16:41
(62)
Во-первых на строках можно делать сравнение
Во-вторых см. во-первых
68 Ненавижу 1С
 
гуру
18.09.12
16:42
(65) с острил? иди учи уже что такое момент времени ))
69 PR
 
18.09.12
16:43
(68) Да я как бы в курсе :))
70 Ненавижу 1С
 
гуру
18.09.12
16:44
(69) ну сейчас то да, но недавно как бы был нет
71 Азазелло
 
18.09.12
16:45
Оффтоп. А кто без консоли скажет, что больше, ИСТИНА, или ЛОЖЬ? )
72 Ненавижу 1С
 
гуру
18.09.12
16:46
(71) ясно, что Истина, ведь Истина это 1, а Ложь это 0
73 PR
 
18.09.12
16:47
(70) Наглая ложь и провокация :))
74 Ненавижу 1С
 
гуру
18.09.12
16:49
(73) ну что-то было... да ладно не суть важно
про NULL и Неопределено это концепция целая, 1с ее приняла - получила свои плюсы и свои минусы
75 Азазелло
 
18.09.12
16:50
(72) не всегда
76 pessok
 
18.09.12
16:51
(75) шо?
77 Ненавижу 1С
 
гуру
18.09.12
16:51
78 vmv
 
18.09.12
16:51
скажем так - пары нетипизированы, что тогда?

а решение есть, его все прахадили, но забухались
79 ssh2006
 
18.09.12
16:52
(75) в СП


Если типы данных совпадают, то производится сравнение значений по следующим правилам:

у типа Булево значение ИСТИНА больше значения ЛОЖЬ;
80 Азазелло
 
18.09.12
16:52
(79) это в 1С :) в других ЯП не всегда ИСТИНА = 1
81 pessok
 
18.09.12
16:54
(80) примерчик, пожалуйста. ну тока не брейнфак
82 vmv
 
18.09.12
16:54
(80) это ущербные языки
83 PR
 
18.09.12
16:55
(77) И что именно ты нашел? 55 пост в той ветке не мой, если че. Точнее надо быть, точнее :))
84 Ненавижу 1С
 
гуру
18.09.12
16:57
(80) ну бывает и -1 также, наверное и не только
(83) там 55 и не мой тоже)) там и далее показывают твои "знания"
(78) ничего страшного, смотри:

ВЫБРАТЬ
   ЗНАЧЕНИЕ(Справочник.Качество.Новый) КАК Поле1,
   10 КАК Поле2
ПОМЕСТИТЬ Т

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

ВЫБРАТЬ
   "Вася",
   ЗНАЧЕНИЕ(ПЕРЕЧИСЛЕНИЕ.СтавкиНДС.НДС10)

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

ВЫБРАТЬ
   ЗНАЧЕНИЕ(ПЕРЕЧИСЛЕНИЕ.СтавкиНДС.НДС10),
   "Вася"
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
   ВЫБОР
       КОГДА Т.Поле1 < Т.Поле2
           ТОГДА Т.Поле1
       ИНАЧЕ Т.Поле2
   КОНЕЦ КАК Поле1,
   ВЫБОР
       КОГДА Т.Поле1 > Т.Поле2
           ТОГДА Т.Поле1
       ИНАЧЕ Т.Поле2
   КОНЕЦ КАК Поле2
ИЗ
   Т КАК Т
85 Азазелло
 
18.09.12
16:58
(81) У васика, например, тру = -1
86 Азазелло
 
18.09.12
17:01
+(85) ну, или когда работаешь с COM, например
87 PR
 
18.09.12
17:05
(84) Не вижу в той ветке демонстрации моих знаний по моменту времени, только по использованию максимума по моменту времени в запросе.
88 Ненавижу 1С
 
гуру
18.09.12
17:09
(87) этого достаточно
89 Ненавижу 1С
 
гуру
18.09.12
17:12
+(88) конкретно твои посты были 124-й, 130-й ну и далее, вот тут дал жару v8: как получить срез последних документов на дату
90 Axel2009
 
18.09.12
17:13
оо, я темнота оказывается
"Всем, кто не знает, как определить, какой из документов с одинаковой датой более поздний _быстро_ марш изучать матчасть!" =)
91 Kreont
 
18.09.12
17:20
(71) ИСТИНА канешно, так как 6 букв, ЛОЖЬ - 4 :)
92 Reset
 
18.09.12
17:25
Тогда уж ЛОЖЬ>, т.к. Л>И
93 Ненавижу 1С
 
гуру
18.09.12
17:25
(92) в английской версии наоборот ))
94 Kreont
 
18.09.12
17:26
(92) Дети в 1-3 классе тебе не поверят :)
95 Mafoni
 
18.09.12
17:28
(0) - тебе обязательно это делать запросом ?
96 Азазелло
 
18.09.12
17:34
(95) не запросом не интересно )
97 Kreont
 
18.09.12
17:49
Приходит еврей к раввину:
- Ребе, у меня гуси болеют!
- А чем ты их кормишь?
- Просом.
- Попробуй гречкой.
Через некоторое время еврей снова приходит:
- Ребе, они все равно болеют!
- А как ты им сыплешь корм?
- Кучкой.
- Попробуй треугольничком.
Через некоторое время:
- Ребе, они все равно болеют!
- Попробуй рис и квадратиком.
Наконец еврей сообщает:
- Ребе, все мои гуси сдохли все!

- Жаль! У меня было еще столько вариантов!
98 Mafoni
 
18.09.12
17:49
(96) - правильный ответ уже был ?
99 Азазелло
 
18.09.12
17:51
(98) посмотри (38)
100 salvator
 
18.09.12
17:51
Ну че, 100?
101 Mafoni
 
18.09.12
17:53
(99) все не читал ! :)
но свой запрос уже написал !!!


ВЫБРАТЬ "1" КАК Пункт1, "1" КАК Пункт2
ПОМЕСТИТЬ втСвязи
ОБЪЕДИНИТЬ ВЫБРАТЬ "1", "2"
ОБЪЕДИНИТЬ ВЫБРАТЬ "2", "1"
ОБЪЕДИНИТЬ ВЫБРАТЬ "2", "2"
ОБЪЕДИНИТЬ ВЫБРАТЬ "2", "3"
ОБЪЕДИНИТЬ ВЫБРАТЬ "1", "3"
ОБЪЕДИНИТЬ ВЫБРАТЬ "3", "1";


ВЫБРАТЬ РАЗЛИЧНЫЕ тз.Пункт1 , тз.Пункт2 ИЗ (
ВЫБРАТЬ
ВЫБОР КОГДА втСвязи.ПУНКТ1 > втСвязи.ПУНКТ2
   ТОГДА втСвязи.ПУНКТ2
   ИНАЧЕ втСвязи.ПУНКТ1
КОНЕЦ КАК Пункт1,
ВЫБОР КОГДА втСвязи.ПУНКТ1 > втСвязи.ПУНКТ2
   ТОГДА втСвязи.ПУНКТ1
   ИНАЧЕ втСвязи.ПУНКТ2
КОНЕЦ КАК Пункт2
ИЗ
   втСвязи КАК втСвязи) КАК ТЗ
ГДЕ тз.Пункт1 <> тз.Пункт2    ;


УНИЧТОЖИТЬ втСвязи;
102 Азазелло
 
18.09.12
18:01
(101) вот это тз.Пункт1 <> тз.Пункт2    - лишнее
103 prog01
 
18.09.12
18:08
(0)а ты вакансию открой и всё тебе соискатели порешают
сейчас все бедные родственники учредителя на должности начальников отделов так и делают
104 Mafoni
 
18.09.12
18:19
(102) - чего ж лишнее этим условием я убираю маршруты где пункт назначения равен пункту отправки
хотя если оно надо то можно это условие оставить
105 PR
 
18.09.12
18:35
(89) Так я и написал, что про запрос лажанул, да.
Но как из этого следует, что я не знаю, что такое момент времени документа?
106 Ненавижу 1С
 
гуру
18.09.12
21:45
(105) довольно тяжбу вести, зря я начал, прошу прощения уже я
107 rphosts
 
19.09.12
06:29
ну так что решили уже?
свой вариант: тупо отбираем с условием: (Поле1 = Поле2) ИЛИ (Поле1 < Поле2)
108 PR
 
19.09.12
11:57
(107) Вообще-то (58).
109 rphosts
 
19.09.12
14:23
(108) кстати да! почему-бы не 1 условие вместо 2... вот так всегда до 1 дозы кофе!
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший