Перейти к содержимому


Услуги программиста 1С
Профессиональные программисты 1С.
Весь комплекс услуг сопровождения 1С.

Курсы 1С
Бухгалтерам, менеджерам
и программистам.
Бесплатно!
Живое индивидуальное обучение по 1С.

Помогите зменить цену товара.


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 8

#1   m16

m16

      Рядовой

    • Пользователи
    • Сообщений: 5
    • Регистрация: 03-April 08
    • Откуда: , , Украина

Отправлено 04 December 2010 - 00:02

Всем добрый!
Пожалуйста помогите решить проблемку.
1С:Предприятие 7.7 (7.70.027) ТиС для Украины (7.70.004)

Задача вот такая:
Нужно найти весь товар в определённом ценовом диапазоне , найти Приходную цену (каждого товара) и вычислить (для каждого товара) Розничную цену в процентах.
напр. Розничная=Приходная+%
Вот код:

//*******************************************
Процедура Сформировать()
Спр = СоздатьОбъект("Справочник.Номенклатура");
Цены = СоздатьОбъект("Справочник.Цены");
Цены.ИспользоватьДату(ТекущаяДата());
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент() > 0 Цикл
Если Спр.ЭтоГруппа()=0 Тогда
Цены.ИспользоватьВладельца(Спр.ТекущийЭлемент());
Цены.ВыбратьЭлементы();
Если Цены.НайтиПоНаименованию("Приходная") = 1 Тогда
Закупка=Цены.Цена;
Если (Закупка>=9.76) и (Закупка<=9.78) Тогда
Цены.Цена=Закупка*30/100;
Цены.Цена=Закупка+Цены.Цена;
Сообщить("_____________________________________________");
Сообщить(Спр.ТекущийЭлемент());
Сообщить(Закупка);
Сообщить(Цены.Цена);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры

Этот код правильно отрабатывается только тогда, когда Приходная цена находится на 5 (или ниже) позиции в списке Цен
тут картинка http://s014.radikal....a4193684851.jpg

Подскажите, где в коде ошибка или что нужно добавить?
Спасибо.

  • 0

#2   Max_Nj

Max_Nj

      Ищу работу!!!

    • Пользователи
    • PipPipPipPipPipPipPipPip
    • Сообщений: 506
    • Регистрация: 07-August 08
    • Откуда:Мелитополь

Отправлено 04 December 2010 - 08:46

Замени вот это:
Code
Цены.Цена=Закупка*30/100;    
Цены.Цена=Закупка+Цены.Цена;

на такое:

Code
СуммаНаценки=Закупка*30/100;    
Цены.Цена=Цены.Цена+СуммаНаценки;

а так-же убери строчку:

Code
Цены.ВыбратьЭлементы();

P.S. А где у тебя запись цены?????
Добавь (после всех своих сообщить) Цена.Записать();

по моему так!

  • 0

#3   tttbuh

tttbuh

      Подполковник

    • Пользователи
    • PipPipPipPipPip
    • Сообщений: 107
    • Регистрация: 04-June 09
    • Откуда: , ,

Отправлено 04 December 2010 - 09:06

m16, А почему вы не можете воспользоваться готовой обработкой : сервис- формирование цен ?
  • 0

#4   Max_Nj

Max_Nj

      Ищу работу!!!

    • Пользователи
    • PipPipPipPipPipPipPipPip
    • Сообщений: 506
    • Регистрация: 07-August 08
    • Откуда:Мелитополь

Отправлено 04 December 2010 - 09:08

tttbuh, Я так понимаю изза этого:
Если (Закупка>=9.76) и (Закупка<=9.78) Тогда

Хотя я не телепат... biggrin

  • 0

#5   tttbuh

tttbuh

      Подполковник

    • Пользователи
    • PipPipPipPipPip
    • Сообщений: 107
    • Регистрация: 04-June 09
    • Откуда: , ,

Отправлено 04 December 2010 - 09:41

Max_Nj, да нет, там это, т.е. отбор цены ОТ и ДО- есть.
  • 0

#6   m16

m16

      Рядовой

    • Пользователи
    • Сообщений: 5
    • Регистрация: 03-April 08
    • Откуда: , , Украина

Отправлено 04 December 2010 - 19:31

Max_Nj, tttbuh,
Спасибо за советы.
Код подправил, но проблема не решилась.
С готовой обработкой «формирование цен» пользуемся. Но немного неудобно с ней работать. Буху приходится 10 раз вызывать и 10 раз забивать диапазон цен От и До. Каждый раз забивать процент наценки. С округлением тоже проблема. Не хочет 1С гибко округлять цены в зависимости от остатка до 25 или 75 коп или округлять цену, так как решит директор.
Например, если цена имеет остаток 25коп., а директору захотелось, чтобы остаток был 75коп.
Также обработка не может определить, что если, после формирования цен Розничная цена имеет меньшую цену, то её нельзя изменять. Обработка просто тупо перепишет уже имеющуюся большую цену на новую меньшую цену.
Вот мне и пришлось написать обработку, где бух в один присест заносит 10 разных диапазонов Приходных цен, на каждый из диапазонов устанавливает процент наценки, желаемое округление и указывает, нужно ли перезаписывать большую цену на меньшую.
Все отлично работает, кроме этой проблемы, которую я описал.
Код который тут поместил, это упрощённый вариант, отвечающий за выборку Приходных цен и наценки.
По поводу - Цена.Записать(); - пока код не пройдёт отладку, пользоваться не буду.

Ещё раз спасибо.

  • 0

#7   Shlavik

Shlavik

      Лейтенант

    • Пользователи
    • PipPip
    • Сообщений: 56
    • Регистрация: 30-January 09
    • Откуда: , ,

Отправлено 05 December 2010 - 20:06

m16,
ошибка скорее всего здесь:
Если Цены.НайтиПоНаименованию("Приходная") = 1 Тогда
Цены.НайтиПоНаименованию сбивает выборку Цены.ВыбратьЭлементы()
Проверяй Если Цены.Наименование = "Приходная" Тогда
Ну и само собой не забывай записывать изменения.
  • 0
Bis dat, qui cito dat
(сокращение 32-ой сентенции Публия Сируса)
--------------------

Кто не читает личные сообщения (ЛС), тот... сам за себя...


#8   m16

m16

      Рядовой

    • Пользователи
    • Сообщений: 5
    • Регистрация: 03-April 08
    • Откуда: , , Украина

Отправлено 05 December 2010 - 21:25

Shlavik,
Спасибо.
Строчку Цены.ВыбратьЭлементы() убрал, та же байда.

Хочу сказать, что если создать новый товар и Приходная цена будет стоять первой, то этот товар код вылавливает. Вбитый же ранее (полгода, год, два) товар, этот код вылавливает выборочно. Не пойму почему? Обработка "формирование цен" видит весь товар.

  • 0

#9   Shlavik

Shlavik

      Лейтенант

    • Пользователи
    • PipPip
    • Сообщений: 56
    • Регистрация: 30-January 09
    • Откуда: , ,

Отправлено 06 December 2010 - 22:29

m16,
Попробуй так, чудес не бывает:
//*******************************************
Процедура Сформировать()
Спр = СоздатьОбъект("Справочник.Номенклатура");
Цены = СоздатьОбъект("Справочник.Цены");
Цены.ИспользоватьДату(ТекущаяДата());
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент() > 0 Цикл
Если Спр.ЭтоГруппа()=1 Тогда
Продолжить;
КонецЕсли;
Цены.ИспользоватьВладельца(Спр.ТекущийЭлемент());
Цены.ВыбратьЭлементы();
Пока Цены.ПолучитьЭлемент() >0 Цикл
Если СокрЛП(Цены.Наименование) = "Приходная" Тогда
Закупка=Цены.Цена;
Если (Закупка>=9.76) и (Закупка<=9.78) Тогда
Цены.Цена=Закупка*30/100;
Цены.Цена=Закупка+Цены.Цена;
Сообщить("_____________________________________________");
Сообщить(Спр.ТекущийЭлемент());
Сообщить(Закупка);
Сообщить(Цены.Цена);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
  • 0
Bis dat, qui cito dat
(сокращение 32-ой сентенции Публия Сируса)
--------------------

Кто не читает личные сообщения (ЛС), тот... сам за себя...



Обратно в Программирование и конфигурирование 1С Предприятия 7.7

Похожие темы

  Название темы Автор Статистика Последнее сообщение



Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных