|   |   | 
| 
 | РегСведений в ДС (произвольный запрос) обновление (УФ) | ☑ | ||
|---|---|---|---|---|
| 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) Что работать не будет? Я скинул базу с одним документом и с одной записью РС. При изменении даты документа по кнопке, на форме автоматически обновляются данные, что и просил автор поста. Если документа нет в базе, то понятно, что ты его не привяжешь к РС.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |