Перемещение товаров между складами

1. Intercititude 19.07.18 14:31 Сейчас в теме
Есть некий справочник с номенклатурой и Регистр накопления " Товары на складах" с измерениями: Склад,Номенклатура; ресурс: Количество.

Необходимо реализовать механизм перемещения номенклатуры между складами посредством документа "Перемещение товара". Склады определяются в документе с помощью реквизитов "Склад отправитель" и "Склад получатель". Данный документ регистрирует изменение складских остатков и так же в нём должен быть реализован контроль остатков.

Подскажите пожалуйста подробно,как с помощью конструктора запроса в Обработке проведения это реализовать?
По теме из базы знаний
Найденные решения
18. Boneman 299 23.07.18 17:19 Сейчас в теме
(17) вот, изучай

нашел 3 грубых ошибки (и это даже не текст запроса, хотя там тоже не хватало полей)
Прикрепленные файлы:
tovari3.dt
Intercititude; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Boneman 299 19.07.18 14:42 Сейчас в теме
(1) курс чистова посмотрите, да или публикации на эту тему..
в конце концов, ответы на билеты по подготовке к экзаменам на спеца.

Совершенно точно, данный вопрос относится к разряду учебных, и разжеван много раз...в различных вариациях (например сделать реализацию товаров с контролем остатка на складе). Совершенно точно у чистова есть и публикации подробные, есть и вебинар в нескольких частях, где также доходит до момента создания документа, с движениями и контролем остатков.

Ваша постановка вопроса, такова - что вам требуется курс пройти учебный, и попрактиковаться..а на форуме, мягко говоря, можно лишь пофлудить, ну или подсказать что-то конкретное.
3. Boneman 299 19.07.18 15:23 Сейчас в теме
вот нашел например статейку, где все понятным языком расписано
https://infostart.ru/public/195591/
user705522_constantin_h; +1 Ответить
4. Intercititude 22.07.18 22:11 Сейчас в теме
Приход и расход получилось реализовать, но сообщение с остатками так и не выводит...



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

		КонецЦикла;
	КонецЕсли;

КонецПроцедуры
Показать
5. Boneman 299 23.07.18 09:03 Сейчас в теме
(4)
Приход и расход получилось реализовать, но сообщение с остатками так и не выводит...

попробуйте использовать вместо Сообщить,
Новый СообщениеПользователю и т.д. см.СП
7. Intercititude 23.07.18 15:30 Сейчас в теме
(5)Уже пробовал и так и сяк. Срабатывание этого не происходит ни при каких условиях: "Если данные.Количество() > 0 Тогда"
10. Boneman 299 23.07.18 15:47 Сейчас в теме
(7) так ты на каком складе остатки проверяешь ? У тебя же склад получатель там проверяется. А там, естественно всегда + т.к. туда и прибыло.


Смысл данного кода таков,
Сначала делаем движение - СкладИсточник (расход) --->СкладПолучатель (приход)
далее проверяем, остаток на СкладИсточник-е, если там ушло в минус, то отмена транзакции. Если там 0 или + значит все окейно.
11. Intercititude 23.07.18 15:56 Сейчас в теме
(10) На СкладеИсточник-е разумеется!



Приложил выгруженную базу.
Прикрепленные файлы:
tovari.dt
12. Boneman 299 23.07.18 15:58 Сейчас в теме
(11) а в приложенном коде написано
    Запрос.УстановитьПараметр("Склад", СкладПолучатель);    
    Запрос.УстановитьПараметр("Ссылка",     ЭтотОбъект.Ссылка);    

описка ?


З.Ы. У меня твой Дт шник не открывается, требует версию платформы 8.3.12 ))) Обновлять не буду )
13. Intercititude 23.07.18 16:01 Сейчас в теме
(12)Описка да. Выше выгрузил базу, там всё верно.

P.S. Блин, плохо. Я тогда и правда не знаю в чём дело...
14. Boneman 299 23.07.18 16:05 Сейчас в теме
(13) у тебя движение то, при проведении вообще происходит ?

вообще мне кажется ты остаток некорректно берешь.
У тебя должен быть полный набор измерений, номенклатура, склад, характеристика, серийник ...что там еще
Ты двигаешь указываешь все измерения регистра, вот и считывать остаток тебе тоже надо точно по всем таким же измерениям регистра
15. Intercititude 23.07.18 16:06 Сейчас в теме
(14) Да ! С одного склада в минус и в другой сразу в плюс.

Вроде так и так указываю абсолютно все измерения которые есть. Просто я думаю, что остатка как такого вообще нету, т.к. с одного склада он уходит и сразу приходит на другой, то есть товар всегда в плюсе.
16. Boneman 299 23.07.18 16:40 Сейчас в теме
(15)
Просто я думаю, что остатка как такого вообще нету, т.к. с одного склада он уходит и сразу приходит на другой, то есть товар всегда в плюсе.

Ну так Склад - у тебя же измерение регистра ? Остаток же в разрезе склада надо смотреть.

Включи режим совместимости конфигурации 8.3.10 или 11
выложи еще раз свой дтшник
17. Intercititude 23.07.18 16:47 Сейчас в теме
(16)Да измерение. Прикладываю.
Прикрепленные файлы:
tovari.dt
18. Boneman 299 23.07.18 17:19 Сейчас в теме
(17) вот, изучай

нашел 3 грубых ошибки (и это даже не текст запроса, хотя там тоже не хватало полей)
Прикрепленные файлы:
tovari3.dt
Intercititude; +1 Ответить
19. Intercititude 23.07.18 17:48 Сейчас в теме
(18)Какие ещё ошибки помимо запроса и того что не указал неправильный тип Склад регистра накопления?
20. Boneman 299 23.07.18 18:01 Сейчас в теме
(19) тип регистра накопления - строка, это ключевая ошибка.
в проверке на остатки, было если количество <0 в таблице значений не может быть отрицательного количества строк, условие никогда не выполнилось бы
ну и количество полей в запросе, как я и говорил. Добавил измерений. К тому же Сообщить в твоем случае сообще бы не сработало, т.к. оно ссылалось на несуществующие поля выборки.
Intercititude; +1 Ответить
21. Intercititude 23.07.18 18:06 Сейчас в теме
(20)Огромное спасибо вам!

Кол-во полей просто кучу раз менял и знак < > . Получается ошибка крылась только лишь в Типе регистра на которую я даже внимания не обратил.
6. starjevschik 23.07.18 09:14 Сейчас в теме
С помощью конструктора запросов можно написать запрос.
А реализовать указанную задачу - никак. Потому что запрос в этой реализации не главное и уж точно не единственное...
8. Intercititude 23.07.18 15:31 Сейчас в теме
(6) Лучше бы по делу дали совет или что ещё, нежели загадками говорить!
9. пользователь 23.07.18 15:32
Сообщение было скрыто модератором.
...
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот