powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Добавление строк в отчете
11 сообщений из 11, страница 1 из 1
Добавление строк в отчете
    #32290436
nestling
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дрое время суток!
Есть такая проблемка:
Имеются три таблицы
1-ая
Код
Сотрудник
....
2-я
Код
Должность
КоличествоПоШтату
.....
3-я
КодСотрудника
КодДолжности
.....
Ну и связи 1.Код -> 3.КодСотрудника и 2.Код -> 3.КодДолжности

Надо построить такой отчет, что бы для каждой записи "Должность" было столько строк в отчете, сколько указано в "КоличествоПо Штату".

Пробовал сделать "КоличествоПоШтату" одинаковых записей в 2-ой таблице, но это не проходит в другом месте, так что от этого способа пришлось отказаться.....

Люди добрые! ПАМАЖИТЕ кто чем может )))
...
Рейтинг: 0 / 0
Добавление строк в отчете
    #32290438
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Предлагаю решение очень не элегантное. Все-таки создать все эти размноженные записи в таблице, но не в той, а в какой-нибудь новой. Фу, самому противно, насколько некрасивое решение...
...
Рейтинг: 0 / 0
Добавление строк в отчете
    #32290439
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вечер добрый...

> это не проходит в другом месте

А подробнее, если можно?

> Надо построить такой отчет, что бы для каждой записи "Должность" было столько строк в отчете, сколько указано в "КоличествоПо Штату".

Т.е. примерно так:

1 - Электрик (3 чел. по шт. расписанию) - Иванов И.И.
2 - Электрик (3 чел. по шт. расписанию) - Петров П.П.
3 - Электрик (3 чел. по шт. расписанию) -
4 - Наладчик (2 чел. по шт. расписанию) - Сидоров С.С.
5 - Наладчик (2 чел. по шт. расписанию) -

?
...
Рейтинг: 0 / 0
Добавление строк в отчете
    #32290444
nestling
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Именно....
А не проходит:
В друго месте надо отловить не занятую должность...
В том случае если она была использована, но потом освободилась....
Да еще если не на сегодняшнее число.... в общем еще большая заморочка
На мой взгляд добавить лишние строчки - просще, но только вот не знаю как
с VBA не знаком совершенно :)
...
Рейтинг: 0 / 0
Добавление строк в отчете
    #32290449
nestling
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
P.S.: Это сильно облегченный макет базы, которая в последствии будет реализована на MySQL или PostgrSQl + С/С++ (для добавления/изменения/удаления) данных и perl или php для просмотра все остальным. По этому реализации отличные от возможностей Access не катят :)
...
Рейтинг: 0 / 0
Добавление строк в отчете
    #32290453
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> с VBA не знаком совершенно :)
И хочешь, чтобы за тебя этот кусок написали? Или решить запросами.
А собрать табличку
Должность-КолвоПоШтату-Работник
(а-ля нарисованная мною) на выбранную дату уже смог?
---
Вариант ВС, имхо, может и не самый быстрый будет, но самый универсальный (т.е. работающий при любых размерах поля КоличествоПоШтату).
...
Рейтинг: 0 / 0
Добавление строк в отчете
    #32290454
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, кстати, для полноты картины, наверное, придется упомянуть еще табличку типа

КодСотрудника
КодДолжности
ДатаЗанятияДолжности
ДатаОсвобожденияДолжности
...
Рейтинг: 0 / 0
Добавление строк в отчете
    #32290455
nestling
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не! Кусок кода не обязательно.... нужен метод ( или функция/процедура ) позволяющая добавить строки в отчет...... (Справкой пользоваться умею :)) )

BC - весчь! Но в данном случае не подходит, потому как весь (кастрированный) проект готов, за исключением этого отчета...
...
Рейтинг: 0 / 0
Добавление строк в отчете
    #32290457
nestling
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для полноты картина....
ДатыОсвобождения в чистом виде нет....
Может быть "перевод на другую должность" или "увольнение" .....
...
Рейтинг: 0 / 0
Добавление строк в отчете
    #32290459
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Есть другое решение. Более утонченное. А именно:

1. Заводим дополнительную таблицу, в которой число записей заведомо больше, чем максимально возможное КоличествоПоШтату, а поле (по крайней мере необходимое) всего одно, причем числовое, в котором значения от 1 до общего количества записей (пусть это поле называется cou).

2. В источнике записей отчета добавляем эту таблицу безо всяких джойнов. Поле cou сажаем в Detail, можно с параметром Hidden=True.

3. В событии Detail_Format пишем:

If Me!cou > Me!КоличествоПоШтату Then Cancel = True
...
Рейтинг: 0 / 0
Добавление строк в отчете
    #32290478
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А-ля ВС (поправьте, если что), используя DAO
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
dim rs1 as dao.recordset
dim rs2 as dao.recordset
dim t as long

set rs1 = currentdb.openrecordset( "Должн" ,dbopendynaset)
set rs2 = currentdb.openrecordset( "СотрНаДолжн" ,dbopendynaset)
do until rs1.eof
  rs2.findfirst  "[Должность]="  & rs1![Должность]
  for t= 1  to rs![КолвоПоШтату]
    if rs2.nomatch or not rs2.nomatch
      ' not rs2.nomatch - на случай, если на должности больше людей, '
      ' чем положено по штатному расписанию '
      currentdb.execute  "insert "  & rs1![Должность] & _
                " as [Должность], -1  as [Сотрудник] into ВремТабл;"
    else
      currentdb.execute  "insert "  & rs1![Должность] & _
                " as [Должность], "  & rs2![Сотрудник] &  " as [Сотрудник] into ВремТабл;" 
      rs2.findnext  "[Должность]="  & rs1![Должность]
    endif
  next t
  rs1.movenext
loop


Это примерно. Не проверяя.

Можно еще, как вариант, сделать

ТаблицаЧисел
1
2
3
4
...
10000
(ограничиваем максимальное число вакансий по штатному расписанию)

Запрос1
select СотрНаДолжн.КодДолжности, СотрНаДолжн.КодСотрудника, (count(СотрНаДолжн.КодДолжности)-1) as ПорНомер
from СотрНаДолжн As a
left join СотрНаДолжн as b on a.КлючТаблицы < b.КлючТаблицы
group by СотрНаДолжн.КодДолжности, СотрНаДолжн.КодСотрудника;

Запрос2
select Должн.КодДолжности, Должн.КолвоПоШтату, ТаблицаЧисел.Число from Должн, ТаблицаЧисел;

Запрос3
select Запрос2.КодДолжн, Запрос2.Число, Запрос1.КодСотрудника from Запрос2 left join Запрос1 on (Запрос2.КодДолжности=Запрос1.КодДолжности And Запрос2.Число = Запрос1.ПорНомер) where (Запрос2.КолвоПоШтату>=Запрос2.Число Or not isnull(Запрос1.КодСотрудника))

Тоже не проверял. Но в принципе должно работать
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Добавление строк в отчете
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]