|
помогите решить задачу!! !!!
|
|
|
|
Schulze |
Воскресенье, 21 Декабря 2003, 6:04
|
Участник
Профиль
Группа: Участник
Сообщений: 33
Регистрация: 12.07.2003
Пользователь №: 5549
Конфигурация
Корпус: -- Процессор: -- Материнская плата: -- Оперативная память: -- Видеокарта: -- Жесткий диск (винчестер): -- Дисковод: -- CD/DVD: -- Модем: -- Сетевой адаптер: -- Звуковая плата: -- Монитор: -- Операционная система: -- Прочее: --
|
Задача называется НАЧИСЛЕНИЕ ЗАРПЛАТЫ Создать книгу с листами "ставки в зависимости от разряда" , "Январь", " Февраль", "Март", " Запрос". На листе по месяцам вводится информация: фамилия работника разряд план(шт) выполнение плана( шт) пометка( для тех кто не выполнил план, уточняется: если виновато предприятие, ставится пометка "П", если работник - "Р" на листе ставки 1 разряд - 4000 крон 2 разряд - 4500 крон 3 разряд - 4750 крон 4 разряд - 6000 крон Задание: начислить зарплату работникам по схеме: невыполнивший план по вине предприятия получает ставку, по вине работника - получает только за сделанное и его штрафуют 10% от оклада, перевыполнивший план получает за сделанное + премию в размере 10% от оклада, выполнивший план получает оклад. Найти: лучшего работника( кто больше всех сделал) самого высокооплачиваемого На листе запрос создать списки: фамилии, разряды ( используется панель CONTROL TOOLBOX) Использование списков: по заданной фамилии выводится, как работал сотрудник в каждом месяце( план,выполнение, з/п) по заданному разряду выдать суммарную зарплату подходящих работников! ПОМОГИТЕ ЛЮДИ! ХРИСТА РАДИ!!!!!!
|
|
|
|
|
Квазимодо |
Среда, 04 Февраля 2004, 13:09
|
Участник
Профиль
Группа: Участник
Сообщений: 162
Регистрация: 25.11.2003
Пользователь №: 6223
Конфигурация
Корпус: -- Материнская плата: -- Оперативная память: -- Видеокарта: -- Жесткий диск (винчестер): -- Дисковод: Нет дисковода CD/DVD: -- Модем: -- Сетевой адаптер: -- Звуковая плата: -- Монитор: -- Операционная система: -- Прочее: --
|
Задачу можно решить так (может быть, у Вас уже все сделано, но на всякий случай...).
Допустим, в листах с данными по месяцам в столбцах с A по E находятся фамилия, разряд, план, сколько выполнено и пометка, а в столбце F - зарплата. Пишем функцию:
Function Oklad(Num As Integer) As Double Dim i As Integer i = 1 While Worksheets("ставки в зависимости от разряда").Rows(i).Cells(1).Value <> Trim(Str(Num)) + " разряд" i = i + 1 Wend Oklad = Worksheets("ставки в зависимости от разряда").Rows(i).Cells(2).Value End Function
, а в ячейку F2 записываем формулу:
=ЕСЛИ(D2<C2;ЕСЛИ(E2="Р";Oklad(B2)*(D2/C2-10/100);Oklad(B2));ЕСЛИ(D2>C2;Oklad(B2)*(D2/C2+10/100);Oklad(B2)))
(ее вставляем во все ячейки по списку)
Чтобы найти и показать на листе с данными лучшего и самого высокооплачиваемого работника, нужны еще функции:
Function Max1(R1 As Range) 'кто больше всех сделал Dim i, j As Integer Dim m As Double m = 0 i = 2 While Rows(i).Cells(1).Value <> "" If Rows(i).Cells(4).Value > m Then m = Rows(i).Cells(4).Value j = i End If i = i + 1 Wend Max1 = Rows(j).Cells(1).Value 'фамилия работника End Function
Function Max2(R1 As Range) 'у кого самая большая зарплата Dim i, j As Integer Dim m As Double m = 0 i = 2 While Rows(i).Cells(1).Value <> "" If Rows(i).Cells(6).Value > m Then m = Rows(i).Cells(6).Value j = i End If i = i + 1 Wend Max2 = Rows(j).Cells(1).Value 'фамилия работника End Function
(можно, конечно, и в одну объединить). Параметр типа Range нужен затем, чтобы значение в ячейке пересчитывалось при изменении данных - просто в ячейку, куда выводится результат, записывается формула: =Max1(Январь!D:D) (поиск лучшего) или =Max2(Январь!F:F) (поиск самого высокооплачиваемого).
И, наконец, работа со списками. 1. Вывод списка работников и их разрядов
Sub Zapros1() Dim i, j, k, kmax, m As Integer Dim N, Fam As String kmax = 1 m = 0 For i = 1 To Worksheets.Count Worksheets(i).Select N = Worksheets(i).Name If (InStr(UCase(N), "СТАВКИ") = 0) And (UCase(N) <> "ЗАПРОС") Then m = m + 1 Worksheets("запрос").Rows(1).Cells(m + 1).Value = N j = 2 Fam = Worksheets(i).Rows(j).Cells(1).Value While Fam <> "" k = 2 While (Worksheets("запрос").Rows(k).Cells(1).Value <> Fam) And (k <= kmax) k = k + 1 Wend If k > kmax Then kmax = kmax + 1 Worksheets("запрос").Rows(kmax).Cells(1).Value = Fam End If Worksheets("запрос").Rows(k).Cells(m + 1).Value = Worksheets(i).Rows(j).Cells(2).Value j = j + 1 Fam = Worksheets(i).Rows(j).Cells(1).Value Wend End If Next End Sub
(выводит данные и по месяцам - может быть, разряд у работника меняется).
2. Вывод данных по работнику (разряд план и т.д.) по месяцам
Sub Zapros2() Dim i, j, k, kmax, m As Integer Dim N, Fam, Fam1 As String kmax = 1 m = 0 Fam = ActiveCell.Value Worksheets("запрос").Rows(1).Cells(1).Value = Fam With Worksheets("запрос").Rows(2) .Cells(1).Value = "Месяц" .Cells(2).Value = "Разряд" .Cells(3).Value = "План" .Cells(4).Value = "Выполнено" .Cells(5).Value = "Пометка" .Cells(6).Value = "З/П" End With For i = 1 To Worksheets.Count Worksheets(i).Select N = Worksheets(i).Name If (InStr(UCase(N), "СТАВКИ") = 0) And (UCase(N) <> "ЗАПРОС") Then m = m + 1 j = 2 Fam1 = Worksheets(i).Rows(j).Cells(1).Value While (Fam1 <> Fam) And (Fam1 <> "") j = j + 1 Fam1 = Worksheets(i).Rows(j).Cells(1).Value Wend With Worksheets("запрос").Rows(m + 2) .Cells(1).Value = N For k = 2 To 6 .Cells(k).Value = IIf(Fam1 = Fam, Worksheets(i).Rows(j).Cells(k).Value, "") Next End With End If Next End Sub
Здесь перед запуском необходимо встать на лист с данными и выбрать ячейку с фамилией; можно немного подправить и сделать форму со списком и выбирать работника из него (а не из ActiveСell).
3. Суммы зарплат по разрядам
Sub Zapros3() Dim i, j, k, kodr, m As Integer Dim N, Fam As String m = 0 Worksheets("запрос").Rows(1).Cells(1).Value = Fam For k = 1 To 4 Worksheets("запрос").Rows(k + 1).Cells(1).Value = Worksheets("ставки в зависимости от разряда").Rows(k).Cells(1).Value Next For i = 1 To Worksheets.Count Worksheets(i).Select N = Worksheets(i).Name If (InStr(UCase(N), "СТАВКИ") = 0) And (UCase(N) <> "ЗАПРОС") Then m = m + 1 Worksheets("запрос").Rows(1).Cells(m + 1).Value = N For k = 1 To 4 Worksheets("запрос").Rows(k + 1).Cells(m + 1).Value = 0 Next j = 2 Fam1 = Worksheets(i).Rows(j).Cells(1).Value While Fam1 <> "" kodr = Worksheets(i).Rows(j).Cells(2).Value Worksheets("запрос").Rows(kodr + 1).Cells(m + 1).Value = Worksheets("запрос").Rows(kodr + 1).Cells(m + 1).Value + Worksheets(i).Rows(j).Cells(6).Value j = j + 1 Fam1 = Worksheets(i).Rows(j).Cells(1).Value Wend End If Next 'итоги Worksheets("запрос").Rows(1).Cells(m + 2).Value = "Итого" For k = 1 To 4 Worksheets("запрос").Rows(k + 1).Cells(m + 2).Formula = "=SUM(B" + Trim(Str(k + 1)) + ":" + Chr(Asc("A") + m) + Trim(Str(k + 1)) + ")" Next End Sub
--------------------
Я долго учился на чужих ошибках, и теперь мои собственные ошибки не хуже, чем у других.
|
|
|
|
|
Levon |
Среда, 04 Февраля 2004, 13:18
|
Участник
Профиль
Группа: Участник
Сообщений: 780
Регистрация: 16.09.2003
Из: Ереван, Армения
Пользователь №: 5872
Конфигурация
Корпус: HP Материнская плата: -- Оперативная память: 512 Мб Видеокарта: Intel(R) 82865G Graphics Controller Жесткий диск (винчестер): WDC WD400BB-60DGA0 37.27 GB (40 015 503 360 bytes) Дисковод: 3.5" CD/DVD: CD Модем: -- Сетевой адаптер: 3Com 3C905TX-based Ethernet Adapter (Generic), Broadcom NetXtreme Gigabit Ethernet for hp Звуковая плата: SoundMAX Integrated Digital Audio Монитор: LCD HP 1730, 19" Операционная система: Windows XP Pro SP1, Winsows 2000 AS SP4, FreeBSD 5.2.1 Прочее: --
|
Да кинь ты это все ...... в Access все быстрее и легче
--------------------
- Никогда не стоит недооценивать предсказуемость глупости. "Большой Куш/Sntach"
|
|
|
|
|
Leppy |
Среда, 04 Февраля 2004, 13:48
|
Профессионал
Профиль
Группа: WinCity Team
Сообщений: 1069
Регистрация: 29.01.2003
Из: Санкт-Петербург
Пользователь №: 4786
Конфигурация
Корпус: ??? + БП InWin 300W Процессор: Sempron (socket A) Материнская плата: EPoX 8RDA3+ rev.2.x Оперативная память: 2x256 Mb DDR 400 3200 Kingston Видеокарта: MSI MS-StarForce GeForce FX 5200 128Mb Жесткий диск (винчестер): 80Gb Seagate Barracuda 4, 7200RPM, Ultra-ATA Дисковод: 3.5" CD/DVD: Samsung CD-ROM SC-152L 52x, TEAC-DW-V50D Модем: выбросил Сетевой адаптер: nVidia nForce2 Ethernet Controller Звуковая плата: OnBoard Монитор: Samsung SyncMaster 172x '17 Операционная система: SuSE Linux Professional 9.1, Windows 2000 Professional SP4 Прочее: HP DeskJet 970cxi
HP ScanJet 4400c
|
Schulze, открывай Access и делай ОДНУ таблицу со всеми нужными тебе полями. Данные для всех записей сможешь импортировать из того же Excel. Потом двумя щелчками крысы сделаешь пару запросов со всеми необходимыми условиями и подстановками, пару отчётов и даже пару формочек, если начальству так уж надо. Все эти пляски займут у тебя в 100 раз меньше времени, чем возня с Excel.
--------------------
- Папа, я поигрался с твоим компутером... Что значит format c:? - Это значит, что ты сейчас умрёшь, сынок!!!
|
|
|
|
|
|
1 чел. читают эту тему (1 Гостей и 0 Скрытых Пользователей)
|
0 Пользователей:
|
|
© Copyright by WinCity.Ru 2001 - 2008 | Обратная связьУслуги веб-хостинга предоставлены компанией MTW.RU
|
|