|
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); КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |