данные формы не могут быть локально зафиксированы
1с ошибка
Зарегистрирован: 25.12.2017
Пользователь #: 167,222
Сообщения: 54
2018-04-02_12-00-32.png | |
Описание: | |
Размер файла: | 37.64 KB |
Просмотрено: | 9844 раз(а) |
Житель sysadmins
Зарегистрирован: 26.01.2018
Пользователь #: 167,428
Сообщения: 6161
Зарегистрирован: 25.12.2017
Пользователь #: 167,222
Сообщения: 54
Зарегистрирован: 26.01.2018
Пользователь #: 167,428
Сообщения: 6161
Зарегистрирован: 25.12.2017
Пользователь #: 167,222
Сообщения: 54
Зарегистрирован: 26.01.2018
Пользователь #: 167,428
Сообщения: 6161
Зарегистрирован: 25.12.2017
Пользователь #: 167,222
Сообщения: 54
Зарегистрирован: 26.01.2018
Пользователь #: 167,428
Сообщения: 6161
Зарегистрирован: 25.12.2017
Пользователь #: 167,222
Сообщения: 54
Синхронизация данных формы с элементами управления
Форма предназначена для отображения и редактирования информации. Редактирование данных осуществляется с помощью разнообразных элементов управления, размещенных в форме. Некоторые элементы формы являются вспомогательными. Они предназначены для оформления и размещения других элементов управления. Другие элементы управления позволяют пользователю просматривать и изменять данные, хранящиеся в реквизитах формы. Для этого данные из реквизитов формы должны быть помещены в элементы управления, а после изменения обратно перемещены в реквизиты формы. 1С:Предприятие позволяет связать элементы управления с реквизитами формы или с реквизитами значений реквизитов формы. Если элемент управления связан с данными, то процесс передачи данных из реквизитов в элементы управления и обратно происходит автоматически. Система отслеживает изменение значений реквизитов и пересылает их в связанные элементы управления, и, наоборот, если пользователь изменил данные в элементе управления, данные будут автоматически перенесены в реквизит, с которым связан этот элемент управления. Так в форме редактирования элемента справочника обычно располагается реквизит типа СправочникОбъект. Элементы управления связываются с реквизитами этого объекта. При открытии формы, данные из реквизитов формы передаются в элементы управления связанные с ними. Таким образом, после открытия в элементах формы будут отражаться значения реквизитов объекта, и пользователь сможет увидеть текущее состояние выбранного элемента справочника. При изменении пользователем данных в элементе управления система автоматически перенесет их обратно в реквизиты объекта. Если после этого пользователь нажмет кнопку записи, то в информационную базу сохранится измененное состояние элемента справочника.
Но есть случаи, когда системный механизм связывания элементов управления с данными формы задействовать невозможно. Эти случаи делятся на две категории:
В первую категорию входят реквизиты объекта, которые невозможно редактировать с помощью стандартных элементов управления, или данные, которые не являются непосредственно реквизитом объекта, но должны быть с ним жестко синхронизированы, то есть одновременно с объектом считываться и записываться.
Например, у элемента справочника «Номенклатура» есть реквизит «Картинка» типа ХранилищеЗначения, в котором хранится фотография товара. Для отображения фотографии товара в форме нужно передать данные из реквизита объекта в элемент управления. Так как элемент управления «Картинка» не поддерживает связь с данными, то передачу данных нужно осуществлять программно. Кроме написания самого кода, пересылающего данные из реквизита в элемент управления, требуется определить все случаи, когда нужно это делать. Считывание и пересылку картинки в элемент управления достаточно делать при присваивании нового значения реквизиту формы, который содержит редактируемый объект, и при перечитывании редактируемого объекта. Если редактируемый объект является основным реквизитом формы, то для отслеживания этих случаев можно воспользоваться событием формы «При изменении данных». В том числе, оно вызывается перед открытием формы, когда ее основному реквизиту назначается редактируемое значение. Поэтому при открытии формы не нужно отдельно передавать данные в элемент управления «Картинка». Данное событие вызывается при любом изменении значения основного реквизита формы. Обработчик этого события может иметь следующий вид:
Помещение измененной картинки в реквизит справочника можно осуществлять при выборе новой картинки.
Во вторую категорию входят случаи, когда нужно в форме объекта редактировать логически связанные с ним данные. Примером может служить редактирование списка подчиненного справочника или регистра сведений в форме главного объекта. Например, справочник валют связан с курсом валют, хранящимся в регистре сведений. В форме элемента справочника валют для редактирования курсов размещается табличное поле, связанное со списком регистра сведений курсов валют. Для отображения курсов только по текущей валюте у списка нужно установить отбор и синхронизировать его при изменении ссылки валюты. Ссылка может изменяться в следующих случаях: присвоение нового значения реквизиту формы, хранящего значение объекта справочника валюты, и запись нового объекта справочника валюты. При записи нового объекта происходит установка значения его ссылки. Поэтому при записи нового объекта нужно установить новый отбор у связанных с ним списков. Для отслеживания всех этих случаев, нужно установить обработчик изменения данных на ссылку редактируемого объекта.
Сделать это можно в теле модуля формы следующим образом:
Сам обработчик может иметь следующий вид:
Это позволит синхронизировать список курсов валюты с редактируемым объектом валюты и отображать в списке данные, соответствующие выбранной валюте.
НЕКОТОРЫЕ ОСОБЕННОСТИ УПРАВЛЯЕМЫХ ФОРМ
Рассмотрены следующие отличительные особенности управляемых форм:
• Форма существует и на клиенте и на сервере.
Она осуществляет клиент-серверное взаимодействие
• Форма не работает с прикладными объектами
В форме используются специальные универсальные объекты ДанныеФормы
В управляемых формах на первый план выходит разделение контекста на клиентский и серверный. Для возможности работы по тонким каналам связи вся работа прикладных объектов теперь выполняется только на сервере. На клиенте отображается уже подготовленная на сервере форма, выполняется ввод данных и вызовы сервера для записи введенных данных и других необходимых действий
В модуле управляемой формы возможно объявление переменных, процедур и функций. Так как у правляемая форма существует одновременно и на сервере и на клиенте, то каждая процедура и функция и объявление переменной должны предваряться директивой компиляции, определяющей среду исполнения.
Допустимы следующие директивы:
&НаКлиенте — Означает, что метод выполняется на стороне клиента, а переменная существует все время жизни клиентской части формы. Клиентская процедура исполняется в среде клиентского приложения. Доступны: Свойства и методы глобального контекста, доступные на клиенте; экспортные переменные; процедуры и функции модуля управляемого приложения, общих модулей скомпилированных на клиенте, общих модулей скомпилированных на сервере, если у них установлено свойство «Вызов Сервера»; свойства и методы расширения формы, определяемого основным реквизитом; свойства и методы объекта встроенного языка УправляемаяФорма; реквизиты формы; локальный контекст модуля.
&НаСервере — Означает, что метод выполняется на стороне сервера, а переменная существует только во время выполнения серверного вызова, при каждом серверном вызове значение переменной сбрасывается. Для серверных методов допустимы вызовы серверных, серверных внеконтекстных и клиент-серверных внеконтекстных методов. Контекст так же образуется свойствами и методами глобального контекста, экспортными процедурами и функциями общих модулей скомпилированных на сервере, свойствами и методами расширения формы, определяемого основным реквизитом, свойствами и методами объекта встроенного языка УправляемаяФорма, реквизитами формы. Клиентские процедуры, функции и переменные недоступны.
&НаСервереБезКонтекста — опреде ляет серверную процедуру, исполняемую вне контекста формы. Переменные не могут предваряться такой директивой. Серверная процедура, исполняемая вне контекста формы, (внеконтекстная) исполняется в среде серверного приложения. В такой процедуре не доступен контекст формы (включая данные формы). Допустимыми являются вызовы только других внеконтекстных процедур. При вызове этих процедур не выполняется передача данных формы на сервер и обратно. Применение внеконтекстных процедур позволяет существенно уменьшить объем передаваемых данных при вызове серверной процедуры из среды клиентского приложения.
&НаКлиентеНаСервереБезКонтекста — используется, когда к процедуре необходимо обращаться как с клиента, так и с сервера. Означает, что метод исполняется как на клиенте, так и на сервере вне контекста формы. Переменные не могут предваряться такой директивой.
Таким образом, разработчик должен понимать, что он фактически работает с двумя контекстами исполнения: серверным и клиентским, и между ними происходит обмен данными
При этом нужно учитывать, что на клиенте поддерживается лишь ограниченный набор типов данных и интерфейсные функции. На клиенте не допускается непосредственная работа с базой данных, работа непосредственно с прикладными объектами, использование запросов, таблиц значений. Доступность описана в синтакс-помошнике и ее необходимо проверять.
При разработке необходимо заботиться об оптимизации клиент-серверного взаимодействия:
Еще одна важная особенность управляемой формы состоит в том, что в ней происходит лишь отображение объекта. Основным ее реквизитом является не сам объект, а данные формы, в которые он преобразуется.
Элементами данных формы могут быть
Поэтому, для управляемой формы напрямую свойства и методы объекта недоступны. Чтобы обратиться из формы к свойствам и методам объекта нужно сначала получить объект.
Во время разработки конфигурации важно помнить, что прикладные объекты доступны только на сервере, в то время как объектами данных форм можно пользоваться и на сервере, и на клиенте.
Базовый принцип программирования управляемой формы в 1С
Цель статьи – показать применение шаблонов Remote Facade и Data Transfer Object к структуризации кода, управляемой формы в среде 1С 8.2.
Введение
Начнем с небольшого описания понятия «управляемая форма» и связанных концепций платформы 1С. Знатоки платформы могут пропустить этот раздел.
Все дальнейшие рассуждения будут о правой части иллюстрации, о том, как структурировать код модуля и какие принципы позволят реализовать эффективное клиент-серверное взаимодействие.
Обозначим проблему
Прошло уже несколько лет как новая версия платформы 1С активно используется и выпущено множество решений (конфигураций) как фирмой 1С, так и ее многочисленными партнерами.
Сложилось ли за это время у разработчиков единое понимание принципов клиент-серверного взаимодействия при создании форм, и изменился ли подход к реализации программных модулей в новых архитектурных реалиях?
Рассмотрим структуру кода (модуль формы) в нескольких формах одной типовой конфигурации и попробуем найти закономерности.
Под структурой будем понимать секции кода (чаще всего это блоки комментариев) выделенные разработчиком для группировки методов и директивы компиляции этих методов.
Пример 1:
Зачем нужна структура кода?
Почему существующий стандарт разработки от фирмы 1С не помогает?
Шаблоны проектирования или мудрость поколений
Примеры шаблонов в платформе 1С
Прикладной программный интерфейс доступный разработчику при разработке управляемой формы, содержит много примеров данных принципов.
Например метод ОткрытьФорму(), типичный «огрубленный» интерфейс.
Сравните с принятым в v8.1 стилем.
Структурируем код
Обработка ошибок, возникающих при обмене данными в распределенной информационной базе
Общие ошибки, возникающие при работе с XML
Сообщение обмена данными является документом XML, поэтому имеет смысл описать возможные ошибки, которые могут возникнуть во время чтения/записи сообщений обмена данными при использовании средств чтения/записи данных XML, предоставляемых платформой «1С:Предприятие 8». При работе с данными в формате XML может возникать множество различных ситуаций, однако в данной статье будут рассмотрены только те, которые так или иначе имеют отношение к обмену данными в рамках распределенной информационной базы.
Значение URI пространства имен должно соответствовать рекомендации Namespaces in XML (см. http://www.w3.org/TR/REC-xml-names)
Производится попытка записи в XML значения, для типа которого не определена процедура записи в XML. Или производится попытка чтения из XML значения неизвестного типа или типа, для которого не определена процедура чтения из XML.
Ситуации, возникающие при обмене данными в рамках распределенной информационной базы
- данные формы коллекция в структуру
- данные формы структура 1с что это
Сообщение об ошибке | Описание ошибки |
Возможные пути исправления ошибки | |
Не установлен MS XML Core Services 4.0 | На компьютере не установлен Microsoft XML Core Services 4.0, используемый «1С:Предприятием 8» для работы с XML |
Установить Microsoft XML Core Services 4.0. При установке «1С:Предприятия 8» Microsoft XML Core Services 4.0 устанавливается автоматически | |
Ошибка разбора XML | Ошибка, возникающая при синтаксическом анализе данных XML в процессе чтения. Все ошибки, определенные в SAX2, трансформируются в данную ошибку, генерируемую платформой «1С:Предприятие 8» |
Проверить правильность оформления и синтаксис данных XML (см. http://www.w3.org/TR/REC-xml). | |
Ошибочный порядок записи XML | Методы записи содержимого документа XML вызываются в неправильном порядке. Например, запись атрибута вызывается после записи текста элемента. |
Выявить и исправить места некорректного порядка вызова методов | |
Текст XML содержит недопустимые символы | Записываемый текст XML содержит недопустимые символы. |
Текст XML должен соответствовать требованиям, изложенным в главе 2.2 рекомендации XML (см. http://www.w3.org/TR/REC-xml#charsets) | |
Недопустимое имя XML | Записываемое имя XML содержит недопустимые символы. |
Имя XML должно соответствовать требованиям, изложенным в главе 2.3 рекомендации XML (см. http://www.w3.org/TR/REC-xml#NT-Name) | |
Пустое значение URI допустимо только для пространства имен по умолчанию | Производится попытка записать соответствие пространства имен, в котором URI пространства имен, представленному пустой строкой, соответствует непустой префикс. |