ОБСУЖДЕНИЕ

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

12 ответов 7,6 тыс.
AI-выжимка обсуждения скоро

Краткие тезисы обсуждения со ссылками на ключевые ответы появятся здесь.

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

Должен быть объект метаданных в котором будет храниться соответствие колонок файла и полей 1С. желательно табличного вида (ПВХ, Регистр сведений и т.п.). Сам механизм и пример загрузки вам уже предложили.
 
Я наверное точно блондинка нечего в голову нелезет. Вроде все форму сделала с экселя загрузила функцию расчета цены сделала а как связать со справочником немогу((( кто нить может выложить пример функции с поиском по экселю?

Добавлено: Как говорится не бери в голову бери в рот))))
 
Это шутка) сижу уже 2 день над этой обработькай и нечего придумать немогу(
 
vitfil
А ты шутник. Да вот сижу и думаю, что она сама напишется.
 
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,НоваяСтрока.Сумма / НоваяСтрока.Количество);
НоваяСтрока.СуммаНДС = НоваяСтрока.СуммаНДС + Число(СтрЗаменить(СуммаНДС,".",""));
КонецЕсли;		
Состояние(Наименование);
Иначе
Продолжить;
КонецЕсли;

КонецЦикла;

ДокОбъект.ПолучитьФорму().Открыть();
 
А вот цены обычно заносят не в справочник, а в регистр сведений.
 
Ну человек, который будет заносить буквы А и Б, указывая в каких колонках находится артикул или код, будет делать это например в строке перед таблицей, а значит в чем проблема поиска?
Например:

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


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

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