Содержание
Содержание................................................................................................ 2
1. Создание структуры таблиц и заполнение их данными................... 3
1.1. Таблица «Подразделения»............................................................. 3
1.2. Таблица «Виды затрат»................................................................. 3
1.3. Таблица «Журнал операций»........................................................ 3
1.4. Таблица «План 1кв2003»............................................................... 4
2. Схема связей между таблицами............................................................ 4
3. Содержимое таблиц............................................................................... 4
4. Создание запросов................................................................................ 7
4.1. Список операций по учету амортизации основных средств......... 7
4.2. Суммы затрат в разрезе балансовых счетов за февраль 2003 г.. 8
4.3. Расчет плановой и фактической сумм затрат на оплату труда
сотрудникам швейного цеха........................................................ 10
4.2. Динамика затрат подразделения Бухгалтерия по месяцам........ 13
Используемая литература....................................................................... 16
1. Создание структуры таблиц и заполнение их данными
1.1. Таблица «Подразделения»
В таблице Подразделения хранятся данные об имеющихся подразделения предприятия.
Таблица Подразделения состоит из 2-х полей следующих типом:
|
Имя поля |
Тип данных |
|
КодПодразделения |
Счетчик |
|
Подразделения |
Текстовый |
В таблице Подразделения поле КодПодразделение является ключевым.
1.2. Таблица «Виды затрат»
В таблице Виды затрат перечислены виды затрат предприятия.
Таблица Виды затрат включает 2 поля следующих типом:
|
Имя поля |
Тип данных |
|
КодВидаЗатрат |
Счетчик |
|
НаименованиеВидаЗатрат |
Текстовый |
Поле КодВидаЗатрат является ключевым.
1.3. Таблица «Журнал операций»
Таблица Журнал операций хранит сведения о проведенных хозяйственных операциях предприятия.
Таблица Журнал операций имеет 7 полей
|
Имя поля |
Тип данных |
|
Код |
Счетчик |
|
Дата |
Дата / время |
|
Дебет |
Текстовый |
|
Кредит |
Текстовый |
|
Сумма |
Денежный |
|
КодПодразделения |
Числовой |
|
КодВидаЗатрат |
Числовой |
Поле Код - ключевое.
1.4. Таблица «План 1кв2003»
Таблица План 1кв2003 содержит сведения о запланированных затратах на 1 квартал 2003 г.
Таблица План 1кв2003 включает 3 поля
|
Имя поля |
Тип данных |
|
КодПодразделения |
Числовой |
|
КодВидаЗатрат |
Числовой |
|
ПлановыеЗатраты |
Денежный |
|
Кредит |
Текстовый |
В этой таблице ключевое поле не задано.
2. Схема связей между таблицами
В базе данных установлены следующие связи между таблицами типа «один-ко-многим»:

При создании каждой связи устанавливались параметры: Обеспечение целостности данных, Каскадное обновление связанных полей и Каскадное удаления связанных записей.
3. Содержимое таблиц
Таблицы в базе данных содержат следующие записи:
|
Подразделения |
|
|
КодПодразделения |
Подразделение |
|
1 |
Администрация |
|
2 |
Бухгалтерия |
|
3 |
Швейный цех |
|
ВидыЗатрат |
|
|
КодВидаЗатрат |
НаименованиеВидаЗатрат |
|
1 |
Амортизация |
|
2 |
Арендная плата |
|
3 |
ЕСН |
|
4 |
Затраты на оплату труда |
|
5 |
Материальные затраты |
|
6 |
Налоги и сборы |
|
7 |
Общепроизводственные затраты |
|
8 |
Прочее |
|
9 |
Ремонт ОС |
|
10 |
Страхование от НСиПЗ |
|
Журнал операций |
||||||
|
Код |
Дата |
Дебет |
Кредит |
Сумма |
КодПодразделения |
КодВидаЗатрат |
|
1 |
06.01.2002 |
20 |
10.1 |
8 500,00р. |
3 |
5 |
|
2 |
08.01.2002 |
20 |
10.1 |
600,00р. |
3 |
5 |
|
3 |
16.01.2002 |
20 |
10.1 |
6 250,00р. |
3 |
5 |
|
4 |
25.01.2002 |
26 |
60.1 |
8 234,00р. |
1 |
8 |
|
5 |
25.01.2002 |
25 |
60.1 |
4 585,00р. |
3 |
2 |
|
6 |
30.01.2003 |
26 |
70 |
8 000,00р. |
1 |
4 |
|
7 |
30.01.2003 |
20 |
70 |
6 500,00р. |
3 |
4 |
|
8 |
30.01.2003 |
26 |
70 |
5 000,00р. |
2 |
4 |
|
9 |
31.01.2003 |
26 |
69 |
2 448,00р. |
1 |
3 |
|
10 |
31.01.2003 |
20 |
69 |
2 314,00р. |
3 |
3 |
|
11 |
31.01.2003 |
26 |
69 |
1 780,00р. |
2 |
3 |
|
12 |
31.01.2003 |
26 |
69.11 |
24,00р. |
1 |
10 |
|
13 |
31.01.2003 |
20 |
69.11 |
19,50р. |
3 |
10 |
|
14 |
31.01.2003 |
26 |
69.11 |
15,00р. |
2 |
10 |
|
15 |
31.01.2003 |
20 |
25 |
4 585,00р. |
3 |
7 |
|
16 |
08.02.2003 |
26 |
71.1 |
1 100,00р. |
2 |
8 |
|
17 |
08.02.2003 |
20 |
71.1 |
333,33р. |
3 |
5 |
|
18 |
09.02.2003 |
20 |
10.1 |
5 000,00р. |
3 |
5 |
|
19 |
12.02.2003 |
26 |
60.1 |
600,00р. |
1 |
9 |
|
20 |
25.02.2003 |
26 |
60.1 |
715,00р. |
1 |
8 |
|
21 |
25.02.2003 |
25 |
60.1 |
4 565,00р. |
3 |
2 |
|
22 |
25.02.2003 |
26 |
60.1 |
7 568,00р. |
1 |
8 |
|
23 |
28.02.2003 |
26 |
70 |
8 000,00р. |
1 |
4 |
|
24 |
28.02.2003 |
20 |
70 |
8 000,00р. |
3 |
4 |
|
25 |
28.02.2003 |
26 |
70 |
4 500,00р. |
2 |
4 |
|
26 |
28.02.2003 |
28 |
02.1 |
152,10р. |
2 |
1 |
|
27 |
28.03.2003 |
20 |
02.1 |
190,00р. |
3 |
1 |
|
28 |
28.02.2003 |
26 |
69 |
2 848,00р. |
1 |
3 |
|
29 |
28.02.2003 |
20 |
69 |
2 848,00р. |
3 |
3 |
|
30 |
28.02.2003 |
26 |
69 |
1 602,00р. |
2 |
3 |
|
31 |
28.02.2003 |
26 |
69.11 |
24,00р. |
1 |
10 |
|
32 |
28.02.2003 |
20 |
69.11 |
24,00р. |
3 |
10 |
|
33 |
28.02.2003 |
26 |
69.11 |
13,50р. |
2 |
10 |
|
34 |
28.02.2003 |
26 |
97 |
222,53р. |
1 |
8 |
|
35 |
28.02.2003 |
20 |
25 |
4 585,00р. |
3 |
7 |
|
36 |
26.03.2003 |
26 |
02.1 |
23,70р. |
2 |
1 |
|
37 |
26.03.2003 |
26 |
60.1 |
668,00р. |
1 |
8 |
|
38 |
26.03.2003 |
25 |
60.1 |
4 565,00р. |
3 |
2 |
|
39 |
26.03.2003 |
26 |
60.1 |
7 568,00р. |
1 |
8 |
|
40 |
31.03.2003 |
26 |
02.1 |
128,33р. |
2 |
1 |
|
41 |
31.03.2003 |
20 |
02.1 |
190,00р. |
3 |
1 |
|
42 |
31.03.2003 |
26 |
05 |
1 923,08р. |
1 |
1 |
|
43 |
31.03.2003 |
26 |
70 |
8 000,00р. |
1 |
4 |
|
44 |
31.03.2003 |
20 |
70 |
8 000,00р. |
3 |
4 |
|
45 |
31.03.2003 |
26 |
70 |
5 000,00р. |
2 |
4 |
|
46 |
31.03.2003 |
26 |
69 |
2 848,00р. |
1 |
3 |
|
47 |
31.03.2003 |
20 |
69 |
2 848,00р. |
3 |
3 |
|
48 |
31.03.2003 |
26 |
69 |
1 780,00р. |
2 |
3 |
|
49 |
31.03.2003 |
26 |
69.11 |
39,00р. |
1 |
10 |
|
50 |
31.03.2003 |
20 |
69.11 |
24,00р. |
3 |
10 |
|
51 |
31.03.2003 |
26 |
97 |
453,15р. |
1 |
8 |
|
52 |
31.03.2003 |
20 |
25 |
4 565,00р. |
3 |
7 |
|
План 1кв2003 |
||
|
КодПодразделения |
КодВидаЗатрат |
ПлановыеЗатраты |
|
1 |
1 |
1 923,00р. |
|
2 |
1 |
304,00р. |
|
3 |
1 |
380,00р. |
|
3 |
2 |
14 000,00р. |
|
1 |
3 |
8 144,00р. |
|
2 |
3 |
5 162,00р. |
|
3 |
3 |
8 010,00р. |
|
1 |
4 |
24 000,00р. |
|
2 |
4 |
14 500,00р. |
|
3 |
4 |
22 500,00р. |
|
3 |
5 |
25 000,00р. |
|
3 |
7 |
13 695,00р. |
|
1 |
8 |
25 000,00р. |
|
2 |
8 |
2 000,00р. |
|
1 |
9 |
1 000,00р. |
|
1 |
10 |
87,00р. |
|
2 |
10 |
28,50р. |
|
3 |
10 |
67,50р. |
4. Создание запросов
4.1. Список операций по учету амортизации основных средств
В бланк Конструктора запроса переместим поля Дебет, Кредит и Сумма из таблицы Журнал операций, а также поле НаименованиеВидаЗатрат из таблицы ВидыЗатрат.
Зададим условие отбора «Амортизация» для поля НаименованиеВидаЗатрат.
После этого в режиме Конструктора запрос примет вид:

Или при просмотре в режиме SQL:
SELECT [Журнал операций].Код, [Журнал операций].Дата, [Журнал операций].Дебет, [Журнал операций].Кредит, [Журнал операций].Сумма, Подразделения.Подразделение, ВидыЗатрат.НаименованиеВидаЗатрат
FROM ВидыЗатрат INNER JOIN (Подразделения INNER JOIN [Журнал операций] ON Подразделения.КодПодразделения = [Журнал операций].КодПодразделения) ON ВидыЗатрат.КодВидаЗатрат = [Журнал операций].КодВидаЗатрат
WHERE (((ВидыЗатрат.НаименованиеВидаЗатрат)="Амортизация"));
Запрос выдаст следующие данные об операциях по амортизации:
|
Операции по учету амортизации ОС |
||||||
|
Код |
Дата |
Дебет |
Кредит |
Сумма |
Подразделение |
НаименованиеВидаЗатрат |
|
26 |
28.02.2003 |
28 |
02.1 |
152,10р. |
Бухгалтерия |
Амортизация |
|
27 |
28.03.2003 |
20 |
02.1 |
190,00р. |
Швейный цех |
Амортизация |
|
36 |
26.03.2003 |
26 |
02.1 |
23,70р. |
Бухгалтерия |
Амортизация |
|
40 |
31.03.2003 |
26 |
02.1 |
128,33р. |
Бухгалтерия |
Амортизация |
|
41 |
31.03.2003 |
20 |
02.1 |
190,00р. |
Швейный цех |
Амортизация |
|
42 |
31.03.2003 |
26 |
05 |
1 923,08р. |
Администрация |
Амортизация |
4.2. Суммы затрат в разрезе балансовых счетов за февраль 2003 г.
Первоначально создадим простой запрос, в который добавим поля Дата и Сумма из таблицы Журнал операций, поле Подразделение из таблицы Подразделения и поле НаименованиеВидаЗатрат из таблицы ВидыЗатрат.
Для поля Дата зададим условие отбора Between #01.02.2003# And #28.02.2003#, которое позволит отобрать только операции, проводимые в феврале 2003 года.
После этого в режиме Конструктора запрос примет вид:

Или на SQL:
SELECT [Журнал операций].Дата, [Журнал операций].Сумма, Подразделения.Подразделение, ВидыЗатрат.НаименованиеВидаЗатрат
FROM Подразделения INNER JOIN (ВидыЗатрат INNER JOIN [Журнал операций] ON ВидыЗатрат.КодВидаЗатрат = [Журнал операций].КодВидаЗатрат) ON Подразделения.КодПодразделения = [Журнал операций].КодПодразделения
WHERE ((([Журнал операций].Дата) Between #2/1/2003# And #2/28/2003#));
По запросу получим:
|
Затраты за февраль 2003 г |
|||
|
Дата |
Сумма |
Подразделение |
НаименованиеВидаЗатрат |
|
08.02.2003 |
1 100,00р. |
Бухгалтерия |
Прочее |
|
08.02.2003 |
333,33р. |
Швейный цех |
Материальные затраты |
|
09.02.2003 |
5 000,00р. |
Швейный цех |
Материальные затраты |
|
12.02.2003 |
600,00р. |
Администрация |
Ремонт ОС |
|
25.02.2003 |
715,00р. |
Администрация |
Прочее |
|
25.02.2003 |
4 565,00р. |
Швейный цех |
Арендная плата |
|
25.02.2003 |
7 568,00р. |
Администрация |
Прочее |
|
28.02.2003 |
8 000,00р. |
Администрация |
Затраты на оплату труда |
|
28.02.2003 |
8 000,00р. |
Швейный цех |
Затраты на оплату труда |
|
28.02.2003 |
4 500,00р. |
Бухгалтерия |
Затраты на оплату труда |
|
28.02.2003 |
152,10р. |
Бухгалтерия |
Амортизация |
|
28.02.2003 |
2 848,00р. |
Администрация |
ЕСН |
|
28.02.2003 |
2 848,00р. |
Швейный цех |
ЕСН |
|
28.02.2003 |
1 602,00р. |
Бухгалтерия |
ЕСН |
|
28.02.2003 |
24,00р. |
Администрация |
Страхование от НСиПЗ |
|
28.02.2003 |
24,00р. |
Швейный цех |
Страхование от НСиПЗ |
|
28.02.2003 |
13,50р. |
Бухгалтерия |
Страхование от НСиПЗ |
|
28.02.2003 |
222,53р. |
Администрация |
Прочее |
|
28.02.2003 |
4 585,00р. |
Швейный цех |
Общепроизводственные затраты |
Теперь на основании только что созданного простого запроса создадим перекрестный запрос.
Для этого перейдем на вкладку Запросы главного окна базы данных. Нажмем кнопку Создать и выберем пункт Перекрестный.
На первом шаге мастера в качестве источника данных для перекрестного запроса выберем созданный простой запрос.
На втором шаге зададим для Заголовков строк поле НаименованиеВидаЗатрат, а для Заголовков столбцов – Подразделение.
Зададим вычисление функции Сумма для поля Сумма.
В результате созданный перекрестный запрос в режиме Конструктора примет вид:

Или на SQL:
TRANSFORM Sum([Затраты за февраль 2003 г].Сумма) AS [Sum-Сумма]
SELECT [Затраты за февраль 2003 г].НаименованиеВидаЗатрат, Sum([Затраты за февраль 2003 г].Сумма) AS [Итоговое значение Сумма]
FROM [Затраты за февраль 2003 г]
GROUP BY [Затраты за февраль 2003 г].НаименованиеВидаЗатрат
PIVOT [Затраты за февраль 2003 г].Подразделение;
По запросу получим суммы затрат в разрезе балансовых счетов:
|
Затраты за февраль 2003 г_перекрестный |
||||
|
НаименованиеВидаЗатрат |
Итоговое значение Сумма |
Администрация |
Бухгалтерия |
Швейный цех |
|
Амортизация |
152,10р. |
152,10р. |
||
|
Арендная плата |
4 565,00р. |
4 565,00р. |
||
|
ЕСН |
7 298,00р. |
2 848,00р. |
1 602,00р. |
2 848,00р. |
|
Затраты на оплату труда |
20 500,00р. |
8 000,00р. |
4 500,00р. |
8 000,00р. |
|
Материальные затраты |
5 333,33р. |
5 333,33р. |
||
|
Общепроизводственные затраты |
4 585,00р. |
4 585,00р. |
||
|
Прочее |
9 605,53р. |
8 505,53р. |
1 100,00р. |
|
|
Ремонт ОС |
600,00р. |
600,00р. |
||
|
Страхование от НСиПЗ |
61,50р. |
24,00р. |
13,50р. |
24,00р. |
4.3. Расчет плановой и фактической сумм затрат на оплату труда сотрудникам швейного цеха
В Конструктор запроса перенесем поле НаименованиеВидаЗатрат из таблицы ВидыЗатрат, поле Подразделение из таблицы Подразделения, поле ПлановыеЗатраты из таблицы План 1кв2003, поля Дата и Сумма из таблицы Журнал операций.
Зададим условия отбора «Затраты на оплату труда» для поля НаименованиеВидаЗатрат и «Швейный цех» для поля Подразделение.
В результате в режиме Конструктора получим:

Или в режиме SQL:
SELECT ВидыЗатрат.НаименованиеВидаЗатрат, Подразделения.Подразделение, [План 1кв2003].ПлановыеЗатраты, [Журнал операций].Дата, [Журнал операций].Сумма
FROM Подразделения INNER JOIN ((ВидыЗатрат INNER JOIN [План 1кв2003] ON ВидыЗатрат.КодВидаЗатрат = [План 1кв2003].КодВидаЗатрат) INNER JOIN [Журнал операций] ON ВидыЗатрат.КодВидаЗатрат = [Журнал операций].КодВидаЗатрат) ON (Подразделения.КодПодразделения = [План 1кв2003].КодПодразделения) AND (Подразделения.КодПодразделения = [Журнал операций].КодПодразделения)
WHERE (((ВидыЗатрат.НаименованиеВидаЗатрат)="Затраты на оплату труда") AND ((Подразделения.Подразделение)="Швейный цех"));
Запрос выдаст:
|
Плановые и фактические затраты |
||||
|
НаименованиеВидаЗатрат |
Подразделение |
ПлановыеЗатраты |
Дата |
Сумма |
|
Затраты на оплату труда |
Швейный цех |
22 500,00р. |
30.01.2003 |
6 500,00р. |
|
Затраты на оплату труда |
Швейный цех |
22 500,00р. |
28.02.2003 |
8 000,00р. |
|
Затраты на оплату труда |
Швейный цех |
22 500,00р. |
31.03.2003 |
8 000,00р. |
Теперь на основании этого простого запроса выполним создание другого простого запроса при помощи Мастера.
Для этого перейдем на вкладку Запросы окна базы данных, нажмем кнопку Создать и выберем пункт Простой запрос.
Для источника данных создаваемого запроса выберем все поля из созданного выше запроса.
Выберем Создание итогового запроса и нажмем кнопку Итоги.
В открывшемся окне зададим функцию Sum для полей ПлановыеЗатраты и Сумма:

Зададим Интервал группировки дат: по годам:

В результате полученный запрос на SQL будет записан так:
SELECT DISTINCTROW [Плановые и фактические затраты].НаименованиеВидаЗатрат, [Плановые и фактические затраты].Подразделение, Format$([Плановые и фактические затраты].[Дата],'yyyy') AS [Дата по годам], Sum([Плановые и фактические затраты].ПлановыеЗатраты) AS [Sum - ПлановыеЗатраты], Sum([Плановые и фактические затраты].Сумма) AS [Sum - Сумма]
FROM [Плановые и фактические затраты]
GROUP BY [Плановые и фактические затраты].НаименованиеВидаЗатрат, [Плановые и фактические затраты].Подразделение, Format$([Плановые и фактические затраты].[Дата],'yyyy'), Year([Плановые и фактические затраты].[Дата]);
Запрос выдаст результат:
|
Плановые и фактические затраты Запрос |
||||
|
НаименованиеВидаЗатрат |
Подразделение |
Дата по годам |
Sum - ПлановыеЗатраты |
Sum - Сумма |
|
Затраты на оплату труда |
Швейный цех |
2003 |
67 500,00р. |
22 500,00р. |
4.2. Динамика затрат подразделения Бухгалтерия по месяцам
Первоначально создадим простой запрос при помощи Конструктора.
Возьмем поле Подразделение из таблицы Подразделения, поле НаименованиеВидаЗатрат из таблицы ВидыЗатрат, поля Дата и Сумма из таблицы Журнал операций.
Для поля Подразделение зададим условие отбора «Бухгалтерия».
В Конструкторе запрос примет вид:

Или на SQL:
SELECT Подразделения.Подразделение, ВидыЗатрат.НаименованиеВидаЗатрат, [Журнал операций].Дата, [Журнал операций].Сумма
FROM Подразделения INNER JOIN (ВидыЗатрат INNER JOIN [Журнал операций] ON ВидыЗатрат.КодВидаЗатрат = [Журнал операций].КодВидаЗатрат) ON Подразделения.КодПодразделения = [Журнал операций].КодПодразделения
WHERE (((Подразделения.Подразделение)="Бухгалтерия"));
Запрос выдаст результат:
|
Затраты бухгалтерии |
|||
|
Подразделение |
НаименованиеВидаЗатрат |
Дата |
Сумма |
|
Бухгалтерия |
Затраты на оплату труда |
30.01.2003 |
5 000,00р. |
|
Бухгалтерия |
ЕСН |
31.01.2003 |
1 780,00р. |
|
Бухгалтерия |
Страхование от НСиПЗ |
31.01.2003 |
15,00р. |
|
Бухгалтерия |
Прочее |
08.02.2003 |
1 100,00р. |
|
Бухгалтерия |
Затраты на оплату труда |
28.02.2003 |
4 500,00р. |
|
Бухгалтерия |
Амортизация |
28.02.2003 |
152,10р. |
|
Бухгалтерия |
ЕСН |
28.02.2003 |
1 602,00р. |
|
Бухгалтерия |
Страхование от НСиПЗ |
28.02.2003 |
13,50р. |
|
Бухгалтерия |
Амортизация |
26.03.2003 |
23,70р. |
|
Бухгалтерия |
Амортизация |
31.03.2003 |
128,33р. |
|
Бухгалтерия |
Затраты на оплату труда |
31.03.2003 |
5 000,00р. |
|
Бухгалтерия |
ЕСН |
31.03.2003 |
1 780,00р. |
Далее на основании этого простого запроса создадим перекрестный запрос.
Для заголовков строк выберем поле НаименованиеВидаЗатрат, а для заголовков столбцов – Дата.
Интервал группировки зададим Месяц.
Для поля Сумма зададим функцию Сумма.
В Конструкторе запрос имеет вид:

Или на SQL:
TRANSFORM Sum([Затраты бухгалтерии].Сумма) AS [Sum-Сумма]
SELECT [Затраты бухгалтерии].НаименованиеВидаЗатрат, Sum([Затраты бухгалтерии].Сумма) AS [Итоговое значение Сумма]
FROM [Затраты бухгалтерии]
GROUP BY [Затраты бухгалтерии].НаименованиеВидаЗатрат
PIVOT Format([Дата],"mmm") In ("янв","фев","мар","апр","май","июн","июл","авг","сен","окт","ноя","дек");
Запрос выдаст результат о затратах бухгалтерии по месяцам:
|
Затраты бухгалтерии_перекрестный |
||||
|
НаименованиеВидаЗатрат |
Итоговое значение Сумма |
янв |
фев |
мар |
|
Амортизация |
304,13р. |
152,10р. |
152,03р. |
|
|
ЕСН |
5 162,00р. |
1 780,00р. |
1 602,00р. |
1 780,00р. |
|
Затраты на оплату труда |
14 500,00р. |
5 000,00р. |
4 500,00р. |
5 000,00р. |
|
Прочее |
1 100,00р. |
1 100,00р. |
||
|
Страхование от НСиПЗ |
28,50р. |
15,00р. |
13,50р. |
Используемая литература
1. Грэм Малкольм. Программирование для Microsoft SQL SERVER 2000 с использованием XML. Пер. с англ. – М.
2. Гофман В.Э., Хомоненко А.Д. Работа с базами данных в Delphi. – СПб,: БХВ-Петербург, 2001. – 656 с.: ил.
3. Левин А. Самоучитель работы на компьютере. Москва, издательство «Нолидж», 1999 – 624 с.
4. Козырев А.А. Самоучитель работы на персональном компьютере. Учебное пособие. Изд. 2-е, переработанное и дополненное. СПб.: Изд-во Михайлова В.А., 2000 – 304 с.
5. Вейскас Дж. Эффективная работа: Microsoft Office Access 2003. Издательский дом «Питер», 2005. – 1168 с.
6. Хэлворсон М., Янг М. Эффективная работа: Office XP. Издательский дом «Питер», 2004. – 1072