Имя: Пароль:
1C
1С v8
Удаление всех пробелов в автономерных знаках...
0 VSpicy
 
naïve
13.02.20
13:44
Всем доброго дня!
Подскажите пожалуйста как лучше реализовать "Удаление всех пробелов в автономерных знаках"...
Есть справочник транспортных средств, в нём поле "Государственный номер". Сейчас все госномера записаны так: В 122 АМ 777, а нужно так: В122АМ777
Вот код накидал:
Процедура УдалениеПробеловВГосНомерахНаСервере()
    Запрос = Новый Запрос;
    Запрос.Текст =  "ВЫБРАТЬ
                    |    уатТС.ГосударственныйНомер КАК ГосударственныйНомер
                    |ИЗ
                    |    Справочник.уатТС КАК уатТС";
    Транспорт = Запрос.Выполнить().Выгрузить();

    Для Каждого Стр Из Транспорт. Цикл
        УдалениеПробелов = Транспорт;
        УдалениеПробелов.ГосударственыйНомер = СтрЗаменить(УдалениеПробелов.ГосударственыйНомер," ","");
        УдалениеПробелов.Записать();
    КонецЦикла;
    
КонецПроцедуры
Выходит ошибка: ({ВнешняяОбработка.УдалениеПробеловВГосНомерах.Форма.Форма.Форма(20)}: Поле объекта не обнаружено (ГосударственыйНомер)
        УдалениеПробелов.ГосударственыйНомер = СтрЗаменить(УдалениеПробелов.ГосударственыйНомер," ","");

Подскажите пожалуйста что не так делаю или может есть другие варианты решения?
Заранее благодарен!!!
1 vicof
 
13.02.20
13:49
Стр.ГосударственыйНомер = СтрЗаменить(УдалениеПробелов.ГосударственыйНомер," ","");
2 vicof
 
13.02.20
13:50
точней Стр.ГосударственыйНомер = СтрЗаменить(Стр.ГосударственыйНомер," ","");
3 vicof
 
13.02.20
13:51
И точку убрать после транспорта
4 Fish
 
13.02.20
13:55
"   Для Каждого Стр Из Транспорт. Цикл
        УдалениеПробелов = Транспорт;"

Это пять, я считаю :))
5 Fish
 
13.02.20
13:58
+(4) Дальше тоже огонь: "УдалениеПробелов.Записать();"

Это с учетом Транспорт = Запрос.Выполнить().Выгрузить();
И УдалениеПробелов = Транспорт;
6 Homer
 
13.02.20
14:01
Запрос = Новый Запрос;
    Запрос.Текст =  "ВЫБРАТЬ
|    уатТС.Ссылка КАК Ссылка,
                    |    уатТС.ГосударственныйНомер КАК ГосударственныйНомер
                    |ИЗ
                    |    Справочник.уатТС КАК уатТС";
    Транспорт = Запрос.Выполнить().Выгрузить();

    Для Каждого Стр Из Транспорт. Цикл
        УдалениеПробелов = Стр.Ссылка.ПолучитьОбъект();
        УдалениеПробелов.ГосударственыйНомер = СтрЗаменить(УдалениеПробелов.ГосударственыйНомер," ","");
        УдалениеПробелов.Записать();
    КонецЦикла;
7 VSpicy
 
naïve
13.02.20
14:01
(5) Я начинающий)
8 Fish
 
13.02.20
14:03
(7) В (6) правильный код. Ты забыл получить ссылку на объект, который собрался менять.
9 Fish
 
13.02.20
14:03
+(8) Только ещё (3) учесть :)
10 VSpicy
 
naïve
13.02.20
14:07
(9) Да это понятно)
11 Fish
 
13.02.20
14:10
(10) Ну и поле ГосударственныйНомер  в запросе получать необязательно. Достаточно ссылки. Только я бы ещё добавил проверку на наличие пробелов, чтобы не перезаписывать элементы, где в номере уже нет пробелов.
12 VSpicy
 
naïve
13.02.20
14:11
(8) Похоже не совсем правильный...Ошибка осталась: {ВнешняяОбработка.УдалениеПробеловВГосНомерах.Форма.Форма.Форма(21)}: Поле объекта не обнаружено (ГосударственыйНомер)
        УдалениеПробелов.ГосударственыйНомер = СтрЗаменить(УдалениеПробелов.ГосударственыйНомер," ","");
13 VSpicy
 
naïve
13.02.20
14:13
(11) А можно маленький пример такой проверки? Спасибо!!!
14 Fish
 
13.02.20
14:15
(12) Показывай весь код. Может, что не так скопипастил.
(13) например, можно в цикле:
Если <ВСтрокеЕстьПробелы> Тогда

Тут твой код по замене

КонецЕсли;
15 unbred
 
13.02.20
14:16
(13) забей болт. херач все.
(6)  лишили парня отладчика. а он начинающий. грусть.
16 Builder
 
13.02.20
14:17
"Государственый" - с двумя Н пишется, если что. :)
17 unbred
 
13.02.20
14:17
18 Fish
 
13.02.20
14:20
(16) Ну может у него в конфе с одним. Откуда мы знаем :)
19 Fish
 
13.02.20
14:20
+(18) А. не заметил. В (0) с двумя как раз.
20 VSpicy
 
naïve
13.02.20
14:23
(16) Точняк, поспешил не заметил)
21 VSpicy
 
naïve
13.02.20
14:24
Но теперь новая ошибка:
Реквизит недоступен для группы!
22 Fish
 
13.02.20
14:26
(21) Поставь в запросе условие:
ГДЕ НЕ ЭтоГруппа
23 VSpicy
 
naïve
13.02.20
14:26
Можно конечно в реквизите: Использование изменить на "Для группы и элемента"....но наверное есть и другое решение???
24 Fish
 
13.02.20
14:27
(23) Не нужно так делать.
25 GROOVY
 
13.02.20
14:28
Объясните сне нахрена создавать таблицу значений для обхода результата запроса?
26 Fish
 
13.02.20
14:31
(25) Тут человек с более простыми вещами разобраться не может, а ты ему сразу про таблицу. Думаю, в случае ТС, это вообще не принципиально.
27 VSpicy
 
naïve
13.02.20
14:34
Это рабочий вариант! Спасибо всем!!!
Запрос = Новый Запрос;
    Запрос.Текст =  "ВЫБРАТЬ
                    |    уатТС.Ссылка КАК Ссылка,
                    |    уатТС.ГосударственныйНомер КАК ГосударственныйНомер
                    |ИЗ
                    |    Справочник.уатТС КАК уатТС
                    |ГДЕ НЕ ЭтоГруппа";
    Транспорт = Запрос.Выполнить().Выгрузить();

    Для Каждого ТекСтрока Из Транспорт Цикл
        УдалениеПробелов = ТекСтрока.Ссылка.ПолучитьОбъект();
        УдалениеПробелов.ГосударственныйНомер = СтрЗаменить(УдалениеПробелов.ГосударственныйНомер," ","");
        УдалениеПробелов.Записать();
    КонецЦикла;
28 unbred
 
13.02.20
14:34
(25) а я всегда ТЗ юзаю. не использую следующий().
поясни, в чём ошибка?
29 novichok79
 
13.02.20
14:41
(27) через выборку кошернее
30 unbred
 
13.02.20
14:42
(29) мне бы хотелось получить ответ от GROOVY
31 novichok79
 
13.02.20
14:58
https://its.1c.ru/db/v8std#content:725:hdoc
специально залез, написано, что надо насильно ограничивать выборку. ТЗ и выборка без ограничения размеров - плохо.
32 unbred
 
13.02.20
15:10
(31) не приходилось оптимизировать подобным способом ни разу.
а вот вместо выборки делать ТЗ и кайфовать от набора методов - очень часто.
для всего есть свой инструмент. в конкретном случае нам в любом случае обходить весь массив номеров. по мне дак фиолетово, каким способом.
33 _Дайвер_
 
13.02.20
15:21
Сейчас все госномера записаны так: В 122 АМ 777, а нужно так: В122АМ777, кто сказал что нужно так? Это правильный формат, так то, а в случае необходимости вывода без пробела можно и СтрЗаменить() использовать. Я видел в гос номерах такой ужОс, что капец.
//В 122 АМ 777
В122АМ777
В122АМ 777
В 122 АМ (777)
В-122-АМ-777
В-122-АМ(777)
В/122/АМ/777
В 122 АМ ( 77)
А еще вместо латиницы кириллица, вместо О писали 0, использовали в номерах неиспользуемые символы и т.д.
34 _Дайвер_
 
13.02.20
15:25
(33) + вместо кириллицы использовали латинский алфавит, или совместно
35 unbred
 
13.02.20
15:27
(33) "кто сказал что нужно так"// сказал чувак, который пишет обмен с сайтом.
36 Йохохо
 
13.02.20
15:30
(35) полтотекстовый поиск и ввод по наименованию платформенный заплакали)
а ТС получит незачет и вернется перечитать (33)
37 _Дайвер_
 
13.02.20
15:38
(35) Серьезно? Чем ему не нравится с пробелами? Есть ограничения какие-то, или это требование стороннего сайта? А синхронизация тоже по номеру будет идти? Чувак который пишет обмен с сайтом...
38 GROOVY
 
13.02.20
15:51
(28) Все просто вы создаете еще одну таблицу в памяти, в дополнение к результату запроса, вместо того чтобы порционно считывать выборкой по 25 строк. И это плохо, особенно если запрос выбрал пару миллионов строк.
39 pechkin
 
13.02.20
15:54
(38) выборка не считывает порционно.
не ужто ты такому учишь? хоть ИТС почитал
40 unbred
 
13.02.20
15:56
(39) да он сам писал этот ИТС))
41 unbred
 
13.02.20
15:57
(37) одна из догадок, не более. (скорее всего стороннего сайта)
42 unbred
 
13.02.20
16:02
раз пошла такая пьянка, великие оптимизаторы, посоветуйте , как перепровести 5 доков за 4 года максимально быстро? (примерное 300-500 доков  в день в базе (сумма 5ти документов))
43 hhhh
 
13.02.20
16:27
(42) транзакцию используйте. по 500 документов одной транзакции
44 pechkin
 
13.02.20
16:33
(40) так на ИТС явно сказано что запрос.выполнить().выбрать() и выгрузить() - одинаково
45 pechkin
 
13.02.20
16:34
(43) в 8 такое не работает на ускорение, только в 7
46 VSpicy
 
naïve
13.02.20
17:08
(33) Это правильное оформление! Требуемое ГИБДД!
47 hhhh
 
13.02.20
17:12
(45) да ладно. Всё там работает в восьмерке. До 100 раз можно получить ускорение.
48 VSpicy
 
naïve
13.02.20
17:12
(33) У нас идет обмен из УАТ в Альфа-Авто, а уже из Альфы в ЕАИСТО.
49 VSpicy
 
naïve
13.02.20
17:14
(33) А от ЕАИСТО получаем ошибку из-за неправильно оформленного госномера.
И приходится постоянно руками править в Альфе!
50 Йохохо
 
13.02.20
17:17
(46) тебе указали на плохой алгоритм, мало ошибок ловишь
51 DrWatson
 
13.02.20
17:25
(49) Убрать пробелы в момент выгрузки в ЕАИСТО. Пусть в базе остаётся с пробелами, так пользователям, наверное, удобнее.
52 VSpicy
 
naïve
13.02.20
21:00
(51)А вот это мысль хорошая... Спасибо, надо будет подумать!
2 + 2 = 3.9999999999999999999999999999999...