|
Коды товаров. определить максимальное | ☑ | ||
---|---|---|---|---|
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)
это фулскан. его нужно избегать в продакшене. более корректно создать поле с пизнаком нового порядка формирования кода. по полю + код создать индекс и отбирать максимальное значение по индексу. будет на порядки быстрее. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |