Вывод остатков на на форму в табличную часть
Всем добрый день. Подскажите почему не выводятся остатки на форму при нажатии кнопки "провести и закрыть"?
Есть документ Расход товаров, в табличной части есть колонка Остатки, в которую должны выводится остатки по товару. При нажатии кнопки "провести" всё работает.
код в модуле объекта:
Процедура ОбработкаПроведения(Отказ, Режим)
Если Клиент.ЗапретНаОтгрузку Тогда
Отказ = Истина;
КонецЕсли;
Движения.ОстаткиТоваров.Записывать = Истина;
Для Каждого ТекСтрокаПеречень Из Перечень Цикл
Движение = Движения.ОстаткиТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Товар = ТекСтрокаПеречень.Товар;
Движение.Склад = Склад;
Движение.Количество = ТекСтрокаПеречень.Количество;
Движение.Остаток = ТекСтрокаПеречень.Остаток;
КонецЦикла;
Движения.Записать();
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ОстаткиТоваровОстатки.КоличествоОстаток КАК КоличествоОстаток,
| ОстаткиТоваровОстатки.Товар КАК Товар,
| ОстаткиТоваровОстатки.Склад КАК Склад
|ИЗ
| РегистрНакопления.ОстаткиТоваров.Остатки КАК ОстаткиТоваровОстатки
|ГДЕ
| ОстаткиТоваровОстатки.Склад = &Склад
| И ОстаткиТоваровОстатки.КоличествоОстаток < 0";
Запрос.УстановитьПараметр("Склад", Склад);
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = "Не хватает" + Строка(-Результат.КоличествоОстаток)
+ "едениц продукта" + Результат.Товар;
Сообщение.Сообщить();
Отказ = Истина;
КонецЦикла;
Для Каждого Строка Из Перечень Цикл
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ОстаткиТоваровОстатки.КоличествоОстаток КАК КоличествоОстаток
|ИЗ
| РегистрНакопления.ОстаткиТоваров.Остатки КАК ОстаткиТоваровОстатки
|ГДЕ
| ОстаткиТоваровОстатки.Склад = &Склад
| И ОстаткиТоваровОстатки.Товар = &Товар";
Запрос.УстановитьПараметр("Склад", Склад);
Запрос.УстановитьПараметр("Товар", Строка.Товар);
Результат = Запрос.Выполнить().Выбрать();
Если Результат.Следующий() Тогда
Строка.Остаток = Результат.КоличествоОстаток;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Есть документ Расход товаров, в табличной части есть колонка Остатки, в которую должны выводится остатки по товару. При нажатии кнопки "провести" всё работает.
код в модуле объекта:
Процедура ОбработкаПроведения(Отказ, Режим)
Если Клиент.ЗапретНаОтгрузку Тогда
Отказ = Истина;
КонецЕсли;
Движения.ОстаткиТоваров.Записывать = Истина;
Для Каждого ТекСтрокаПеречень Из Перечень Цикл
Движение = Движения.ОстаткиТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Товар = ТекСтрокаПеречень.Товар;
Движение.Склад = Склад;
Движение.Количество = ТекСтрокаПеречень.Количество;
Движение.Остаток = ТекСтрокаПеречень.Остаток;
КонецЦикла;
Движения.Записать();
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ОстаткиТоваровОстатки.КоличествоОстаток КАК КоличествоОстаток,
| ОстаткиТоваровОстатки.Товар КАК Товар,
| ОстаткиТоваровОстатки.Склад КАК Склад
|ИЗ
| РегистрНакопления.ОстаткиТоваров.Остатки КАК ОстаткиТоваровОстатки
|ГДЕ
| ОстаткиТоваровОстатки.Склад = &Склад
| И ОстаткиТоваровОстатки.КоличествоОстаток < 0";
Запрос.УстановитьПараметр("Склад", Склад);
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = "Не хватает" + Строка(-Результат.КоличествоОстаток)
+ "едениц продукта" + Результат.Товар;
Сообщение.Сообщить();
Отказ = Истина;
КонецЦикла;
Для Каждого Строка Из Перечень Цикл
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ОстаткиТоваровОстатки.КоличествоОстаток КАК КоличествоОстаток
|ИЗ
| РегистрНакопления.ОстаткиТоваров.Остатки КАК ОстаткиТоваровОстатки
|ГДЕ
| ОстаткиТоваровОстатки.Склад = &Склад
| И ОстаткиТоваровОстатки.Товар = &Товар";
Запрос.УстановитьПараметр("Склад", Склад);
Запрос.УстановитьПараметр("Товар", Строка.Товар);
Результат = Запрос.Выполнить().Выбрать();
Если Результат.Следующий() Тогда
Строка.Остаток = Результат.КоличествоОстаток;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
По теме из базы знаний
- Как автоматически заполнить обработкой табличную часть документа "Ввод начальных остатков" (Тип операции = "Расчеты с партнерами"). 1С: ERP
- Вывод остатка на складе для УТ 11 / БП 3 в документ
- Сохранение данных табличных частей форм в Excel
- Разбор ошибок заполнения реквизитов формы объекта (мой топ-3)
- Вывод остатков в списке номенклатуры с отображением резерва и доступностью остатков. УТ 11
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Тут надо кашку разобрать. Что именно нужно получить и что именно не работает. Вопрос не соответствует коду, так что не совсем понятно.
Из кода создается впечатление, что при проведении некоего документа некие товары списываются со склада, потом проверяются остатки на отрицательность, а потом остатками этих же товаров заполняется что-то в каком-то списке.
Что именно не так и при чем тут какая-то форма?
Из кода создается впечатление, что при проведении некоего документа некие товары списываются со склада, потом проверяются остатки на отрицательность, а потом остатками этих же товаров заполняется что-то в каком-то списке.
Что именно не так и при чем тут какая-то форма?
Получать остаток в документе - так себе затея.
Тут возможны несколько стратегий:
1 - сохранять остаток в таблицу объекта а не формы. Тогда после проведения надо модифицировать таблицу объекта (товары?) и записать его снова... что надо делать аккуратно, чтобы не вызвать его повторного проведения в той же транзакции. Но в этом случае остаток в таблице запишется однажды и вполне себе может не иметь ничего общего с реальным остатком на позицию по границе документа. Так как это динамическая функция являющаяся производной от всех документов сделавших движения по номенклатуре в конкретной строке.
2 - рассчитывать текущий остаток на позицию проведения документа по границе включая. Тогда можно колонку остатка иметь только на форме но заполнять ее надо при создании документа на сервере или при открытии. Во втором случае числа в колонке остатка могут меняться но всегда показывать правду :)
Вам что более симпатично?
Тут возможны несколько стратегий:
1 - сохранять остаток в таблицу объекта а не формы. Тогда после проведения надо модифицировать таблицу объекта (товары?) и записать его снова... что надо делать аккуратно, чтобы не вызвать его повторного проведения в той же транзакции. Но в этом случае остаток в таблице запишется однажды и вполне себе может не иметь ничего общего с реальным остатком на позицию по границе документа. Так как это динамическая функция являющаяся производной от всех документов сделавших движения по номенклатуре в конкретной строке.
2 - рассчитывать текущий остаток на позицию проведения документа по границе включая. Тогда можно колонку остатка иметь только на форме но заполнять ее надо при создании документа на сервере или при открытии. Во втором случае числа в колонке остатка могут меняться но всегда показывать правду :)
Вам что более симпатично?
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот