Имя: Пароль:
1C
1С v8
Перепроведение документа
0 farced
 
13.10.14
02:26
Наверняка, вопрос поднимался много раз, но долгий гуглинг не принес плодов.

В документе (списание товара со склада) нужно проверить остатки товара на складе перед проведением. Проблема в том, что если документ1 был проведен, то в регистрах накопления есть записи списания от документа1 и получается, что на складе товара не хватает. Как исключить движения Документа1 из проверки остатков товара на складе?

//Проверка на наличие товара для списания
    СписокЗначений = Новый СписокЗначений;
    Движения.ТоварыНаСкладе.Записывать = Истина;
    Движения.ТоварыНаСкладе.Очистить();    
//    Ссылка.ПолучитьОбъект().Записать(РежимЗаписиДокумента.ОтменаПроведения);
    
    Оперативно = (Режим = РежимПроведенияДокумента.Оперативный);
    
    Для Каждого Товар Из Товары Цикл
        СписокЗначений.Добавить(Товар.Товар);    
    КонецЦикла;
    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    ТоварыНаСкладеОстатки.КоличествоОстаток,
                   |    ТоварыНаСкладеОстатки.Товары
                   |ИЗ
                   |    РегистрНакопления.ТоварыНаСкладе.Остатки(
                   |            &ПараметрПериод,
                   |            Товары В (&Товары)
                   |                И Склад = &Склад) КАК ТоварыНаСкладеОстатки"
                   ;
    Запрос.УстановитьПараметр("ПараметрПериод", МоментВремени());
    Запрос.УстановитьПараметр("Склад", Склад);
    Запрос.УстановитьПараметр("Товары", СписокЗначений);
    
    Выборка = Запрос.Выполнить().Выбрать();
    
    ДостатоточноТовара = Истина;
    НедостающиеТовары = "";
    МассивТоваров = Новый Массив;
    
    
    Для Каждого Товар Из Товары Цикл
        ДобавитьВМассив(Товар.Товар, Товар.Количество, МассивТоваров);            
    КонецЦикла;
    
    Для Каждого Элемент ИЗ МассивТоваров Цикл
        СтруктураПоиска = Новый Структура;
        СтруктураПоиска.Вставить("Товары", Элемент.Товар);
        Если Выборка.НайтиСледующий(СтруктураПоиска) Тогда
            Если Выборка.КоличествоОстаток < Элемент.Количество Тогда
                ДостатоточноТовара = Ложь;
                НедостающиеТовары = НедостающиеТовары + " " + Элемент.Товар + ",";
            Иначе
                //Списание
            КонецЕсли;
        Иначе
            ДостатоточноТовара = Ложь;
            НедостающиеТовары = НедостающиеТовары + " " + Элемент.Товар + ",";
        КонецЕсли;
        
    КонецЦикла;
    
    Если НЕ ДостатоточноТовара Тогда
        Сообщить("Недостаточно товаров" + Лев(НедостающиеТовары, СтрДлина(НедостающиеТовары) - 1)
         + " на складе " + Склад);
         Если Режим = РежимПроведенияДокумента.Оперативный Тогда
             Отказ = Истина;
             Возврат;
         КонецЕсли;
     КонецЕсли;
1 Klesk666
 
13.10.14
02:33
ВЫБРАТЬ
    СвободныеОстаткиОстатки.Номенклатура,
    СвободныеОстаткиОстатки.Характеристика,
    СвободныеОстаткиОстатки.Склад,
    СвободныеОстаткиОстатки.ВНаличииОстаток
ИЗ
    РегистрНакопления.СвободныеОстатки.Остатки(&ДатаДокМинусСекунду, ) КАК СвободныеОстаткиОстатки
2 Klesk666
 
13.10.14
02:40
а если как в ут 11 когда остатки контролируются в пределах месяца (к слову в 11.1.2.23 вообще при списании не контролируются) - то через запрос а потом код, но лучше соблюдать хронологию, особенно если это списание товара
3 farced
 
13.10.14
03:08
Т.е. вы предлаете в запросе изменить дату на дату минус секунду?
4 farced
 
13.10.14
03:13
(2) У меня в запросе период не дата документа, а момент времени. На сколько я знаю, момент времени по дефолту ставит время ДО проведения документа.
5 SeraFim
 
13.10.14
04:27
Ты движения очистил, запиши их, из остатков они исчезнут
6 Галахад
 
гуру
13.10.14
04:31
Проверяй после проведения. Если появились минуса, значит остатка не хватает.
7 farced
 
13.10.14
04:37
(5) Вот оно решение. Спасибо большое!
8 farced
 
13.10.14
04:37
(6) Таки решение  (5)  проще. Но все равно, спасибо =)
9 SeraFim
 
13.10.14
05:44
(8) почитай про "новую методику проведения".
Более оптимально в некоторых случаях получится
10 Jokero
 
13.10.14
07:34
граница, вид границы исключая