Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Загрузка данных в накладную из Excel (не подтягивает зак. цену из базы)          
barracuda1991199... Подменю пользователя
сообщение 24.09.14, 11:35
Сообщение #1

Молчаливый
*
Группа: Пользователи
Сообщений: 3
Спасибо сказали: 0 раз
Рейтинг: 0

1С:Предприятие 7.7 Торговля+Склад для Украины (7.70.014)
При загрузке из файла Excel товаров в приходную накладную не затягивает текущую закупочную цену товара в соответствующую строку табличной части.
Помогите пожалуйста, не могу додумать, не хватает знаний.

Перем Док, Окно, Область, СписПарам, СписРугПодр, Путь, КодТов, Справочник;
//******************************************************************************

Процедура ВыбратьФайл()
    сФайл = "";
    сКатал = "";
    Если ФС.ВыбратьФайл(0,сФайл,сКатал,"Выберите файл импорта","Таблицы Excel (*.xls)|*.xls") = 1 Тогда
        ИмяФайла = сКатал+сФайл;
    КонецЕсли;
КонецПроцедуры

//******************************************************************************
Процедура ВыбКаталог()
   Если Путь = "" Тогда
     Путь = Строка(ФС.сКаталог());
   КонецЕсли;
   ФС.ВыбратьКаталог(Путь, "Выбор каталога для выбора файла");
КонецПроцедуры
//******************************************************************************
Процедура Загрузить()
        перем ЦенаТовара;
        Перем Результат;
   Если ПустоеЗначение(ИмяФайла) = 1 Тогда
     Предупреждение("Не выбран файл-заказ для загрузки!");
     СтатусВозврата(0);
     Возврат;
   КонецЕсли;

   Окно = СоздатьОбъект("Excel.Application");
   Если ИмяФайла <> "" Тогда
    //Книга = Окно.WorkBooks.Open(ФС.сКаталог() + "\" + ИмяФайла);
    Книга = Окно.WorkBooks.Open(ИмяФайла);
     //Окно.Visible = 1;
   КонецЕсли;

   чКоличествоСтрок = 0;
   Область = Окно.Sheets.Item(1);
   чКоличествоСтрок = Область.UsedRange.Rows.Count();

   КатЦен = СоздатьОбъект("Справочник.КатегорииЦен");
   Вал = СоздатьОбъект("Справочник.Валюты");
   Курс = СоздатьОбъект("Справочник.Валюты");

   Товары = СоздатьОбъект("Справочник.Номенклатура");

   ПН = СоздатьОбъект("Документ.ПриходнаяНакладная");
   ПН.Новый();
   ПН.ДатаДок=ТекущаяДата();
  
   КатЦен.НайтиПоНаименованию("Закупочная",0,0);  
   ПН.КатегорияЦен=КатЦен.ТекущийЭлемент();
  
   Вал.НайтиПоНаименованию("Гривня",0,0);
   ПН.Валюта=Вал.ТекущийЭлемент();
  
   ПН.Курс=1;
   ПН.Дата_курса=ТекущаяДата();
    
   ПН.Записать();

   НачатьТранзакцию();
  
   Для Стр = 1 По чКоличествоСтрок Цикл
       
     КодТовара = "";
     Кол=0;
  
     КодТовара=СокрЛП(Область.Cells(Стр, 1).Value); //загрузка кода из 1-го столбца ексель
     Кол=Число(Область.Cells(Стр, 2).Value);        //загрузка количества из 2-го столбца ексель
    
    Если ПустоеЗначение(КодТовара) = 1 Тогда
       Сообщить("Не указан код товара " + КодТовара, "!!");
       Продолжить;
     КонецЕсли;
  
     Если Товары.НайтиПоКоду(КодТовара,0) = 0 Тогда
       Сообщить("Не найден товар с кодом " + КодТовара + " " + "!");
       Продолжить;
     КонецЕсли;

     ПН.НоваяСтрока();
     //заполнение единицы измерения в табличной части (везде по умолч.-"шт.")
         Ед = СоздатьОбъект("Справочник.Единицы");
         Ед.НайтиПоНаименованию("шт.",0,0);
     ПН.Единица=Ед.ТекущийЭлемент();
    
     //заполнение наименования товара, кода, артикула, количества в табл. части
     ПН.Товар=Товары.ТекущийЭлемент();
     ПН.Количество=Кол;
     ПН.КодТов=Товары.Код;
     ПН.Код=Товары.Артикул;
    
     //подтянуть к текущей строке таблчной части текущей закупочной цены товара
     ЦеныТовара = СоздатьОбъект("Справочник.Цены");
     ЦеныТовара.ИспользоватьДату(РабочаяДата());
     ЦеныТовара.ИспользоватьВладельца(Товары);

     ПН.ЦенаСНДС=ЦеныТовара;

     ПН.Записать();
  
КонецЦикла;
    
   ЗафиксироватьТранзакцию();

   ОткрытьФорму(ПН.ТекущийДокумент());

КонецПроцедуры

Домовик Подменю пользователя
сообщение 24.09.14, 11:57
Сообщение #2

Ветеран
Иконка группы
Группа: Местный
Сообщений: 975
Из: Киев
Спасибо сказали: 168 раз
Рейтинг: 0

Цитата(barracuda19911991 @ 24.09.14, 7:35) *
//подтянуть к текущей строке таблчной части текущей закупочной цены товара
ЦеныТовара = СоздатьОбъект("Справочник.Цены");
ЦеныТовара.ИспользоватьДату(РабочаяДата());
ЦеныТовара.ИспользоватьВладельца(Товары);
ПН.ЦенаСНДС=ЦеныТовара;
ПН.Записать();


вот этот кусок ключевой.
спозиционировались на товаре.
зашли в подчиненный справочник.
?? спозиционировались на элементе подчиненного справочника по нужной категории? - нет
?? создали новый элемент если не нашли по нужной категории? - нет

что подставляем цене тогда?

Сообщение отредактировал Домовик - 24.09.14, 11:57

barracuda1991199... Подменю пользователя
сообщение 24.09.14, 12:23
Сообщение #3

Молчаливый
*
Группа: Пользователи
Сообщений: 3
Спасибо сказали: 0 раз
Рейтинг: 0

нужно выбрать категорию цены (закупочная или розничная), но не выходит
ЦеныТовара = СоздатьОбъект("Справочник.Цены"); 
ЦеныТовара.ИспользоватьДату(РабочаяДата());
ЦеныТовара.ИспользоватьВладельца(Товары);
КатЦен = СоздатьОбъект("Справочник.КатегорииЦен");
КатЦен.НайтиПоНаименованию("Закупочная",0,0);
ЦеныТовара.ВыбратьЭлементы();

ПН.ЦенаСНДС=ЦеныТовара.ТекущийЭлемент();
ПН.Записать();

Домовик Подменю пользователя
сообщение 24.09.14, 12:46
Сообщение #4

Ветеран
Иконка группы
Группа: Местный
Сообщений: 975
Из: Киев
Спасибо сказали: 168 раз
Рейтинг: 0

загрузка из Эксель не ваша?. а вы кто?



найден=0;
ЦеныТовара.ВыбратьЭлементы();
Пока ЦЕныТовара.ПолучитьЭлемент()=1 Цикл
если ЦеныТовара.Категория=Катцен.ТекущийЭлемент() Тогда
ПН.ЦенаСНДС=ЦеныТовара.ТекущийЭлемент();
найден=1;
КонецЕсли;
КонецЦикла;
если найден=0 тогда сообщить("");



как называется реквизит по категории смотрите по конфигуратору. я точное название не помню.

Сообщение отредактировал Vofka - 24.09.14, 13:22

barracuda1991199... Подменю пользователя
сообщение 24.09.14, 15:54
Сообщение #5

Молчаливый
*
Группа: Пользователи
Сообщений: 3
Спасибо сказали: 0 раз
Рейтинг: 0

Помог в результате следующий код:
        ЦеныТовара.ИспользоватьДату(ПН.ДатаДок);
        ЦеныТовара.ИспользоватьВладельца(Товары.ТекущийЭлемент());
        ЦеныТовара.ВыбратьЭлементыПоРеквизиту("КатегорияЦены",ПН.КатегорияЦен,1,0);
        ПН.ЦенаСНДС=ЦеныТовара.Цена;


Все корректно заполняет
спасибо

Vofka Подменю пользователя
сообщение 24.09.14, 15:59
Сообщение #6

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 14050
Из: Киев
Спасибо сказали: 4612 раз
Рейтинг: 3748.8

barracuda19911991, для спасибо у нас есть специальная кнопочка wink.gif

igmig65 Подменю пользователя
сообщение 28.09.14, 22:06
Сообщение #7

Почти ветеран
Иконка группы
Группа: Местный
Сообщений: 623
Из: Донецкая обл
Спасибо сказали: 171 раз
Рейтинг: 144.5

Цитата(barracuda19911991 @ 24.09.14, 16:54) *
Помог в результате следующий код:
        ЦеныТовара.ИспользоватьДату(ПН.ДатаДок);
        ЦеныТовара.ИспользоватьВладельца(Товары.ТекущийЭлемент());
        ЦеныТовара.ВыбратьЭлементыПоРеквизиту("КатегорияЦены",ПН.КатегорияЦен,1,0);
        ПН.ЦенаСНДС=ЦеныТовара.Цена;


Все корректно заполняет
спасибо


так нельзя, и в принципе это не правильно...
вы открываете выборку, но фактически ее не делаете.
и вот что у вас получится, если для этого товара нет элемента с нужной категорией цены?
выскочит ошибка, скорей всего...
у вас все срабатывает, потому что позиционируется на 1 строке выборки, и вы цену получаете.
Короче, логика не правильная...
Если вы уверены что такой тип цен есть для всех товаров, то нужно использовать НайтиПоРеквизиту(), через Если,
но если учесть возможность того, что у товара может быть несколько закупочных цен, то найдется первая, возможно не та что нужна...Тогда нужно еще одно условие, для ее определения.

Домовик Подменю пользователя
сообщение 29.09.14, 9:35
Сообщение #8

Ветеран
Иконка группы
Группа: Местный
Сообщений: 975
Из: Киев
Спасибо сказали: 168 раз
Рейтинг: 0

оййой, ошибок пооставляла.
по поводу перебора элементов, мной предложенного, так как обычно по две-три цены обычно. не более.

twilight_dream Подменю пользователя
сообщение 09.10.14, 9:35
Сообщение #9

Оратор
*****
Группа: Пользователи
Сообщений: 269
Спасибо сказали: 5 раз
Рейтинг: 5

Ну ещё один маленький момент. Режим нужно единицу передавать:
КатЦен.НайтиПоНаименованию("Закупочная",1,0);

Ну, отбор по владельцу (ИспользоватьВладельца(Товар)) это, естественно, не отменяет.

Сообщение отредактировал Vofka - 09.10.14, 10:18


Signature

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 16.06.25, 0:42
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!