Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

работа с ПОДСТРОКОЙ

работа с ПОДСТРОКОЙ
Я
   1Слайт
 
11.03.20 - 10:35
Ребят, нужна помощь!
Есть докумет АрхивныйДокумент, его номер может быть: Ф-000000005Т, Ф-000000005ТТ, Инв.-000000005Т, Инв.-000000005ТТ и т.д.
Задача: подсчитать количество документов в разрезе Индексов, т.е. в итоге нужна такая таблица

        Т     ТТ

Ф      5      10
Инв.   3      22
Итого  8      32

Помогите определить Индекс в номере документа. Понимаю, что поможет ПОДСТРОКА, но не совсем доходит как определить количество знаков Индекса(он может быть как просто Ф - 1, так и Инв. - 4)

ВЫБРАТЬ
    АрхивныйДокумент.РегНомер КАК РегНомер,
    АрхивныйДокумент.оргРазр КАК оргРазр,
    АрхивныйДокумент.КолвоПодл КАК КолвоПодл,
    АрхивныйДокумент.КолвоКопий КАК КолвоКопий
ИЗ
    Документ.АрхивныйДокумент КАК АрхивныйДокумент
   dka80
 
1 - 11.03.20 - 10:41
Перебор в цикле
   dka80
 
2 - 11.03.20 - 10:42
или, если максимальное количество знаков индекса известно, то 
Подобно "[A-Z]-%"
или Подобно "[A-Z][A-Z]-%"
или Подобно "[A-Z][A-Z][A-Z]-%"
и т.д.
   Timon1405
 
3 - 11.03.20 - 10:44
примерно так
выбор когда Подстрока(Номер,1,1) = "Ф" Тогда
выбор когда Подстрока(Номер,10,2) ="ТТ" Тогда
1
иначе 0
Конец
Иначе 0
Конец как Каунт_Ф_ТТ
   Redkiy
 
4 - 11.03.20 - 10:45
если в запросе, то

ВЫБОР
КОГДА ПОДСТРОКА(АрхивныйДокумент.Номер,2,1) = "-" ТОГДА ПОДСТРОКА(АрхивныйДокумент.Номер,3,8)
КОГДА ПОДСТРОКА(АрхивныйДокумент.Номер,3,1) = "-" ТОГДА ПОДСТРОКА(АрхивныйДокумент.Номер,4,8)
...
КОНЕЦ КАК Номер

заполнение поля индекс аналогично
   1Слайт
 
5 - 11.03.20 - 10:49
(4) спасибо! пробую
   unbred
 
6 - 11.03.20 - 13:40
Функция НайтиЧислаВСтроке(Ящик,массивЧисел) 
    
    
    СтрокаЧисел = "";
    
    Для Индекс = 1 По СтрДлина(Ящик) Цикл
        
        Символ = Сред(Ящик, Индекс, 1);// Перебираем все сиволы из нашей строки

        
        Если КодСимвола(Символ) >= 48 И КодСимвола(Символ) <= 57 Тогда// Код нуля - 48, код 9-ки - 57

            СтрокаЧисел = СтрокаЧисел + Символ;
        ИначеЕсли СтрДлина(СтрокаЧисел) > 0 Тогда
            Если  МассивЧисел.Количество()< 3 тогда//только первые 3 цифры нужны

                
                МассивЧисел.Добавить(Число(СтрокаЧисел));
                СтрокаЧисел = "";
            КонецЕсли;
        КонецЕсли;
        
    КонецЦикла;
    Если СтрДлина(СтрокаЧисел)>0 Тогда
        Если  МассивЧисел.Количество()< 3 тогда  //только первые 3 цифры нужны

            
            МассивЧисел.Добавить(Число(СтрокаЧисел));
        КонецЕсли;
    КонецЕсли;
    
    Возврат МассивЧисел
    
КонецФункции
   1Слайт
 
7 - 11.03.20 - 15:19
(3) спасибо огромное за подсказку, таблица у меня с огромным количеством значений, поэтому брошу кусочек кода, на самом деле он примитивный, но чаще всего на таких мелочах могу тормознуться...)
ВЫБОР
    КОГДА ПОДСТРОКА(АрхивныйДокумент.РегНомер, 1, 1) = "Ф"
        И ПОДСТРОКА(АрхивныйДокумент.РегНомер, 12, 1) = "Т"
        И НЕ ПОДСТРОКА(АрхивныйДокумент.РегНомер, 13, 1) = "Т"
    ТОГДА АрхивныйДокумент.КолвоКопий
    КОНЕЦ КАК КолвоКопийФТ,
    ВЫБОР
    КОГДА ПОДСТРОКА(АрхивныйДокумент.РегНомер, 1, 1) = "Ф"
        И ПОДСТРОКА(АрхивныйДокумент.РегНомер, 12, 1) = "Т"
        И ПОДСТРОКА(АрхивныйДокумент.РегНомер, 13, 1) = "Т"
        ТОГДА АрхивныйДокумент.КолвоКопий
    КОНЕЦ КАК КолвоКопийФТТ,
   Garykom
 
8 - 11.03.20 - 15:42
http://programmist1s.ru/ispolzovanie-operatora-podobno-v-zaprosah-1s/
https://helpf.pro/faq/view/852.html

АрхивныйДокумент.РегНомер ПОДОБНО "Ф-__________Т"
   1Слайт
 
9 - 11.03.20 - 16:33
(8) да, спасибо, мне уже писали об этом варианте, возможно еще им воспользуюсь, т.к. есть еще куча параметров для создания отчета
   Garykom
 
10 - 11.03.20 - 16:47
(9) Этот вариант изящней в реализации и теоретически должен работать шустрее ибо поддержка like почти во всех sql движках есть
   Garykom
 
11 - 11.03.20 - 16:49
(10)+ И да можно автоматически найти все шаблоны, путем замены цифр на "_" оставляя символы.
Вот если еще префиксы есть тут сложней но можно задать шаблоны префиксов и один фиг шаблоны автоматом.
   palsergeich
 
12 - 11.03.20 - 16:50
Это тестовое задание или боевое?
Если боевое - то не надо этой херотой заниматься, при записи пиши куда угодно ключ ссылка - префикс.
   1Слайт
 
13 - 11.03.20 - 16:57
(10) согласна, часть переделала, из плюсов еще и код короче)) потому как условий и правда много
   1Слайт
 
14 - 11.03.20 - 17:02
(12) задание тестово-боевое)
Префикс номера ты имешь ввиду?
если да, то не подходит, изначально с ним и работала, но Префикс может быть разным и нумерация вразрезе него идет, а мне нужна нумерация независимая... то есть Ф-001Т, П-002ТТ, М-003Т, Ф-004ТТ.....
   palsergeich
 
15 - 11.03.20 - 17:12
(14) нет не префикс, а твои уникальные вот эти комбинации при записи документа куда нить сохранять
   palsergeich
 
16 - 11.03.20 - 17:14
Ибо то что ты делаешь в учебном плане штука неплохая, но в боевом требуется более производительные решения
   1Слайт
 
17 - 11.03.20 - 17:16
(16) давай по буквам)
что подразумевается под словом сохранить? у меня номер этот и так формируется в отдельное поле...
   1Слайт
 
18 - 11.03.20 - 17:19
(15) или имеешь ввиду регистры, справочники...
?
   palsergeich
 
19 - 11.03.20 - 17:19
Смотри тебе надо сделать отчет - часть номера - количество ссылок.
Ну сделай регистр сведений Измерение ссылка,ресурс - часть номера.
М подписку при записи, где будешь алгоритмически эту часть доставать и сохранять в регистр.
Тогда сам отчет будет тривиален
   palsergeich
 
20 - 11.03.20 - 17:21
Ибо сегодня ты опишешь всеситуации, а завтра что то поменяется, ИМХО проще код написать чем многоэтажные конструкции в запросе
   Garykom
 
21 - 11.03.20 - 17:28
Ну я бы задачу решал по тупому совершенно, через заполнение ТЗ, с заменой "ненужных" цифр на один символ и Свернуть()

Если надо для каждого префикса (Ф, Инв) получить количество по постфиксам (Т, ТТ) то после свертки еще раз обрабатывам по тому же алгоритму записывая 1 в нужную колонку (Т, ТТ и т.д.) а затем снова Свернуть()
   Garykom
 
22 - 11.03.20 - 17:29
(19) Еще можно хеш-функцию наваять или MapReduce заюзать да.
Только кто потом это допиливать/поддерживать будет и нахрена для разовой задачи базу загромождать?
   Garykom
 
23 - 11.03.20 - 17:32
(21)+ В результате имеем короткий и понятный код, который если что легко допилить.
Префиксы и постфиксы оно само определит при (точнее после) замене последовательности цифр на один символ.

Было
Ф-001Т, П-002ТТ, М-003Т, Ф-004ТТ

Стало
Ф-Т, П-ТТ, М-Т, Ф-ТТ

И дальше банально уже
   1Слайт
 
24 - 12.03.20 - 08:52
(20) это главный вопрос,я тоже думала о том, что завтра может поменяться, хотя отдел заверяет меня, что это система у них уже годами работает)
   1Слайт
 
25 - 12.03.20 - 08:53
Спасибо всем огромное за помощь!
Вариантов как оказалось много, нужно выбрать удобный)


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