Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.03.2023, 21:24   #1
trubad
 
Регистрация: 12.03.2023
Сообщений: 4
По умолчанию склад с приходом и расходом в access

Добрый день, уважаемые знатоки access, есть база данных склад, прикреплен. В таблицу товары заранее вносятся инвентарь, склад. В форме "поставка" я прописываю инвентарь, склад получатель, количество и когда нажимаю запись обновляется количество в таблице Товары, а как быть со складом - (запрос на обновление в котором я считаю конечное количество товара и обновляю заодно склад приводит к тому что все количество в таблице Товары указывается для последнего склада получателя)? Поставка была например сначала на один склад, потом на другой - записи в таблице Состав поставки появились правильные.
Но информацию о конечном количестве на складе и на каком складе планирую хранить в таблице Товары, так как может быть потом и расход со склада и уменьшение должно быть с учетом склада.
Может есть какие то другие предложения по проекту базы, но хранить информацию о складе только в таблице Состав поставки тоже не вариант, нелогично, так как планируются обратные операции расхода
Мне нужно: После внесения данных в форму Поставки программа (на VBA) перед сохранением записи формы
1 проверяла есть ли в таблице Товары такой инвентарь на таком складе.
2. Если есть запрос на обновление найденной записи по количеству (суммирование поля quantityIns (приход инвентаря) из формы+из таблицы Товары (колич инвентаря, имеющегося на складе) quantity - такой запрос есть и макрос в форме - работают
3. Если в таблице Товары есть запись с таким инвентарем на другом складе дублировать запись в таблице Товары с этим другим складом, в этом случае quantity=quantityIns.
Готов компенсировать Ваше потраченное время, либо направьте хотя бы по vba
Вложения
Тип файла: 7z складД.7z (366.4 Кб, 7 просмотров)

Последний раз редактировалось trubad; 13.03.2023 в 21:26.
trubad вне форума Ответить с цитированием
Старый 14.03.2023, 18:19   #2
Eugene-LS
Пользователь
 
Аватар для Eugene-LS
 
Регистрация: 23.02.2018
Сообщений: 78
По умолчанию

Цитата:
Сообщение от trubad Посмотреть сообщение
Мне нужно: После внесения данных в форму Поставки программа (на VBA) перед сохранением записи формы
Хотя БД корявая - Сочинилось нечто такое:
Код:
Private Sub cmdStoreOperate_Click()
'Кнопка Записи на Склад
'---------------------------------------------------------------------------------------------------
Dim sSQL As String, sVal As String, vVal
Dim rst As DAO.Recordset
Dim lGoodID As Long, lStoreID As Long, iQuantity As Integer
Dim vGoodName
On Error GoTo cmdStoreOperate_Click_Err
    
    sSQL = "SELECT Inventory, id_store, quantityIns FROM [состав поставки] " & vbCrLf & _
           "WHERE (id_ins=" & Nz(Me!id_ins, 0) & ");"

    Set rst = CurrentDb.OpenRecordset(sSQL, dbOpenSnapshot)  'Просмотр - На редакцию = dbOpenDynaset
    
    With rst 'Перебор всех записей в наборе
        Do Until .EOF = True 'Цикл до конца набора
            lGoodID = !inventory            'Код товара
            lStoreID = Nz(!id_store, 0)     'Код склада
            iQuantity = Nz(!quantityIns, 0) 'Кол-во
            sVal = "id_invent = " & lGoodID
            vGoodName = DLookup("inventory", "Товары", sVal) 'Название товара
            
            'Внимание!!! - Таблица "Товары" - поле [store] Текстовое !!! ...
                'sVal = "id_invent = " & lGoodID & " AND store = '" & lStoreID & "'"
            'Ищем по названию т.к. код товара и код склада у нас на "свободной" подвеске
            sVal = "inventory = '" & vGoodName & "' AND store = '" & lStoreID & "'"
            vVal = DLookup("id_invent", "Товары", sVal)  'ищем
            
            If vVal > 0 Then 'Товар с указанным складом найден
                'Запрос на Обновление:
                sSQL = "UPDATE Товары SET quantity = [quantity]+" & iQuantity & " WHERE (id_invent=" & vVal & ")"
            Else
                'Запрос на добавление:
                sSQL = "INSERT INTO Товары (inventory, store, quantity ) " & vbCrLf & _
                        "VALUES ( '" & vGoodName & "', " & lStoreID & ", " & iQuantity & ")"
            End If
            '...
            'Debug.Print sSQL
            CurrentDb.Execute sSQL 'Исполняем запрос
            .MoveNext
        Loop
    End With

cmdStoreOperate_Click_End:
    On Error Resume Next
    rst.Close
    Set rst = Nothing
    Err.Clear
    Exit Sub

cmdStoreOperate_Click_Err:
    MsgBox "Error " & Err.Number & " (" & Err.Description & ") in Sub : cmdStoreOperate_Click - Form_Поставки.", vbCritical, "Error!"
    'Debug.Print "cmdStoreOperate_Click_Line: " & Erl & "."
    Err.Clear
    Resume cmdStoreOperate_Click_End
End Sub
Примечания:
- Логика хранения товаров вызывает сомнения.
- Таблица "Товары" - поле [store] Текстовое !!!
Вложения
Тип файла: zip складД_v02.zip (39.4 Кб, 2 просмотров)
Eugene-LS вне форума Ответить с цитированием
Старый 14.03.2023, 21:34   #3
shanemac51
Участник клуба
 
Аватар для shanemac51
 
Регистрация: 12.08.2010
Сообщений: 1,077
По умолчанию

Цитата:
Сообщение от trubad Посмотреть сообщение
В форме "поставка" я прописываю инвентарь, склад получатель, количество и когда нажимаю запись обновляется количество в таблице Товары, а как быть со складом
склад - это такой же поставщик, только по операции=перемещение
с исходного склада - списывается
на адресат добавляется

причем это делается запросом - делается 2 псевдо строки из одной реальной

три чистых справочника и пара таблиц
Изображения
Тип файла: jpg цц1421.jpg (39.1 Кб, 1 просмотров)
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание
shanemac51 вне форума Ответить с цитированием
Старый 15.03.2023, 09:12   #4
trubad
 
Регистрация: 12.03.2023
Сообщений: 4
По умолчанию

Спасибо, Eugene-LS, разберусь с кодом, а с логикой хранения что не так: по поводу текстового поля склад в таблице товаров исправлю на id_store, разберусь с предложенным Вами кодом, доработаю ввод (поиск) инвентаря в форме Поставки, - щас вылазят все комбинации инвентарь_склад в выпадающем списке. Или Вы имеете в виду, что надо заранее инвентарь прописывать с quantity 0 в табл Товары? Как Вас отблагодарить? напишите в личку че куда. Если позволите еще обращусь, ибо дурак дураком.
shanemac51, отмечу что поставка и отличаться будет от перемещения наличием склада оправителя и склада получателя(пока мне это не надо), главное реализовать такие операции, как приход (внешняя) расход (в производство ушло истратили нет его) Эти склады же условные разделы распределенного одного склада (с одним и тем же кладовщиком)
trubad вне форума Ответить с цитированием
Старый 15.03.2023, 09:40   #5
Eugene-LS
Пользователь
 
Аватар для Eugene-LS
 
Регистрация: 23.02.2018
Сообщений: 78
По умолчанию

Цитата:
Сообщение от trubad Посмотреть сообщение
напишите в личку че куда.
Личка у вас пока не работает
... если что - мой E-Mail в подписи найдёте: 2867077@gmail.com

Цитата:
... а с логикой хранения что не так?
Я имею ввиду что схема у вас, на мой взгляд, не совсем логичная.
Товар должен быть уникален, а склады на которых он может хранится я бы оформил отдельной таблицей, тогда всё "заиграет" иначе.

Последний раз редактировалось Eugene-LS; 15.03.2023 в 09:43.
Eugene-LS вне форума Ответить с цитированием
Старый 15.03.2023, 11:03   #6
trubad
 
Регистрация: 12.03.2023
Сообщений: 4
По умолчанию

я так думал, что табл Товары станет Номенклатурой, а поля quantity, id_store,id_invent вынесутся в таблицу Хранение
trubad вне форума Ответить с цитированием
Старый 15.03.2023, 19:43   #7
Eugene-LS
Пользователь
 
Аватар для Eugene-LS
 
Регистрация: 23.02.2018
Сообщений: 78
По умолчанию

Цитата:
Сообщение от trubad Посмотреть сообщение
я так думал, что табл Товары станет Номенклатурой, а поля quantity, id_store,id_invent вынесутся в таблицу Хранение
Так нужно было сразу и сделать так.
Eugene-LS вне форума Ответить с цитированием
Старый 15.03.2023, 22:19   #8
trubad
 
Регистрация: 12.03.2023
Сообщений: 4
По умолчанию

Переделал схему бд: справочники группы номенклатуры spr схема бд верс03.jpg, номенклатура товаров (должна быть заполнена заранее), единицы измерений, таблицы invoice перемещение, storegoods хранение (не связана в схеме данных, потому как заполняется программно). Не зря ли задал признак sign_transfer 1 (от отправителя к получателю) или -1 (наоборот) в tblinvoice? Мастер подстановок не использую, согласно рекомендаций Элисон Балтер. Цены не нужны, так как задача списания по деньгам реализована в 1С
Вложения
Тип файла: 7z StoreV03.7z (15.5 Кб, 10 просмотров)

Последний раз редактировалось trubad; 15.03.2023 в 22:26.
trubad вне форума Ответить с цитированием
Старый 15.03.2023, 22:33   #9
Eugene-LS
Пользователь
 
Аватар для Eugene-LS
 
Регистрация: 23.02.2018
Сообщений: 78
По умолчанию

Цитата:
Сообщение от trubad Посмотреть сообщение
Переделал схему бд
Куда торопимся???
... всё не правильно (пока) ...
Eugene-LS вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
БД Склад ара Microsoft Office Access 1 09.04.2011 00:00
БД склад kent4 Microsoft Office Access 0 15.02.2011 16:39
Склад Ribun Microsoft Office Access 10 16.12.2010 00:14
Склад Dgon777 Помощь студентам 1 09.11.2010 07:08
Склад Dgon777 Microsoft Office Access 0 06.11.2010 14:16