Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 00:24

СписаниеТовара. Запрет на проведение

Автор Samouchka, 14 ноя 2017, 21:06

0 Пользователей и 1 гость просматривают эту тему.

Samouchka

Здравствуйте. Платформа 8.3 УправляемаяФорма. Есть четыре документа: Поступление,Реализация,Перемещение,Списание. Есть справочник Склады (основной-предопределенный и дополнительный).Есть РегистрНакопления ОстаткиТоваров (измерение: номенклатура, склад: ресурс Количество). Например, поступило 20 телевизоров на основной склад. Переместили с основного на дополнительный 5 телевизоров. С дополнительного продали 2 телевизора. Отчет по товарам на складах показывает остатки 15 на основной, 3 на дополнительном. Если начинаю списывать 18 телевизоров с основного, он списывает. То есть берет общее количество  на основном и на дополнительном. Не пойму в чем ошибка? В коде? В РегистреНакопления? То есть получается что склады связаны. Может как-то их разъединить? Или в коде что-то надо добавить? Подскажите, пожалуйста.


Процедура ОбработкаПроведения(Отказ, Режим)

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

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

Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();

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

КонецПроцедуры

Golickoff

Где отбор по складу?
|        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(&Дата, Склад = &Склад) КАК ОстаткиТоваровОстатки
...
Запрос.УставновитьПараметр("Склад", Склад);

Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению ... рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.

Samouchka

Цитата: Golickoff от 15 ноя 2017, 02:06
Где отбор по складу?
|        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(&Дата, Склад = &Склад) КАК ОстаткиТоваровОстатки
...
Запрос.УставновитьПараметр("Склад", Склад);

Выдает ошибку при проведении списания:

Ошибка при выполнении обработчика - 'ОбработкаПроведения'
по причине:
{Документ.СписаниеТоваров.МодульОбъекта(26)}: Метод объекта не обнаружен (УставновитьПараметр)
    Запрос.УставновитьПараметр("Склад", Склад);

Golickoff

Я опечатался и написал "устаВновить" вместо "установить".
Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению ... рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.

Samouchka

Цитата: Golickoff от 15 ноя 2017, 08:26
Я опечатался и написал "устаВновить" вместо "установить".

Так и я не заметил. Все работает. :zebzdr:  Спасибо огромное

Похожие темы (5)

Рейтинг@Mail.ru

Поиск