8.х Отбор по ТипамЦен

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем Pavel2009, 13 мар 2011.

  1. TopicStarter Overlay
    Pavel2009
    Offline

    Pavel2009 Опытный в 1С

    Регистрация:
    11 окт 2010
    Сообщения:
    183
    Симпатии:
    0
    Баллы:
    26
    Добрый Вечер!
    Бьюсь пол дня, не могу сообразить, как построить ценообразование, по типам цен -Закупочная, Оптовая, Розничная чтобы при выборе в документе, автоматический подставлялось нужное значение:
    1.ТипЦен: Закупочная - Поле Цена: Без изменений (с возможным, пересчетом валюты в рубли);
    2. ТипЦен: Оптовая - Поле Цена: Закупочная*30;
    3. ТипЦен: Розничная - Поле Цена: Закупочная*50;
    Есть РегистрСведений
    Измерения
    1.Номенклатура
    2.ТипЦен
    3.Валюта
    Ресурс
    1.Цена
    Регистр содержит все закупочные цены. Набрасал не большой код, но он не работает на Оптовой и Розничной цене. Как ПРАВИЛЬНО строится ценообразование? Может мне создать, специальный документ? где прописать всю номенклатуру и цену (Закупочная, Оптовая, Розничная) или как это проще делается?
    Заранее благодарен!
    Код:
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |	ТипыЦенСрезПоследних.Номенклатура,
    |	ТипыЦенСрезПоследних.ТипЦен,
    |	ТипыЦенСрезПоследних.Цена
    |ИЗ
    |	РегистрСведений.ТипыЦен.СрезПоследних КАК ТипыЦенСрезПоследних
    |ГДЕ
    |	ТипыЦенСрезПоследних.Номенклатура = &Номенклатура
    |И  ТипыЦенСрезПоследних.ТипЦен = &ТипЦен";
    ТекущаяСтрока=ЭлементыФормы.ПоступившийТовар.ТекущиеДанные;
    Запрос.УстановитьПараметр("Номенклатура",ТекущаяСтрока.Номенклатура);
    Запрос.УстановитьПараметр("ТипЦен",ТекущаяСтрока.ТипЦены);
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    
    Пока Выборка.Следующий() Цикл
    [color=#66FF99]Если ТекущаяСтрока.ТипЦен = "Оптовая"  Тогда
    ТекущаяСтрока.Цена=(Выборка.Цена*30);[/color]
    Иначе 
    [color=#66FF99]ТекущаяСтрока.ТипЦен = "Розничная"  Тогда
    ТекущаяСтрока.Цена=(Выборка.Цена*50);[/color]
    Иначе
    ТекущаяСтрока.Цена=Выборка.Цена;
    КонецЕсли;	
    
    

    Вложения:

    • Учеба.png
      Учеба.png
      Размер файла:
      60,3 КБ
      Просмотров:
      42
  2. vartanet
    Offline

    vartanet Опытный в 1С Команда форума

    Регистрация:
    16 ноя 2010
    Сообщения:
    2.698
    Симпатии:
    15
    Баллы:
    29
    предположение:
    судя по коду, тип цен у вас строкового типа? обычно вроде "Справочник.ТипыЦен". тогда условие естественно не срабатывает на оптовой и розничной цене.
  3. afinogen
    Offline

    afinogen Опытный в 1С

    Регистрация:
    28 фев 2011
    Сообщения:
    160
    Симпатии:
    0
    Баллы:
    26
    судя по всему ошибка в условии "если":
    Код:
    Пока Выборка.Следующий() Цикл
    Если ТекущаяСтрока.ТипЦен = "Оптовая"  Тогда 
    //вот тут вы передаете строку, а судя по всему нужно передавать ссылку на элемент справочника ТипыЦен,  
    //т.е. в условии писать что то типа Если ТекущаяСтрока.ТипЦен = Справочники.ТипыЦен.НайтиПоНаименованию("Оптовая") (Или НайтиПоКоду(Код типа цены))
    ТекущаяСтрока.Цена=(Выборка.Цена*30);
    Иначе 
    ТекущаяСтрока.ТипЦен = "Розничная"  Тогда //аналогично
    ТекущаяСтрока.Цена=(Выборка.Цена*50);
    Иначе
    ТекущаяСтрока.Цена=Выборка.Цена;
    КонецЕсли;
    
    
    
  4. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Судя по скриншоту у ТС - ТипыЦен - это справочник. А у условии он пытается сравнить справочник со строкой. Поэтому и не работает.
  5. TopicStarter Overlay
    Pavel2009
    Offline

    Pavel2009 Опытный в 1С

    Регистрация:
    11 окт 2010
    Сообщения:
    183
    Симпатии:
    0
    Баллы:
    26
    Тогда какой выход может быть? Создать в Справочнике напротив ТиповЦен поля ввода и вводить в эти поля, значения на которые нужно перемножать и потом сравнивать?
  6. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.782
    Симпатии:
    509
    Баллы:
    204
    Думаю что так:
    Код:
    Пока Выборка.Следующий() Цикл
    Если ТекущаяСтрока.ТипЦен = Справочники.ТипЦен.НайтиПоКоду("000000002")  Тогда
    ТекущаяСтрока.Цена=(Выборка.Цена*30);
    ИначеЕсли 
    ТекущаяСтрока.ТипЦен = Справочники.ТипЦен.НайтиПоКоду("000000003")  Тогда
    ТекущаяСтрока.Цена=(Выборка.Цена*50);
    Иначе
    ТекущаяСтрока.Цена=Выборка.Цена;
    КонецЕсли;
    
  7. TopicStarter Overlay
    Pavel2009
    Offline

    Pavel2009 Опытный в 1С

    Регистрация:
    11 окт 2010
    Сообщения:
    183
    Симпатии:
    0
    Баллы:
    26
    Отлично! Спасибо! Все получилось!

Поделиться этой страницей