Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как изменить цену товара
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
nonsens
1С Предприятие - 7.70.027
Торговля+Склад для Украины 7.70.013
Подскажите пожалуйста как получить цену товара и изменить ее. У меня постоянно возникает необходимость сформировать цены на различные группы товаров. На некоторые оптовая=закупка+20, розница=закупка+30, консигнация и пр. На другие группы товаров другие проценты наценки. Обычно делаю это вручную, используя "Формирование цен", но т.к. групп много и наценки разные, то решил написать обработку с прописанными в ней группами и наценками. Что б просто можно было нажатием одной кнопки сделать монотонную работы быстро.
Но не могу никак разобраться как получить в цикле закупочную цену на товар. Понимаю что вопрос наверно "детский", но я пока только учусь... Подскажите пожалуйста. Спасибо.
Vofka
Код обработки покажите
nonsens
Цитата(Vofka @ 03.08.10, 14:56) необходимо зарегистрироваться для просмотра ссылки
Код обработки покажите

Дак нет пока кода обработки. Я не знаю как получить цены товара (закупочная, розница и пр.) Мне хотя б простой пример, как получить например закупочную цену товара, а дальше я надеюсь что додумаю сам. Может есть какой-то приблизя пример?
akella
ну а где хранятся эти цены?
справочник какой нить?
nonsens
Цитата(akella @ 03.08.10, 15:29) необходимо зарегистрироваться для просмотра ссылки
ну а где хранятся эти цены?
справочник какой нить?

Ну да, конфигурация стандартная, поэтому цены хранятся в справочнике "цены", который в свою очередь подчинен "Номенклатуре".

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


Возможно все и не верно, но пока застрял вообще на мертво.
Vofka
Что-то вообще не то.
Я думаю как-то так:

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

Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент() = 1 Цикл
Цены.ИспользоватьВладельца(Спр.ТекущийЭлемент());
Цены.ВыбратьЭлементы();
Пока Цены.ПолучитьЭлемент() = 1 Цикл // в этом цикле получим все цены
КонецЦикла;
КонецЦикла;
nonsens
Цитата(Vofka @ 03.08.10, 17:14) необходимо зарегистрироваться для просмотра ссылки
Что-то вообще не то.
Я думаю как-то так:

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

Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент() = 1 Цикл
Цены.ИспользоватьВладельца(Спр.ТекущийЭлемент());
Цены.ВыбратьЭлементы();
Пока Цены.ПолучитьЭлемент() = 1 Цикл // в этом цикле получим все цены
КонецЦикла;
КонецЦикла;


Ага, понимаю, спасибо за подсказку. А как вот например тут выдрать закупочную. Т.е. как сослаться на тип цены "закупочная"?. Вот к примеру ее нужно просто умножить на 2. Пока не могу допереть.
Vofka
Цитата
Ага, понимаю, спасибо за подсказку.

У нас для "спасибо" есть кнопка специальная wink.gif

Цитата
А как вот например тут выдрать закупочную.

За правильность не отвечаю, надо пробовать. Навскидку (во 2 цикле):

Если Цены.Наименование = "Закупочная" Тогда
// производим нужные действия
КонецЕсли;
nonsens
Цитата(Vofka @ 03.08.10, 17:25) необходимо зарегистрироваться для просмотра ссылки
За правильность не отвечаю, надо пробовать. Навскидку (во 2 цикле):

Если Цены.Наименование = "Закупочная" Тогда
// производим нужные действия
КонецЕсли;

Все вроде получается верно, но по прежнему не могу допереть как считать цену. Пробовал вот так:
Пока Цены.ПолучитьЭлемент() = 1 Цикл // в этом цикле получим все цены 
    Если Цены.Наименование = "Закупочная" Тогда
// производим нужные действия
Закупка=Цены.Цена;
КонецЕсли;
КонецЦикла;

Абсурд получается. Просто мне для проведения арифметических операций необходимо занести информацию в переменные, а дальше уже проведя арифметические оп-ции, перегнать цифры из переменных опять в базу. Во как...
Ведь получается что в справочнике Цены есть поле Цена, но оно не считывается. ...или я что-то не верно делаю.
Vofka
Это не абсурд, это периодический реквизит! Посмотрите в СП методы работы с периодическими реквизитами.
nonsens
Цитата(Vofka @ 03.08.10, 17:49) необходимо зарегистрироваться для просмотра ссылки
Это не абсурд, это периодический реквизит! Посмотрите в СП методы работы с периодическими реквизитами.

Ай спасибо! Взял вот так:
Закупка=Цены.Цена.Получить();


Щас буду думать как обыграть весь процесс с учетом всего задуманного.

Вместо условия использовал:

Цены.НайтиПоНаименованию("Закупочная");


P.S. Жаль что нет кнопки "Большое спасибо" smile.gif
alex1c
В меню "сервис - Формирование цен" помоему все что автор хотел, есть...
Или я ошибаюсь...
Vofka
Пожалуйста smile.gif
nonsens
Цитата(alex1c @ 03.08.10, 22:12) необходимо зарегистрироваться для просмотра ссылки
В меню "сервис - Формирование цен" помоему все что автор хотел, есть...
Или я ошибаюсь...

Конечно есть, но прочтите мое первое сообщение. Если делать через "Формирование цен", у меня это займет кучу времени. Т.к. на разные группы товара, нужны разные наценки. Групп много. Поэтому и приходится извращаться. 32000000.gif
nonsens
Блин, все равно не работает. Вот что получилось:

Процедура Сформировать()                          
    Спр = СоздатьОбъект("Справочник.Номенклатура");
Цены = СоздатьОбъект("Справочник.Цены");
Цены.ИспользоватьДату(ТекущаяДата());

Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент() = 1 Цикл  

Если СокрЛП(Спр.Родитель) = "Аккумуляторы" Тогда;
Если Спр.ЭтоГруппа()<1 Тогда    

Цены.ИспользоватьВладельца(Спр.ТекущийЭлемент());

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

Если Цены.НайтиПоНаименованию("Розница") = 1 Тогда
Цены.Цена=Закупка*0.25;
//Цены.Записать();
КонецЕсли;

КонецЕсли;
КонецЕсли;

КонецЦикла;
КонецПроцедуры


Не находит тип цены "Розница", как собсно и других типов. Уж даже и не знаю где рыть. sad.gif
logist
А закупочная цена есть всегда? Может не нашлась закупочная цена, то тогда и розница будет 0
nonsens
Цитата(logist @ 04.08.10, 23:55) необходимо зарегистрироваться для просмотра ссылки
А закупочная цена есть всегда? Может не нашлась закупочная цена, то тогда и розница будет 0


Да, я проверил. Она есть всегда.
Vofka
Тип цен точно называется "Розница"? Не "Розничная"?
nonsens
Да, я проверил. И даже скопировал тип цены из справочника прямо в обработку.
Vofka
Процедура Сформировать()                          
    Спр = СоздатьОбъект("Справочник.Номенклатура");
Цены = СоздатьОбъект("Справочник.Цены");
Цены.ИспользоватьДату(ТекущаяДата());

Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент() = 1 Цикл  

Если СокрЛП(Спр.Родитель) = "Аккумуляторы" Тогда;
Если Спр.ЭтоГруппа()<1 Тогда    

Цены.ИспользоватьВладельца(Спр.ТекущийЭлемент());
Цены.ВыбратьЭлементы();
Пока Цены.ПолучитьЭлемент() = 1 Цикл
Сообщить(Цены.Наименование);
КонецЦикла;

КонецЕсли;
КонецЕсли;

КонецЦикла;
КонецПроцедуры


что выводит?
nonsens
Вот собственно.
Странно что в списке нет цены "Розница". Проверил в свойстве товара, она точно там есть.

необходимо зарегистрироваться для просмотра ссылки


Цитата
Базовая
Закупочная
Розн. АКБ/ИНВ/ЗАР/СИНУС
Розн. АККУСТИКА
Розн. ИБП
Розн. СТАБ
Скидка 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%

Vofka
Разбираться почему здесь нет "Розницы" нужно с базой. Ну а так, я вам показал, какие цены видит ваша обработка. Отталкивайтесь от этого.
nonsens
Цитата(Vofka @ 05.08.10, 9:37) необходимо зарегистрироваться для просмотра ссылки
Разбираться почему здесь нет "Розницы" нужно с базой. Ну а так, я вам показал, какие цены видит ваша обработка. Отталкивайтесь от этого.


Попробовал делать Тестирование и Исправление базы из конфигуратора, не помогло. Через обработку так и не видит некоторых цен. При том что через "Формирование цен" все хорошо видно, и через прайс и прочее. Как такое может быть, что б именно самописная обработка не видела некоторых типов цен? sad.gif
nonsens
При прогонке в отладчике видно что он сами цены-то видит, но вот вместо названия типа цены там <>. Поэтому ессно и не может найти тип цены sad.gif
Pepe
Цитата(nonsens @ 08.08.10, 13:18) необходимо зарегистрироваться для просмотра ссылки
через "Формирование цен" все хорошо видно, и через прайс и прочее.
Смотри обработку, увидишь как организован выбор.
Цитата(nonsens)
Как такое может быть, что б именно самописная обработка не видела некоторых типов цен? sad.gif

С этого и надо было начинать. Если конфа не типовая, цитирую ARDI - "телепатов здесь нет". wacko.gif
nonsens
Цитата(Pepe @ 08.08.10, 18:46) необходимо зарегистрироваться для просмотра ссылки
Смотри обработку, увидишь как организован выбор.

С этого и надо было начинать. Если конфа не типовая, цитирую ARDI - "телепатов здесь нет". wacko.gif


Да не, конфа типовая! Моя обработка не видит цен smile.gif
Pepe
В глобальном модуле для получения цены есть функция ГлВернутьЦену. Передаешь параметром товар и категорию цены, получаешь цены на товар. В своей процедуре вызываешь данную функцию и получаешь цену на твою дату.
Для понимания работы и использования в своей обработке используй из справочника номенклатура форму списка, в модуле Функция СформироватьИнформационнуюСтроку().
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.