販売管理系　取引マスタ　基本


# 概要

販売管理系　取引マスタ　基本

# 本稿の目的
販売管理システムの得意先マスタ、仕入先マスタの基本情報について忘備録として書き残すため。

# 想定読者
得意先マスタ、仕入先マスタについて初歩的な情報を取得したい人

# 用語

## 取引先
顧客と仕入先の共通項部分を括りだした部分。
例としては、会社名、住所、担当者など。

英語では、clientとする（customerでも表現できるが、customerは得意先）

### 仕入先
生産や販売のために商品や部品、材料などの原料を購入する相手先

### 顧客

得意先、請求先、出荷先に分類される。

#### 得意先
売上の対象になる。
売上：p92出荷/売上業務のDB設計

####  請求先
請求/入金の対象。請求書の宛名や提出先のこと。
請求：p108 請求業務のDB設計

#### 出荷先
出荷の対象。商品の出荷先。
出荷：p92出荷/売上業務のDB設計


# 例

## 実現したいこと
・顧客マスタと取引マスタから顧客マスタの情報を取得する
・仕入先マスタと取引マスタから仕入れ先マスタの情報を取得する


・仕入先と得意先のレコードを作成する。
　シチュエーションとしては以下を考えます。
　
　仕入先：電子部品販売会社
　弊社：電子機器製造業
　得意先：自動車メーカー

　部品メーカーから部品を仕入れて、社内で加工し自動車メーカに納品するという流れですね。




## DDLとInsert文
```sql
drop table if exists  m_product_classification;
-- 1. 取引先（顧客　仕入先）マスタ
-- docker-compose exec -it webserver bash
-- sqlite3 src/03_hanbai/ch3-4_master/test.sqlite3  < src/03_hanbai/ch3-4_master/customer/ddl.sql
-- sqlite3 src/03_hanbai/ch3-4_master/test.sqlite3 "select * from m_clients;"


-- 取引先マスタ
drop table if exists  m_clients;
create table m_clients(
    code char(5) not null,
    name varchar(50) not null,
    kana varchar(50),
    customer_classification char(1) not null,
    vendor_classification char(1) not null,
    postal_code char(7),
    address1 varchar(100),
    address2 varchar(100),
    client_division varchar(50),
    forbidden char(1),
    miscellaneous_classification char(1),
    updated_at timestamp default current_timestamp,
    updated_by varchar(50)
);


-- 顧客マスタ
drop table if exists  m_customers;
create table m_customers(
    code char(5) not null,
    billing_code char(5),
    own_person_code char(5),
    customer_person_name char(20),
    tel char(13),
    fax char(13),
    mail_address varchar(100),
    closing_date_1 char(2),
    payment_month_1 char(2),
    payment_day_1 char(2),
    payment_method_1 char(1),
    closing_date_2 char(2),
    payment_month_2 char(2),
    payment_day_2 char(2),
    payment_method_2 char(1),
    credit_amount integer,
    updated_at timestamp default current_timestamp,
    updated_by varchar(50)
);


-- 仕入先マスタ
drop table if exists  m_vendors;
create table m_vendors(
    code char(5) not null,
    vendor_person_name char(20),
    tel char(13),
    fax char(13),
    mail_address varchar(100),
    updated_at timestamp default current_timestamp,
    updated_by varchar(50)
);

insert into m_clients (code, name, kana, customer_classification, vendor_classification, postal_code, address1, address2, client_division, forbidden, miscellaneous_classification, updated_at, updated_by) values
('V0001', '〇〇電子株式会社', 'マルマルデンシカブシキガイシャ', '1', '0', '1234567', 'Address 1-1', 'Address 1-2', 'Division A', '0', '0', current_timestamp, 'user1'),
('C0002', '〇〇自動車株式会社', 'マルマルデンシカブシキガイシャ', '1', '0', '2345678', 'Address 2-1', 'Address 2-2', 'Division B', '0', '0', current_timestamp, 'user2');

insert into m_customers (code, billing_code, own_person_code, customer_person_name, tel, fax, mail_address, closing_date_1, payment_month_1, payment_day_1, payment_method_1, closing_date_2, payment_month_2, payment_day_2, payment_method_2, credit_amount, updated_at, updated_by) values
('C0002', 'B0002', 'P0002', '顧客次郎', '09876543210', '09876543211', 'customerB@example.com', '05', '03', '10', '2', '20', '04', '25', '1', 200000, current_timestamp, 'user2');

insert into m_vendors (code, vendor_person_name, tel, fax, mail_address, updated_at, updated_by) values
('V0001', '仕入太郎', '01234567890', '01234567891', 'vendorA@example.com', current_timestamp, 'user1');

```

## SQL文と結果

### 顧客情報を取得する。

```sql
-- 1. 顧客情報を取得する。
-- docker-compose exec -it webserver bash
-- sqlite3 src/03_hanbai/ch3-4_master/test.sqlite3  < src/03_hanbai/ch3-4_master/customer/getCustomer.sql

SELECT m_customers.code,m_clients.name,m_customers.customer_person_name
    FROM m_customers
    JOIN m_clients
    ON m_customers.code = m_clients.code
    WHERE m_customers.code = 'C0002'
;

-- 結果
-- C0002|〇〇自動車株式会社|顧客次郎

```


### 仕入先情報を取得する。

```sql
-- 1. 仕入先情報を取得する。
-- docker-compose exec -it webserver bash
-- sqlite3 src/03_hanbai/ch3-4_master/test.sqlite3  < src/03_hanbai/ch3-4_master/customer/getVendor.sql

SELECT m_vendors.code,m_clients.name,m_vendors.vendor_person_name
    FROM m_vendors
    JOIN m_clients
    ON m_vendors.code = m_clients.code
    WHERE m_vendors.code = 'V0001'
;

-- 結果
-- V0001|〇〇電子株式会社|仕入太郎
```


# メモ

各種業務の関連項目が多いですね。
この段階だと実装できる項目は少ないかな…

p68都度請求、締め請求
→p108請求業務　のときに動きを確認する

p70支払方法（現金と手形）
→p199支払い処理の流れ　のときに動きを確認する


あと今働いている会社だと得意先という単語が良く使われてますね。

# 参考

グラス片手にデータベース設計　販売管理システム編　著者：梅田弘之
p62-76


github ログ

https://github.com/RYA234/routine_tool/commit/0154a6da2ddede9a6cff9d884d9f3821a5de29e9