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

Форум: MS ACCESS

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

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

 
 

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

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

тема: Счет
 
 автор: Гоблин   (11.11.2010 в 20:06)   личное сообщение
 
 

Привет, Проблема стара как мир.
есть заполняемая таблица. В ней поле дата и поле №. № заполняется по событию очередным номером +1 от максимального имеющегося в таблице. Все гуд, только
Теперь следует сделать так, что бы с 1 декабря каждого года счет начинался с 1. Причем последняя запись может быть в начале ноября, а следующая в конце декабря ... начале января как угодно.. Счет должен быть с 1 возобновлен.
попытки и идеи:
- recordset до поиска предыдущего года и назад с определением текущей даты как-то не получился.
- через (образно) if last (дата, таблица)<1 декабря then if date>=1 декабря then 1...
чего-то не соображу как завести...
А других идей нет.

  Ответить  
 
 автор: час   (11.11.2010 в 22:29)   личное сообщение
 
 

если на дворе Декабрь и в таблице нет ни одной записи за декабрь -

if rst.recordcount = 0 тогда у документа номер= 1
Else
номер = наибольший_номер+1
end if

  Ответить  
 
 автор: Дядя Федор   (12.11.2010 в 08:14)   личное сообщение
 
 

с учетом года. а если в декабре не было... а в январе след. года появились.
надо года месяца учитывать типа год*100+месяц
201001
201002
...
201012
201101

  Ответить  
 
 автор: час   (12.11.2010 в 08:26)   личное сообщение
 
 

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

  Ответить  
 
 автор: Гоблин   (16.11.2010 в 13:40)   личное сообщение
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 весь месяц, пока не наступит январь.

Не добавлять же технологическое поле для учета виртуального года. Подскажите, как скорректировать полученный результат. Не соображу блин.

  Ответить  
 
 автор: Гоблин   (16.11.2010 в 16:37)   личное сообщение
20 Кб.
 
 

И все таки оно работает. Пришлось ставить дополнительное поле для фиксации значения год. С ним потребовалось 3 строчки кода.

  Ответить  
 
 автор: час   (16.11.2010 в 16:40)   личное сообщение
14 Кб.
 
 

  Ответить  
 
 автор: Гоблин   (16.11.2010 в 20:53)   личное сообщение
86 Кб.
 
 

Круто. Вот что открывает. Видимо это какой-то настолько сложный способ через рекордсет и ADODB, что мой комп и акс выполнить не может.

Я же проблему решил в 3 строки и без ADODB которое не совсем понятно зачем придумано, коли запросы есть. Хотя...

  Ответить  
 
 автор: час   (16.11.2010 в 21:51)   личное сообщение
 
 

Ну и хорошо!!!

  Ответить  
 
 автор: Гоблин   (16.11.2010 в 23:23)   личное сообщение
 
 

Чего хорошо? Мне все способы хороши. Твой-то работать не хочет, жалуется. Раскрой секрет своего способа. В принципе понятно так: С формы залезаем в таблицу без запроса, выхватываем там нужное значение и пихаем в расчет (условие). С помощью этого ADODB выходит можно в любую таблу без запроса залезть. Так?
В данном случае это как-то сложно получилось, а вообще... тут думать надо.
Это мне скоро надо будет.

  Ответить  
 
 автор: Гоблин   (16.11.2010 в 23:36)   личное сообщение
 
 

Во блин! Твой пример работает. Только если время на компе правильное выставить. У меня после экспериментов декабрь стоял.

Ну, может быть еще потому, что в условии запроса в VBA в функции Date() скобки убрал. Все одно.

Блин. Озадачил.

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