Имя: Пароль:
1C
1С v8
Изменяется содержимое поля, почему?
0 YVGroshkov
 
04.01.13
01:28
В форме группы справочника есть помимо всех прочих есть 2 поля: Наименование и Адрес. Пытаюсь в поле Адрес впихнуть транслит текста поля Наименование: вешаю процедуру на событие ПриИзменении, но транслитирируются значения ОБЕИХ ПОЛЕЙ. Почему?
Вот модуль формы:
//Транслитирация
Функция ЭмбоссируемоеИмя(ФИО) Экспорт
   сзПеревод = Новый СписокЗначений;
   сзПеревод.Добавить("а","a");
   сзПеревод.Добавить("б","b");
   сзПеревод.Добавить("в","v");
   сзПеревод.Добавить("г","g");
   сзПеревод.Добавить("д","d");
   сзПеревод.Добавить("е","e");
   сзПеревод.Добавить("ж","zh");
   сзПеревод.Добавить("з","z");
   сзПеревод.Добавить("и","i");
   сзПеревод.Добавить("й","y");
   сзПеревод.Добавить("к","k");
   сзПеревод.Добавить("л","l");
   сзПеревод.Добавить("м","m");
   сзПеревод.Добавить("н","n");
   сзПеревод.Добавить("о","o");
   сзПеревод.Добавить("п","p");
   сзПеревод.Добавить("р","r");
   сзПеревод.Добавить("с","s");
   сзПеревод.Добавить("т","t");
   сзПеревод.Добавить("у","u");
   сзПеревод.Добавить("ф","f");
   сзПеревод.Добавить("х","h");
   сзПеревод.Добавить("ц","ts");
   сзПеревод.Добавить("ч","ch");
   сзПеревод.Добавить("ш","sh");
   сзПеревод.Добавить("щ","sch");
   сзПеревод.Добавить("ь","");
   сзПеревод.Добавить("ы","y");
   сзПеревод.Добавить("ъ","");
   сзПеревод.Добавить("э","e");
   сзПеревод.Добавить("ю","yu");
   сзПеревод.Добавить("я","ya");
   сзПеревод.Добавить("-","-");
   сзПеревод.Добавить(",","");
   сзПеревод.Добавить(" ","-");
   Для Каждого Строка Из сзПеревод Цикл  
       ФИО = СтрЗаменить(НРег(ФИО), Строка.Значение, ВРег(Строка.Представление));
   КонецЦикла;
   Возврат НРег(ФИО);
КонецФункции

Процедура НаименованиеПриИзменении() // Обработчик события
   Наименование = ЭлементыФормы.Наименование.Значение;
   ЭлементыФормы.Адрес.Значение = ЭмбоссируемоеИмя(Наименование);
КонецПроцедуры
1 Кокос
 
04.01.13
01:33
дык Наименование = ЭлементыФормы.Наименование.Значение вроде тавталогия. это раз. хотя хз. В УФ не помню как.

во вторых ФИО передается не по значению. сответственно в функции ФИО тоже меняет параметр функции.
2 Кокос
 
04.01.13
01:34
Функция ЭмбоссируемоеИмя(Знач ФИО) Экспорт
3 YVGroshkov
 
04.01.13
01:38
По замечаниям исправил, но следующий код также изменяет значения обоих полей: получается транслитирированный текст и в Наименовании и в Адрес

//Транслитирация
Функция ЭмбоссируемоеИмя(ФИО)
   сзПеревод = Новый СписокЗначений;
   сзПеревод.Добавить("а","a");
   сзПеревод.Добавить("б","b");
   сзПеревод.Добавить("в","v");
   сзПеревод.Добавить("г","g");
   сзПеревод.Добавить("д","d");
   сзПеревод.Добавить("е","e");
   сзПеревод.Добавить("ж","zh");
   сзПеревод.Добавить("з","z");
   сзПеревод.Добавить("и","i");
   сзПеревод.Добавить("й","y");
   сзПеревод.Добавить("к","k");
   сзПеревод.Добавить("л","l");
   сзПеревод.Добавить("м","m");
   сзПеревод.Добавить("н","n");
   сзПеревод.Добавить("о","o");
   сзПеревод.Добавить("п","p");
   сзПеревод.Добавить("р","r");
   сзПеревод.Добавить("с","s");
   сзПеревод.Добавить("т","t");
   сзПеревод.Добавить("у","u");
   сзПеревод.Добавить("ф","f");
   сзПеревод.Добавить("х","h");
   сзПеревод.Добавить("ц","ts");
   сзПеревод.Добавить("ч","ch");
   сзПеревод.Добавить("ш","sh");
   сзПеревод.Добавить("щ","sch");
   сзПеревод.Добавить("ь","");
   сзПеревод.Добавить("ы","y");
   сзПеревод.Добавить("ъ","");
   сзПеревод.Добавить("э","e");
   сзПеревод.Добавить("ю","yu");
   сзПеревод.Добавить("я","ya");
   сзПеревод.Добавить("-","-");
   сзПеревод.Добавить(",","");
   сзПеревод.Добавить(" ","-");
   Для Каждого Строка Из сзПеревод Цикл  
       ФИО = СтрЗаменить(НРег(ФИО), Строка.Значение, ВРег(Строка.Представление));
   КонецЦикла;
   Возврат НРег(ФИО);
КонецФункции

Процедура НаименованиеПриИзменении() // Вставить содержимое обработчика.
   Адрес = ЭмбоссируемоеИмя(Наименование);
КонецПроцедуры
4 YVGroshkov
 
04.01.13
01:39
По идее в Адрес должен падать транслитирированный текст Наименования, но с самим наименованием ничего не должно призходить.
5 Кокос
 
04.01.13
01:40
(3) не учел (2) либо сделать можно еще так

   Для Каждого Строка Из сзПеревод Цикл  
       Результат = СтрЗаменить(НРег(ФИО), Строка.Значение, ВРег(Строка.Представление));
   КонецЦикла;
   Возврат НРег(Результат);
6 GROOVY
 
04.01.13
01:40
ЭлементыФормы - это коллекция для управления видимостью и свойствами элементов формы. Но никак не значений реквизитов.
7 GROOVY
 
04.01.13
01:41
ЭмбоссируемоеИмя(ЗНАЧ ФИО)
8 GROOVY
 
04.01.13
01:42
Учите мат часть. Передача параметров по ссылке и по значению.
9 GROOVY
 
04.01.13
01:42
Чтоб совсем понятно было:

//Транслитирация

Функция ЭмбоссируемоеИмя(ЗНАЧ ФИО)
   сзПеревод = Новый СписокЗначений;
   сзПеревод.Добавить("а","a");
10 YVGroshkov
 
04.01.13
01:46
(9) Спасибо! Кто-ж знал-то, что по-умолчанию параметры предаются по ссылке. :0)

Работает.
11 YVGroshkov
 
04.01.13
11:50
(9)   GROOVY, а где в матчасти это описано?
12 GROOVY
 
06.01.13
20:09
Описание встроенного языка, том1. Под рукой нет. Но там где про объявление процедур и функций. Не далее чем страниц 50 от начала.
13 rozer76
 
06.01.13
20:19
(10) это чтоб "жизнь медом не казалась" при переходе с "нормальных" языков - в одинэс с этим все наоборот :)
14 mikecool
 
06.01.13
20:36
(13) почему? кажись один в один