Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.01.2023, 13:36   #1
maximyn
 
Регистрация: 19.06.2011
Сообщений: 5
По умолчанию Запрос на автоматический расчет даты аттестации и перенос данных из Формы

Добрый день. Прошу помощи в реализации следующих задач
Вопрос 1.
Создание запроса автоматического расчета даты аттестации работников по каждой программе:
Табл. T_holiday – это индивидуальный отпуск каждого работника (может выпадать на рабочую вахту, а также его может и не быть, также отпуск может разбиваться и в год для одного работника их может быть несколько).
Табл. T_shift – это вахта, которая связывается с табл. T_schedule – это график работы вахты
T_training – указана периодичность повторного обучения в месяцах (Id_frequency)
T_exam – это день в рабочей вахте проведения аттестации комиссией предприятия.
В запросе «Запрос1-3-1» я вывел дату, но в ней я просто прибавил периодичность повторного обучения к последней дате протокола с учетом программы обучения.
Можно ли сделать запрос, который выбирал бы дату, которая попадала бы в рабочую вахту с учетом периодичности обучения, отпусков работников и учитывала день аттестации на рабочей вахте.
Необходим следующий алгоритм (но имеются трудности с реализацией):
Для работников, у которых ранее были протоколы (Запрос1-3-1):
а) Для каждого работника и каждой области аттестации определяем ближайшую рабочую вахту (T_schedule) в которую попадёт крайняя дата аттестации.
б) К дате начала вахты (T_schedule.StartSchedule) прибавляется день аттестации в зависимости от программы (T_exam.Day)
б) Проверяем, попадает ли эта дата на отпуск T_holiday. Если попала на отпуск, то выбираем более раннюю рабочую вахту (т.е. идем назад) и алгоритм повторяем, до тех пор, пока не выполнятся условия.
Для вновь принимаемых работников (у которых нет протоколов, Запрос1-3-1)
а) К дате приема (T_personal.DateWork) прибавляем день аттестации в зависимости от программы (T_exam.Day)
б) Проверяем, попадает ли эта дата на рабочую вахту. Если не попадает, то берем следующую (т.е. идем вперед) рабочую вахту и к дате начала вахты (T_schedule.StartSchedule) прибавляется день аттестации в зависимости от программы (T_exam.Day) и алгоритм повторяем, до тех пор, пока не выполнятся условия.

Например:
В табл. Id_personal
T_personal.Id_personal 5 (Курочкин Павел Тимофеевич)
T_personal.Id_shift 1 (т.е. вахта 1)
В Запрос1-3-1, прошел аттестацию по программе «Безопасные методы и приемы выполнения работ для машиниста технологических насосов» с датой последней аттестации 03.10.2022 (Протокол 03-Р-2022) (периодичность которой установлена 12 месяцев), соответственно следующая должна быть не позднее 03.10.2023.
С учетом табл. T_schedule близкая дата аттестации с учетом графика работы для вахты 1 это 16.08.2023- 15.09.2023, но в эти даты у него отпуск табл. T_holiday, следовательно ближайшая для данного работка будет 16.06.2023-15.07.2023.
С учетом табл. T_exam для данного программы и вахты 1 установлен 5 день работы, следовательно 16.06.2023+5 = 20.06.2023
Таким образом, в запросе отображается дата 20.06.2023
Также если протокола нет Запрос1-3-1, то дата определяется как дата приема (T_personal.DateWork) плюс день аттестации (T_exam) с учетом графика работы (т.е. если его приняли в середине вахты, то аттестацию, которую он не успел пройти, переносится на следующую вахту).

Вопрос 2.
Перенес данные из Form5-1 в таблицы T_protocol и T_protocolFIO (при создании Протокола), т.е.
а) номер протокола, дата протокола, комиссия в табл. T_protocol
б) данные из раздела «работник» (в случае если стоит галочка в столбце «Аттестация», рис.1) перенести в табл. T_protocolFIO (в данном разделе работников может быть много)
Также имеются трудности в формировании автоматического номера протокола в форме с учетом года и типа обучения T_training по следующей маске (ЗапросНомерПротокол):
01 - Р – 2022
где
- 01 порядковый номер, который зависит от вида обучения T_training.InputMask, он обнуляется каждый год. Но в случае если протокол необходимо создать между уже созданными протоколами, то он берет ближайший и через дробь указывает порядковый номер.
Например,
03.10.2022 выдан протокол 02,
05.10.2022 выдан протокол 03
и необходимо выдать еще протоколы в период 03.10.2022-04.10.2022, то он берет ближайший и через дробь указывает порядковый номер 02/1, 02/2 и т.д.
Также имеется потребность в формировании номера следующим образом с учетом нуля 01,02..10,11,12 и т.д., но если дробь то нули после дроби не нужны 02/1, 11/1 и т.д.
Р - вида обучения T_training.InputMask
2022 - год

Буду признателен за любую помощь. Спасибо.
Вложения
Тип файла: rar ModulHSE_rev8.rar (308.3 Кб, 5 просмотров)
maximyn вне форума Ответить с цитированием
Старый 02.01.2023, 15:16   #2
Eugene-LS
Пользователь
 
Аватар для Eugene-LS
 
Регистрация: 23.02.2018
Сообщений: 78
По умолчанию

Цитата:
Сообщение от maximyn Посмотреть сообщение
Прошу помощи в реализации следующих задач
У вас таблицы "T_protocol" и "T_personal" не имеют боле-мене чёткой связи, а значит "трудности" и ошибки в желаемом расчёте практически гарантированы.
Можете схему данных подправить так, чтобы было ясно кто и когда - что сдавал?
Eugene-LS вне форума Ответить с цитированием
Старый 03.01.2023, 06:14   #3
Eugene-LS
Пользователь
 
Аватар для Eugene-LS
 
Регистрация: 23.02.2018
Сообщений: 78
По умолчанию

Цитата:
Сообщение от maximyn Посмотреть сообщение
T_holiday
И зачем эти префиксы в названиях таблиц "T_" ???
И давайте делать красиво!
... Название таблицы = название сущности во множественном числе.
...
Что там у вас за бешеные справочники и связи? - вы не сильно увлеклись "нормализацией" ?!
...
Справочник полов вообще порадовал (повеселил)
... Are you maind?

Последний раз редактировалось Eugene-LS; 03.01.2023 в 06:36.
Eugene-LS вне форума Ответить с цитированием
Старый 03.01.2023, 11:15   #4
Valick
Форумчанин
 
Регистрация: 27.04.2022
Сообщений: 484
По умолчанию

Цитата:
Сообщение от Eugene-LS Посмотреть сообщение
Название таблицы = название сущности во множественном числе.
в единственном числе
https://stackoverflow.com/questions/...s-plural-names

Последний раз редактировалось Valick; 03.01.2023 в 11:18.
Valick вне форума Ответить с цитированием
Старый 10.01.2023, 13:34   #5
Eugene-LS
Пользователь
 
Аватар для Eugene-LS
 
Регистрация: 23.02.2018
Сообщений: 78
По умолчанию

Цитата:
Сообщение от Valick Посмотреть сообщение
в единственном числе
Да! -Точно!
Это очень важно.

Савсем забыл! При преобразовании множества ОНО образует Единственное число парекумеранада ... согласно правому правилу подмножеств ...
Да! В единственном числе.

Последний раз редактировалось Eugene-LS; 10.01.2023 в 13:38.
Eugene-LS вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автоматический перенос данных с таблиц Excel в текст Word YSL Microsoft Office Word 52 27.06.2021 05:01
Автоматический перенос данных из общего листа в другие evil-12 Microsoft Office Excel 7 21.02.2014 19:29
помогите сделать автоматический перенос данных с одного листа на другой AlexP15 Microsoft Office Excel 8 12.10.2013 16:15
автоматический перенос данных с нескольких листов в один Наталья Матвеева Помощь студентам 0 20.02.2012 12:50
Автоматический перенос данных из общего листа в другие InvoiceControl Microsoft Office Excel 3 02.10.2008 13:21