Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Помогите, надо сделать формулу "Сумма" (#Кросспостинг)  [new]
ByKiS
Member

Откуда:
Сообщений: 3760
Модератор: Правила:
Не рекомендуется:
  • Отправлять сообщение одновременно в несколько форумов. Модераторы соответствующих форумов вправе удалить такие сообщения.

  • Фирма занимается изготовлением жалюзи. Всего 175 типов жалюзей (разделённых на 15 категорий) у каждого типа своя цена, причём на каждый тип есть палета цвета (от 15 до 356 цветов) от которого тоже зависит цена.
    Сейчас цены в зависимости от типа и цвета подсчитываются вручную по ценникам четырьма способами: за 1м ширины, за 1м высоты, за 1 шт (таблицы, где 1 строчка - ширина, левая колонка - высота), за 1 м2. А сумма в программе по такой простенькой формуле:

    Function Suma(Ширина, МинЦенаШирина, Высота, МинЦенаВысота, МинЦенаПлощадь, _
                Количество, Цена, Мера) As String
    Dim MyШирина, MyВысота, MyПлощадь As String
    MyШирина = IIf(МинЦенаШирина > Ширина / 1000, МинЦенаШирина, Ширина / 1000)
    MyВысота = IIf(МинЦенаВысота > Высота / 1000, МинЦенаВысота, Высота / 1000)
    Select Case Мера
     Case "шт"
      Suma = Round(Цена * Количество, 2)
     Case "kvm"
      If МинЦенаПлощадь > MyШирина * MyВысота Then
       Suma = Round(Цена * Количество * МинЦенаПлощадь, 2)
      Else
       Suma = Round(Цена * Количество * MyШирина * MyВысота, 2)
      End If
     Case "Ширина"
      Suma = Round(Цена * Количество * MyШирина, 2)
     Case "Высота"
      Suma = Round(Цена * Количество * MyВысота, 2)
    End Select
    End Function

    Каждый клиет (представитель) имеет на определённую категорию определённую скидку. В идеале надо чтобы програма сама после ввода типа, цвета, ширины, высоты, количества и клиента выдавала стоимость.
    Или хотя бы надо как-то расчитывать сумму по клиенту - тоесть надо чтобы Suma ещё и както зависила от клиента. Нужен совет по какому принципу и какой схеме это можно организовать и вообще с чего начать.

    Сообщение было отредактировано: 6 фев 07, 10:28
    5 фев 07, 10:13    [3737847]     Ответить | Цитировать Сообщить модератору
     Re: Помогите, надо сделать формулу "Сума"  [new]
    natalitvinenko
    Member

    Откуда: Донецк
    Сообщений: 738
    "Определенная категория" - это как? В зависимости от чего? К примеру, пусть зависит от высоты. Тагда заводим таблику KlientProsent:

    Id счетчик
    ID_клиент
    ID_цвет
    SkidkaПроцент

    И добавляем в формулу - там где высота что - то вроде:
    MyВысота = IIf(МинЦенаВысота > Высота / 1000, МинЦенаВысота, Высота / 1000) * nz(dlookup("SkidkaПроцент","KlientProsent","ID_клиент="& Klient ))
    
    при этом в функцию должен передаваться клиент
    Function Suma(Ширина, МинЦенаШирина, Высота, МинЦенаВысота, МинЦенаПлощадь, _
                Количество, Цена, Мера, Klient) As String
    
    Конкретно что нужно писать в формулу и куда в ней этот процент дорисовывать - разбираемся в зависимости от конкретных условий.

    А сумма то чего As String?
    5 фев 07, 14:29    [3739642]     Ответить | Цитировать Сообщить модератору
     Re: Помогите, надо сделать формулу "Сума"  [new]
    ByKiS
    Member

    Откуда:
    Сообщений: 3760
    natalitvinenko
    А сумма то чего As String?
    А я больше ничего не знаю... а стринг всегда работает :)

    Вариант хороший, но я плохо обяснил и Вы сказали не совсем то что мне надо. Всего 175 типов жалюзей (разделённых на 15 категорий) - например категории: вертикальные, горизонтальные, защитные и т.д. Типы "вертикальные" - Extra, Standart... "горизонтальные" - Isolite, Isostyle, Private, Privat-16... "защитные" - PA45, PA37, PAO30...

    Цены будут для всех одинаковые. Клиент может иметь фиксированную скидку на категории, например на "вертикальные" - 10%, "горизонтальные" - 3%, на "защитные" - 0% и т.д.

    Емпирически чувствую, что вариант с DlookUp - это то что надо, вот только как организовать таблицу клиенты (или "типы" или "категории", чтобы там хранить информацию о скидках) чтобы не добавлять дополнительные поля при появлении нового типа или клиента?
    5 фев 07, 14:46    [3739751]     Ответить | Цитировать Сообщить модератору
     Re: Помогите, надо сделать формулу "Сума"  [new]
    natalitvinenko
    Member

    Откуда: Донецк
    Сообщений: 738
    Тогда добавить справочники - список категорий и список типов, с указанием категорий
    Таблица_Раз
    ID - счетчик
    Категория

    Таблица_Два -
    Id счетчик
    Тип
    ID_категория

    И теперь таблица скидок
    Id счетчик
    ID_клиент
    ID_категория !!!!
    SkidkaПроцент

    Теперь вы мирно добавляете новый тип в справочник Таблица_Два, а расчет будет идти не от типов, а от категорий. Одному человеку может соответствовать несколько строк в таблице скидок. Если длукап выбрал(есть скидка) - возьмется скидка, если не выбрал - как - то обрабатывать Null Только Nz, который я упомянула, нужно поправить, чтобы не получилось умножения на нуль.
    Похоже?
    5 фев 07, 15:06    [3739886]     Ответить | Цитировать Сообщить модератору
     Re: Помогите, надо сделать формулу "Сума"  [new]
    ByKiS
    Member

    Откуда:
    Сообщений: 3760
    То есть добавляем справочник "скидки", делаем такую формулу
    Function Suma(Ширина, МинЦенаШирина, Высота, МинЦенаВысота, МинЦенаПлощадь, _
                Количество, Цена, Мера, Klient, Kategorija) As String
    И потом по клиенту и категории находим скидку? Что-то похожее, спасибо. А как-то поправить nz - это как? :)
    Теперь от теории да к практике...
    5 фев 07, 15:19    [3739989]     Ответить | Цитировать Сообщить модератору
     Re: Помогите, надо сделать формулу "Сума"  [new]
    mds_world
    Member

    Откуда: Ташкент
    Сообщений: 27548
    Тема скидок огромная, необозримая. Бывают скидки групповые, скажем по типу клиента, бывают индивидуальные. Бывают фиксированные, а есть расчетные, параметрические. Есть сезонные, есть по времени суток. А еще оптовые, которые еще к тому же могут зависить от суммы. Вам прежде всего надо разобраться с тем как у вас принято делать скидки, составить их алгоритмы.
    Важный момент это приоритет скидок при наличии нескольких их видов. Например, некоторому типу клиентов К1 положена скидка С1, но одному из группы К1 дается скидка С11. Как рассчитывать, от чего плясать: от первоначальной цены или от цены с групповой скидкой. А если еще сюда накладывается сезонная и/или оптовая скидка? Вам нужно выработать четкое положение формализуемое до такой степени, чтобы его можно было запрограммировать. В положении должны быть все применяемые у вас скидки, из приоритеты, их методы расчета После формализации вам самому все станет ясно как это сделать, какие новые поля и новые справочники нужны для реализации.
    5 фев 07, 15:21    [3740007]     Ответить | Цитировать Сообщить модератору
     Re: Помогите, надо сделать формулу "Сума"  [new]
    ByKiS
    Member

    Откуда:
    Сообщений: 3760
    >mds_world
    Да, согласен... Но т.к. в програмировании я не силён - будем упращать систему скидок до моих способностей програмиста :)
    Предложенный вариан (справочник скидок, где каждому клиенту на каждую категорию определена скидка) + уже имеющийся (общая скидка на заказ) = оптимальный вариант, который меня вполне устраивает.
    Все перечисленные Вами нюансы учесть нереально в силу сроков - через две недели даю базу первому филиалу, потом другому и т.д. Так что на сегодня всё что я могу - сказать что скидки отныне считаются по другому (так, как их умеет считать программа).
    А вот для реализации даже такой простенькой задачи как предложенный вариант, нужна помощь - не совсем представляю как и куда тут этот длукап вписывать...
    5 фев 07, 15:38    [3740158]     Ответить | Цитировать Сообщить модератору
     Re: Помогите, надо сделать формулу "Сумма"  [new]
    mds_world
    Member

    Откуда: Ташкент
    Сообщений: 27548
    автор
    Но т.к. в програмировании я не силён - будем упращать систему скидок до моих способностей програмиста :)
    Извините, но здесь ваши способности не причем. У фирмы заворот кишок случится если бизнес-правила будут определяться возможностями программиста. Имеющися скидки введены для привлечения покупателя, если вы их измените - вы меняете политику фирмы. Вам это надо?

    И второе. Судя по описанию, вы сейчас себе только усложняете задачу. Ваши скидки (из постановки задачи) зависят только от цены. Поэтому сейчас, при расчете скидок забудьте о высоте, длине и цвете. Есть две независимые задачи:
    1. Расчет цены. Здесь важны все параметры и нужно сделать функцию для из расчета.
    2. Расчет скидки. Здесь, по вашей постановке, ничего кроме цены не нужно.
    Получите цену, рассчитайте скидку.
    5 фев 07, 16:07    [3740383]     Ответить | Цитировать Сообщить модератору
     Re: Помогите, надо сделать формулу "Сумма"  [new]
    proposed amendment
    Member

    Откуда:
    Сообщений: 10217
    mds_world
    Получите цену, рассчитайте скидку.


    ИМХО пустое это... бесполезно объяснять

    тут такое дело... либо человек понимает что делает, либо уже ничего не поможет...
    5 фев 07, 16:19    [3740478]     Ответить | Цитировать Сообщить модератору
     Re: Помогите, надо сделать формулу "Сумма"  [new]
    ByKiS
    Member

    Откуда:
    Сообщений: 3760
    Первое - вводится вручную из ценника, ценник делает бухалтерия...

    Второе - формула суммы теперь такая

    Function Suma(Ширина, МинЦенаШирина, Высота, МинЦенаВысота, МинЦенаПлощадь, _
                Количество, Цена, Мера, Kategorija, Klient) As String
    Вопрос
    Как с DLookUp выбирать по двум параметрам? То есть из таблицы "справочник скидки" найти "Nuolaida" (скидка), если дано "UzsakovoID", "RusiesID" (Klient, Kategorija).

    NuolaidaIDUzsakovoIDRusiesIDNuolaida
    1VišinskasVertikalios10
    5 фев 07, 16:19    [3740479]     Ответить | Цитировать Сообщить модератору
     Re: Помогите, надо сделать формулу "Сумма"  [new]
    natalitvinenko
    Member

    Откуда: Донецк
    Сообщений: 738
    ByKiS
    А как-то поправить nz - это как? :)

    NZ гляньте в хелпе, я просто не вспомню навскижку его формат. Так, как я написала , выходит нуль, а долна выйти единица.
    5 фев 07, 16:24    [3740512]     Ответить | Цитировать Сообщить модератору
     Re: Помогите, надо сделать формулу "Сумма"  [new]
    ByKiS
    Member

    Откуда:
    Сообщений: 3760
    да у меня как видите и с DLookUp загвоздка - не знаю как выбрать по двум параметрам...
    5 фев 07, 16:26    [3740542]     Ответить | Цитировать Сообщить модератору
     Re: Помогите, надо сделать формулу "Сумма"  [new]
    Karfaqen
    Member

    Откуда:
    Сообщений: 7010
    ByKiS
    Как с DLookUp выбирать по двум параметрам?
    Надо соединить два условия одним из логических операторов, например: "поле1='текст' AND поле2=1", и пишите целиком это логическое выражение в параметр условия Dlookup.
    5 фев 07, 16:30    [3740581]     Ответить | Цитировать Сообщить модератору
     Re: Помогите, надо сделать формулу "Сумма"  [new]
    natalitvinenko
    Member

    Откуда: Донецк
    Сообщений: 738
    ByKiS

    Как с DLookUp выбирать по двум параметрам?

    DLookUp("поле_таблицы_искомое","таблица", "поле_условие_один=" & условие1 & " and поле_условие_два=" & условие2)
    
    5 фев 07, 16:30    [3740584]     Ответить | Цитировать Сообщить модератору
     Re: Помогите, надо сделать формулу "Сумма"  [new]
    ByKiS
    Member

    Откуда:
    Сообщений: 3760
    А так не правильно? Вроде тоже работает...
    MyNuolaida = IIf(IsNull(DLookup("[Nuolaida]", "Zinynas_nuolaidos", _
                "[UzsakovoID]&[RusiesID] ='" & Uzsakovas & Rusis & "'")) = True, 0, DLookup("[Nuolaida]", _
                "Zinynas_nuolaidos", _
                "[UzsakovoID]&[RusiesID] ='" & Uzsakovas & Rusis & "'"))
    5 фев 07, 16:34    [3740610]     Ответить | Цитировать Сообщить модератору
     Re: Помогите, надо сделать формулу "Сумма"  [new]
    ByKiS
    Member

    Откуда:
    Сообщений: 3760
    По ходу возник вопрос - теперь в таблице проданные изделия надо было бы сделать дополнительное поле для суммы? Ведь потом, если изменится скидка клиента, все отчёты небудут отоброжать действительные данные? Или как быть с этим?
    И в какой момент туда записывать сумму? Цена ufter_update?
    5 фев 07, 16:40    [3740652]     Ответить | Цитировать Сообщить модератору
     Re: Помогите, надо сделать формулу "Сумма"  [new]
    Karfaqen
    Member

    Откуда:
    Сообщений: 7010
    ByKiS
    А так не правильно? Вроде тоже работает...
    Если сильно хочется, то и так можно, тем более если работает. Правда, имейте ввиду - оно у вас по два раза работает, что совершенно лишнее. Вместо IIf(IsNull... тут лучше использовать Nz.
    5 фев 07, 16:45    [3740691]     Ответить | Цитировать Сообщить модератору
     Re: Помогите, надо сделать формулу "Сумма"  [new]
    ByKiS
    Member

    Откуда:
    Сообщений: 3760
    Так написал (но не потому что сильно хочется, а потому что по другому не получилось)
    MyNuolaida = Nz(DLookup("[Nuolaida]", "Zinynas_nuolaidos", "[UzsakovoID]&[RusiesID] ='" & Uzsakovas & Rusis & "'"), 0)
    Нормально? Глюков не будет?
    5 фев 07, 16:59    [3740813]     Ответить | Цитировать Сообщить модератору
     Re: Помогите, надо сделать формулу "Сумма"  [new]
    natalitvinenko
    Member

    Откуда: Донецк
    Сообщений: 738
    Нужно будет умножать коэффициент- нужно будет получать не 0, а 1

    MyNuolaida = Nz(DLookup("[Nuolaida]", "Zinynas_nuolaidos", "[UzsakovoID]&[RusiesID] ='" & Uzsakovas & Rusis & "'"), 1)
    5 фев 07, 17:10    [3740886]     Ответить | Цитировать Сообщить модератору
     Re: Помогите, надо сделать формулу "Сумма"  [new]
    ByKiS
    Member

    Откуда:
    Сообщений: 3760
    Где ж Вы раньше то были? ;)
    Я на ((100 - MyNuolaida) / 100) умножаю ...
    5 фев 07, 17:18    [3740946]     Ответить | Цитировать Сообщить модератору
     Re: Помогите, надо сделать формулу "Сумма"  [new]
    natalitvinenko
    Member

    Откуда: Донецк
    Сообщений: 738
    Виновато ковыряет ногой пол
    Я из машзала на 20 минут выходила...
    5 фев 07, 17:20    [3740960]     Ответить | Цитировать Сообщить модератору
     Re: Помогите, надо сделать формулу "Сумма"  [new]
    BoNiM
    Member

    Откуда:
    Сообщений: 674
    ByKiS
    Так написал (но не потому что сильно хочется, а потому что по другому не получилось)
    MyNuolaida = Nz(DLookup("[Nuolaida]", "Zinynas_nuolaidos", "[UzsakovoID]&[RusiesID] ='" & Uzsakovas & Rusis & "'"), 0)
    Нормально? Глюков не будет?

    Возможно глюки и будут вследствие возможной неоднозначности определения записи таблицы Zinynas_nuolaidos по [UzsakovoID]&[RusiesID]. Пример
    [UzsakovoID][RusiesID][UzsakovoID]&[RusiesID]
    315315
    315315

    Т.е., все таки, нужно так (исхожу из предположения, что поля [UzsakovoID] и [RusiesID] - числовые)
    MyNuolaida = Nz(DLookup("[Nuolaida]", "Zinynas_nuolaidos", "[UzsakovoID]=" & Uzsakovas & " And [RusiesID]=" & Rusis), 0)
    5 фев 07, 17:56    [3741240]     Ответить | Цитировать Сообщить модератору
     Re: Помогите, надо сделать формулу "Сумма"  [new]
    ByKiS
    Member

    Откуда:
    Сообщений: 3760
    Спасибо!
    5 фев 07, 18:01    [3741273]     Ответить | Цитировать Сообщить модератору
     Re: Помогите, надо сделать формулу "Сумма"  [new]
    ByKiS
    Member

    Откуда:
    Сообщений: 3760
    Опять проблема. Теперь пока не введешь заказчика и категорию выкидывает сообщение об такой ошибке. Это на кокое место он ругается и как это можно было бы исправить?

    К сообщению приложен файл. Размер - 0Kb
    6 фев 07, 10:21    [3743103]     Ответить | Цитировать Сообщить модератору
     Re: Помогите, надо сделать формулу "Сумма"  [new]
    Vsevolod V
    Member

    Откуда: Россия. Санкт-Петербург
    Сообщений: 3194
    используйте функцию NZ или IIF, или SWITCH для подстановки значения NULL или '' в случае, когда заказчик(категория) не введен
    6 фев 07, 10:24    [3743130]     Ответить | Цитировать Сообщить модератору
    Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
    Все форумы / Microsoft Access Ответить