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


1С:Предприятие ::

Метки: 

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

Я
   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 или кнопку "Обновить" в браузере.
Рекламное место пустует