Имя: Пароль:
1C
 
Контроль ИНН и ККП
0 Чертеночек
 
07.12.10
16:28
Ребята подскажите кто и как делал контроль ИНН и КПП, чтобы левые в базу не забивали...
1 Irbis
 
07.12.10
16:28
2 Maxus43
 
07.12.10
16:29
а разве его нет изначально? в типовых?
3 Чертеночек
 
07.12.10
16:30
а на 1С???
4 Irbis
 
07.12.10
16:31
(3) А какая разница, там главное алгоритм формирования контрольных цифр
5 Maxus43
 
07.12.10
16:32
ИННОрг = ?(ЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо, ИндивидуальныйПредприниматель.ИНН, ИНН);
   Если НЕ ПустаяСтрока(ИННОрг) И НЕ РегламентированнаяОтчетность.ИННСоответствуетТребованиям(ИННОрг, ЮрФизЛицо) Тогда
       Сообщить("ИНН организации задан неверно!", СтатусСообщения.Важное);
       Отказ = Истина;
   КонецЕсли;
   Если ЮрФизЛицо <> Перечисления.ЮрФизЛицо.ФизЛицо И Ссылка.КПП <> КПП Тогда
       Если НЕ ПустаяСтрока(КПП) И СтрДлина(КПП) <> 9 Тогда
           Сообщить("КПП организации задан неверно!", СтатусСообщения.Важное);
           Отказ = Истина;
       КонецЕсли;
   КонецЕсли;
6 Чертеночек
 
07.12.10
16:32
(2) нет там только на длину проверка и на то, чтобы одинаковых не было...
7 Maxus43
 
07.12.10
16:34
(6) ТОгда будем копипастить

РегламентированнаяОтчетность.ИННСоответствуетТребованиям

Функция ИННСоответствуетТребованиям(Знач ИНН, Знач ТипЛица) Экспорт

   ИНН = СокрЛП(ИНН);
   ДлинаИНН =  СтрДлина(ИНН);

   Если НЕ ОбщегоНазначения.ТолькоЦифрыВСтроке(ИНН) Тогда
       Возврат Ложь;
   КонецЕсли;
   
   Если Метаданные.Перечисления.Найти("ЮрФизЛицо") = Неопределено Тогда
       ПроверяетсяИННФизЛица = ТипЛица;
   Иначе
       ПроверяетсяИННФизЛица = (ТипЛица = Истина ИЛИ ТипЛица = Перечисления.ЮрФизЛицо.ФизЛицо);
   КонецЕсли;
   
   Если ДлинаИНН = 10  И НЕ ПроверяетсяИННФизЛица Тогда

       КонтрольнаяСумма = 0;

       Для Н = 1 По 9 Цикл

           Если      Н = 1 Тогда
               Множитель = 2;
           ИначеЕсли Н = 2 Тогда
               Множитель = 4;
           ИначеЕсли Н = 3 Тогда
               Множитель = 10;
           ИначеЕсли Н = 4 Тогда
               Множитель = 3;
           ИначеЕсли Н = 5 Тогда
               Множитель = 5;
           ИначеЕсли Н = 6 Тогда
               Множитель = 9;
           ИначеЕсли Н = 7 Тогда
               Множитель = 4;
           ИначеЕсли Н = 8 Тогда
               Множитель = 6;
           ИначеЕсли Н = 9 Тогда
               Множитель = 8;
           КонецЕсли;
           
           Цифра = Число(Сред(ИНН,Н,1));
           КонтрольнаяСумма = КонтрольнаяСумма + Цифра * Множитель;
           
       КонецЦикла;
       
       КонтрольныйРазряд = (КонтрольнаяСумма %11) %10;
       
       Если КонтрольныйРазряд <> Число(Сред(ИНН,10,1)) Тогда
           Возврат Ложь;
       КонецЕсли;
       
   ИначеЕсли ДлинаИНН =12 И ПроверяетсяИННФизЛица Тогда
       
       КонтрольнаяСумма11 = 0;
       КонтрольнаяСумма12 = 0;
       
       Для Н=1 По 11 Цикл
           
           // Расчет множителя для 11-го и 12-го разрядов
           Если Н = 1 Тогда
               Множитель11 = 7;
               Множитель12 = 3;
           ИначеЕсли Н = 2 Тогда
               Множитель11 = 2;
               Множитель12 = 7;
           ИначеЕсли Н = 3 Тогда
               Множитель11 = 4;
               Множитель12 = 2;
           ИначеЕсли Н = 4 Тогда
               Множитель11 = 10;
               Множитель12 = 4;
           ИначеЕсли Н = 5 Тогда
               Множитель11 = 3;
               Множитель12 = 10;
           ИначеЕсли Н = 6 Тогда
               Множитель11 = 5;
               Множитель12 = 3;
           ИначеЕсли Н = 7 Тогда
               Множитель11 = 9;
               Множитель12 = 5;
           ИначеЕсли Н = 8 Тогда
               Множитель11 = 4;
               Множитель12 = 9;
           ИначеЕсли Н = 9 Тогда
               Множитель11 = 6;
               Множитель12 = 4;
           ИначеЕсли Н = 10 Тогда
               Множитель11 = 8;
               Множитель12 = 6;
           ИначеЕсли Н = 11 Тогда
               Множитель11 = 0;
               Множитель12 = 8;
           КонецЕсли;
           
           Цифра = Число(Сред(ИНН,Н,1));
           КонтрольнаяСумма11 = КонтрольнаяСумма11 + Цифра * Множитель11;
           КонтрольнаяСумма12 = КонтрольнаяСумма12 + Цифра * Множитель12;
           
       КонецЦикла;
       
       КонтрольныйРазряд11 = (КонтрольнаяСумма11 %11) %10;
       КонтрольныйРазряд12 = (КонтрольнаяСумма12 %11) %10;
       
       Если КонтрольныйРазряд11 <> Число(Сред(ИНН,11,1))
           ИЛИ КонтрольныйРазряд12 <> Число(Сред(ИНН,12,1)) Тогда
           Возврат Ложь;
       КонецЕсли;
       
   Иначе
       
       Возврат Ложь;
       
   КонецЕсли;
   
   Возврат Истина;
   
КонецФункции
8 IamAlexy
 
07.12.10
16:35
я на ИС выкладывал генератор ИнН и КПП которые "левые" но проверки проходят.. так что - либо подключай ЕГРЮЛ либо забей.
9 Чертеночек
 
07.12.10
16:35
(4) ха круто... у нас нифига не вызыватся эта функция....((( пипец
10 Чертеночек
 
07.12.10
16:36
Ребята спасибо)))
чтобы я  без вас делала)))
11 Maxus43
 
07.12.10
16:44
(10) имела бы более достойную и прибыльную работу...)
12 andrewks
 
07.12.10
16:58
(7) вот это изврат!!! вот уж точно - доступно и всерьёз. я сам писал, по описанию контрольного механизма в ИНН
13 Maxus43
 
07.12.10
16:58
(12) это типовое из УПП)
14 Mikeware
 
07.12.10
16:59
(11) ровно вдвое более прибыльную!
15 Mikeware
 
07.12.10
17:00
(12) делать что-то самостоятельно при наличии интернета - плохой тон.
16 andrewks
 
07.12.10
17:00
(13) я понял, я к ним и адресовал
17 Irbis
 
07.12.10
17:01
(12) а у нас еще и ОКПО, ОГРН и еще много каких кодов контролируется (ж/д станции, номера вагонов и т. п. ерунда)
18 andrewks
 
07.12.10
17:01
(17) агась!
19 Maxus43
 
07.12.10
17:05
(17) В УПП они тоже контролируются, функции контроля в том же общем модуле все
20 Irbis
 
07.12.10
17:07
(19) Я на УПП даже не смотрел, и БП у нас насяльника сопровождает.
21 Maxus43
 
07.12.10
17:08
(20) ну щас знаеш откуда тырить готовое)
22 Irbis
 
07.12.10
17:09
(21) Поздняк уже, сам все когда-то давно нашел, закодил. Теперь уже и неинтересно.