Версия для печати темы (https://pro1c.org.ua/index.php?showtopic=1831)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 7.7 _ Как изменить цену товара

Автор: nonsens 03.08.10, 12:05

1С Предприятие - 7.70.027
Торговля+Склад для Украины 7.70.013
Подскажите пожалуйста как получить цену товара и изменить ее. У меня постоянно возникает необходимость сформировать цены на различные группы товаров. На некоторые оптовая=закупка+20, розница=закупка+30, консигнация и пр. На другие группы товаров другие проценты наценки. Обычно делаю это вручную, используя "Формирование цен", но т.к. групп много и наценки разные, то решил написать обработку с прописанными в ней группами и наценками. Что б просто можно было нажатием одной кнопки сделать монотонную работы быстро.
Но не могу никак разобраться как получить в цикле закупочную цену на товар. Понимаю что вопрос наверно "детский", но я пока только учусь... Подскажите пожалуйста. Спасибо.

Автор: Vofka 03.08.10, 12:56

Код обработки покажите

Автор: nonsens 03.08.10, 13:24

Цитата(Vofka @ 03.08.10, 14:56) *
Код обработки покажите

Дак нет пока кода обработки. Я не знаю как получить цены товара (закупочная, розница и пр.) Мне хотя б простой пример, как получить например закупочную цену товара, а дальше я надеюсь что додумаю сам. Может есть какой-то приблизя пример?

Автор: akella 03.08.10, 13:29

ну а где хранятся эти цены?
справочник какой нить?

Автор: nonsens 03.08.10, 13:33

Цитата(akella @ 03.08.10, 15:29) *
ну а где хранятся эти цены?
справочник какой нить?

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

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


Возможно все и не верно, но пока застрял вообще на мертво.

Автор: Vofka 03.08.10, 15:14

Что-то вообще не то.
Я думаю как-то так:

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

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

Автор: nonsens 03.08.10, 15:22

Цитата(Vofka @ 03.08.10, 17:14) *
Что-то вообще не то.
Я думаю как-то так:

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

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


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

Автор: Vofka 03.08.10, 15:25

Цитата
Ага, понимаю, спасибо за подсказку.

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

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

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

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

Автор: nonsens 03.08.10, 15:46

Цитата(Vofka @ 03.08.10, 17:25) *
За правильность не отвечаю, надо пробовать. Навскидку (во 2 цикле):

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

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

Абсурд получается. Просто мне для проведения арифметических операций необходимо занести информацию в переменные, а дальше уже проведя арифметические оп-ции, перегнать цифры из переменных опять в базу. Во как...
Ведь получается что в справочнике Цены есть поле Цена, но оно не считывается. ...или я что-то не верно делаю.

Автор: Vofka 03.08.10, 15:49

Это не абсурд, это периодический реквизит! Посмотрите в СП методы работы с периодическими реквизитами.

Автор: nonsens 03.08.10, 16:02

Цитата(Vofka @ 03.08.10, 17:49) *
Это не абсурд, это периодический реквизит! Посмотрите в СП методы работы с периодическими реквизитами.

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


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

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

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


P.S. Жаль что нет кнопки "Большое спасибо" smile.gif

Автор: alex1c 03.08.10, 20:12

В меню "сервис - Формирование цен" помоему все что автор хотел, есть...
Или я ошибаюсь...

Автор: Vofka 04.08.10, 6:59

Пожалуйста smile.gif

Автор: nonsens 04.08.10, 7:21

Цитата(alex1c @ 03.08.10, 22:12) *
В меню "сервис - Формирование цен" помоему все что автор хотел, есть...
Или я ошибаюсь...

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

Автор: nonsens 04.08.10, 21:18

Блин, все равно не работает. Вот что получилось:

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

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

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

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

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

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

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

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


Не находит тип цены "Розница", как собсно и других типов. Уж даже и не знаю где рыть. sad.gif

Автор: logist 04.08.10, 21:55

А закупочная цена есть всегда? Может не нашлась закупочная цена, то тогда и розница будет 0

Автор: nonsens 05.08.10, 6:46

Цитата(logist @ 04.08.10, 23:55) *
А закупочная цена есть всегда? Может не нашлась закупочная цена, то тогда и розница будет 0


Да, я проверил. Она есть всегда.

Автор: Vofka 05.08.10, 6:55

Тип цен точно называется "Розница"? Не "Розничная"?

Автор: nonsens 05.08.10, 7:02

Да, я проверил. И даже скопировал тип цены из справочника прямо в обработку.

Автор: Vofka 05.08.10, 7:07

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

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

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

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

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

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


что выводит?

Автор: nonsens 05.08.10, 7:31

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

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%


Автор: Vofka 05.08.10, 7:37

Разбираться почему здесь нет "Розницы" нужно с базой. Ну а так, я вам показал, какие цены видит ваша обработка. Отталкивайтесь от этого.

Автор: nonsens 08.08.10, 11:18

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


Попробовал делать Тестирование и Исправление базы из конфигуратора, не помогло. Через обработку так и не видит некоторых цен. При том что через "Формирование цен" все хорошо видно, и через прайс и прочее. Как такое может быть, что б именно самописная обработка не видела некоторых типов цен? sad.gif

Автор: nonsens 08.08.10, 11:50

При прогонке в отладчике видно что он сами цены-то видит, но вот вместо названия типа цены там <>. Поэтому ессно и не может найти тип цены sad.gif

Автор: Pepe 08.08.10, 16:46

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

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

Автор: nonsens 08.08.10, 16:58

Цитата(Pepe @ 08.08.10, 18:46) *
Смотри обработку, увидишь как организован выбор.

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


Да не, конфа типовая! Моя обработка не видит цен smile.gif

Автор: Pepe 08.08.10, 17:24

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

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua