0 / 0 / 0
Регистрация: 25.01.2019
Сообщений: 11
1

Автоматическое изменение количества в одной таблице при выборе позиции из другой таблицы

04.03.2019, 21:50. Показов 2953. Ответов 41
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, уважаемые!

Помогите советом, подсказкой

Штука такая.
Есть первая таблица "Продукция" с полями "Товар" и "Количество".
Есть вторая таблица "Наборы" с полем "Товар".
Во второй таблице "Наборы" поле "Товар" - раскрывающийся список с данными из первой таблицы "Продукция", поле "Товар".

Все заполняется через форму.

Мне необходимо, сделать так, чтобы при выборе во второй таблице "Наборы" поле "Товар" количество этого товара вычиталось в поле "Количество" в первой таблице "Продукция".
Нужно для того, чтобы при формировании последующих "наборов" уже выбранные ранее "товары" не попадали в раскрывающийся список.

Не могу самостоятельно найти ответ на эту головоломку
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.03.2019, 21:50
Ответы с готовыми решениями:

Автоматическое заполнение поля таблицы на основании выбора в другой таблице
Уважаемые Помогите плиз. Есть две таблицы: Документы и Контакты. В первой заполняется два поля:...

Автоматическое изменение значений полей при Выборе значения в поле со списком
При выборе поля типа "поле со списком", следующее поле тип "поле" установить значение из таблицы....

Автоматическое изменение значений полей при Выборе значения в поле со списком из связанных таблиц
Добрый день, бьюсь над проблемкой и не знаю как ее решить: Имеется несколько связанных таблиц, их...

Изменение данных одной колонки ТЧ при выборе другой
Всем привет! Управляемые формы. Есть задача: в табличной части на форме 2 колонки. В одной путь к...

41
Заблокирован
04.03.2019, 22:06 2
Цитата Сообщение от Anastasya123 Посмотреть сообщение
Не могу самостоятельно найти ответ на эту головоломку
Запросом на обновление при закрытии набора - вычитаем.
При открытии существующего набора - наоборот, возвращаем на место (на случай редакции - удаления записей)
... возможны вариации.
0
Модератор
Эксперт MS Access
5178 / 2575 / 641
Регистрация: 12.06.2016
Сообщений: 6,849
04.03.2019, 23:12 3
Цитата Сообщение от Anastasya123 Посмотреть сообщение
сделать так, чтобы при выборе во второй таблице "Наборы" поле "Товар" количество этого товара вычиталось в поле "Количество" в первой таблице "Продукция"

Нужно для того, чтобы при формировании последующих "наборов" уже выбранные ранее "товары" не попадали в раскрывающийся список.
По-моему, можно просто задать условие в запросе-источнике данных списка.

Но не совсем ясно сформулировано желание. Уточните.
а) Чтобы закончившиеся товары не показывались в списке?
б) Или чтобы товары в наборах не повторялись?

для а) что-то вроде этого:
SQL
1
SELECT Товар FROM Продукция WHERE Количество>Nz(DSum("Количество","Наборы","Товар=" & Товар))
для б) примерно так:
SQL
1
SELECT Товар FROM Продукция WHERE DCount("*","Наборы","Товар=" & Товар)=0
0
0 / 0 / 0
Регистрация: 25.01.2019
Сообщений: 11
05.03.2019, 08:46  [ТС] 4
Цитата Сообщение от Eugene-LS Посмотреть сообщение
Запросом на обновление при закрытии набора - вычитаем.
При открытии существующего набора - наоборот, возвращаем на место (на случай редакции - удаления записей)
А можно примером?
0
Эксперт MS Access
17238 / 7083 / 1589
Регистрация: 21.06.2012
Сообщений: 13,286
05.03.2019, 08:52 5
Цитата Сообщение от Anastasya123 Посмотреть сообщение
А можно примером?
Ага. И базу Вашу создать ... . Правила раздела выполнять что мешает?
1
Заблокирован
05.03.2019, 08:55 6
Цитата Сообщение от Anastasya123 Посмотреть сообщение
А можно примером?
Базу с формами - "в студию!" (C точкой входа - выхода)
- а пару запросов создать.... как два байта обнулить
0
0 / 0 / 0
Регистрация: 25.01.2019
Сообщений: 11
05.03.2019, 08:55  [ТС] 7
Цитата Сообщение от ltv_1953 Посмотреть сообщение
Ага. И базу Вашу создать ... . Правила раздела выполнять что мешает?
Разве я об этом прошу? 80% своей базы я уже сделала сама, ковыряя интернет. Возник вопрос, на который мне не удалось найти ответ и нет понимания как реализовать. Если Вам это сложно или что то душит - можно просто промолчать!
 Комментарий модератора 

Будьте вежливее, пожалуйста.

Пример, о котором Вы просите, делается на основе БД.
Вот и предоставьте ее.
0
Заблокирован
05.03.2019, 09:01 8
Цитата Сообщение от Anastasya123 Посмотреть сообщение
Возник вопрос, на который мне не удалось найти ответ и нет понимания как реализовать. Если Вам это сложно или что то душит - можно просто промолчать!
Хорошо!
Я вам опубликую сейчас свои запросы по данной теме, сможете адаптировать себе?
... что то мне подсказывает, что нет...
0
Эксперт MS Access
17238 / 7083 / 1589
Регистрация: 21.06.2012
Сообщений: 13,286
05.03.2019, 09:07 9
Вот рабочая функция. Адаптируйте ... .
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
'КОЛИЧЕСТВО_ТОВАРА  > 0.
'-1 - успешное завершение.
'-3 - необрабатываемая ошибка или слишком большое количество попыток обновления, ошибка передается через объект Err.
 
Public Function ФУНКЦИЯ_УМЕНЬШЕНИЕ_ОСТАТКА_ТОВАРА_БЕЗУСЛОВНОЕ _
    (ByVal КОД_ТОВАРА As Long, ByVal КОД_СКЛАДА As Long, ByVal КОЛИЧЕСТВО_ТОВАРА As Long) _
    As Long
    
    Dim КОЛИЧЕСТВО_ПОПЫТОК As Integer
    
    Dim ТАБЛИЦА_ТОВАРЫ_СКЛАДЫ_ОСТАТКИ_ЛОКАЛЬНАЯ  As Recordset
        Set ТАБЛИЦА_ТОВАРЫ_СКЛАДЫ_ОСТАТКИ_ЛОКАЛЬНАЯ = БАЗА_ТАБЛИЦЫ_СИСТЕМЫ.OpenRecordset("Товары_Склады_Остатки", dbOpenTable, 0, dbOptimistic)
        ТАБЛИЦА_ТОВАРЫ_СКЛАДЫ_ОСТАТКИ_ЛОКАЛЬНАЯ.Index = "Товар_Склад"
    
        Err.Clear
        For КОЛИЧЕСТВО_ПОПЫТОК = 1 To МАКСИМАЛЬНОЕ_КОЛИЧЕСТВО_ПОПЫТОК
            ТАБЛИЦА_ТОВАРЫ_СКЛАДЫ_ОСТАТКИ_ЛОКАЛЬНАЯ.Seek "=", КОД_ТОВАРА, КОД_СКЛАДА
            If ТАБЛИЦА_ТОВАРЫ_СКЛАДЫ_ОСТАТКИ_ЛОКАЛЬНАЯ.NoMatch Then
                ТАБЛИЦА_ТОВАРЫ_СКЛАДЫ_ОСТАТКИ_ЛОКАЛЬНАЯ.AddNew
                ТАБЛИЦА_ТОВАРЫ_СКЛАДЫ_ОСТАТКИ_ЛОКАЛЬНАЯ("Товар_Код") = КОД_ТОВАРА
                ТАБЛИЦА_ТОВАРЫ_СКЛАДЫ_ОСТАТКИ_ЛОКАЛЬНАЯ("Склад_Код") = КОД_СКЛАДА
                ТАБЛИЦА_ТОВАРЫ_СКЛАДЫ_ОСТАТКИ_ЛОКАЛЬНАЯ("Товар_Остаток") = -КОЛИЧЕСТВО_ТОВАРА
                On Error Resume Next
                    ТАБЛИЦА_ТОВАРЫ_СКЛАДЫ_ОСТАТКИ_ЛОКАЛЬНАЯ.Update
                    Select Case Err.Number
                    Case 0
                        On Error GoTo 0
                        ФУНКЦИЯ_УМЕНЬШЕНИЕ_ОСТАТКА_ТОВАРА_БЕЗУСЛОВНОЕ = -1
                        Exit For
                    Case ПОВТОРЯЮЩИЙСЯ_ИНДЕКС
                        Err.Clear
                        On Error GoTo 0
                    Case Else
                        ФУНКЦИЯ_УМЕНЬШЕНИЕ_ОСТАТКА_ТОВАРА_БЕЗУСЛОВНОЕ = -3
                        Exit For
                    End Select
                On Error GoTo 0
            Else
                ТАБЛИЦА_ТОВАРЫ_СКЛАДЫ_ОСТАТКИ_ЛОКАЛЬНАЯ.Edit
                ТАБЛИЦА_ТОВАРЫ_СКЛАДЫ_ОСТАТКИ_ЛОКАЛЬНАЯ("Товар_Остаток") = ТАБЛИЦА_ТОВАРЫ_СКЛАДЫ_ОСТАТКИ_ЛОКАЛЬНАЯ("Товар_Остаток") - КОЛИЧЕСТВО_ТОВАРА
                On Error Resume Next
                    ТАБЛИЦА_ТОВАРЫ_СКЛАДЫ_ОСТАТКИ_ЛОКАЛЬНАЯ.Update
                    Select Case Err.Number
                    Case 0
                        On Error GoTo 0
                        ФУНКЦИЯ_УМЕНЬШЕНИЕ_ОСТАТКА_ТОВАРА_БЕЗУСЛОВНОЕ = -1
                        Exit For
                    Case КОФЛИКТ_ЗАПИСИ, ЗАПИСЬ_ИЗМЕНЕНА
                        Err.Clear
                        On Error GoTo 0
                    Case Else
                        ФУНКЦИЯ_УМЕНЬШЕНИЕ_ОСТАТКА_ТОВАРА_БЕЗУСЛОВНОЕ = -3
                        Exit For
                    End Select
                On Error GoTo 0
            End If
        Next КОЛИЧЕСТВО_ПОПЫТОК
        If (КОЛИЧЕСТВО_ПОПЫТОК > МАКСИМАЛЬНОЕ_КОЛИЧЕСТВО_ПОПЫТОК) And (Err.Number = 0) Then
            Err.Raise vbObjectError + 1, "Изменение остатка товара", "Не удается изменить остаток товара менее чем за " & МАКСИМАЛЬНОЕ_КОЛИЧЕСТВО_ПОПЫТОК & " попыток."
        End If
        
        
        ТАБЛИЦА_ТОВАРЫ_СКЛАДЫ_ОСТАТКИ_ЛОКАЛЬНАЯ.Close
        Set ТАБЛИЦА_ТОВАРЫ_СКЛАДЫ_ОСТАТКИ_ЛОКАЛЬНАЯ = Nothing
        
        
    Exit Function
    
End Function
0
Заблокирован
05.03.2019, 09:23 10
Цитата Сообщение от ltv_1953 Посмотреть сообщение
Вот рабочая функция.
Шикарно!
А где посылка что транзакция не удалась? (В случае чего) - и требуется пересчёт склада по документам?
Шучу.
Я тоже так "длинно" не заморачивался ... (работает -и ладно, не нужно трогать ....)
0
Эксперт MS Access
17238 / 7083 / 1589
Регистрация: 21.06.2012
Сообщений: 13,286
05.03.2019, 09:26 11
Цитата Сообщение от Eugene-LS Посмотреть сообщение
А где посылка что транзакция не удалась? (В случае чего) - и требуется пересчёт склада по документам?
Все там - это ошибка, которая в Case Else, код ее в форме смотрится ... .
0
8760 / 5609 / 576
Регистрация: 27.03.2013
Сообщений: 19,045
05.03.2019, 09:26 12
Цитата Сообщение от Eugene-LS Посмотреть сообщение
...Я вам опубликую сейчас свои запросы по данной теме,...
Ой, да ладно.
Сделал бы уж примерчик.
У тебя всё равно, на него не более суток личного вчемени уйдёт.
А помочь даме - Благородное дело.
0
Заблокирован
05.03.2019, 09:30 13
Цитата Сообщение от VinniPuh Посмотреть сообщение
А помочь даме - Благородное дело.
Вопрос:
А зачем?
Вот зачем ей это? - не понимаю. Пусть купит коньяк преподу - и не морочит людям голову.
0
8760 / 5609 / 576
Регистрация: 27.03.2013
Сообщений: 19,045
05.03.2019, 09:34 14
Цитата Сообщение от Eugene-LS Посмотреть сообщение
...А зачем?...
Может как и ты, програмистом хочет стать?
0
Заблокирован
05.03.2019, 09:38 15
Цитата Сообщение от VinniPuh Посмотреть сообщение
как и ты, програмистом хочет стать?
Программист - это тип мышления особый, остальное инструменты реализации его решений.
Стать им не возможно, им нужно быть сразу.
1
Эксперт MS Access
17238 / 7083 / 1589
Регистрация: 21.06.2012
Сообщений: 13,286
05.03.2019, 09:47 16
Цитата Сообщение от Eugene-LS Посмотреть сообщение
Программист - это тип мышления особый

Не по теме:

Дело даже не в мышлении, это может и позже прийти, - подход "мне все должны" - для программиста не допустим

0
Eugene-LS
05.03.2019, 09:51
  #17

Не по теме:

Цитата Сообщение от ltv_1953 Посмотреть сообщение
подход "мне все должны" - для программиста не допустим
Думаю, он вообще не допустим!
Для любых запросов и обращений.

0
0 / 0 / 0
Регистрация: 25.01.2019
Сообщений: 11
05.03.2019, 10:19  [ТС] 18
Да...не думала, что так сложно попросить помощь у других людей…
Базу пишу себе, так как ручками считать очень долго и хотелось все это как то упростить, т.к. тема access была всегда интересна мне, но по специальности я от этого очень далека.
Проще было бы заказать, чтобы ее написали под мои потребности, но мне интересно самой все сделать и понять…
Полученную информацию попробую адаптировать под свою базу, если не получится еще раз найти более простой способ.
Благодарю.
0
Заблокирован
05.03.2019, 10:38 19
Цитата Сообщение от Anastasya123 Посмотреть сообщение
Да...не думала, что так сложно попросить помощь у других людей…
Это не сложно.
Просто вы вопрос, не так, сформулировали.
Почитайте пожалуйста Правила раздела, и старайтесь, насколько это возможно, следовать им.
А вообще тут народ добрый, и можно запросто получить грамотные ответы на правильно сформулированные вопросы.
0
Модератор
Эксперт MS Access
5178 / 2575 / 641
Регистрация: 12.06.2016
Сообщений: 6,849
05.03.2019, 10:47 20
Anastasya123,

А почему Вы проигнорировали вопросы, заданные в #3 ?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.03.2019, 10:47
Помогаю со студенческими работами здесь

Как из одной таблицы вытащить данные одной колонки и проставить в другой таблице в oracle?
Мой скрипт везде проставляет одно и то же: update import_data set iin=( select e.iin from...

Изменение записи в одной таблице на основе другой
На первом скриншоте суть работы формы такая. После выбора чека (1) в ADOTable1 выводятся данные о...

Поиск в одной таблице значений другой таблицы
Добрый день. Подскажите пожалуйста следующее: Есть 2 таблицы, в первой значение штрихкода, во...

Поиск значений одной таблицы в другой таблице
Доброго времени суток! Пишу небольшое приложение. Но в этом деле новичок, поэтому возникла...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru