Вход | Регистрация



Коды товаров. определить максимальное

Коды товаров. определить максимальное
Я
   lamme
 
06.09.18 - 14:33
Есть справочник номенклатуры.
Код = строка.
Какое-то время код товара делался вручную как и кто хотел.
были  и есть товары с цифробуквенными кодами.
Потом от этого отказались - но переделать карточки товара - нельзя. На код товара много чего где завязано.
Те сейчас есть старые товары  - цифробуквенные и новые - только цифры. в поле код. типа строка.

Как определить максимальное значение поля код - только по полям, где есть только цифровые значения.
?
 
 
   Пуля
 
1 - 06.09.18 - 14:37
Отсортируй справочник по коду и смотри
   Пуля
 
2 - 06.09.18 - 14:37
+ в режиме предпиятия
   lamme
 
3 - 06.09.18 - 14:39
Программно надо .. программно
   Базис
 
4 - 06.09.18 - 14:41
Программист вам нужен, боюсь.
   Пуля
 
5 - 06.09.18 - 14:43
Макс = -1;
1. Если код преобразуется в число, и Код > макс Тогда Макс= КОд
   lamme
 
6 - 06.09.18 - 14:46
(5)
перебирать все карточки товара для этого ?
   Пуля
 
7 - 06.09.18 - 14:47
Да
   lamme
 
8 - 06.09.18 - 14:49
издеваешься ?
это же сколько будет открываться/записываться новая карточка товара ?
   Пуля
 
9 - 06.09.18 - 14:50
(8) Ну так оптимизируй, наложи фильтры какие-нить, запоминай максимум
   Базис
 
10 - 06.09.18 - 14:58
Один раз перенумеруй. Такое ощущение, что ты издеваешься. Запрос за тебя писать?

Выбрать
   Первые 1
   Спр.Ссылка,
   Спр.Код
Из
   ЯНеВижуЧтоЗаОбъект
Где
   (Тут фильтр на отбор некрасивых кодов)
 
 Рекламное место пустует
   lamme
 
11 - 06.09.18 - 15:14
(10) из (0)
но переделать карточки товара - нельзя. На код товара много чего где завязано.

(Тут фильтр на отбор некрасивых кодов) - ну вот придумай как в запросе отловить коды - где есть буква
   Вафель
 
12 - 06.09.18 - 15:17
в подобно можно юзать псевдо регэкспы
   Пуля
 
13 - 06.09.18 - 15:19
-Ты какойто странный, Билли!
- Походу у меня скитлстрянка
- а она заразная?
- Не, не думаю!
   Смотрящий
 
14 - 06.09.18 - 15:20
(11) Префикс "0" используй, при назначении кода товара
   Вафель
 
15 - 06.09.18 - 15:20
типа
код подобно [0-9][0-9][0-9][0-9]
или код подобно [0-9][0-9][0-9]
...
   Пуля
 
16 - 06.09.18 - 15:22
Что на выходе то получить надо? Один раз ищешь максимум, дальше "плюсуешь" коды от него
   lamme
 
17 - 06.09.18 - 15:29
(16)
на выходе это и надо получить - последний код товара + 1
чтобы новому товару назначить следующий свободный
   lamme
 
18 - 06.09.18 - 15:30
(15)
а можно подробно ...
это как?
   Пуля
 
19 - 06.09.18 - 15:36
Запиши текущий максимум куда-нить, и обновляй его каждый раз при добавлении нового элемента
   lamme
 
20 - 06.09.18 - 15:37
(19)
логично
работало так года 3
потом начало вот такое выдавать

https://e.mail.ru/attachment/15337149230000000893/0;1
   lamme
 
21 - 06.09.18 - 15:37
Значение поля код не уникально
   lamme
 
22 - 06.09.18 - 15:38
Хранилось в константе - куда писалось текущее последнее
и при создании новой картчоки товара - бралось из нее и на +1

работало работало ..
что то поменялось - что не говорят
и на тебе - приплыли.
   Пуля
 
23 - 06.09.18 - 15:39
Ты не химик, ты психолог (с) "Охота на пиранью". так вот ты не программист ты фотограф....
   Пуля
 
24 - 06.09.18 - 15:41
Ты загони в константу число чуть больше текущего, и с высокой вероятностью у тебя все опять заработает
   lamme
 
25 - 06.09.18 - 15:42
короче вот
http://1c-bezproblem.ru/zametki-programmista/1s-stroku-v-chislo-v-zaprose-chislo-v-stroku-v-zaprose

и работает нормально все
   lamme
 
26 - 06.09.18 - 15:42
Функция ТекстЗапросаИзСтрокиВЧисло(пИмяПоля, пДлинаСтроки, пСимволРазделителя=".")
    лТекст="ВЫБОР ";
    Для лДлинаЦелойЧасти=0 По пДлинаСтроки Цикл
        Если лДлинаЦелойЧасти=пДлинаСтроки Тогда 
            лТекст=лТекст+"ИНАЧЕ"+Символы.ПС;
        Иначе
            лТекст=лТекст+"КОГДА ПОДСТРОКА("+пИмяПоля+", "+(лДлинаЦелойЧасти+1)+", 1)="""+пСимволРазделителя+""" ИЛИ ПОДСТРОКА("+пИмяПоля+", "+(лДлинаЦелойЧасти+1)+", 1)="""" ТОГДА "+Символы.ПС;
        КонецЕсли; 
        Если лДлинаЦелойЧасти=0 Тогда лТекст=лТекст+"    0"+Символы.ПС; КонецЕсли; 
        Для лИнд=1 По лДлинаЦелойЧасти Цикл
            лТекст=лТекст+"    ВЫБОР "+Символы.ПС;
            Для лЦифра=0 По 9 Цикл
                лТекст=лТекст+"    КОГДА ПОДСТРОКА("+пИмяПоля+", "+лИнд+", 1)="""+лЦифра+""" ТОГДА "+лЦифра+Символы.ПС;
            КонецЦикла;
            лТекст=лТекст+"    ИНАЧЕ 0 КОНЕЦ"+?(лИнд=лДлинаЦелойЧасти, "", "*"+Формат(Pow(10, лДлинаЦелойЧасти-лИнд), "ЧРД=.; ЧГ=0")+"+")+Символы.ПС;
        КонецЦикла;
        Для лИнд=лДлинаЦелойЧасти+2 По пДлинаСтроки Цикл
            лТекст=лТекст+"+ ВЫБОР";
            Для лЦифра=0 По 9 Цикл
                лТекст=лТекст+"    КОГДА ПОДСТРОКА("+пИмяПоля+", "+лИнд+", 1)="""+лЦифра+""" ТОГДА "+лЦифра+Символы.ПС;
            КонецЦикла;
            лТекст=лТекст+"    ИНАЧЕ 0 КОНЕЦ"+?(лИнд=лДлинаЦелойЧасти, "", "/"+Формат(Pow(10, лИнд-лДлинаЦелойЧасти-1), "ЧРД=.; ЧГ=0"))+Символы.ПС;
        КонецЦикла;
    КонецЦикла;
    лТекст=лТекст+"КОНЕЦ";
    Возврат лТекст;
КонецФункции

Процедура КнопкаВыполнитьНажатие(Кнопка)
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    МАКСИМУМ("+ТекстЗапросаИзСтрокиВЧисло("Номенклатура.Код", 6)+") КАК Код
        |ИЗ
        |    Справочник.Номенклатура КАК Номенклатура
        |ГДЕ
        |    Номенклатура.ЭтоГруппа = ЛОЖЬ";
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        сообщить (ВыборкаДетальныеЗаписи.код+1);
    КонецЦикла;
    
КонецПроцедуры
   lamme
 
27 - 06.09.18 - 15:46
(24)
нет.
не работало.
константу увеличивали принудительно с шагом в +10000
те что то изменилось в работе
например - стали трое одновремнно создавать карточки товара

и для троих определился код = (например) = 6532145
а записать успел тот - кто первый записывает
   ptiz
 
28 - 06.09.18 - 15:48
(8) Тебе это регулярно надо? Сделай новый реквизит "КодЧислом" и заполняй при записи.
   lamme
 
29 - 06.09.18 - 15:49
(28)
да - так тоже делал .. пока не наткнулся на статью из (25)
   МихаилМ
 
30 - 06.09.18 - 20:29
(25)
это фулскан. его нужно избегать в продакшене.

более корректно создать поле с пизнаком нового порядка формирования кода. по полю + код создать индекс
и отбирать максимальное значение по индексу. будет на порядки быстрее.


Список тем форума
Рекламное место пустует  Рекламное место пустует
Программист всегда исправляет последнюю ошибку.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует