Имя: Пароль:
1C
1C 7.7
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;
|Функция КоличествоРасход = Расход(Количество);
2 + 2 = 3.9999999999999999999999999999999...