После обновления 1с форма не изменилась
Задача состояла в следующем. В форме динамического списка необходимо было показать итоговую информацию. К примеру, в журнале накладных вывести количество накладных и общую сумму. Получить необходимые данные не составляло труда - формировался запрос с условием, соответствующим текущему отбору списка и запускался на выполнение. Но неожиданно проблемой оказалось обеспечение "синхронности" между данными списка и итоговой информацией.
То есть, данные динамического списка могут изменяться по различным причинам:
1. Изменился отбор списка
2. Пользователь в текущем сеансе изменил или удалил объект из списка
3. Пользователь нажал в форме кнопку "Обновить" (либо настроено автоматическое обновление списка)
Соответственно, хотелось бы после каждого такого события сразу пересчитывать служебную информацию.
Варианты решения были следующие:
1. Использовать событие формы "ОбновлениеОтображения".
Это событие действительно реагирует на любое изменение динамического списка. Но оно также вызывается и во многих других случаях. В частности, при смене страницы формы, при активизации строки в списке (если назначена обработка этих событий) и т.д. Короче, использование этого варианта вызывало приличные тормоза из-за перерасчета итогов после каждого чиха пользователя.
2. Использовать событие табличного поля "ПриПолученииДанных".
Вариант имеет такие же недостатки, как и предыдущий, хотя и в меньшей степени. Т.е. событие (а значит, и перерасчет итогов) выполнялось не только когда данные списка действительно менялись, но и при прокрутке списка, и даже при изменении размеров формы.
3. Добавить в форму кнопочку "Рассчитать", чтобы пользователь жал на неё всякий раз, когда ему потребуются актуальные итоги по списку. Коряво, неудобно, но приходилось поступать именно так, пока не появился ВАРИАНТ 4.
Хотя решение немного через .опу
Суть: на форму добавляется скрытое табличное поле, источником данных которого служит нужный нам динамический список, и далее используется событие "ПриПолученииДанных" этого табличного поля. Так как данное табличное поле не прокручивается и не меняет размеров, то событие возникает только тогда, когда список реально требует обновления.
Правда, в процессе реализации этого варианта вылезло ещё несколько "особенностей" платформы, но почти все удалось обойти.
В результате, сервисный код упрятан в две процедуры общего модуля: ПодключитьОбработчикОбновленияСписка(. ) и ОтключитьОбработчикОбновленияСписка(. ). Первая назначает для обработки обновления списка процедуру модуля формы, вторая, соответственно, отключает обработчик. Выглядит всё это так:
Теперь ложка дёгтя.
Алгоритм не отрабатывает ситуацию, когда список полностью очищается. То есть, в списке были какие-то строки, а потом пользователь все строки удалил, либо задал такой отбор, при котором в список не попадает ни один объект. Как оказалось, 1С просто не вызывает событие "ПриПолученииДанных" для пустого списка.
Чтобы обойти эту проблему, пришлось погрузиться в .опу уже по локоть.
Используя событие "ПриАктивизацииСтроки" нашего вспомогательного табличного поля, можно отловить ситуацию, когда свойство ТекущаяСтрока табличного поля меняет значение на Неопределено, сигнализируя, что в списке больше нет ни одной строки. Но очередной сюрприз от платформы - приняв значение Неопределено, ТекущаяСтрока "фиксируется" на нем, и не меняется, даже когда в списке вновь появляются объекты. То есть, если не поменять значение текущей строки, второй раз событие "ПриАктивизацииСтроки" уже не сработает.
Трагедия в том, что узнать, что список вновь заполнен, можно только в "ПриПолученииДанных", а изменить текущую строку во время обработки данного события невозможно - 1С вылетает с критической ошибкой (желающие могут попробовать). Помогли только пляски с шаманским бубном вокруг компьютера.
В итоге, получилось следующее:
Замечание от Гений1С:
Можно попробовать подключить функцию изменения данных ПодключитьОбработчикИзмененияДанных на данные списка.
Замечание от clappa:
Мне удалось использовать ПодключитьОбработчикИзмененияДанных только для контроля за изменением отбора динамического списка. В других перечисленных случаях этот метод бесполезен. В частности, изменение порядка он "не ловит".
Есть документ
После записи меняется документ - который реквизит документа
На форме он есть - но отображается старый пока не закроешь и не откроешь новый
как форму обновить?
тоже не работает
хотела обновить реквизит измененный
Используйте событие ОбработкаОповещения на той форме которую хотите обновить. Этот событие возникает в результате работы метода Оповестить().Например: Вам нужно ПослеЗаписи изменяемого документа вызвать процедуру Оповестить(). И ловить это оповещение в той форме которую хотите обновить в событии ОбработкаОповещения Судя по всему, этот реквизит обновляется не через ОбновлениеОтображения(), а где-то в ПриОткрытии() и/или при изменении связанного с ним поля. Смотрите в коде как это происходит и добавляйте в ПослеЗаписи(). ну отписались бы хоть по результатам! Всячески пробовал уже, не выходит обновить форму программно. (4) ЭтотОбъект.Прочитать().
Вызываете в форме в нужном месте, можно на клиенте, можно на сервере.
А уже потом обновляете форму. (5) Нет, обновятся только реквизиты. А хотелось бы чтобы на форме пропала * у наименования, что там данные актуальны теперь. (6)Не факт отсутствия звездочки = актуальность данных. Отсутствие звездочки = документ записан. Если на форме есть данные из другого объекта, которые изменились в другом сеансе, то о них можно узнать только получив оповещение открытым формам. Так как то.
И опять нет!))
Отсутствие "*" означает, что ЭтаФорма.Модифицированность = Ложь
Документ (справочник) может быть и не актуальным и не записанным при этом. Все зависит от рук разработчика.
УправляемаяФорма (ManagedForm)
ОбновитьОтображениеДанных (RefreshDataRepresentation)
Синтаксис:
Тип: ГруппаФормы; ТаблицаФормы; ПолеФормы; Массив.
Если параметр задан, то установка значений (и обновление) будет выполняться только для тех элементов, которые заданы в параметре. Если в качестве значения передан пустой массив, то ни для каких элементов формы установка значений выполнена не будет.
После вызова метода признак необходимости установки значений и обновления для элементов формы сбрасывается: если после вызова метода никакие данные формы не меняются, то ни для никаких элементов, кроме указанных, текст обновлен не будет.
Если параметр имеет значение типа Массив, то элементами массива могут быть только значения типа ГруппаФормы, ТаблицаФормы, ПолеФормы.
Если массив содержит значение другого типа, то будет выдано исключение о неверном типе параметра.
Вызов метода ОбновитьОтображениеДанных с параметром <ОбновлятьЭлементы> имеет смысл только внутри обработчика ВнешнееСобытие, обработчиков ожидания формы и обработчика ОбработкаОповещения.
В обработчиках других событий вызов этого метода с параметром аналогичен вызову без параметра (при необходимости данные будут установлены всем элементам управления).
Описание:
В принудительном порядке обновляет содержание элементов управления.
Полезен при изменении значений реквизитов формы вне формы, в тот момент, когда форма отображается на экране.
Тонкий клиент, веб-клиент, толстый клиент, мобильное приложение(клиент).
Примечание:
В веб-клиенте обновление элементов управления происходит не сразу, а после окончания выполнения кода на встроенном языке.
Управляемая форма обработки
Есть обработка (не внешняя, а в конфигурации), есть её форма. 2 процедуры: &НаКлиенте.
Горячие клавиши управляемая форма
Ребят, может в курсе кто: каким образом на управляемой форме можно поменять горячую клавишу для.
управляемая форма и картинка
нужно в управляемой форме загрузить картинку в поле картинки. есть форма элемента справочника и.
Управляемая форма. Не работает форма списка документа
Здравствуйте! Создал форму списка документа, сделал ее основной формой списка. В конфигураторе все.
Если в обработке выставленая форма и она внешняя и точно сохранена - то на другом ПК она будет выглядеть точно, так же. карочи.
такая странная весчь.
чистка кеша не помогла.
вставил внешнюю обработку назвал "исхИмя2"
запускаю новую обработку - открывается форма с таблицей формы из обработки "исхИмя", но с данными новыми правильными.
открываю "ИсхИмя" - открывается новая таблица, но с данными старыми
что это может быть такое?
это какая-то магия?
база серверная и файловая.
чистка кеша не помогает ни на одной.
есть ли какие нить типовые шняги, которые могут вытворять такое?
з.ы. на сервере отладки нет к сожалению
включи 30 сек занимает
платформа какая? релиз
Добавлено через 3 минуты
платформа
8.3.5.1517.
з.ы. мои руки ноги голова - это не типовые шняги ))
не пробовал.
я не админ того места
Добавлено через 11 секунд
ок
попробвую
Добавлено через 2 часа 42 минуты
итак, обновление платформы до 1С:Предприятие 8.3 (8.3.6.2041)
не помогло.
все то же самое.
если что, то обработка называется помощник продаж.
и там в при создании на сервере меняется дохрена че в данных формы через общие мордули.
вот я и думаю, мож там че ковырнуть?
ИзменитьРеквизиты может там есть? И их банально дёрнуть забыли?
Так же права на выполнение этой обработки.
Не может просто так быть, чтобы тут работало, а там нет.
ПРИ ОТКРЫТИИ ФОРМЫ.
ПОСТАВИЛ ТОЧКУ ОСТАНОВА.
через шифт ф9 залез в элементы.
все стоит.
все видно, все подчиненные элементы видно.
открывается и их не видно.
как такое может быть?
Добавлено через 6 минут
если что то обработка называется "помощник продаж".
м.б я туплю и что то проморгал, там адовы подмены происходят.
никакой функциональной опции нет.
Добавлено через 1 минуту
м.б. я перепутал трохи, ща гляну.
тут в одну таблицу выводится до хрена че, и это типовое.
по разному все.
минут через 15 напишу.
Добавлено через 14 минут
карочи не понятно пока с этим.
вопрос возник другой.
про запрос
ща тему создам.
Добавлено через 17 минут
карочи ответ такой
процедура при активации строки "херит" видимость колонок созданных программно( не совсем так, но смысл ясен)
Добавлено через 1 минуту
ну карочи в нее попадает уже "похерено".
при открытии все норм.
при активации уже "похерено".
опций нету, подписок нету( да и какие подписки на событие формы).
где можно это переймать ?
Платформа 8.3.8.2442. Конфигурация УТП 1.2.45.1
При обновлении конфигурации с 1.2.44.2 на 1.2.45.1 возникала проблема, а именно - при выборе режима объединения формы "Взять из новой конфигурации поставщика" модуль формы обновляется корректно, а элементы формы смешиваются новые со старыми, как будто я выбрал вариант "Обновить с приоритетом основной конфигурации". Особо явно это заметно в РегистрСведений.ВоинскийУчет.ФормаЗаписи.
Также пытался после обновления релиза обновить форму через "Сравнить, объединить с конфигурацией из файла" взяв конфигурацию поставщика и выбрав режим объединения "Взять из файла" - результат тотже.
Я предполагаю, что проблема в платформе. Данная версия платформы установлена недавно, меньше месяца назад. В планах протестировать обновление на другой версии платформы.
Кто что подскажет?
Petre --> PetreДинамическое обновление пользуете? Допрацьовую:
- "Бухгалтерія для України 2.1";
- "Альфа-Авто: Автосалон+Автосервіс+Автозапчастини, українська версія". podcast --> podcast
У меня такое в платежных документах было, подвоило не которые реквизиты, мне кажется это происходит давно если форма снята с поддержки, в Реализации на вкладке доверенность уже давно двоит реквизиты. Vidocq05 --> Vidocq05
Да, регулярно. В этом может быть причина?
podcast @ Сегодня, 15:23 ,
Форма находится в режиме "Объект редактируется с сохранением поддержки".
А это у Вас было на разных версиях платформы?
Да, если форма не стояла на поддержки, то не которые реквизиты добавляла с таким же наименованием плюс цыфра на конце, динамически я не обновлял. Petre --> Petre
Бывало такое на разных платформах всякий раз при использовании демонического обновления. Принципиально перестал пользоваться данным функционалом. Допрацьовую:
- "Бухгалтерія для України 2.1";
- "Альфа-Авто: Автосалон+Автосервіс+Автозапчастини, українська версія". Vidocq05 --> Vidocq05
Поделюсь опытом. В чем была проблема, так до конца и не понял. Опишу шаги обновления подробно.
Конфигурация во многом доработанная. Все типовые объекты находится в режиме "Объект редактируется с сохранением поддержки" (не спрашивайте почему).
Обновлял сразу на 4 релиза на рабочей базе через Конфигурация-Поддержка-Обновить конфигурацию.
После каждого обновления я сохранял основную конфигурацию но не обновлял конфигурацию базы данных.
В процессе обновления я заметил, что некоторые типовые формы не корректно обновляются. После обновления на последний релиз я в большинстве случаем поправил формы вручную так как ошибки были не значительные. Но в форме регистра сведений смешало все конкретно (наименование реквизита старое, значение новое и т.д.). Пытался обновить через сравнение, объединение, как описывал выше - не помогло.
В общем плюнул я на этот регист )) (на нашем предприятии он не используется). Но осадок остался.
И наконец обновил конфигурацию базы данных. И похоже в этом и заключалась проблема. Нужно было после каждого обновления обновлять конфигурацию базы данных. Т.к. после этого (ну и после создания данной темы) я провел еще одно "Сравнить, объединить с конфигурацией из файла" взяв конфигурацию поставщика и выбрав режим объединения "Взять из файла". И все получилось, хотя до обновления конфигурации базы данных обновление не происходило.
Читайте также: