| |
|
|
| | Привет, Проблема стара как мир.
есть заполняемая таблица. В ней поле дата и поле №. № заполняется по событию очередным номером +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() скобки убрал. Все одно.
Блин. Озадачил. | |
| |
| |