Здравствуйте, коллеги.
Совсем недавно нашел ответ на свой вопрос, касаемый показа остатка продукции.
Спасибо одному человеку за правильный совет.
Но возникла следующая проблема.
После реализации продукции, не отнимается остаток., то есть как остаток продукции был 7, так он и остается.
Прошу вас поделиться советами данной проблемы.
Всем заранее спасибо.
(46) По идее, не совсем так, как я понимаю имеется "склад", куда поступает продукция документом "Приход Продукции", при передаче продукции документом "ПередачаПродукцииВЗал" берется продукция со склада и перемещается в торговый зал, т.е. необходимо в регистре "ПриходПродукции" (если вы объединили два регистра в один) сделать 2 движения: первое - это расход со "склада" и второе - это приход в торговый зал. Затем вам нужно продать товар, который находится в торговом зале, делаете вы это документом "РеализацияПродукции" и опять, в этом же регистре "ПриходПродукции" делаете движение с видом Расход, правда в этом случае регистр надо переименовать. Регистр "Реализация" можно оставить например, для получения данных по продажам.
После реализации продукции, не отнимается остаток., то есть как остаток продукции был 7, так он и остается.
Это после именно продажи (документ реализации проведен - проблема в партиях товаров наверное), или проблема с уже выбранной позицией в данном документе, что ее остаток остался прежним (без учета количества уже добавленного в документ)?
(11)Таже песня в новой теме.....У вас регистр накопления остатки и обороты, Вам нужен регистр Остатков и у Вас конфигурация полностью самописная, вы сделали для документов прихода/расхода обработку проведения для заполнения регистра с соответствующими признаками? Советую Вам взять для примера Управления Торговлей и посмотреть в ней эти события.
(13)Да я сам пишу. Мне интересно само писать и учиться.
Я у меня три регистра.
-Регистр для поступления товара на склад
-Регистр для передачи товаров в торговый зал
-Регистр для реализации.
Возможно проблема в том, что у меня слишком много регистров.
Я не делал обработку.
Я хочу простым путем узнать ответ на решение данной проблемы.
Хочу просто объяснить в чем вся идея.
Человек заносит поступление товара. Если данный товар нужно отправить в зал, то создается документ "Передача продукции в торговый зал".
Потом если нужно реализовать товар, то открывается документ "Реализация продукции".
Я лишь хочу чтобы при выборе товара , отображался остаток товара на текущий момент, и если продалось n-ое количество, то сразу же после проведения документа минусовалось
-Регистр для поступления товара на склад
-Регистр для передачи товаров в торговый зал
-Регистр для реализации.
1) При поступлении товара Документ Поступления создает движения с типом "приход" в Регистр для поступления товара на склад
2) При передаче товара на склад Документ Передачи создает движения с типом "Расход" в Регистр для поступления товара на склад и создает движения с типом "Приход" в Регистр для передачи товаров в торговый зал
3) При реализации Документ Реализации создает движения с типом "Расход" в Регистр для передачи товаров в торговый зал
Тогда у Вас будут остатки
(15)Сделал, в регистры записываются данные.
Правда ваше решение по поводу показа остатков, перестала отображать остаток.
Как вы и говорили, выбираю в конструкторе запроса ПередачаПродукции.Остатки.
&НаСервере
Функция ПолучитьОстаток(Продукция)
//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПередачаПродукцииОстатки.КоличествоОстаток КАК Количество
|ИЗ
| РегистрНакопления.ПередачаПродукции.Остатки КАК ПередачаПродукцииОстатки
|ГДЕ
| ПередачаПродукцииОстатки.Продукция = &Продукция";
Запрос.УстановитьПараметр("Продукт", Продукция);
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
Если РезультатЗапроса.Количество() = 0 Тогда
Возврат 0;
Иначе
ИтогПоНоменклатуре = РезультатЗапроса.Итог("Количество");
Возврат ИтогПоНоменклатуре;
КонецЕсли;
КонецФункции
&НаКлиенте
Процедура ПрайсЛистПродукцияПриИзменении(Элемент)
СтрокаТабличнойЧасти = Элементы.ПрайсЛист.ТекущиеДанные;
Если ЗначениеЗаполнено(СтрокаТабличнойЧасти.Продукция)Тогда
СтрокаТабличнойЧасти.Фирма = СтрокаТабличнойЧасти.Продукция.ПолучитьОбъект().Фирма;
СтрокаТабличнойЧасти.ТипПродукции = СтрокаТабличнойЧасти.Продукция.ПолучитьОбъект().ТипПродукции;
СтрокаТабличнойЧасти.ЕдиницаИзмерения = СтрокаТабличнойЧасти.Продукция.ПолучитьОбъект().ЕдИзмерения;
КонецЕсли;
СтрокаТабличнойЧасти.КоличествоВзале = ПолучитьОстаток(СтрокаТабличнойЧасти.Продукция);
КонецПроцедуры
(17)Тезисно:
Проработал выбор типа регистра в конструкторе запроса для получения остатка в зале.
1)Регистр ПередачаПродукцииОбороты тип КоличествоРасход;
2)Регистр ПриходПродукцииОстатки тип Количество Остаток;
Безуспешно.
Я лишь хочу чтобы при выборе товара , отображался остаток товара на текущий момент, и если продалось n-ое количество, то сразу же после проведения документа минусовалось
У вас как формируются движения? В стандартной процедуре ОбработкаПроведения или вы как то самостоятельно программно эти движения формируете? Вы покажите код, где у Вас формируются движения. Если это происходит при использовании процедуры "ОбработкаПроведения" внутри нее должна быть строка вида:
далее идет формирование движений, программной записи в явном виде не требуется, система сама по окончании транзакции сделает запись в регистр,
Движение = Движения.ТутИмяВашегоРегистра.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;//Или расход - в зависимости от того что нужно
Движение.Период = Дата;
Движение.Измерение1 = Измерение;
Движение.Ресурс1 = Ресурс;
в другом случае у Вас должен быть создан набор записей с отбором по регистратору, что то вроде такого:
НаборЗаписей = РегистрыНакопления.ИмяВашегоРегистра.СоздатьНаборЗаписей();
//Регистратор - ссылка на документ регистратор, который делает движения по регистру
НаборЗаписей.Отбор.Регистратор.Установить(Регистратор);
ЗаписьРегистра = НЗ.ДобавитьРасход();
//ИЛИ ЗаписьРегистра = НЗ.ДобавитьПриход() - в зависимости от того что нужно;
ЗаписьРегистра.Период = ТекущаяДата(); //К примеру текущая дата, период обязателен
З.Измерение1 = ЗначениеИзмерения;
З.Ресурс1 = ЗначениеРесурса;
НЗ.Записать();
2)Обработка проведения документа "Передача продукции
Сначала Вы делаете приход
// регистр ПередачаПродукции Приход
Движения.ПередачаПродукции.Записывать = Истина;
Для Каждого ТекСтрокаСписокПродукции Из СписокПродукции Цикл
Движение = Движения.ПередачаПродукции.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Потом вы оттуда же сразу же списываете. Мне кажется, что здесь ошибка:
Движения.ПриходПродукции.Записывать = Истина;
Для Каждого ТекСтрокаСписокПродукции Из СписокПродукции Цикл
Движение = Движения.ПередачаПродукции.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
По всей видимости во втором формировании движений вместо регистра ПередачаПродукции должен быть ПриходПродукции? Судя по действиям Вы именно это хотели сделать. Сделать минус по одному регистру и плюс по другому. А так получается, что регистр закрывается "в ноль" и собственно остатков не возникает ни в одном, ни в другом регистре. Происходит оприходование по одному регистру и его комбинации измерений и тут же списание по этому же регистру с такой же комбинацией измерений.
(23) Вам необходимо исправить строчку кода в обработке проведения документа "Передача продукции"
Движения.ПриходПродукции.Записывать = Истина;
Для Каждого ТекСтрокаСписокПродукции Из СписокПродукции Цикл
Движение = Движения.ПередачаПродукции.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
вместо Движения.ПередачаПродукции.Добавить(); написать Движения.ПриходПродукции.Добавить();
(29) Видимо не там код исправили. У вас ведь в документе "Реализация продукции" производятся движения по регистру "Передача продукции",а не "Приход продукции".
(31) Так никто же и не писал вносить исправления в документ "Реализация продукции") Необходимо исправить обработку проведения документа "Передача продукции".
(35)По ходу я совсем лох. В регистр Передачи Продукции вид движения Приход. Это как? Если это по сути отдача. То есть Расход, а не приход....
Регистр Приход Продукции пишется с типом Расход. Ну вы же получили или отдали? Нет слов...
(44)Согласно вашим рекомендациям, я сделал следующее.
1) Документ "Приход ПРодукции" - регистр "ПриходПродукции" , вид движения "Приход"
2)Документ "ПередачаПродукцииВЗал" - регистр "ПриходПродукции", вид движения "Расход"
3) Документ "РеализацияПродукции" - регистр "Реализация" , вид движения "Расход"
(46) По идее, не совсем так, как я понимаю имеется "склад", куда поступает продукция документом "Приход Продукции", при передаче продукции документом "ПередачаПродукцииВЗал" берется продукция со склада и перемещается в торговый зал, т.е. необходимо в регистре "ПриходПродукции" (если вы объединили два регистра в один) сделать 2 движения: первое - это расход со "склада" и второе - это приход в торговый зал. Затем вам нужно продать товар, который находится в торговом зале, делаете вы это документом "РеализацияПродукции" и опять, в этом же регистре "ПриходПродукции" делаете движение с видом Расход, правда в этом случае регистр надо переименовать. Регистр "Реализация" можно оставить например, для получения данных по продажам.