|   |   | 
| 
 | Обратное отражение символов в строке | ☑ | ||
|---|---|---|---|---|
| 0
    
        makMich 22.03.23✎ 16:58 | 
        Добрый день!
 Обычное приложение. Во внешней обработке есть табличная часть. В ней колонка под названием "значение". Это строка из рандомных символов. Необходима процедура, которая бы отражала символы в ячейках в обратном порядке. т.е. было: | 1 | qwer | | 2 | asdf | | 3 | zxcv | стало: | 1 | rewq | | 2 | fdsa | | 3 | vcxz | Пробовал найти какие-то встроенные методы, но ничего не нашел. 1С только начал изучать, поэтому может не вижу какого то очевидного решения?! Спасибо за помощь! | |||
| 1
    
        Aleksey 20.03.23✎ 20:14 | 
        нет очевидных решений нет. 1С как бы не про перестановку местами символов в строке
 https://www.cyberforum.ru/1c-custom/thread1545918.html | |||
| 2
    
        Волшебник 20.03.23✎ 20:16 | ||||
| 3
    
        magicSan 20.03.23✎ 20:22 | 
        (0) откуда такие задачи в 1С?     | |||
| 4
    
        Волшебник 20.03.23✎ 20:23 | 
        (3) Очевидно, с собеседования     | |||
| 5
    
        magicSan 20.03.23✎ 20:25 | 
        (4) Откуда такие задачи на собеседование?     | |||
| 6
    
        Волшебник 20.03.23✎ 20:30 | 
        (5) Когда я проводил собеседования, я задавал вопросы про флаг "основной отбор" для измерения регистра сведений. По сравнению с моим вопросом, решить сабж очень легко. Простая алгоритмическая задача, которую легко загуглить и решить на всех языках программирования.     | |||
| 7
    
        magicSan 20.03.23✎ 20:37 | 
        (6) Он же не быдло кодером устраиваться. То что легко согласен. Но вот вспоминается мне вопросы типа "пронумеровать результат запроса" - пока до дома ехал придумал, но за час не смог учитывая что были другие задачи. Или цена валюты на каждый день учитывая что в какой-то день цены могло не быть. - это не типовые высосанные непонятно из каких мест задачи. 
 У основного отбора, если не изменят память при удалении, при удаление элемента удалится запись регистра. - нормальный вопрос на знание платформы. (если я конечно правильно вспомнил) | |||
| 8
    
        magicSan 20.03.23✎ 20:39 | 
        "
 Ведущее — свойство измерения, подразумевающее под собой информацию о том, что без значения этого измерения запись регистра не имеет смысл. На деле это означает что система при удалении значения из измерения удаляет еще и запись регистра с «Ведущим» измерением. Может быть установлено только одно измерение. Основной отбор — если регистр независимый, по этим измерениям будет устанавливаться регистрация изменений для плана обмена. Аналогично использование Основной отбор по периоду включает основной отбор для период для периодических регистров. " Я был рядом )))) | |||
| 9
    
        Chameleon1980 20.03.23✎ 20:52 | 
        (8) еще кое-что есть для ведущего измерения     | |||
| 10
    
        Волшебник 20.03.23✎ 22:05 | 
        (8) я не спрашивал про "Ведущее"     | |||
| 11
    
        lexushka 21.03.23✎ 06:24 | 
        (6-8) Собеседование это конечно святое, но в своей работе с типовыми конфигурациями вы часто "дергали" эти настройки, вон в (7) реальный уровень — что-то там такое есть, но надо будет — уточним Помнить все по платформе где типа значения в коде ТипЗнч() а в запросе ТипЗначения() по моему мнению нереально — оно нелогична-с     | |||
| 12
    
        2S 21.03.23✎ 06:26 | 
        (0) напиши рекурсивную функцию, тест пройдешь     | |||
| 13
    
        lexushka 21.03.23✎ 06:27 | 
        а в расширении #Удаление/#КонецУдаления и держищь себя в руках чтобы не написать #Удалить и не забыть что не КонецЕсли, те КонецУдалить а КонецУдаления...     | |||
| 14
    
        DJ Anthon 21.03.23✎ 06:28 | 
        (8) а можете сказать, почему только может быть ведущим? какая в этом логика и технические трудности сделать их несколько?     | |||
| 15
    
        DJ Anthon 21.03.23✎ 06:29 | 
        * только одно     | |||
| 16
    
        lexushka 21.03.23✎ 06:32 | 
        (15) какой бардак случится если записи будут удалять сразу несколько измерений Как решать коллизию?     | |||
| 17
    
        DJ Anthon 21.03.23✎ 06:34 | 
        (16) не понял, в чем бардак. записи удалятся. допустим, есть измерение организация и номенклатура. что я удаляю организацию, что я удаляю номенклатуру - запись все равно удалится. это мне и нужно. она и нужна только если существует и то, и другое. а так удаление номенклатуры или организации остановится, потому что сначала надо вычистить мои регистры ручками.     | |||
| 18
    
        lexushka 21.03.23✎ 06:36 | 
        (17) полагаю слишком сложно
 нет человека - нет проблемы… | |||
| 19
    
        lexushka 21.03.23✎ 06:43 | 
        Что до задачи — надо обратить внимание что спереди цифры в черточках и их переворачивать не надо     | |||
| 20
    
        Serg_1960 22.03.23✎ 16:58 | 
        Не оптимально, но лаконично :)
 Сообщить(Зеркало("А роза упала на лапу Азора"));   // "арозА упал ан алапу азор А"
Функция Зеркало(ИсхСтрока, Знач х = 1)
	Возврат ?(х > СтрДлина(ИсхСтрока), "", Зеркало(ИсхСтрока, х+1) + Сред(ИсхСтрока, х, 1));
КонецФункции | |||
| 21
    
        Волшебник 21.03.23✎ 10:41 | 
        (14) Ведущих измерений может быть много. В (8) ошибка.     | |||
| 22
    
        Garykom гуру 21.03.23✎ 10:44 | 
        (21) там не в (8) ошибка а в днк     | |||
| 23
    
        Garykom гуру 21.03.23✎ 10:47 | 
        (6) >флаг "основной отбор" для измерения регистра сведений
 фактически это составной ключ для таблицы | |||
| 24
    
        Волшебник 21.03.23✎ 10:50 | 
        (23) Только для другой таблицы     | |||
| 25
    
        Garykom гуру 21.03.23✎ 10:54 | 
        (20) Это не просто не оптимально а грубейшая ошибка или как минимум неоптимальное решение
 Если длина строки ограничена то неоптимальное, если про максимальные длины строк ничего не известно - ошибка "Однако нужно избегать использования рекурсивного вызова и для алгоритмов, в которых реальная вложенность рекурсии будет достигать сотен уровней. Во встроенном языке не установлено конкретного ограничения количества уровней рекурсивного вызова. Ограничение носит технологический характер. Аварийное завершение работы системы будет происходить, после того, как будут исчерпаны свободные ресурсы, используемые при рекурсии. Рекомендуется создавать алгоритмы, количество уровней рекурсии в которых будет на практике ограничиваться несколькими десятками." | |||
| 26
    
        НафНаф 21.03.23✎ 11:01 | 
        во как можно в ms sql:
 select REVERSE(t.f) from (select N'фыва' as f) as t | |||
| 27
    
        Serg_1960 21.03.23✎ 11:02 | 
        По поводу (6) 
 А сегодня в ИТС не все могут смотреть. Вернее смотреть могут не только лишь все, мало кто может это делать :))) ...Особое внимание следует уделить регистрам сведений, имеющим независимый режим записи (свойство "Режим записи" установлено в значение "Независимый"). Для данных регистров гранулой обмена является набор записей с отбором по измерениям, c установленным свойством "Основной отбор"... Источник: ИТС, "Подготовка конфигурации к работе в распределенной информационной базе" - https://its.1c.ru/db/metod8dev/content/2266/hdoc | |||
| 28
    
        makMich 21.03.23✎ 11:39 | 
        Спасибо всем. Основная проблема была не в отзеркаливании строки, а в записи в таблицу. Не сразу разобрался, что из табличной части нужно выгрузить данные в таблицу значений и уже в ней производить изменения, а потом загрузить измененное обратно.     | |||
| 29
    
        Serg_1960 21.03.23✎ 11:42 | 
        По поводу (25)
 С теоретической частью рассуждений разумеется согласен. Но, однако, хочу обратить Ваше внимание на следующие обстоятельство: автор темы указал пример исходных данных. Учитывая это, моё решение всего лишь неоптимально (но допустимо). О чём я сразу же и предупредил в (20) PS: ну, да, времена я тот ещё зануда :) | |||
| 30
    
        Garykom гуру 21.03.23✎ 11:56 | 
        (29) цикл проще     | |||
| 31
    
        Garykom гуру 21.03.23✎ 11:56 | 
        (30)+ явный цикл, проще и понятней
 в отличие от неявного через рекурсию | |||
| 32
    
        Garykom гуру 21.03.23✎ 11:59 | 
 | |||
| 33
    
        Garykom гуру 21.03.23✎ 12:09 | 
        Кстати кто знает почему вот такой код (32) в Java и C# скажут НЕОПТИМАЛЬНО?     | |||
| 34
    
        Garykom гуру 21.03.23✎ 12:10 | 
        (33)+ речь не про встроенные функции переворачивания типа reverse()     | |||
| 35
    
        Волшебник 21.03.23✎ 12:11 | 
        (33) Потому что наращивание строки по символам приводит к копированию всей строки. Нужно использовать StringBuilder     | |||
| 36
    
        magicSan 21.03.23✎ 12:21 | 
        (35) нет, на каждой итерации ты добавляешь в заранее выделенную область памяти 1 байт.     | |||
| 37
    
        Garykom гуру 21.03.23✎ 12:22 | 
        (35) ага     | |||
| 38
    
        Garykom гуру 21.03.23✎ 12:22 | 
        (37)+ причем не просто наращивание а слева     | |||
| 39
    
        Волшебник 21.03.23✎ 12:27 | 
        (36) Ну во-первых не 1, а 2, потому что строки в юникоде. А во-вторых тип String относится к immutable-типам, он не модифицируется. Присвоение строке символа приводит к созданию новой строки.     | |||
| 40
    
        magicSan 21.03.23✎ 12:37 | 
        (39) да, читанул, мыслю в рамках си++.     | |||
| 41
    
        lodger 22.03.23✎ 16:57 | 
        тогда так?
 ИсхСтрока = "абв"; Промежуток = Новый Массив; ДлинаСтроки = СтрДлина(ИсхСтрока); Для НомерСимвола = 1 По ДлинаСтроки Цикл Промежуток.Добавить(Сред(ИсхСтрока, 1+ДлинаСтроки-НомерСимвола, 1)); КонецЦикла; РезСтрока = СтрСоединить(Промежуток,""); | |||
| 42
    
        Волшебник 21.03.23✎ 12:53 | 
        (41) Сделайте замер производительности на строке в миллион символов. Вряд ли там будет какое-то ускорение     | |||
| 43
    
        lodger 21.03.23✎ 13:27 | 
        (42) почему сразу "вряд ли"? кратный перевес.
 http://paste1c.ru/2ske0nihhq7o https://postimg.cc/NKSGnMZb | |||
| 44
    
        Волшебник 21.03.23✎ 13:37 | 
        (43) Хм... Понятно, спасибо.     | |||
| 45
    
        lodger 21.03.23✎ 14:06 | 
        +(43) если инициализировать массив сразу известным размером новый массив(ДлинаСтроки);
 а значения вбрасывать методом .Установить(), то рядом с "РезСтрока = "" + Сред(ИсхСтрока, НомерСимвола, 1) + РезСтрока;" разницы вообще не видно. возможно она есть, но там какие то проценты по пальцам рук пересчитать. | |||
| 46
    
        magicSan 21.03.23✎ 14:08 | 
        (45) чот у тебя на вызове кувырков - показывает что через голову отнял ...7% на замере видно другое, интересно через потоки на скока быстрее будет - там встроенная фича по инверсии есть.     | |||
| 47
    
        lodger 21.03.23✎ 14:11 | 
        (46) не 7%, а 0.07%. 
 потому что переменную для результата не создавал внутри (чтобы обратно отдать поинтер), а передал непосредственно данные. | |||
| 48
    
        Garykom гуру 21.03.23✎ 14:14 | 
        (43) как с этой пасты скопипастить код?     | |||
| 49
    
        Garykom гуру 21.03.23✎ 14:14 | 
        (48)+ и вопрос нахрен она нужна если код нельзя скопировать?     | |||
| 50
    
        Garykom гуру 21.03.23✎ 14:15 | 
        (49)+ регаться точно не собираюсь     | |||
| 51
    
        Волшебник 21.03.23✎ 14:15 | 
        (48) Ctrl-A, Ctrl-C     | |||
| 52
    
        Garykom гуру 21.03.23✎ 14:15 | 
        (51) не работает     | |||
| 53
    
        lodger 21.03.23✎ 14:15 | 
        (52) работает     | |||
| 54
    
        Garykom гуру 21.03.23✎ 14:16 | 
        (52) (53) да получилось со второй попытки     | |||
| 55
    
        Волшебник 21.03.23✎ 14:19 | 
        И эти люди автоматизируют страну...     | |||
| 56
    
        Garykom гуру 22.03.23✎ 16:57 | 
        эээ сколько надо символов лопатить чтобы хотя бы секунду заняло любым методом?
 у меня уже Гигастрока = "начало"+СтроковыеФункцииКлиентСервер.СформироватьСтрокуСимволов("у", 10000000000000000000000000);и один фиг оба в пределах секунды | |||
| 57
    
        Волшебник 21.03.23✎ 14:23 | 
        (56) Внутри цикла добавь запрос к регистру бухгалтерии     | |||
| 58
    
        Garykom гуру 21.03.23✎ 14:25 | 
        (57) ыыы     | |||
| 59
    
        magicSan 21.03.23✎ 14:31 | 
        (57) ахахахахаха     | |||
| 60
    
        НафНаф 22.03.23✎ 13:03 | 
        (56) извините, но я вам не верю, что в пределах секунды     | |||
| 61
    
        Garykom гуру 22.03.23✎ 14:09 | 
        (60) i9-13900kf     | |||
| 62
    
        Garykom гуру 22.03.23✎ 14:11 | 
        (60) я тоже подумал что странно
 проверил даже что в функции заполнения нет ограничения на длину числа числа в 1С 32 знака целой части | |||
| 63
    
        magicSan 22.03.23✎ 14:23 | 
        (61) 3 герца, не сильно быстрый у меня изначально тупить начало на генерации строки пришлось число уменьшать. Тоже не верю.     | |||
| 64
    
        magicSan 22.03.23✎ 14:25 | 
        (63) а турбо буст до 6.3? 0о кхм кхм нефига себе, но всё равно не верю.     | |||
| 65
    
        Garykom гуру 22.03.23✎ 14:54 | 
        (60) (63) правильно не верите
 речь про кривой код из (43) там бага с реквизитом формы получается | |||
| 66
    
        Garykom гуру 22.03.23✎ 15:00 | ||||
| 67
    
        lodger 22.03.23✎ 15:12 | 
        (65) так, а в чем баг? интересна ж.     | |||
| 68
    
        Garykom гуру 22.03.23✎ 15:22 | 
        (67) сам то попробуй
 не в реквизит формы а в переменную делать СформироватьСтрокуСимволов() 
 | |||
| 69
    
        Asmody 22.03.23✎ 15:40 | 
        (0) миста помогает https://forum.mista.ru/strrev?переверни%20строку     | |||
| 70
    
        Волшебник 22.03.23✎ 15:48 | 
        (69) Алгоритм этого функционала, пожалуйста, впиши в статью Книга знаний: Перевернуть строку на разных языках программирования     | |||
| 71
    
        НафНаф 22.03.23✎ 15:52 | 
        (66) 2 и 24 секунды     | |||
| 72
    
        Garykom гуру 22.03.23✎ 16:07 | 
        (71) там очень странно
 да почему то второй способ выдает иногда разное время | |||
| 73
    
        Garykom гуру 22.03.23✎ 16:09 | 
        (71) угу 2 и 24 секунды это я опечатался
 но суть что при нескольких запусках там разное время от 16 до 30 секунд выходило | |||
| 74
    
        Garykom гуру 22.03.23✎ 16:21 | 
        Переделал 
 
 | |||
| 75
    
        Garykom гуру 22.03.23✎ 16:21 | ||||
| 76
    
        Garykom гуру 22.03.23✎ 16:24 | 
        СтрСоединить() реально шустро пашет     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |