Имя: Пароль:
1C
1С v8
Вывод остатков на форму в табличную часть
,
0 farengeit2009
 
23.03.20
14:12
Всем добрый день. Подскажите почему не выводятся остатки на форму при нажатии кнопки "провести и закрыть"?
Есть документ Расход товаров, в табличной части есть колонка Остатки, в которую должны выводится остатки по товару. При нажатии кнопки "провести" всё работает.
код в модуле объекта:


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

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

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

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

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

КонецЦикла;


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

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

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

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

КонецЦикла;


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

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

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

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

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

КонецПроцедуры
1 dka80
 
23.03.20
14:20
Потому что форма закрывается
2 farengeit2009
 
23.03.20
14:22
как быть? создал при открытии событие и туда похожий код для подсчета остатков поместил. можно как этого обойтись?
3 farengeit2009
 
23.03.20
14:27
*При открытие на форме. Можно как-нибудь без этого обойтись?
4 AliceLight
 
23.03.20
16:10
(3) Перечень - это ТЧ на форме? Итак, перед закрытием формы вы изменили реквизит формы - отобразили в нем остатки. Потом форма закрылась. Данные формы не хранятся, поэтому при переоткрытии документа, естественно, их уже не будет.
5 farengeit2009
 
23.03.20
16:38
(4) Перечень - Это ТЧ на форме. А как сохранить данные реквизита на форме? Или надо повторно высчитывать остаток в процедуре при открытии?
6 hhhh
 
23.03.20
16:41
(5) надо при открытии
7 SSSSS_AAAAA
 
23.03.20
16:43
(5) "данные реквизита на форме"
Вы не могли выражаться яснее? Или не владеете терминологией? Данные какого реквизита? Чему принадлежащего реквизита? Любого реквизита или реквизита формы? Ибо НА форме могут лежать не только реквизиты формы.
8 farengeit2009
 
23.03.20
16:48
Хочется просто одной процедурой в колонке Остаток в табличной части документа  товара вывести остаток по товару после проведения документа
9 Жан Пердежон
 
23.03.20
16:54
(8) хочешь сказать, если жмёшь "провести", потом закрываешь форму и открываешь - остатки на месте остаются?
10 farengeit2009
 
23.03.20
16:54
(8)остаются
11 farengeit2009
 
23.03.20
16:55
(9)а надо чтобы провести и закрыть тоже оставались
12 SSSSS_AAAAA
 
23.03.20
17:38
(11) Сударь, вы, похоже, занимаетесь интуитивным программированием. Плюя с высокой колокольни на документацию. И совершенно не понимая с чем вы работаете и как это устроено.
Данные реквизита НА форме сохраняются в то место, которое указано в свойстве Путь к данным. У реквизитов формы (обратите внимание, не "НА форме", а "формы"), хоть они тоже лежат на форме, указанное свойство не заполнено. И сохранять данные такого реквизита некуда. О чем вам уже неоднократно здесь написали.
Кстати, а зачем вам эти остатки? Это, получается, ведь остатки на момент проведения?
Вы где-нить в базе данных предусмотрели место для сохранения этих гребаных остатков? Раз они завязаны на проведение документа, то, надо полагать, они должны сохраняться вместе с документом. У вас есть в документе табличная часть для этих остатков?
13 farengeit2009
 
23.03.20
17:43
(13) Да, новичёк я. Учусь, дали такое задание. В табличной части документе отображаются эти остатки
14 farengeit2009
 
23.03.20
17:44
Там и хранятся
15 hhhh
 
23.03.20
17:49
(13) ну ты же прекрасно понимаешь, что сначала идет запись документа, а потом уже проведение. То есть документ записывается до проведения, без твоих остатков.
16 farengeit2009
 
23.03.20
17:50
У меня есть реквизит объекта Остаток, сумма, кол-во, цена в табличной части этого документа.
17 SSSSS_AAAAA
 
23.03.20
17:52
(14) Там - это где? Вас же спрашивают что такое Перечень? Это реквизит чего? Документа или формы? Где хоть какие-то действия по его сохранению/записи?
18 farengeit2009
 
23.03.20
17:54
(13) вот это я и не мог понять - хода событий. Придется записывать при вызове события при открытии на форме. А можно как нибудь по другому всё это сделать?
19 SSSSS_AAAAA
 
23.03.20
17:57
(13) "В табличной части документе отображаются эти остатки"
Отображаются и хранятся - это две большие разницы. Вас спрашивают про место хранения.
20 farengeit2009
 
23.03.20
17:57
(14) Извините. Перечень - табличная часть документа. А разве при провести и закрыть документ не сохраняется?
21 farengeit2009
 
23.03.20
18:43
(15) Этот ответ полезный. Спасибо.