Всем добрый!
Пожалуйста помогите решить проблемку.
1С:Предприятие 7.7 (7.70.027) ТиС для Украины (7.70.004)
Задача вот такая:
Нужно найти весь товар в определённом ценовом диапазоне , найти Приходную цену (каждого товара) и вычислить (для каждого товара) Розничную цену в процентах.
напр. Розничная=Приходная+%
Вот код:
//*******************************************
Процедура Сформировать()
Спр = СоздатьОбъект("Справочник.Номенклатура");
Цены = СоздатьОбъект("Справочник.Цены");
Цены.ИспользоватьДату(ТекущаяДата());
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент() > 0 Цикл
Если Спр.ЭтоГруппа()=0 Тогда
Цены.ИспользоватьВладельца(Спр.ТекущийЭлемент());
Цены.ВыбратьЭлементы();
Если Цены.НайтиПоНаименованию("Приходная") = 1 Тогда
Закупка=Цены.Цена;
Если (Закупка>=9.76) и (Закупка<=9.78) Тогда
Цены.Цена=Закупка*30/100;
Цены.Цена=Закупка+Цены.Цена;
Сообщить("_____________________________________________");
Сообщить(Спр.ТекущийЭлемент());
Сообщить(Закупка);
Сообщить(Цены.Цена);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Этот код правильно отрабатывается только тогда, когда Приходная цена находится на 5 (или ниже) позиции в списке Цен
Подскажите, где в коде ошибка или что нужно добавить?
Спасибо.
(1) Как-то то ли задачу криво описал, то ли криво решил....
Как-то так надо, если исходить из описания:
Процедура Сформировать()
Спр = СоздатьОбъект("Справочник.Номенклатура");
Цены = СоздатьОбъект("Справочник.Цены");
Цены.ИспользоватьДату(ТекущаяДата(),1);
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент() > 0 Цикл
Если Спр.ЭтоГруппа()=1 Тогда
Продолжить;
КонецЕсли;
Розница = 0;
Цены.ИспользоватьВладельца(Спр.ТекущийЭлемент());
Если Цены.НайтиПоНаименованию("Приходная") = 1 Тогда
Закупка=Цены.Цена;
Если (Закупка>=9.76) и (Закупка<=9.78) Тогда
Розница=Закупка*1.3;
Если Цены.НайтиПоНаименованию("Розничная") = 1 Тогда
Цены.Цена = Розница;
Цены.Записать();
Сообщить(Строка(Спр)+" //Приходная: "+Строка(Закупка)+" //Розничная: "+Строка(Розница));
Иначе
Сообщить(Строка(Спр)+" //Приходная: "+Строка(Закупка)+" нет типа цен <Розничная>!","!");
//или создать, если нужно
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Dolly_EV Спасибо за совет.
Ваш код не решил проблему.
Хочу сказать, что если создать новый товар и Приходная цена будет стоять первой, то этот товар код вылавливает. Вбитый же ранее (полгода, год, два) товар, этот код вылавливает выборочно. Не пойму почему? Обработка "формирование цен" видит весь товар.
P.S. Сейчас пользуемся с обработкой «формирование цен». Но немного неудобно с ней работать. Буху приходится 10 раз вызывать и 10 раз забивать диапазон цен От и До. Каждый раз забивать процент наценки. С округлением тоже проблема. Не хочет 1С гибко округлять цены в зависимости от остатка до 25 или 75 коп или округлять цену, так как решит директор.
Например, если цена имеет остаток 25коп., а директору захотелось, чтобы остаток был 75коп.
Также обработка не может определить, что если, после формирования цен Розничная цена имеет меньшую цену, то её нельзя изменять. Обработка просто тупо перепишет уже имеющуюся большую цену на новую меньшую цену.
Вот мне и пришлось написать обработку, где бух в один присест заносит 10 разных диапазонов Приходных цен, на каждый из диапазонов устанавливает процент наценки, желаемое округление и указывает, нужно ли перезаписывать большую цену на меньшую.
Все отлично работает, кроме этой проблемы, которую я описал.
Код который тут поместил, это упрощённый вариант, отвечающий за выборку Приходных цен и наценки.
Ещё раз спасибо.
Ты попробуй после того, как ты выбираешь элементы спр.Цены (Цены.ВыбратьЭлементы()) не находить его (Цены.НайтиПоНаименованию), а прям перебери полученный массив (Цены.ПолучитьЭлемент()) - там их в выборке немного - это не замедлить время формирования отчет. А в цикле при переборке элементов пиши код с условием какой тебе надо. Скорее всего должно сработать и будет брать цену с любой строки
Здравствуйте. Я немного чайник в 1с :D Смотрите вот у нас есть группа товара различного ассортимента. Мы заказали несколько видов этого товара, он нам пришел по цене выше которой была ранее. Как сделать переоценку на всю группу товаров, до цены по которой пришли эти новые виды?
Подскажите как поменять цены в 1с?.если допустим весь товар поднялся в цене на 5%.может ли программа сама расчитать конечную сумму(+5%) и установить ее?чтобы мне не менять каждую позицию в ручную
В типовой российской Торговля и Склад - такой вариант есть. Скорее всего и в родственных конфигах, построенных на ее основе (типа украинской) - тоже. А если и нет, то пишется это на коленке...