|
работа с ПОДСТРОКОЙ | ☑ | ||
---|---|---|---|---|
0
1Слайт
11.03.20
✎
10:35
|
Ребят, нужна помощь!
Есть докумет АрхивныйДокумент, его номер может быть: Ф-000000005Т, Ф-000000005ТТ, Инв.-000000005Т, Инв.-000000005ТТ и т.д. Задача: подсчитать количество документов в разрезе Индексов, т.е. в итоге нужна такая таблица Т ТТ Ф 5 10 Инв. 3 22 Итого 8 32 Помогите определить Индекс в номере документа. Понимаю, что поможет ПОДСТРОКА, но не совсем доходит как определить количество знаков Индекса(он может быть как просто Ф - 1, так и Инв. - 4) ВЫБРАТЬ АрхивныйДокумент.РегНомер КАК РегНомер, АрхивныйДокумент.оргРазр КАК оргРазр, АрхивныйДокумент.КолвоПодл КАК КолвоПодл, АрхивныйДокумент.КолвоКопий КАК КолвоКопий ИЗ Документ.АрхивныйДокумент КАК АрхивныйДокумент |
|||
1
dka80
11.03.20
✎
10:41
|
Перебор в цикле
|
|||
2
dka80
11.03.20
✎
10:42
|
или, если максимальное количество знаков индекса известно, то
Подобно "[A-Z]-%" или Подобно "[A-Z][A-Z]-%" или Подобно "[A-Z][A-Z][A-Z]-%" и т.д. |
|||
3
Timon1405
11.03.20
✎
10:44
|
примерно так
выбор когда Подстрока(Номер,1,1) = "Ф" Тогда выбор когда Подстрока(Номер,10,2) ="ТТ" Тогда 1 иначе 0 Конец Иначе 0 Конец как Каунт_Ф_ТТ |
|||
4
Redkiy
11.03.20
✎
10:45
|
если в запросе, то
ВЫБОР КОГДА ПОДСТРОКА(АрхивныйДокумент.Номер,2,1) = "-" ТОГДА ПОДСТРОКА(АрхивныйДокумент.Номер,3,8) КОГДА ПОДСТРОКА(АрхивныйДокумент.Номер,3,1) = "-" ТОГДА ПОДСТРОКА(АрхивныйДокумент.Номер,4,8) ... КОНЕЦ КАК Номер заполнение поля индекс аналогично |
|||
5
1Слайт
11.03.20
✎
10:49
|
(4) спасибо! пробую
|
|||
6
unbred
11.03.20
✎
13:40
|
Функция НайтиЧислаВСтроке(Ящик,массивЧисел)
СтрокаЧисел = ""; Для Индекс = 1 По СтрДлина(Ящик) Цикл Символ = Сред(Ящик, Индекс, 1); // Перебираем все сиволы из нашей строки Если КодСимвола(Символ) >= 48 И КодСимвола(Символ) <= 57 Тогда // Код нуля - 48, код 9-ки - 57 СтрокаЧисел = СтрокаЧисел + Символ; ИначеЕсли СтрДлина(СтрокаЧисел) > 0 Тогда Если МассивЧисел.Количество()< 3 тогда //только первые 3 цифры нужны МассивЧисел.Добавить(Число(СтрокаЧисел)); СтрокаЧисел = ""; КонецЕсли; КонецЕсли; КонецЦикла; Если СтрДлина(СтрокаЧисел)>0 Тогда Если МассивЧисел.Количество()< 3 тогда //только первые 3 цифры нужны МассивЧисел.Добавить(Число(СтрокаЧисел)); КонецЕсли; КонецЕсли; Возврат МассивЧисел КонецФункции |
|||
7
1Слайт
11.03.20
✎
15:19
|
(3) спасибо огромное за подсказку, таблица у меня с огромным количеством значений, поэтому брошу кусочек кода, на самом деле он примитивный, но чаще всего на таких мелочах могу тормознуться...)
ВЫБОР КОГДА ПОДСТРОКА(АрхивныйДокумент.РегНомер, 1, 1) = "Ф" И ПОДСТРОКА(АрхивныйДокумент.РегНомер, 12, 1) = "Т" И НЕ ПОДСТРОКА(АрхивныйДокумент.РегНомер, 13, 1) = "Т" ТОГДА АрхивныйДокумент.КолвоКопий КОНЕЦ КАК КолвоКопийФТ, ВЫБОР КОГДА ПОДСТРОКА(АрхивныйДокумент.РегНомер, 1, 1) = "Ф" И ПОДСТРОКА(АрхивныйДокумент.РегНомер, 12, 1) = "Т" И ПОДСТРОКА(АрхивныйДокумент.РегНомер, 13, 1) = "Т" ТОГДА АрхивныйДокумент.КолвоКопий КОНЕЦ КАК КолвоКопийФТТ, |
|||
8
Garykom
гуру
11.03.20
✎
15:42
|
http://programmist1s.ru/ispolzovanie-operatora-podobno-v-zaprosah-1s/
https://helpf.pro/faq/view/852.html АрхивныйДокумент.РегНомер ПОДОБНО "Ф-__________Т" |
|||
9
1Слайт
11.03.20
✎
16:33
|
(8) да, спасибо, мне уже писали об этом варианте, возможно еще им воспользуюсь, т.к. есть еще куча параметров для создания отчета
|
|||
10
Garykom
гуру
11.03.20
✎
16:47
|
(9) Этот вариант изящней в реализации и теоретически должен работать шустрее ибо поддержка like почти во всех sql движках есть
|
|||
11
Garykom
гуру
11.03.20
✎
16:49
|
(10)+ И да можно автоматически найти все шаблоны, путем замены цифр на "_" оставляя символы.
Вот если еще префиксы есть тут сложней но можно задать шаблоны префиксов и один фиг шаблоны автоматом. |
|||
12
palsergeich
11.03.20
✎
16:50
|
Это тестовое задание или боевое?
Если боевое - то не надо этой херотой заниматься, при записи пиши куда угодно ключ ссылка - префикс. |
|||
13
1Слайт
11.03.20
✎
16:57
|
(10) согласна, часть переделала, из плюсов еще и код короче)) потому как условий и правда много
|
|||
14
1Слайт
11.03.20
✎
17:02
|
(12) задание тестово-боевое)
Префикс номера ты имешь ввиду? если да, то не подходит, изначально с ним и работала, но Префикс может быть разным и нумерация вразрезе него идет, а мне нужна нумерация независимая... то есть Ф-001Т, П-002ТТ, М-003Т, Ф-004ТТ..... |
|||
15
palsergeich
11.03.20
✎
17:12
|
(14) нет не префикс, а твои уникальные вот эти комбинации при записи документа куда нить сохранять
|
|||
16
palsergeich
11.03.20
✎
17:14
|
Ибо то что ты делаешь в учебном плане штука неплохая, но в боевом требуется более производительные решения
|
|||
17
1Слайт
11.03.20
✎
17:16
|
(16) давай по буквам)
что подразумевается под словом сохранить? у меня номер этот и так формируется в отдельное поле... |
|||
18
1Слайт
11.03.20
✎
17:19
|
(15) или имеешь ввиду регистры, справочники...
? |
|||
19
palsergeich
11.03.20
✎
17:19
|
Смотри тебе надо сделать отчет - часть номера - количество ссылок.
Ну сделай регистр сведений Измерение ссылка,ресурс - часть номера. М подписку при записи, где будешь алгоритмически эту часть доставать и сохранять в регистр. Тогда сам отчет будет тривиален |
|||
20
palsergeich
11.03.20
✎
17:21
|
Ибо сегодня ты опишешь всеситуации, а завтра что то поменяется, ИМХО проще код написать чем многоэтажные конструкции в запросе
|
|||
21
Garykom
гуру
11.03.20
✎
17:28
|
Ну я бы задачу решал по тупому совершенно, через заполнение ТЗ, с заменой "ненужных" цифр на один символ и Свернуть()
Если надо для каждого префикса (Ф, Инв) получить количество по постфиксам (Т, ТТ) то после свертки еще раз обрабатывам по тому же алгоритму записывая 1 в нужную колонку (Т, ТТ и т.д.) а затем снова Свернуть() |
|||
22
Garykom
гуру
11.03.20
✎
17:29
|
(19) Еще можно хеш-функцию наваять или MapReduce заюзать да.
Только кто потом это допиливать/поддерживать будет и нахрена для разовой задачи базу загромождать? |
|||
23
Garykom
гуру
11.03.20
✎
17:32
|
(21)+ В результате имеем короткий и понятный код, который если что легко допилить.
Префиксы и постфиксы оно само определит при (точнее после) замене последовательности цифр на один символ. Было Ф-001Т, П-002ТТ, М-003Т, Ф-004ТТ Стало Ф-Т, П-ТТ, М-Т, Ф-ТТ И дальше банально уже |
|||
24
1Слайт
12.03.20
✎
08:52
|
(20) это главный вопрос,я тоже думала о том, что завтра может поменяться, хотя отдел заверяет меня, что это система у них уже годами работает)
|
|||
25
1Слайт
12.03.20
✎
08:53
|
Спасибо всем огромное за помощь!
Вариантов как оказалось много, нужно выбрать удобный) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |