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

Хранилище

База знаний
Неназначенных незавершенных заказов: 1, свеженьких 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, 15:06
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!