|
РегСведений в ДС (произвольный запрос) обновление (УФ) | ☑ | ||
---|---|---|---|---|
0
1с-кин
30.10.20
✎
15:52
|
В УТ11: ДинамическийСписок на форме документа "Товары". ДС подключен к РС "Товары" (методом "произвольный запрос"). Основная таблица заполнена (несмотря на произвольный запрос).
Из МодуляФормы документа вызываем процедуру МодуляМенеджера, там меняем номер и дату документа (т.е. ссылку), возвращаемся обратно на форму - отображение РС в ДС не обновляется. И не хочет рефрешится после изменения никак, перепробовал всё. Только закрытие и открытие документа помогает увидеть данные по РС. Что применял в разных вариантах в модуле формы: // ОтобразитьИзменениеДанных(ЭтаФорма.дсТовары, ВидИзмененияДанных.Изменение); Элементы.дсТовары.Обновить(); // Элементы.дсТовары.Обновить(); // ЭтаФорма.ОбновитьОтображениеДанных(Элементы.дсТовары); // ОповеститьОбИзменении(Тип("ДокументСсылка.Товары")); ОповеститьОбИзменении(Тип("РегистрСведенийКлючЗаписи.Товары")); // Прочитать(); // ПоказатьОповещениеПользователя("ИзменениеДокумента", ,"Выполнено!",); //(если к ДС привязан РС - то ДС обновится, если в ОсновнаяТаблица в свойствах указана таблица регистра; //с произвольным запросом так не работает) Пробовал оповещение: Но тут 'ОбработкаОповещения' не отрабатывает в моём перехватчике 'ОбработкаОповещения' - а перекидывает сразу либо в справочник 'Новости', ФормаПросмотраНовостейРабочийСтол, либо - в общую форму 'ПодключениеИнтернетПоддержки' Оповестить("Запись_ИзменениеДокумента" , Объект.Ссылка , ЭтаФорма); &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Если ИмяСобытия = "Запись_ИзменениеДокумента" Тогда ОповеститьОбИзменении(Параметр); Элементы.дсТовары.Обновить(); КонецЕсли; КонецПроцедуры Что делать? Не получается заставить УФ работать, и рефрешить данные отбора по РС на форме. |
|||
1
Kassern
30.10.20
✎
16:15
|
ОбновитьИнтерфейс(); не пробовал?
|
|||
2
Жан Пердежон
30.10.20
✎
16:44
|
ОповеститьОбИзменении() - ДС сразу обновляется
проверь свойство таблицы формы "ОбновлениеПриИзмененииДанных" |
|||
3
Timon1405
30.10.20
✎
16:49
|
ОповеститьОбИзменении(Тип("ДокументСсылка.ТотМДКоторыйПоменялся"));
|
|||
4
1с-кин
30.10.20
✎
17:21
|
>>проверь свойство таблицы формы "ОбновлениеПриИзмененииДанных"
Установлено в Авто, не помогает. |
|||
5
1с-кин
30.10.20
✎
17:23
|
>>ОбновитьИнтерфейс(); не пробовал?
Не помогает, даже реквизиты шапки не обновляет. |
|||
6
1с-кин
30.10.20
✎
17:24
|
>>ОповеститьОбИзменении(Тип("ДокументСсылка.ТотМДКоторыйПоменялся"));
Это уже пробовал, равно как и: <code>ОповеститьОбИзменении(Тип("РегистрСведенийКлючЗаписи.Товары"));</code> |
|||
7
Kassern
30.10.20
✎
17:32
|
(0)"там меняем номер и дату документа..." Я правильно понял, вы в модуле менеджера меняете дату и номер документа, чья форма у вас открыта? А при этом документ то записывается? Если нет, то откуда РС узнает об изменении номера документа, если в базе данный номер еще не записался?
|
|||
8
1с-кин
02.11.20
✎
09:34
|
>>вы в модуле менеджера меняете дату и номер документа, чья форма у вас открыта
Да, так и есть. И нет никакой возможности передать ссылку обратно из модуля менеджера. |
|||
9
1с-кин
02.11.20
✎
09:37
|
Как-бы нормальный объектный язык сам отслеживает, какая-где ссылка.
Но только не 1С, где программист должен скакать между "клиентом" и "сервером", указывая принудительно, что инструкции, приписанные к серверу (платформой же) - выполнять на сервере, а на клиенте нет - ну, никак и не получишь. |
|||
10
Жан Пердежон
02.11.20
✎
09:44
|
(9) нормальный - это какой?
во-первых, у тебя ссылка нигде не меняется, меняется её представление во-вторых, ОповеститьОбИзменении() для твоего случая как раз и придумано, работает отлично, смотри свой г-код внимательней |
|||
11
ДенисЧ
02.11.20
✎
09:45
|
(9) Пиши на нормальных языках. Чего ты в 1с впёрся?
|
|||
12
1с-кин
02.11.20
✎
09:51
|
(11) ну давай, расскажи, как в такой ситуации быть?
(9) не работает ОповеститьОбИзменении()! От слова "совсем". Именно оповещение, именно того самого РС, данные которого нужно отобразить, именно в форме документа, куда выполнение возвращается после модуля менеджера. Результат - ничего, пустой документ. С привязанным РС работает, с произвольным запросом - нет. Так что это еще у кого го-код, в платформе или где. |
|||
13
ДенисЧ
02.11.20
✎
09:59
|
(12) Исчо раз. Пиши на нормальных языках.
|
|||
14
1с-кин
02.11.20
✎
10:11
|
(13) ну так что не расскажешь, каким таким г-дом это исправить? Не знаешь?
Вот тебе и "исчо раз". |
|||
15
Андроны едут
02.11.20
✎
10:43
|
>>Пробовал оповещение:
Но тут 'ОбработкаОповещения' не отрабатывает в моём перехватчике 'ОбработкаОповещения' В обработке оповещения должна быть команда ЭтаФорма.ОбновитьОтображениеДанных(Элементы.дсТовары); а у вас её нет. |
|||
16
Жан Пердежон
02.11.20
✎
11:09
|
(12)
дано б уже выложил: код вызова своей мега-полезной процедуры менеджера; текст процедуры; текст запроса ДС и имя основной таблицы; структуру РС и документа (с типами) и да, называть РС и Док просто "Товары" - это уже где-то за гранью |
|||
17
1с-кин
02.11.20
✎
12:03
|
(16)>>и да, называть РС и Док просто "Товары" - это уже где-то за гранью
А разница? Для упрощения же я привел как "Товары". Док и РС называются "ТоварыSIM" - это ничего не меняет по факту вопроса. |
|||
18
1с-кин
02.11.20
✎
12:08
|
(15) ЭтаФорма.ОбновитьОтображениеДанных(Элементы.дсТовары);
применялась непосредственно в модуле формы - безрезультатно. В процедуре оповещения было так: Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) // Если ИмяСобытия = "Изменение_ТоварыSIM" Тогда ОповеститьОбИзменении(Параметр); Элементы.дсТоварыSIM.Обновить(); КонецЕсли; КонецПроцедуры вызов: Оповестить("Изменение_ТоварыSIM", Объект.Ссылка, ЭтаФорма); Оповещение вообще не попадало в эту процедуру, уходит куда-то в свои (выше написал). Подставлял и там код обработки оповещения как у меня выше - не реагирует. |
|||
19
1с-кин
02.11.20
✎
12:12
|
(16) вызов модуля менеджера:
&НаСервере Процедура ЗагрузитьДокументНаСервере() ПараметрыКоманды = Новый Структура; ПараметрыКоманды.Вставить("Ссылка", Объект.Ссылка); ПараметрыКоманды.Вставить("ПутьКФайлу", ПутьКФайлу); // Документы.ТоварыSIM.ВыполнитьКомандуЗагрузка(, ПараметрыКоманды); КонецПроцедуры; |
|||
20
1с-кин
02.11.20
✎
12:14
|
&НаКлиенте
Процедура ЗагрузитьДокумент(Команда) // ЗагрузитьДокументНаСервере(); ... Оповестить("Изменение_ТоварыSIM" , Объект.Ссылка , ЭтаФорма); // КонецПроцедуры; |
|||
21
1с-кин
02.11.20
✎
12:20
|
(16) произвольный запрос ДС:
ВЫБРАТЬ РегистрСведенийТоварыSIM.ДокументТоварыSIM, РегистрСведенийТоварыSIM.Номенклатура, РегистрСведенийТоварыSIM.Характеристика, РегистрСведенийТоварыSIM.КодСтроки, РегистрСведенийТоварыSIM.Количество, РегистрСведенийТоварыSIM.Упаковка, РегистрСведенийТоварыSIM.Штрихкод, РегистрСведенийТоварыSIM.КоллекцияНоменклатуры, РегистрСведенийТоварыSIM.Бренд ИЗ РегистрСведений.ТоварыSIM КАК РегистрСведенийТоварыSIM ГДЕ ВЫБОР КОГДА НЕ &ЭтоНовый ТОГДА РегистрСведенийТоварыSIM.ДокументТоварыSIM = &ТекущийДок ИНАЧЕ ЛОЖЬ КОНЕЦ Основная таблица: РегистрСведений.ТоварыSIM Только не понимаю, что это даст. Тут всё правильно, и работает, если РС к ДС подключен напрямую. Если как произвольный запрос - не работает. |
|||
22
Жан Пердежон
02.11.20
✎
12:35
|
у тебя "объект" не меняется в форме и вообще форма становится "невалидной" (при записи из формы стандартными функциями кнопками будет ругаться):
пробуй: Документы.ТоварыSIM.ВыполнитьКомандуЗагрузка(, ПараметрыКоманды); Прочитать(); |
|||
23
Жан Пердежон
02.11.20
✎
12:48
|
Короче, у тебя скорее всего параметры ДС &ЭтоНовый и &ТекущийДок старые значения имеют - и тут хоть обобновляйся
|
|||
24
hhhh
02.11.20
✎
13:28
|
(18) но вообще, эта процедура ОбработкаОповещения привязана к событию ОбработкаОповещения формы ?
|
|||
25
1с-кин
02.11.20
✎
13:35
|
(18)>>эта процедура ОбработкаОповещения привязана к событию ОбработкаОповещения формы
Да походу, не привязана... Я её уже в типовых ловил... |
|||
26
1с-кин
02.11.20
✎
13:36
|
(23)>>всего параметры ДС &ЭтоНовый и &ТекущийДок старые значения имеют
Так как вернуть из модуля менеджера новое значение ссылки? Ни реквизиты, ничего не доступно. |
|||
27
hhhh
02.11.20
✎
13:41
|
(25) что значит "ловил"?
|
|||
28
Жан Пердежон
02.11.20
✎
14:05
|
(26)
ещё раз: у тебя ссылка _не_ изменяется, меняется сам объект правильно будет переделать твою функцию, чтобы она и с объектом могла работать, и тогда ДокОбъект = РеквизитФормыВЗначение("Объект"); ПараметрыКоманды.Вставить("Источник", ДокОбъект); Документы.ТоварыSIM.ВыполнитьКомандуЗагрузка(, ПараметрыКоманды); ЗначениеВРеквизитФормы(ДокОбъект, "Объект"); |
|||
29
1с-кин
02.11.20
✎
14:13
|
(15) обработка оповещения тут ни причём:
не работает ни в одном из случаев: &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) // Если ИмяСобытия = "ИзменениеДокумента" Тогда // 1 вариант: ОповеститьОбИзменении(Параметр); //Объект.Ссылка // 2 вариант: Элементы.дсТоварыSIM.Обновить(); // 3 вариант: ЭтаФорма.ОбновитьОтображениеДанных(Элементы.дсТоварыSIM); // 4 вариант: Элементы.дсТоварыSIM.ОбновлениеПриИзмененииДанных = ОбновлениеПриИзмененииДанных.Авто; КонецЕсли; КонецПроцедуры //ОбработкаОповещения() |
|||
30
hhhh
02.11.20
✎
14:46
|
(29) ну она и не должна работать если не привязана к событию формы. Это уже выяснили.
|
|||
31
1с-кин
03.11.20
✎
12:52
|
(30) да это понятно, тут все проверил уже, все равно не работает.
Надо вариант с передачей объекта потестить - да и единственный он остался) |
|||
32
Kassern
05.11.20
✎
11:43
|
Только что проверил, все работает, как надо, все обновляется...
//Модуль формы &НаКлиенте Процедура ТвояМегаПроцедура(Команда) ТвояМегаПроцедураСервер(); Прочитать(); ОбновитьИнтерфейс(); КонецПроцедуры Процедура ТвояМегаПроцедураСервер() Документы.Товары.ИзменитьНомерДату(Объект); КонецПроцедуры //Модуль Менеджера Процедура ИзменитьНомерДату(Объект) экспорт Док=Объект.Ссылка.ПолучитьОбъект(); Док.Дата=ТекущаяДата(); Док.Записать(РежимЗаписиДокумента.Проведение); КонецПроцедуры |
|||
33
Kassern
05.11.20
✎
11:47
|
(0) Вот тебе тест база, написанная на коленке, где это все работает. Только вот зачем использовать тут модуль менеджера и выводить ссылку документа в самом документе мне не понятно...
https://yadi.sk/d/ZG2tpTz-vtzDnw |
|||
34
Жан Пердежон
05.11.20
✎
18:38
|
(32) очевидно, что работать не будет, если документа нет в базе
|
|||
35
Kassern
06.11.20
✎
09:11
|
(34) Что работать не будет? Я скинул базу с одним документом и с одной записью РС. При изменении даты документа по кнопке, на форме автоматически обновляются данные, что и просил автор поста. Если документа нет в базе, то понятно, что ты его не привяжешь к РС.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |