|
v7: Как сделать аналог левого соединения в 7.7? | ☑ | ||
---|---|---|---|---|
0
patapum
22.02.13
✎
14:55
|
Задача стоит так - мне надо выдать те счета, по которым есть резерв, но нет оплаты.
Можно ли такое выловить запросом? Если нет, то как искать в коде? У документа нет метода НайтиПоРеквизиту... |
|||
1
mikecool
22.02.13
✎
14:57
|
прямой запрос
|
|||
2
Cap_1977
22.02.13
✎
14:58
|
Бухнятисзик?
|
|||
3
patapum
22.02.13
✎
15:00
|
(1) а штатными методами никак?
(2) опер. учет, самописка |
|||
4
ДенисЧ
22.02.13
✎
15:01
|
(3) А чем тебе ВК - не штатный метод? :-)
|
|||
5
patapum
22.02.13
✎
15:04
|
(4) готовить их не умею. а учиться неинтересно, делаем переход на 8, а сейчас иногда дыры позатыкать надо.
все-таки, можно как-то без запросов в цикле и подобных извращений задачу решить? |
|||
6
Cap_1977
22.02.13
✎
15:06
|
(3) Структуру регистров давай
|
|||
7
Стрелок
22.02.13
✎
15:07
|
Два запроса. первый по документу "счёт". Второй по регистру оплат с фильтром по списку счетов
|
|||
8
patapum
22.02.13
✎
15:10
|
(6) я еще не такой ленивый, сам хочу написать )))
(7) второй выгрузить в ТЗ и в ней искать? |
|||
9
Стрелок
22.02.13
✎
15:13
|
(8) в первом ты получаешь список счетов с резервом (условие такое поставишь). А вторым получаешь оплаты только по этим счетам. Функция СуммаОплаты. Выгрузка в ТЗ. Дальше у тебя в первой ТЗ - все счета, во второй - только оплаченные. разница - неоплаченные с резервом
|
|||
10
patapum
22.02.13
✎
15:16
|
(9) ну да, понял, спасибо! отвык по-семерочному думать )))
|
|||
11
GANR
22.02.13
✎
15:37
|
(0) в 7.7 можно ОБЪЕДИНИТЬ ВСЕ и ГРУППИРОВКИ, а с помощью последнего можно сделать ЛЕВОЕ и ПОЛНОЕ соединение. Как?
Прошу немного подумать... |
|||
12
GANR
22.02.13
✎
15:38
|
(10) так привыкай думать правильно - в один запрос чтобы (11)
|
|||
13
NS
22.02.13
✎
15:39
|
Двумя запросами легко. Формируешь список по которым есть оплата, и исключаешь их во втором запросе.
А что за ограничения - "одним запросом"? |
|||
14
NS
22.02.13
✎
15:41
|
(12) "в один запрос" и "думать правильно" - это далеко не одно и то же.
|
|||
15
GANR
22.02.13
✎
15:41
|
(13) Ну зачем в коде кромсать выборку - как-то не по фэншую это?
|
|||
16
GANR
22.02.13
✎
15:42
|
(14) не всегда, иногда ТЗ эффективнее запроса
|
|||
17
NS
22.02.13
✎
15:43
|
(16) Ладно префразирую. Ограничения типа - используя только сложение, не используя умножения, одним запросом - с понятием нормального программиста не совместимы совсем.
|
|||
18
GANR
22.02.13
✎
15:43
|
+(16) например, пронумеровать 10000 записей, выгрузив их в ТЗ быстрее, чем Книга знаний: v8: Нумерация строк в запросе
|
|||
19
NS
22.02.13
✎
15:43
|
(16) А ТЗ тут каким боком? Если используешь во втором запросе условие - то используется СЗ, а не ТЗ.
|
|||
20
GANR
22.02.13
✎
15:47
|
(19) как-то так, что ли? тоже можно
ВЫБРАТЬ А.ПолеА, Б.ПолеБ ИЗ А,Б ГДЕ А.ПолеВ = Б.ПолеВ просто года 4 уже на 7.7 запросы не писал ((( |
|||
21
NS
22.02.13
✎
15:51
|
У тебя первый запрос получает список оплаченных счетов.
Во втором нужны только не оплаченные, так и пишешь Если СЗОплат.Размерсписка()=0 тогда // ничего не надо исключать; Иначеесли СЗОплат.РазмерСписка()=1 тогда ОплДок=СЗОплат.ПОлучитьЗначение(1); ТекстЗАпроса=ТекстЗапроса+"Условие (ДокСЧ<>ОплДок);"; // обход глюка с условием по списку; Иначе ТекстЗапроса=ТекстЗапроса+"Условие (не(ДокСЧ в СЗОплат));"; КонецЕсли; |
|||
22
Стрелок
22.02.13
✎
15:54
|
(11) Ой а дай примерчик. я например и не отвыкал думать по семёрошному но вот представить себе не могу. напиши что ли
|
|||
23
GANR
22.02.13
✎
16:04
|
(22) Разве нельзя, например, объединить данные из ТЧ документа и регистра ОстаткиНоменклатуры, сгруппировать по Номенклатуре из Документа взять Количество, а из регистра КоличествоОстаток? Но вот, правда, как определить какая номенклатура есть только в документе, только в регистре, а какая - тут и там. Никак??? Может и нельзя...
|
|||
24
GANR
22.02.13
✎
16:09
|
||||
25
Стрелок
22.02.13
✎
16:20
|
(23) Это семёрко бро....
тут не так просто хотя иногда срабатывает. Не видя структуры регистра оплат тяжело сказать. По опыту - связка документа и регистра в одном флаконе может давать пустые группировки. |
|||
26
Classic
22.02.13
✎
16:21
|
(11)
С помощью объединить и сгруппировать в общем случае сэмулировать ПОЛНОЕ СОЕДИНЕНИЕ нельзя. Доказательство: Количество строк при полном соединении двух таблиц размером M и N равно M*N При объединении M + N. Группировка количество строк увеличить не может |
|||
27
GANR
22.02.13
✎
16:26
|
(26) Тут имеет место, если быть точным, полное соединение ПО УСЛОВИЮ. (25) В 7.7 аналога ВЫБОР КОГДА... нету ???
|
|||
28
GANR
22.02.13
✎
16:28
|
Самому давно уже было интересно - вдруг можно ЛС и ПС в 7.7.
|
|||
29
Стрелок
22.02.13
✎
16:28
|
(27) "когда" есть только у функции увы
|
|||
30
Classic
22.02.13
✎
16:30
|
(27)
В принципе без разницы, с условием или нет. Даже по условию размер результирующей таблицы может вырасти в 2 раза при присоединении значительно меньшей таблицы. Теоретически можно реализовать "разовое" соединение. Частный случай, его и надо рассматривать. С удовольствием прослежу за результатом :) |
|||
31
GANR
22.02.13
✎
16:30
|
(29) Тогда остается забацать в глобальный модуль функции для 7.7-запросов и всё через них крутить.
|
|||
32
Classic
22.02.13
✎
16:31
|
(29)
Зато на функцию можно условие ставить. Теоретически эта связка допускает эмуляцию ВЫБОР КОГДА в простейших случаях |
|||
33
GANR
22.02.13
✎
16:35
|
(29)(32) А обращение к функции из запроса в 7.7 отладчиком ловится?
|
|||
34
GANR
22.02.13
✎
16:37
|
Сам попробовать не могу - постирал 7.7 отовсюду, откуда только мог ))).
|
|||
35
GANR
24.02.13
✎
15:23
|
(22) Кажется, в сообщении №70 ветки Сколько юзеров может работать одновременно в базе? отличный пример, спасибо Fragster.
|
|||
36
GANR
24.02.13
✎
15:25
|
(22) Fragster
70 - 24.02.13 - 15:16 Давно это было, но типа Период с ВыбНачПериода по ВыбКонПериода; |Аналитика1 = Регистр.МойРегистр.Аналитика1, Справочник.Аналитика1.ТекущийДокумент ВСЕ; |Аналитика2 = Регистр.МойРегистр.Аналитика2; |Функция КоличествоРасход = Расход(Количество); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |