Имя: Пароль:
1C
1C 7.7
v7: Обновить ссылочные данные на форме документа без переоткрытия формы
0 МастерВопросов
 
27.06.17
10:03
Есть самописный документ, у него в ТЧ есть реквизит со ссылкой на док "Заказы с сайта"(тоже самописный). На форме в табличной части рядом с колонкой "Заказы с сайта" есть текстовая колонка "Статус заказа". В Формуле колонки стоит выражение "ЗаказСсайта.Статус" и соответственно выводится статус заказа.
На форме есть больщая кнопка "Изменить статусы заказов на:", по нажатию этой кнопки перебирается табличная часть, по ссылке из колонки "Заказы с сайта" находится соответствующий документ и в нём меняется статус. НО!!! в открытой форме документа, не смотря на срабатывание формулы "ЗаказСсайта.Статус" остается старый статус. И только после переоткрытия формы документа, колонка "Статус заказа" перезаполняется новыми значениями.
Как программно обновить колонку "Статус заказа" не переоткрывая форму документа??

Такой вариант не срабатывает:
СтатусЗаказа = НовыйСтатус;
1С Ругается что "СтатусЗаказа" не доступен для записи (это текстовая колонка на форме).
1 МастерВопросов
 
27.06.17
10:05
речь о 1С77 ТиС
2 Масянька
 
27.06.17
10:06
(0) Форма.Обновить();
3 МастерВопросов
 
27.06.17
10:08
(2) пробовал! Толку ноль.
Я так понимаю "Форма.Обновить();" только флаг модифицированности меняет
4 Масянька
 
27.06.17
10:12
(3) Если "толку ноль" - значит не изменился статус.
Не меняет, а может менять, а может не менять - как пропишешь.
5 МастерВопросов
 
27.06.17
10:13
(4) я из колонки "Заказы с сайта" открываю заказ, там уже новый статус
6 АЛьФ
 
27.06.17
10:14
В текстовой колонке "СтатусЗаказа" какая формула прописана?
7 МастерВопросов
 
27.06.17
10:14
сейчас в конце процедуры по нажатию кнопки "Изменить статусы заказов на:" делаю "Форма.Закрыть(0);"
8 Масянька
 
27.06.17
10:15
(6) Лучше уже кусок кода.
9 МастерВопросов
 
27.06.17
10:16
(6) ну если уж совсем точно, то там вызывается функция, внутри которой написано:
Возврат ЗаказСсайта.Статус;

и точка останова срабаывает на этой строке по нажатию кнопки "Изменить статусы заказов на:", но сами статусы не меняются.
10 Масянька
 
27.06.17
10:17
(9) Код всей функции давай.
11 Дмитрий
 
27.06.17
10:19
При нажатии на большую кнопку ссылки в колонке ЗаказССайта перепрописываются?
12 Дмитрий
 
27.06.17
10:21
(11) после смены статуса и записи заказа
13 Масянька
 
27.06.17
10:23
(12) Другими словами: перед возвратом напиши "Сообщить("" + ЗаказСсайта.Статус); и посмотри на статус.
14 АЛьФ
 
27.06.17
10:25
2(10) Возврат ЗаказСсайта.ТекущийДокумент().Статус;
15 Масянька
 
27.06.17
10:26
(14) Э-э-э... А зачем мне?
16 АЛьФ
 
27.06.17
10:27
2(15) Пардон, промахнулся.
17 МастерВопросов
 
27.06.17
10:34
(10)

//******************************************************************************
Процедура ОбновитьСтатусы()

    НовыйСтатус = СтатусЗаявкиСписок.ПолучитьЗначение(СтатусЗаявкиСписок.ТекущаяСтрока());
    ДокументЗаявкаСсайта = СоздатьОбъект("Документ.ЗаявкаССайта");
    ВыбратьСтроки();
    Пока ПолучитьСтроку() = 1 Цикл
        Если ПустоеЗначение(ЗаявкаССайта) = 0 Тогда
            Если СокрЛП(ЗаявкаССайта.СтатусЗаявки) <> СокрЛП(НовыйСтатус) Тогда
            Если ДокументЗаявкаСсайта.НайтиДокумент(ЗаявкаССайта) = 1 Тогда
                ДокументЗаявкаСсайта.СтатусЗаявки = НовыйСтатус;
                ДокументЗаявкаСсайта.Записать();
                //СтатусЗаказа = НовыйСтатус; //обновим данные на форме
            КонецЕсли;
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;

    Форма.Закрыть(0);
    
КонецПроцедуры

//******************************************************************************
Функция ВернутьСтатусЗаявки(ЗаявкаССайта)
    Если ПустоеЗначение(ЗаявкаССайта) = 0 Тогда
        Возврат СокрЛП(ЗаявкаССайта.СтатусЗаявки);
    КонецЕсли;
    Возврат "";
КонецФункции
18 МастерВопросов
 
27.06.17
10:37
(14) Спасибо!!!

Вот так заработало как надо!

//******************************************************************************
Функция ВернутьСтатусЗаявки(ЗаявкаССайта)
    Если ПустоеЗначение(ЗаявкаССайта) = 0 Тогда
        ДокументЗаявкаСсайта = СоздатьОбъект("Документ.ЗаявкаССайта");
        Если ДокументЗаявкаСсайта.НайтиДокумент(ЗаявкаССайта) = 1 Тогда
            Возврат ДокументЗаявкаСсайта.ТекущийДокумент().СтатусЗаявки;
        КонецЕсли;
    КонецЕсли;
    Возврат "";
КонецФункции
19 МастерВопросов
 
27.06.17
10:40
АЛьФ крутой!

//кстати, я уже кажись так делал где то. Но со снеговиком уже совсем забыл старые добрые клюшечные приёмы!
20 АЛьФ
 
27.06.17
10:43
2(18) Зачем искать заново документ? По идее должно работать только с добавление ТекущийДокумент().
21 МастерВопросов
 
27.06.17
10:44
(20) не работает! "ЗаказСсайта" - это ссылка, там не может быть никакого "Текущий документ"
22 АЛьФ
 
27.06.17
10:47
2(21) Нет такого понятия в 7.7. Если срабатывает "НайтиДокумент(ЗаявкаССайта)", то должно срабатывать и "ЗаявкаССайта.ТекущийДокумент()".
ЗаявкаССайта - это реквизит табличной части документа?
23 МастерВопросов
 
27.06.17
10:48
Возврат ЗаявкаССайта.ТекущийДокумент().СтатусЗаявки;
{Документ.ЛистДоставки.Форма.Модуль(187)}: Значение не представляет агрегатный объект (СтатусЗаявки)
24 МастерВопросов
 
27.06.17
10:48
(22) да, ЗаявкаССайта - это реквизит табличной части документа.
25 Масянька
 
27.06.17
10:50
(21) Однако... Может лучше вернуться к снеговику? :)
26 МастерВопросов
 
27.06.17
10:51
а вот так работает без ошибок:
"Возврат ЗаявкаССайта.ТекущийДокумент();"

===============================

Я кажется знаю в чем дело! У меня "ЗаявкаССайта" - имеет тип "документ", так как там у меня может хранится два вида документа.
27 МастерВопросов
 
27.06.17
10:52
(25) "Всегда найдутся те, кто будет говорить, что у тебя ничего не получится. Никого не слушай, если действительно хочешь чего-то добиться. Они говорят, что ничего не выйдет, потому что не смогли это сделать сами." (с)
28 МастерВопросов
 
27.06.17
10:54
(27) это из Масянька
29 АЛьФ
 
27.06.17
10:54
2(26) Что-то еще не договариваешь. Из-за разных типов она бы такую же ошибку и без текущего документа выдавала.

Функция ВернутьСтатусЗаявки(ЗаявкаССайта)
    Если ЗаявкаССайта.Выбран() = 1 Тогда
        Если ЗаявкаССайта.Вид() = "ЗаявкаССайта" Тогда
            Возврат СокрЛП(ЗаявкаССайта.СтатусЗаявки);
        КонецЕсли;
    КонецЕсли;
    Возврат "";
КонецФункции
30 Масянька
 
27.06.17
10:55
(27) Не думаешь - тупо копипастишь...
31 МастерВопросов
 
27.06.17
16:58
Последняя версия

//******************************************************************************
Функция ВернутьСтатусЗаявки(ЗаявкаССайта)
    Если ЗаявкаССайта.Выбран() = 1 Тогда
        Если ЗаявкаССайта.Вид() = "ЗаявкаССайта2" Тогда
            Возврат ЗаявкаССайта.ТекущийДокумент().СтатусЗаявки;  
        КонецЕсли;  
        Если ЗаявкаССайта.Вид() = "ЗаявкаССайта" Тогда
            Возврат ЗаявкаССайта.ТекущийДокумент().СтатусЗаявки;  
        КонецЕсли;
    КонецЕсли;    
    Возврат "";
КонецФункции    //
  
  
//******************************************************************************    
  
Процедура ПоменятьСтатусЗаявки()
    
    НовыйСтатус = СокрЛП(СтатусЗаявкиСписок.ПолучитьЗначение(СтатусЗаявкиСписок.ТекущаяСтрока()));
    ВыбратьСтроки();
    Пока ПолучитьСтроку() = 1 Цикл
        Если ЗаявкаССайта.Выбран() = 1 Тогда
            Если ЗаявкаССайта.СтатусЗаявки <> НовыйСтатус Тогда
                Если ЗаявкаССайта.Вид() = "ЗаявкаССайта2" Тогда
                    ДокЗаякиСсайта2 = СоздатьОбъект("Документ.ЗаявкаССайта2");
                    Если ДокЗаякиСсайта2.НайтиДокумент(ЗаявкаССайта) = 1 ТОгда
                        Попытка            
                            ДокЗаякиСсайта2.СтатусЗаявки = НовыйСтатус;
                            ДокЗаякиСсайта2.Записать();  
                            //СтатусЗаявки = НовыйСтатус;
                        Исключение
                            Сообщить("Не удалось изменить статус у документа: "+СокрЛП(ЗаявкаССайта));
                        КонецПопытки;
                    КонецЕсли;      
                КонецЕсли;      
                Если ЗаявкаССайта.Вид() = "ЗаявкаССайта" Тогда  
                    ДокЗаякиСсайта2 = СоздатьОбъект("Документ.ЗаявкаССайта");
                    Если ДокЗаякиСсайта2.НайтиДокумент(ЗаявкаССайта) = 1 ТОгда
                        Попытка            
                            ДокЗаякиСсайта2.СтатусЗаявки = НовыйСтатус;
                            ДокЗаякиСсайта2.Записать();  
                            //СтатусЗаявки = НовыйСтатус;
                        Исключение
                            Сообщить("Не удалось изменить статус у документа: "+СокрЛП(ЗаявкаССайта));
                        КонецПопытки;
                        
                    КонецЕсли;      
                КонецЕсли;    
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;    
    //Форма.Обновить();  
    //Форма.Закрыть(0);
КонецПроцедуры