powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Оборотка по любому полю в любой таблице
14 сообщений из 14, страница 1 из 1
Оборотка по любому полю в любой таблице
    #32241833
TRoUbLEs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Собственно задачу себе поставил такую, необходимо написать VBA-код, который будет подсчитывать оборот по полю за заданный период времени (или всех записей, если он не задан).
Первый вопрос в этом свете состоит в том, как VBA передать имя таблицы и имя поля в этой таблице, по которому нужно просуммировать оборот? То что я вчера пытался написать, ничего не вышло. :(
Public Funktion oborot(pole, date1 as date, date2 as date)
Вот в переменную "pole" и предполагал заносить поле таблицы и саму таблицу, но заносится значение из этой таблицы. :( Вообще, такое возможно или нет?
Далее предполагается работа с рекордсетом, где будет выбираться данные за нужный период и суммироваться. Это и будет Оборот по полю.
Ну и соответственно предполагается сделать vh_saldo, ish_saldo, но это уже дело техники. Help me please!
P.S. Если у кого-то есть такие наработки, то если не сложно, может поделитесь?
...
Рейтинг: 0 / 0
Оборотка по любому полю в любой таблице
    #32241837
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты в переменную поле передаешь что? Ссылку на поле открытого рекордсета?
...
Рейтинг: 0 / 0
Оборотка по любому полю в любой таблице
    #32241839
Фотография Vsevolod V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что такое Funktion?
...
Рейтинг: 0 / 0
Оборотка по любому полю в любой таблице
    #32241854
TRoUbLEs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То Geo:
Вот именно это у меня и не получается, передать в переменную pole ссылку на поле в таблице. :(( А еще бы, добавить переменную tabl и заносить туда имя таблицы. Как это сделать в коде???
То Vsevolod V:
Спешил фо ю. Funktion - это Function! А вместо того, чтобы к написанию придираться, лучше бы что-нибудь дельное посоветовал, а то у тебя на твое количество постов в форуме, только процентов 10 несут какую-нибудь полезную информацию, а остальное сплошная водища!
...
Рейтинг: 0 / 0
Оборотка по любому полю в любой таблице
    #32241860
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Public Function Proc1()
  Dim rs As DAO.Recordset
  Set rs = CurrentDb.OpenRecordset( "Таблица1" )
  Proc2 rs.Fields( 1 )
End Function

Sub Proc2(fld As DAO.Field)
  MsgBox fld.Name
  MsgBox fld.SourceTable
End Sub

Вот это работает. Но как, скажем, просуммировать просуммировать это поле, не открывая в Proc2 рекордсет, я не представляю. Т.е., чтобы что-то делать с полем таблицы (просуммировать и пр.), лучше использовать вот такой синтаксис Proc2

Sub Proc2(rstName As string, fldName as string)

или даже

Sub Proc2(rstName As string, fldName as string, strFilter as string)

Но, опять же, сомневаюсь, будет ли работа с рекордсетом быстрее, чем выполнение запроса. В Proc2, наверное, лучше формировать строчку(и) SQL, и их выполнять.
...
Рейтинг: 0 / 0
Оборотка по любому полю в любой таблице
    #32241890
TRoUbLEs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То Geo:
Я не совсем понял, где в этом коде я передаю имя таблицы?
> Set rs = CurrentDb.OpenRecordset("Таблица1")
Вот эта "Талица1" должна быть выбраа пользователем на этапе подстановки функции. Также, дожно быть выбрано поле из этой таблице, по которому будет происходить суммирование. Вот это у меня не получается.
Собственно сама идея проста. Есть список контрагентов и есть пара табличек "Приход", "Расход" (только не кричите, что можно было сделать одной таблицей и поставить идентификатор), плюс есть таблички ТТН, Счет-фактура и т.д. Вот и надо такую функцию, которая будет для каждого клиента выводить обороты за период из разных табличек.
...
Рейтинг: 0 / 0
Оборотка по любому полю в любой таблице
    #32241899
incold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Примерно так

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
...
Рейтинг: 0 / 0
Оборотка по любому полю в любой таблице
    #32241903
Хам трамвайный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я бы толсто
посоветовал
все заделать
в запрос
...
Рейтинг: 0 / 0
Оборотка по любому полю в любой таблице
    #32241960
TRoUbLEs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То incold:
Спасибо! Все работает! Дома не пахало, на работе заработало. :((
Только он суммирует все строки, а надо, чтобы суммировал только все строки,но по каждому контрагенту. Что-то я не совсем догоняю, можно ли это сделать? :(
То Хам трамвайный:
Ты имеешь ввиду, что на каждую табличку писать отдельный запрос??? Или ты что-то другое имеешь ввиду?
...
Рейтинг: 0 / 0
Оборотка по любому полю в любой таблице
    #32241984
incold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 TRoUbLEs
Ну блин, как мед - так и ложку
А самому облом подумать?
...
Рейтинг: 0 / 0
Оборотка по любому полю в любой таблице
    #32241989
Хам трамвайный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я бы по-другому
базу спроектировал,
чтобы делать
запрос из одной
таблицы, а не скакать
по всем
...
Рейтинг: 0 / 0
Оборотка по любому полю в любой таблице
    #32242098
TRoUbLEs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То incold:
Ладно, сегодня вечером дома возьму пивка и постараюсь разобраться. Пока ничего не получилось. :( За наводку спасибо, но если ничего не получится, то завтра ждите очередной порции вопросов.
То Хам трамвайный:
Ага, спроектировал бы. Ты что, в одной табличке отражал бы и счета-фактуры, и приходы-расходы и ТТН и еще кучу всего? Не слишком ли много данных в одну табличку? Тем более, что для каждого документа свои реквизиты.
У меня же идея сделать такую функцию, как в 1С. (Сальдо нач, сальдо конечн, оборот.. и т.п.)
...
Рейтинг: 0 / 0
Оборотка по любому полю в любой таблице
    #32242132
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выполз наверх? Тады:

это у меня и не получается, передать в переменную 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)

Но лучже, опять же по моему скромному мнению (имхо:), динамически формировать запрос(ы), а не работать с рекордсетом.


Есть список контрагентов и есть пара табличек "Приход", "Расход" (только не кричите, что можно было сделать одной таблицей и поставить идентификатор), плюс есть таблички ТТН, Счет-фактура

А зачем таблички ТТН, Счет-фактура отдельно, если не секрет? Или отгрузка товара у тебя всегда происходит по факту выписки какой-нибудь расходной накладной? Т.е. в принципе клиенту м.б. достаточно счета-фактуры, или СФ+ТТН.
...
Рейтинг: 0 / 0
Оборотка по любому полю в любой таблице
    #32242138
Хам трамвайный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот именно(как говорит Гео)
нафиг ты всю инфу держищь
в разных таблицах
причем даже лишнюю
инфу
приход и расход
вот все что тебе надобно
в расходе тебе и СФ и ТТН
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Оборотка по любому полю в любой таблице
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]