Версия 1С:
- Движок 8.3(8.3.5.1231)
- Конфигурация Комплексная автоматизация 1.1 (1.1.56.2), измененная.
Задача:
написать НОВУЮ функцию контроля остатков товара, которая будет вызываться в начале функции "ПриПроведении"
в двух документах:
- Реализация товаров и услуг
- Перемещение товаров
Эта новая функция проходит по табличной части документа и изымает от-туда ровно два столбца (количество всегда = 1):
- номенклатура
- Серия номенклатуры
затем берет ОДИН параметр из шапки
- Склад (склад, который в табличной части, не используется)
Затем выполнить запрос к регистру "Регистр накопления "Товары на складах""
где использует разрезы:
склад
номенклатура
Серия номенклатуры
остальные разрезы игнорируются:
Качество
Характеристика номенклатуры
Организация
итог запроса остаточный параметр Количество
По итогам этого запроса, если количество <= 0 печатается предупреждение:
"Внимание: проведение документа вызвало отрицательный остаток по '<товар>' серийный номер '<серия>'"
Важные момента:
1) ОСТАТОК должен проверяться вне зависимости от того, оперативное проведение или нет.
2) ОСТАТОК в момент запроса анализируется на дату/время документа, а не на ТУ
3) В случае недостатка остатка только вывод предупреждения, никаких отказов проведения не нужно.
4) Категорически запрещается использовать полностью или частично реализацию контроля остатков 1С,
т.е. функция должна быть написана С НУЛЯ и должна получится маленькая и простая -
(например цикл по табличной части и запрос к регистру по каждой строке).
(Цикл допустим, т.к. строки не повторяются и количество всегда равно 1).
Нельзя вызывать какие-то не системные функции 1С,
т.е. контроль остатков должен работать не зависимо от всего остального кода конфигурации 1С.
5) Функция выполняется, только если стоит галочка документа 'управленческий учет', иначе сразу возврат.
Наша база данных для проверки функции:
www.astarta-m.ru/tmp/1c/1... www.astarta-m.ru/tmp/1c/1... ...
www.astarta-m.ru/tmp/1c/1... Хотя особой необходимости в ней нет можно проверить на типовой.