Имя: Пароль:
1C
1C 7.7
v7: Обновление данных из подчиненого документа
,
0 iprad
 
24.05.16
13:37
Добрый день Всем.
Собственно вопрос - в ТЧ документа имеется поле с ссылкой на документ, и текствое поле, в котором формула получает значения из ТЧ этого документа. Если открыть по ссылке из ТЧ документ, изменить его, провести и закрыть, то формула возвращает данные до изменения. Насколько я понимаю, при открытии формы, создается контекст документов по ссылкам, и при их изменении этот контекст никак не изменяется, если только не закрыть и открыть форму снова. Как обойти это?
1 Mikeware
 
24.05.16
14:10
чиво?
2 Ёпрст
 
24.05.16
14:11
(0) Обнови форму
3 Ёпрст
 
24.05.16
14:12
или тупо по строкам взад-вперёд курсором
:)
4 Ёпрст
 
24.05.16
14:13
Ну и.. смотря что у тебя в формуле текста на форме написано, конечно
5 iprad
 
24.05.16
15:21
Обновление формы ничего не дает. И строки курсором - то-же самое
6 Масянька
 
24.05.16
15:30
(5) Значит, формула у тебя кривая.
7 iprad
 
24.05.16
15:49
если-бы она была кривая, то вообще ничего не возвращала
Ещё раз:
имеется документ (главный так-сказать)
в ТЧ реквизит документ. В каждой строке он разный (тип один,но содержание разное) Текстовое поле, в котором формула берет указанный документ, обходит в цикле строки ТЧ указаного документа, и возвращает текстовую результатирующую строку.
При открытии всё работает как надо. Открываем документ по ссылке из ТЧ главного документа. Меняем содержимое. Закрываем. Обновляем главную форму. Ничего не изменилось. Закрываем главную форму и снова открываем. Все изменения отображены.
8 Mikeware
 
24.05.16
16:06
(7) формула кривая.
9 iprad
 
24.05.16
17:55
Насколько я понимаю, при открытии формы, создается контекст документов по ссылкам, и при их изменении (Документов) этот контекст, загруженный в форму(Документов по ссылкам) никак не изменяется
10 iprad
 
24.05.16
17:56
Вывод - при изменении документа обновлять ссылку на него
11 vcv
 
25.05.16
06:36
Кеширование. В типовой ТиС при открытии какого-либо реквизита из формы документа используется такая функция. Обрати внимание на Конт.УстановитьАтрибут и Конт.ПолучитьАтрибут в случае, если значение признано модифицированным.

Функция глОткрытьКарточкуРеквизита(Конт, ИдРеквизита) Экспорт
    
    СтарыйРеквизит = Конт.ПолучитьАтрибут(ИдРеквизита);
    
    Если СтарыйРеквизит.Выбран() = 1 Тогда
        ОткрытьФормуМодально(СтарыйРеквизит, , 0);
    Иначе
        Возврат 0;
    КонецЕсли;
    
    НовыйРеквизит  = СтарыйРеквизит.ТекущийЭлемент();
    
    // если элемент изменился (его отредактировали), Контекст об этом не знает
    МодифицировалиЭлемент = глСравнитьЭлементыСправочника(НовыйРеквизит, СтарыйРеквизит);
    
    
    Если МодифицировалиЭлемент=1 Тогда
        // обновляем реквизит в форме
        Конт.УстановитьАтрибут(ИдРеквизита, "");
        Конт.ПолучитьАтрибут(ИдРеквизита);
        Конт.УстановитьАтрибут(ИдРеквизита, НовыйРеквизит);
    КонецЕсли;
    
    Возврат МодифицировалиЭлемент;
    
КонецФункции // глОткрытьКарточкуРеквизита()
12 iprad
 
25.05.16
06:41
Спасибо. Вопрос исчерпан.
2 + 2 = 3.9999999999999999999999999999999...