Почему не проставляется количество при загрузке данных из табличного документа в 1С?

Программист 1С:Розница Управленческий учет Торговля и дистрибуция
← На главную

При использовании универсальной обработки «Загрузка данных из табличного документа» пользователи и разработчики часто сталкиваются с ситуацией, когда текстовые данные (наименование, артикул, цена) переносятся корректно, но поле Количество остается пустым или вызывает ошибки проведения документа. Разберем основные причины этой проблемы и варианты ее решения.

Причина 1. Использование учета по упаковкам в конфигурациях 1С

Проанализируем механику работы табличных частей документов в таких конфигурациях, как «1С:Розница», «1С:Управление торговлей» или «1С:ERP». Если в программе включен учет по упаковкам, структура табличной части документа содержит два взаимосвязанных реквизита:

  1. КоличествоУпаковок — число единиц в выбранной упаковке;
  2. Количество — итоговое количество в базовых единицах измерения.

При стандартном интерактивном вводе пользователь указывает количество упаковок, а обработчик события формы автоматически рассчитывает базовое количество. Однако универсальная обработка заполняет реквизиты напрямую в памяти без вызова клиентских обработчиков событий формы. В результате, если сопоставить колонку из Excel только с одним из полей, документ не сможет корректно рассчитать сумму или не пройдет проверку заполнения при проведении.

Решение:

В настройках колонок обработки загрузки укажите загрузку сразу в оба реквизита: Количество и КоличествоУпаковок. Если упаковки не используются, убедитесь, что реквизит Упаковка незаполнен (пустая ссылка), тогда коэффициент пересчета будет равен единице.

Причина 2. Несрабатывание обработчиков событий и расчет суммы

Выясним, почему при заполнении цены и количества не рассчитывается поле Сумма. Универсальная обработка загружает данные непосредственно в объект или табличную часть. События формы (например, ПриИзменении) при этом не запускаются.

Варианты решения:

  1. Рассчитать сумму в файле Excel: Задайте формулу произведения цены на количество прямо в файле импорта и настройте загрузку колонки «Сумма» из Excel;
  2. Использовать режим «Вычислять»: Для реквизита Сумма установите режим загрузки «Вычислять» и пропишите выражение на языке 1С.

Причина 3. Форматирование чисел и невидимые символы в Excel

Если при попытке загрузить числовые данные возникает ошибка «Неправильный формат данных», проблема заключается в представлении строки в самом файле. В Excel часто используются неразрывные пробелы в качестве разделителей триад (тысяч), либо разделителем дробной части выступает точка вместо запятой.

Посмотрим, как очистить входящую строку от лишних символов перед приведением к типу Число. Для колонки с количеством или суммой выберите режим «Вычислять» и укажите следующий код:


СтрокаЗначения = ТекстыЯчеек.Получить(НомерКолонки);
// Удаляем неразрывные пробелы и обычные пробелы
СтрокаЗначения = СтрЗаменить(СтрокаЗначения, Символы.НПП, "");
СтрокаЗначения = СтрЗаменить(СтрокаЗначения, " ", "");
// Приводим разделитель дробной части к точке
СтрокаЗначения = СтрЗаменить(СтрокаЗначения, ",", ".");
Результат = Число(СтрокаЗначения);

Загрузка характеристик номенклатуры с учетом владельца

Рассмотрим еще одну распространенную задачу при импорте данных: сопоставление характеристик с номенклатурой. Поскольку характеристики зависят от владельца (конкретного элемента справочника Номенклатура или элемента ВидыНоменклатуры), простой поиск по наименованию может работать некорректно.

Чтобы заставить характеристики заполняться правильно в зависимости от вида номенклатуры или самой номенклатуры, установите для реквизита Характеристика режим загрузки «Вычислять».

Пример 1. Поиск характеристики с передачей вида номенклатуры в качестве владельца:


СсылкаНоменклатуры = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", ТекстыЯчеек.Получить(1));
Результат = Справочники.ХарактеристикиНоменклатуры.НайтиПоНаименованию(ТекстыЯчеек.Получить(2),,, СсылкаНоменклатуры.ВидНоменклатуры);

Пример 2. Поиск индивидуальной характеристики номенклатуры по текущей строке:


СсылкаНоменклатуры = Справочники.Номенклатура.НайтиПоНаименованию(ТекущиеДанные["Номенклатура"]);
ТекСпр = Справочники.ХарактеристикиНоменклатуры.НайтиПоРеквизиту("Наименование", ТекущиеДанные["Характеристика"],, СсылкаНоменклатуры);
Результат = ТекСпр.Ссылка;

Подведем итоги

Для успешного импорта табличных данных с количеством и суммами соблюдайте следующие правила:

  1. Заполняйте оба поля — Количество и КоличествоУпаковок;
  2. Форсируйте расчет суммы либо на стороне Excel, либо через режим вычисления в обработке;
  3. Очищайте числовые строки от неразрывных пробелов Символы.НПП перед превращением строки в число;
  4. При поиске зависимых справочников (таких как ХарактеристикиНоменклатуры) всегда передавайте правильного владельца в функции поиска.
← На главную