|
вычисление
|
|||
---|---|---|---|
#18+
Здравствуйте! Не знаю как решить такую задачу так как недавно совсем начал изучать фокспро. Есть таблица "Обязанности", в ней хранятся: наименование, номер отдела, номер исполнителя. Есть другая таблица "ВСЕГООБЯЗ", в котором содержатся все обязанности, которые только могут быть для данной организации. В таблице "ВСЕГООБЯЗ" есть поля: название, колво_подобяз.(т.е. количество подобязанностей), номер отдела. И есть таблица "Исполнители", тут поля: номер, ФИО,номеротдела. Мне нужно сделать такое: Рассчитать сколько обязанностей выполнил каждый исполнитель: алгоритм такой: нужно для выбранного отдела отфильтровать таблицу "обязанности", далее для исполнителей ищем: если для первого допустим нашли его обязанность, то эту обязанность умножаем на количество подобязанностей из таблицы "ВСЕГООБЯЗ", и так для всех исполнителей. Подскажите как начать реализацию этой задачи? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2013, 10:01 |
|
вычисление
|
|||
---|---|---|---|
#18+
Новый2013, Это несложно... Варианта решений два: 1. Связать необходимые таблицы (исполнители и обязанности) по SET RELATION и реализовать Ваш алгоритм просмотром всех записей (или через do while... enddo, или через scan ... endscan) 2. Написать запрос SQL, который делает то же самое... Одно только мне не понятно: по вашей схеме получается, что Подобязанности не связаны с обязанностями, а только с отделом. Это так и должно быть? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2013, 10:28 |
|
вычисление
|
|||
---|---|---|---|
#18+
Станислав С...кий, они связаны, в обеих таблицах есть поле номер_обязанности. А вы не могли бы примерный код прописать через цикл? я плохо себе представляю как это сделать ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2013, 10:51 |
|
вычисление
|
|||
---|---|---|---|
#18+
Станислав С...кий, только вот не Подобязанности таблица, а "ВСЕГООБЯЗ", оно содержит список всех обязанностей, а в таблице "Обязанности" хранится информация какою обязанность исполнитель выполнил. т.е. там хранится дата исполнения обязанности, номер исполнителя, номер обязанности из "ВСЕГООБЯЗ", цена,номеротдела и другие поля(другие поля не нужны) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2013, 10:54 |
|
вычисление
|
|||
---|---|---|---|
#18+
Новый2013, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2013, 11:18 |
|
вычисление
|
|||
---|---|---|---|
#18+
tanglir, а на англ, какое поле что означает не могли бы вы указать? если не сложно вам ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2013, 11:25 |
|
вычисление
|
|||
---|---|---|---|
#18+
tanglir, Что-то я в вашем коде умножения не вижу. Давайте я скажу на англ. какие поля есть: Таблица Obyaz поля: nam(название),n_otd(номер отдела),vr(номер исполнителя),dat_obs(дата обследования),n_met(номер обязанности) Таблица VsegoObyaz поля: Namm(название),n_otd(номер отдела),n_met(номер обязанности), k_issl(количество под.обязанностей) Таблица Ispolniteli поля: vr(номер исполнителя), fio(фио),n_otd(номер отдела). Теперь в таблице Obyaz одна запись это одна обязанность. Надо каждую обязанность умножить на поле k_issl. А когда уже все умножится, то для каждого исполнителя сколько обязанностей, это я сам попробую ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2013, 11:47 |
|
вычисление
|
|||
---|---|---|---|
#18+
Новый2013Что-то я в вашем коде умножения не вижу.Как только вы объясните, что значитНовый2013обязанность умножить на поле k_issl, а именно, как можно сущность умножить на число и что должно быть результатом сего действия, так оно там, скорее всего, и появится :) А ещё лучше - приведите пример - по кусочку каждой из таблиц, записей по 5-10, и желаемый результат. Использование тега [ csv ] приветствуется. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2013, 11:57 |
|
вычисление
|
|||
---|---|---|---|
#18+
tanglir, На счет того что строку на число умножить я сам не понимаю почему так сказал мне шеф), но он сказал каждую обязанность умножить на k_issl. Может надо через цикл? в какую-то переменную заносить? одна строка из Obyaz Это есть одна обязанность. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2013, 12:10 |
|
вычисление
|
|||
---|---|---|---|
#18+
Новый2013tanglir, На счет того что строку на число умножить я сам не понимаю почему так сказал мне шеф),Тогда у шефа и уточните. Мы ведь с ним даже не знакомы, скорее всего :) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2013, 12:18 |
|
вычисление
|
|||
---|---|---|---|
#18+
tanglir, я ему предложил заносить в новую таблицу нужные поля из Obyaz и новое поле Kol со значением 1 везде. т.к. 1 запись это одна обязанность и это поле умножать на поле k_issl, если я правильно понимаю, то что он хочет от меня, то так можно сделать мне кажется или я ошибаюсь? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2013, 12:27 |
|
вычисление
|
|||
---|---|---|---|
#18+
Новый2013какое поле что означает"number"/"performer_number" = "vr" "name" = "n_met" "division" = "n_otd"Новый2013если я правильно понимаю, то что он хочет от меня, то так можно сделатьда, если правильно понимаете, то можно :)Новый2013или я ошибаюсь?не знаю, вам виднее :) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2013, 12:36 |
|
вычисление
|
|||
---|---|---|---|
#18+
Новый2013, По моему должно быть так: Код: sql 1. 2. 3. 4. 5. 6.
автор новое поле Kol со значением 1 везде. т.к. 1 запись это одна обязанность и это поле умножать на поле k_issl, если я правильно понимаю, то что он хочет от меня, то так можно сделать Это совершенно не обязательно делать. И так получается нормально. Ибо 1*k_issl = k_issl... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2013, 12:59 |
|
вычисление
|
|||
---|---|---|---|
#18+
Станислав С...кий, Спасибо, я сейчас попробую ,а вы не могли бы прокомментировать что делается на каждой строке, хотелось бы понять принцип работы вашего кода. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2013, 13:04 |
|
вычисление
|
|||
---|---|---|---|
#18+
Станислав С...кийНовый2013, По моему должно быть так: Код: sql 1. 2. 3. 4. 5. 6.
первая строка - список полей в формате имя таблицы.имя поля; sum() - функция суммирования значений, min() - функция нахождения минимума, NVL() - функция подмены значения NULL в обозначенном поле на некоторое заданное значение вторая строка - данные берутся из таблицы исполнители третья строка - которая связана с таблицей обязанностей по условию obyaz.n_otd = ispolniteli.n_otd and obyaz.vr = ispolniteli.vr четвертая строка - с результатом связывается таблица всегообяз по условию vsegoobyaz.n_met = obyaz.n_met and vesgoobyaz.n_otd = obyaz.n_otd пятая строка - указывается, что нам нужны не все данные, а толькго для отдела с номером 5 шестая строка - полученные результаты выборки группируются по первому и второму полю выборки; группировка обозначает, что по функциям, указанным в первой строке (сумма, минимум), вычисляются итоги для всех уникальных сочетаний vr + n_met В общем, читайте книжки по SQL. Это сейчас используется почти везде. Перефразируя классика, можно сказать: "FOXPRO ты можешь и не знать, но SQL ты знать - обязан!" ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2013, 13:42 |
|
вычисление
|
|||
---|---|---|---|
#18+
Станислав С...кий, vr + n_met тут вы складываете номер исполнителя и номер обязанности. это не нужно мне. Мне нужно так, Напишу по пунктам: 1. Занести в курсор CURS1 поля Obyaz.nam,Obyaz.n_met,Obyaz.vr,Obyaz.n_otd и VsegoObyaz.k_issl (получаем,что для каждой обязанности нашли кол-во подобязанностей) 2. В курсор CURS2 занести поля: Ispolnoteli.vr и соответствующее значение из CURS1.vr 3. В Курсорк CURS3 занести Ispolnoteli.vr и сумму sum(CURS2.vr) помогите сделать этот алгоритм по пунктам, я бы хотел разобрать по частям как я тут указал по пунктам. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2013, 14:04 |
|
вычисление
|
|||
---|---|---|---|
#18+
было бы хорошо если это делать в цикле потому что прежде чем выполнять это будет происходить фильтрация по начальной и конечной дате, которую пользователь может менять. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2013, 14:20 |
|
вычисление
|
|||
---|---|---|---|
#18+
Новый2013Станислав С...кий, vr + n_met тут вы складываете номер исполнителя и номер обязанности. это не нужно мне. Мне нужно так, Напишу по пунктам: 1. Занести в курсор CURS1 поля Obyaz.nam,Obyaz.n_met,Obyaz.vr,Obyaz.n_otd и VsegoObyaz.k_issl (получаем,что для каждой обязанности нашли кол-во подобязанностей) Код: sql 1. 2. 3. 4.
Новый20132. В курсор CURS2 занести поля: Ispolnoteli.vr и соответствующее значение из CURS1.vr Код: sql 1. 2. 3. 4.
Новый20133. В Курсорк CURS3 занести Ispolnoteli.vr и сумму sum(CURS2.vr) Код: sql 1. 2. 3.
Как-то так... каков алгоритм, таково и решение... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2013, 14:27 |
|
вычисление
|
|||
---|---|---|---|
#18+
Новый2013было бы хорошо если это делать в цикле потому что прежде чем выполнять это будет происходить фильтрация по начальной и конечной дате, которую пользователь может менять. Какие еще дополнительные условия Вы забыли сказать? А то получится, что вместо игрушечной машинки Вы за те же деньги запросите "Феррари"... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2013, 14:29 |
|
вычисление
|
|||
---|---|---|---|
#18+
Станислав С...кий, я не забыл ничего, какое задание дали так и прописал тут. Сейчас буду разбираться и смотреть ваш код. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2013, 14:42 |
|
вычисление
|
|||
---|---|---|---|
#18+
Станислав С...кий, Да уж, оказалось очень легко все. Но я вначале не понял задание т.к. мне сказали есть форма, где рассчитывается нагрузка за какой-то месяц и надо делать по тому же алгоритму я открыл его и там на 7 листов код. Сегодня сказал шеф, чтобы узнать количество обязанностей нужно подобязанности умножить на каждую обязанность и сложить. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2013, 14:46 |
|
вычисление
|
|||
---|---|---|---|
#18+
Новый2013 надо делать по тому же алгоритму... я открыл его и там на 7 листов код. Может там на 6 листах проверки различные стоят... Сначала входных параметров, затем результатов.... У меня на работе тоже много подобного кода: сам расчет занимает пару строчек, зато различные проверки - на пять страниц... Но без этого - тоже никуда... Как говорится - "необходимое зло"... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2013, 14:59 |
|
вычисление
|
|||
---|---|---|---|
#18+
Станислав С...кий, замечу, что вы опять просуммировали поле VR. VR - это номер исполнителя, т.е. номер может быть равен даже 500, а k_issl - это количество подобязанностей. надо было его сложить. Но все равно спасибо, это мелочь ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2013, 15:14 |
|
вычисление
|
|||
---|---|---|---|
#18+
Да, там проверки, но проверки тех таблиц, которые мне не нужны. А у меня некоторые значения полей получаются NULL с чем это может быть связано? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2013, 15:19 |
|
вычисление
|
|||
---|---|---|---|
#18+
У меня возник такой вопрос: В полях появляются NULL. Я написал такой код, немного добавив поля и отфильтровав по дате: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
Это может быть связано с тем, что используется LEFT JOIN и можно ли вместо LEFT JOIN использовать WHERE?? а то получается что пропадают данные. т.к. записываются NULL ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2013, 15:35 |
|
|
start [/forum/topic.php?fid=41&msg=38169683&tid=1583137]: |
0ms |
get settings: |
12ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
others: | 266ms |
total: | 417ms |
0 / 0 |