Как сделать поле для суммы


  • поле
    greenyojik
    Member
    Откуда:
    Сообщений: 13
    Доброго времени суток!
    Я уже долго пытаюсь разобраться с базой (делаю для себя, работаеть в exel уже неудобно), но решение так и не нашла на форумах (есть похожие вопросы, но решение этих вопросов мне никак не помогает). Я только начала осваивать access и мне нужна ваша помощь!

    Есть база, в ней три таблицы: Приход, Расход и Справочник деталей (Добавлю потом таблицу Наличие деталей) Фото связей таблиц прикладываю

    Важные для меня поля в таблице Приход и Расход, это:
    Модель детали
    Цена
    Количество

    Нужно:
    В отдельную таблицу или запрос, в поле Количество должно вычисляться количество деталей на данный момент (т.е. приход минус расход), кол-во должно проверяться по полю Модель детали (модели могут повторяться). Я думала сделать графу Сер.номер детали, но с такими дополнительными данными, наверное, будет еще сложнее.
    1. Вычисляемое поле сделать в ОДНОЙ и той же таблицы у меня получается, но в другой таблице вычислить разницу одних полей из разных таблиц не получается (они не отображаются). Подскажите как это сделать, пожалуйста!
    2. Если у меня получится сделать первый пункт, как сделать, чтобы кол-во считалось именно соответственно полю Модель детали, а не как попало. Как это сделать даже представления не имею...
    Помогите пожалуйста!
    К сообщению приложен файл. Размер - 42Kb

    mds_world
    Member
    Откуда: Ташкент
    Сообщений: 27467
    select s.Model, sum(p.KolvoDetaley) as Приход, sum(r.KolvoDetaley) as Расход, Приход-Расход as Остаток from Spravo4nikDetali s, ProhodDetali p, RashodDetali r, s left join p on s.KodDetali=p.KodDetali, s left join r on s.KodDetali=r.KodDetaly group by s.Model
    Анатолий ( Киев )
    Guest
    Создайте два отдельніх запроса на таблицах Приход и Расход с группировкой по коду детали и Sum по интересующим полям. Основной запрос стройте на справочнике и этих запросах (связь с запросом на табл. Расход должна быть LEFT JOIN).
    Потом это можно оформить в виде одного запроса с подзапросами, но это - потом.

    ЗЫ. Зачем вы в таблицах Приход и Расход храните Наименование, марку и модель детали, если все это можно взять из справочника?

    Akina
    Member
    Откуда: Зеленоград, Москва, Россия
    Сообщений: 16295
    Зачем вообще две таблицы? приход и расход - это одна и та же операция, которая отличается лишь знаком влияния на общее количество (увеличивает или уменьшает).
    mds_world
    Member
    Откуда: Ташкент
    Сообщений: 27467
    Мой вариант запроса неверный. Анатолий ( Киев ) дал правильный ответ.
    greenyojik
    Member
    Откуда:
    Сообщений: 13
    Добрый день!
    Сложить поля из разных таблиц получилось!! Спасибо за помощь! Видно на скрине, что показывает правильно все! Как закачать сюда несколько картинок? Закачивается только одна..

    Вопрос: Как теперь посчитать и отобразить, сколько деталей сейчас есть в наличии?
    Т.е. по приходу 1вида (Model) детали 10 шт, по расходу 2шт, значит в наличии 8шт.

    Подскажите, пожалуйста!
    К сообщению приложен файл. Размер - 16Kb

    Анатолий ( Киев )
    Guest
    greenyojik
    по приходу 1вида (Model) детали 10 шт, по расходу 2шт, значит в наличии 8шт.
    Добавьте в конструкторе запроса поле Остаток: [ВсегоПриход]-NZ([ВсегоРасход])
    greenyojik
    Member
    Откуда:
    Сообщений: 13
    Анатолий ( Киев )
    greenyojik
    по приходу 1вида (Model) детали 10 шт, по расходу 2шт, значит в наличии 8шт.
    Добавьте в конструкторе запроса поле Остаток: [ВсегоПриход]-NZ([ВсегоРасход])

    Спасибо! Как добавить поле к конструкторе запроса? Я создала поле Ostatok в справочнике,как в конструкторе не знаю..
    Выражение подсчета явно я неправильно написала, как это правильно оформить?

    Вот скрин
    К сообщению приложен файл. Размер - 100Kb

    greenyojik
    Member
    Откуда:
    Сообщений: 13
    Программист-Любитель
    Первая грубая ошибка: две аналогичные таблицы вместо одной.
    Вторая грубая ошибка - вычисляемое поле в таблице.

    Сходите на http://www.sql.ru/forum/actualthread.aspx?tid=998443 и внимательно изучите топик.

    ОК. Почитаю. Спасибо за ссылку.
    Я не программист и на программиста не учусь.. Если не смотреть на две грубые ошибки, как все-таки сделать расчет и вывод кол-во деталей в наличии? Если эта функция заработает, то буду делать нормальные таблички и сидеть дальше разбираться, просто уже две недели мучаю этот вопрос.. Подскажите, если знаете, пожалуйста!

    Анатолий ( Киев )
    Guest
    greenyojik, на вашей картинке Prihod и Rashod, это запросы с итогами? Интересно посмотреть на текст этих запросов.
    Поле Ostatok в справочнике делать не нужно, в осноном запросе такое поле можно создать, указав в верхней строке:
    Ostatok: Prihod.KolVoDetaley - NZ(Rashod.KolVoDetaley)
    Но при вашей связи справочника и Rashod при отсутствии расхода по какой-то детали вы потеряете остаток. Я же писал про LEFT JOIN! Т.е. эта связь должна быть со стрелочкой к Rashod. Если не умеете, то нужно мышкой указать на линию связи, щелкнуть и выбрать вариант.
    greenyojik
    Member
    Откуда:
    Сообщений: 13
    Анатолий ( Киев )
    greenyojik, на вашей картинке Prihod и Rashod, это запросы с итогами? Интересно посмотреть на текст этих запросов.
    Поле Ostatok в справочнике делать не нужно, в осноном запросе такое поле можно создать, указав в верхней строке:
    Ostatok: Prihod.KolVoDetaley - NZ(Rashod.KolVoDetaley)
    Но при вашей связи справочника и Rashod при отсутствии расхода по какой-то детали вы потеряете остаток. Я же писал про LEFT JOIN! Т.е. эта связь должна быть со стрелочкой к Rashod. Если не умеете, то нужно мышкой указать на линию связи, щелкнуть и выбрать вариант.

    ответ на первый вопрос: да, вроде как запрос с итогом (сделан через мастер запросов)

    Приход:
    SELECT DISTINCTROW Prihod.KodDetali, Sum(Prihod.KolVoDetaley) AS [Sum - KolVoDetaley]
    FROM Prihod
    GROUP BY Prihod.KodDetali;

    Расход:
    SELECT DISTINCTROW Rashod.KodDetaly, Sum(Rashod.KolVoDetaley) AS [Sum - KolVoDetaley]
    FROM Rashod
    GROUP BY Rashod.KodDetaly;

    Inner Join делать не умею, но так как вы сказали, получилось!
    К сообщению приложен файл. Размер - 37Kb

    greenyojik
    Member
    Откуда:
    Сообщений: 13
    Изменила запрос Остаток. Как-то он уже работает, но считает не правильно
    К сообщению приложен файл. Размер - 91Kb
    Программист-Любитель
    Member
    Откуда:
    Сообщений: 16824
    greenyojik
    Я не программист и на программиста не учусь.. Если не смотреть на две грубые ошибки, как все-таки сделать расчет и вывод кол-во деталей в наличии? Если эта функция заработает, то буду делать нормальные таблички и сидеть дальше разбираться, просто уже две недели мучаю этот вопрос.. Подскажите, если знаете, пожалуйста!

    Категоричски против. СНАЧАЛА надо сделать нормальные таблицы, а потом строить на них расчеты. Глядишь, неделю бы и сэкономили бы.
    йййй
    Guest
    Программист-Любитель
    greenyojik
    Я не программист и на программиста не учусь.. Если не смотреть на две грубые ошибки, как все-таки сделать расчет и вывод кол-во деталей в наличии? Если эта функция заработает, то буду делать нормальные таблички и сидеть дальше разбираться, просто уже две недели мучаю этот вопрос.. Подскажите, если знаете, пожалуйста!

    Категоричски против. СНАЧАЛА надо сделать нормальные таблицы, а потом строить на них расчеты. Глядишь, неделю бы и сэкономили бы.
    Дык у девушки фактически получился вариант 2. За тем исключением, что она собирается хранить текущие остатки, и хранить их в справочнике номенклатуры. Тоже имеет право на жизнь, если количество мест учёта (читай: складов), никогда не изменится. Структура вполне себе может развиваться дальше. Задел неплохой, в общем.

    По поводу существа вопроса: создайте новый запрос, перейдите в режим sql и вставьте туда следующий текст

    select KodDetali, KolVoDetaley from PrihodDetali union all select KodDetali, -KolVoDetaley from RashodDetali
    (Этот запрос соберет все ваши приходы и расходы в виде одной таблицы, так, чтобы их можно было складывать между собой.)
    Запрос сохраните и дальше уже известным вам способом используйте его в другом запросе, где к нему можно прицепить таблицу Spravo4nikDetali, и все строки просуммировать.

    (это другой вариант вычисления остатков, не лучше и не хуже того, что предложил Анатолий (Киев))

    greenyojik
    Member
    Откуда:
    Сообщений: 13
    Получилось посчитать приход минус расход = наличие )))
    В общем не знаю насколько правильно, еще буду тестить, но вроде как работает!
    Нужно на основе запроса Остаток сделать запрос с итогом с MAX по графе остаток.
    К сообщению приложен файл. Размер - 37Kb
    greenyojik
    Member
    Откуда:
    Сообщений: 13
    йййй
    Программист-Любитель
    пропущено...

    Категоричски против. СНАЧАЛА надо сделать нормальные таблицы, а потом строить на них расчеты. Глядишь, неделю бы и сэкономили бы.

    Дык у девушки фактически получился вариант 2. За тем исключением, что она собирается хранить текущие остатки, и хранить их в справочнике номенклатуры. Тоже имеет право на жизнь, если количество мест учёта (читай: складов), никогда не изменится. Структура вполне себе может развиваться дальше. Задел неплохой, в общем.

    По поводу существа вопроса: создайте новый запрос, перейдите в режим sql и вставьте туда следующий текст

    select KodDetali, KolVoDetaley from PrihodDetali union all select KodDetali, -KolVoDetaley from RashodDetali
    (Этот запрос соберет все ваши приходы и расходы в виде одной таблицы, так, чтобы их можно было складывать между собой.)
    Запрос сохраните и дальше уже известным вам способом используйте его в другом запросе, где к нему можно прицепить таблицу Spravo4nikDetali, и все строки просуммировать.

    (это другой вариант вычисления остатков, не лучше и не хуже того, что предложил Анатолий (Киев))

    Спасибо

    greenyojik
    Member
    Откуда:
    Сообщений: 13
    greenyojik
    Получилось посчитать приход минус расход = наличие )))
    В общем не знаю насколько правильно, еще буду тестить, но вроде как работает!
    Нужно на основе запроса Остаток сделать запрос с итогом с MAX по графе остаток.

    А хотя.. Не правильно работает)
    Из-за MAX не учитывается, что может быть несколько приходов с количеством (он берет больший приход и вычитает из него расход...)

    greenyojik
    Member
    Откуда:
    Сообщений: 13
    Как сделать, чтобы считало приход деталей (сумма всех приходов) минус расход деталей (сумма всех расходов)???

    Запрос Приход

    SELECT DISTINCTROW Prihod.KodDetali, Sum(Prihod.KolVoDetaley) AS [Sum - KolVoDetaley] FROM Prihod GROUP BY Prihod.KodDetali;

    Запрос Расход
    SELECT DISTINCTROW Rashod.KodDetaly, Sum(Rashod.KolVoDetaley) AS [Sum - KolVoDetaley]
    FROM Rashod
    GROUP BY Rashod.KodDetaly;

    Оно считает:
    приход деталей (1-ый приход) минус расход деталей (1-ый расход)
    приход деталей (2-ый приход) минус расход деталей (2-ый расход) и так далее...

    Запрос Остатки:

    SELECT Spravo4nikDetali.NameDetali, Spravo4nikDetali.Marka, Spravo4nikDetali.Model, [Prihod].[KolVoDetaley]-Nz([Rashod].[KolVoDetaley]) AS Ostatok FROM (Spravo4nikDetali LEFT JOIN Prihod ON Spravo4nikDetali.KodDetali = Prihod.KodDetali) LEFT JOIN Rashod ON Spravo4nikDetali.KodDetali = Rashod.KodDetali

    Хотя есть запрос расход и запрос приход, где по коду детали уже просуммирован и приход и расход....

    Помогите в чем дело??

    greenyojik
    Member
    Откуда:
    Сообщений: 13
    Придумала! :-)))

    Как посчитать количество деталей на складе в данный момент?
    Решение:
    1. Создаем табличку Журнал операций (в нем расход и приход)
    2. Создаем табличку Справочник деталей (в нем описание детали)
    3. Создаем связь между табличками
    4. Создаем запрос Кол-во деталей в наличии
    Код запроса:

    SELECT DISTINCTROW Journal.KodDetali, Sum(Journal.KolVo) AS [Sum - KolVo] FROM Journal GROUP BY Journal.KodDetali;

    5. И самое главное:
    Когда заполняем Справочник деталей в журнале операций Количество деталей в таблице Расход мы должны отражать со знаком МИНУС! И тогда все отлично считает! Считает положительные, нулевые и отрицательные числа!

    Все решилось! Всем спасибо!

    Виртуальные форумы   Темы из всех форумов за 3 дня   Мои избранные форумы Использование СУБД   Microsoft SQL Server   Firebird, InterBase   Oracle   Microsoft Access   IBM DB2, WebSphere, IMS, U2, etc   MySQL   PostgreSQL   OLAP и DWH   Sybase ASA, ASE, IQ   Informix   Другие СУБД   FoxPro, Visual FoxPro   Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M   SQLite   NoSQL, Big Data Дискуcсии   Сравнение СУБД   Проектирование БД   Работа   ERP и учетные системы   Разработка информационных систем   Тестирование и QA   Отчетные системы   Просто треп   Наши за рубежом   Сертификация и обучение   Hardware   Управление процессом разработки ИС   Юридические вопросы в ИТ Microsoft.NET   WinForms,.Net Framework   ASP.NET   ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM   WPF, Silverlight   WCF, Web Services, Remoting Программирование   Delphi   C++   Visual Basic   Программирование   Java   Разработка под мобильные платформы   PowerBuilder   Microsoft Office   SharePoint   XML, XSL, XPath, XQuery Web Технологии   PHP, Perl, Python   HTML, JavaScript, VBScript, CSS Администрирование ОС   Windows   Unix-системы   Другие: Mac OS, PalmOS, BeOS, PocketPC SQL.RU   Обсуждение нашего сайта   Вопрос-Ответ   Test


    Поделись с друзьями



    Рекомендуем посмотреть ещё:


    Закрыть ... [X]

    Вычисляемые поля в форме БД Access 2003 Ввод вычисляемых полей в форму Как сделать из бумаги корону для кукол

    Как сделать поле для суммы Как сделать поле для суммы Как сделать поле для суммы Как сделать поле для суммы Как сделать поле для суммы Как сделать поле для суммы Как сделать поле для суммы Как сделать поле для суммы Как сделать поле для суммы

    ШОКИРУЮЩИЕ НОВОСТИ