Как узнать длину строкового реквизита, указанную в конфигураторе, на примере дополнения числа ведущими нулями.

Поводом для заметки послужила проблема импорта приходной накладной из файла Excel, где связь между номенклатурой осуществлялась по некоему "коду поставщика", представляющему собой заданное количество цифр (в данном случае 6). Оказалось, что при импорте ведущие нули отбрасываются и код форматируется в стандартный числовой формат, включая разделитель тысяч (например "12 345"). А в реквизите, разумеется, код хранится как положено - 012345, в итоге номенклатура не сопоставлялась.

Несмотря на то, что вроде как можно было бы в коде (программном) просто использовать известную нам длину (6), я решил все же сделать более универсально и эту самую длину получать из метаданных - дело в том, что ранее, например, использовался 5-тизначный код. Так что нет гарантий, что через некоторое время он не станет, например, 7-значным. Итак, для того, чтобы узнать максимальную длину реквизита КодПоставщика справочника Номенклатура необходимо воспользоваться такой достаточно громоздкой конструкцией:

КодПоставщикаРеквизит = Метаданные.Справочники.Номенклатура.Реквизиты.КодПоставщика;
ДлинаКодаПоставщика = КодПоставщикаРеквизит.Тип.КвалификаторыСтроки.Длина;

Дальше остается переформатировать код поставщика, полученный из Excel:

КПExcel = Число(СокрЛП(Лист.Cells(НомерСтроки, НомерСтолбца).Value));
КодПоставщика = Формат(КПExcel, "ЧЦ=" + ДлинаКодаПоставщика + "; ЧВН=; ЧГ=0");

Форматная строка говорит нам о том, что длина у нас равна длине реквизита, будем использовать ведущие нули, а разделитель групп отсутствует. Переменная Лист - OLE-объект текущего листа Excel.

Вот такие немного вычурные и не вполне очевидные конструкции.


Категория: Программирование, 1С | Опубликовано 12.01.2012 | Редакция от 29.01.2017

Похожие материалы:


Комментарии, обсуждение

комментарии простроенны на платформе Disqus