Имя: Пароль:
1C
1С v8
Контроль остатков. НЕ оперативный режим.
0 e2e4
 
10.08.15
19:51
С оперативным все разжевано и понятно. А НЕ оперативный?
Навскидку сделал так: в "контрольном" запросе (после записи движений) устанавливаю параметр Период виртуальной таблицы остатков в Дата+1. Т.е. проверяю появление отрицательных остатков через 1 секунду после даты дока. Вроде работает - но фэншуйно ли это?
...Или фигней маюсь и реальные пацаны контролируют остатки только оперативно???
1 zak555
 
10.08.15
19:52
в оперативном
2 e2e4
 
10.08.15
19:53
(1) и точка?
3 zak555
 
10.08.15
19:56
проверять отрицательные остатки нужно на Новый Граница(МоментВремени, ВидГраницы.Включая)
4 Михаил Козлов
 
10.08.15
19:59
Корректного контроля остатков не получится: отрицательные могут возникнуть позднее.
5 floody
 
10.08.15
20:03
(4) для этого можно проверять на отрицательные остатки в текущих итогах. а вообще - фигня конечно все это.

(0) сама неоперативность и отражает по сути ненужность контроля остатков
6 e2e4
 
10.08.15
20:07
(4) ну, если доков немного и в каждом организовать полный контроль остатков (оперативный и неоперативный)?
кстати...немного оффтоп: а что вернет ЕСТЬNULL(Х,-1), когда Х == 0 ???
7 shuhard_серый
 
10.08.15
20:14
(6) 0 вернёт
8 e2e4
 
10.08.15
20:15
(7) и я так думал. А фигушки! -1.
...сам в шоке...
9 e2e4
 
10.08.15
20:19
Вот мой извращенский контроль остатков (с учетом (3)):
    //проверим отрицательные остатки
    Запрос = Новый Запрос;
    МенеджерВТ = Новый МенеджерВременныхТаблиц;
    Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ПередачаОбъектовВПрокат.ОбъектПроката,
        |    СУММА(ПередачаОбъектовВПрокат.Количество) КАК Количество
        |ПОМЕСТИТЬ ОбъектыДляПередачи
        |ИЗ
        |    Документ.ПередачаВПрокат.ПереченьОбъектовПроката КАК ПередачаОбъектовВПрокат
        |ГДЕ
        |    ПередачаОбъектовВПрокат.Ссылка = &Ссылка
        |СГРУППИРОВАТЬ ПО
        |    ПередачаОбъектовВПрокат.ОбъектПроката";
        
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    РезультатЗапроса = Запрос.Выполнить();

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

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Если ВыборкаДетальныеЗаписи.Остаток < 0 Тогда
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "На "+ЧудноеМгновенье+" в <"+ТочкаПроката+"> нет в наличии достаточного количества объектов проката " + ВыборкаДетальныеЗаписи.ОбъектПроката;
            Сообщение.Сообщить();                 
            Отказ = Истина;
            Возврат;
        КонецЕсли;
    КонецЦикла;
10 zak555
 
10.08.15
20:19
11 floody
 
10.08.15
20:22
(9) ты вот что скажи: а если у тебя через 2 секунды уже есть проведенный документ, который предварительно списал эту номенклатуру, и теперь она ушла в минус.  что делать-то будешь? брось эту бредовую затею
12 e2e4
 
10.08.15
20:24
(10) вчера как раз нашарил ее - пока niasililmnogabukaff))
...так вот, по поводу ЕстьНУЛЛ - если в (9) в остатке есть хоть объект, то все ок, проводится; увеличим в документе соответствующую позицию на 1 - все, фигушки, и ВыборкаДетальныеЗаписи.Остаток = -9!
(еще раз извиняюсь за оффтоп, но как раз при ковырянии в этой теме сделал такое шокирующее открытие!)
13 e2e4
 
10.08.15
20:28
(11) логично...
14 H A D G E H O G s
 
10.08.15
20:50
Сделать как в УТ11 - контролировать текущие остатки после проведения и откатывать транзакцию в случае недостатка.
15 shuhard_серый
 
11.08.15
08:13
(14) сделать как в ERP, не давать распроводить документы, если в будущем будут отрицательные остатки =)
16 zak555
 
11.08.15
08:19
(15) там проверяется остаток на каждую операцию вперёд ?
17 shuhard_серый
 
11.08.15
08:22
(16) зависит от учетной политики
- либо на конец каждого дня
- либо на конец каждого месяца
18 hhhh
 
11.08.15
08:26
(13) если не было движений, там не 0, а NULL. Открытие он сделал, открывальщик, блин.
19 vvp91
 
11.08.15
09:20
(17) только не на конец каждого дня/месяца, а просто на конец дня/месяца даты проведения.
20 shuhard_серый
 
11.08.15
09:32
(19) виноват, не проверил =)
21 John83
 
12.08.15
16:03
(15) а каким образом там сделано?
ведь может быть и отмена проведения и перепроведение