# Складской учет

## 1. Введение

Вы ведете деятельность, связанную с товарооборотом: обработку поступлений и списаний товаров, фиксацию остатка товаров на складе. Бипиум автоматизирует процесс складского учета товаров, позволяя хранить весь остаток по товарам в одном месте. Вы можете в один клик формировать операции поступления или списания и фиксировать их для быстрого доступа к истории всех таких операций.

## **2. Принцип работы**

<figure><img src="https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LACZmmM2xUWbZxyRr4s%2Fuploads%2Fy8HN9GE9SbQJjH25OZ4F%2F0.jpg?alt=media&#x26;token=27db9060-4e8a-48c4-a864-73732b1809b6" alt=""><figcaption></figcaption></figure>

Параметры товаров хранится в каталоге «Товары». При создании записи в каталоге «Операции с товарами» для выбранных товаров производятся операции поступления или списания, изменяя их остаток на складе. При этом:

* Если товара на складе (каталог «Склад») еще нет – то при поступлении он появится на складе.
* Если остаток по товару меньше чем число списания, то товар списан не будет.
* Если производится попытка произвести операцию из записи, откуда она уже была проведена, то сценарий запрета не даст это сделать.
* Для указанных на схеме каталогов есть [сценарии генерации наименования](https://docs.bpium.ru/cases/automations/sozdanie-naimenovanii-zapisei).

## **3. Реализация**

### **3.1. Структура каталогов**

#### **3.1.1. Каталог «Товары»**

Создайте каталог «Товары». В этом каталоге будут собраны все товары с их атрибутами. В качестве примера для товаров оставлены два ключевых атрибута: наименование и цена. Пример структуры каталога:

<figure><img src="https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LACZmmM2xUWbZxyRr4s%2Fuploads%2FyWdVm1pf1JHJhH5hPm1T%2F1.png?alt=media&#x26;token=918cb013-042f-4cd4-977e-0da465e29e6c" alt=""><figcaption></figcaption></figure>

* **Наименование** (текст)\
  Описание: Наименование товара, например «Шоколадный батончик».\
  Настройки: Текст.
* **Цена** (число)\
  Описание: Цена за единицу товара.\
  Настройки: Укажите единицу измерения.

Кроме указанных полей, вы можете добавить любые другие, если это необходимо.

#### **3.1.2. Каталог «Склад»**

Создайте каталог «Склад». В этом каталоге фиксируется остаток товаров на складе. Пример структуры каталога:

<figure><img src="https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LACZmmM2xUWbZxyRr4s%2Fuploads%2FBgDYlyT2KLkN5uxIwENx%2F2.png?alt=media&#x26;token=8092aafd-351a-4691-a105-fd301714880e" alt=""><figcaption></figcaption></figure>

* **Наименование** (текст)\
  Описание: Наименование товара в складе. Будет автоматически сгенерировано сценарием.\
  Настройки: Текст, редактируемое только через API.
* **Товар** (связанный каталог)\
  Описание: Связь с каталогом «Товары», нужна для выбора товара.\
  Настройки: Связь с каталогом «Товары».
* **Остаток** (число)\
  Описание: Хранит остаток товара на складе.\
  Настройки: Укажите единицу измерения.

Кроме указанных полей, вы можете добавить любые другие, если это необходимо.

#### **3.1.3. Каталог «Товары и количество»**

Создайте каталог «Товары и количество». Это служебный каталог, который содержит в своей записи товар и его количество. Записи в этом каталоге создаются через каталог «Операции с товарами». Заполните структуру каталога следующим образом:

<figure><img src="https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LACZmmM2xUWbZxyRr4s%2Fuploads%2FOPR5pkLCAsfBIzQUd1vE%2F3.png?alt=media&#x26;token=42645786-528f-44fe-bf2b-b6992aae6c3c" alt=""><figcaption></figcaption></figure>

* **Наименование** (текст)\
  Описание:  Наименование записи. Будет автоматически сгенерировано сценарием.\
  Настройки: Текст, редактируемое только через API.
* **Товар** (связанный каталог)\
  Описание: Связь с каталогом «Товары». Нужна для выбора товара в записи.\
  Настройки: Связь с каталогом «Товары».
* **Количество** (число)\
  Описание: Содержит число выбранного товара в записи.
* **Системная информация** (секция)\
  Описание: Логическое разделение заполняемых и системных полей.
* **Связи (связанный каталог)**\
  Описание: Связь с каталогом «Операции с товарами», откуда будут создаваться записи в каталоге «Товары и количество».\
  Настройки: Связь с каталогом «Операции с товарами», редактируемое только через API.

#### **3.1.4. Каталог «Операции с товарами»**

Создайте каталог «Операции с товарами». Этот каталог производит списание/начисления выбранных товаров на склад в заданном количестве. Заполните структуру каталога следующими полями:

<figure><img src="https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LACZmmM2xUWbZxyRr4s%2Fuploads%2FcKwqr1lyyiP0glrjGX0m%2F4.png?alt=media&#x26;token=fef0e1b8-8fe9-4e81-87ea-df5e8cfe17c2" alt=""><figcaption></figcaption></figure>

* **Наименование** (текст)\
  Описание: Наименование записи операции. Генерируется автоматически сценарием.\
  Настройки: Многострочный текст.
* **Операция** (статус)\
  Описание: Используется для выбора между поступлением и списанием.\
  Варианты: Поступление, Списание.
* **Дата** (дата)\
  Описание: Дата операции.
* **Товары** (связанный каталог)\
  Описание: Связь с каталогом «Товары и количество», используется для выбора товаров и их количества для совершения операции.\
  Настройки: Связь с каталогом «Товары и количество», можно связывать несколько записей, убрать галочку «можно выбирать из существующих», проставить галочку «создание без всплывающего окна», расширенные поля: «Товар» (изменять), «Количество» (изменять).
* **Документы** (файл)\
  Описание: Документы, связанные с операцией (напр. накладные).\
  Настройки: Можно загрузить несколько файлов.
* **Выполнение** (секция)\
  Описание: Разделение полей с результатами операции.
* **Статус** (статус)\
  Описание: Статус завершенности операции.\
  Варианты: Готово, Ошибка.\
  Настройки: Редактируемое только через API.
* **Описание ошибки** (текст)\
  Описание: Сообщение ошибки.\
  Настройки: Многострочный текст, видимость по значению статуса «Ошибка».
* **Системная информация** (секция)\
  Описание: Разделение полей с системной информацией.
* **Создано** (дата)\
  Описание: Время создания записи.\
  Настройки: С временем, по умолчанию: текущая дата, редактируемое только через API.
* **Создал** (сотрудник)\
  Описание: Сотрудник, создавший запись.\
  Настройки: По умолчанию: текущий сотрудник, редактируемое только через API.

### **3.2. Создание автоматизаций**

#### **3.2.1. Генерация наименований**

В процессе архитектуры складского учета вы можете столкнуться с необходимостью генерировать наименования созданных записей. О том зачем это нужно и как это реализовать подробно описано в статье «[Создание наименований записей](https://docs.bpium.ru/cases/automations/sozdanie-naimenovanii-zapisei)».

Наименования нужно генерировать в следующих каталогах:

* Склад
* Товары и количество
* Операции с товарами

**3.2.2. Наименования в каталоге «Склад»**

В системном каталоге «События» создайте новую запись и заполните ее следующим образом:

<figure><img src="https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LACZmmM2xUWbZxyRr4s%2Fuploads%2FUfBkJhS15rEoTO1AiAKU%2F5.png?alt=media&#x26;token=4d3790cc-33b6-4dce-8e6c-95c8ba21dae0" alt=""><figcaption></figcaption></figure>

Это событие будет отслеживать сохранение записи при редактировании полей «Товар» и «Остаток». Из этих полей будет генерироваться наименование. В качестве сценария загрузите [сценарий генерации наименования в каталоге «Склад»](https://drive.google.com/file/d/1KDz4Tyh-kHAbWXJ5T7trTvf5NIBYpYAC/view?usp=sharing).

Сценарий генерации наименования в каталоге «Склад» выглядит следующим образом:

<figure><img src="https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LACZmmM2xUWbZxyRr4s%2Fuploads%2Fh9nf5nUsooa7yhecWJum%2F6.png?alt=media&#x26;token=2a606a1f-a38e-4637-b516-97ad9db4f638" alt=""><figcaption></figcaption></figure>

Сценарий выполняет:

* Генерацию наименования компонентом «Формируем тайтл»
* Запись наименования компонентом «Прокидываем тайтл в текущую запись»

В сценарии нужно изменить компоненты:

* fields:\
  Измените тестовые id полей в компоненте, согласно его описанию.

Изменить шаблон наименования можно в компоненте «Формируем тайтл».

#### **3.2.3. Наименования в каталоге «Товары и количество»**

В «Событиях» создайте новую запись и заполните ее следующим образом:

<figure><img src="https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LACZmmM2xUWbZxyRr4s%2Fuploads%2FzeZlm1F6bPqp3h9cuT14%2F7.png?alt=media&#x26;token=161944ee-3bf8-4e93-b21f-9892bf41e9ec" alt=""><figcaption></figcaption></figure>

Это событие будет отслеживать сохранение записи при редактировании полей «Товар» и «Количество». Из этих полей будет генерироваться наименование. В качестве сценария загрузите [сценарий генерации наименования в каталоге «Товары и количество»](https://drive.google.com/file/d/1HHE-mhJBuPFac8b2GTxAOHRvSyIi-Ssi/view?usp=sharing).

Сценарий генерации наименования в каталоге «Товары и количество» выглядит следующим образом:

<figure><img src="https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LACZmmM2xUWbZxyRr4s%2Fuploads%2Fh7egWHeni94zaZFsEtLk%2F8.png?alt=media&#x26;token=1232c07c-2704-4d20-bb3e-0ee6657eb74b" alt=""><figcaption></figcaption></figure>

Принцип работы сценария полностью аналогичен предыдущему.

В сценарии нужно изменить компоненты:

* fields:\
  Измените тестовые id полей в компоненте, согласно его описанию.

Изменить шаблон наименования можно в компоненте «Формируем тайтл».

#### **3.2.4. Наименования в каталоге «Операции с товарами»**

В «Событиях» создайте новую запись и заполните ее следующим образом:

<figure><img src="https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LACZmmM2xUWbZxyRr4s%2Fuploads%2F8L2wcglPa3KDy19GOiqN%2F9.png?alt=media&#x26;token=c172de8e-084d-45e5-a568-1ef0af6a795b" alt=""><figcaption></figcaption></figure>

В качестве сценария загрузите [сценарий генерации наименования в каталоге «Операции с товарами»](https://drive.google.com/file/d/1rgyRvM8gcnjQwNiY-VYa1TH3OhyYvgIQ/view?usp=sharing).

Сценарий генерации наименования в каталоге «Товары и количество» выглядит следующим образом:

<figure><img src="https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LACZmmM2xUWbZxyRr4s%2Fuploads%2FR4SCoV4ONaRPiL9pzhUt%2F10.png?alt=media&#x26;token=baaf3237-c264-4cb9-a066-c809e26c783b" alt=""><figcaption></figcaption></figure>

Принцип работы сценария полностью аналогичен предыдущему.

В сценарии нужно изменить компоненты:

* fields:\
  Измените тестовые id полей в компоненте, согласно его описанию.

Изменить шаблон наименования можно в компоненте «Формируем тайтл».

**3.2.5. Пополнение/списание количества товаров на складе**

В каталоге «События» создайте новую запись и заполните ее следующим образом:

<figure><img src="https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LACZmmM2xUWbZxyRr4s%2Fuploads%2F7ccAVZEudMnn9gocdNCE%2F11.png?alt=media&#x26;token=8f0a60c1-aa78-4e54-9824-67953485c181" alt=""><figcaption></figcaption></figure>

Это событие отслеживает сохранение записи в каталоге «Операции с товарами». Сценарий запускается при изменении поля с товарами. В качестве сценария загрузите [сценарий списания/пополнения товара на складе](https://drive.google.com/file/d/1qWOaTeAk-NfYS352RQfpfazn-BxB8bvD/view?usp=sharing).

Сценарий списания/пополнения товара на складе выглядит следующим образом:

<figure><img src="https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LACZmmM2xUWbZxyRr4s%2Fuploads%2FEycj3BxeZclwjbJAG3yT%2F12.png?alt=media&#x26;token=1307b8a5-9af1-4c73-a798-c26743cf4fa8" alt=""><figcaption></figcaption></figure>

Сценарий выполняет:

* Проверку назначения типа операции и выбора товаров для операции.
* Циклическое увеличение или списание товаров на складе. Зависит от выбранного типа операции (поступление/списание).
* Проверку на возможность списания: если количество списываемого товара больше остатка на складе (или на складе нет выбранного товара) – сценарий выведет ошибку и не спишет товар со склада.
* Создание записи товара на складе при поступлении товара: если на складе не было записи с поступившим товаром, то она будет создана автоматически.

В сценарии необходимо изменить компоненты:

* fields:\
  Измените тестовые id полей в компоненте, согласно его описанию.

**3.2.6. Запрет на повторное проведение операции**

Запрещает повторное проведение операции из записи, по которой она уже проводилась.

В каталоге «События» создайте новую запись и заполните ее следующим образом:

<figure><img src="https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LACZmmM2xUWbZxyRr4s%2Fuploads%2F1pyTmLFtPqJ79VxvYQXQ%2F13.png?alt=media&#x26;token=ace6e43a-6b38-488e-8e58-9e71c29354b9" alt=""><figcaption></figcaption></figure>

Это событие отслеживает сохранение записи в каталоге «Операции с товарами». Сценарий запускается при изменении поля с товарами. В качестве сценария загрузите [сценарий запрета на повторное проведение операции](https://drive.google.com/file/d/1TN87rA-tksCFLq3uLo8v_7RT9Kvjx4Z9/view?usp=sharing).

Сценарий запрета на повторное проведение операции выглядит следующим образом:

<figure><img src="https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LACZmmM2xUWbZxyRr4s%2Fuploads%2Fe2KMw2KRMTXQRzctvxec%2F14.png?alt=media&#x26;token=854f5c98-9397-4c24-8a19-71564163744f" alt=""><figcaption></figcaption></figure>

Сценарий выполняет:

* Проверку записи операции на завершенность: произошло ли ранее по этой записи начисление или списание.
* Если операция по записи уже проводилась – запрещает создание записи и выводит сообщение сотруднику.

В сценарии необходимо изменить компоненты:

* fields:\
  Измените тестовые id полей в компоненте, согласно его описанию.

**3.2.7. Прокидывание записи операции в запись товара и количества**

~~Автоматизация, прокидывающая созданную запись операции в записи товаров в этой операции. Нужно для обратной связи записей из каталога «Товары и количество» с записью каталога «Операции над товарами». Позволяет быстро найти все записи из «Товаров и количества», принадлежащие записям «Операций над товарами».~~

В каталоге «События» создайте новую запись и заполните ее следующим образом:

<figure><img src="https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LACZmmM2xUWbZxyRr4s%2Fuploads%2FYr2gdNVWD37K63e1yMKd%2F15.png?alt=media&#x26;token=23a46b44-0ed6-48b4-ad32-884a69586671" alt=""><figcaption></figcaption></figure>

Это событие отслеживает сохранение записи в каталоге «Операции с товарами». Сценарий запускается при изменении поля с товарами. В качестве сценария загрузите [сценарий прокидывания операции в «Товары и количество»](https://drive.google.com/file/d/1WhfJBjyFOF3G23tFjoHPagWnSRMofD7o/view?usp=sharing).

Сценарий прокидывания операции в товары и количество выглядит следующим образом:

<figure><img src="https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LACZmmM2xUWbZxyRr4s%2Fuploads%2FtMhkqJN6w5S1Larx9YFd%2F16.png?alt=media&#x26;token=91d6791f-84b4-4c18-94ac-c81fd6a4d9b8" alt=""><figcaption></figcaption></figure>

Сценарий выполняет:

* Циклическую подстановку созданной записи операции во все связанные записи из каталога «Товары и количество».

В сценарии необходимо изменить компоненты:

* fields:\
  Измените тестовые id полей в компоненте, согласно его описанию.

## **4. Тестирование**

В каталоге «Товары» создайте несколько записей товаров, например:

<figure><img src="https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LACZmmM2xUWbZxyRr4s%2Fuploads%2FgRhYGbUhge9UX7pwZ3Hy%2F17.png?alt=media&#x26;token=24d83223-9165-49f4-8a5c-73b738e60ea0" alt=""><figcaption></figcaption></figure>

Перейдите в каталог «Операции с товарами». Создайте поступление для каждого из товаров:

<figure><img src="https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LACZmmM2xUWbZxyRr4s%2Fuploads%2FGN33dOf0Y3K6gF0joVyJ%2F18.png?alt=media&#x26;token=a15e434b-13ce-4794-90ae-5c31f6ec3f72" alt=""><figcaption></figcaption></figure>

Если всё настроено верно, то в каталоге «Склад» появятся записи для каждого из товаров с числами поступления:

<figure><img src="https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LACZmmM2xUWbZxyRr4s%2Fuploads%2FqGOfka7WpagHl3S4NGQX%2F19.png?alt=media&#x26;token=4745c8ab-983e-41c8-879e-ff7dc0bd4e40" alt=""><figcaption></figcaption></figure>

Перейдите в каталоге «Операции с товарами». Создайте списание для каждого из товаров:

<figure><img src="https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LACZmmM2xUWbZxyRr4s%2Fuploads%2F9JuxC7aXa3Iz8KALI38I%2F20.png?alt=media&#x26;token=503bcdda-8ec2-482f-a4ca-78dcbfa8e397" alt=""><figcaption></figcaption></figure>

Если все настроено верно, то в каталоге «Склад» произойдет списание введенных количеств товаров:

<figure><img src="https://1283378397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LACZmmM2xUWbZxyRr4s%2Fuploads%2Fh8W8y3yzxwWVJjivenc5%2F21.png?alt=media&#x26;token=a6dbf03d-f511-4c18-b5ab-27367edd3be2" alt=""><figcaption></figcaption></figure>
