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