|
|
|
| Привет, Проблема стара как мир.
есть заполняемая таблица. В ней поле дата и поле №. № заполняется по событию очередным номером +1 от максимального имеющегося в таблице. Все гуд, только
Теперь следует сделать так, что бы с 1 декабря каждого года счет начинался с 1. Причем последняя запись может быть в начале ноября, а следующая в конце декабря ... начале января как угодно.. Счет должен быть с 1 возобновлен.
попытки и идеи:
- recordset до поиска предыдущего года и назад с определением текущей даты как-то не получился.
- через (образно) if last (дата, таблица)<1 декабря then if date>=1 декабря then 1...
чего-то не соображу как завести...
А других идей нет.
| |
|
| |
|
|
|
| если на дворе Декабрь и в таблице нет ни одной записи за декабрь -
if rst.recordcount = 0 тогда у документа номер= 1
Else
номер = наибольший_номер+1
end if | |
|
| |
|
|
|
| с учетом года. а если в декабре не было... а в январе след. года появились.
надо года месяца учитывать типа год*100+месяц
201001
201002
...
201012
201101 | |
|
| |
|
|
|
| учитывать год - это само собой иначе за декабрь всегда найдутся записи в каком нить году | |
|
| |
|
13 Кб. |
|
| Вот методом долгих мытарств дошел до элементарного. Оказалось все не так сложно, как казалось раньше, и не так просто, как кажется сейчас.
Вот пристегнул. Начинает счет по порядку с каждого нового года. (перевожу системное время на год, запускаю форму и заполняю). Итак каждый год счет п/п с 1.=>
А НАДО С КАЖДОГО 1 ДЕКАБРЯ!! (мать его)
Добавляю функцию dateadd на месяц вперед от текущей. Новый код таков:
Dim a As Integer
a = Year(DateAdd("m", 1, Date))
If Me.№п_п = 0 Then
Me.№п_п = Nz(DMax("№п_п", "[Таблица1]", "Year([Таблица1]!Дата)= " & a & ""), 0) + 1
Else
End If
Как результат с 1 декабря возобновляет счет с 1, но т.к. в течение декабря условие не совпадает, то штампует 1 весь месяц, пока не наступит январь.
Не добавлять же технологическое поле для учета виртуального года. Подскажите, как скорректировать полученный результат. Не соображу блин. | |
|
| |
|
20 Кб. |
|
| И все таки оно работает. Пришлось ставить дополнительное поле для фиксации значения год. С ним потребовалось 3 строчки кода. | |
|
| |
|
14 Кб. |
|
| | |
|
| |
|
86 Кб. |
|
| Круто. Вот что открывает. Видимо это какой-то настолько сложный способ через рекордсет и ADODB, что мой комп и акс выполнить не может.
Я же проблему решил в 3 строки и без ADODB которое не совсем понятно зачем придумано, коли запросы есть. Хотя...
| |
|
| |
|
|
|
| Ну и хорошо!!! | |
|
| |
|
|
|
| Чего хорошо? Мне все способы хороши. Твой-то работать не хочет, жалуется. Раскрой секрет своего способа. В принципе понятно так: С формы залезаем в таблицу без запроса, выхватываем там нужное значение и пихаем в расчет (условие). С помощью этого ADODB выходит можно в любую таблу без запроса залезть. Так?
В данном случае это как-то сложно получилось, а вообще... тут думать надо.
Это мне скоро надо будет. | |
|
| |
|
|
|
| Во блин! Твой пример работает. Только если время на компе правильное выставить. У меня после экспериментов декабрь стоял.
Ну, может быть еще потому, что в условии запроса в VBA в функции Date() скобки убрал. Все одно.
Блин. Озадачил. | |
|
| |