Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
15 Дек 2017, 22:53
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Рассчёт скидки покупателю, прошу помощи.  (Прочитано 5689 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн SoulPower

  • *
  • Сообщений: 8
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-05-30
  • Сайт: 
  • Профессия: Ученик 1С
Всем привет, помогите пожалуйста.

Задача: Добавить автоматически расчёт скидки покупателю при оформлении расходной накладной, Размер скидки зависит от суммы уже произведённых закупок в предыдущем месяце.

Скидки я храню в справочнике, сделки покупателей в регистре Продажи. Из клиентского приложения при изминении клиента вызываю функцию, которая выполняется на сервере, вот листинг:

Функция ВычислениеСкидки(Клиент) Экспорт
   ДатаНачала = НачалоМесяца(ДобавитьМесяц(ТекущаяДата(), -1));
   ДатаОкончания = КонецМесяца(ДобавитьМесяц(ТекущаяДата(), -1));
   ОборотКлиента = РегистрыНакопления.Продажи.Обороты(ДатаНачала,ДатаОкончания,,Клиент,"Выручка");
    Запрос = Новый Запрос;
   Запрос.Текст ="ВЫБРАТЬ
                 |   Скидки.ОбъемЗакупки КАК ОбъемЗакупки,
                 |   Скидки.ПроцентСкидки
                 |ИЗ
                 |   Справочник.Скидки КАК Скидки
                 |
                 |УПОРЯДОЧИТЬ ПО
                 |   ОбъемЗакупки УБЫВ";
   Результат = Запрос.Выполнить();
   ТЗ = Результат.Выгрузить();
   ВыборкаДетальныеЗаписи = Результат.Выбрать();
   Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
      Если ОборотКлиента >= ВыборкаДетальныеЗаписи.ОбъемЗакупки тогда
         Возврат ВыборкаДетальныеЗаписи.ПроцентСкидки;
      КонецЕсли;
   КонецЦикла;   
КонецФункции

Проблема вот в чём:
Метод Обороты() ругается на параметр Клиент, а я ему вроде передаю строку как и надо.

Да и вообще нихрена не работает, помогите плиз)


Оффлайн cska-fanat-kz

  • 1С:Специалист
  • Глобальный модератор
  • *****
  • Сообщений: 5745
  • РЕПУТАЦИЯ: 1099
  • КПД: 19%
  • Красная армия всех сильней!
  • Регистрация: 2010-11-06
    • Skype: cska-fanat-kz81
  • Сайт: cska-fanat-kz.ucoz.kz
  • Профессия: Разработчик 1С
РегистрыНакопления.Продажи(ДатаНачала, ДатаОкончания, Новый Структура("Клиент", Клиент),"Клиент","Выручка");
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Оффлайн cska-fanat-kz

  • 1С:Специалист
  • Глобальный модератор
  • *****
  • Сообщений: 5745
  • РЕПУТАЦИЯ: 1099
  • КПД: 19%
  • Красная армия всех сильней!
  • Регистрация: 2010-11-06
    • Skype: cska-fanat-kz81
  • Сайт: cska-fanat-kz.ucoz.kz
  • Профессия: Разработчик 1С
Запрос надо переделать.
Вы перебираете все элементы справочника ради одного единственного значения...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Оффлайн cska-fanat-kz

  • 1С:Специалист
  • Глобальный модератор
  • *****
  • Сообщений: 5745
  • РЕПУТАЦИЯ: 1099
  • КПД: 19%
  • Красная армия всех сильней!
  • Регистрация: 2010-11-06
    • Skype: cska-fanat-kz81
  • Сайт: cska-fanat-kz.ucoz.kz
  • Профессия: Разработчик 1С
И зачем вам

ТЗ = Результат.Выгрузить(); ?

абсолютно лишняя строка!
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Оффлайн SoulPower

  • *
  • Сообщений: 8
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-05-30
  • Сайт: 
  • Профессия: Ученик 1С
РегистрыНакопления.Продажи(ДатаНачала, ДатаОкончания, Новый Структура("Клиент", Клиент),"Клиент","Выручка");
Функция параметром получает значения клиента, то есть нужен определённый клиент, Иванов там или ещё кто.
И нужно для этого клиента посмотреть обороты за определённый период(в данном случае за месяц), наверно нужно воспользоваться методом Обороты? Или можно вот так обратиться, как в цитате? И как туда засунуть параметром клиента?
Запрос надо переделать.
Вы перебираете все элементы справочника ради одного единственного значения...

А как не перебирая найти нужное значение скидки? Справочник Скидки у меня такой:
Объём закупки          Процент скидки
          1000                            2
          3000                            5
          5000                           10
И зачем вам

ТЗ = Результат.Выгрузить(); ?

абсолютно лишняя строка!
Она просто для того чтоб посмотреть, что выбралось. А так да, она лишняя.

п.с. Я почти ничего не знаю, разбираюсь 5й день, так что извините за глупые вопросы, если что.

Оффлайн SoulPower

  • *
  • Сообщений: 8
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-05-30
  • Сайт: 
  • Профессия: Ученик 1С
а как прочитать элемент таблицы?
ОборотКлиента = РегистрыНакопления.Продажи.Обороты(ДатаНачала, ДатаОкончания, Новый Структура("Клиент", Клиент),"Клиент","Выручка");
тут ОборотКлиента это таблица, в ней одна строка в которой есть Клиент и Выручка.
И я чёт туплю и не могу эту Выручку прочитать.
чтоб потом подставить в сравнение.

Оффлайн cska-fanat-kz

  • 1С:Специалист
  • Глобальный модератор
  • *****
  • Сообщений: 5745
  • РЕПУТАЦИЯ: 1099
  • КПД: 19%
  • Красная армия всех сильней!
  • Регистрация: 2010-11-06
    • Skype: cska-fanat-kz81
  • Сайт: cska-fanat-kz.ucoz.kz
  • Профессия: Разработчик 1С
Сорри, очепятка. надо так:

РегистрыНакопления.Продажи.Обороты(ДатаНачала, ДатаОкончания, Новый Структура("Клиент", Клиент),"Клиент","Выручка");
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Оффлайн cska-fanat-kz

  • 1С:Специалист
  • Глобальный модератор
  • *****
  • Сообщений: 5745
  • РЕПУТАЦИЯ: 1099
  • КПД: 19%
  • Красная армия всех сильней!
  • Регистрация: 2010-11-06
    • Skype: cska-fanat-kz81
  • Сайт: cska-fanat-kz.ucoz.kz
  • Профессия: Разработчик 1С
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Оффлайн cska-fanat-kz

  • 1С:Специалист
  • Глобальный модератор
  • *****
  • Сообщений: 5745
  • РЕПУТАЦИЯ: 1099
  • КПД: 19%
  • Красная армия всех сильней!
  • Регистрация: 2010-11-06
    • Skype: cska-fanat-kz81
  • Сайт: cska-fanat-kz.ucoz.kz
  • Профессия: Разработчик 1С
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ОЗ",ОборотКлиента);
   Запрос.Текст ="ВЫБРАТЬ ПЕРВЫЕ 1
                 |   Скидки.ОбъемЗакупки КАК ОбъемЗакупки,
                 |   Скидки.ПроцентСкидки
                 |ИЗ
                 |   Справочник.Скидки КАК Скидки
                 |ГДЕ Скидки.ОбъемЗакупки >= &ОЗ
                 |УПОРЯДОЧИТЬ ПО
                 |   ОбъемЗакупки";
   Результат = Запрос.Выполнить();
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Оффлайн SoulPower

  • *
  • Сообщений: 8
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2011-05-30
  • Сайт: 
  • Профессия: Ученик 1С
Спасибо ещё раз.
Ваш вариант действительно короче и изящней.

Поясните пожалуйста ещё коечто.
ОборотКлиента, это таблица. Как мне проверить, что там есть значения?
Ведь если клиент ничего не покупал, то РегистрыНакопления.Продажи.Обороты() ничего не вернёт и будет пустая таблица, тогда надо вернуть значение скидки 0.
И ещё.
Как мне прочитать значение ПроцентаСкидки?
   Запрос.УстановитьПараметр("ОЗ",ОборотКлиента[0].Выручка);
   Результат = Запрос.Выполнить();
   СкидкаТаб = Результат.Выбрать();
СкидкаТаб имеет тип ВыборкаИзРезультатаЗапроса, Но значения там не определены. Как мне правильно обратиться к этой выборке, прочитать и вернуть ПроцентСкидки?

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

Вот эта строчка - СтрокаТабличнойЧасти.Номенклатура.Пустая()
Неправильная.
А как мне проверить заполнена ли номенклатура табличной части в форме?
Чтоб если заполнени вычислить цену со скидкой, а если нет, то просто сказать что скидка есть.




Теги:
 

Добрый вечер! Прошу помочь, кто знает, подскажите пож. В счете не выводит грузоотправителя и грузополучаетля. Куда их внести ? Как сделать что бы выводило ? У меня 1с 8.3 редакция 11.1 управление торговлей Спасибо!

Автор Farid GasimliРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 3
Просмотров: 1972
Последний ответ 07 Фев 2016, 14:34
от pavl_vs
Как при помощи СКД при формировании макета отчета данные связанного набора данных вывести в Параметр через ";"

Автор sveta CРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 0
Просмотров: 967
Последний ответ 01 Мар 2016, 14:33
от sveta C
УТ11.1 - Условие уменьшения скидки: "Если одна из форм оплаты в чеке - Платежная карта"

Автор lsiРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 0
Просмотров: 2538
Последний ответ 17 Сен 2014, 13:22
от lsi
Новый форум "Купоны, скидки". ПРОДАМКУПОН.РФ - Отзывы, статьи, предложения.

Автор AdminРаздел Предложения по работе форума

Ответов: 0
Просмотров: 2744
Последний ответ 01 Фев 2012, 15:01
от Admin
8.3 Прошу помочь вытащить печатную форму из типовой конфигурации во внешнюю обработку

Автор ЭтиловыйРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 0
Просмотров: 573
Последний ответ 28 Сен 2016, 20:51
от Этиловый

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

Смотрите бесплатно более 300 видеоуроков по работе в 1С:Бухгалтерия 8 и 1C:ЗУП 8 ред. 3.0

СМОТРЕТЬ >>

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
180 Сообщений
ilyay ilyay
69 Сообщений
alex0402
54 Сообщений
oleg-x
48 Сообщений
AIFrame
46 Сообщений
andron81_81
44 Сообщений
MuI_I_Ika MuI_I_Ika
33 Сообщений
Golickoff Golickoff
31 Сообщений
BuhRust
30 Сообщений
Dima Dddd Dima Dddd
26 Сообщений

* Кто онлайн

  • Точка Гостей: 218
  • Точка Скрытых: 0
  • Точка Пользователей: 4
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal