Здравствуйте, коллеги.
Совсем недавно нашел ответ на свой вопрос, касаемый показа остатка продукции.
Спасибо одному человеку за правильный совет.
Но возникла следующая проблема.
После реализации продукции, не отнимается остаток., то есть как остаток продукции был 7, так он и остается.
Прошу вас поделиться советами данной проблемы.
Всем заранее спасибо.
---
По идее, не совсем так, как я понимаю имеется "склад", куда поступает продукция документом "Приход Продукции", при передаче продукции документом "ПередачаПродукцииВЗал" берется продукция со склада и перемещается в торговый зал, т.е. необходимо в регистре "ПриходПродукции" (если вы объединили два регистра в один) сделать 2 движения: первое - это расход со "склада" и второе - это приход в торговый зал. Затем вам нужно продать товар, который находится в торговом зале, делаете вы это документом "РеализацияПродукции" и опять, в этом же регистре "ПриходПродукции" делаете движение с видом Расход, правда в этом случае регистр надо переименовать. Регистр "Реализация" можно оставить например, для получения данных по продажам.

Могла конечно что-то не учесть или упустить.
---
После реализации продукции, не отнимается остаток., то есть как остаток продукции был 7, так он и остается.

Это после именно продажи (документ реализации проведен - проблема в партиях товаров наверное), или проблема с уже выбранной позицией в данном документе, что ее остаток остался прежним (без учета количества уже добавленного в документ)?

Неплохо было бы понимать в какой конфе работаете.
---
Я работаю на 1С:Предприятие 8.3 (8.3.12.1412).
Могу скинуть вам конфу или код.

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

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

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

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

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

    КонецЕсли;

    КонецПроцедуры
```
---
СтрокаТабличнойЧасти.Продукция.ПолучитьОбъект()

ПолучитьОбъект() - явно лишнее, через ссылку доступно ровно то же

РегистрНакопления.ПередачаПродукции.ОстаткиИОбороты КАК ПередачаПродукцииОстаткиИОбороты

Скорее так:

РегистрНакопления.ПередачаПродукции.Остатки(&Период, Продукция = &Продукция) КАК ПередачаПродукцииОстаткиИОбороты

тогда где - не надо писать.

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

(измерение типа организации и пр.)

При твоем способе обработки результата - берется первая запись.

Период не забудь передать в запрос.

Что за конфа такая?
---
Что за конфа такая?
(4) Можно по подробнее поводу запроса о периоде?
могу скинуть вам конфу с паролем
---
конфа - конфигурация. Бухгалтерия, УТ, ЗУП, и т.д.
---
СтрокаТабличнойЧасти.ТипПродукции = СтрокаТабличнойЧасти.Продукция.ПолучитьОбъект().ТипПродукции;

Правильнее и быстрее:
 СтрокаТабличнойЧасти.ТипПродукции = СтрокаТабличнойЧасти.Продукция.ТипПродукции;
---
Может быть еще у тебя в обработчике списания ошибка где-то, например в регистр остатков не вносятся записи.
---
Запись идет в регистре накопления))
---
У меня конфигурация Предприятие
---
Посоветуйте коллеги по поводу запроса, возможно я что то упускаю)
---
Таже песня в новой теме.....У вас регистр накопления остатки и обороты, Вам нужен регистр Остатков и у Вас конфигурация полностью самописная, вы сделали для документов прихода/расхода обработку проведения для заполнения регистра с соответствующими признаками? Советую Вам взять для примера Управления Торговлей и посмотреть в ней эти события.
---
Да я сам пишу. Мне интересно само писать и учиться.
 Я у меня три регистра.
-Регистр для поступления товара на склад
-Регистр для передачи товаров в торговый зал
-Регистр для реализации.
Возможно проблема в том, что у меня слишком много регистров.
Я не делал обработку.
Я хочу простым путем узнать ответ на решение данной проблемы.
Хочу просто объяснить в чем вся идея.
Человек заносит поступление товара. Если данный товар нужно отправить в зал, то создается документ "Передача продукции в торговый зал".
Потом если нужно реализовать товар, то открывается документ "Реализация продукции".
Я лишь хочу чтобы при выборе товара , отображался остаток товара на текущий момент, и если продалось n-ое количество, то сразу же после проведения документа минусовалось
---
-Регистр для поступления товара на склад
-Регистр для передачи товаров в торговый зал
-Регистр для реализации.

1) При поступлении товара Документ Поступления создает движения с типом "приход" в Регистр для поступления товара на склад
2) При передаче товара на склад Документ Передачи создает движения с типом "Расход" в Регистр для поступления товара на склад и создает движения с типом "Приход" в Регистр для передачи товаров в торговый зал
3) При реализации Документ Реализации создает движения с типом "Расход" в Регистр для передачи товаров в торговый зал
Тогда у Вас будут остатки
---
Спасибо за совет, сейчас попробую исправить баги.
Благодарю за содействие)
---
Сделал, в регистры записываются данные.
Правда ваше решение по поводу показа остатков, перестала отображать остаток.
Как вы и говорили, выбираю в конструкторе запроса ПередачаПродукции.Остатки.

```1c
    &НаСервере
    Функция ПолучитьОстаток(Продукция)
    //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

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

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

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

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

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

    КонецЕсли;
    СтрокаТабличнойЧасти.КоличествоВзале = ПолучитьОстаток(СтрокаТабличнойЧасти.Продукция);

    КонецПроцедуры
```
---
Тезисно:
Проработал выбор типа регистра в конструкторе запроса для получения остатка в зале.
1)Регистр ПередачаПродукцииОбороты тип КоличествоРасход;
2)Регистр ПриходПродукцииОстатки тип Количество Остаток;
Безуспешно.
---
Я наглядно продемонстрировал что выходит, при повторной реализации.
---
может регистр не тот?
---
Я лишь хочу чтобы при выборе товара , отображался остаток товара на текущий момент, и если продалось n-ое количество, то сразу же после проведения документа минусовалось
У вас как формируются движения? В стандартной процедуре ОбработкаПроведения или вы как то самостоятельно программно эти движения формируете? Вы покажите код, где у Вас формируются движения. Если это происходит при использовании процедуры "ОбработкаПроведения" внутри нее должна быть строка вида:

```1c
    Движения.ТутИмяВашегоРегистра.Записывать = Истина.
```

далее идет формирование движений, программной записи в явном виде не требуется, система сама по окончании транзакции сделает запись в регистр,

```1c
    Движение = Движения.ТутИмяВашегоРегистра.Добавить();
    Движение.ВидДвижения = ВидДвиженияНакопления.Приход;//Или расход - в зависимости от того что нужно
    Движение.Период = Дата;
    Движение.Измерение1 = Измерение;
    Движение.Ресурс1 = Ресурс;
```

 в другом случае у Вас должен быть создан набор записей с отбором по регистратору, что то вроде такого:

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

```1c
    Процедура ОбработкаПроведения(Отказ, Режим)
    //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

    // регистр ПриходПродукции Приход
    Движения.ПриходПродукции.Записывать = Истина;
    Для Каждого ТекСтрокаПрайсЛист Из ПрайсЛист Цикл
    Движение = Движения.ПриходПродукции.Добавить();
    Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
    Движение.Период = Дата;
    Движение.Ответственный = Ответственный;
    Движение.МестоХранения = СкладХранения;
    Движение.Продукция = ТекСтрокаПрайсЛист.Продукция;
    Движение.ТипПродукции = ТекСтрокаПрайсЛист.ТипПродукции;
    Движение.Фирма = ТекСтрокаПрайсЛист.Фирма;
    Движение.ЕдиницаИзмерения = ТекСтрокаПрайсЛист.ЕдИзмерения;
    Движение.Цена = ТекСтрокаПрайсЛист.Цена;
    Движение.Количество = ТекСтрокаПрайсЛист.Количество;
    Движение.Сумма = ТекСтрокаПрайсЛист.Сумма;
    КонецЦикла;

    //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
    КонецПроцедуры
```

2)Обработка проведения документа "Передача продукции

```1c
    Процедура ОбработкаПроведения(Отказ, Режим)
    //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

    // регистр ПередачаПродукции Приход
    Движения.ПередачаПродукции.Записывать = Истина;
    Для Каждого ТекСтрокаСписокПродукции Из СписокПродукции Цикл
    Движение = Движения.ПередачаПродукции.Добавить();
    Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
    Движение.Период = Дата;
    Движение.Ответственный = Ответственный;
    Движение.МестоХранения = МестоХранения;
    Движение.Продукция = ТекСтрокаСписокПродукции.Номенклатура;
    Движение.ТипПродукции = ТекСтрокаСписокПродукции.ТипПродукции;
    Движение.Фирма = ТекСтрокаСписокПродукции.Фирма;
    Движение.ЕдиницаИзмерения = ТекСтрокаСписокПродукции.ЕдИзмерения;
    Движение.Цена = ТекСтрокаСписокПродукции.Цена;
    Движение.Количество = ТекСтрокаСписокПродукции.Количество;
    Движение.Сумма = ТекСтрокаСписокПродукции.Сумма;
    КонецЦикла;

    Движения.ПриходПродукции.Записывать = Истина;
    Для Каждого ТекСтрокаСписокПродукции Из СписокПродукции Цикл
    Движение = Движения.ПередачаПродукции.Добавить();
    Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
    Движение.Период = Дата;
    Движение.Ответственный = Ответственный;
    Движение.МестоХранения = МестоХранения;
    Движение.Продукция = ТекСтрокаСписокПродукции.Номенклатура;
    Движение.ТипПродукции = ТекСтрокаСписокПродукции.ТипПродукции;
    Движение.Фирма = ТекСтрокаСписокПродукции.Фирма;
    Движение.ЕдиницаИзмерения = ТекСтрокаСписокПродукции.ЕдИзмерения;
    Движение.Цена = ТекСтрокаСписокПродукции.Цена;
    Движение.Количество = ТекСтрокаСписокПродукции.Количество;
    Движение.Сумма = ТекСтрокаСписокПродукции.Сумма;
    КонецЦикла;

    //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
    КонецПроцедуры
```

3)Обработка проведения документа "Реализация продукции"

```1c
    Процедура ОбработкаПроведения(Отказ, Режим)
    //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

    // регистр ПередачаПродукции Расход
    Движения.ПередачаПродукции.Записывать = Истина;
    Для Каждого ТекСтрокаПрайсЛист Из ПрайсЛист Цикл
    Движение = Движения.ПередачаПродукции.Добавить();
    Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
    Движение.Период = Дата;
    Движение.Ответственный = Ответственный;
    Движение.МестоХранения = МестоРеализации;
    Движение.Продукция = ТекСтрокаПрайсЛист.Продукция;
    Движение.ТипПродукции = ТекСтрокаПрайсЛист.ТипПродукции;
    Движение.Фирма = ТекСтрокаПрайсЛист.Фирма;
    Движение.ЕдиницаИзмерения = ТекСтрокаПрайсЛист.ЕдиницаИзмерения;
    Движение.Цена = ТекСтрокаПрайсЛист.Цена;
    Движение.Количество = ТекСтрокаПрайсЛист.Количество;
    Движение.Сумма = ТекСтрокаПрайсЛист.Сумма;
    КонецЦикла;

    //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
    КонецПроцедуры
```
---
2)Обработка проведения документа "Передача продукции

Сначала Вы делаете приход
 // регистр ПередачаПродукции Приход

```1c
    Движения.ПередачаПродукции.Записывать = Истина;
    Для Каждого ТекСтрокаСписокПродукции Из СписокПродукции Цикл
    Движение = Движения.ПередачаПродукции.Добавить();
    Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
```

Потом вы оттуда же сразу же списываете. Мне кажется, что здесь ошибка:

```1c
    Движения.ПриходПродукции.Записывать = Истина;
    Для Каждого ТекСтрокаСписокПродукции Из СписокПродукции Цикл
    Движение = Движения.ПередачаПродукции.Добавить();
    Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
```

По всей видимости во втором формировании движений вместо регистра ПередачаПродукции должен быть ПриходПродукции? Судя по действиям Вы именно это хотели сделать. Сделать минус по одному регистру и плюс по другому. А так получается, что регистр закрывается "в ноль" и собственно остатков не возникает ни в одном, ни в другом регистре. Происходит оприходование по одному регистру и его комбинации измерений и тут же списание по этому же регистру с такой же комбинацией измерений.
---
Что тогда посоветуете?
---
Вам необходимо исправить строчку кода в обработке проведения документа "Передача продукции"

```1c
    Движения.ПриходПродукции.Записывать = Истина;
    Для Каждого ТекСтрокаСписокПродукции Из СписокПродукции Цикл
    Движение = Движения.ПередачаПродукции.Добавить();
    Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
```

вместо Движения.ПередачаПродукции.Добавить(); написать Движения.ПриходПродукции.Добавить();
---
Ошибка.
---
У регистра "Приход продукции" вы указывали регистратор документ "Передача продукции"?
---
Да
---
Сделайте скрин полного текста ошибки, нажав на "Подробно".
---
Видимо не там код исправили. У вас ведь в документе "Реализация продукции" производятся движения по регистру "Передача продукции",а не "Приход продукции".
---
так и было, что для документа "Реализация продукции" использовался регистр "ПередачаПродукции" с типом расход
---
Так никто же и не писал вносить исправления в документ "Реализация продукции") Необходимо исправить обработку проведения документа "Передача продукции".
---
Сорри) не так понял)) Сейчас исправлю и отпишусь Вам)
---
Это ошибка в документе передачапродукции
---
Ошибку которую вы показали, в документе "Реализация продукции".
---
Исправил.Ошибка не выдается.
---
А что по остаткам?
---
```1c
    Процедура ОбработкаПроведения(Отказ, Режим)
    //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

    // регистр ПередачаПродукции Приход
    Движения.ПередачаПродукции.Записывать = Истина;
    Для Каждого ТекСтрокаСписокПродукции Из СписокПродукции Цикл
    Движение = Движения.ПередачаПродукции.Добавить();
    Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
    Движение.Период = Дата;
    Движение.Ответственный = Ответственный;
    Движение.МестоХранения = МестоХранения;
    Движение.Продукция = ТекСтрокаСписокПродукции.Номенклатура;
    Движение.ТипПродукции = ТекСтрокаСписокПродукции.ТипПродукции;
    Движение.Фирма = ТекСтрокаСписокПродукции.Фирма;
    Движение.ЕдиницаИзмерения = ТекСтрокаСписокПродукции.ЕдИзмерения;
    Движение.Цена = ТекСтрокаСписокПродукции.Цена;
    Движение.Количество = ТекСтрокаСписокПродукции.Количество;
    Движение.Сумма = ТекСтрокаСписокПродукции.Сумма;
    КонецЦикла;

    Движения.ПриходПродукции.Записывать = Истина;
    Для Каждого ТекСтрокаСписокПродукции Из СписокПродукции Цикл
    Движение = Движения.ПриходПродукции.Добавить();
    Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
    Движение.Период = Дата;
    Движение.Ответственный = Ответственный;
    Движение.МестоХранения = МестоХранения;
    Движение.Продукция = ТекСтрокаСписокПродукции.Номенклатура;
    Движение.ТипПродукции = ТекСтрокаСписокПродукции.ТипПродукции;
    Движение.Фирма = ТекСтрокаСписокПродукции.Фирма;
    Движение.ЕдиницаИзмерения = ТекСтрокаСписокПродукции.ЕдИзмерения;
    Движение.Цена = ТекСтрокаСписокПродукции.Цена;
    Движение.Количество = ТекСтрокаСписокПродукции.Количество;
    Движение.Сумма = ТекСтрокаСписокПродукции.Сумма;
    КонецЦикла;

    //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
    КонецПроцедуры
```
---
Ошибка
---
Верните обратно код в обработке проведения "Реализация продукции")

(30)так и было, что для документа "Реализация продукции" использовался регистр "ПередачаПродукции" с типом расход
---
Вернул.
Может быть я вам скину .cf?
---
По ходу я совсем лох. В регистр Передачи Продукции вид движения Приход. Это как? Если это по сути отдача. То есть Расход, а не приход....
Регистр Приход Продукции пишется с типом Расход. Ну вы же получили или отдали? Нет слов...
---
Я думаю автору надо объединить два регистра Приход продукции и Передача продукции в один, а то действительно выглядит как то не логично.
---
Согласно вашим рекомендациям, я сделал следующее.
1) Документ "Приход ПРодукции" - регистр "ПриходПродукции" , вид движения "Приход"
2)Документ "ПередачаПродукцииВЗал" - регистр "ПриходПродукции", вид движения "Расход"
3) Документ "РеализацияПродукции" - регистр "Реализация" , вид движения "Расход"
---
По идее, не совсем так, как я понимаю имеется "склад", куда поступает продукция документом "Приход Продукции", при передаче продукции документом "ПередачаПродукцииВЗал" берется продукция со склада и перемещается в торговый зал, т.е. необходимо в регистре "ПриходПродукции" (если вы объединили два регистра в один) сделать 2 движения: первое - это расход со "склада" и второе - это приход в торговый зал. Затем вам нужно продать товар, который находится в торговом зале, делаете вы это документом "РеализацияПродукции" и опять, в этом же регистре "ПриходПродукции" делаете движение с видом Расход, правда в этом случае регистр надо переименовать. Регистр "Реализация" можно оставить например, для получения данных по продажам.

Могла конечно что-то не учесть или упустить.
---
, (44)
действительно выглядит как то не логично

что вы хотите от Архитектора 1с? невозможного?
---
это тогда уровень Архиепископа 1С будет.
---
Юморист.
---
и денег не забудь :)
---
У Евгения Гилева есть отличный бесплатный курс, если вы его не смотрели, обязательно посмотрите. Там как раз создается конфигурация с нуля.
---
Большое спасибо.
---
Просто на форме на командном интерфейсе выведите движения посмотрите по каким регистрам идет движение. Зачем гадать.
---
Хочу поблагодарить всех за участие в решении данной проблемы. Благодаря вашим мнениям - получил некий опыт в работе написания конфы.
---
Сообщение было скрыто модератором.
---
Сообщение было скрыто модератором.