Интерфейс проще и понятнее, чем у типовой внешней обработки «Загрузка данных из табличного документа». Плюс данный способ применим для загрузки сложных прайсов (см. публикацию).
Приветствую всех!
Прислали мне прайс (см. картинку)
Я доработал свою же обработку по загрузке номенклатуры в 1с из эксель (для документов Поступление товаров и услуг) //infostart.ru/public/666516/
И получилось так, что не сложно было обучить менеджера загружать прайс в дальнейшем самостоятельно (см. картинку).
В дальнейшем на проекте автоматизации салона красок воспользовался данной обработкой для загрузки прайса пигментов разных цветов: каждый пигмент имеет название и номер цвета, цена зависит как от названия цвета, так и от номера цвета (см. картинку).
Для загрузки подобных прайсов (к слову сказать, в этой отрасли все прайсы двумерные) я доработал обработку следующим образом: обхожу табличный документ по горизонтали и вертикали — цикл в цикле — и для каждого сочетания НазваниеЦвета-НомерЦвета определяю и записываю цену (см. картинку)
Макет = ЭлементыФормы.ПолеТабличногоДокумента1;
Для К = 2 По Макет.ВысотаТаблицы Цикл
Для Н = 2 По Макет.ШиринаТаблицы Цикл
НазваниеЦвета = СокрЛП(Макет.Область(1,Н,1,Н).Текст);
НомерЦвета = СокрЛП(Макет.Область(К,1,К,1).Текст);
Цена = СокрЛП(Макет.Область(К,Н,К,Н).Текст);
Если Цена = "нет" Тогда
Продолжить;
КонецЕсли;
НайденныйЦвет = Справочники.НазваниеЦвета.НайтиПоНаименованию(НазваниеЦвета,Истина);
Если НЕ ЗначениеЗаполнено(НайденныйЦвет) Тогда
Об = Справочники.НазваниеЦвета.СоздатьЭлемент();
Об.Родитель = ГруппаЦветов;
Об.Наименование = НазваниеЦвета;
Об.Записать();
НайденныйЦвет = Об.Ссылка;
КонецЕсли;
НайденныйНомерЦвета = Справочники.НомерЦвета.НайтиПоНаименованию(НомерЦвета,Истина);
Если НЕ ЗначениеЗаполнено(НайденныйНомерЦвета) Тогда
Об = Справочники.НомерЦвета.СоздатьЭлемент();
Об.Родитель = ГруппаНомерЦвета;
Об.Наименование = НомерЦвета;
Об.Записать();
НайденныйНомерЦвета = Об.Ссылка;
КонецЕсли;
Попытка
Цена = Число(Цена);
Исключение
Продолжить;
Сообщить("Возникла ошибка строка " + К + " колонка " + Н);
КонецПопытки;
НЗ = РегистрыСведений.ЦеныЦветов.СоздатьНаборЗаписей();
НЗ.Отбор.НазваниеЦвета.Установить(НайденныйЦвет);
НЗ.Отбор.НомерЦвета.Установить(НайденныйНомерЦвета);
НЗ.Отбор.Период.Установить(Период);
Запись = НЗ.Добавить();
Запись.НазваниеЦвета = НайденныйЦвет;
Запись.НомерЦвета = НайденныйНомерЦвета;
Запись.Период = Период;
Запись.Цена = Цена;
НЗ.Записать();
КонецЦикла;
КонецЦикла;
К сожалению, на демо-УТ этот алгоритм не воспроизвести, поэтому выкладываю листинг алгоритма, который не включен в предлагаемую обработку. Просто, имея некоторый шаблон для работы с экселевскими данными, можно решать разнообразные задачи — в том числе загружать двумерные прайсы пигментов.
Представленная обработка тестировалась перед публикацией на платформе 8.3.11.3034 на демо-УТ 10.3.46.2.
См. также:
Как эффективно использовать Инфостарт NEW!
Список реализаций + структура подчиненности + реестр документов SALE’1sm
Список заказов поставщикам + структура подчиненности SALE’1sm
Список заказов покупателей + структура подчиненности SALE’1sm
Договоры для 1с-ника ТОП-скачиваний
Сетка расписания (Планировщик) нестанДАрт
Два механизма, которые ускорили работу бухгалтеров в 1С нестанДАрт
Расчет банковских (рабочих) дней нестанДАрт
Шаблоны кода в режиме 1С:Предприятие SALE’1sm
Доработка конфигурации Конвертация Данных
Планирование платежей. Прогнозирование прибылей и убытков
Ввод показателей план-факта БП 3.0 Know-how
Инвентаризация личного опыта Для новичков 1С
Большие запросы: взгляд на проблему нестанДАрт
Технология создания коммерческих разработок Know-how
Андроид-решение для создания заказов в 1С Know-how + нестанДАрт
Печать ценников с одной и двумя ценами 55х40, 100х60, 140х200