Что делает обработка:
- Загружает товары из Файла XLS в справочник Номенклатура (поиск по наименованию). Загружаемые поля:
- Наименование
- Артикул
- Единица измерения
- Вид номенклатуры
- Ставка НДС
- Загружает табличную часть “Товары” документа “Ввод начальных остатков” и проводит документ
- Загружает табличную часть “Товары” документа “Поступление товаров и услуг “с последующим проведением
- .Создает Документ “Установка цен номенклатуры” по выбранным видам цен.
- Имеет сохраняемые настройки импорта данных из файла Эксель.
- Проверяет заполненность и корректность данных загружаемых из файла
Пример XLS Файла:
Первоначально загрузка из файла xls идет в таблицу значений при помощи COMобъекта, поэтому необходим установленный Microsoft офис.
Если установлен OpenOffice то можно сделать через OpenOffice = Новый COMОбъект(“TOpenOffice.Bridge”);
Скачать TOpenOffice.bridge OLE Automation
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 | &НаКлиенте Процедура Прочитать(Команда) Объект.ЕстьОшибкаВфайле=ложь; Попытка Excel = Новый COMОбъект("Excel.Application"); Excel.WorkBooks.Open(Объект.ПутьКФайлу); Состояние("Обработка файла Microsoft Excel..."); Исключение Сообщить("Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!"); Сообщить(ОписаниеОшибки()); Объект.ЕстьОшибкаВфайле=Истина; Возврат; КонецПопытки; Попытка //Открываем необходимый лист из настроек Excel.Sheets(НомерЛиста).Select(); Исключение //Закрываем Excel Excel.ActiveWorkbook.Close(); Excel = 0; Сообщить("Файл "+Строка(Объект.ПутьКФайлу)+" не соответствует необходимому формату! лист не найден!"); Объект.ЕстьОшибкаВфайле=Истина; Возврат; КонецПопытки; Версия = Лев(Excel.Version,Найти(Excel.Version,".")-1); Если Версия = "8" тогда ФайлСтрок = Excel.Cells.CurrentRegion.Rows.Count; ФайлКолонок = Макс(Excel.Cells.CurrentRegion.Columns.Count, 13); Иначе ФайлСтрок = Excel.Cells(1,1).SpecialCells(11).Row; ФайлКолонок = Excel.Cells(1,1).SpecialCells(11).Column; Конецесли; Для ТекСтрока = СтрокаНачало по ФайлСтрок Цикл ОбработкаПрерыванияПользователя(); // цикл можно прервать нажатием ctrl+break //заполняем строку значениями Если (СтрДлина(Excel.Cells(ТекСтрока, АртикулСтолбец).Text)=0) и (СтрДлина(Excel.Cells(ТекСтрока,НоменклатураСтолбец ).Text)=0) тогда НомГР=СокрЛП(Excel.Cells(ТекСтрока,ГруппаСтолбец ).Text); Иначе НоваяСтрока = Данные.Добавить(); НоваяСтрока["НомерСтроки"] = ТекСтрока; Если (СтрДлина(Excel.Cells(ТекСтрока, АртикулСтолбец).Text)=0) тогда Сообщить("Нет артикула в строке:"+ТекСтрока); Объект.ЕстьОшибкаВфайле=Истина; иначе НоваяСтрока["Артикул"] = СокрЛП(Excel.Cells(ТекСтрока, АртикулСтолбец).Text); КонецЕсли; Если (СтрДлина(Excel.Cells(ТекСтрока,ГруппаСтолбец ).Text)=0) тогда НоваяСтрока["Группа"]=НомГР; иначе НоваяСтрока["Группа"] = СокрЛП(Excel.Cells(ТекСтрока,ГруппаСтолбец ).Text); КонецЕсли; Если (СтрДлина(Excel.Cells(ТекСтрока, НоменклатураСтолбец).Text)=0) тогда Сообщить("Нет наименования в строке:"+ТекСтрока); Объект.ЕстьОшибкаВфайле=Истина; иначе НоваяСтрока["Номенклатура"] = СокрЛП(Excel.Cells(ТекСтрока,НоменклатураСтолбец ).Text); КонецЕсли; Если (СтрДлина(Excel.Cells(ТекСтрока, ЕдиницаСтолбец).Text)=0) тогда Сообщить("Нет единицы измерения в строке:"+ТекСтрока); Объект.ЕстьОшибкаВфайле=Истина; иначе НоваяСтрока["ЕдиницаИзмерения"] = СокрЛП(Excel.Cells(ТекСтрока,ЕдиницаСтолбец ).Text); КонецЕсли; попытка Если (СтрДлина(Excel.Cells(ТекСтрока, КолвоСтолбец).Text)=0) или(Число(Excel.Cells(ТекСтрока, КолвоСтолбец).Text)<0) тогда Сообщить("Ошибка количества в строке:"+ТекСтрока); НоваяСтрока["Количество"] = СокрЛП(Excel.Cells(ТекСтрока,КолвоСтолбец ).Text); Объект.ЕстьОшибкаВфайле=Истина; иначе НоваяСтрока["Количество"] = СокрЛП(Excel.Cells(ТекСтрока,КолвоСтолбец ).Text); КонецЕсли; исключение НоваяСтрока["Количество"] = СокрЛП(Excel.Cells(ТекСтрока,КолвоСтолбец ).Text); Сообщить("Ошибка количества в строке:"+ТекСтрока); КонецПопытки; Если (СтрДлина(Excel.Cells(ТекСтрока, СебестоимостьСтолбец).Text)=0) тогда Сообщить("Нет себестоимости в строке:"+ТекСтрока); Объект.ЕстьОшибкаВфайле=Истина; иначе НоваяСтрока["Себестоимость"] = СокрЛП(Excel.Cells(ТекСтрока,СебестоимостьСтолбец ).Text); КонецЕсли; Если (СтрДлина(Excel.Cells(ТекСтрока, ПродажаСтолбец).Text)=0) тогда Сообщить("Нет цены продажи в строке:"+ТекСтрока); Объект.ЕстьОшибкаВфайле=Истина; иначе НоваяСтрока["Продажа"] = СокрЛП(Excel.Cells(ТекСтрока,ПродажаСтолбец ).Text); КонецЕсли; КонецЕсли; КонецЦикла; //закрываем Excel Excel.DisplayAlerts = 0; Excel.Quit(); Excel.DisplayAlerts = 1; КонецПроцедуры |
Затем создаем документ либо “Ввод начальных остатков”, либо “Приобретение товаров и услуг” в зависимости от задачи. Прописываем ссылку на документ, нажимаем “Загрузить”. Загружается Номенклатура, заполняется табличная часть “Товары” документа и создается Документ “Установка цен номенклатуры”:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | &НаСервере Процедура ЗагрузитьПоступлениеТиУНаСервере() Новдок=объект.ДокументПоступлениеПоставщика.ПолучитьОбъект(); Новдок.Автор=ПараметрыСеанса.ТекущийПользователь; УстановкаЦен=документы.УстановкаЦенНоменклатуры.СоздатьДокумент(); УстановкаЦен.Статус=Перечисления.СтатусыУстановокЦенНоменклатуры.Согласован; УстановкаЦен.Дата=ТекущаяДата(); УстановкаЦен.Ответственный=ПараметрыСеанса.ТекущийПользователь; УстановкаЦен.ДокументОснование=объект.ДокументПоступлениеПоставщика; новаяцена=УстановкаЦен.ВидыЦен.Добавить(); новаяцена.ВидЦены=ЦенаСебестоимость; новаяцена=УстановкаЦен.ВидыЦен.Добавить(); новаяцена.ВидЦены=ЦенаПродажа; Новдок.Товары.Очистить(); a=0; для каждого стр из Данные цикл a=a+1; НовСтрокаУ=УстановкаЦен.Товары.Добавить(); НовСтрокаУ.Номенклатура=стр.Номенклатура; НовСтрокаУ.ВидЦены=ЦенаСебестоимость; НовСтрокаУ.Цена=стр.Себестоимость; НовСтрокаУ=УстановкаЦен.Товары.Добавить(); НовСтрокаУ.Номенклатура=стр.Номенклатура; НовСтрокаУ.ВидЦены=ЦенаПродажа; НовСтрокаУ.Цена=стр.Продажа; НовСтрока=Новдок.Товары.Добавить(); НовСтрока.номенклатура=стр.Номенклатура; НовСтрока.Склад=Новдок.Склад; НовСтрока.Количество=стр.Количество; НовСтрока.КоличествоУпаковок=стр.Количество; НовСтрока.Цена=стр.Себестоимость; НовСтрока.СтавкаНДС=НДС; НовСтрока.Сумма=НовСтрока.Количество*НовСтрока.Цена; // ПроцентНДС = ЦенообразованиеКлиентСервер.ПолучитьСтавкуНДСЧислом(НДС, Ложь); Если НовСтрока.СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС10") ИЛИ НовСтрока.СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС10_110") Тогда ПроцентНДС= 0.1; ИначеЕсли НовСтрока.СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС18") ИЛИ НовСтрока.СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС18_118") Тогда ИначеЕсли НовСтрока.СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС20") ИЛИ НовСтрока.СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС20_120") Тогда ПроцентНДС= 0.2; Иначе ПроцентНДС= 0; КонецЕсли; Если Новдок.ЦенаВключаетНДС Тогда НовСтрока.СуммаНДС = НовСтрока.Сумма * ПроцентНДС / (ПроцентНДС + 1); Иначе НовСтрока.СуммаНДС = НовСтрока.Сумма * ПроцентНДС; КонецЕсли; НовСтрока.СуммаСНДС = НовСтрока.Сумма + ?(Новдок.ЦенаВключаетНДС, 0, НовСтрока.СуммаНДС); КонецЦикла; Новдок.Записать(РежимЗаписиДокумента.Проведение); УстановкаЦен.Записать(РежимЗаписиДокумента.Проведение); КонецПроцедуры &НаКлиенте Процедура ЗагрузитьПоступлениеТиУ(Команда) Если не ЗначениеЗаполнено(объект.ДокументПоступлениеПоставщика) тогда Сообщить("Не указан документ поступление товаров") ; возврат; КонецЕсли; Если Объект.ЕстьОшибкаВфайле тогда Сообщить("Есть ошибка в файле загрузки") ; возврат; КонецЕсли; а=0; для каждого стр из Данные цикл а=а+1; ОбработкаПрерыванияПользователя(); НоваяНоменклатура = Новый Структура("Артикул,Наименование,ЕдиницаИзмерения,ВидНоменклатуры"); НоваяНоменклатура.Наименование = стр.Номенклатура; НоваяНоменклатура.Артикул = стр.артикул; НоваяНоменклатура.ЕдиницаИзмерения = стр.ЕдиницаИзмерения; НоваяНоменклатура.ВидНоменклатуры = стр.Группа; новаяноменклатура=СоздатьНоменклатуру(НоваяНоменклатура); стр.Номенклатура=новаяноменклатура; КонецЦикла; ЗагрузитьПоступлениеТиУНаСервере(); КонецПроцедуры |
Скачать ЗагрузкаНоменклатурыXLS