Вход | Регистрация

1С:Предприятие ::

Метки: 

Изменяется содержимое поля, почему?

Я
   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
Функция ЭмбоссируемоеИмя(Знач ФИО) Экспорт
   YVGroshkov
 
3 - 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");
    сзПеревод.Добавить("-","-");
    сзПеревод.Добавить(",","");
    сзПеревод.Добавить(" ","-");
    Для Каждого Строка Из сзПеревод Цикл  
        ФИО = СтрЗаменить(НРег(ФИО), Строка.Значение, ВРег(Строка.Представление));
    КонецЦикла;
    Возврат НРег(ФИО);
КонецФункции

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

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

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


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