Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Проверка украинский ИНН          
sqr4 Подменю пользователя
сообщение 03.09.13, 14:55
Сообщение #1

Молчаливый
*
Группа: Пользователи
Сообщений: 1
Спасибо сказали: 0 раз
Рейтинг: 0

Не могу понять как контролировать ввод для украинских ИНН.
Перем ДлинаКода, ДлинаПроверки;
        ЕстьОшибкаВКоде=Ложь;
        
        ИНН = СокрЛП(ИНН);
        Если СтрДлина(ИНН)<>10 И СтрДлина(ИНН)<>9 И СтрДлина(ИНН)<>12 Тогда 
            #Если Клиент Тогда
                Сообщить("Не соответствует длина кода ИНН", СтатусСообщения.Важное);
            #КонецЕсли  
            Возврат Ложь;
        КонецЕсли;
        
        Если СтрДлина(ИНН)=10 Тогда 
            ДлинаПроверки = Число(Left(ИНН, 1))   * -1 +Число(Сред(ИНН, 2, 1)) * 5 + Число(Сред(ИНН, 3, 1)) * 7
            + Число(Сред(ИНН, 4, 1)) * 9 +Число(Сред(ИНН, 5, 1)) * 4 
            +Число(Сред(ИНН, 6, 1)) * 6 +Число(Сред(ИНН, 7, 1)) * 10 
            +Число(Сред(ИНН, 8, 1)) * 5 + Число(Сред(ИНН, 9, 1)) * 7;
            ДлинаКода = ДлинаПроверки-Цел(ДлинаПроверки/11)*11;
            Если ДлинаКода=10 Тогда 
                ДлинаКода = 0;
            КонецЕсли;
            Если Число(Прав(ИНН,1))=ДлинаКода Тогда 
                ЕстьОшибкаВКоде = Ложь;
            Иначе 
                ЕстьОшибкаВКоде = Истина;
            КонецЕсли;
        ИначеЕсли СтрДлина(ИНН)=12 Тогда 
            ДлинаПроверки = 
            Число(Лев(ИНН,   1))  * 11 
            + Число(Сред(ИНН, 2, 1))  * 13 
            + Число(Сред(ИНН, 3, 1))  * 17 
            + Число(Сред(ИНН, 4, 1))  * 19 
            + Число(Сред(ИНН, 5, 1))  * 23 
            + Число(Сред(ИНН, 6, 1))  * 29 
            + Число(Сред(ИНН, 7, 1))  * 31 
            + Число(Сред(ИНН, 8, 1))  * 37 
            + Число(Сред(ИНН, 9, 1))  * 41 
            + Число(Сред(ИНН, 10, 1)) * 43 
            + Число(Сред(ИНН, 11, 1)) * 47;
            ДлинаКода = ДлинаПроверки-Цел(ДлинаПроверки/11)*11;
            Если ДлинаКода = 10 Тогда
                ДлинаПроверки = 
                Число(Лев(ИНН,   1))  * 13 
                + Число(Сред(ИНН, 2, 1))  * 17 
                + Число(Сред(ИНН, 3, 1))  * 19 
                + Число(Сред(ИНН, 4, 1))  * 23 
                + Число(Сред(ИНН, 5, 1))  * 29 
                + Число(Сред(ИНН, 6, 1))  * 31 
                + Число(Сред(ИНН, 7, 1))  * 37 
                + Число(Сред(ИНН, 8, 1))  * 41 
                + Число(Сред(ИНН, 9, 1))  * 43 
                + Число(Сред(ИНН, 10, 1)) * 47 
                + Число(Сред(ИНН, 11, 1)) * 53;
                ДлинаКода = ДлинаПроверки-Цел(ДлинаПроверки/11)*11;
                Если ДлинаКода=10 Тогда 
                    ДлинаКода = 0;
                КонецЕсли;
            КонецЕсли;
            Если Число(Прав(ИНН,1))=ДлинаКода Тогда 
                ЕстьОшибкаВКоде = Ложь;
            Иначе 
                ЕстьОшибкаВКоде = Истина;
            КонецЕсли;
        Иначе 
            ДлинаПроверки = 
            Число(Лев(ИНН,   1))  * 9 
            + Число(Сред(ИНН, 2, 1))  * 11 
            + Число(Сред(ИНН, 3, 1))  * 13 
            + Число(Сред(ИНН, 4, 1))  * 17 
            + Число(Сред(ИНН, 5, 1))  * 19 
            + Число(Сред(ИНН, 6, 1))  * 23 
            + Число(Сред(ИНН, 7, 1))  * 29 
            + Число(Сред(ИНН, 8, 1))  * 31;
            
            ДлинаКода = ДлинаПроверки-Цел(ДлинаПроверки/11)*11;
            Если  ДлинаКода=10 Тогда
                ДлинаПроверки = 
                Число(Лев(ИНН,   1))  * 11 
                + Число(Сред(ИНН, 2, 1))  * 13 
                + Число(Сред(ИНН, 3, 1))  * 17 
                + Число(Сред(ИНН, 4, 1))  * 19 
                + Число(Сред(ИНН, 5, 1))  * 23 
                + Число(Сред(ИНН, 6, 1))  * 29 
                + Число(Сред(ИНН, 7, 1))  * 31 
                + Число(Сред(ИНН, 8, 1))  * 37;
                ДлинаКода = ДлинаПроверки-Цел(ДлинаПроверки/11)*11;
                Если ДлинаКода=10 Тогда 
                    ДлинаКода = 0;
                КонецЕсли;
                
                Если Число(Прав(ИНН,1))=ДлинаКода Тогда 
                    ЕстьОшибкаВКоде = Ложь;
                Иначе 
                    ЕстьОшибкаВКоде = Истина;
                КонецЕсли;
                
            Иначе 
                ЕстьОшибкаВКоде = Истина;
            КонецЕсли;
        КонецЕсли;
        
        Если ЕстьОшибкаВКоде Тогда
            #Если Клиент Тогда
                Сообщить("Ошибка в коде ИНН", СтатусСообщения.Важное);
            #КонецЕсли  
        КонецЕсли;
        
        Возврат Не ЕстьОшибкаВКоде;

делаю так. Но если ДлинаКода=10, тогда валится и считает не правильно вот для этого ИНН 323752326504 и для этого 235983905269

Сообщение отредактировал logist - 03.09.13, 15:15

Petre Подменю пользователя
сообщение 03.09.13, 17:03
Сообщение #2

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2920
Из: Київ, Україна
Спасибо сказали: 1239 раз
Рейтинг: 1345.6

http://pro1c.org.ua/index.php?showtopic=13...amp;#entry73269


Signature
Допрацьовую:
- "Бухгалтерія для України 2.1";
- "Альфа-Авто: Автосалон+Автосервіс+Автозапчастини, українська версія".

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 04.07.25, 8:14
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!