INFOSTART EVENT 2018 EDUCATION

Второй тур голосования за доклады.
Окончание 5 сентября.

Федотов Виталий | Ведущий специалист | ГК Невада

«Повышение эффективности работы отдела разработки»

Основные слагаемые успеха: - Архитектура - Грамотный код - Ориентация на повторное использование кода - Управление ошибками Методы: - Обучение линейного и руководящего состава - Внимание на архитектуру - Итерационный подход к разработке API - Профилирование Результат: Повышение производительности труда отдела разработки в 2-3 раза. Особенность доклада заключается в изложении личного опыта построения работы отдела, где описанные методы были с успехом применены и повысили производительность труда отдела разработки.

1. Stanislav1993 10.08.18 09:13 Сейчас в теме

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

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

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

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

Вот готовое решение. Спасибо большое https://infostart.ru/profile/297352/
Остальные ответы
Сортировка: Древо
3. Doreng 6 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 6 10.08.18 09:48 Сейчас в теме
(5)В конфигураторе на форме дока "реализация" правой кнопочкой по номенклатуре - события - приизменении - создать на сервере и на клиенте, далее в серверной процедуре Ваш запрос
"ВЫБРАТЬ 
|	ПередачаПродукцииОстатки.Количество КАК Количество
|ИЗ 
|	РегистрНакопления.ПередачаПродукции.Остатки КАК ПередачаПродукцииОстатки 
|ГДЕ 
|	ПередачаПродукцииОстатки.Продукция = &Продукт";

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

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

Запрос.УстановитьПараметр("Продукт", Продукт); 
Результат = Запрос.Выполнить().Выгрузить();
ИтогПоНоменклатуре = Результат.Итог("Количество");
Возврат ИтогПоНоменклатуре ;
КонецФункции; 
Показать
12. Stanislav1993 10.08.18 10:09 Сейчас в теме
(11)Сделал, только вместо Объект.Продукция, я прописал СтрокаТабличнойЧасти.Продукция.
Но вылезла другая ошибка :(
ИтогПоНоменклатуре = РезультатЗапроса.Итог("Количество");
по причине:
Недопустимое значение параметра (параметр номер '1') (Колонка не принадлежит коллекции)
13. Doreng 6 10.08.18 10:13 Сейчас в теме
(12)Все вроде, теперь в (11) правильно
14. Stanislav1993 10.08.18 10:36 Сейчас в теме
15. Doreng 6 10.08.18 10:37 Сейчас в теме
16. Stanislav1993 10.08.18 10:38 Сейчас в теме
17. Doreng 6 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 6 10.08.18 10:53 Сейчас в теме
(19)Ошибка в запросе Как КоличествоОстаток, а нужно Как Количество
21. Stanislav1993 10.08.18 10:55 Сейчас в теме
(20)Поменял, все та же ошибка.
22. Stanislav1993 10.08.18 10:55 Сейчас в теме
Он ругается именно на строку ИтогПоНоменклатуре
23. Doreng 6 10.08.18 10:56 Сейчас в теме
(22)Он ругается потому что не видит колонки Количество, а знчит она у Вас не так называется
24. Stanislav1993 10.08.18 10:59 Сейчас в теме
(23)Поставил
ИтогПоНоменклатуре = РезультатЗапроса.Итог("ПрайсЛистКоличество");
Ругается так же.
Мистика
Прикрепленные файлы:
25. Doreng 6 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 6 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С
Санкт-Петербург
Временный (на проект)

Программист 1С
Москва
Полный день

Консультант-аналитик 1С
Санкт-Петербург
зарплата от 80 000 руб.
Полный день

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