Почему не загружается количество в документ поступления при использовании обработки «Загрузка данных из табличного документа» в 1С:Розница?

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

При использовании универсальной внешней обработки «Загрузка данных из табличного документа» для заполнения табличной части документа ПоступлениеТоваров в конфигурации «1С:Розница 2.2» пользователи часто сталкиваются с ситуацией, когда номенклатура и цена успешно переносятся из файла Excel или табличного документа, а колонка с количеством остается пустой. Параллельно возникает задача автоматического расчета итоговой суммы строки.

Разберем по шагам внутреннюю логику конфигурации, выясним причину такого поведения и рассмотрим правильные варианты настройки загрузки данных.

Причина проблемы с реквизитом количества в 1С:Розница 2.2

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

В структуре метаданных табличной части присутствуют два зависимых реквизита:

  1. КоличествоУпаковок — основной пользовательский реквизит, отображаемый на форме документа и доступный для редактирования.
  2. Количество — базовый реквизит (в единицах хранения номенклатуры), который при ручном вводе вычисляется автоматически по формуле: Количество = КоличествоУпаковок * Коэффициент.

Универсальная обработка «Загрузка данных из табличного документа» осуществляет прямую запись значений в реквизиты объекта метаданных, минуя события управляемой формы (например, ПриИзменении). В результате автоматические клиентские обработчики не вызываются. Если в настройках сопоставления колонок указать только реквизит Количество, а поле КоличествоУпаковок оставить пустым, то в интерфейсе документа значение количества не отобразится либо будет затерто при открытии или пересчете формы.

Решение 1. Настройка колонок упаковок и коэффициента в обработке

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

  1. Назначим колонку с количеством из исходного файла не только в реквизит Количество, но и в реквизит КоличествоУпаковок.
  2. Если учет по индивидуальным упаковкам для позиций не ведется или упаковки не заданы, добавим в настройку реквизит Коэффициент и установим для него режим Заполнять значением равным 1.

Такой подход гарантирует, что и базовое количество, и количество упаковок будут заполнены согласованно, что исключит ошибки проведения документа.

Решение 2. Расчет суммы через режим вычисления колонок

Рассмотрим, как настроить автоматическое вычисление суммы строки (Количество * Цена) непосредственно в процессе считывания колонок табличного документа.

Для колонки Сумма переключим режим заполнения в Вычислять и пропишем алгоритм расчета. На базовом уровне можно использовать обращение к массиву ТекстыЯчеек:

Результат = Число(ТекстыЯчеек.Получить(2)) * Число(ТекстыЯчеек.Получить(3));

Однако при использовании функции Число() необходимо учитывать особенности строкового представления данных в табличных документах. Если в ячейках присутствуют пробелы, неразрывные пробелы (разделители групп разрядов) или запятые в качестве десятичных разделителей, функция Число() может вызвать аварийное завершение загрузки. Для надежного преобразования рекомендуется предварительно очищать строковые данные:


ТекстКол = СтрЗаменить(СтрЗаменить(ТекстыЯчеек.Получить(2), Символы.НПП, ""), " ", "");
ТекстКол = СтрЗаменить(ТекстКол, ",", ".");
ТекстЦены = СтрЗаменить(СтрЗаменить(ТекстыЯчеек.Получить(3), Символы.НПП, ""), " ", "");
ТекстЦены = СтрЗаменить(ТекстЦены, ",", ".");

Результат = Число(ТекстКол) * Число(ТекстЦены);

Решение 3. Обработка строк в событии «Перед записью объекта»

Альтернативный и более гибкий вариант — выполнять расчет всех зависимых полей централизованно на вкладке событий обработки (обработчик Перед записью объекта). Это избавит от необходимости писать формулы для каждой отдельной ячейки.

Посмотрим на пример кода, выполняющего пересчет табличной части объекта:


Для Каждого Стр Из Объект.Товары Цикл
    // Если количество упаковок не заполнилось из файла, дублируем базовое количество
    Если Не ЗначениеЗаполнено(Стр.КоличествоУпаковок) Тогда
        Стр.КоличествоУпаковок = Стр.Количество;
    КонецЕсли;
    
    Если Стр.Коэффициент = 0 Тогда
        Стр.Коэффициент = 1;
    КонецЕсли;

    // Рассчитываем сумму строки
    Стр.Сумма = Стр.Количество * Стр.Цена;
КонецЦикла;

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

Штатная альтернатива в «1С:Розница 2.2»

Отметим, что для загрузки приходных накладных в конфигурации «1С:Розница 2.2» не обязательно использовать универсальную обработку. В документе ПоступлениеТоваров над табличной частью Товары присутствует встроенная кнопка Загрузить из внешнего файла.

Штатный механизм обладает рядом преимуществ:

  1. Автоматически выполняет поиск и сопоставление номенклатуры не только по точному наименованию, но и по штрихкодам, артикулам или номенклатуре поставщика.
  2. Корректно считывает единицы измерения, автоматически подставляет упаковки и правильные коэффициенты пересчета.
  3. Использует серверные процедуры пересчета сумм, ставок и сумм НДС по правилам конфигурации без необходимости ручного написания программного кода.
← На главную