1С:Предприятие 7.7 Торговля+Склад для Украины (7.70.014) При загрузке из файла Excel товаров в приходную накладную не затягивает текущую закупочную цену товара в соответствующую строку табличной части. Помогите пожалуйста, не могу додумать, не хватает знаний.
Перем Док, Окно, Область, СписПарам, СписРугПодр, Путь, КодТов, Справочник; //******************************************************************************
//****************************************************************************** Процедура ВыбКаталог() Если Путь = "" Тогда Путь = Строка(ФС.сКаталог()); КонецЕсли; ФС.ВыбратьКаталог(Путь, "Выбор каталога для выбора файла"); КонецПроцедуры //****************************************************************************** Процедура Загрузить() перем ЦенаТовара; Перем Результат; Если ПустоеЗначение(ИмяФайла) = 1 Тогда Предупреждение("Не выбран файл-заказ для загрузки!"); СтатусВозврата(0); Возврат; КонецЕсли;
Окно = СоздатьОбъект("Excel.Application"); Если ИмяФайла <> "" Тогда //Книга = Окно.WorkBooks.Open(ФС.сКаталог() + "\" + ИмяФайла); Книга = Окно.WorkBooks.Open(ИмяФайла); //Окно.Visible = 1; КонецЕсли;
чКоличествоСтрок = 0; Область = Окно.Sheets.Item(1); чКоличествоСтрок = Область.UsedRange.Rows.Count();
КатЦен = СоздатьОбъект("Справочник.КатегорииЦен"); Вал = СоздатьОбъект("Справочник.Валюты"); Курс = СоздатьОбъект("Справочник.Валюты");
КодТовара=СокрЛП(Область.Cells(Стр, 1).Value); //загрузка кода из 1-го столбца ексель Кол=Число(Область.Cells(Стр, 2).Value); //загрузка количества из 2-го столбца ексель
Если ПустоеЗначение(КодТовара) = 1 Тогда Сообщить("Не указан код товара " + КодТовара, "!!"); Продолжить; КонецЕсли;
Если Товары.НайтиПоКоду(КодТовара,0) = 0 Тогда Сообщить("Не найден товар с кодом " + КодТовара + " " + "!"); Продолжить; КонецЕсли;
ПН.НоваяСтрока(); //заполнение единицы измерения в табличной части (везде по умолч.-"шт.") Ед = СоздатьОбъект("Справочник.Единицы"); Ед.НайтиПоНаименованию("шт.",0,0); ПН.Единица=Ед.ТекущийЭлемент();
//заполнение наименования товара, кода, артикула, количества в табл. части ПН.Товар=Товары.ТекущийЭлемент(); ПН.Количество=Кол; ПН.КодТов=Товары.Код; ПН.Код=Товары.Артикул;
//подтянуть к текущей строке таблчной части текущей закупочной цены товара ЦеныТовара = СоздатьОбъект("Справочник.Цены"); ЦеныТовара.ИспользоватьДату(РабочаяДата()); ЦеныТовара.ИспользоватьВладельца(Товары);
//подтянуть к текущей строке таблчной части текущей закупочной цены товара ЦеныТовара = СоздатьОбъект("Справочник.Цены"); ЦеныТовара.ИспользоватьДату(РабочаяДата()); ЦеныТовара.ИспользоватьВладельца(Товары); ПН.ЦенаСНДС=ЦеныТовара; ПН.Записать();
вот этот кусок ключевой. спозиционировались на товаре. зашли в подчиненный справочник. ?? спозиционировались на элементе подчиненного справочника по нужной категории? - нет ?? создали новый элемент если не нашли по нужной категории? - нет
что подставляем цене тогда?
Сообщение отредактировал Домовик - 24.09.14, 11:57
найден=0; ЦеныТовара.ВыбратьЭлементы(); Пока ЦЕныТовара.ПолучитьЭлемент()=1 Цикл если ЦеныТовара.Категория=Катцен.ТекущийЭлемент() Тогда ПН.ЦенаСНДС=ЦеныТовара.ТекущийЭлемент(); найден=1; КонецЕсли; КонецЦикла; если найден=0 тогда сообщить("");
как называется реквизит по категории смотрите по конфигуратору. я точное название не помню.
так нельзя, и в принципе это не правильно... вы открываете выборку, но фактически ее не делаете. и вот что у вас получится, если для этого товара нет элемента с нужной категорией цены? выскочит ошибка, скорей всего... у вас все срабатывает, потому что позиционируется на 1 строке выборки, и вы цену получаете. Короче, логика не правильная... Если вы уверены что такой тип цен есть для всех товаров, то нужно использовать НайтиПоРеквизиту(), через Если, но если учесть возможность того, что у товара может быть несколько закупочных цен, то найдется первая, возможно не та что нужна...Тогда нужно еще одно условие, для ее определения.
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!