Имя: Пароль:
1C
1С v8
Максимальный номер документа
🠗 (Волшебник 10.11.2017 07:25)
, ,
0 antihacker
 
10.11.17
06:57
Всем привет !

Нужно найти макимальный номер документа. Номера выглядит так PKKR1,PKKR2,,,PKKR12

Вот запрос

Запрос = Новый Запрос;
    Запрос.Текст ="ВЫБРАТЬ МАКСИМУМ(Проекты.номер) КАК Ссылка ИЗ Документ.Проекты КАК Проекты Где Проекты.Организация = &Организация";
    
    Запрос.УстановитьПараметр("Организация",ТекущийОбъект.Организация);
    
    РезЗапрос = Запрос.Выполнить().Выбрать();
    
    сообщить(РезЗапрос.Количество());
    
    Если  РезЗапрос.Количество() > 0 Тогда

          РезЗапрос.Следующий();
          //Пока РезЗапрос.Следующий() Цикл
            
               Если РезЗапрос.Ссылка <> null Тогда
                  
                    КолСимволов = СтрДлина(РезЗапрос.Ссылка)-4;
                    
                    сообщить(РезЗапрос.Ссылка);
                    
                    НомерБезСуфикса = Число(?(Прав(РезЗапрос.Ссылка,КолСимволов)=null,0,Прав(РезЗапрос.Ссылка,КолСимволов)));
                    
                    сообщить(НомерБезСуфикса);
                    
                    НомерДокумента =  ТекущийОбъект.Организация.Суффикс + СокрЛП(Число(НомерБезСуфикса+1));
                    
                    сообщить(НомерДокумента);
                    
                Иначе
                    
                    НомерДокумента =  ТекущийОбъект.Организация.Суффикс  + 1;

                КонецЕсли;    
              
            
         // КонецЦикла;
    Иначе
        
          НомерДокумента = ТекущийОбъект.Организация.Суффикс+"000000001";
        
    КонецЕсли;


Почему то сообщить(РезЗапрос.Ссылка) постоянно показывает PKKR9. Почему ? Если удалить документы до PKKR8 или PKKR7, то все работает нормально.
1 torgm
 
10.11.17
06:59
(0)  потомучто строка
2 1dvd
 
10.11.17
07:00
PKKR9 больше чем PKKR10
3 antihacker
 
10.11.17
07:04
он что нули срезает ?
4 VladZ
 
10.11.17
07:04
(0) Потому что сравнение идет строки со строкой (!!!). Первые четыре символа у нас одинаковые. Пятый символ у первого документа ("9") больше чем "1" у второго. По правилам  сравнения строк (!!! еще раз повторю: строк!!!!) PKKR9 > PKKR10.
5 antihacker
 
10.11.17
07:04
Теперь искать по максимуму даты дока ?
6 VladZ
 
10.11.17
07:04
Если нужно сравнивать числа - приводите к числу.
7 VladZ
 
10.11.17
07:05
По правилам сравнения чисел 10 > 9
8 VladZ
 
10.11.17
07:07
Проекты - это что? Справочник?
9 shadow_sw
 
10.11.17
07:07
читай (4)-(7) убери префикс, и сравнивай числа
10 VladZ
 
10.11.17
07:08
У любого справочника уже есть механизм обеспечения нумерации и уникальности. Это реквизит Код. Вместо "Проекты.номер" используй "Проекты.Код". Нумерацию кода привяжи к организации. И не будет надобности изобретать велосипед.
11 antihacker
 
10.11.17
07:10
Это самописная конфига. С нуля.
12 1dvd
 
10.11.17
07:11
(11) никакой роли не играет сей довод
13 VladZ
 
10.11.17
07:13
Ну и если теперь все переделывать на код нереально (ошибки при проектировании структуры базы случаются. Тут изначально нужно включать "чуйку"). Можно делать так: структура номера должна быть <префикс номера><Порядковый номер по порядку>. <префикс номера> - это ваши "волшебные буквы" PKKR. <Порядковый номер по порядку> - номер в виде 0000000001 (количество символов нужно продумать заранее).
14 antihacker
 
10.11.17
07:13
Как ? Ну там нету такого реквизита
15 youalex
 
10.11.17
07:14
(3) "9" > "1"
16 VladZ
 
10.11.17
07:14
(11) А, ну-ну....  Кладезь технических решений разных программистов (читать как "набор костылей").
17 antihacker
 
10.11.17
07:14
Какая разница ?

Все равно выдет так PKKR0000010 < PKKR000009
18 1dvd
 
10.11.17
07:15
(14) УстановитьНовыйНомер(<ПрефиксНомера>)
19 antihacker
 
10.11.17
07:15
VladZ, у нас есть работа. потому что есть костыли
20 VladZ
 
10.11.17
07:17
(17) Количество разрядов для цифр должна быть одинаковая.

0000010 - 7 разрядов, 000009 - 6 разрядов. Плохой пример.
21 youalex
 
10.11.17
07:19
(19) Девиз у тебя уже есть. Осталось придумать герб
22 antihacker
 
10.11.17
07:24
То есть если количество разрялов одинаковые

то 0000010 >0000009   ?
23 Волшебник
 
модератор
10.11.17
07:25
(22) проверь в табло
24 antihacker
 
10.11.17
07:26
Волщебник не понял
25 VladZ
 
10.11.17
07:29
(22) При сравнении строк программа сверяет посимвольно. Первый символ с первым, второй со вторым и т.д. Проверь.
26 1dvd
 
10.11.17
07:29
(24) всё он понял и дал правильный совет
27 antihacker
 
10.11.17
07:32
ВолщебЭто я не понял о чем Волшебник
28 VladZ
 
10.11.17
07:33
(27) Что именно не понятно? Открываешь табло и пишешь "0000010" > "0000009"
29 VladZ
 
10.11.17
07:33
Или ты не знаешь что такое "табло"?
30 VladZ
 
10.11.17
07:34
Или ты не знаешь что такое "проверь"? :)
31 antihacker
 
10.11.17
07:34
Како еще табло ?
32 shadow_sw
 
10.11.17
07:36
(31) пятнично
33 VladZ
 
10.11.17
07:39
(31) Мальчик, отойди от компьютера и позови взрослых.
34 1dvd
 
10.11.17
07:40
(31) гугель в помощь
35 antihacker
 
10.11.17
07:54
Как в модуле текщего документа применить УстановитьНовыйНомер ?
36 1dvd
 
10.11.17
08:03
(35)
Процедура ПриЗаписи(Отказ)
    УстановитьНовыйНомер(Префикс);
КонецПроцедуры
37 Сияющий в темноте
 
10.11.17
09:09
напишите свою сравнивалку,тогда все будет работать,только вот ее в запросе использовать будет нельзя