Привязка остатка к продукции
Здравствуйте ребята.
Пишу на 1С полгода. Возник вопрос.
Работаю над конфигурацией для оптового магазина. Имеется документ "передача продукции в торговый зал". При создании "Реализации продукции" хочется чтобы при выборе продукции, показывался текущий остаток данной продукции в торговом зале.
Буду рад вашим советам.
Заранее спасибо.
Пишу на 1С полгода. Возник вопрос.
Работаю над конфигурацией для оптового магазина. Имеется документ "передача продукции в торговый зал". При создании "Реализации продукции" хочется чтобы при выборе продукции, показывался текущий остаток данной продукции в торговом зале.
Буду рад вашим советам.
Заранее спасибо.
По теме из базы знаний
- Концепция автоматизации многопрофильного Холдинга в системе АУБ на платформе 1С
- Информационная панель номенклатуры для 1С: Розница 2.2. Остатки по складам, информация о ценах, штрихкодах, остатки товара на складах. Остатки ЕГАИС в справочнике номенклатуры
- ЕГАИС от А до Я
- Автоматизация предприятий пищевой отрасли на базе 1С:ERP (прослеживаемость состава готовой продукции от сырья до реализации)
- Выгрузки остатков / цен данных номенклатуры на сайт Битрикс и загрузка Номенклатуры с сайта в 1С
Найденные решения
&НаСервере
Функция ПолучитьОстаток(Продукция)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПередачаПродукцииОстатки.КоличествоОстаток КАК Количество
|ИЗ
| РегистрНакопления.ПередачаПродукции.Остатки КАК ПередачаПродукцииОстатки
|ГДЕ
| ПередачаПродукцииОстатки.Продукция = &Продукт";
Запрос.УстановитьПараметр("Продукт",Продукция);
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
Если РезультатЗапроса.Количество() = 0 Тогда
Возврат 0;
Иначе
ИтогПоНоменклатуре = РезультатЗапроса.Итог("Количество");
Возврат ИтогПоНоменклатуре;
КонецЕсли;
КонецФункции
&НаКлиенте
Процедура ПрайсЛистПродукцияПриИзменении(Элемент)
СтрокаТабличнойЧасти = Элементы.ПрайсЛист.ТекущиеДанные;
Если ЗначениеЗаполнено(СтрокаТабличнойЧасти.Продукция)Тогда
СтрокаТабличнойЧасти.Фирма = СтрокаТабличнойЧасти.Продукция.ПолучитьОбъект().Фирма;
СтрокаТабличнойЧасти.ТипПродукции = СтрокаТабличнойЧасти.Продукция.ПолучитьОбъект().ТипПродукции;
СтрокаТабличнойЧасти.ЕдиницаИзмерения = СтрокаТабличнойЧасти.Продукция.ПолучитьОбъект().ЕдИзмерения;
СтрокаТабличнойЧасти.Количество = ПолучитьОстаток(СтрокаТабличнойЧасти.Продукция);
Сообщить(СтрокаТабличнойЧасти.Количество);
КонецЕсли;
КонецПроцедуры
ПоказатьВот готовое решение. Спасибо большое
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
&НаКлиенте
Функция ПолучитьОстатокПродукции(Продукт,Всего)
//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПередачаПродукцииОстаткиИОбороты.КоличествоПриход КАК КоличествоПриход,
| ПередачаПродукцииОстаткиИОбороты.Продукция КАК Продукция
|ИЗ
| РегистрНакопления.ПередачаПродукции.ОстаткиИОбороты КАК ПередачаПродукцииОстаткиИОбороты
|ГДЕ
| ПередачаПродукцииОстаткиИОбороты.Продукция = &Продукт
| И ПередачаПродукцииОстаткиИОбороты.КоличествоПриход = &Всего
|
|СГРУППИРОВАТЬ ПО
| ПередачаПродукцииОстаткиИОбороты.КоличествоПриход,
| ПередачаПродукцииОстаткиИОбороты.Продукция";
Запрос.УстановитьПараметр("Всего", Всего);
Запрос.УстановитьПараметр("Продукт", Продукт);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Возврат ВыборкаДетальныеЗаписи.КоличествоПриход;
КонецЦикла;
//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
КонецФункции
Показать
(5)В конфигураторе на форме дока "реализация" правой кнопочкой по номенклатуре - события - приизменении - создать на сервере и на клиенте, далее в серверной процедуре Ваш запрос
"ВЫБРАТЬ
| ПередачаПродукцииОстатки.Количество КАК Количество
|ИЗ
| РегистрНакопления.ПередачаПродукции.Остатки КАК ПередачаПродукцииОстатки
|ГДЕ
| ПередачаПродукцииОстатки.Продукция = &Продукт";
Запрос.УстановитьПараметр("Продукт", Продукт);
Результат = Запрос.Выполнить().Выгрузить();
ИтогПоНоменклатуре = Результат.Итог("Количество");
Показать
(10)Запрос.УстановитьПараметр("Продукт", Объект.Продукция);
не туплю не так
В процедуре
не туплю не так
В процедуре
&НаКлиенте
Процедура ПрайсЛистПродукцияПриИзменении(Элемент)
СтрокаТабличнойЧасти = Элементы.ПрайсЛист.ТекущиеДанные;
Если ЗначениеЗаполнено(СтрокаТабличнойЧасти.Продукция)Тогда
СтрокаТабличнойЧасти.Фирма = СтрокаТабличнойЧасти.Продукция.ПолучитьОбъект().Фирма;
СтрокаТабличнойЧасти.ТипПродукции = СтрокаТабличнойЧасти.Продукция.ПолучитьОбъект().ТипПродукции;
СтрокаТабличнойЧасти.ЕдиницаИзмерения = СтрокаТабличнойЧасти.Продукция.ПолучитьОбъект().ЕдИзмерения;
КонецЕсли;
СтрокаТабличнойЧасти.Количество = ЗапросКоличества(СтрокаТабличнойЧасти.Номенклатура);
КонецПроцедуры
&НаСервере
Функция ЗапросКоличества(Продукт)
"ВЫБРАТЬ
| ПередачаПродукцииОстатки.Количество КАК Количество
|ИЗ
| РегистрНакопления.ПередачаПродукции.Остатки КАК ПередачаПродукцииОстатки
|ГДЕ
| ПередачаПродукцииОстатки.Продукция = &Продукт";
Запрос.УстановитьПараметр("Продукт", Продукт);
Результат = Запрос.Выполнить().Выгрузить();
ИтогПоНоменклатуре = Результат.Итог("Количество");
Возврат ИтогПоНоменклатуре ;
КонецФункции;
Показать
(11)Сделал, только вместо Объект.Продукция, я прописал СтрокаТабличнойЧасти.Продукция.
Но вылезла другая ошибка :(
ИтогПоНоменклатуре = РезультатЗапроса.Итог("Количество");
по причине:
Недопустимое значение параметра (параметр номер '1') (Колонка не принадлежит коллекции)
Но вылезла другая ошибка :(
ИтогПоНоменклатуре = РезультатЗапроса.Итог("Количество");
по причине:
Недопустимое значение параметра (параметр номер '1') (Колонка не принадлежит коллекции)
(16)Попробуйте так
Запрос.УстановитьПараметр("Продукт", Продукт);
Результат = Запрос.Выполнить().Выгрузить();
Если Результат.Количество() = 0 Тогда
Возврат 0;
Иначе
ИтогПоНоменклатуре = Результат.Итог("Количество");
Возврат ИтогПоНоменклатуре ;
КонецЕсли;
Показать
(17)Создал Функцию
Сейчас ее постараюсь подключить к событию при изменении
&НаСервере
Функция ПолучитьОстаток()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПередачаПродукцииОстатки.КоличествоОстаток КАК КоличествоОстаток
|ИЗ
| РегистрНакопления.ПередачаПродукции.Остатки КАК ПередачаПродукцииОстатки
|ГДЕ
| ПередачаПродукцииОстатки.Продукция = &Продукт";
Запрос.УстановитьПараметр("Продукт",Продукция);
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
Если РезультатЗапроса.Количество() = 0 Тогда
Возврат 0;
Иначе
ИтогПоНоменклатуре = РезультатЗапроса.Итог("Количество");
Возврат ИтогПоНоменклатуре;
КонецЕсли;
КонецФункции
ПоказатьСейчас ее постараюсь подключить к событию при изменении
(25)
&НаКлиенте
Процедура ПрайсЛистПродукцияПриИзменении(Элемент)
СтрокаТабличнойЧасти = Элементы.ПрайсЛист.ТекущиеДанные;
Если ЗначениеЗаполнено(СтрокаТабличнойЧасти.Продукция)Тогда
СтрокаТабличнойЧасти.Фирма = СтрокаТабличнойЧасти.Продукция.ПолучитьОбъект().Фирма;
СтрокаТабличнойЧасти.ТипПродукции = СтрокаТабличнойЧасти.Продукция.ПолучитьОбъект().ТипПродукции;
СтрокаТабличнойЧасти.ЕдиницаИзмерения = СтрокаТабличнойЧасти.Продукция.ПолучитьОбъект().ЕдИзмерения;
КонецЕсли;
ПолучитьОстаток(СтрокаТабличнойЧасти.Количество);
КонецПроцедуры
Показать&НаСервере
Функция ПолучитьОстаток(Продукция)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПередачаПродукцииОстатки.КоличествоОстаток КАК Количество
|ИЗ
| РегистрНакопления.ПередачаПродукции.Остатки КАК ПередачаПродукцииОстатки
|ГДЕ
| ПередачаПродукцииОстатки.Продукция = &Продукт";
Запрос.УстановитьПараметр("Продукт",Продукция);
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
Если РезультатЗапроса.Количество() = 0 Тогда
Возврат 0;
Иначе
ИтогПоНоменклатуре = РезультатЗапроса.Итог("Количество");
Возврат ИтогПоНоменклатуре;
КонецЕсли;
КонецФункции
ПоказатьВроде все правильно. 1с-ка не ругается, но выдает нулевое значение.
&НаСервере
Функция ПолучитьОстаток(Продукция)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПередачаПродукцииОстатки.КоличествоОстаток КАК Количество
|ИЗ
| РегистрНакопления.ПередачаПродукции.Остатки КАК ПередачаПродукцииОстатки
|ГДЕ
| ПередачаПродукцииОстатки.Продукция = &Продукт";
Запрос.УстановитьПараметр("Продукт",Продукция);
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
Если РезультатЗапроса.Количество() = 0 Тогда
Возврат 0;
Иначе
ИтогПоНоменклатуре = РезультатЗапроса.Итог("Количество");
Возврат ИтогПоНоменклатуре;
КонецЕсли;
КонецФункции
&НаКлиенте
Процедура ПрайсЛистПродукцияПриИзменении(Элемент)
СтрокаТабличнойЧасти = Элементы.ПрайсЛист.ТекущиеДанные;
Если ЗначениеЗаполнено(СтрокаТабличнойЧасти.Продукция)Тогда
СтрокаТабличнойЧасти.Фирма = СтрокаТабличнойЧасти.Продукция.ПолучитьОбъект().Фирма;
СтрокаТабличнойЧасти.ТипПродукции = СтрокаТабличнойЧасти.Продукция.ПолучитьОбъект().ТипПродукции;
СтрокаТабличнойЧасти.ЕдиницаИзмерения = СтрокаТабличнойЧасти.Продукция.ПолучитьОбъект().ЕдИзмерения;
СтрокаТабличнойЧасти.Количество = ПолучитьОстаток(СтрокаТабличнойЧасти.Продукция);
Сообщить(СтрокаТабличнойЧасти.Количество);
КонецЕсли;
КонецПроцедуры
ПоказатьВот готовое решение. Спасибо большое
Внимание! Тема сдана в архив
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот