Имя: Пароль:
1C
1С v8
Как выбрать максимальное значение в запросе?
0 sapravka
 
02.05.14
23:27
Здравствуйте!
Если что то не так - прошу сильно не винить.
В УТ 10.3 делаю простой запрос - вывожу список номеров договоров в запросе:

ВЫБРАТЬ
    ДоговорыКонтрагентов.Номер КАК НомерДоговора
ИЗ
    Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов

И вот получаю такие результаты - вот рисунок:
http://волгалаб.рф/1c/162.jpg
Максимальный номер - 320.
А вот когда делаю вот такой запрос:

ВЫБРАТЬ ПЕРВЫЕ 1
    ДоговорыКонтрагентов.Номер КАК НомерДоговора
ИЗ
    Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов

УПОРЯДОЧИТЬ ПО
    ДоговорыКонтрагентов.Номер УБЫВ

А тут получаю такие результаты, вот рисунок:
http://волгалаб.рф/1c/163.jpg
То почему то получается - 99.
Убедительно прошу, подскажите пожалуйста, как в запросе реализовать выборку последнего номера(максимального)?
1 vi0
 
02.05.14
23:29
видимо это строка и "99..." действительно - максимум
2 sapravka
 
02.05.14
23:35
(1) А как это может быть?
А как реализовать в запросе так, что бы (в данной примере имеется ввиду) выбиралось 320 ?
3 AlteZ
 
02.05.14
23:35
извини, бро, если мимо, но разве "первые 1" не выбирает первую запись из таблицы?
почему бы не
выбрать максимум(ДоговорыКонтрагентов.Номер) ?
4 EvgeniuXP
 
02.05.14
23:38
потому что "9" больше "3" - всё правильно.
5 sapravka
 
02.05.14
23:52
(3) Тоже 99 показывает
Но вот почему???
6 Aleksey
 
02.05.14
23:53
(5) потому что
строка 99 > чем строка 100
7 Aleksey
 
02.05.14
23:54
ибо 9 > 1
8 sapravka
 
03.05.14
00:01
(7) А как это может быть?
А можно как то в запросе выбирать последнюю стоку (строка - число?)?
9 Torquader
 
03.05.14
00:02
(8) Пойми, наконец, разницу между строками и числами.
10 Aleksey
 
03.05.14
00:03
(8) строка не число, строка это строка. И от того что она выглядит как число он не становится числом
11 Torquader
 
03.05.14
00:08
(10) Просто, некоторые, когда сортируют файлы в Windows и видят чудо - верят в то, что это будет так всегда.
12 sapravka
 
03.05.14
00:13
А как тогда сделать сортировку по чилу, а не по строке?
13 шаэс
 
03.05.14
00:14
(11) т.е. в запросе выбрать все, преобразовать результат в число и отсортировать? или в запросе сразу преобразовать можно?
14 vi0
 
03.05.14
00:14
приводи к числу
правда сам запрос неоптимальный будет, даже если проиндексируешь по номеру
15 newjon
 
03.05.14
00:16
выразить (НомерДоговора как число (10)) или сколько у тебя символово в договоре
16 newjon
 
03.05.14
00:17
да тут еще и сайте рекламируют
17 Torquader
 
03.05.14
00:19
(13) Вам опять поговорить не с кем ?
18 neo_matrix_123
 
03.05.14
00:23
(0) вот только что будет, если кому-то приспичит забить в номер договора что-то типа 01/03-07?
19 шаэс
 
03.05.14
00:23
(17) мне ответ интересен.
20 Torquader
 
03.05.14
00:24
(18) Исключение будет, а если преобразовать в запросе - то преобразовывать будет SQL и получит из "01/03-07" значение "1".
21 sapravka
 
03.05.14
00:25
(15)  Можно немного поподробнее, как это в запросе реализовать?

(18) А как тогда быть?
22 Torquader
 
03.05.14
00:26
(21) В 1С нет сортировки через внешнюю функцию - она здесь как раз кстати.
23 Torquader
 
03.05.14
00:26
Хотя, как сравнить 009 и 01/03-07 ???
24 neo_matrix_123
 
03.05.14
00:28
(21) предусматривать такой вариант развития событий перед записью нового договора, например. это вопрос существующих правил регистрации договоров. только на практике одними циферками не обходится, увы
25 Torquader
 
03.05.14
00:32
(24) Я бы, всё-таки, сортировал бы как строки, но дописывал нули в начале.
26 sapravka
 
03.05.14
00:34
А как тогда лучше сделать?
27 neo_matrix_123
 
03.05.14
00:34
(25) может к началу задачки вернуться? зачем нужна сортировка по номеру договора дабы найти "крайний"?
28 sapravka
 
03.05.14
00:35
(24) Да найти максимальный номер(число) с помощью запроса.
29 sapravka
 
03.05.14
00:47
(28) А  пример, можно в студию?
30 EvgeniuXP
 
03.05.14
01:43
(26) при записи документа записывай в реквизит число и тащи в запросе.
31 sapravka
 
03.05.14
01:59
(30) а в самом запросе - это как можно реализовать?
32 sapravka
 
03.05.14
02:16
Вот в запросе пытаюсь прописать:
ВЫРАЗИТЬ((ДоговорыКонтрагентов.Номер) КАК ЧИСЛО)
Но что то ругается...
33 Aleksey
 
03.05.14
02:42
(28) а вот дальше будет интересно, ибо нумерация идёт в течении года (!), т.е. обычно в январе 1 договор имеет номер 1
34 Мимохожий Однако
 
03.05.14
07:25
В СКД можно при вычислении указать функцию общего модуля, которая будет выделять число из строки.
35 zippygrill
 
03.05.14
09:46
Выразить(&номерСтрокогоТипа как число(15.2))
36 ДенисЧ
 
03.05.14
09:59
(35) Что пил?
37 Обработка
 
03.05.14
11:15
(0) Я бы задачу решил с другого конца.
Перенумеровал бы все номера догвооров как следует.
Например 99 на 00099 итп и тогда 00320 точно будет больше чем 00099.
Как вариант превратить их в числовое поле.
И не надо тогда парить себя мозг.

А если мешают нули при выводе на печать то их всегда можно убрать...
38 Torquader
 
03.05.14
13:05
(37) Добавлять нули - убирать нули - следить, чтобы пользователи число написали с правильным числом нулей.

Число - и всё само решится.
Если нужны номера с галочками и т.п. - поле "входящий номер" избавит от всяких вопросов.
39 sapravka
 
03.05.14
17:13
А подскажите пожалуйста еще:
Вот написал:

Пока НомерСпецификации.Следующий() Цикл
            Если НомерСпецификации.НомерСпецификацииНужный = Null  Тогда
                Если НомерСпецификации.НомерСпецификацииНужный = 0 Тогда
                    Движение.НомерСпецификации = 1;
                Иначе
                    НомерНаОдинБольше = НомерСпецификации.НомерСпецификацииНужный + 1;
                    Движение.НомерСпецификации = НомерНаОдинБольше;
                КонецЕсли;
            Иначе
                НомерНаОдинБольше = НомерСпецификации.НомерСпецификацииНужный + 1;
                Движение.НомерСпецификации = НомерНаОдинБольше;
            КонецЕсли;
КонецЦикла;

Но почему то при проведении документа получается:
http://волгалаб.рф/1c/166.jpg
То есть первый номер спецификации вообще ничего не ставит, так как его еще нет...
Подскажите, какое поставить условие, что бы номер 1 ставился...
Я просто уже много перепробовал, но почему то первый номер вообще ничего не ставит, а уже со второго начинает плюсовать по 1, а вот необходимо что бы с первого номера плюсовать по одному....
40 Обработка
 
03.05.14
18:21
(38) А зачем следить? Ведь 1С делает автонумерацию сама.

Я всгда был против того чтоб номера трогал юзеры.
41 MKZM
 
03.05.14
18:40
Если НомерСпецификации.НомерСпецификацииНужный = Null  Тогда
                Если НомерСпецификации.НомерСпецификацииНужный = 0 Тогда
Забавно.
42 Torquader
 
03.05.14
18:46
(41) Видимо, про ИЛИ человек не знает.
43 sapravka
 
03.05.14
19:50
(42) да ИЛИ тоже ставил, но все равно не ставить первый номер 1 - вообще ничего не ставит

Подскажите, что прописать - если вообще ничего нет - что бы 1 ставил в номере...
44 hhhh
 
03.05.14
20:02
(43) ну вот ты пишешь

     Если НомерСпецификации.НомерСпецификацииНужный = Null  Тогда

а потом вдруг

НомерНаОдинБольше = НомерСпецификации.НомерСпецификацииНужный + 1;

разве можно к NULL добавлять 1? Ведь бред.
45 sapravka
 
03.05.14
20:36
(44) Да так тоже пробывал:
Если НомерСпецификации.НомерСпецификацииНужный = НЕОПРЕДЕЛЕНО  Тогда

все равно как бы вообще проскакивает при создании и вообще никакакой номер не создает
46 hhhh
 
03.05.14
20:41
(45) ну запомните

Null + 1 = Null
47 Адимр
 
03.05.14
21:59
Вопрос на засыпку, а что больше число 5 или пустая строка ""? :))
48 Torquader
 
03.05.14
22:08
(47) Исключение, которое вернёт такое сравнение, больше ^_^