|
|
|
Оборотка по любому полю в любой таблице
|
|||
|---|---|---|---|
|
#18+
Собственно задачу себе поставил такую, необходимо написать VBA-код, который будет подсчитывать оборот по полю за заданный период времени (или всех записей, если он не задан). Первый вопрос в этом свете состоит в том, как VBA передать имя таблицы и имя поля в этой таблице, по которому нужно просуммировать оборот? То что я вчера пытался написать, ничего не вышло. :( Public Funktion oborot(pole, date1 as date, date2 as date) Вот в переменную "pole" и предполагал заносить поле таблицы и саму таблицу, но заносится значение из этой таблицы. :( Вообще, такое возможно или нет? Далее предполагается работа с рекордсетом, где будет выбираться данные за нужный период и суммироваться. Это и будет Оборот по полю. Ну и соответственно предполагается сделать vh_saldo, ish_saldo, но это уже дело техники. Help me please! P.S. Если у кого-то есть такие наработки, то если не сложно, может поделитесь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 14:08 |
|
||
|
Оборотка по любому полю в любой таблице
|
|||
|---|---|---|---|
|
#18+
Ты в переменную поле передаешь что? Ссылку на поле открытого рекордсета? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 14:10 |
|
||
|
Оборотка по любому полю в любой таблице
|
|||
|---|---|---|---|
|
#18+
А что такое Funktion? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 14:11 |
|
||
|
Оборотка по любому полю в любой таблице
|
|||
|---|---|---|---|
|
#18+
То Geo: Вот именно это у меня и не получается, передать в переменную pole ссылку на поле в таблице. :(( А еще бы, добавить переменную tabl и заносить туда имя таблицы. Как это сделать в коде??? То Vsevolod V: Спешил фо ю. Funktion - это Function! А вместо того, чтобы к написанию придираться, лучше бы что-нибудь дельное посоветовал, а то у тебя на твое количество постов в форуме, только процентов 10 несут какую-нибудь полезную информацию, а остальное сплошная водища! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 14:17 |
|
||
|
Оборотка по любому полю в любой таблице
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Вот это работает. Но как, скажем, просуммировать просуммировать это поле, не открывая в Proc2 рекордсет, я не представляю. Т.е., чтобы что-то делать с полем таблицы (просуммировать и пр.), лучше использовать вот такой синтаксис Proc2 Sub Proc2(rstName As string, fldName as string) или даже Sub Proc2(rstName As string, fldName as string, strFilter as string) Но, опять же, сомневаюсь, будет ли работа с рекордсетом быстрее, чем выполнение запроса. В Proc2, наверное, лучше формировать строчку(и) SQL, и их выполнять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 14:21 |
|
||
|
Оборотка по любому полю в любой таблице
|
|||
|---|---|---|---|
|
#18+
То Geo: Я не совсем понял, где в этом коде я передаю имя таблицы? > Set rs = CurrentDb.OpenRecordset("Таблица1") Вот эта "Талица1" должна быть выбраа пользователем на этапе подстановки функции. Также, дожно быть выбрано поле из этой таблице, по которому будет происходить суммирование. Вот это у меня не получается. Собственно сама идея проста. Есть список контрагентов и есть пара табличек "Приход", "Расход" (только не кричите, что можно было сделать одной таблицей и поставить идентификатор), плюс есть таблички ТТН, Счет-фактура и т.д. Вот и надо такую функцию, которая будет для каждого клиента выводить обороты за период из разных табличек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 14:32 |
|
||
|
Оборотка по любому полю в любой таблице
|
|||
|---|---|---|---|
|
#18+
Примерно так Public Function Proc1(strTab as String, strFld as String) Dim rs As DAO.Recordset, strS as String strS="select sum(" & strFld & ") as f1 from " & strTab Set rs = CurrentDb.OpenRecordset(strS) if not rs.Eof and Not rs.Bof then rs.MoveFirst Proc1=rs.f1 else Proc1=0 endif End Function ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 14:39 |
|
||
|
Оборотка по любому полю в любой таблице
|
|||
|---|---|---|---|
|
#18+
я бы толсто посоветовал все заделать в запрос ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 14:41 |
|
||
|
Оборотка по любому полю в любой таблице
|
|||
|---|---|---|---|
|
#18+
То incold: Спасибо! Все работает! Дома не пахало, на работе заработало. :(( Только он суммирует все строки, а надо, чтобы суммировал только все строки,но по каждому контрагенту. Что-то я не совсем догоняю, можно ли это сделать? :( То Хам трамвайный: Ты имеешь ввиду, что на каждую табличку писать отдельный запрос??? Или ты что-то другое имеешь ввиду? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 15:08 |
|
||
|
Оборотка по любому полю в любой таблице
|
|||
|---|---|---|---|
|
#18+
2 TRoUbLEs Ну блин, как мед - так и ложку А самому облом подумать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 15:16 |
|
||
|
Оборотка по любому полю в любой таблице
|
|||
|---|---|---|---|
|
#18+
я бы по-другому базу спроектировал, чтобы делать запрос из одной таблицы, а не скакать по всем ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 15:18 |
|
||
|
Оборотка по любому полю в любой таблице
|
|||
|---|---|---|---|
|
#18+
То incold: Ладно, сегодня вечером дома возьму пивка и постараюсь разобраться. Пока ничего не получилось. :( За наводку спасибо, но если ничего не получится, то завтра ждите очередной порции вопросов. То Хам трамвайный: Ага, спроектировал бы. Ты что, в одной табличке отражал бы и счета-фактуры, и приходы-расходы и ТТН и еще кучу всего? Не слишком ли много данных в одну табличку? Тем более, что для каждого документа свои реквизиты. У меня же идея сделать такую функцию, как в 1С. (Сальдо нач, сальдо конечн, оборот.. и т.п.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 16:11 |
|
||
|
Оборотка по любому полю в любой таблице
|
|||
|---|---|---|---|
|
#18+
Выполз наверх? Тады: это у меня и не получается, передать в переменную pole ссылку на поле в таблице Вот здесь я передаю аргументу fld процедуры Proc2 ссылку на поле rs.Fields(1): Proc2 rs.Fields(1) здесь я это доказываю: MsgBox fld.Name MsgBox fld.SourceTable Вот эта "Талица1" должна быть выбраа пользователем на этапе подстановки функции. Также, дожно быть выбрано поле из этой таблице, по которому будет происходить суммирование. Вот это у меня не получается Выбрать не получается? Или передать. Сделанный выбор и передачу у меня имитирует Proc1. Обработку - Proc2. А ссылку передавать не очень правильно, мне кажется. Проще имя поля и имя таблицы. Поэтому я предложил синтаксис Sub Proc2(rstName As string, fldName as string) Но лучже, опять же по моему скромному мнению (имхо:), динамически формировать запрос(ы), а не работать с рекордсетом. Есть список контрагентов и есть пара табличек "Приход", "Расход" (только не кричите, что можно было сделать одной таблицей и поставить идентификатор), плюс есть таблички ТТН, Счет-фактура А зачем таблички ТТН, Счет-фактура отдельно, если не секрет? Или отгрузка товара у тебя всегда происходит по факту выписки какой-нибудь расходной накладной? Т.е. в принципе клиенту м.б. достаточно счета-фактуры, или СФ+ТТН. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2003, 16:27 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32241899&tid=1679810]: |
0ms |
get settings: |
7ms |
get forum list: |
23ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
75ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
69ms |
get tp. blocked users: |
1ms |
| others: | 207ms |
| total: | 400ms |

| 0 / 0 |
