1С Предприятие - 7.70.027
Торговля+Склад для Украины 7.70.013
Подскажите пожалуйста как получить цену товара и изменить ее. У меня постоянно возникает необходимость сформировать цены на различные группы товаров. На некоторые оптовая=закупка+20, розница=закупка+30, консигнация и пр. На другие группы товаров другие проценты наценки. Обычно делаю это вручную, используя "Формирование цен", но т.к. групп много и наценки разные, то решил написать обработку с прописанными в ней группами и наценками. Что б просто можно было нажатием одной кнопки сделать монотонную работы быстро.
Но не могу никак разобраться как получить в цикле закупочную цену на товар. Понимаю что вопрос наверно "детский", но я пока только учусь... Подскажите пожалуйста. Спасибо.
Код обработки покажите
ну а где хранятся эти цены?
справочник какой нить?
Процедура Сформировать()
ДатаЦен = ПолучитьДатуТА();
Спр=СоздатьОбъект("Справочник.Номенклатура");
Спр.ПорядокНаименований();
Спр.ВыбратьЭлементы();
СпрТипыЦен = СоздатьОбъект("Справочник.КатегорииЦен");
СпрТипыЦен.ВыбратьЭлементы();
СпрЦены = СоздатьОбъект("Справочник.Цены");
СпрЦены.ВыбратьЭлементы();
СпрТипыЦен.ИспользоватьДату(ДатаЦен, 1);
СпрЦены.ИспользоватьДату(ДатаЦен, 1);
Пока Спр.ПолучитьЭлемент()=1 Цикл
усл="Старое";
родит=СокрЛП(Спр.Родитель);
Если родит = усл Тогда;
СпрТипыЦен.НайтиПоНаименованию("Оптовая",0);
ТипЦен = СпрТипыЦен.ТекущийЭлемент();
Что-то вообще не то.
Я думаю как-то так:
Спр = СоздатьОбъект("Справочник.Номенклатура");
Цены = СоздатьОбъект("Справочник.Цены");
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент() = 1 Цикл
Цены.ИспользоватьВладельца(Спр.ТекущийЭлемент());
Цены.ВыбратьЭлементы();
Пока Цены.ПолучитьЭлемент() = 1 Цикл // в этом цикле получим все цены
КонецЦикла;
КонецЦикла;
Спр = СоздатьОбъект("Справочник.Номенклатура");
Цены = СоздатьОбъект("Справочник.Цены");
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент() = 1 Цикл
Цены.ИспользоватьВладельца(Спр.ТекущийЭлемент());
Цены.ВыбратьЭлементы();
Пока Цены.ПолучитьЭлемент() = 1 Цикл // в этом цикле получим все цены
КонецЦикла;
КонецЦикла;
Если Цены.Наименование = "Закупочная" Тогда
// производим нужные действия
КонецЕсли;
Если Цены.Наименование = "Закупочная" Тогда
// производим нужные действия
КонецЕсли;
Пока Цены.ПолучитьЭлемент() = 1 Цикл // в этом цикле получим все цены
Если Цены.Наименование = "Закупочная" Тогда
// производим нужные действия
Закупка=Цены.Цена;
КонецЕсли;
КонецЦикла;
Это не абсурд, это периодический реквизит! Посмотрите в СП методы работы с периодическими реквизитами.
Закупка=Цены.Цена.Получить();
Цены.НайтиПоНаименованию("Закупочная");
В меню "сервис - Формирование цен" помоему все что автор хотел, есть...
Или я ошибаюсь...
Пожалуйста
Блин, все равно не работает. Вот что получилось:
Процедура Сформировать()
Спр = СоздатьОбъект("Справочник.Номенклатура");
Цены = СоздатьОбъект("Справочник.Цены");
Цены.ИспользоватьДату(ТекущаяДата());
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент() = 1 Цикл
Если СокрЛП(Спр.Родитель) = "Аккумуляторы" Тогда;
Если Спр.ЭтоГруппа()<1 Тогда
Цены.ИспользоватьВладельца(Спр.ТекущийЭлемент());
Если Цены.НайтиПоНаименованию("Закупочная") = 1 Тогда
Сообщить("Закупка"+Спр.ТекущийЭлемент());
Закупка=Цены.Цена;
КонецЕсли;
Если Цены.НайтиПоНаименованию("Розница") = 1 Тогда
Цены.Цена=Закупка*0.25;
//Цены.Записать();
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
А закупочная цена есть всегда? Может не нашлась закупочная цена, то тогда и розница будет 0
Тип цен точно называется "Розница"? Не "Розничная"?
Да, я проверил. И даже скопировал тип цены из справочника прямо в обработку.
Процедура Сформировать()
Спр = СоздатьОбъект("Справочник.Номенклатура");
Цены = СоздатьОбъект("Справочник.Цены");
Цены.ИспользоватьДату(ТекущаяДата());
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент() = 1 Цикл
Если СокрЛП(Спр.Родитель) = "Аккумуляторы" Тогда;
Если Спр.ЭтоГруппа()<1 Тогда
Цены.ИспользоватьВладельца(Спр.ТекущийЭлемент());
Цены.ВыбратьЭлементы();
Пока Цены.ПолучитьЭлемент() = 1 Цикл
Сообщить(Цены.Наименование);
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Вот собственно.
Странно что в списке нет цены "Розница". Проверил в свойстве товара, она точно там есть.
http://pro1c.org.ua/redirect.php?http://radikal.ru/F/s61.radikal.ru/i171/1008/01/6906f12cf626.jpg.html
Закупочная
Розн. АКБ/ИНВ/ЗАР/СИНУС
Розн. АККУСТИКА
Розн. ИБП
Розн. СТАБ
Скидка 10%
Скидка 15%
Скидка 3%
Скидка 5%
Базовая
Закупочная
Розн. АКБ/ИНВ/ЗАР/СИНУС
Розн. АККУСТИКА
Розн. ИБП
Розн. СТАБ
Скидка 10%
Скидка 15%
Скидка 3%
Скидка 5%
Базовая
Закупочная
Розн. АКБ/ИНВ/ЗАР/СИНУС
Розн. АККУСТИКА
Розн. ИБП
Розн. СТАБ
Скидка 10%
Скидка 15%
Скидка 3%
Скидка 5%
Базовая
Закупочная
Розн. АКБ/ИНВ/ЗАР/СИНУС
Розн. АККУСТИКА
Розн. ИБП
Розн. СТАБ
Скидка 10%
Скидка 15%
Скидка 3%
Скидка 5%
Базовая
Закупочная
Розн. АКБ/ИНВ/ЗАР/СИНУС
Розн. АККУСТИКА
Розн. ИБП
Розн. СТАБ
Скидка 10%
Скидка 15%
Скидка 3%
Скидка 5%
Базовая
Закупочная
Розн. АКБ/ИНВ/ЗАР/СИНУС
Розн. АККУСТИКА
Розн. ИБП
Розн. СТАБ
Скидка 10%
Скидка 15%
Скидка 3%
Скидка 5%
Базовая
Закупочная
Розн. АКБ/ИНВ/ЗАР/СИНУС
Розн. АККУСТИКА
Розн. ИБП
Розн. СТАБ
Скидка 10%
Скидка 15%
Скидка 3%
Скидка 5%
Разбираться почему здесь нет "Розницы" нужно с базой. Ну а так, я вам показал, какие цены видит ваша обработка. Отталкивайтесь от этого.
При прогонке в отладчике видно что он сами цены-то видит, но вот вместо названия типа цены там <>. Поэтому ессно и не может найти тип цены
В глобальном модуле для получения цены есть функция ГлВернутьЦену. Передаешь параметром товар и категорию цены, получаешь цены на товар. В своей процедуре вызываешь данную функцию и получаешь цену на твою дату.
Для понимания работы и использования в своей обработке используй из справочника номенклатура форму списка, в модуле Функция СформироватьИнформационнуюСтроку().
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua