Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как реализовать?
 
 автор: SONAR   (06.09.2010 в 16:41)   личное сообщение
 
 

Приветствую всех.
Вот, сижу и думаю, как реализовать следующую приблуду.
Нужна таблица, в которой полями будут названия (номера) опер касс, к пирмеру 0211, 0212, 0213, 0214 и так далее.
А вот строками должны быть календарные даты... 01.08.2010, 02.08.2010, 03.08.2010 и так далее....
Как реализовать так, чтобы эти строки добавлялись сами каждый день...
И обязательно, чтобы не было пропущенных дат.
Сами ячейки будут иметь логический тип (Да/Нет), в них будет отмечаться работала ли эта касса в данную дату или нет...

  Ответить  
 
 автор: Explorer   (06.09.2010 в 16:54)   личное сообщение
 
 

1) схема кривая и раскосая - так нельзя делать
2) служебная таблица календарь тебе в помощь

  Ответить  
 
 автор: SONAR   (06.09.2010 в 17:00)   личное сообщение
 
 

1)Да сам понимаю, что кривая и раскосая. пока просто не продумывал всё до конца.
Так, удочку закинул в надежде, что кто-то такое уже делал...
2) что за служебная таблица календарь? можно поподробнее?

  Ответить  
 
 автор: Силblч   (06.09.2010 в 17:05)   личное сообщение
 
 

1. делай таблицу, где поля - номера касс (справочник касс?)
и/или таблицу, где номеркассы, датаоперации(иличтотам) и другое...

2. таблица calendar (arcdate,dateoff)
собсно дата и нерабочий день

3. дальше все запросами отображаешь... даже перекрестными, если полей хватит :)

  Ответить  
 
 автор: SONAR   (06.09.2010 в 17:12)   личное сообщение
 
 

Оп. не врублюсь по второму пункту? это есть какая-то встроенная в АКС таблица такая?
Собственно, уточню суть задачи.
Количество оперкасс ограниченное, и добавлять или удалять их нет надобности.
Соответственно количество полей в таблице будет неизменно.
Зато вот записи по датам необходимо проводить все. т.е. ни одной пропущенной даты.
Т.е. если сегодня стали работать с этой таблицей, то соответственно первая запись в поле ДАТА (это поле помимо полей с наименованиями оперкасс) будет 06.069.2010.
Впринципе, можно тупо сделать запрос на добавление, который будет запускаться с стартовой таблицей и выполнятся в фоновом режиме добавляя одну пустую строку, в которой поле ДАТА будет проставляться автоматически (в таблице в поле дата поставить значение по умолчанию Date)/
Но, как добавлять дни, в которые база не работала (выходные)? т.е. я пришел в понедельник, как мне субботу и воскресенье добавлять? что-то в этом духе.
Собсвтенно, думаю, не сложно налабать код, где бы при входе в базу, происходил поиск крайней даты в таблице, и уже сравнивая с текущей добавлять необходимое количество строк с отсутствующими за период датами.
Но, просто думал, может есть более лучший способ реализации такой вот задумки

  Ответить  
 
 автор: Силblч   (06.09.2010 в 17:48)   личное сообщение
 
 

2. заранее создать таблицу календарь до 12341234123412тысячного года
или раз в месяц добавлять на новый месяц

  Ответить  
 
 автор: snipe   (06.09.2010 в 17:07)   личное сообщение
 
 

А почему не две таблицы
собственно касса (с ее номером, датой регистрации ну и т.д)
и кассовые операции за день (включая имя оператора )

  Ответить  
 
 автор: SONAR   (06.09.2010 в 17:16)   личное сообщение
 
 


А почему не две таблицы
собственно касса (с ее номером, датой регистрации ну и т.д)
и кассовые операции за день (включая имя оператора )


Не не, там ни дат регистраций не надо ни операторов. ни операций.
Суть в том, чтобы эта таблица была просто наглядная.
Все поля, помимо поля ДАТА, будут полями логическими.
Задача работающего с этой таблицей брать и ставить галочки в полях по оперкассам.
Допустим 06.09.2010 го года работали 0211, 0212, 0213, 0214...
там где галочек нет, значит оперкасса не работала.

  Ответить  
 
 автор: SONAR   (06.09.2010 в 17:19)   личное сообщение
7 Кб.
 
 

Во, вот такой вид должен быть у таблички

  Ответить  
 
 автор: Explorer   (06.09.2010 в 17:26)   личное сообщение
 
 

можно заранее зафигачить в таблицу записи со всеми датами - кодом в цикле на нужный диапазон - потом только заполнять галками поля с номерами оперкасс

  Ответить  
 
 автор: SONAR   (06.09.2010 в 17:27)   личное сообщение
 
 


можно заранее зафигачить в таблицу записи со всеми датами - кодом в цикле на нужный диапазон



Как говориться, мы не ищем лёгких путей!
Можно и ручками конечно вводить, но, просто со временем, то дату пропустят, то еще чего, а хочется автоматизировать и, чтобы не заморачивались юзьвери.

  Ответить  
 
 автор: osmor   (06.09.2010 в 17:31)   личное сообщение
 
 

Собсвтенно, думаю, не сложно налабать код, где бы при входе в базу, происходил поиск крайней даты в таблице, и уже сравнивая с текущей добавлять необходимое количество строк с отсутствующими за период датами.


+1

  Ответить  
 
 автор: kot_k_k   (06.09.2010 в 17:43)   личное сообщение
 
 

я бы добавил что после добавления записей - запросить у юзера ручками либо внести данные за пропущеные строки либо нажать большую кнопку "ДА НЕРАБОТАЛ МАГАЗИН"

п.с. мысли - по логике - кроме текущей даты юзеру не должен быть доступ к другим датам - т.о. форма вообще сводится к одной строчке.

  Ответить  
 
 автор: Lukas   (06.09.2010 в 17:40)   личное сообщение
 
 

Не вижу смысла в этой табличке.

Узнать работала-ли касса в конкретный день можно либо:
1. Из графика работ (если работник работал на этой кассе, то и касса работала)
2. Из инкассации (Деньги сданы, то и касса работала).

В таком случае:


... то дату пропустят, то еще чего...


Если "пропустят" что работник работал, и не начислят ему зарплату, получат дюлей от работника.
Если "пропустят" инкассацию кассы - получат дюлей от хозяина, а то и паяльник в *опу.

  Ответить  
 
 автор: osmor   (06.09.2010 в 17:55)   личное сообщение
 
 

Сделать ее не сложно, заполнять при старте даными до сегодняшней - тоже
Но с ней проще строить всякие отчеты и визуализировать данные для пользователя. IMHO

  Ответить  
 
 автор: kot_k_k   (06.09.2010 в 17:31)   личное сообщение
 
 

ну так это то что видит юзер - а на кой она тебе такая внутри.
делай касса, дата - по которой работали, а по которой не работали и не надь. а такую таблу получишь перекрестным или кодом.

Силыч - подробней про Календарь, я тоже че-то не врублюсь.

  Ответить  
 
 автор: SONAR   (06.09.2010 в 17:40)   личное сообщение
 
 


ну так это то что видит юзер - а на кой она тебе такая внутри.
делай касса, дата - по которой работали, а по которой не работали и не надь. а такую таблу получишь перекрестным или кодом.



не не. с этой таблицей будет работать один юзер, в задачи которого будет входить отмечать по всем оперкассам как раз те даты в кои эти кассы работали.
А уж другой юзьвер будет как раз и смотреть, какие кассы когда работали, а какие не работали.

  Ответить  
 
 автор: SONAR   (06.09.2010 в 17:45)   личное сообщение
 
 

Собственно, судя по всему на том и остановлюсь.
Надо будет налабать код, где:
при открытии базы, через стартовую форму идет поиск в таблице последней самой высокой даты.
Далее сверка этой даты с текущей.
В случае если такая дата как текущая есть, выходим из кода.
в случае если текущая дата выше последней даты в таблице вычисляем диапазон дат.
в случае если диапазон свыше или равен единице добавляем записи с датами...
НО!!!
Сразу вылезает вопрос, а как в коде угадывать сколько дней в месяце? т.е. если сегодня 3 сентября, последняя дата 27 августа? как узнать 30 или 31 день в августе?
оно понятно, что они постоянные, и можно тупо, если август, то 31 день.
а как быть с февралем?
тоже непонятки.

  Ответить  
 
 автор: SONAR   (06.09.2010 в 17:51)   личное сообщение
 
 

Да нет же, парни, здесь вообще не завязано все на работника или операции по кассе.
Суть программы в следующем.
В центральный офис ежедневно сдаются с оперкасс кассовые документы.
Контролеры, эти кассовые документы складывают в кассовые сшивы. Для контролеров модуль программы делает следующее: документы регистрируются в базе, в случае отсутствия каких-либо документов кои должны быть (Мемориалки, реестры), контролер регистрирует недостающие и отправляет на кассу запрос в электроне. На кассе кассиры допечатываеют не достающие документы и присылают в бумаге их контролеру. Все это время пока все документы по кассе за конкретный день не придут, контролер видит чего не хватает. Когда все документы по определенному дню все собраны, Контролер скидывает эти документы Архивариусу.
У Архивариуса свой модуль, в котором он принимает эти документы, и начинает их обрабатывать (прошивать, раскладывать по коробкам). При этом Архивариус отслеживает со всех ли оперкасс и по за все ли дни пришли документы.
Именно для него и надо, чтобы он, видел, что если нет каких - либо документов по какой либо кассе за какую либо дату, то или это ему не передал контролер, или. просто касса в эту дату не работала. тогда у него отпадают все вопросы по этому не рабочему дню.

  Ответить  
 
 автор: kot_k_k   (06.09.2010 в 17:58)   личное сообщение
 
 


Сразу вылезает вопрос, а как в коде угадывать сколько дней в месяце? т.е. если сегодня 3 сентября, последняя дата 27 августа? как узнать 30 или 31 день в августе?
оно понятно, что они постоянные, и можно тупо, если август, то 31 день.



Dateserial (год, месяц, день) + в цикле сдобавляй +1 к дню пока не придешь к текущей дате и точнно 31-е не пропустишь и не 29-е февраля

  Ответить  
 
 автор: kot_k_k   (06.09.2010 в 17:46)   личное сообщение
 
 

юзер № 2 видит ОТЧЕТ - а не таблу, а из таблы (касса, дата работы) - сделать твою таблу и воткнуть пропущенные строки - довольно лёгко, а плодить пустые записи - как-то не кошерно.

п.с. Силыч не молчи

  Ответить  
 
 автор: SONAR   (06.09.2010 в 17:56)   личное сообщение
 
 

ну, то что ЮЗЕР 2 будет видить отчет оно и понятно.
Но вот, на счет как воткнуть пропущенные строки?
Оперкассы все разные, и многие работают без выходных, некоторые с выходными, бывают форсмажеры, света не было сутки и прочее, есть те что и в праздники работают, а есть те, кои вечно по разным причинам не работают.
Но, по сути во все даты каждый день какая-либо оперкасса и работает, так что лишних записей не будет точно.

  Ответить  
 
 автор: Силblч   (06.09.2010 в 18:17)   личное сообщение
 
 

таблица Календарь

ARCDATE    DAYOFF    
01.09.2010    0    
02.09.2010    0    
03.09.2010    0    
04.09.2010    1    
05.09.2010    1    
06.09.2010    0    
07.09.2010    0    
08.09.2010    0    
09.09.2010    0    
10.09.2010    0    
11.09.2010    1    
12.09.2010    1    

что не понятного?

  Ответить  
 
 автор: kot_k_k   (07.09.2010 в 08:47)   личное сообщение
 
 

я думал какая-то хитрость - типа в табле только не рабочие - а хитрым запросом получаем рабочие дни - для строк перекрестного запроса

  Ответить  
 
 автор: Explorer   (06.09.2010 в 18:17)   личное сообщение
 
 


а плодить пустые записи - как-то не кошерно



нормально в подобном случае

  Ответить  
 
 автор: snipe   (07.09.2010 в 03:22)   личное сообщение
 
 

По работе с датами - вот тут красивый пример
(я про 29 февраля)
http://hiprog.com/index.php?option=com_content&task=view&id=251661640&Itemid=35

  Ответить  
 
 автор: Гоблин   (07.09.2010 в 21:48)   личное сообщение
11 Кб.
 
 

Как реализовать так, чтобы эти строки добавлялись сами каждый день...
И обязательно, чтобы не было пропущенных дат.

Как всегда опоздал и ничего не понял. Давай по порядку. При открытии формы нужно определить последнюю дату и если она меньше текущей, то добавлять в каждую последующую строку следующую дату до текущей. Так?
Вот пристегнул. Попробуй ввести дату меньше сегодняшней и закрой форму. Потом открой снова.
Добавляться даты должны при открытии формы или на другое событие?
А дальше что???

  Ответить  
 
 автор: Гоблин   (07.09.2010 в 22:12)   личное сообщение
12 Кб.
 
 

А вот то же самое, только с борьбой против пустых строк. При закрытии формы срабатывает запрос на удаление и удаляет все пустые строки из таблицы где не заполнено поле "Поле". В этом сучае получается, что введя дату, надо что-то вписать в поле, иначе пустая форма будет всегда открываться.

  Ответить  
 
 автор: SONAR   (10.09.2010 в 11:54)   личное сообщение
 
 

Отлично, Гоблин, спасибо, то что доктор прописал.
Всем спасибо.

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList