Удлинение ИНН до 18 знаков. УНФ 1.6

Ранее клиент обращался ко мне с задачей удлинить ИНН до 18 знаков. Причина в том, что обработка клиент-банк использует ИНН для иностранных контрагентов и проще удлинить ИНН, чем переписывать клиент-банк.

Я зашел в конфигуратор и удлиннил ИНН. Тестировал, конечно же, код такой:

&НаКлиентеНаСервереБезКонтекста
&Вместо(«СформироватьПредставлениеПроверкиИНН»)
Процедура дор_СформироватьПредставлениеПроверкиИНН(Форма)
   
ПродолжитьВызов(Форма);

   
//Осипов 2021-03-23
   
Если ВРЕГ(СокрЛП(Форма.Объект.СтранаРегистрации)) <> «РОССИЯ» Тогда
       
ОписаниеОшибки = «»;
       
Форма.Объект.ИННВведенКорректно = Истина;
       
Форма.ПредставлениеПроверкиИНН = «»;
    КонецЕсли;

КонецПроцедуры

Вот как сейчас помню, что при тестировании мне удавалось вводить длинный ИНН, хотя может я просто вводил ИНН из букв, не помню. Но в итоге ко мне обратился клиент с жалобой, что не может ввести ИНН более 10 знаков.

Пришлось продолжить разработку.

Обнаружил, что длина ИНН ограничивается в процедуре УправлениеФормой формы контрагента, причем через приведение к типу длиной 10:

Подумал, как обойти эту процедуру, не ковыряя ее внутренности, сделал так:


&НаКлиенте
&Вместо(«УправлениеФормой»)
Процедура дор_УправлениеФормой()

   
Элементы.ИНН.МаксимальнаяШирина = 18;
   
ПредМодифицированность = Модифицированность;
   
ПредИНН = Объект.ИНН;

   
ПродолжитьВызов(); //Тут обрезается ИНН типовым кодом

   
Элементы.ИНН.ОграничениеТипа                        = Новый ОписаниеТипов(«Строка»,,Новый КвалификаторыСтроки(18));
   
Объект.ИНН = ПредИНН;
   
Модифицированность = ПредМодифицированность;

КонецПроцедуры

Проверяю, ввожу длинный ИНН:

Но он беспощадно обрезается до 10 символов:

Пришлось взять в руки отладчик, нашел что в серверном событии «Перед записью»:

Ну что же, этот код тоже можно технично изолировать:

&Вместо(«ПередЗаписью»)
Процедура дор_ПередЗаписью(Отказ)
   
//Через ЭтотОбъект, чтобы не включать ИНН в расширение
   
ПредИНН = ЭтотОбъект.ИНН;

   
ПродолжитьВызов(Отказ); //Тут обрезается ИНН типовым кодом

   
ЭтотОбъект.ИНН = ПредИНН;

КонецПроцедуры

Ну вот, теперь желанный 18-значный ИНН вводится без проблем.

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

комментария 2

  1. Павел:

    Писателям типовых мое почтение…
    Одно и тоже править в трех (!!!) местах…
    Да еще с использованием magic numbers.
    И эти люди учат других как писать, говорят что в 1с все хорошо, ИТС всем под нос суют

Добавить комментарий для Павел Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *