|   |   | 
| 
 | Коды товаров. определить максимальное | ☑ | ||
|---|---|---|---|---|
| 0
    
        lamme 06.09.18✎ 14:33 | 
        Есть справочник номенклатуры.
 Код = строка. Какое-то время код товара делался вручную как и кто хотел. были и есть товары с цифробуквенными кодами. Потом от этого отказались - но переделать карточки товара - нельзя. На код товара много чего где завязано. Те сейчас есть старые товары - цифробуквенные и новые - только цифры. в поле код. типа строка. Как определить максимальное значение поля код - только по полям, где есть только цифровые значения. ? | |||
| 1
    
        Пуля 06.09.18✎ 14:37 | 
        Отсортируй справочник по коду и смотри     | |||
| 2
    
        Пуля 06.09.18✎ 14:37 | 
        + в режиме предпиятия     | |||
| 3
    
        lamme 06.09.18✎ 14:39 | 
        Программно надо .. программно     | |||
| 4
    
        Базис naïve 06.09.18✎ 14:41 | 
        Программист вам нужен, боюсь.     | |||
| 5
    
        Пуля 06.09.18✎ 14:43 | 
        Макс = -1;
 1. Если код преобразуется в число, и Код > макс Тогда Макс= КОд | |||
| 6
    
        lamme 06.09.18✎ 14:46 | 
        (5)
 перебирать все карточки товара для этого ? | |||
| 7
    
        Пуля 06.09.18✎ 14:47 | 
        Да     | |||
| 8
    
        lamme 06.09.18✎ 14:49 | 
        издеваешься ?
 это же сколько будет открываться/записываться новая карточка товара ? | |||
| 9
    
        Пуля 06.09.18✎ 14:50 | 
        (8) Ну так оптимизируй, наложи фильтры какие-нить, запоминай максимум     | |||
| 10
    
        Базис naïve 06.09.18✎ 14:58 | 
        Один раз перенумеруй. Такое ощущение, что ты издеваешься. Запрос за тебя писать?
 Выбрать Первые 1 Спр.Ссылка, Спр.Код Из ЯНеВижуЧтоЗаОбъект Где (Тут фильтр на отбор некрасивых кодов) | |||
| 11
    
        lamme 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 | 
        Что на выходе то получить надо? Один раз ищешь максимум, дальше "плюсуешь" коды от него     | |||
| 17
    
        lamme 06.09.18✎ 15:29 | 
        (16)
 на выходе это и надо получить - последний код товара + 1 чтобы новому товару назначить следующий свободный | |||
| 18
    
        lamme 06.09.18✎ 15:30 | 
        (15)
 а можно подробно ... это как? | |||
| 19
    
        Пуля 06.09.18✎ 15:36 | 
        Запиши текущий максимум куда-нить, и обновляй его каждый раз при добавлении нового элемента     | |||
| 20
    
        lamme 06.09.18✎ 15:37 | 
        (19)
 логично работало так года 3 потом начало вот такое выдавать https://e.mail.ru/attachment/15337149230000000893/0;1 | |||
| 21
    
        lamme 06.09.18✎ 15:37 | 
        Значение поля код не уникально     | |||
| 22
    
        lamme 06.09.18✎ 15:38 | 
        Хранилось в константе - куда писалось текущее последнее
 и при создании новой картчоки товара - бралось из нее и на +1 работало работало .. что то поменялось - что не говорят и на тебе - приплыли. | |||
| 23
    
        Пуля 06.09.18✎ 15:39 | 
        Ты не химик, ты психолог (с) "Охота на пиранью". так вот ты не программист ты фотограф....     | |||
| 24
    
        Пуля 06.09.18✎ 15:41 | 
        Ты загони в константу число чуть больше текущего, и с высокой вероятностью у тебя все опять заработает     | |||
| 25
    
        lamme 06.09.18✎ 15:42 | 
        короче вот
 http://1c-bezproblem.ru/zametki-programmista/1s-stroku-v-chislo-v-zaprose-chislo-v-stroku-v-zaprose и работает нормально все | |||
| 26
    
        lamme 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); КонецЦикла; КонецПроцедуры | |||
| 27
    
        lamme 06.09.18✎ 15:46 | 
        (24) 
 нет. не работало. константу увеличивали принудительно с шагом в +10000 те что то изменилось в работе например - стали трое одновремнно создавать карточки товара и для троих определился код = (например) = 6532145 а записать успел тот - кто первый записывает | |||
| 28
    
        ptiz 06.09.18✎ 15:48 | 
        (8) Тебе это регулярно надо? Сделай новый реквизит "КодЧислом" и заполняй при записи.     | |||
| 29
    
        lamme 06.09.18✎ 15:49 | 
        (28)
 да - так тоже делал .. пока не наткнулся на статью из (25) | |||
| 30
    
        МихаилМ 06.09.18✎ 20:29 | 
        (25)
 это фулскан. его нужно избегать в продакшене. более корректно создать поле с пизнаком нового порядка формирования кода. по полю + код создать индекс и отбирать максимальное значение по индексу. будет на порядки быстрее. | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |