Имя: Пароль:
1C
1С v8
как проверить был ли приход перед тем как списать со склада?
, ,
0 golovonometr
 
26.02.15
14:01
Учу 1С, пишу в процедуре ОбработкаПроведения() след:

Для Каждого Материала из Материалы Цикл // из табличной части документа
    Запись = Движения.Склад.ДобавитьРасход();
    Запись.Период = Дата;
    .....
КонецЦикла;
Движения.Склад.Записать;

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

Я могу например влепить Запрос в цикл типа "ВЫБРАТЬ Количество ИЗ РегистрНакопления.Склад.Остатки ГДЕ Материал = &Материал", но душа не лежит на запрос в цикле написать, как получить эти остатки?
1 Бубка Гоп
 
26.02.15
14:07
(0) зачем в цикле? помести все материалы в СЗ, а еще лучше - во временную таблицу, и к ней прилевачь текущие остатки. п.с. душа у тебя верно лежит циклы в запросе - за это и побить могут
2 Бубка Гоп
 
26.02.15
14:09
т.е. что то вроде

"ВЫБРАТЬ Количество ИЗ РегистрНакопления.Склад.Остатки ГДЕ Материал В(&Материалы)"

пример для вт писать без конструктора лениво, извини. в инете поищи если интересно
3 Бубка Гоп
 
26.02.15
14:10
(2) + наверно и сам материал выбирай, чтобы видеть чего конкретно остаток ты получил :)
4 Масянька
 
26.02.15
14:11
(0) А при заполнении документа (подбор) не вариант?
5 floody
 
26.02.15
14:13
(0) контроль остатков обычный? предлагаю посмотреть видео павла чистова, первые 5-6 уроков. и не изобретать велосипед.
6 SleepyHead
 
гуру
26.02.15
14:20
Спиши и проверь остатки. Если есть отрицательные, выставляй Отказ в Истину, то есть транзакция будет отменена, документ не будет проведен.
7 SleepyHead
 
гуру
26.02.15
14:20
(4) пока он подбирает, другой списать может.
8 golovonometr
 
26.02.15
14:29
контроль остатков обычный, самый примитивный склад, с которого списываются товары по номенклатуре, я как программист, понимаю что проверять остатки по каждой номенклатуре необходимо будет сделать, но каждый раз Запрос посылать или функцию проверки на остатки в цикле - стремно, наверно стремно будет также списать, а потом проверить на отрицательные остатки все и отменять транзакцию. Или это нормальная практика в 1С? Если можно приведите пример.

С Временными таблицами мне понравилось, копаюсь в этом пока.
9 anatoly
 
26.02.15
14:35
во первых наверное не ОбработкаПроведения а ПередЗаписью.
во вторых, выбери остатки как в (2) объедини с ТЧ списания по номенклатуре - и посмотри в каких строках остаток меньше расхода.
10 Бубка Гоп
 
26.02.15
14:37
(8) ну вт прикольно когда решается задача посерьезнее, все таки. если все так примитивно как ты описал, то можно обойтись и СпискомЗначений в качестве параметра.
11 Бубка Гоп
 
26.02.15
14:38
(9) почему перед записью? аргументируйте.
12 DrShust
 
26.02.15
14:44
(8)     
    МВТ = Новый МенеджерВременныхТаблиц;
    Запрос = Новый Запрос;
    Запрос.МенеджерВременныхТаблиц = МВТ;
    ТЗ = ТабЧаст.Выгрузить(, "Номенклатура, Количество");
    Запрос.УстановитьПараметр("тз", ТЗ);
    Запрос.Текст = "ВЫБРАТЬ
                   |    тз.Номенклатура
                   |ПОМЕСТИТЬ втТЗ
                   |ИЗ
                   |    &тз КАК тзСостав;
                   |
                   |////////////////////////////////////////////////////////////////////////////////
13 SleepyHead
 
гуру
26.02.15
15:10
(9) В проведении нужно это делать, так как выполняется транзакция и в этот момент другие пользователи списывать не могут.

Управление блокировками автоматическое или управляемое?
14 D_E_S_131
 
26.02.15
15:13
(12) Зачем менеджер ВТ инициализировать, если работа с ВТ внутри одного запроса происходит?
Зачем вообще создавать ВТ, если нужны данные всего лишь из одной колонки?

(8) "нормальная практика" — проверить остатки на "минус" это замечательная практика.