Удлинение ИНН до 18 знаков. УНФ 1.6
Ранее клиент обращался ко мне с задачей удлинить ИНН до 18 знаков. Причина в том, что обработка клиент-банк использует ИНН для иностранных контрагентов и проще удлинить ИНН, чем переписывать клиент-банк.
Я зашел в конфигуратор и удлиннил ИНН. Тестировал, конечно же, код такой:
&НаКлиентеНаСервереБезКонтекста
&Вместо(«СформироватьПредставлениеПроверкиИНН»)
Процедура дор_СформироватьПредставлениеПроверкиИНН(Форма)
ПродолжитьВызов(Форма);
//Осипов 2021-03-23
Если ВРЕГ(СокрЛП(Форма.Объект.СтранаРегистрации)) <> «РОССИЯ» Тогда
ОписаниеОшибки = «»;
Форма.Объект.ИННВведенКорректно = Истина;
Форма.ПредставлениеПроверкиИНН = «»;
КонецЕсли;
КонецПроцедуры
Вот как сейчас помню, что при тестировании мне удавалось вводить длинный ИНН, хотя может я просто вводил ИНН из букв, не помню. Но в итоге ко мне обратился клиент с жалобой, что не может ввести ИНН более 10 знаков.
Пришлось продолжить разработку.
Обнаружил, что длина ИНН ограничивается в процедуре УправлениеФормой формы контрагента, причем через приведение к типу длиной 10:
Подумал, как обойти эту процедуру, не ковыряя ее внутренности, сделал так:
&НаКлиенте
&Вместо(«УправлениеФормой»)
Процедура дор_УправлениеФормой()
Элементы.ИНН.МаксимальнаяШирина = 18;
ПредМодифицированность = Модифицированность;
ПредИНН = Объект.ИНН;
ПродолжитьВызов(); //Тут обрезается ИНН типовым кодом
Элементы.ИНН.ОграничениеТипа = Новый ОписаниеТипов(«Строка»,,Новый КвалификаторыСтроки(18));
Объект.ИНН = ПредИНН;
Модифицированность = ПредМодифицированность;
КонецПроцедуры
Проверяю, ввожу длинный ИНН:
Но он беспощадно обрезается до 10 символов:
Пришлось взять в руки отладчик, нашел что в серверном событии «Перед записью»:
Ну что же, этот код тоже можно технично изолировать:
&Вместо(«ПередЗаписью»)
Процедура дор_ПередЗаписью(Отказ)
//Через ЭтотОбъект, чтобы не включать ИНН в расширение
ПредИНН = ЭтотОбъект.ИНН;
ПродолжитьВызов(Отказ); //Тут обрезается ИНН типовым кодом
ЭтотОбъект.ИНН = ПредИНН;
КонецПроцедуры
Ну вот, теперь желанный 18-значный ИНН вводится без проблем.
Писателям типовых мое почтение…
Одно и тоже править в трех (!!!) местах…
Да еще с использованием magic numbers.
И эти люди учат других как писать, говорят что в 1с все хорошо, ИТС всем под нос суют
Ага. Сурово нормализованный код. Зато без запросов в цикле, это важно!