Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Подчиненная таблица  [new]
Ncrs
Member

Откуда:
Сообщений: 15
Всем привет!
Пожалуйста помогите разобраться.
Есть таблица (главная форма) "Квитанции". В ней поля, которые заполняются вручную (№ квитанции, дата, ФИО и т.п.) и поля, которые выбираются из других таблиц (Организация, Агент). Так вот, в ней нужна подчиненная таблица Сборы, т.е. в одной квитанции может быть несколько сборов. Есть отдельная таблица (форма справочник) Сборы, там заведены все используемые в работе виды сборов.
Как мне связать эти две таблицы, по какому полю?
Спасибо всем заранее)
6 дек 17, 09:40    [21009688]     Ответить | Цитировать Сообщить модератору
 Re: Подчиненная таблица  [new]
MrShin
Member

Откуда:
Сообщений: 909
Это типичная связь многие-ко-многим, решается через создание таблицы связи, назовем ее, например, "СборыКватанции", в ней два поля - ключ из таблицы "Квитанции" и ключ из справочной таблицы "Сборы"
6 дек 17, 09:48    [21009709]     Ответить | Цитировать Сообщить модератору
 Re: Подчиненная таблица  [new]
Joss
Member

Откуда: г. Минск
Сообщений: 3845
MrShin, +1
6 дек 17, 12:40    [21010468]     Ответить | Цитировать Сообщить модератору
 Re: Подчиненная таблица  [new]
Ncrs
Member

Откуда:
Сообщений: 15
Спасибо большое, все получилось. А теперь подскажите, кто знает, как мне общую сумму по одной квитанции (если несколько сборов) получить?
6 дек 17, 15:31    [21011397]     Ответить | Цитировать Сообщить модератору
 Re: Подчиненная таблица  [new]
MrShin
Member

Откуда:
Сообщений: 909
Соединить все 3 таблицы в конструкторе запросов, включить суммирование и выбрать функцию суммирования для поля величины сбора.
6 дек 17, 16:36    [21011780]     Ответить | Цитировать Сообщить модератору
 Re: Подчиненная таблица  [new]
vmag
Member

Откуда: г. Одинцово
Сообщений: 2671
MrShin
Соединить все 3 таблицы в конструкторе запросов, включить суммирование и выбрать функцию суммирования для поля величины сбора.


Хочу немного уточнить, дабы уберечь ТС от возможных граблей...
1. В таблице Сборы нужно хранить действующую сумму сбора, на рисунке упрощенный вариант-
наименование сбора + текущая стоимость сбора + С какой даты эта стоимость.
2. В таблице СборыКвитанции стоимость сбора на дату квитанции (берется при формировании из таблицы Сборы).
3. Естественно в сумму квитанции должна идти стоимость из таблицы СборыКвитанции.

Что это даст? Самое главное - при изменении тарифов Сборов не поплывут ранее выданные Квитанции.

Внимание! Это только направление ухода от граблей! На самом деле по хорошему нужна еще одна таблица -
История стоимостей сборов, подчиненная для таблицы Сборы (для прокурора, для истории как таковой,
для переформирования ранее созданной квитанции, и т.д.), но это уже ветка не акцесс, а проектирование бд...

К сообщению приложен файл. Размер - 39Kb
7 дек 17, 01:23    [21013302]     Ответить | Цитировать Сообщить модератору
 Re: Подчиненная таблица  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 4671
Ncrs
т.е. в одной квитанции может быть несколько сборов.
может чё не понял,но где здесь многие-ко-многим
7 дек 17, 01:49    [21013310]     Ответить | Цитировать Сообщить модератору
 Re: Подчиненная таблица  [new]
vmag
Member

Откуда: г. Одинцово
Сообщений: 2671
sdku
может чё не понял,но где здесь многие-ко-многим

https://support.office.com/ru-ru/article/Видео-создание-связей-типа-многие-ко-многим-e65bcc53-8e1c-444a-b4fb-1c0b8c1f5653
7 дек 17, 02:37    [21013330]     Ответить | Цитировать Сообщить модератору
 Re: Подчиненная таблица  [new]
Ncrs
Member

Откуда:
Сообщений: 15
Благодарю всех за помощь! Как вытащить итоги в отдельном запросе я понимаю, я наверное не точно выразилась, что мне надо сделать. У меня есть форма (изображение прикреплено к ответу) и отдельный запрос "итоги" (не знаю как вставить сюда картинки), состоящий из трех полей: номер квитанции, дата и общая сумма сборов по квитанции. Так вот, каким образом можно в существующую форму (источник записей - запрос из трех объединенных таблиц, но без итогов) вставить общую сумму, вычисляемую из этого отдельного запроса? Чтобы можно было видеть в форме квитанции общую сумму по сборам.
Надеюсь понятно объяснила)

К сообщению приложен файл. Размер - 34Kb
7 дек 17, 08:44    [21013511]     Ответить | Цитировать Сообщить модератору
 Re: Подчиненная таблица  [new]
MrShin
Member

Откуда:
Сообщений: 909
Ncrs,

Просто добавьте итоги в подформу (кнопка "Итоги" при просмотре формы в режиме таблицы) и выберите сумму для колонки Стоимость, не нужно никаких отдельных запросов
7 дек 17, 10:27    [21013835]     Ответить | Цитировать Сообщить модератору
 Re: Подчиненная таблица  [new]
Ncrs
Member

Откуда:
Сообщений: 15
Спасибо огромное) Да, так намного проще)) В форме все красиво. А в отчет (печать текущей квитанции) как эту сумму вытащить, не подскажете?
7 дек 17, 11:04    [21014025]     Ответить | Цитировать Сообщить модератору
 Re: Подчиненная таблица  [new]
Ncrs
Member

Откуда:
Сообщений: 15
То есть нет, не получается. Если просто добавить итоги, то неверная сумма по квитанции (не учитывается количество сборов). Как на примере картинки формы выше, в одной квитанции два сбора, один сбор стоимостью 150, и два сбора стоимостью 200. Итого по квитанции должно быть 1*150 + 2*200 = 550. А он показывает просто итог 150+200, не учитывая количество. Я добавила свободное поле в подчиненной форме, Сумма = Количество * Стоимость. Но итог по этому полю не выводится, access предлагает показать только количество значений...(( не пойму как сделать общую сумму по квитанции.
7 дек 17, 11:53    [21014286]     Ответить | Цитировать Сообщить модератору
 Re: Подчиненная таблица  [new]
MrShin
Member

Откуда:
Сообщений: 909
Ncrs,

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

В отчете просто делаете подотчет и нижний колонтитул добавляете поле с источником данных вида =Sum([СуммаВсегоПоСбору])
7 дек 17, 13:07    [21014799]     Ответить | Цитировать Сообщить модератору
 Re: Подчиненная таблица  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 4671


К сообщению приложен файл (tmp.rar - 17Kb) cкачать
7 дек 17, 15:04    [21015352]     Ответить | Цитировать Сообщить модератору
 Re: Подчиненная таблица  [new]
Ncrs
Member

Откуда:
Сообщений: 15
Ээээх у меня не так чуток база сделана, сумма сбора берется из справочника сборов. Если я делаю вычисляемое поле, он вычисляет огромное значение, видимо по всем квитанциям. Сжала свою базу по максимуму и удалила все лишние запросы формы и отчеты. Выложила на Яндекс.Диск, вот ссылка: https://yadi.sk/d/Awl5RTTR3QQSTb, посмотрите, пожалуйста, кому не сложно.
7 дек 17, 16:53    [21015825]     Ответить | Цитировать Сообщить модератору
 Re: Подчиненная таблица  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 4671
Ncrs,
О нежелательности подстановки в таблице(хотя это возможно) не раз говорилось на форуме. Структура должна быть примерно такой,как в примере(связь главной и сборы-это то о чем Вы спрашивали
Структуру надо менять-на той что Вы используете "далеко не уедешь"
Квитанции,сборы и размерС - справочники для тбл.главная.
Используйте связи с сохранением целостности это страхует от возможных ошибок

К сообщению приложен файл (tmp.rar - 24Kb) cкачать
7 дек 17, 18:50    [21016242]     Ответить | Цитировать Сообщить модератору
 Re: Подчиненная таблица  [new]
alecko
Member

Откуда: Башкирия
Сообщений: 123
посмотрите, может подойдет.

К сообщению приложен файл (Квитанции.rar - 119Kb) cкачать
7 дек 17, 22:06    [21016676]     Ответить | Цитировать Сообщить модератору
 Re: Подчиненная таблица  [new]
Ncrs
Member

Откуда:
Сообщений: 15
sdku
Структура должна быть примерно такой,как в примере.

Спасибо! Буду пыхтеть, менять структуру)
8 дек 17, 09:03    [21017128]     Ответить | Цитировать Сообщить модератору
 Re: Подчиненная таблица  [new]
Ncrs
Member

Откуда:
Сообщений: 15
alecko
посмотрите, может подойдет.

Спасибо большое, очень благодарю, целую функцию vba написали, вы прям герой в моих глазах)) однако моих скудных познаний в этом деле не хватает, ведь эту сумму со всеми данным формы мне еще в отчет надо как-то вывести... А можно с помощью vba как-то записать полученную сумму в таблицу "квитанции", создать для этого отдельное числовое поле в таблице, например, "СуммаКвит"? Если подскажете, цены Вам не будет)))
8 дек 17, 09:12    [21017145]     Ответить | Цитировать Сообщить модератору
 Re: Подчиненная таблица  [new]
alecko
Member

Откуда: Башкирия
Сообщений: 123
Ncrs,
Вы ж писали что запросы умеете строить и извлекать из них данные, там все на запросе и построено.
сумму лучше считать в отчете.
про какой отчет речь?
p.s. зачем вообще для печати например определенной записи, (которая пусть будет в середине списка: например она будет 25987-й из 70тыс.) нужно пролистывать эти записи? кассир как я понимаю всегда добавляет новую запись. а для поиска нужно создавать другую форму-поэтому форм лучше сделать 2 одна для поиска, другая для обработки.
как пример форма для поиска
+
21017721
8 дек 17, 12:24    [21017732]     Ответить | Цитировать Сообщить модератору
 Re: Подчиненная таблица  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 4671
Ncrs,
Не занимайтесь ерундой(целая пользовательская функция для вычисления суммы),желание добавить в таблицу вычисляемого поля,много кода для элементарного вычисления-все это косвенное подтверждение ошибочности проектирования. Переделывайте структуру
8 дек 17, 12:26    [21017741]     Ответить | Цитировать Сообщить модератору
 Re: Подчиненная таблица  [new]
JavaStudent
Member

Откуда:
Сообщений: 65
Ncrs, я у себя делаю так : В главной таблице есть счетчик key, в подчиненной есть поле key (не счетчик)

Дальше написал функцию для подсчета любых сумм в любой таблице с любым фильтром, в вашем случае key

Function Sz(istok As String, pole1 As String, pole2 As String, Filter As String) as Currency
Dim dbs As Database
Dim rst As Recordset
Set dbs = CurrentDb()
sz = 0
If Filter = "" Then ' Если нет фильтра
If pole2 = "" Then ' Если нет второго поля, это когда кол*цена например
Set rst = dbs.OpenRecordset("select Sum(" & nz(pole1) & ") as isum FROM " & istok)
Else
Set rst = dbs.OpenRecordset("select Sum(" & nz(pole1) & "*" & nz(pole2) & ") as isum FROM " & istok)
End If
Else
If pole2 = "" Then
Set rst = dbs.OpenRecordset("select Sum(" & nz(pole1) & ") as isum FROM " & istok & " WHERE " & Filter)
Else
Set rst = dbs.OpenRecordset("select Sum(" & nz(pole1) & "*" & nz(pole2) & ") as isum FROM " & istok & " WHERE " & Filter)
End If
End If
If rst.EOF Then
Else
sz = CCur(nz(rst("isum"))
End If
End Function

Дальше в подчиненной форме где меняется цена, кол пересчитываете сумму в поле главной формы.

' Если только кол
сумма=sz("Имя подчиненной таблицы", "поле сумму которого считаем","","key=" & key)
' Если цена*кол
сумма=sz("Имя подчиненной таблицы", "кол","цена","key=" & key)
8 дек 17, 14:15    [21018251]     Ответить | Цитировать Сообщить модератору
 Re: Подчиненная таблица  [new]
Очень много букв
Guest
JavaStudent,

Function Sz(istok$, pole1$, pole2$, Filter$) As Currency
    If Filter = "" Then Filter = "1 = 1"
    If pole2 = "" Then pole2 = "1"
    With CurrentDb.OpenRecordset( _
                   "select Sum(" & pole1 & "*" & pole2 & ") as isum FROM " _
                   & istok & " WHERE " & Filter)
        Sz = Nz(.Fields("isum"))
        .Close
    End With
End Function
8 дек 17, 16:10    [21018817]     Ответить | Цитировать Сообщить модератору
 Re: Подчиненная таблица  [new]
Ncrs
Member

Откуда:
Сообщений: 15
Всем огромное спасибо за помощь!
У меня получилось все, что мне было надо) Благодарю за полученный опыт) Всем хорошего настроения и удачи!)
8 дек 17, 16:56    [21018945]     Ответить | Цитировать Сообщить модератору
 Re: Подчиненная таблица  [new]
JavaStudent
Member

Откуда:
Сообщений: 65
pole1$ - такое описание переменной вижу в 1 раз попробую, спасибо

Насчет: where 1=1 , похоже на бред пробовать не буду.

Насчет умножать на 1 , когда нет 2 поля, смысла не вижу.

И нет проверки на отсутствие записей (EOF)

Я как понял полезно помогать, глядишь и тебя разуму научат.
8 дек 17, 19:47    [21019302]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft Access Ответить