|
|
|
| Приветствую всех.
Вот, сижу и думаю, как реализовать следующую приблуду.
Нужна таблица, в которой полями будут названия (номера) опер касс, к пирмеру 0211, 0212, 0213, 0214 и так далее.
А вот строками должны быть календарные даты... 01.08.2010, 02.08.2010, 03.08.2010 и так далее....
Как реализовать так, чтобы эти строки добавлялись сами каждый день...
И обязательно, чтобы не было пропущенных дат.
Сами ячейки будут иметь логический тип (Да/Нет), в них будет отмечаться работала ли эта касса в данную дату или нет... | |
|
| |
|
|
|
| 1) схема кривая и раскосая - так нельзя делать
2) служебная таблица календарь тебе в помощь | |
|
| |
|
|
|
| 1)Да сам понимаю, что кривая и раскосая. пока просто не продумывал всё до конца.
Так, удочку закинул в надежде, что кто-то такое уже делал...
2) что за служебная таблица календарь? можно поподробнее? | |
|
| |
|
|
|
| 1. делай таблицу, где поля - номера касс (справочник касс?)
и/или таблицу, где номеркассы, датаоперации(иличтотам) и другое...
2. таблица calendar (arcdate,dateoff)
собсно дата и нерабочий день
3. дальше все запросами отображаешь... даже перекрестными, если полей хватит :) | |
|
| |
|
|
|
| Оп. не врублюсь по второму пункту? это есть какая-то встроенная в АКС таблица такая?
Собственно, уточню суть задачи.
Количество оперкасс ограниченное, и добавлять или удалять их нет надобности.
Соответственно количество полей в таблице будет неизменно.
Зато вот записи по датам необходимо проводить все. т.е. ни одной пропущенной даты.
Т.е. если сегодня стали работать с этой таблицей, то соответственно первая запись в поле ДАТА (это поле помимо полей с наименованиями оперкасс) будет 06.069.2010.
Впринципе, можно тупо сделать запрос на добавление, который будет запускаться с стартовой таблицей и выполнятся в фоновом режиме добавляя одну пустую строку, в которой поле ДАТА будет проставляться автоматически (в таблице в поле дата поставить значение по умолчанию Date)/
Но, как добавлять дни, в которые база не работала (выходные)? т.е. я пришел в понедельник, как мне субботу и воскресенье добавлять? что-то в этом духе.
Собсвтенно, думаю, не сложно налабать код, где бы при входе в базу, происходил поиск крайней даты в таблице, и уже сравнивая с текущей добавлять необходимое количество строк с отсутствующими за период датами.
Но, просто думал, может есть более лучший способ реализации такой вот задумки | |
|
| |
|
|
|
| 2. заранее создать таблицу календарь до 12341234123412тысячного года
или раз в месяц добавлять на новый месяц | |
|
| |
|
|
|
| А почему не две таблицы
собственно касса (с ее номером, датой регистрации ну и т.д)
и кассовые операции за день (включая имя оператора ) | |
|
| |
|
|
|
|
А почему не две таблицы
собственно касса (с ее номером, датой регистрации ну и т.д)
и кассовые операции за день (включая имя оператора )
|
Не не, там ни дат регистраций не надо ни операторов. ни операций.
Суть в том, чтобы эта таблица была просто наглядная.
Все поля, помимо поля ДАТА, будут полями логическими.
Задача работающего с этой таблицей брать и ставить галочки в полях по оперкассам.
Допустим 06.09.2010 го года работали 0211, 0212, 0213, 0214...
там где галочек нет, значит оперкасса не работала. | |
|
| |
|
7 Кб. |
|
| Во, вот такой вид должен быть у таблички | |
|
| |
|
|
|
| можно заранее зафигачить в таблицу записи со всеми датами - кодом в цикле на нужный диапазон - потом только заполнять галками поля с номерами оперкасс | |
|
| |
|
|
|
|
можно заранее зафигачить в таблицу записи со всеми датами - кодом в цикле на нужный диапазон
|
Как говориться, мы не ищем лёгких путей!
Можно и ручками конечно вводить, но, просто со временем, то дату пропустят, то еще чего, а хочется автоматизировать и, чтобы не заморачивались юзьвери. | |
|
| |
|
|
|
| Собсвтенно, думаю, не сложно налабать код, где бы при входе в базу, происходил поиск крайней даты в таблице, и уже сравнивая с текущей добавлять необходимое количество строк с отсутствующими за период датами. |
+1 | |
|
| |
|
|
|
| я бы добавил что после добавления записей - запросить у юзера ручками либо внести данные за пропущеные строки либо нажать большую кнопку "ДА НЕРАБОТАЛ МАГАЗИН"
п.с. мысли - по логике - кроме текущей даты юзеру не должен быть доступ к другим датам - т.о. форма вообще сводится к одной строчке. | |
|
| |
|
|
|
| Не вижу смысла в этой табличке.
Узнать работала-ли касса в конкретный день можно либо:
1. Из графика работ (если работник работал на этой кассе, то и касса работала)
2. Из инкассации (Деньги сданы, то и касса работала).
В таком случае:
... то дату пропустят, то еще чего...
|
Если "пропустят" что работник работал, и не начислят ему зарплату, получат дюлей от работника.
Если "пропустят" инкассацию кассы - получат дюлей от хозяина, а то и паяльник в *опу.
| |
|
| |
|
|
|
| Сделать ее не сложно, заполнять при старте даными до сегодняшней - тоже
Но с ней проще строить всякие отчеты и визуализировать данные для пользователя. IMHO | |
|
| |
|
|
|
| ну так это то что видит юзер - а на кой она тебе такая внутри.
делай касса, дата - по которой работали, а по которой не работали и не надь. а такую таблу получишь перекрестным или кодом.
Силыч - подробней про Календарь, я тоже че-то не врублюсь. | |
|
| |
|
|
|
|
ну так это то что видит юзер - а на кой она тебе такая внутри.
делай касса, дата - по которой работали, а по которой не работали и не надь. а такую таблу получишь перекрестным или кодом.
|
не не. с этой таблицей будет работать один юзер, в задачи которого будет входить отмечать по всем оперкассам как раз те даты в кои эти кассы работали.
А уж другой юзьвер будет как раз и смотреть, какие кассы когда работали, а какие не работали. | |
|
| |
|
|
|
| Собственно, судя по всему на том и остановлюсь.
Надо будет налабать код, где:
при открытии базы, через стартовую форму идет поиск в таблице последней самой высокой даты.
Далее сверка этой даты с текущей.
В случае если такая дата как текущая есть, выходим из кода.
в случае если текущая дата выше последней даты в таблице вычисляем диапазон дат.
в случае если диапазон свыше или равен единице добавляем записи с датами...
НО!!!
Сразу вылезает вопрос, а как в коде угадывать сколько дней в месяце? т.е. если сегодня 3 сентября, последняя дата 27 августа? как узнать 30 или 31 день в августе?
оно понятно, что они постоянные, и можно тупо, если август, то 31 день.
а как быть с февралем?
тоже непонятки. | |
|
| |
|
|
|
| Да нет же, парни, здесь вообще не завязано все на работника или операции по кассе.
Суть программы в следующем.
В центральный офис ежедневно сдаются с оперкасс кассовые документы.
Контролеры, эти кассовые документы складывают в кассовые сшивы. Для контролеров модуль программы делает следующее: документы регистрируются в базе, в случае отсутствия каких-либо документов кои должны быть (Мемориалки, реестры), контролер регистрирует недостающие и отправляет на кассу запрос в электроне. На кассе кассиры допечатываеют не достающие документы и присылают в бумаге их контролеру. Все это время пока все документы по кассе за конкретный день не придут, контролер видит чего не хватает. Когда все документы по определенному дню все собраны, Контролер скидывает эти документы Архивариусу.
У Архивариуса свой модуль, в котором он принимает эти документы, и начинает их обрабатывать (прошивать, раскладывать по коробкам). При этом Архивариус отслеживает со всех ли оперкасс и по за все ли дни пришли документы.
Именно для него и надо, чтобы он, видел, что если нет каких - либо документов по какой либо кассе за какую либо дату, то или это ему не передал контролер, или. просто касса в эту дату не работала. тогда у него отпадают все вопросы по этому не рабочему дню. | |
|
| |
|
|
|
|
Сразу вылезает вопрос, а как в коде угадывать сколько дней в месяце? т.е. если сегодня 3 сентября, последняя дата 27 августа? как узнать 30 или 31 день в августе?
оно понятно, что они постоянные, и можно тупо, если август, то 31 день.
|
Dateserial (год, месяц, день) + в цикле сдобавляй +1 к дню пока не придешь к текущей дате и точнно 31-е не пропустишь и не 29-е февраля | |
|
| |
|
|
|
| юзер № 2 видит ОТЧЕТ - а не таблу, а из таблы (касса, дата работы) - сделать твою таблу и воткнуть пропущенные строки - довольно лёгко, а плодить пустые записи - как-то не кошерно.
п.с. Силыч не молчи | |
|
| |
|
|
|
| ну, то что ЮЗЕР 2 будет видить отчет оно и понятно.
Но вот, на счет как воткнуть пропущенные строки?
Оперкассы все разные, и многие работают без выходных, некоторые с выходными, бывают форсмажеры, света не было сутки и прочее, есть те что и в праздники работают, а есть те, кои вечно по разным причинам не работают.
Но, по сути во все даты каждый день какая-либо оперкасса и работает, так что лишних записей не будет точно. | |
|
| |
|
|
|
| таблица Календарь
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
|
что не понятного? | |
|
| |
|
|
|
| я думал какая-то хитрость - типа в табле только не рабочие - а хитрым запросом получаем рабочие дни - для строк перекрестного запроса | |
|
| |
|
|
|
|
а плодить пустые записи - как-то не кошерно
|
нормально в подобном случае | |
|
| |
|
|
|
| По работе с датами - вот тут красивый пример
(я про 29 февраля)
http://hiprog.com/index.php?option=com_content&task=view&id=251661640&Itemid=35 | |
|
| |
|
11 Кб. |
|
| Как реализовать так, чтобы эти строки добавлялись сами каждый день...
И обязательно, чтобы не было пропущенных дат.
Как всегда опоздал и ничего не понял. Давай по порядку. При открытии формы нужно определить последнюю дату и если она меньше текущей, то добавлять в каждую последующую строку следующую дату до текущей. Так?
Вот пристегнул. Попробуй ввести дату меньше сегодняшней и закрой форму. Потом открой снова.
Добавляться даты должны при открытии формы или на другое событие?
А дальше что??? | |
|
| |
|
12 Кб. |
|
| А вот то же самое, только с борьбой против пустых строк. При закрытии формы срабатывает запрос на удаление и удаляет все пустые строки из таблицы где не заполнено поле "Поле". В этом сучае получается, что введя дату, надо что-то вписать в поле, иначе пустая форма будет всегда открываться. | |
|
| |
|
|
|
| Отлично, Гоблин, спасибо, то что доктор прописал.
Всем спасибо. | |
|
| |