Имя: Пароль:
1C
1С v8
Обновление данных в табличной части документа
, ,
0 Barry
 
02.12.22
23:43
Здравствуйте!
Сделал обработку, в которой выбираю документ и выбираю статус продукции для этого документа. И есть кнопка записать, чтобы можно было для каждой строки табличной части сменить указанный статус.
Сам же статус находится в справочнике серии. А уже в документе для лучшего восприятия я его вытянул в табличную часть, через изменить форму. Вот в чем проблема, когда жму на записать, то статус меняется в самой серии, а в табличной части документа так и остается старый статус висеть. Вопрос, есть ли возможность как-то обновить табличную часть документа, чтобы он там также сменился.
1 Serg_1960
 
02.12.22
23:54
Куда лучше всяческих объяснений, - строки алгоритма. А то великим, богатым и могучим у Вас как-то не очень получается :)
2 Barry
 
03.12.22
00:26
(1) ох уж этот могучий язык)) вообщем вот код на кнопку:

&НаКлиенте
Процедура ИзменитьСтатус(Команда)

    ЗаполнитьСерверСтатус();
    
КонецПроцедуры  

&НаСервере
Процедура ЗаполнитьСерверСтатус()
        
    ДокОбъект = Объект.Документ.ПолучитьОбъект();

    ТЧСтатус = ДокОбъект.Товары;

    Для Каждого Стр Из ТЧСтатус Цикл
        СпрСерии = Стр.Серия.ПолучитьОбъект();
        СпрСерии.СтатусПродукции = Объект.Статус;
        СпрСерии.Записать();
    КонецЦикла;
    
КонецПроцедуры
3 eddy_n
 
03.12.22
00:31
● РеквизитФормыВЗначение() ‑ преобразует реквизит данных формы в объект прикладного типа.

● ЗначениеВРеквизитФормы() ‑ выполняет преобразование объекта прикладного типа в заданный реквизит формы.
4 Barry
 
03.12.22
00:44
(3) как мне это применить в моем коде?
5 Мимохожий Однако
 
03.12.22
07:35
Попробуй ОповеститьОбИзменении(Объект.Документ) или что-нибудь аналогичное после процедуры изменения статусов
6 hockeyist
 
03.12.22
09:10
(4) Первое в начало, последнее в конец
7 Barry
 
03.12.22
18:33
(5) ничего не произошло
8 Barry
 
03.12.22
18:33
(3) тоже самое не помогло
9 kubik_live
 
03.12.22
18:41
Выгрузи ТЧ в ТЗ, обнови статусы в ТЗ и загрузи обратно в ТЧ.
Токо документ записать не забудь...
10 hawksib
 
03.12.22
18:42
судя по описанию из (0) и коду из (2) вы пишите одно, а в виду имеете другое, вы обновляете не строки табличной части документа, а элементы справочника "Серия", содержащегося в строках. Мой совет: разберитесь с тем, чего вы хотите в итоге получить.
11 Barry
 
03.12.22
19:20
(10) Мне нужно изменить статус как в справочнике Серии, так и в самом документе табличной части. В справочнике Серии он изменяется без проблем, а вот в табличной части документа остается старый статус без изменений.
12 kubik_live
 
03.12.22
19:33
(11) Может все-таки пусть сначала мухи поменяются, а потом их на котлету посадить? :)))
13 Остап Ибрагимович
 
03.12.22
20:40
Если речь о реквизитах тч.
Ты показываешь в тч значения реквизитов тч.
От того, что ты меняешь что-то где-то (но не эти самые реквизиты тч) - отображение этих реквизитов тч еа форме не изменится.
Чтобы изменилось отображение этих реквизитов тч на форме - нужно менять (кроме или помимо изменений чего-то ещё где-то ещё) эти самые реквизиты тч.
14 Barry
 
03.12.22
22:47
(9) Реквизита статус его вообще не существует в самом документе. Есть реквизит серия в табличной части документа. А из серии (справочник серии) уже тянется реквизит статус. Я этот реквизит вытянул через изменить форму в табличную часть документа для визуала. Итог в серии, где хранится сам статус меняется значение, а в документе нет. Возможно это как-то связано с кэшем, но я не уверен. Нужно как-то обновить данные тч в документе или как-то хитро перезаписать.
15 ДедМорроз
 
03.12.22
23:34
Оповестить об изменении и кеш обновится.
16 Barry
 
04.12.22
01:30
(15) вот так сделал и всеравно не работает:

&НаКлиенте
Процедура ИзменитьСтатус(Команда)

    ЗаполнитьСерверСтатус();

    ОповеститьОбИзменении(Объект.Документ)
    
КонецПроцедуры  

&НаСервере
Процедура ЗаполнитьСерверСтатус()
        
    ДокОбъект = Объект.Документ.ПолучитьОбъект();

    ТЧСтатус = ДокОбъект.Товары;

    Для Каждого Стр Из ТЧСтатус Цикл
        СпрСерии = Стр.Серия.ПолучитьОбъект();
        СпрСерии.СтатусПродукции = Объект.Статус;
        СпрСерии.Записать();
    КонецЦикла;
    
КонецПроцедуры
17 Остап Ибрагимович
 
04.12.22
03:30
//будь проще - и к тебе потянутся!
&НаКлиенте
Процедура ИзменитьСтатус(Команда)
    Для Каждого Стр Из Объект.ТЧСтатус Цикл
        УстановитьСтатусТовараНаСервере(Стр.Серия, Объект.Статус);
        ОповеститьОбИзменении(Стр.Серия);
    КонецЦикла;
КонецПроцедуры  

&НаСервереБезКонтекста // так-то оно пошустрее будет
Процедура УстановитьСтатусТовараНаСервере(СерияСсылка, СтатусСсылка)
    СерияОбъект = СерияСсылка.ПолучитьОбъект();
    СерияОбъект.СтатусПродукции = СтатусСсылка;
    СерияОбъект.Записать();
КонецПроцедуры
18 Barry
 
04.12.22
14:21
(17) Переменная не определена (ТЧСтатус)
19 Barry
 
04.12.22
14:29
(18) Забыл объект добавить. Спасибо! Теперь все в тч документа обновилось как нужно.