Имя: Пароль:
1C
1С v8
Помогите пожалуйста разобраться с контролем остатков.
0 MihaSerb
 
24.03.13
17:35
Доброе время суток, подксажите пожалуйста новечку сделать контроль остатков,при создании документа расходная накладная берем товар со склада где имеется товар и со склада где нет товара документ проходит, а если создать два документа то со складом где нехватает товара выдается ошибка, подскажите пожалуйста а то уже запутался голова кругом)))
Процедура ОбработкаПроведения(Отказ, Режим)

   Движения.ТоварыНаСкладе.Записывать = Истина;
   МенеджерВТ = Новый МенеджерВременныхТаблиц;
   Запрос = Новый Запрос;
   // Укажем, какой менеджер временных таблиц использует этот запрос


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


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

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

КонецПроцедуры
1 GANR
 
24.03.13
18:21
(0) во 2-м запросе пакета замени условие левого соединения
ПО ТоварыНаСкладеОстатки.Номенклатура = ДокТЧ.Номенклатура
на такое
ПО ТоварыНаСкладеОстатки.Номенклатура = ДокТЧ.Номенклатура
И ТоварыНаСкладеОстатки.Склад = ДокТЧ.Склад

и ещё: выкинь из 1-го запроса присоединяемую таблицу Документ.РасходнаяНакладная - её данные нигде не используются
2 Cthulhu
 
24.03.13
18:25
(1): "её данные" используются в третьем "СГРУППИРОВАТЬ ПО ... РасходнаяНакладная.Ссылка" первого запроса. Т.е. ещё и внем заменить на "СГРУППИРОВАТЬ ПО ... РасходнаяНакладнаяТовары.Ссылка"
3 GANR
 
24.03.13
18:31
(2) группировку по Ссылка вообще выкинуть
4 GANR
 
24.03.13
18:37
(0) все понятно?
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн