|
|
|
Вертикальные вычисления (между записями)?
|
|||
|---|---|---|---|
|
#18+
Уважаемые ловцы енотов! ;) Вопрос теоретический: возможно ли (имеет ли смысл/целесообразность/ и т.д.) выполнять расчеты между записями простыми средствами (без больших трудозатрат). Типичная проблема: форма 2 нашего баланса, та самая, где выручка - себестоимость = валовый доход - издержки = финрезультат и расчеты по ней вроде ср.торг.надбавка = валовый доход / выручка ... и т.д. Проблема решается хранением всех агрегированных данных в одной записи - месяц - выручка - себестоимость - издержки ... - и считай, что хошь! Но издержки (список из Х наименований) удобнее и рациональнее хранить списком в подчиненной таблице, связанной по коду с 1 записью главной (или я не прав?..). В итоге получается 2 отчета: горизонтально ориентированный с месяцами в строках месяц - выручка - себестоимость - издержки ... и вертикально ориентированный наим. статьи затрат / янв - дек / кв1 - кв4 статья / сумма ... сумма Как бы собрать эти два отчета в один, вертикальный? Наим. / янв - дек / кв1 - кв4 выручка себестоимость издержки ВСЕГО в т.ч. +изд1 +... +изд50 Финрез Чистая прибыль ??? ПРоблема как раз в расчетах между строками... Предложите варианты решения, плиз, кроме Dlookup... Особенно к Владимиру Санычу, в недавнем топике было его предложение с использованием коэфф., на которые домножать строки - наверное, попадалось что-то похожее? Как вообще выходить с честью из цейтнота со сложными расчетами по таблице?.. Как народ эту проблему решает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2003, 11:21 |
|
||
|
Вертикальные вычисления (между записями)?
|
|||
|---|---|---|---|
|
#18+
> Особенно к Владимиру Санычу Боюсь, что мне придется самоустраниться. Почему-то в этом форуме считается, что все специалисты по Аксессу автоматом являются специалистами по бухгалтерии и знакомы со всеми "теми самыми формами нашего баланса". Наверно, сейчас в России все программисты занимаются одними и теми же формами. Мне это странно, я не знаком с бухгалтерской терминологией ни российской, ни израильской. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2003, 11:44 |
|
||
|
Вертикальные вычисления (между записями)?
|
|||
|---|---|---|---|
|
#18+
2ВС Вопрос все-таки по програмированию - ПО СЛОЖНЫМ ВЫЧИСЛЕНИЯМ в Access, конкретно - когда нужно часто и много данных для расчетов выбирать из разных записей (в одной-то записи все просто!..) Какая разница, где оно применяется? Поэтому и вопрос озаглавлен ТЕОРЕТИЧЕСКИМ, а не практическим. 2All Ну поделитесь же мыслями и своими примерами выхода из положения, уважаемые!.. НУ как-то ведь работает тот же Project Expert, да?.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2003, 12:02 |
|
||
|
Вертикальные вычисления (между записями)?
|
|||
|---|---|---|---|
|
#18+
Но вопрос сформулирован в терминах той области, в которой я не разбираюсь. Видимо, прочитав слово издержки, кто-то может сразу сообразить, какова логическая связь между ними и всем остальным, и сам себе перевести вопрос в термины таблиц, записей и ключей. Я этого сделать не могу, в результате просто вопроса не понимаю. Если же отвечать на вопрос в новой формулировке (что делать со сложными вычислениями), то могу ответить столь же расплывчато: не жалеть времени на проектирование базы, продумать все до мелочей. Более подробно я не отвечу, потому что не понимаю, какие там данные и какова взаимосвязь между ними. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2003, 12:56 |
|
||
|
Вертикальные вычисления (между записями)?
|
|||
|---|---|---|---|
|
#18+
Могу ответить на две фразы, которые мне удалось понять, вырвав из контекста. 1. Чтобы превратить строки отчета в столбцы, надо его посадить на CrossTab Query. 2. Если требуется делать много обращений к разным записям, то можно обратиться один раз, загрузить все в память и потом брать оттуда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2003, 13:08 |
|
||
|
Вертикальные вычисления (между записями)?
|
|||
|---|---|---|---|
|
#18+
ОК, конкретизирую в упрощенном виде (много строк) Нужен отчет (строки): (1) Товарооборот (2) Себестоимость (3) Валовый доход = (1)-(2) (4) Наценка,% = (3)/(1) (5) Издержки ВСЕГО (5.1.) Зарплата ...амортизация ...налоги (5.45) и т.д. (6) Финрезультат (3)-(5) Ранее структура базы была такой: Дата ГруппаСтатьи Статья Сумма 1/1/3 Товарооборот Null 1000 1/1/3 Себестоимость Null 700 1/1/3 Издержки Зарплата 100 1/1/3 Издержки налоги 300 Мне это показалось неверным. Так? Переделали в такую: Дата Товарооборот Себестоимость .../остальные агрегаты/ Связь_с_табл_издержек 1/1/3 1000 700 ... <Линк на ключ> Подч. таблица издержек: КлючЖурналаАгрегатов Статья Сумма <Ключ> Зарплата 50 <Ключ> Налоги 250 Так корректнее, верно? НО: в первом случае были проблемы с расчетами (между записями!!!), зато отчет был точно как надо, как описано выше ("Нужен отчет (строки):") во втором нет проблем с расчетами (в пределах одной записи все просто), но отчет распался на два: 1. Отчет Агрегатов Дата Товарооборот Себестоимость .../остальные агрегаты/ Издержки_ВСЕГО и 2. Издержки Издержки_ВСЕГО 100%_к_итогу в т.ч. зарплата 20% налоги 45% ... Как свести отчет к нужному (первому) варианту?.. Расчеты сразу в таблице при заполнении из формы вести нельзя: а) так завещал великий Хто-то б) когда сложишь товарообороты / себестоимости по нескольким датам (за период), что, % (процент) наценки тоже складывать? ;))))))))))))) --- Так, вижу ответ ВС. Спасибо! Но: 1.CrossTab и так использую на таблице издержек, по вертикали идут статьи, по горизонтали месяцы. В отчете Агрегатов же по горизонтали их наименования (товарооборот, себестоимость...), по вертикали - месяцы и группировка поквартально. Думал над вариантом сделать "поворот" и таблицы агрегатов, но это уже не кросстаб, а натуральное транспонирование всей таблицы получится. Ручками?.. 2. Это получится уже на VBА, так? Тут была тема с адресацией к любому полю таблицы, ее использовать?.. Можно, но мучительно долго... Вот и ищу способ попроще... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2003, 13:40 |
|
||
|
Вертикальные вычисления (между записями)?
|
|||
|---|---|---|---|
|
#18+
>Вот и ищу способ попроще... MS Excel ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2003, 13:52 |
|
||
|
Вертикальные вычисления (между записями)?
|
|||
|---|---|---|---|
|
#18+
ХЛ хорош, когда 1 (один) раз составил и забыл. А теперь представим (только представим ;), что есть несколько отчетов и их нужно сводить в один каждый месяц. Что удобнее - лепить еще сводный лист в ХЛ и долбить кучу ссылок на листы с данными, ошибаясь в формулах (как и было до базы) или запустить один запросик, повышающий уровень группировки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2003, 13:57 |
|
||
|
Вертикальные вычисления (между записями)?
|
|||
|---|---|---|---|
|
#18+
Не въехал в "улучшения". "раньше" ключ связи - дата. Создай запрос с многократной связью таблицы на себя по значению ключа и различным значениям кода группы - будет тебе счастье. т.е. "горизонтальный набор". Вычисляй в ем что хошь "по горизонталям". Если набор кодов_группы заведомо фиксирован - запрос строится и в "жесткую". если нет - кросс-табом можно получить. Правда плавающее количество столбцов для отчета (или нового запроса на его основе) не фонтан. - тады SQL кваери-дефов придется редактировать программно. ЗЫ: да, кросс табу, если каких записей (по группам) не хватает, лучше строить на основе юниона с пустышкой: - [первый столбец - дата (константа,скажем наподобие #01.01.1900#) As aDate, второй столбец - коды групп из справочника (все), остальные - аналог прочих столбов таблы с 0 во всех полях] -т.е. забиваешь жесткое число "столбцов"(групп), будущего перекрестного. И имеешь набор данных с "полным набором "столбов", т.е. пригодный для создания юзающих его запросов (или репортов). А в этих уж считай, как хошь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2003, 16:23 |
|
||
|
Вертикальные вычисления (между записями)?
|
|||
|---|---|---|---|
|
#18+
По горизонталям и в новой структуре хорошо вычисляется ;))) Проблема в том , что вычисления всегда будут и по горизонтали, и по вертикали. А старая структура была ну совсем ненормализованной - зачэм куча строк, где группа - "Издержки?.." Ответа нет... Спецы, отзывайтесь!.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2003, 17:25 |
|
||
|
Вертикальные вычисления (между записями)?
|
|||
|---|---|---|---|
|
#18+
тады не въехал в проблему. "Вертикаль" это разные балансы (даты)? И какие проблемы? В отчетах - есть группировки. Как правило достаточно. В формах (ежели простые) - примечания. Группы можно обсчитывать и по рекордсетам. Опять же не проблема налепить группировки одного запроса и вывести несколько субформ. по типам группировки. А в чем вопрос? Иметь ексел в аксесе? так сбрось данные ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2003, 17:43 |
|
||
|
Вертикальные вычисления (между записями)?
|
|||
|---|---|---|---|
|
#18+
Простой пример: Есть 2 строки: Дата1 Сальдо1 Приход Расход Возврат Оплата Коэф1 Дата2 Сальдо2 Приход Расход Возврат Оплата Коэф2 Как рассчитать Сальдо1*Коэф2-Сальдо2 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2003, 15:13 |
|
||
|
Вертикальные вычисления (между записями)?
|
|||
|---|---|---|---|
|
#18+
>Как рассчитать Сальдо1*Коэф2-Сальдо2 ? Я делал подобное, но без умножения/деления Просто 5*Значение1-Значение2+Значение3*8+значение7+значение7 Храняться Значения и коэфициент (со знаком). Запросом - просто все суммируется. В товем конкретном случае надо все ручками делат через DlookUp c критерием, например. Или действительно в Екцеле. Скинул все данные на листы, а на отчетном листе ссылок на нужные позиции по напихал. И привалило бы тебе счастье. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2003, 15:30 |
|
||
|
Вертикальные вычисления (между записями)?
|
|||
|---|---|---|---|
|
#18+
если строки именно 2 и именно это с ними надо сделать - открой рекордсет и посчитай. если же есть некое правило, по которому со строками "такими-то" надо делать "так-то" - тогда надо напрячься, составить запрос, где данные по критерию "такие-то" влезали "в строку" и возиться с ними. а "вертикально" обсчитывать агрегаты по функциям "строк" (в т.ч. с условиями). Например для именно этих двух строк - кинь таблу дважды на конструктор запросов. Выставь критерии отбора для одной записи в первой (таблице), для другой записи - во второй (желательно по ключу). Получишь общую строку. (т.е. получишь "прямое произведение наборов - без Join-ов, но с where, по 1-й записи в каждом, итого - 1 запись). В ней и считай. Select a.Saldo as SaldoA, b.Saldo as SaldoB, a.Koef as KoefA, bKoef as KoefB, a.Saldo - b.Saldo * a.Koef as MyResult from tabla as a, tabla as b where a.key = [aKey] and b.key = [bKey]; В общем случае - может иметься связь или в join, или в where наподобие: a.key=b.key + [Shift]. ну и т.п. и т.д. Если ломает составлять требуемые наборы данных - работай с рекордсетами. (извини, оторвали) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2003, 16:31 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32166943&tid=1681386]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
59ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
| others: | 220ms |
| total: | 382ms |

| 0 / 0 |
