Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 1C: Предприятие, SAP, ERP и учётные системы > Работа с формой ввода


Автор: bucdapuswert 19.5.2007, 16:25
В модуле формы элемента функция или процедура может преобразовывать вводимые ФИО 
таким образом, что первые буквы ФИО будут прописными, а другие строчными(Кузьмин Иван Петрович)
когда вводим кузьмин иван петрович,также не должно быть сокращений типа Кузьмин И.П (за это отвечает Функция контроля точки)
и функция удаления лишних пробелов.Но почему то это не работает(хотя проверял 1000 раз), помогите студенту найти ошибку, и исправить ее.

Код

Процедура ПриОткрытии() 
    ОчиститьОкноСообщений();
    форма.ПанельИнструментов(0);
    форма.Заголовок("Сотрудник предприятия");
КонецПроцедуры

функция КонтрольФИО(место=1) далее
процедура УбратьПробелы() далее
процедура ВНРег() далее
Процедура ПриЗаписи() 
    Если (ПустоеЗначение(Наименование)=1) или (ПустоеЗначение(Оклад)=1)  Тогда
        предупреждение("В диалоге есть неопределенные реквизиты.");
        СтатусВозврата(0);
    иначеЕсли КонтрольФИО(2)=0 тогда
        СтатусВозврата(0);
    КонецЕсли;            
КонецПроцедуры

Функция КонтрольФИО(место=1) 
    Если место=1 Тогда
        УбратьПробелы();
        ВНРег();
    КонецЕсли;  
    Если Найти(Наименование,".")<>0 Тогда
        предупреждение("Точки в ФИО недопустимы.");
        возврат 0;
    иначе
        возврат 1;
    КонецЕсли;
КонецФункции

Процедура УбратьПробелы()
    перем длина,поз,к;
    Наименование=СокрЛП(Наименование);
    поз=Найти(Наименование," "); 
    к=1;
    Пока поз>0 Цикл
        длина=стрДлина(Наименование);
        
        Пока (поз<длина) и (Сред(Наименование,поз+к,1)=" ") Цикл
            к=к+1;
        КонецЦикла;  
    Наименование=Лев(Наименование,поз)+Прав(Наименование,длина-поз-к+1);
поз=Найти(Наименование," ");    
КонецЦикла;  
КонецПроцедуры 
 
 Процедура ВНРег() 
    перем к,длина;  
    длина=стрДлина(Наименование);
    Если длина=0 Тогда
        возврат;
    конецЕсли;
    Наименование=Нрег(Наименование); 
    Наименование=Врег(Лев(Наименование,1))+Прав(Наименование,длина-1);
    к=найти(Наименование," ");
    Пока к>0 Цикл
    Наименование=Лев(Наименование,к-1)+"%"+Врег(Сред(Наименование,к+1,1))+Прав(Наименование,длина-к-1);
    к=Найти(Наименование," ");
 КонецЦикла; 
 Наименование=СтрЗаменить(Наименование,"%"," ");
КонецПроцедуры

Автор: Engee 20.5.2007, 23:21
Во-первых для поиска ошибок стоит использовать отладчик.
Во-вторых, я при визуальном просмотре кода не увидел, где у тебя должен быть переход к процедурам УбратьПробелы() и ВНРег(). Переход к ним возможен в случае, когда в функцию КонтрольФИО() передается параметр 1, а ты передаешь туда параметр 2, т.о. перехода к вышеуказанным процедурам не происходит. 

P.S. когда исправишь эту ошибку, то сразу же возникнет другая - зацикливание smile Сразу скажу, чтобы прекратить выполнение обработки в 1С надо нажимать ESC smile Скорее всего тебе прийдется полностью переписать процедуру УбратьПробелы(), чтобы она заработала . Ну а дальше разбирайся сам smile

P.P.S. Странно ты проверял все (да и еще 1000 раз smile ). Судя по тому что я увидел код правильно работать не должен smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)