Контроль отрицательных остатков

1. Nur 26.10.11 20:57 Сейчас в теме
Как в УПП 8.2 настроить контроль отрицательных остатков, чтобы если нет на складе, программа не проводила документ.
Jane1508; +1 Ответить
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. anig99 2846 26.10.11 21:02 Сейчас в теме
(1) в дополнительных правах пользователя снять соответствующие галочки по товарным регистрам и разрешить только оперативное проведение, убрать у пользователей полные права.
5. n-a-t-a-x-a 27.10.11 15:46 Сейчас в теме
(1) Nur, И еще помнить обязательно, что контроль остатков ведется только в том случае, если документ проводиться оперативно. При не оперативном проведении никаких контролей не производиться :)
7. Nur 27.10.11 20:16 Сейчас в теме
n-a-t-a-x-a пишет:

(1) Nur, И еще помнить обязательно, что контроль остатков ведется только в том случае, если документ проводиться оперативно. При не оперативном проведении никаких контролей не производиться :)


В этом-то и беда: нужно контролировать отрицательные остатки и при этом проводить документы неоперативно...
9. anig99 2846 27.10.11 22:00 Сейчас в теме
(7) Тогда нужно править конфигурацию. Самый простой способ - закомментировать проверку на оперативность, тогда остатки будут проверяться всегда. Особенности - проверка будет на текущую дата, т.е. проводить можно и год назад, но проверять будет текущие остатки. При повторном проведении нужно сначала отменить проведение, а потом провести, иначе списание остатков будет засчитываться 2 раза.
Более сложный способ - писать самому процедуру проверки в подписке на событие.
Необычный способ - обработка, которая будет мониторить отрицательные остатки и если они появляются отсылать заинтересованным лицам сообщение. Например, письмом.
35. tion 27.06.12 14:54 Сейчас в теме
(7) Nur,
Только дорабатывать, в УПП контроль отрицательных остатков при не оперативном проведении не предусмотрен.
3. redkiller3 26.10.11 23:31 Сейчас в теме
Проверить нет ли прав на списание больше чем есть в доп. правах
4. redkiller3 26.10.11 23:31 Сейчас в теме
Проверить нет ли прав на списание больше чем есть в доп. правах.
6. grey_chel 27.10.11 16:59 Сейчас в теме
А в УПП вообще есть контроль отрицательных остатков?
8. imagik 3 27.10.11 20:27 Сейчас в теме
Nur пишет:

В этом-то и беда: нужно контролировать отрицательные остатки и при этом проводить документы неоперативно...


так в этом и отличие оперативного проведения от не оперативного. В контроле остатков.
10. fibrsb 28.10.11 09:51 Сейчас в теме
Nur пишет:
Как в УПП 8.2 настроить контроль отрицательных остатков, чтобы если нет на складе, программа не проводила документ.


Сделать доработку обработки проведения

Если СтруктураШапкиДокумента.ОтражатьВУправленческомУчете тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РеализацияТоваровУслугТовары.НомерСтроки КАК НомерСтроки,
| РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура,
| РеализацияТоваровУслугТовары.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
| РеализацияТоваровУслугТовары.СерияНоменклатуры КАК СерияНоменклатуры,
| СУММА(РеализацияТоваровУслугТовары.Количество * РеализацияТоваровУслугТовары.Коэффициент) КАК КоличествоНужно,
| СУММА(ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0)) КАК КоличествоОстаток
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&ВремяДока, Склад = &Склад) КАК ТоварыНаСкладахОстатки
| ПО РеализацияТоваровУслугТовары.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
| И РеализацияТоваровУслугТовары.ХарактеристикаНоменклатуры = ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры
| И РеализацияТоваровУслугТовары.СерияНоменклатуры = ТоварыНаСкладахОстатки.СерияНоменклатуры
|ГДЕ
| РеализацияТоваровУслугТовары.Ссылка = &Ссылка
| И РеализацияТоваровУслугТовары.Склад = &Склад
|
|СГРУППИРОВАТЬ ПО
| РеализацияТоваровУслугТовары.НомерСтроки,
| РеализацияТоваровУслугТовары.Номенклатура,
| РеализацияТоваровУслугТовары.ХарактеристикаНоменклатуры,
| РеализацияТоваровУслугТовары.СерияНоменклатуры
|
|УПОРЯДОЧИТЬ ПО
| НомерСтроки";

Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.УстановитьПараметр("ВремяДока", Ссылка.МоментВремени());
Запрос.УстановитьПараметр("Склад", Склад);

Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.КоличествоНужно > Выборка.КоличествоОстаток Тогда
Сообщить("На складе недостаточно номенклатуры "+Выборка.Номенклатура.Наименование+", характеристика "+Выборка.ХарактеристикаНоменклатуры.Наименование);
Отказ = Истина;
КонецЕсли;
КонецЦикла;
Конецесли;
Батька_Махно; +1 Ответить
20. sc_digital 2 13.02.12 20:14 Сейчас в теме
(10) fibrsb,
СПС, ОЧЕНЬ ПОМОГЛО!!!!!!!! Я голову ломала, как организовать, чтоб по двум организациям на одном складе бардака не навели...
21. fibrsb 16.02.12 14:01 Сейчас в теме
(20) sc_digital, оч рад, что кому то помогло)
24. sc_digital 2 17.02.12 09:03 Сейчас в теме
(10) fibrsb, только я чуть-чуть подправила в документе реализации в обработке проведения, так как если единица базовая и единица хранения остатков разные и коэффициенты соответственно, возникает ошибочка. в общем вот так исправила, протестила, все пашет, и пользователи довольны
// моя доработка

Если СтруктураШапкиДокумента.ОтражатьВУправленческомУчете тогда 
Запрос = Новый Запрос; 
Запрос.Текст = 
"ВЫБРАТЬ 
| РеализацияТоваровУслугТовары.НомерСтроки КАК НомерСтроки, 
| РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура,
| РеализацияТоваровУслугТовары.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК Коэффициент,
| РеализацияТоваровУслугТовары.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры, 
| РеализацияТоваровУслугТовары.СерияНоменклатуры КАК СерияНоменклатуры, 
| СУММА(РеализацияТоваровУслугТовары.Количество*РеализацияТоваровУслугТовары.Коэффициент) КАК КоличествоНужно, 
| СУММА(ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0)) КАК КоличествоОстаток 
|ИЗ 
| Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары 
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&ВремяДока, Склад = &Склад) КАК ТоварыНаСкладахОстатки 
| ПО РеализацияТоваровУслугТовары.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура 
| И РеализацияТоваровУслугТовары.ХарактеристикаНоменклатуры = ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры 
| И РеализацияТоваровУслугТовары.СерияНоменклатуры = ТоварыНаСкладахОстатки.СерияНоменклатуры 
|ГДЕ 
| РеализацияТоваровУслугТовары.Ссылка = &Ссылка 
| И РеализацияТоваровУслугТовары.Склад = &Склад 
| 
|СГРУППИРОВАТЬ ПО 
| РеализацияТоваровУслугТовары.НомерСтроки, 
| РеализацияТоваровУслугТовары.Номенклатура,
| РеализацияТоваровУслугТовары.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент,
| РеализацияТоваровУслугТовары.ХарактеристикаНоменклатуры, 
| РеализацияТоваровУслугТовары.СерияНоменклатуры 
| 
|УПОРЯДОЧИТЬ ПО 
| НомерСтроки"; 

Запрос.УстановитьПараметр("Ссылка", Ссылка); 
Запрос.УстановитьПараметр("ВремяДока", Ссылка.МоментВремени()); 
Запрос.УстановитьПараметр("Склад", Склад); 

Результат = Запрос.Выполнить(); 
Выборка = Результат.Выбрать(); 
Пока Выборка.Следующий() Цикл 
Если Выборка.КоличествоНужно > (Выборка.КоличествоОстаток*Выборка.Коэффициент) Тогда 
Сообщить("На складе недостаточно номенклатуры "+Выборка.Номенклатура.Наименование+", характеристика "+Выборка.ХарактеристикаНоменклатуры.Наименование); 
Отказ = Истина; 
КонецЕсли; 
КонецЦикла; 
Конецесли;
Показать
Amel2010; Программулькин; +2 Ответить
37. ankr 19 10.10.12 19:21 Сейчас в теме
Спасибо (10) fibrsb и (24) sc_digital
Тоже пошел таким путем.
38. Гость 22.12.12 11:20
(10) Очень благодарен Вам!
11. MirrorDen 31.10.11 06:05 Сейчас в теме
Еще для полных прав тоже нет контроля остатков прикол такой)))
12. TODD22 18 31.10.11 13:47 Сейчас в теме
У вас РАУЗ? При РАУЗ нет контроля отрицательных остатков. Вернее нет ограничение на порядок ввода первичных документов. То есть мы можем списать раньше чем оприходуем.
13. zhenya17 20 17.11.11 21:02 Сейчас в теме
При партионном учёте контроль остатков выполняется всегда: и при оперативном, и при неоперативном проведении. Разницу видела в том, что при проведении "Отчёта о розничных продажах" в оперативном режиме документ не проводится при отриц.остатках, а в неоперативном - проводится, лишь выдавая ошибку в окно служебных сообщений.
suggestive; +1 1 Ответить
14. anig99 2846 17.11.11 22:12 Сейчас в теме
(13) мммм... не путайте КОНТРОЛЬ и просто формирование движений по партионному учету. Если при проведении ему не хватит остатков на складе на момент документа, то он просто не создаст движения партий, т.к. у него нет необходимой информации и предупредит об этом. А если осуществляется контроль отрицательных остатков, то он происходит в первую голову по регистру товары на складах с учетом резервов и т.д. или если включено, то по регистру Свободные остатки. При неоперативном проведении система НЕ смотрит эти регистры и свободно загоняет их в минус без всяческого контроля. Если есть расхождения между регистрами товары на складах, товары в резерве или свободные остатки и регистром Партии товаров на складах, то вполне возможна ситуации, когда по партиям всё спокойно проведется, а вот по другим регистрам уйдет в минус. Разница существует хотя бы из-за резервов, учет которые по партиям не ведется (да и не должен)
15. zhenya17 20 18.11.11 15:24 Сейчас в теме
(14) anig99, для меня понятие "контроль" - это то, что программа в любом случае проверит и выдаст сообщение, если документы проводятся в минус. А не давать проводить вообще - это уже не по мне :)
Впрочем, на вкус и цвет...
17. anig99 2846 18.11.11 16:40 Сейчас в теме
(15)(16) даже если не обязателен запрет, то проверка только по партиям - вещь неполная и не всегда правильная в силу особенностей учета. Если нет запрета, то это не контроль, а проверка.
Кстати, если отключить проведение по партиям (т.е. партии будут формироваться штатной обработкой), то опять-таки такая система обломится.
16. Frenkiart 18.11.11 15:34 Сейчас в теме
18. avart2006 30.11.11 14:53 Сейчас в теме
У нас перед закрытием месяца, после полного перепроведения всех материалных документов, для контроля выводится отчет по 10 счету, который показывает все некорректные остатки на конец месяца. Условиия отбора в этом отчете такие: "(КоличествоОст < 0) ИЛИ (СуммаОстаток < 0) ИЛИ (КоличествоОст = 0 И СуммаОстаток <> 0) ИЛИ (КоличествоОст <> 0 И СуммаОстаток = 0)". Как правило каждый месяц по тем или иным причинам попадаются материалы с некорректными остатками выявленные таким образом.
19. Harmful 30.11.11 17:08 Сейчас в теме
Вешал контроль на регистр свободный остаток.
22. zyxxyz 9 16.02.12 15:12 Сейчас в теме
Дополнительные права пользователей или групп пользователей хотя поумолчанию они не настроены
23. newphoenix 16.02.12 15:30 Сейчас в теме
+1 Дополнительные права пользователей
25. Софтэксперт 23.02.12 13:01 Сейчас в теме
Новая методика контроля отрицательных остатков в системе 1С:Предприятие 8.2

Имеем конфигурацию с одним регистром накопления «ОстаткиТоваров», регистр имеет 2 измерения: «Номенклатура» и «Склад» и один ресурс «Количество». По регистру движения формируют 2 документа: «Приходная» и «Расходная». Справочники, реквизиты документов и типы данных надеюсь очевидны.

Про «Приходную» писать нечего, там просто формируются в «плюс» остатки. Про «Расходную поговорим подробнее. Для начала вспомним, как формировалась процедура проведения в 8.1.

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

Запрос = Новый Запрос;
 Запрос.Текст = "ВЫБРАТЬ
 | РасходнаяТовары.Номенклатура,
 | СУММА(РасходнаяТовары.Количество) КАК Количество
 |ПОМЕСТИТЬ ДокТЧ
 |ИЗ
 | Документ.Расходная.Товары КАК РасходнаяТовары
 |ГДЕ
 | РасходнаяТовары.Ссылка = &Ссылка
 |
 |СГРУППИРОВАТЬ ПО
 | РасходнаяТовары.Номенклатура
 |;
 |
 |////////////////////////////////////////////////////////////­////////////////////
 |ВЫБРАТЬ
 | ДокТЧ.Номенклатура,
 | ДокТЧ.Количество,
 | ЕСТЬNULL(ОстаткиТоваровОстатки.КоличествоОстаток,0) КАК Остаток
 |ИЗ
 | ДокТЧ КАК ДокТЧ
 | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(
 | ,
 | Склад = &Склад<
 | И Номенклатура В
 | (ВЫБРАТЬ
 | ДокТЧ.Номенклатура
 | ИЗ
 | ДокТЧ КАК ДокТЧ)) КАК ОстаткиТоваровОстатки
 | ПО ДокТЧ.Номенклатура = ОстаткиТоваровОстатки.Номенклатура";
 Запрос.УстановитьПараметр("Склад", Склад);
 Запрос.УстановитьПараметр("Ссылка", Ссылка);
 РезультатЗапроса = Запрос.Выполнить();
Показать


Кроме этого данные табличной части документа мы использовали для дополнительного отбора при расчете виртуальной таблицы.

Обратите также внимание на функцию ЕСТЬNULL которую мы использовали для гарантии избавления от типа значения NULL в результате запроса. Остатки, которых на складе нет, не присоединятся в таблице документа, и мы поля с остатком заполним значением 0 (ноль).

После того как данные запросом были получены нам оставалось проверить остатки и сформировать движения по регистру. Причем в нашем случае никто не мешает сделать это за один проход.

Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
 Если Выборка.Количество < Выборка.Остаток Тогда
 Сообщить("Не хватает товара " + Выборка.Номенклатура + ", из необходимых " + Выборка.Количество + " в наличие имеется только " + Выборка.Остаток;
 Отказ = Истина;
 КонецЕсли;
 Если Не Отказ Тогда
 Движение = Движения.ОстаткиТоваров.Добавить();
 Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
 Движение.Период = Дата;
 Движение.Номенклатура = Выборка.Номенклатура;
 Движение.Склад = Склад;
 Движение.Количество = Выборка.Количество;
 КонецЕсли;
КонецЦикла;
Показать


Вроде бы, куда уж проще и быстрее? Однако есть куда!

Разберем новую методику контроля остатоков.

Для начала получим сгруппированную табличную часть документа.
Запрос = Новый Запрос;Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;Запрос.Текст = "ВЫБРАТЬ| РасходнаяТовары.Номенклатура,| СУММА(РасходнаяТовары.Количество) КАК Количество|ПОМЕСТИТЬ ДокТЧ|ИЗ| Документ.Расходная.Товары КАК РасходнаяТовары|ГДЕ| РасходнаяТовары.Ссылка = &Ссылка||СГРУППИРОВАТЬ ПО| РасходнаяТовары.Номенклатура|;||////////////////////////////////////////////////////////////­////////////////////|ВЫБРАТЬ| ДокТЧ.Номенклатура,| ДокТЧ.Количество|ИЗ| ДокТЧ КАК ДокТЧ";Запрос.УстановитьПараметр("Ссылка", Ссылка);РезультатЗапроса = Запрос.Выполнить();
Временная таблица ДокТЧ нам еще пригодится в дальнейшем, для ее использования мы подключили к запросу менеджер временных таблиц.

Далее сформируем движения по регистру.
Движения.ОстаткиТоваров.Записывать = Истина;Выборка = РезультатЗапроса.Выбрать();Пока Выборка.Следующий() Цикл Движение = Движения.ОстаткиТоваров.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Номенклатура = Выборка.Номенклатура; Движение.Склад = Склад; Движение.Количество = Выборка.Количество;КонецЦикла;Движения.Записать();
В приведенном примере я подразумеваю, что для документа установлен режим записи движений «Записывать выбранные». Именно поэтому я перед циклом установил пометку необходимости записи движений (на самом деле это можно было сделать и после цикла).

Движения записываем в регистр. Причем при записи движений я обращаюсь не к конкретному набору записей (Движения.ОстаткиТоваров.Записать()), а ко всей коллекции «Движения». Подобный вызов записи гарантирует запись данных в регистры в той последовательности, в которой они расположены на дереве метаданных, что в свою очередь резко уменьшает взаимные блокировки и как следствие ошибки DeadLock.

После того как я записал движения в регистр я получу остатки. Обратите внимание, что при чтении данных из регистра у меня сейчас будут обновленные данные с учетом движений самого документа.
Запрос.Текст = "ВЫБРАТЬ| Номенклатура,| КоличествоОстаток КАК Остаток|ИЗ| РегистрНакопления.ОстаткиТоваров.Остатки(| ,| Склад = &Склад| И Номенклатура В| (ВЫБРАТЬ| ДокТЧ.Номенклатура| ИЗ| ДокТЧ КАК ДокТЧ))|ГДЕ| КоличествоОстаток < 0";Запрос.УстановитьПараметр("Склад", Склад);РезультатЗапроса = Запрос.Выполнить();
Посмотрите, мы избавились от соединений, и, что не маловажно, от проверки типа значения NULL. Запрос получит данные только по отрицательным остаткам и покажет их пользователю!

Обратимся к результату запроса и известим пользователя о минусах на складе.
Выборка = РезультатЗапроса.Выбрать();Пока Выборка.Следующий() Цикл Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Не хватает товара " + Выборка.Номенклатура + ", после проведения | документа остаток составит " + Выборка.Остаток; Сообщение.Сообщить(); Отказ = Истина;КонецЦикла;
Вот собственно и вся новая методика контроля остатков. Перечислим плюсы этого метода:
Нет необходимости соединять в запросе таблицу документа и данными регистров
Не надо производить проверку на NULL
Нет необходимости получать излишние данные (остатки) для проведения документа. Ведь мы чаще все же записываем документ с правильными цифрами и он проводится, чем документы которые уводят остатки в минус.

Однако не стоит думать, что такая технология может быть применена повсеместно. На секунду задумайтесь, что в этой задаче необходимо еще и себестоимость рассчитать при списании, и Вы придете к выводу, что необходим «старый» метод контроля остатков.
cry; nana_rge; Bukaska; +3 Ответить
26. garik79 28.02.12 09:52 Сейчас в теме
(25) Софтэксперт, большое спасибо за такую подробную информацию.
Приму к сведению.
27. fibrsb 11.03.12 16:30 Сейчас в теме
(25) Софтэксперт,

Познавательно, и есть о чем задуматься
36. fibrsb 27.06.12 15:00 Сейчас в теме
(25) Софтэксперт, совмещение опыта с философией)
39. unoDosTres 07.02.13 11:53 Сейчас в теме
а почему собственно софтэксперт из (25) считает что соединение уменьшает скорость выполнения запроса?
28. ola007 06.06.12 09:38 Сейчас в теме
Я в шоке!!!!!! Заплати столько за программу. Так и еще все переписывать надо. Потому, что а остатки то оказывается не контролируется и т.д. и т.п.
29. AlX0id 06.06.12 11:07 Сейчас в теме
(28) ola007,
Заплати столько за программу.

Значит, вам не нужна УПП.
30. cherva 97 06.06.12 14:19 Сейчас в теме
(28) А Вы когда-нибудь задумывались сколько может быть алгоритмов контроля остатков при проведении документов задним числом, причем для разных пользователей нужны разные алгоритмы. Кроме того как контролировать резервы и потребности в товарах? 1С рассматривает ( как и все производители учетных систем ) проведение задним числом не как стандартную операцию, а как исключение из правил, которым пользуются лишь в исключительных случаях.
31. rafito 20.06.12 10:01 Сейчас в теме
(28) ola007, 1C пишет программу по стандартам. и по ним следует что все движения должны быть отражены в учете как минимум в конце дня (смены). а то что на предприятиях порой документы оформляются, дай Бог в конце месяца, то это уже проблемы предприятия.
32. Ira123 5 24.06.12 16:05 Сейчас в теме
Без изменений в УПП при проведении документов, если нет остатков на складе выдается сообщение, что списано без суммовой оценки, вот и весь контроль, бухи сразу видят, что на складе нет товара.
33. rafito 25.06.12 16:28 Сейчас в теме
проблема чаще всего в том что бухи видят, но не интересуются этим считая что в конце месяца все само сядет а свои места.
34. fibrsb 27.06.12 14:43 Сейчас в теме
Без изменений в УПП при проведении документов, если нет остатков на складе выдается сообщение, что списано без суммовой оценки, вот и весь контроль, бухи сразу видят, что на складе нет товара.


бывает так, что не бухи делают документы и потом начинается игра найди того кто это сделал)
40. aleksdiez 4 16.12.13 14:30 Сейчас в теме
Предприятие - Настройка параметров учета, закладка "Запасы", флажок "Разрешается списание запасов при отсутствии остатков по данным учета"
42. nana_rge 17.06.14 09:19 Сейчас в теме
44. buy_sale 220 19.05.20 17:46 Сейчас в теме
(40)
Разрешается списание запасов при отсутствии остатков по данным учета

Это для БП3, а не для УПП
41. пользователь 19.03.14 15:08
Сообщение было скрыто модератором.
...
43. oslokot 192 20.06.14 11:21 Сейчас в теме
Подписки на события - наше всё.
а конкретно, ОбработкаПроведения
Делал так в свое время. А потом когда понял, что это нафиг не нужно, вырубил.

Каждый день восстановление последовательности.
Просто следите за этим.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот