1. user1374606 23.03.20 14:09 Сейчас в теме

Вывод остатков на на форму в табличную часть

Всем добрый день. Подскажите почему не выводятся остатки на форму при нажатии кнопки "провести и закрыть"?
Есть документ Расход товаров, в табличной части есть колонка Остатки, в которую должны выводится остатки по товару. При нажатии кнопки "провести" всё работает.
код в модуле объекта:


Процедура ОбработкаПроведения(Отказ, Режим)

Если Клиент.ЗапретНаОтгрузку Тогда
Отказ = Истина;
КонецЕсли;

Движения.ОстаткиТоваров.Записывать = Истина;

Для Каждого ТекСтрокаПеречень Из Перечень Цикл

Движение = Движения.ОстаткиТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Товар = ТекСтрокаПеречень.Товар;
Движение.Склад = Склад;
Движение.Количество = ТекСтрокаПеречень.Количество;
Движение.Остаток = ТекСтрокаПеречень.Остаток;

КонецЦикла;


Движения.Записать();

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

Запрос.УстановитьПараметр("Склад", Склад);
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл

Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = "Не хватает" + Строка(-Результат.КоличествоОстаток)
+ "едениц продукта" + Результат.Товар;
Сообщение.Сообщить();
Отказ = Истина;

КонецЦикла;


Для Каждого Строка Из Перечень Цикл

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

Если Результат.Следующий() Тогда

Строка.Остаток = Результат.КоличествоОстаток;

КонецЕсли;
КонецЦикла;

КонецПроцедуры
Ответы
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
2. hasan-rusel 11 23.03.20 14:15 Сейчас в теме
Попробуй использовать процедуру ПередЗаписью
3. user1374606 23.03.20 14:24 Сейчас в теме
(2)Работает, но тогда не учитывается последнее списание товара...
4. starjevschik 23.03.20 14:39 Сейчас в теме
Тут надо кашку разобрать. Что именно нужно получить и что именно не работает. Вопрос не соответствует коду, так что не совсем понятно.
Из кода создается впечатление, что при проведении некоего документа некие товары списываются со склада, потом проверяются остатки на отрицательность, а потом остатками этих же товаров заполняется что-то в каком-то списке.
Что именно не так и при чем тут какая-то форма?
5. Sergex 50 23.03.20 14:42 Сейчас в теме
Покажите форму плиз? куда там должны остатки выводится и, главное, когда? Ведь если нажать провести и ЗАКРЫТЬ форма - закрывается...?
6. user1374606 23.03.20 14:47 Сейчас в теме
Вот скрин. Закрыватся форма.
Прикрепленные файлы:
9. hasan-rusel 11 23.03.20 15:41 Сейчас в теме
(6) Ну ты провел, форма пересчитала. Закрыть - закрыла. что еще надо то ? )))
7. user1374606 23.03.20 14:51 Сейчас в теме
Надо в поле Остатки получить остатки товара на текущем складе.
8. user1374606 23.03.20 14:53 Сейчас в теме
После проведения этого же самого документа должны появляться остатки
10. hasan-rusel 11 23.03.20 15:41 Сейчас в теме
11. user1374606 23.03.20 17:01 Сейчас в теме
А когда провести и закрыть нажимаешь, заново заходишь в документ - остатка нет
12. Tomy82 51 23.03.20 19:01 Сейчас в теме
остаток динамически что ли рассчитывается и в объекте его нет?
присозданиинасервере последний запрос исполняй
user1374606; +1 Ответить
13. user1374606 23.03.20 19:38 Сейчас в теме
В объекте он есть, Остаток - реквизит табличной части. Движение.Остаток = ТекСтрокаПеречень.Остаток - неверная строка
14. Sergex 50 24.03.20 13:50 Сейчас в теме
Получать остаток в документе - так себе затея.
Тут возможны несколько стратегий:
1 - сохранять остаток в таблицу объекта а не формы. Тогда после проведения надо модифицировать таблицу объекта (товары?) и записать его снова... что надо делать аккуратно, чтобы не вызвать его повторного проведения в той же транзакции. Но в этом случае остаток в таблице запишется однажды и вполне себе может не иметь ничего общего с реальным остатком на позицию по границе документа. Так как это динамическая функция являющаяся производной от всех документов сделавших движения по номенклатуре в конкретной строке.
2 - рассчитывать текущий остаток на позицию проведения документа по границе включая. Тогда можно колонку остатка иметь только на форме но заполнять ее надо при создании документа на сервере или при открытии. Во втором случае числа в колонке остатка могут меняться но всегда показывать правду :)

Вам что более симпатично?
user1374606; +1 Ответить
15. user1374606 24.03.20 23:19 Сейчас в теме
(14) спасибо за подсказки. Сделал сам вторым способом.
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Product Owner (Менеджер по продукту 1С)
Москва
зарплата от 100 000 руб. до 170 000 руб.
Полный день

Тим лид по разработке 1С (Team Lead 1С)
Москва
зарплата от 100 000 руб. до 200 000 руб.
Полный день

Программист, аналитик, эксперт 1С
Санкт-Петербург
По совместительству

Программист 1С
Новосибирск
зарплата от 30 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 100 000 руб. до 150 000 руб.
Полный день