При использовании универсальной обработки «Загрузка данных из табличного документа» пользователи и разработчики часто сталкиваются с ситуацией, когда текстовые данные (наименование, артикул, цена) переносятся корректно, но поле Количество остается пустым или вызывает ошибки проведения документа. Разберем основные причины этой проблемы и варианты ее решения.
Проанализируем механику работы табличных частей документов в таких конфигурациях, как «1С:Розница», «1С:Управление торговлей» или «1С:ERP». Если в программе включен учет по упаковкам, структура табличной части документа содержит два взаимосвязанных реквизита:
КоличествоУпаковок — число единиц в выбранной упаковке;Количество — итоговое количество в базовых единицах измерения.При стандартном интерактивном вводе пользователь указывает количество упаковок, а обработчик события формы автоматически рассчитывает базовое количество. Однако универсальная обработка заполняет реквизиты напрямую в памяти без вызова клиентских обработчиков событий формы. В результате, если сопоставить колонку из Excel только с одним из полей, документ не сможет корректно рассчитать сумму или не пройдет проверку заполнения при проведении.
Решение:
В настройках колонок обработки загрузки укажите загрузку сразу в оба реквизита: Количество и КоличествоУпаковок. Если упаковки не используются, убедитесь, что реквизит Упаковка незаполнен (пустая ссылка), тогда коэффициент пересчета будет равен единице.
Выясним, почему при заполнении цены и количества не рассчитывается поле Сумма. Универсальная обработка загружает данные непосредственно в объект или табличную часть. События формы (например, ПриИзменении) при этом не запускаются.
Варианты решения:
Сумма установите режим загрузки «Вычислять» и пропишите выражение на языке 1С.Если при попытке загрузить числовые данные возникает ошибка «Неправильный формат данных», проблема заключается в представлении строки в самом файле. В Excel часто используются неразрывные пробелы в качестве разделителей триад (тысяч), либо разделителем дробной части выступает точка вместо запятой.
Посмотрим, как очистить входящую строку от лишних символов перед приведением к типу Число. Для колонки с количеством или суммой выберите режим «Вычислять» и укажите следующий код:
СтрокаЗначения = ТекстыЯчеек.Получить(НомерКолонки);
// Удаляем неразрывные пробелы и обычные пробелы
СтрокаЗначения = СтрЗаменить(СтрокаЗначения, Символы.НПП, "");
СтрокаЗначения = СтрЗаменить(СтрокаЗначения, " ", "");
// Приводим разделитель дробной части к точке
СтрокаЗначения = СтрЗаменить(СтрокаЗначения, ",", ".");
Результат = Число(СтрокаЗначения);
Рассмотрим еще одну распространенную задачу при импорте данных: сопоставление характеристик с номенклатурой. Поскольку характеристики зависят от владельца (конкретного элемента справочника Номенклатура или элемента ВидыНоменклатуры), простой поиск по наименованию может работать некорректно.
Чтобы заставить характеристики заполняться правильно в зависимости от вида номенклатуры или самой номенклатуры, установите для реквизита Характеристика режим загрузки «Вычислять».
Пример 1. Поиск характеристики с передачей вида номенклатуры в качестве владельца:
СсылкаНоменклатуры = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", ТекстыЯчеек.Получить(1));
Результат = Справочники.ХарактеристикиНоменклатуры.НайтиПоНаименованию(ТекстыЯчеек.Получить(2),,, СсылкаНоменклатуры.ВидНоменклатуры);
Пример 2. Поиск индивидуальной характеристики номенклатуры по текущей строке:
СсылкаНоменклатуры = Справочники.Номенклатура.НайтиПоНаименованию(ТекущиеДанные["Номенклатура"]);
ТекСпр = Справочники.ХарактеристикиНоменклатуры.НайтиПоРеквизиту("Наименование", ТекущиеДанные["Характеристика"],, СсылкаНоменклатуры);
Результат = ТекСпр.Ссылка;
Для успешного импорта табличных данных с количеством и суммами соблюдайте следующие правила:
Количество и КоличествоУпаковок;Символы.НПП перед превращением строки в число;ХарактеристикиНоменклатуры) всегда передавайте правильного владельца в функции поиска.