Помогите пожалуста с выгрузкой прайса

  • Автор темы Janna26
  • Дата начала
J

Janna26

Гость
#1
На работе дали задание. не могу ни как придумать как его сделать. Есть прайс, есть справочник номенклатуры. В принципе все просто, а на самом деле не так. Прайсы бывают разные. оператор будет над каждой колонкой в прайсе ставить определенную букву. (пример Код = A артикул = B и т.д) и надо сделать внешнюю обработку которая будет по этим буквам опеределять в какой колонке что находится, потом сравнивать значениее со справочником и заносить цены в справочник.
 
J

Janna26

Гость
#3
Прайс экселевский конфигурация управление торговлей 10.3 Не могу сделать поиск пл файлу в экселе. Надо брать код из основной панели справочника и сравнивать его с экселевким файлом а потом если код савподает то из этой же строчки брать цену товара и заносить ее в справочник.
 

Darlock

Well-Known Member
04.01.2008
560
1
Москва
#5
А в чем проблема-то? Найти пример загрузки из формата, который вы, кстати, не указали?)
Должен быть объект метаданных в котором будет храниться соответствие колонок файла и полей 1С. желательно табличного вида (ПВХ, Регистр сведений и т.п.). Сам механизм и пример загрузки вам уже предложили.
 
J

Janna26

Гость
#6
Я наверное точно блондинка нечего в голову нелезет. Вроде все форму сделала с экселя загрузила функцию расчета цены сделала а как связать со справочником немогу((( кто нить может выложить пример функции с поиском по экселю?

Добавлено: Как говорится не бери в голову бери в рот))))
 
J

Janna26

Гость
#8
Это шутка) сижу уже 2 день над этой обработькай и нечего придумать немогу(
 
J

Janna26

Гость
#10
vitfil
А ты шутник. Да вот сижу и думаю, что она сама напишется.
 

Darlock

Well-Known Member
04.01.2008
560
1
Москва
#11
vitfil
А ты шутник. Да вот сижу и думаю, что она сама напишется.
Место не правильное, видимо.(с)

Я сделал бы так:

Код:
Процедура КнопкаВыполнитьНажатие(Кнопка)
xlLastCell = 11;
НомерЛистаExcel = 1;

ВыбФайл = Новый Файл(ИмяФайла);
Если НЕ ВыбФайл.Существует() Тогда
Сообщить("Файл не существует!");
КонецЕсли;

Попытка
Excel = Новый COMОбъект("Excel.Application");
Excel.WorkBooks.Open(ИмяФайла);
Состояние("Обработка файла Microsoft Excel...");
ExcelЛист = Excel.Sheets(НомерЛистаExcel);
Исключение
Сообщить("Ошибка. Возможно неверно указан номер листа книги Excel.");
КонецПопытки;

ActiveCell = Excel.ActiveCell.SpecialCells(xlLastCell);
RowCount = ActiveCell.Row;
ColumnCount = ActiveCell.Column;

ТЗ = Новый ТаблицаЗначений;
Для Column = 1 По ColumnCount Цикл
Тз.Колонки.Добавить("Колонка" + Column);
КонецЦикла;


Для Row = 1 По RowCount Цикл
НоваяСтрока = Тз.Добавить();

Для Column = 1 По ColumnCount Цикл
НоваяСтрока["Колонка" + Column] = ExcelЛист.Cells(Row,Column).Value;
КонецЦикла;

КонецЦикла;

Excel.WorkBooks.Close();
Excel = 0;


ДокОбъект = Докссылка.ПолучитьОбъект();

Для Каждого ТекущаяСтрока Из Тз Цикл

Наименование = ТекущаяСтрока["Колонка12"];
Артикул = СокрЛП(СтрЗаменить(Строка(ТекущаяСтрока["Колонка11"])," ",""));
НомерВхДок = ТекущаяСтрока["Колонка9"];
Количество = ТекущаяСтрока["Колонка13"];
ЕдИзмерения = ТекущаяСтрока["Колонка14"];
Цена = ТекущаяСтрока["Колонка15"];
Сумма = ТекущаяСтрока["Колонка16"];
СтавкаНДС = ТекущаяСтрока["Колонка17"];
СуммаНДС = ТекущаяСтрока["Колонка18"];
Всего = ТекущаяСтрока["Колонка19"];
СтранаГТД = ТекущаяСтрока["Колонка21"];
ГТДТовара = ТекущаяСтрока["Колонка22"];

Если СокрЛП(ДокОбъект.ВхДокНомер) = "" Тогда
ДокОбъект.ВхДокНомер = СтрЗаменить(СокрЛП(НомерВхДок)," ","");
КонецЕсли;

СпрЭлемент = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул",СокрЛП(Артикул));
Если СокрЛП(Артикул) <> "" Тогда 
Если СпрЭлемент = Справочники.Номенклатура.ПустаяСсылка() Тогда
СпрЭлемент = Справочники.Номенклатура.СоздатьЭлемент();
СпрЭлемент.УстановитьНовыйКод();
СпрЭлемент.Родитель = СпрРодитель;
СпрЭлемент.ОбработкаЗаполнения("");
СпрЭлемент.Наименование = Наименование;
СпрЭлемент.ОсновнаяЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("шт");
СпрЭлемент.БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.шт;
СпрЭлемент.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Товар;
СпрЭлемент.ТипНоменклатуры = Справочники.ТипыНоменклатуры.Штучный;

СпрЭлемент.Артикул = Артикул;
СпрЭлемент.Записать();
СпрЭлемент = СпрЭлемент.Ссылка;
Сообщить("Создан новый элемент: " + Наименование + ", " + Артикул);
КонецЕсли;
КолВо = Число(Количество);
НоваяСтрока = ДокОбъект.Товары.Найти(СпрЭлемент, "Номенклатура");
Если НоваяСтрока = Неопределено Тогда
НоваяСтрока = ДокОбъект.Товары.Добавить();
НоваяСтрока.Номенклатура = СпрЭлемент;
НоваяСтрока.Количество = Колво;
НоваяСтрока.КоличествоБазовое = Колво;
НоваяСтрока.ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("шт");
НоваяСтрока.Коэффициент = 1;
НоваяСтрока.Цена = Число(СтрЗаменить(Цена,".",""));
НоваяСтрока.Сумма = Число(СтрЗаменить(Сумма,".",""));
НоваяСтрока.СуммаНДС = Число(СтрЗаменить(СуммаНДС,".",""));
НоваяСтрока.СтавкаНДС = Справочники.СтавкиНДС.ОсновнаяСтавкаНДС;
стрГТД = Справочники.ГТД.НайтиПоНаименованию(СокрЛП(ГТДТовара));
Если стрГТД = Справочники.ГТД.ПустаяСсылка() Тогда
стрГТД = Справочники.ГТД.СоздатьЭлемент();
стрГТД.УстановитьНовыйКод();
стрГТД.Наименование = СокрЛП(ГТДТовара);
стрГТД.Страна = Справочники.КлассификаторСтранМира.НайтиПоНаименованию(СокрЛП(СтранаГТД));
стрГТД.Записать();
стрГТД = стрГТД.Ссылка;
КонецЕсли;

НоваяСтрока.ГТД = стрГТД;

НоваяСтрока.СуммаВсего = Число(СтрЗаменить(Всего,".",""));
Иначе
НоваяСтрока.Количество = НоваяСтрока.Количество + Колво;
НоваяСтрока.КоличествоБазовое = НоваяСтрока.КоличествоБазовое + Колво;
НоваяСтрока.СуммаВсего = НоваяСтрока.СуммаВсего + Число(СтрЗаменить(Всего,".",""));

НоваяСтрока.Сумма = НоваяСтрока.Сумма + Число(СтрЗаменить(Сумма,".",""));
НоваяСтрока.Цена = ?(НоваяСтрока.Количество = 0,0,НоваяСтрока.Сумма / НоваяСтрока.Количество);
НоваяСтрока.СуммаНДС = НоваяСтрока.СуммаНДС + Число(СтрЗаменить(СуммаНДС,".",""));
КонецЕсли;		
Состояние(Наименование);
Иначе
Продолжить;
КонецЕсли;

КонецЦикла;

ДокОбъект.ПолучитьФорму().Открыть();
 
B

Buster

Гость
#13
Ну человек, который будет заносить буквы А и Б, указывая в каких колонках находится артикул или код, будет делать это например в строке перед таблицей, а значит в чем проблема поиска?
Например:

Код:
//Вырезка из кода Darlock


Для Column = 1 По ColumnCount Цикл
Если ExcelЛист.Cells(ПерваяСтрокаГдеУказываетсяАилиБ,Column).Value = "А" тогда
КолонкаСКодом = Column;
ИначеЕсли ExcelЛист.Cells(ПерваяСтрокаГдеУказываетсяАилиБ,Column).Value = "Б" тогда
КолонкаСАртикулом = Column;
КонецЕсли;
КонецЦикла;
А далее можно прочитать все остальные строки из файла, где уже находятся сами записи цены номенклатуры и осуществлять поиск без проблем.