Привязка остатка к продукции

1. Stanislav1993 10.08.18 09:13 Сейчас в теме
Здравствуйте ребята.
Пишу на 1С полгода. Возник вопрос.
Работаю над конфигурацией для оптового магазина. Имеется документ "передача продукции в торговый зал". При создании "Реализации продукции" хочется чтобы при выборе продукции, показывался текущий остаток данной продукции в торговом зале.
Буду рад вашим советам.
Заранее спасибо.
По теме из базы знаний
Найденные решения
34. Stanislav1993 10.08.18 13:58 Сейчас в теме
&НаСервере
Функция ПолучитьОстаток(Продукция)
Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ПередачаПродукцииОстатки.КоличествоОстаток КАК Количество
		|ИЗ
		|	РегистрНакопления.ПередачаПродукции.Остатки КАК ПередачаПродукцииОстатки
		|ГДЕ
		|	ПередачаПродукцииОстатки.Продукция = &Продукт";
	
	Запрос.УстановитьПараметр("Продукт",Продукция);
	
	РезультатЗапроса = Запрос.Выполнить().Выгрузить();
	Если РезультатЗапроса.Количество() = 0 Тогда
		Возврат 0;
	Иначе
		ИтогПоНоменклатуре = РезультатЗапроса.Итог("Количество");
		Возврат ИтогПоНоменклатуре;
	КонецЕсли;
	
КонецФункции

&НаКлиенте
Процедура ПрайсЛистПродукцияПриИзменении(Элемент)
	СтрокаТабличнойЧасти = Элементы.ПрайсЛист.ТекущиеДанные;
	Если ЗначениеЗаполнено(СтрокаТабличнойЧасти.Продукция)Тогда
		СтрокаТабличнойЧасти.Фирма 		  = СтрокаТабличнойЧасти.Продукция.ПолучитьОбъект().Фирма;
		СтрокаТабличнойЧасти.ТипПродукции = СтрокаТабличнойЧасти.Продукция.ПолучитьОбъект().ТипПродукции;
		СтрокаТабличнойЧасти.ЕдиницаИзмерения  = СтрокаТабличнойЧасти.Продукция.ПолучитьОбъект().ЕдИзмерения;
		СтрокаТабличнойЧасти.Количество = ПолучитьОстаток(СтрокаТабличнойЧасти.Продукция);
	 Сообщить(СтрокаТабличнойЧасти.Количество);

	КонецЕсли;
	 	
	
		
КонецПроцедуры
 
Показать

Вот готовое решение. Спасибо большое https://infostart.ru/profile/297352/
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
3. Doreng 27 10.08.18 09:35 Сейчас в теме
(1)Объедините регистры "Приход Продукции" и "Реализация продукции" и "Передачу" в один "Остатки по складу" и событие в документе "Реализации продукции" при изменении номенклатуры - запрос к остаткам
4. Stanislav1993 10.08.18 09:38 Сейчас в теме
(3)Не могли бы Вы пожалуйста наглядно это продемонстрировать?
Заранее спасибо.
2. Stanislav1993 10.08.18 09:16 Сейчас в теме
Прикрепил мою конфигурацию.
Прикрепленные файлы:
1Cv8.cf
5. Stanislav1993 10.08.18 09:39 Сейчас в теме
&НаКлиенте
Функция ПолучитьОстатокПродукции(Продукт,Всего)
	//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
	// Данный фрагмент построен конструктором.
	// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ПередачаПродукцииОстаткиИОбороты.КоличествоПриход КАК КоличествоПриход,
		|	ПередачаПродукцииОстаткиИОбороты.Продукция КАК Продукция
		|ИЗ
		|	РегистрНакопления.ПередачаПродукции.ОстаткиИОбороты КАК ПередачаПродукцииОстаткиИОбороты
		|ГДЕ
		|	ПередачаПродукцииОстаткиИОбороты.Продукция = &Продукт
		|	И ПередачаПродукцииОстаткиИОбороты.КоличествоПриход = &Всего
		|
		|СГРУППИРОВАТЬ ПО
		|	ПередачаПродукцииОстаткиИОбороты.КоличествоПриход,
		|	ПередачаПродукцииОстаткиИОбороты.Продукция";
	
	Запрос.УстановитьПараметр("Всего", Всего);
	Запрос.УстановитьПараметр("Продукт", Продукт);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
	Возврат ВыборкаДетальныеЗаписи.КоличествоПриход;
	
	КонецЦикла;
	
	//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
	
КонецФункции
Показать
7. Doreng 27 10.08.18 09:48 Сейчас в теме
(5)В конфигураторе на форме дока "реализация" правой кнопочкой по номенклатуре - события - приизменении - создать на сервере и на клиенте, далее в серверной процедуре Ваш запрос
"ВЫБРАТЬ 
|	ПередачаПродукцииОстатки.Количество КАК Количество
|ИЗ 
|	РегистрНакопления.ПередачаПродукции.Остатки КАК ПередачаПродукцииОстатки 
|ГДЕ 
|	ПередачаПродукцииОстатки.Продукция = &Продукт";

Запрос.УстановитьПараметр("Продукт", Продукт); 
Результат = Запрос.Выполнить().Выгрузить();
ИтогПоНоменклатуре = Результат.Итог("Количество");

Показать
6. Stanislav1993 10.08.18 09:42 Сейчас в теме
Вот что я делаю
Прикрепленные файлы:
8. Stanislav1993 10.08.18 09:57 Сейчас в теме
Сделал следовательно вашим инструкциям.Вылезла ошибка
"Переменная не определенна (Продукт)"
9. Doreng 27 10.08.18 10:04 Сейчас в теме
(8)Определите :-) вместо продукт - Объект.Продукция вроде
10. Stanislav1993 10.08.18 10:05 Сейчас в теме
(9)Не совсем понял Вас, если честно. Я просто недавно на этом форуме))
11. Doreng 27 10.08.18 10:05 Сейчас в теме
(10)Запрос.УстановитьПараметр("Продукт", Объект.Продукция);
не туплю не так
В процедуре
&НаКлиенте
Процедура ПрайсЛистПродукцияПриИзменении(Элемент)
	СтрокаТабличнойЧасти = Элементы.ПрайсЛист.ТекущиеДанные;
	Если ЗначениеЗаполнено(СтрокаТабличнойЧасти.Продукция)Тогда
		СтрокаТабличнойЧасти.Фирма 		  = СтрокаТабличнойЧасти.Продукция.ПолучитьОбъект().Фирма;
		СтрокаТабличнойЧасти.ТипПродукции = СтрокаТабличнойЧасти.Продукция.ПолучитьОбъект().ТипПродукции;
		СтрокаТабличнойЧасти.ЕдиницаИзмерения  = СтрокаТабличнойЧасти.Продукция.ПолучитьОбъект().ЕдИзмерения;
	КонецЕсли;
	
СтрокаТабличнойЧасти.Количество = ЗапросКоличества(СтрокаТабличнойЧасти.Номенклатура);		
КонецПроцедуры
&НаСервере
Функция ЗапросКоличества(Продукт)
"ВЫБРАТЬ 
|    ПередачаПродукцииОстатки.Количество КАК Количество
|ИЗ 
|    РегистрНакопления.ПередачаПродукции.Остатки КАК ПередачаПродукцииОстатки 
|ГДЕ 
|    ПередачаПродукцииОстатки.Продукция = &Продукт";

Запрос.УстановитьПараметр("Продукт", Продукт); 
Результат = Запрос.Выполнить().Выгрузить();
ИтогПоНоменклатуре = Результат.Итог("Количество");
Возврат ИтогПоНоменклатуре ;
КонецФункции; 
Показать
12. Stanislav1993 10.08.18 10:09 Сейчас в теме
(11)Сделал, только вместо Объект.Продукция, я прописал СтрокаТабличнойЧасти.Продукция.
Но вылезла другая ошибка :(
ИтогПоНоменклатуре = РезультатЗапроса.Итог("Количество");
по причине:
Недопустимое значение параметра (параметр номер '1') (Колонка не принадлежит коллекции)
13. Doreng 27 10.08.18 10:13 Сейчас в теме
(12)Все вроде, теперь в (11) правильно
14. Stanislav1993 10.08.18 10:36 Сейчас в теме
15. Doreng 27 10.08.18 10:37 Сейчас в теме
16. Stanislav1993 10.08.18 10:38 Сейчас в теме
(15)
Прикрепленные файлы:
17. Doreng 27 10.08.18 10:39 Сейчас в теме
(16)Попробуйте так
Запрос.УстановитьПараметр("Продукт", Продукт); 
Результат = Запрос.Выполнить().Выгрузить();
Если Результат.Количество() = 0 Тогда
Возврат 0;
Иначе
ИтогПоНоменклатуре = Результат.Итог("Количество");
Возврат ИтогПоНоменклатуре ;
КонецЕсли;
Показать
18. Stanislav1993 10.08.18 10:46 Сейчас в теме
(17)Создал Функцию
&НаСервере
Функция ПолучитьОстаток()
Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ПередачаПродукцииОстатки.КоличествоОстаток КАК КоличествоОстаток
		|ИЗ
		|	РегистрНакопления.ПередачаПродукции.Остатки КАК ПередачаПродукцииОстатки
		|ГДЕ
		|	ПередачаПродукцииОстатки.Продукция = &Продукт";
	
	Запрос.УстановитьПараметр("Продукт",Продукция);
	
	РезультатЗапроса = Запрос.Выполнить().Выгрузить();
	Если РезультатЗапроса.Количество() = 0 Тогда
		Возврат 0;
	Иначе
		ИтогПоНоменклатуре = РезультатЗапроса.Итог("Количество");
		Возврат ИтогПоНоменклатуре;
	КонецЕсли;
	
КонецФункции
Показать


Сейчас ее постараюсь подключить к событию при изменении
19. Stanislav1993 10.08.18 10:52 Сейчас в теме
(17)Сегодня черная пятница. Эта ошибка так и не хочет пропадать:
"Недопустимое значение параметра(параметр номер '1')(Колонка не принадлежит коллекции"
20. Doreng 27 10.08.18 10:53 Сейчас в теме
(19)Ошибка в запросе Как КоличествоОстаток, а нужно Как Количество
21. Stanislav1993 10.08.18 10:55 Сейчас в теме
(20)Поменял, все та же ошибка.
22. Stanislav1993 10.08.18 10:55 Сейчас в теме
Он ругается именно на строку ИтогПоНоменклатуре
23. Doreng 27 10.08.18 10:56 Сейчас в теме
(22)Он ругается потому что не видит колонки Количество, а знчит она у Вас не так называется
24. Stanislav1993 10.08.18 10:59 Сейчас в теме
(23)Поставил
ИтогПоНоменклатуре = РезультатЗапроса.Итог("ПрайсЛистКоличество");
Ругается так же.
Мистика
Прикрепленные файлы:
25. Doreng 27 10.08.18 11:01 Сейчас в теме
(24)Никакой мистики
ПередачаПродукцииОстатки.КоличествоОстаток КАК Количество // после как идет название колонки
Результат.Итог("Количество"); // а тут Вы запрашиваете итог по названию колонки

26. Stanislav1993 10.08.18 11:03 Сейчас в теме
(25)Ура, не сругался))) Но в колонке теперь 0.
27. Stanislav1993 10.08.18 11:07 Сейчас в теме
(25)
&НаКлиенте
Процедура ПрайсЛистПродукцияПриИзменении(Элемент)
	СтрокаТабличнойЧасти = Элементы.ПрайсЛист.ТекущиеДанные;
	Если ЗначениеЗаполнено(СтрокаТабличнойЧасти.Продукция)Тогда
		СтрокаТабличнойЧасти.Фирма 		  = СтрокаТабличнойЧасти.Продукция.ПолучитьОбъект().Фирма;
		СтрокаТабличнойЧасти.ТипПродукции = СтрокаТабличнойЧасти.Продукция.ПолучитьОбъект().ТипПродукции;
		СтрокаТабличнойЧасти.ЕдиницаИзмерения  = СтрокаТабличнойЧасти.Продукция.ПолучитьОбъект().ЕдИзмерения;
	КонецЕсли;
	 ПолучитьОстаток(СтрокаТабличнойЧасти.Количество);
	
	
		
КонецПроцедуры
Показать
28. Stanislav1993 10.08.18 11:08 Сейчас в теме
29. Doreng 27 10.08.18 11:12 Сейчас в теме
(28)СтрокаТабличнойЧасти.Количество = ПолучитьОстаток(СтрокаТабличнойЧасти.Номенклатура);
31. Stanislav1993 10.08.18 12:29 Сейчас в теме
(29)Попробовал через КоличествоПриход
30. Stanislav1993 10.08.18 12:21 Сейчас в теме
32. Stanislav1993 10.08.18 12:40 Сейчас в теме
&НаСервере
Функция ПолучитьОстаток(Продукция)
Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ПередачаПродукцииОстатки.КоличествоОстаток КАК Количество
		|ИЗ
		|	РегистрНакопления.ПередачаПродукции.Остатки КАК ПередачаПродукцииОстатки
		|ГДЕ
		|	ПередачаПродукцииОстатки.Продукция = &Продукт";
	
	Запрос.УстановитьПараметр("Продукт",Продукция);
	
	РезультатЗапроса = Запрос.Выполнить().Выгрузить();
	Если РезультатЗапроса.Количество() = 0 Тогда
		Возврат 0;
	Иначе
		ИтогПоНоменклатуре = РезультатЗапроса.Итог("Количество");
		Возврат ИтогПоНоменклатуре;
	КонецЕсли;
	
КонецФункции
Показать




Вроде все правильно. 1с-ка не ругается, но выдает нулевое значение.
33. Stanislav1993 10.08.18 12:46 Сейчас в теме
Коллеги есть ли у кого нибудь варианты?
34. Stanislav1993 10.08.18 13:58 Сейчас в теме
&НаСервере
Функция ПолучитьОстаток(Продукция)
Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ПередачаПродукцииОстатки.КоличествоОстаток КАК Количество
		|ИЗ
		|	РегистрНакопления.ПередачаПродукции.Остатки КАК ПередачаПродукцииОстатки
		|ГДЕ
		|	ПередачаПродукцииОстатки.Продукция = &Продукт";
	
	Запрос.УстановитьПараметр("Продукт",Продукция);
	
	РезультатЗапроса = Запрос.Выполнить().Выгрузить();
	Если РезультатЗапроса.Количество() = 0 Тогда
		Возврат 0;
	Иначе
		ИтогПоНоменклатуре = РезультатЗапроса.Итог("Количество");
		Возврат ИтогПоНоменклатуре;
	КонецЕсли;
	
КонецФункции

&НаКлиенте
Процедура ПрайсЛистПродукцияПриИзменении(Элемент)
	СтрокаТабличнойЧасти = Элементы.ПрайсЛист.ТекущиеДанные;
	Если ЗначениеЗаполнено(СтрокаТабличнойЧасти.Продукция)Тогда
		СтрокаТабличнойЧасти.Фирма 		  = СтрокаТабличнойЧасти.Продукция.ПолучитьОбъект().Фирма;
		СтрокаТабличнойЧасти.ТипПродукции = СтрокаТабличнойЧасти.Продукция.ПолучитьОбъект().ТипПродукции;
		СтрокаТабличнойЧасти.ЕдиницаИзмерения  = СтрокаТабличнойЧасти.Продукция.ПолучитьОбъект().ЕдИзмерения;
		СтрокаТабличнойЧасти.Количество = ПолучитьОстаток(СтрокаТабличнойЧасти.Продукция);
	 Сообщить(СтрокаТабличнойЧасти.Количество);

	КонецЕсли;
	 	
	
		
КонецПроцедуры
 
Показать

Вот готовое решение. Спасибо большое https://infostart.ru/profile/297352/
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)