Имя: Пароль:
1C
1С v8
Вывести количество записей в запросе
,
0 vse_serjezno
 
19.11.13
13:24
Здравствуйте.
Подскажите, пожалуйста, как в таком запросе:
    Запрос.Текст =
    "ВЫБРАТЬ ПЕРВЫЕ 1
    |    НумерацияКодов.НомерОтправления
    |ИЗ
    |    РегистрСведений.ИПМ_НумерацияКодов КАК НумерацияКодов
    |ГДЕ
    |    НЕ НумерацияКодов.НомерОтправления В
    |                (ВЫБРАТЬ
    |                    ТЧ.НомерОтправления
    |                ИЗ
    |                    РегистрСведений.ИПМ_СоответствиеОтгрузокИНомеровПочтовыхОтправлений КАК ТЧ
    |        
    |                ОБЪЕДИНИТЬ ВСЕ
    |        
    |                ВЫБРАТЬ
    |                    ИПМ_ОтгрузкаНаТранспортнуюКомпаниюЗаказыКлиентов.НомерОтправления
    |                ИЗ
    |                    Документ.ИПМ_ОтгрузкаНаТранспортнуюКомпанию.ЗаказыКлиентов КАК ИПМ_ОтгрузкаНаТранспортнуюКомпаниюЗаказыКлиентов
    |                ГДЕ
    |                    НЕ ИПМ_ОтгрузкаНаТранспортнуюКомпаниюЗаказыКлиентов.Ссылка.ПометкаУдаления)
    |    И (ВЫРАЗИТЬ(НумерацияКодов.НомерОтправления КАК СТРОКА(6))) = &Индекс
    |    И НумерацияКодов.Регистратор.Посылки = &Посылки
    |
    |УПОРЯДОЧИТЬ ПО
    |    НумерацияКодов.НомерОтправления";


Вывести количество всех найденных номеров отправления.

Попробовала так:
"ВЫБРАТЬ ПЕРВЫЕ 1
    |    НумерацияКодов.НомерОтправления,
    |    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ НумерацияКодов.НомерОтправления) КАК КоличествоНомеров
    |ИЗ
    |    РегистрСведений.ИПМ_НумерацияКодов КАК НумерацияКодов
    |ГДЕ
    |    НЕ НумерацияКодов.НомерОтправления В
    |                (ВЫБРАТЬ
    |                    ТЧ.НомерОтправления
    |                ИЗ
    |                    РегистрСведений.ИПМ_СоответствиеОтгрузокИНомеровПочтовыхОтправлений КАК ТЧ
    |        
    |                ОБЪЕДИНИТЬ ВСЕ
    |        
    |                ВЫБРАТЬ
    |                    ИПМ_ОтгрузкаНаТранспортнуюКомпаниюЗаказыКлиентов.НомерОтправления
    |                ИЗ
    |                    Документ.ИПМ_ОтгрузкаНаТранспортнуюКомпанию.ЗаказыКлиентов КАК ИПМ_ОтгрузкаНаТранспортнуюКомпаниюЗаказыКлиентов
    |                ГДЕ
    |                    НЕ ИПМ_ОтгрузкаНаТранспортнуюКомпаниюЗаказыКлиентов.Ссылка.ПометкаУдаления)
    |    И (ВЫРАЗИТЬ(НумерацияКодов.НомерОтправления КАК СТРОКА(6))) = &Индекс
    |    И НумерацияКодов.Регистратор.Посылки = &Посылки
    |
    |СГРУППИРОВАТЬ ПО
    |    НумерацияКодов.НомерОтправления
    |
    |УПОРЯДОЧИТЬ ПО
    |    НумерацияКодов.НомерОтправления";

В количество выводится КОЛИЧЕСТВО ПЕРВЫХ : 1.
1 Wobland
 
19.11.13
13:26
ну вот и убери первые 1
2 Бешеная Нога
 
19.11.13
13:27
выбери первые из ТАБЛИЦЫ и присоедини к ней сверную ТАБЛИЦУ с функцией КОЛИЧЕСТВО
3 1dvd
 
19.11.13
13:27
Мне нужно из мешка достать одно яблоко, я достаю. Сколько яблок у меня в руке?
4 Max Street
 
19.11.13
13:31
ВыборкаДетальныеЗаписи.Количество()
5 Wobland
 
19.11.13
13:32
(3) а сколько яблок у тебя было _до_ операции с мешком?
6 1dvd
 
19.11.13
13:34
(5) этого не узнать, не выпотрошив мешок
7 vse_serjezno
 
19.11.13
13:45
(4) Так количество будет 1 равно.
8 Wobland
 
19.11.13
13:49
может, запрос подправить?
9 vse_serjezno
 
19.11.13
13:53
(8) Вопрос как бы так и стоит. Как узнать количество записей, но выбрать из них при этом только одну. Ну или несколько первых, не суть.
10 WildSery
 
19.11.13
13:53
ВЫБРАТЬ
    МИНИМУМ(НумерацияКодов.НомерОтправления) КАК НомерОтправления,
    КОЛИЧЕСТВО(НумерацияКодов.НомерОтправления) КАК КоличествоНомеров
11 WildSery
 
19.11.13
13:54
(10) Группировать ни по чём не надо, только.
А то некоторые теряются, когда нет неагрегатных полей.
12 vse_serjezno
 
19.11.13
13:56
(10) Минимальное значение для меня не имеет значение.
В запросе может быть выбрана не 1 запись, а сколько понадобится в документе.
13 Рэйв
 
19.11.13
13:57
(9)Выполнить запрос без Первые N, получить количество строк.
Выполнить его же с Первые N

Больше никак.
Только нафик тебе эта инфа по количесту строк , я вот  не пойму
14 Рэйв
 
19.11.13
13:59
+(13)Хотя можно еще выполнить без Первые N, а потом при переборе результата отсчитать нужное количество по счетчику и
Прервать;
15 WildSery
 
19.11.13
14:00
(12) ... а вот тут мы ещё в неё рыбу заворачиваем.
Каков был вопрос, таков и ответ. Новые условия - новая задача.
16 vse_serjezno
 
19.11.13
14:01
(13) Т.е.сделать тупо 2 запроса? Я думала так, то это костыль какой-то получается, два раза один и тот же запрос выполнять - на производительности плохо скажется...

Мне нужно знать, сколько номеров в РС еще осталось, чтобы при малом остатке запросить новые.
17 vhl
 
19.11.13
14:02
ВЫБРАТЬ
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ НумерацияКодов.НомерОтправления
) КАК КОЛИЧЕСТВО_НомерОтправления
18 zakidonoff
 
19.11.13
14:02
(16) Запрос на количество много времени не займёт
19 vse_serjezno
 
19.11.13
14:03
(15) Реализовано все, кроме вывода количества записей всего.
Я же не спрашиваю, как мне менять количество первых выводимых записей. Я это реализовала уже.
20 1dvd
 
19.11.13
14:03
Запрос.Текст =     "ВЫБРАТЬ
    |    Количество(НомераОтправления.НомерОтправления) КАК Количество
    |ИЗ
    |(ВЫБРАТЬ
    |    НумерацияКодов.НомерОтправления
    |ИЗ
    |    РегистрСведений.ИПМ_НумерацияКодов КАК НумерацияКодов
    |ГДЕ
    |    НЕ НумерацияКодов.НомерОтправления В
    |                (ВЫБРАТЬ
    |                    ТЧ.НомерОтправления
    |                ИЗ
    |                    РегистрСведений.ИПМ_СоответствиеОтгрузокИНомеровПочтовыхОтправлений КАК ТЧ
    |        
    |                ОБЪЕДИНИТЬ ВСЕ
    |        
    |                ВЫБРАТЬ
    |                    ИПМ_ОтгрузкаНаТранспортнуюКомпаниюЗаказыКлиентов.НомерОтправления
    |                ИЗ
    |                    Документ.ИПМ_ОтгрузкаНаТранспортнуюКомпанию.ЗаказыКлиентов КАК ИПМ_ОтгрузкаНаТранспортнуюКомпаниюЗаказыКлиентов
    |                ГДЕ
    |                    НЕ ИПМ_ОтгрузкаНаТранспортнуюКомпаниюЗаказыКлиентов.Ссылка.ПометкаУдаления)
    |    И (ВЫРАЗИТЬ(НумерацияКодов.НомерОтправления КАК СТРОКА(6))) = &Индекс
    |    И НумерацияКодов.Регистратор.Посылки = &Посылки) КАК НомераОтправления";
21 FidelBoom
 
19.11.13
14:14
Вот написал на примере справочника номенклатура
ВЫБРАТЬ
    КОЛИЧЕСТВО(Номенклатура.Ссылка) КАК Количетство
ПОМЕСТИТЬ ВТ
ИЗ
    Справочник.Номенклатура КАК Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ ПЕРВЫЕ 1
    Номенклатура.Ссылка,
    ВТ.Количетство
ИЗ
    ВТ КАК ВТ
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
        ПО (ИСТИНА)


ДУМАЮ СМЫСЛ ПОНЯТЕН!
22 FidelBoom
 
19.11.13
14:14
Результат был следующим - одна строка

Ссылка                                Количество
Телевизор                             44
23 vhl
 
19.11.13
14:18
(21) так короче будет:
ВЫБРАТЬ
    Количество(1)
ИЗ
    Справочник.Номенклатура КАК Номенклатура
24 1dvd
 
19.11.13
14:19
(23) а так ещё короче:

ВЫБРАТЬ 1
25 FidelBoom
 
19.11.13
14:20
(23) Согласен.
26 vhl
 
19.11.13
14:21
(24) Работает, спасибо! :)
27 FidelBoom
 
19.11.13
14:23
(24) (26) Поподробнее можно, я недогнал.
28 1dvd
 
19.11.13
14:25
(27) ты скажи зачем соединяешь со справочником номенклатуры во втором запросе?
29 FidelBoom
 
19.11.13
14:28
(28) Хз, плохая привычка. спс
30 hhhh
 
19.11.13
15:15
(19) зачем при каждом чихе проверять, сколько осталось. Это же всё медленно. Еще больший костыль. Проверяйте раз в месяц регламентным заданием.
31 vhl
 
19.11.13
15:27
(30) А еще можно через попытку записывать в регистр, и если не получилось записать - значит уже кончилось. И без всяких проверок :))
32 vse_serjezno
 
19.11.13
15:30
(30) Эти номера списывает документ. Если не привязывать проверку к нему, то можно пропустить момент, когда номера закончатся.
Прям как календарь Майя - когда закончатся числа!..;)))
33 vse_serjezno
 
19.11.13
15:33
(31) Там механизм другой.
Почта выделяет организации диапазон. В программу он заносится документом 1 в РС, списываются номера из этого диапазона другим документом, и этот другой документ может списать 1 номер, а может 150, в зависимости от строк ТЧ.
34 vse_serjezno
 
19.11.13
15:54
Да, как-то жутко долго получается...
35 WildSery
 
19.11.13
16:55
(34) это потому, что Документ.ИПМ_ОтгрузкаНаТранспортнуюКомпанию.ЗаказыКлиентов, Регистратор.Посылки и остальное г-но постоянно подтягивается.

Схема данных ужас-ужас получилась.
36 zakidonoff
 
19.11.13
17:35
(34) Заведи переменную в регистром сведений, хранящую массив оставшихся номерови повесь на него регистраторами все документы, производящие движения по номерам. Тогда этот гроб в скобочках после слов "НЕ НумерацияКодов.НомерОтправления В" уйдёт в прошлое как страшный сон и останется левое соединение по этому регистру
37 vhl
 
19.11.13
17:51
(33) Заведи регистр остатков "ОстаткиНомеров". При выделении Почтой - делай поступления новых номеров, при списании РС - списывай по фифо. Получишь нормальный контроль остатков и всегда сможешь посмотреть какие и сколько номеров свободные 1 простым запросом к 1й таблице.
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший