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

    Запрос.УстановитьПараметр("Продукт",Продукция);

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

    КонецФункции

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

    КонецЕсли;

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

Вот готовое решение. Спасибо большое https://infostart.ru/profile/297352/
---
Объедините регистры "Приход Продукции" и "Реализация продукции" и "Передачу" в один "Остатки по складу" и событие в документе "Реализации продукции" при изменении номенклатуры - запрос к остаткам
---
Не могли бы Вы пожалуйста наглядно это продемонстрировать?
Заранее спасибо.
---
Прикрепил мою конфигурацию.
---
```1c
    &НаКлиенте
    Функция ПолучитьОстатокПродукции(Продукт,Всего)
    //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ПередачаПродукцииОстаткиИОбороты.КоличествоПриход КАК КоличествоПриход,
    | ПередачаПродукцииОстаткиИОбороты.Продукция КАК Продукция
    |ИЗ
    | РегистрНакопления.ПередачаПродукции.ОстаткиИОбороты КАК ПередачаПродукцииОстаткиИОбороты
    |ГДЕ
    | ПередачаПродукцииОстаткиИОбороты.Продукция = &Продукт
    | И ПередачаПродукцииОстаткиИОбороты.КоличествоПриход = &Всего
    |
    |СГРУППИРОВАТЬ ПО
    | ПередачаПродукцииОстаткиИОбороты.КоличествоПриход,
    | ПередачаПродукцииОстаткиИОбороты.Продукция";

    Запрос.УстановитьПараметр("Всего", Всего);
    Запрос.УстановитьПараметр("Продукт", Продукт);

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

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

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    Возврат ВыборкаДетальныеЗаписи.КоличествоПриход;

    КонецЦикла;

    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

    КонецФункции
```
---
В конфигураторе на форме дока "реализация" правой кнопочкой по номенклатуре - события - приизменении - создать на сервере и на клиенте, далее в серверной процедуре Ваш запрос

```1c
    "ВЫБРАТЬ
    | ПередачаПродукцииОстатки.Количество КАК Количество
    |ИЗ
    | РегистрНакопления.ПередачаПродукции.Остатки КАК ПередачаПродукцииОстатки
    |ГДЕ
    | ПередачаПродукцииОстатки.Продукция = &Продукт";

    Запрос.УстановитьПараметр("Продукт", Продукт);
    Результат = Запрос.Выполнить().Выгрузить();
    ИтогПоНоменклатуре = Результат.Итог("Количество");
```
---
Вот что я делаю
---
Сделал следовательно вашим инструкциям.Вылезла ошибка
"Переменная не определенна (Продукт)"
---
Определите :-) вместо продукт - Объект.Продукция вроде
---
Не совсем понял Вас, если честно. Я просто недавно на этом форуме))
---
Запрос.УстановитьПараметр("Продукт", Объект.Продукция);
не туплю не так
В процедуре

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

    СтрокаТабличнойЧасти.Количество = ЗапросКоличества(СтрокаТабличнойЧасти.Номенклатура);
    КонецПроцедуры
    &НаСервере
    Функция ЗапросКоличества(Продукт)
    "ВЫБРАТЬ
    | ПередачаПродукцииОстатки.Количество КАК Количество
    |ИЗ
    | РегистрНакопления.ПередачаПродукции.Остатки КАК ПередачаПродукцииОстатки
    |ГДЕ
    | ПередачаПродукцииОстатки.Продукция = &Продукт";

    Запрос.УстановитьПараметр("Продукт", Продукт);
    Результат = Запрос.Выполнить().Выгрузить();
    ИтогПоНоменклатуре = Результат.Итог("Количество");
    Возврат ИтогПоНоменклатуре ;
    КонецФункции;
```
---
Сделал, только вместо Объект.Продукция, я прописал СтрокаТабличнойЧасти.Продукция.
Но вылезла другая ошибка :(
 ИтогПоНоменклатуре = РезультатЗапроса.Итог("Количество");
по причине:
Недопустимое значение параметра (параметр номер '1') (Колонка не принадлежит коллекции)
---
Все вроде, теперь в (11) правильно
---
Не работает.
---
:-) Что именно?
---
Попробуйте так

```1c
    Запрос.УстановитьПараметр("Продукт", Продукт);
    Результат = Запрос.Выполнить().Выгрузить();
    Если Результат.Количество() = 0 Тогда
    Возврат 0;
    Иначе
    ИтогПоНоменклатуре = Результат.Итог("Количество");
    Возврат ИтогПоНоменклатуре ;
    КонецЕсли;
```
---
Создал Функцию

```1c
    &НаСервере
    Функция ПолучитьОстаток()
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ПередачаПродукцииОстатки.КоличествоОстаток КАК КоличествоОстаток
    |ИЗ
    | РегистрНакопления.ПередачаПродукции.Остатки КАК ПередачаПродукцииОстатки
    |ГДЕ
    | ПередачаПродукцииОстатки.Продукция = &Продукт";

    Запрос.УстановитьПараметр("Продукт",Продукция);

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

    КонецФункции
```

Сейчас ее постараюсь подключить к событию при изменении
---
Сегодня черная пятница. Эта ошибка так и не хочет пропадать:
"Недопустимое значение параметра(параметр номер '1')(Колонка не принадлежит коллекции"
---
Ошибка в запросе Как КоличествоОстаток, а нужно Как Количество
---
Поменял, все та же ошибка.
---
Он ругается именно на строку ИтогПоНоменклатуре
---
Он ругается потому что не видит колонки Количество, а знчит она у Вас не так называется
---
Поставил
ИтогПоНоменклатуре = РезультатЗапроса.Итог("ПрайсЛистКоличество");
Ругается так же.
Мистика
---
Никакой мистики

```1c
    ПередачаПродукцииОстатки.КоличествоОстаток КАК Количество // после как идет название колонки
    Результат.Итог("Количество"); // а тут Вы запрашиваете итог по названию колонки
```
---
Ура, не сругался))) Но в колонке теперь 0.
---
```1c
    &НаКлиенте
    Процедура ПрайсЛистПродукцияПриИзменении(Элемент)
    СтрокаТабличнойЧасти = Элементы.ПрайсЛист.ТекущиеДанные;
    Если ЗначениеЗаполнено(СтрокаТабличнойЧасти.Продукция)Тогда
    СтрокаТабличнойЧасти.Фирма = СтрокаТабличнойЧасти.Продукция.ПолучитьОбъект().Фирма;
    СтрокаТабличнойЧасти.ТипПродукции = СтрокаТабличнойЧасти.Продукция.ПолучитьОбъект().ТипПродукции;
    СтрокаТабличнойЧасти.ЕдиницаИзмерения = СтрокаТабличнойЧасти.Продукция.ПолучитьОбъект().ЕдИзмерения;
    КонецЕсли;
    ПолучитьОстаток(СтрокаТабличнойЧасти.Количество);

    КонецПроцедуры
```
---
HELP
---
СтрокаТабличнойЧасти.Количество = ПолучитьОстаток(СтрокаТабличнойЧасти.Номенклатура);
---
Попробовал через КоличествоПриход
---
Ноль дает.
---
```1c
    &НаСервере
    Функция ПолучитьОстаток(Продукция)
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ПередачаПродукцииОстатки.КоличествоОстаток КАК Количество
    |ИЗ
    | РегистрНакопления.ПередачаПродукции.Остатки КАК ПередачаПродукцииОстатки
    |ГДЕ
    | ПередачаПродукцииОстатки.Продукция = &Продукт";

    Запрос.УстановитьПараметр("Продукт",Продукция);

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

    КонецФункции
```

Вроде все правильно. 1с-ка не ругается, но выдает нулевое значение.
---
Коллеги есть ли у кого нибудь варианты?
---
```1c
    &НаСервере
    Функция ПолучитьОстаток(Продукция)
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ПередачаПродукцииОстатки.КоличествоОстаток КАК Количество
    |ИЗ
    | РегистрНакопления.ПередачаПродукции.Остатки КАК ПередачаПродукцииОстатки
    |ГДЕ
    | ПередачаПродукцииОстатки.Продукция = &Продукт";

    Запрос.УстановитьПараметр("Продукт",Продукция);

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

    КонецФункции

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

    КонецЕсли;

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

Вот готовое решение. Спасибо большое https://infostart.ru/profile/297352/