Обратиться к значению свойства основного реквизита можно


С этим файлом связано 1 файл(ов). Среди них: 01.Общие механизмы, понятия и термины.docx.
Показать все связанные файлы


Подборка по базе: Титульный лист и ответ на задание 4.docx, практическая работа № 1 ответ.docx, Титульный лист и ответ на задание 2.docx, Конспект урока родного русского языка Можно ли об одном и том же, 2 курс 2 семестр 2023. Английский 93 балла 30 ответов.pdf, идв ответы (2).docx, Титульный лист и ответ на задание 1.docx, 10 класс геометрия контрольные задачи+ ответ перпендикулярность , катя мэимэо экзамен ответы.docx, Информационные технология в экономике (Тест с ответами^J Синерги


1.Почему на компьютере, на котором запущен сервер защиты не должно быть 100% загрузки?

Ответ:

—-

2. Можно ли устанавливать 2 сетевых ключа (например, два на 10 пользователей) на один компьютер?

Ответ:

ключи одной серии будут работать, если такая возможность была реализована разработчиком защищенного ПО. Если разработчиком данная возможность не была реализована, то ключи, относящиеся к одной серии, не будут работать совместно на одном компьютере, будет виден только один из них: либо ближний к порту (в случае с LPT-ключами), либо размещенный на порту с младшим адресом (в случае с USB ключами защиты программ HASP).

3.Что такое конфигурация? Что такое платформа?

Ответ:

Конфигурация – прикладное решение созданное с помощью конфигуратора и исполняемое платформой. Конфигурация состоит из объектов конфигурации, описанные при помощи средств визуального конструирования и при помощи свойств имеющих определенную связь между собой.

Платформа – это среда исполнения приложений 1С и набор средств для разработки приложений.

4. Какие варианты функционирования платформы существуют?

Ответ:

файловый и клиент-серверный.

5.Какие СУБД могут использоваться?

Ответ:

Microsoft SQL Server, PostgreSQL, IBM DB2, Oracle Database,файловый вариант самой 1С

6.Какие ОС могут использоваться при работе с 1С: Предприятие?

Ответ:

Windows OS, MacOS, Linux.

7.В чем отличие объектов конфигурации от объектов встроенного языка?

Ответ:

Объект конфигурации – это составная часть конфигурации, которая используется для создания прикладного решения, а при помощи объектов встроенного языка описывают методы и алгоритмы, исполняемых при наступлении событий.

8. В чем отличие строки фиксированной длины, от строки переменной длины (ведь в обоих случаях устанавливается максимальное количество символов)?

К строке переменной длины присваивается значение и размер переменной изменяется так, чтобы он соответствовал длине присвоенного строкового значения. Строка фиксированной длины — это строка постоянного размера, указанного при объявлении переменной.

9. Что получится (значение, тип результата), если к переменной содержащей значение типа «Дата» (состав даты «Дата») добавить значение имеющее тип «Число»? (На примере)

Ответ:

Произойдет сложение, то есть число прибавится к дате,а именно к секундам.

10. В чем отличие типа Null от Неопределенно ?

Null – это отсутствующие значения, а «Неопределенно» — это тип результата, значение.

11. Можно ли получить значение типа, относящегося к универсальным коллекциям без использования конструктора «Новый»?

Можно, при помощи конструктора, кроме табличных частей.

12. В чем разница между структурой и соответствием?

Ответ:

У соответствии в качестве ключа может выступать любое значение, а у структуры ключ может быть только строковым.

13. Каким образом осуществляется контроль типов (переменной одного типа нельзя присвоить значение другого типа)?

Ответ:

В 1С типизация мягкая, а это означает, что переменная одного типа через несколько строчек кода может беспрепятственно быть задана другим типом.

14. Где помимо модулей можно прописывать код на встроенном языке 1С:Предприятие?

Ответ:

В пользовательских полях при доработке отчётов.

15. В каких модулях отсутствует область определения переменных и основной текст модуля?

Ответ:

В общем модуле.

16. Если определить одну процедуру в модуле приложения, другую в общем модуле (обе с использованием ключевого слова «Экспорт»), то какова будет их видимость относительно друг друга?

Ответ:

Из процедуры в модуле приложения можно вызвать процедуру из общего модуля посредством вызова ее через «НаименованиеОбщегоМодуля.НаименованиеЭкспортнойПроцедуры»

17. В какой момент «работает» модуль сеанса?

Ответ:

При старте системы «1С: Предприятие» в момент загрузки конфигурации.

18. В чем смысл флага «Привилегированный» в свойствах общего модуля?

Ответ:

Предоставляются полные права доступа, что ускоряет выполненияе кода и позволяет прочесть или записать нужные данные.

19. Для чего нужны общие модули и модуль управляемого приложения?

Ответ:

В общих модулях хранятся процедуры и функции, которые вызываются из других модулей системы.

Модуль управляемого приложения выполняется при старте и окончании работы системы «1С: Предприятие» в режимах тонкого клиента и веб-клиента. В нем возможно объявление переменных, а также объявление и описание процедур и функций, которые будут доступны в любом модуле конфигурации.

20. Как обращаться к экспортным процедурам, функциям глобальных и не глобальных общих модулей?

Ответ:

В глобальных общих модулях вызов происходит из любого места конфигурации , обращаясь без названия модуля, но только при условии, что названия процедур и функций в этом модуле должны быть уникальными.

В не глобальных вызов экспортируемых процедур происходит через вызов самого модуля и процедуры из него.

21. В чем отличие обычного режима работы платформы от управляемого

Ответ:

в зависимости от вида запуска 1С (обычное или управляемое приложение) по умолчанию будет загружаться определенный интерфейс (обычные или управляемые формы);

управляемый интерфейс требует написания видоизмененного (по сравнению с обычным приложением) кода;

для управляемого приложения код должен быть разделен на клиентский и на серверный, что указывается с помощью соответствующих директив в модуле.

22. Каково назначение свойства «Режим совместимости» (свойство корневого объекта дерева объектов конфигурации)?

Ответ:

Режим совместимости – свойство управляет поведением механизмов, которые в версии «1С: Предприятие 8.2» изменено по сравнению с предыдущими версиями.

23. Какие виды клиентского приложения существуют?

Ответ:

толстый клиент ,тонкий клиент, веб-клиент ,мобильный клиент, конфигуратор.

Тесты на знание платформы:
1. Если реквизиту указать тип «Дата», то в нем может содержаться:

  1. Дата
  2. Время
  3. Дата+Время
  4. Дата или Дата+ Время
  5. Дата или Время или Дата+Время

2. Тип «Тип» относится к группе типов

  1. Примитивные
  2. Сложные
  3. Базовые

3. Реквизит относится:

  1. К общим объектам
  2. К подчиненным объектам
  3. К прикладным объектам

4.Критерий отбора относится:

  1. К общим объектам
  2. К подчиненным объектам
  3. К прикладным объектам

5. Если к реквизиту имеющему тип «дата» прибавить целое число, то …

  1. Это будет недопустимой (ошибочной) операцией
  2. Результатом операции будет дата, отличающаяся от исходной на количество дней равное добавляемому числу
  3. Результатом операции будет дата, отличающаяся от исходной на количество секунд равное добавляемому числу
  4. Результат зависит от значения свойства «Состав даты»

6. Список значений относится:

    1. К универсальным коллекциям значений
    2. К элементам управления формы
    3. К подчиненным объектам

7. Массив:

  1. Является самостоятельным типом данных
  2. Относится к универсальным коллекциям значений
  3. Верны оба высказывания

8. Выберите отсутствующий в системе тип данных:

  1. Составной тип
  2. Любая ссылка
  3. Неопределенный

9. В случае отсутствия данных в поле результата запроса находится значение типа:

  1. Неопределено
  2. Null
  3. Void

10. Типы значений Null и Неопределено являются:

  1. Различными типами
  2. Одним типом (разноязычные литералы)

11. Null относится:

  1. К прикладным типам
  2. К примитивным типам

12. Строка не относится:

  1. К прикладным типам
  2. К примитивным типам

13. Монопольный режим …

  1. Устанавливается пользователем при запуске системы
  2. Устанавливается программно
  3. Верны оба предыдущих высказывания
  4. Данное понятие в системе отсутствует

14. Как обратиться к первому элементу коллекции?

  1. Коллекция[0]
  2. Коллекция[1]
  3. Нет правильного ответа

15. Какую из ниже приведенных строк нельзя использовать в модуле внешнего соединения?

  1. ТЗ=Новый ТаблицаЗначений();
  2. Предупреждение(«Недостаточно товара!!!»);
  3. СпрОбъект=Справочники.Номенклатура.СоздатьЭлемент();

16. К свойству объекта можно обратиться через:

  1. Точку: Объект.ИмяСвойства
  2. Скобки: Объект[ИмяСвойства]
  3. Обоими способами

17. При определении процедур и функций …

  1. Описание функций должно идти выше описания процедур и основного текста модуля
  2. Описание вызываемых процедур и функций должно идти раньше, чем описание вызывающих
  3. Порядок следования описания процедур и функций значения не имеет

18. В общих модулях …

  1. Нельзя описывать переменные
  2. Нельзя описывать переменные, процедуры и функции без ключевого слова «Экспорт»
  3. Нет ограничений на описание переменных, процедур, функций

19. В модуле управляемого приложения …

  1. Нельзя описывать переменные
  2. Нельзя описывать процедуры и функции без ключевого слова «Экспорт»
  3. Нет ограничений на описание переменных, процедур, функций

20. Модуль набора записей существует у объектов вида:

  1. Справочники
  2. Планы видов характеристик
  3. Документы
  4. Отчеты, обработки
  5. Регистры

21. Модуль объекта существует у объектов вида:

  1. Планы видов характеристик
  2. Документы
  3. Отчеты, обработки
  4. Регистры
  5. У всех перечисленных объектов, кроме регистров

22. Модуль управляемого приложения рекомендуется использовать:

  1. Для определения предопределенных процедур «ПриНачалеРаботыСистемы» и т.п.
  2. Как место определения процедур и функций, используемых во всей конфигурации
  3. Верны оба утверждения

23. Подчиненный объект «Измерение» может быть у объектов вида:

  1. Регистры сведений
  2. Регистры накопления
  3. Последовательности
  4. У регистров сведений и накопления
  5. У всех перечисленных видов объектов

24. Табличные части могут быть у объектов вида:

  1. Справочник
  2. Документ
  3. Планы видов характеристик
  4. Отчеты, обработки
  5. У всех перечисленных видов объектов

25. Ключ может быть произвольного типа:

  1. У структуры
  2. У соответствия
  3. Ни у одного из вышеперечисленных

Практическая работа

В этом разделе рассматриваться основная практическая часть курса, связанная с созданием под Вашим руководством каких-либо объектов конфигурации, выполнении практических задач. В свою очередь (по изучаемым объектам) этот раздел можно разделить на несколько подразделов.

24. Для чего у подсистем используется флаг «Включать в командный интерфейс»?

Ответ:

отвечает за видимость подсистемы в пользовательском режиме 1С.

25. Есть ли ограничение на количество уровней подсистем влияющих на интерфейс?

Ответ:

Нет ограничений.

26. Каким образом можно определить основную форму констант?

Ответ:

У константы вызвать конструктор общих форм и создать форму константы с активированным свойством «Назначить форму основной»

27. Что означает: «основная форма какого-либо типа форм»?

Ответ:

Это означает, что используется при взаимодействии с объектом именно эта форма объекта. Например, при открытии какого либо документа, интерактивное взаимодействие с ним происходит через форму, у которой активировано свойство «Основная форма».

28. Как из формы констант программно получить значение константы?

29. В чем отличие права «Изменение» от «Редактирование»?
30. Что будет, если пользователь попытается открыть форму объекта, если к какому-либо реквизиту этого объекта (который присутствует на форме) у него нет доступа?

31. В чем разница между директивами «НаСервере» и «НаСервереБезКонтекста»?

Тесты по курсу:

26. Разработка конфигурации выполняется:

  1. Только для обычного режима
  2. Только для управляемого режима
  3. Для управляемого режима, но некоторые механизмы рассматриваются в обычном режиме

27. База данных создается:

  1. В файловом варианте
  2. В клиент-серверном варианте, при этом используется любая доступная СУБД (из тех, с которыми может работать 1С:Предприятие)
  3. В клиент-серверном варианте, при этом используется любая PostgresQL
  4. В клиент-серверном варианте, при этом используется любая MS SQL Server

28. Созданная форма констант содержит:

  1. Все определенные константы
  2. Не содержит константы, определенные с типом «Булево»
  3. Не содержит константу «Учет по сериям»
  4. Не содержит константу «Учет по складам»

Тесты на знание платформы:
29. Основной реквизит управляемой формы …

  1. Существует у форм любого типа
  2. Отсутствует у форм произвольного типа
  3. Отсутствует у форм отчетов и обработок
  4. Отсутствует у форм отчетов и обработок, общих форм

30. Основной форму констант можно выбрать (признак основной для управляемой формы) …

  1. Только при создании
  2. Установкой соответствующего свойства в свойствах формы
  3. Выбором нужной формы в свойствах объекта конфигурации

31. Обратиться к значению свойства основного реквизита можно:

  1. «Напрямую», по имени свойства основного реквизита
  2. Используя конструкцию «ИмяОсновногоРеквизита.ИмяСвойства»
  3. Верны все варианты
  4. Верны варианты 1,2

32. Для получения значения свойства реквизита ссылочного типа в управляемой форме необходимо:

  1. С клиентского обработчика события сделать серверный вызов используя директиву «НаСервере»
  2. С клиентского обработчика события сделать серверный вызов используя директиву «НаСервереБезКонтекста»
  3. Нет необходимости делать серверный вызов, значение свойства можно получить на стороне клиента

Основной реквизит формы

Реквизиты формы обеспечивают ее связь с данными. При этом один (и только один) из реквизитов может быть назначен основным; он не обязательно может быть того типа данных, к объекту которого мы рисуем форму. Но от типа данных основного реквизита будет зависеть поведение формы. Кроме изменения поведения формы, происходит изменение контекста модуля формы. Наряду с методами и свойствами формы, в нем становятся доступны методы и свойства объекта, являющегося значением основного реквизита. Важно, что формы типа «Произвольная форма» не имеют основного реквизита. В этом случае поведение формы определяется только настройками пользователя. Рассмотрим вопросы по основным реквизитам.

***

Вопрос 10.05 экзамена 1С:Профессионал по платформе. Для чего служит основной реквизит формы?

  1. Определяет источник данных для формы в целом
  2. Определяет стандартные возможности платформы для работы формы с данными
    типа, заданного у основного реквизита
  3. Для обеспечения возможности программного обращения к реквизитам объекта из
    локального контекста формы
  4. Обеспечивает визуализацию реквизитов объекта на диалоге формы
  5. Верны 2 и 3
  6. Верны 1 и 2

Правильный ответ шестой, см. выше.

***

Вопрос 10.06 экзамена 1С:Профессионал по платформе. Для чего нужны реквизиты формы?

  1. Для описания состава данных, которые отображаются, редактируются или хранятся
    в форме
  2. Для отображения и редактирования данных в форме
  3. Верны 1 и 2

Правильный ответ третий — и то, и другое.

***

Вопрос 10.07 экзамена 1С:Профессионал по платформе. Что бы произвольной управляемой форме назначить основной реквизит…

  1. форму нужно сделать основной, основной реквизит при этом определяется автоматически
  2. нужно в свойствах реквизита формы установить флажок «Основной реквизит»
  3. нужно войти в меню «Правка», пункт «Основной реквизит» и выбрать нужное значение
  4. нужно заполнить свойство «Данные» формы, выбрав нужный реквизит формы

Правильный ответ второй:

Основной реквизит выделяется жирным:

***

Вопрос 10.08 экзамена 1С:Профессионал по платформе. Что бы произвольной обычной форме назначить основной реквизит…

  1. форму нужно сделать основной, основной реквизит при этом определяется автоматически
  2. нужно в свойствах реквизита формы установить флажок «Основной реквизит»
  3. нужно войти в меню «Правка», пункт «Основной реквизит» и выбрать нужное значение
  4. нужно заполнить свойство «Данные» формы, выбрав нужный реквизит формы

Правильный ответ четвертый:

Основной реквизит выделяется жирным:

***

Вопрос 10.09 экзамена 1С:Профессионал по платформе. При наличии одного основного реквизита формы можно ли добавить
еще один основной реквизит?

  1. Это не возможно
  2. Можно посредством назначения соответствующего значения свойства реквизита
    формы
  3. Можно только программно, при обращении к объекту «Форма»
  4. Можно посредством добавления еще одного значения к соответствующему свойству формы

Правильный ответ первый, основной реквизит строго один, т.к. связь с объектом должна быть однозначна.

***

Вопрос 10.113 экзамена 1С:Профессионал по платформе. Какой из реквизитов формы, представленной на рисунке, является
основным?

  1. СписокКурсовВалют
  2. СправочникОбъект
  3. У форм справочников нет основного реквизита
  4. У форм справочников все реквизиты основные

Правильный ответ второй — тот, что жирный.

[Практика программирования] Управляемые формы 1С 8: как программно определить основной реквизит формы

Среди зарезервированных методов и функций 1С 8 на момент написания данной публикации (последний релиз платформы 8.3.20) до сих пор отсутствует код, который бы позволял получить или определить, какой из реквизитов управляемой формы является основным.

Основной реквизит формы в списке реквизитов выделяется жирным шрифтом. Не будем в этом тексте описывать всю суть относительно основного реквизита управляемой формы в 1С, достаточно обратиться к статье на эту тему: «Основной реквизит формы 1С 8».

1с 8 как программно узнать, найти, получить основной реквизит управляемой формы

Необходимость определять основной реквизит управляемой формы возникла в рамках прикладной задачи, которая выразилась в доработке по реализации механизма «печать по умолчанию» в формах документов и справочников, как это было в типовых конфигурациях, работающих в режиме обычного приложения. И, как показала практика, поиск основного реквизита формы возможен и в других прикладных задачах. Поэтому можно найти обсуждения по этому вопросу начиная с 2012 года, например в обсуждении на форуме программирования 1С «Можно ли программно узнать основной реквизит управляемой формы?». Из близких по сути вопроса функций подходит только «Форма.ПолучитьРеквизиты()», но она не является решением, т.к. она только возвращает список всех реквизитов формы, представленный в виде коллекции значений типа «Массив». Проблема отсутствия в коде предопределенной процедуры или функции языка программирования 1С сохраняется. Поэтому не остается ничего, как только с помощью дополнительного кода описать поиск основного реквизита. Исходник кода был найден на странице форума mista. Благодаря тому, что с помощью «ПолучитьРеквизиты()» можно получить список реквизитов формы, а каждый реквизит имеет свойства «Заголовок» типа «Строка», «Имя» типа «Строка», «Путь» типа «Строка», «Сохраняемые данные» типа «Булево», «Тип значения» типа «ОписаниеТипов», становится возможным с помощью кода, пример которого приведен ниже определить основной реквизит управляемой формы в 1С 8:

Реквизиты = Форма.ПолучитьРеквизиты();
Для Каждого Реквизит Из Реквизиты Цикл
      Если ТипЗнч(Форма[Реквизит.Имя]) = Тип(«ДанныеФормыСтруктура») ИЛИ 
               ТипЗнч(Форма[Реквизит.Имя]) = Тип(«ДинамическийСписок») Тогда
                     Возврат Реквизит.Имя;
      КонецЕсли;
КонецЦикла;

Решение базируется на том основании, что в зачастую в типовых решениях 1С 8 основным реквизитом формы является либо реквизит типа «ДанныеФормыСтруктура», либо «ДинамическийСписок». Конечно, в нетиповых решениях или даже в вручную сконфигурированных формах ситуация может быть другой и тогда нужно придумывать еще другой вариант поиска с помощью кода. Но это будет встречаться крайне редко. 
 

Оцените, оказалась ли эта публикация полезна для Вас?




© www.azhur-c.ru 2013-2020. Все права защищены. Использование текстов и изображений с данной страницы без письменного разрешения владельца запрещено. При использовании материалов с данной страницы обязательно указание ссылки на данную страницу.

10-05-2022

Журавлев А.С.
(Сайт azhur-c.ru)

Назад

Знакомство с управляемой формой 1С лучше всего начинать с реквизитов. Что такое реквизит управляемой формы?  По своей сути, это данные, которые привязаны именно к форме: они создаются, хранятся, отображаются (по возможности) и редактируются на форме. Вне контекста формы эти данные не могут существовать. Сам по себе реквизит не может отображаться на форме. Для этого служат элементы формы, которые связаны с реквизитами форм.

Научимся создавать простые реквизиты формы и размещать их на форме.

Управляемое приложение 1С 8.3

Для этого в конфигураторе 1С создадим пустую форму. Пусть это будет форма некой внешней обработки. В этой форме нас интересует закладка Реквизиты

Пустая управляемая форма

В этой закладке сейчас только один реквизит – основной. Он нас пока не интересует, работа с основным реквизитом эта тема отдельной статьи. Пока разберемся с простыми реквизитами.

Для того, чтобы добавить реквизит необходимо нажать на кнопку «Добавить реквизит» командной панели закладки «Реквизиты»

Добавить реквизит управляемой формы

После этого будет добавлен реквизит управляемой формы 1С с типом по умолчанию (строка) и справа откроется палитра свойств этого реквизита.

Палитра свойств реквизита управляемой формы

В этой палитре мы можем установить имя, заголовок, а так же тип реквизита управляемой формы.

Для тренировки создадим четыре реквизита с типом строка:  Фамилия, Имя, Отчество и ФИО. И один реквизит с типом дата: ДатаРождения.

Реквизиты на управляемой форме

Разместим реквизиты на форме. Сделать это просто: необходимо нужный реквизит мышкой «перетащить»  из закладки «Реквизиты» на закладку «Элементы»

Перетаскиваем реквизит в элементыПеретащим все реквизиты на формы, и с помощью кнопок «Вверх», «Вниз» удобно расположим их на форме.

Реквизиты на управляемой форме 1С

Сейчас мы сделали такую примитивную форму, на которой расположили реквизиты. После того, как мы «перетащили»  реквизит в элементы, то на форме был создан элемент формы. В нашем случае это поле формы. Если мы сейчас зайдем в палитру свойств поля ввода, то увидим, что он связан с реквизитом посредством  свойства ПутьКДанным.

Свойство ПутьКДанным элемента формы

Если нажать на кнопку «…» свойства ПутьКДанным, то у разработчика есть возможность поменять привязанный к этому элементу реквизит формы.

Изменяем свойство ПутьКДанным элемента формы

Сейчас научимся использовать реквизиты в программном коде. Из статьи, посвященной архитектуре управляемой формы 1С 8.3 Вы знаете, что выполнение кода на форме возможно под директивами &НаКлиенте &НаСервере и  &НаСервереБезКонтекста.  Доступ к реквизитам формы возможен только в процедурах и функциях, которые выполняются на &НаКлиенте и &НаСервере.

Для наглядности выполним небольшую задачу: создадим команду, при выполнении которой Фамилия, Имя, Отчество и дата Рождения будут складываться в ФИО + Дата рождения.

Создадим локальную команду формы. Для этого на закладке «Команды» в подзакладке «Команды формы» необходимо нажать на кнопку «Добавить»

Добавление команды управляемой формы 1С

После создания команды, справа откроется палитра свойств новой команды, где мы зададим её название.

Название команды управляемой формы 1С

Но команда – это выполнение некоторых действий на форме.  Чтобы действия осуществились необходимо создать обработчик команды. Для создания обработчика команды нужно нажать на кнопку «Лупа» свойства действия. После этого откроется окно выбора места размещения обработчика.

Выбор расположения обработчика команды управляемой формы

Мы выберем расположение НаКлиенте, поскольку для тех действий, которые мы хотим осуществить вполне хватит клиентского контекста.

После выбора места расположения обработчика, в модуле формы будет создана процедура под директивой &НаКлиенте, в которой мы напишем несложный код. В этом коде к реквизитам формы мы будем обращаться просто как к переменным. Мы можем это делать в клиентском и серверном контексте.

&НаКлиенте
Процедура СформироватьФИО(Команда)

    ФИО = Фамилия + " " +
               Имя + " " +
               Отчество + ", д.р. " +

    Формат(ДатаРождения, "ДЛФ=D");

КонецПроцедуры

В этом коде, я преобразовал дату в строку при помощи функции формат.

Обратите внимание, после создание процедуры в палитре свойств команды свойство Действие заполнилось названием нашей новой процедуры.

Свойство Действие команды управляемой формы

И последним шагом нам осталось нашу команду разместить на управляемой форме. Просто перетащим её мышкой в закладку Элементы

Перетаскиваем команду в закладки Элементы

При этом на форме появится кнопка.

Сохраним обработку и попробуем выполнить нашу команду.

Работа команды на управляемой форме

Как видите, к реквизитам формы в модуле формы можно обращаться напрямую, как к переменным, но только если процедура или функция выполняется под директивами &НаКлиенте и &НаСервере.

Управляемое приложение 1С 8.3

Подробно вопросы работы с управляемыми формами в частности и с управляемым приложением в целом рассмотрены в книге «Основы разработки в 1С: Такси. Разработка управляемого приложения за 12 шагов». Эта книга станет настоящим подспорьем для тех, кто только начал знакомится с разработкой управляемого приложения.

Книга «Основы разработки в 1С: Такси»

Книга «Основы разработки в 1С: Такси» отлично подойдёт тем, кто уже начал программировать и испытывает определенные сложности с этой темой и тем, кто уже давно программирует, но ни разу еще не работал с управляемыми формами 1С

  1. Без сложных технических терминов;
  2. Более 600 страниц практического материала;
  3. Каждый пример сопровождается рисунком (скриншот);
  4. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!

Промо-код на скидку в 15% — 48PVXHeYu

Изучайте основы конфигурирования в 1С и учитесь программировать в «1С: Предприятии» с помощью моих книг: «Программировать в 1С за 11 шагов» и «Основы разработки в 1С: Такси»

Книга «Программировать в 1С за 11 шагов»

Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»

  1. Книга написана понятным и простым языком — для новичка.
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Научитесь понимать архитектуру 1С;
  4. Станете писать код на языке 1С;
  5. Освоите основные приемы программирования;
  6. Закрепите полученные знания при помощи задачника;


Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму:

можно оплатить вручную:

Яндекс.Деньги — 410012882996301
Web Money — R955262494655

Вступайте в мои группы в соцсетях, и будьте в курсе всех новостей

Вконтакте: https://vk.com/1c_prosto
Фейсбуке: https://www.facebook.com/groups/922972144448119/
ОК: http://ok.ru/group/52970839015518
Твиттер: https://twitter.com/signum2009

Содержание:

1.    Реквизиты объекта и реквизиты формы в 1С

2.    Как получить значения из элементов формы 1С  

1.    Реквизиты объекта и реквизиты формы в 1С

В обычном приложении у элемента формы 1С 8.3 было свойство «Значение», доступное как для чтения, так и для записи. Какой аналог в управляемом приложении?

Элементы формы 1С 8.3 могут содержать реквизиты двух видов: реквизиты объекта 1С и реквизиты формы.

Красным помечен реквизит объекта 1С Контрагент, а зеленым – реквизит формы в 1С.

Интерактивно выберем эти элементы в пользовательском режиме 1С и попробуем прочитать их «программно» кнопкой «Прочитать».

Если читать значения реквизитов в клиентской процедуре, то код для 1С Предприятия будет следующий:


Все бы хорошо: мы получили на клиенте значения реквизитов объекта 1С и формы, но – не значения элементов формы 1С. На клиенте значение элементов формы 1С получить нельзя. 

2.    Как получить значения из элементов формы 1С

Чтобы получить значения из элементов формы 1С, нам потребуется серверный вызов:

Именно на сервере у элемента формы 1С 8.3 становится доступно свойство ПутьКДанным, по которому его можно извлечь либо из Объекта, который имеет тип ДанныеФормыСтруктура:

…либо из Формы, которая имеет тип ФормаКлиентскогоПриложения:


Форма и ее элементы не видны на сервере без контекста. То есть код для 1С:Предприятия выдаст множество ошибок.

Также Форму нельзя передать как параметр в процедуру и функцию на сервер или в общий модуль.


            Еще хочется разобрать момент, когда нам возможно увидеть состояние различающихся значений в элементе форме 1С и в объекте. Это возможно в событии элемента ОбработкаВыбора.
Например, при значении поля Контрагент — Ассоль, мы выбрали контрагента Бакалея:


Новое значение доступно как параметр процедуры ВыбранноеЗначение.


Система дает шанс что-то сделать в этой ситуации.

Специалист компании ООО «Кодерлайн»

Добрыгин Михаил

 Как получить доступ к реквизитам формы?

Если реквизит объекта «вытащен» на форму, то реквизит формы можно получить через объект ЭлементыФормы, который содержит коллекцию элементов формы, сканируя ее в цикле:

ДокСсылка = СсылкаНаДокумент(ТипДокумента, НомерДок);
ДокОбъект = ДокСсылка.ПолучитьОбъект();
 
ФормаОбъекта = ДокОбъект.ПолучитьФорму();
Для Каждого Элемент Из ФормаОбъекта.ЭлементыФормы Цикл
        Сообщить(Элемент);
КонецЦикла;     
 

Этот цикл позволяет просмотреть имена а так же типы всех реквизитов формы, в том числе такие реквизиты как надписи, командные панели и тд.

Реквизиты формы могут быть различных типов. Поставив фильтр в виде типа реквизита мы можем просмотреть реквизиты определенного типа.

Если реквизит формы имеет тип «ТабличноеПоле», то можно такой элемент просканировать во вложенном цикле и узнать имена колонок таблицы:

 
Для Каждого Элемент Из ФормаОбъекта.ЭлементыФормы Цикл
        Сообщить(Элемент.Имя);
        Если Тип(Элемент) = Тип("ТабличноеПоле") Тогда
                Сообщить(" Это табличное поле! "  + Элемент.Имя );
                Для Каждого Колонка Из Элемент.Колонки Цикл
                        ИмяКолонки = Колонка.Имя;
                        Сообщить(ИмяКолонки);
                КонецЦикла;
        КонецЕсли;      
КонецЦикла;     
 

Как получить значение отдельного реквизита формы?

Чаще требуется получать не массив реквизитов формы,  а значение отдельных конкретных реквизитов формы. Например реквизиты «Шапки» или «Подвала» формы документа.

Пример:

 
ФормаОбъекта = ДокОбъект.ПолучитьФорму("ФормаДокумента");
Поставщик = ФормаОбъекта.ЭлементыФормы.Поставщик;
Поставщик = ФормаОбъекта.ЭлементыФормы.Получатель;
Сообщить(ФормаОбъекта.ЭлементыФормы.ТаблПоле.Колонки.Количество());
 

Реквизиты шапки могут иметь различные типы: Дата, СправочникСсылка, ЧекБокс, элемент раскрывающегося списка и др.

Как получить значение элементов табличной части формы?

Доступ к табличной части формы через объект

Доступ к табличной части формы (например: Товары) можно получить через объект:

 
  ДокОбъект = Док.ПолучитьОбъект(); //здесь Док - ссылка на объект
  //просканируем построчно таб часть документа
  Для Каждого Стр из ДокОбъект.Товары Цикл
      Номенклатура = Стр.Номенклатура;
      Стр.Коэффициент = 1;
  КонецЦикла;
 

Здесь ДокОбъект.Товары — это табличная часть «Товары» объекта. Далее в цикле табличная часть построчно сканируется!
В каждой итерации цикла можно получить доступ к любому полю строки указав через точку имя этого поля:

      Номенклатура = Стр.Номенклатура;

Доступ к табличной части формы через ЭлементыФормы

Табличная часть объекта и табличная часть формы объекта — это не одно и то же!

Для того, чтобы код работал правильно, надо чтобы колонка формы табчасти объекта в свойстве данные ссылалась на реквизит табличной части объекта. Этим определяется тип колонки таб части формы.

То есть должна быть установлена связь между реквизитом табчасти объекта и реквизитом табчасти формы. Форм у объекта метаданных может быть много мы знаем. Табличную часть формы объекта можно получить через объект ЭлементыФормы:

Объект ЭлементыФормы используется для доступа к элементам управления, расположенным на форме, в частности к таб части документа.

 
        ДокСсылка = СсылкаНаДокумент(ТипДокумента, НомерДок);
        ДокОбъект = ДокСсылка.ПолучитьОбъект();
                                
        ФормаОбъекта = ДокОбъект.ПолучитьФорму();
        Для Каждого Элемент Из ФормаОбъекта.ЭлементыФормы Цикл
                Если Тип(Элемент) = Тип("ТабличноеПоле") Тогда //элемент формы - табличное поле
                                                        
                        Если Элемент.Имя = "Товары" Тогда
                                Сообщить("Это табличное поле!! "  + Элемент.Имя );
                                
                                //ТабПоле = ФормаОбъекта.ЭлементыФормы.Товары.Значение;
                                ТабПоле = Элемент.Значение;
                                Колво = ТабПоле.Количество();
                                Сообщить("Количество строк: " + Колво); 
                                
                                Для Каждого ТекущаяСтрока Из ТабПоле Цикл
                                        
                                        Имя = ТекущаяСтрока.Номенклатура;
                                        Сообщить(Имя); 
                
                                КонецЦикла;                             
                                
                        КонецЕсли;      
                                                        
                КонецЕсли;                                      
        КонецЦикла;  
 

Результат для документа Авансовый отчет:

Это табличное поле!! Товары
Количество строк: 4
Женские ботфорты коричневые
Ботинки женские демисезонные
Ботинки женские натуральная кожа
Женские босоножки       

Если надо получить значение всех колонок всех строк, то организуем дважды вложенный цикл:
Во внешнем цикле сканируются строки, во внутреннем — колонки:

 
        ДокСсылка = СсылкаНаДокумент(ТипДокумента, НомерДок);
        ДокОбъект = ДокСсылка.ПолучитьОбъект();
                                
        ФормаОбъекта = ДокОбъект.ПолучитьФорму("ФормаДокумента");
        Для Каждого Элемент Из ФормаОбъекта.ЭлементыФормы Цикл
                Если Тип(Элемент) = Тип("ТабличноеПоле") Тогда
                                                        
                        Если Элемент.Имя = "ВыданныеАвансы" Тогда //таб часть объекта
                                Сообщить(" Это табличное поле!! "  + Элемент.Имя );
                                
                                ТабПоле = Элемент.Значение;
                                Индекс = 0;
                                Для Каждого ТекущаяСтрока Из ТабПоле Цикл
                                        
                                        Сообщить("=======================");
                                        Для Каждого Колонка Из Элемент.Колонки Цикл
                                                
                                                ИмяКолонки = Строка(Колонка.Имя);
                                                Сообщить(ИмяКолонки);
                                                Имя = ТекущаяСтрока[ИмяКолонки];//сработает только если есть такое поле таб части объекта
                                                Сообщить("=== " + Имя); 
                                                
                                        КонецЦикла;
                                        
                                        Индекс = Индекс + 1;
                                        Если Индекс > 0 Тогда break КонецЕсли; //только первая строка
                                        
                                        
                                КонецЦикла;                             
                                
                                                        
                        КонецЕсли;      
                                                        
                КонецЕсли;                                      
        КонецЦикла;    
 

Результат для документа Авансовый отчет:

Это табличное поле!! ВыданныеАвансы
=======================
НомерСтроки 1
ДокументАванса Расходный кассовый ордер ТК000000004 от 15.02.2007 19:24:03
СуммаДокументаАванса 300
ВалютаДокументаАванса USD
Выдано 300
Сумма 174

 Такое двойное сканирование удобно использовать для быстрой проверки того, что все колонки таб части формы имеют связь с реквизитами таб части объекта. Если такой связи у какой-либо колонки нет, система сгенерирует ошибку.

объект
прикладного решения может использоваться для выполнения некоторых стандартных действий. Например, для любого справочника может потребоваться отображать список
его элементов, отображать отдельные элементы справочника, отображать группу справочника, выбирать элементы и группы элементов из справочника. Для любого документа список
таких действий будет гораздо меньше: просмотр списка документов, выбор из списка документов и просмотр отдельного документа.

Чтобы обеспечить выполнение таких стандартных действий с данными объектов прикладного решения, для каждого из них существует набор основных форм, которые будут использоваться при выполнении соответствующих действий. Основной может быть назначена любая из форм, подчиненных этому объекту. Например, у справочника Клиенты могут существовать следующие основные формы:

Важной особенностью системы 1С:Предприятие 8.0 является механизм форм по
умолчанию. Этот механизм освобождает разработчика от необходимости создания всех возможных форм для каждого из объектов прикладного решения. Разработчику достаточно создать новый объект
прикладного решения, а система сама сгенерирует в нужные моменты работы пользователя необходимые формы по
умолчанию для отображения информации, содержащейся в этом объекте. Таким образом, разработчику нужно создавать собственные формы объектов прикладного решения лишь в том случае, если они должны иметь отличия (другой дизайн
или специфическое поведение) от форм, генерируемых системой по
умолчанию.

Основной реквизит формы

Принадлежность формы к тому или иному объекту конфигурации никоим образом не определяет состав данных, которые форма будет отображать. Например, можно создать общую форму, которая не будет подчинена ни одному из объектов конфигурации, но которая, в зависимости от содержимого, будет либо отображать список
справочника, либо позволять редактировать документ. Однако такую форму уже нельзя будет назначить основной для выполнения определенных действий.

Форма сама по
себе и ее элементы управления
обособлены от объектов конфигурации. Для того, чтобы форма отображала какие — либо данные, необходимо задать связь
самой формы и большинства из ее элементов управления с данными. При использовании конструктора форм, конфигуратор
создает такие связи автоматически. Если разработчик создает форму вручную — он может определить эти связи путем задания свойств формы и элементов управления. В любом случае, эти связи могут быть изменены средствами встроенного языка в процессе выполнения программы.

Связь
формы и элементов управления с данными осуществляется при помощи реквизитов формы.

Возможность связать форму и элементы управления
с различными данными является причиной того, что у формы и у элементов управления существует несколько расширений. Расширение представляет собой набор дополнительных свойств, методов и событий, появляющихся у объекта. Наличие того или иного расширения определяется либо типом данных, которые отображает

Формы
в 1С:Предприятии предназначены для отображения и редактирования информации, содержащейся в базе данных. Формы могут принадлежать конкретным объектам конфигурации или существовать отдельно от них и использоваться всем прикладным решением в целом.

Например, справочник Номенклатура
может иметь несколько форм, которые будут использоваться для определенных целей — редактирования элемента справочника, отображения списка и т.д.:

Наряду с этим, могут существовать общие формы, не принадлежащие конкретным объектам конфигурации — общие формы.

Основные формы

Каждый объект конфигурации может использоваться для выполнения некоторых стандартных действий. Например, для любого справочника может потребоваться отображать список его элементов, отображать отдельные элементы справочника, отображать группу справочника, выбирать элементы и группы элементов из справочника. Для любого документа список таких действий будет гораздо меньше: просмотр списка документов, выбор из списка документов и просмотр отдельного документа.

Чтобы обеспечить выполнение таких стандартных действий с данными объектов прикладного решения, для каждого из них существует набор основных форм, которые будут использоваться при выполнении соответствующих действий. Основной может быть назначена любая из форм, подчиненных этому объекту. Например, у справочника Номенклатура
могут существовать следующие основные формы:

А у документа Поступление товаров и услуг
состав основных форм будет уже другим:

Таким образом, если пользователь захочет посмотреть список справочника Номенклатура
или список документов Поступление товаров и услуг
, система откроет соответствующую форму, назначенную в качестве формы списка для этих объектов.

Автогенерируемые формы

Важной особенностью системы 1С:Предприятие 8 является механизм автогенерируемых форм. Этот механизм освобождает разработчика от необходимости создания всех возможных форм для каждого из объектов конфигурации. Разработчику достаточно добавить новый объект конфигурации, а система сама сгенерирует в нужные моменты работы пользователя необходимые формы для отображения информации, содержащейся в этом объекте.

Таким образом, разработчику нужно создавать собственные формы объектов прикладного решения лишь в том случае, если они должны иметь отличия (другой дизайн или специфическое поведение) от форм, автоматически генерируемых системой.

Связь формы с данными

Принадлежность формы тому или иному объекту конфигурации не определяет состав данных, которые отображаются в форме. То, что форма принадлежит, например, справочнику Номенклатура
, позволяет назначить ее одной из основных форм для этого справочника, но никак не определяет, какие же именно данные будет отображать эта форма, и каково будет ее поведение.

Для того чтобы связать форму с данными, используются реквизиты формы, в которых указывается перечень данных, отображаемых формой. Все формы, сами по себе, имеют одинаковое поведение, независимо от того, какие данные они отображают. Однако один из реквизитов формы может быть назначен для нее основным (он выделяется жирным шрифтом), и в этом случае стандартное поведение формы и ее свойства будут дополнены в зависимости от того, какой тип имеет основной реквизит формы:

Например, если в качестве основного реквизита формы будет назначен документ Поступление товаров и услуг
, то при закрытии формы система будет запрашивать подтверждение записи и проведения этого документа. Если же основным реквизитом формы назначить, скажем, справочник Номенклатура
, то подобного запроса подтверждения при закрытии формы возникать не будет.

Структура формы

Основная особенность форм заключается в том, что они не нарисованы разработчиком детально, «по пикселям». Форма в конфигурации представляет собой логическое описание состава формы. А конкретное размещение элементов выполняется системой автоматически при отображении формы.

Отображаемая часть формы (видимая пользователю) описывается как дерево, включающее элементы формы.

Элементы могут представлять собой поля ввода, флажки, переключатели, кнопки и т. д. Кроме того, элемент может быть группой, включающей другие элементы. Группа может представляться как панель с рамкой, панель со страницами (закладками), собственно страница, командная панель. Помимо этого элемент может представлять собой таблицу, которая тоже включает элементы (колонки). Структура элементов описывает то, как будет выглядеть форма.

Вся функциональность формы описывается в виде реквизитов и команд. Реквизиты – это данные, с которыми работает форма, а команды – выполняемые действия. Таким образом, разработчик в редакторе формы должен включить в форму необходимые реквизиты и команды, создать отображающие их элементы формы и, если необходимо, скомпоновать элементы в группы.

На основе этого логического описания система автоматически формирует внешний вид формы для отображения пользователю. При этом системой учитываются различные свойства отображаемых данных (например, тип), чтобы максимально удобно для пользователя расположить элементы формы.

Разработчик может влиять на расположение элементов различными установками. Он может определять порядок элементов, указывать желаемую ширину и высоту. Однако это является только некоторой дополнительной информацией, помогающей системе отобразить форму.

В формах разработчик может использовать не только команды самой формы, но и глобальные команды, используемые в командном интерфейсе всей конфигурации. Кроме того, реализована возможность создания параметризуемых команд, которые будут открывать другие формы с учетом конкретных данных текущей формы. Например, это может быть вызов отчета по остаткам на том складе, который выбран сейчас в форме расходной накладной.

Ниже перечислены основные объекты 1С, которые используются при работе с управляемыми формами. Даны краткие примеры кода, демонстрирующие традиционное использование данных объектов при написании конфигураций 1С.

ЭтаФорма

Используется в модуле формы, в процедурах
&НаКлиенте
и
&НаСервере
.

Позволяет обращаться и к элементам формы и к реквизитам.

Обращение к элементу формы происходит через объект
Элементы
и выглядит так:

ЭтаФорма.Элементы.НомерВерсии.Заголовок = «v.»+ВерсияПрограммы;

Обращение к реквизиту, существующему на форме, происходит так:

ЭтаФорма.ТекстОбъявления=»Здравствуйте, товарищи!»;

Упрощенное обращение к элементам формы и реквизитам

В модуле формы, в принципе, можно не указывать ключевое слово
ЭтаФорма
. Можно обращаться к элементам формы и к реквизитам упрощенно:

// Элемент формы

Элементы.НомерВерсии.Заголовок = «v.»+ВерсияПрограммы;

// Реквизит формы

ТекстОбъявления=»Здравствуйте, товарищи!»;

Особенности получения реквизитов форм (важно!)

Если реквизит формы имеет простой тип —
Строка
,
Число
,
Дата
… то получить (установить) значение реквизита можно просто по имени:

Текст=НаименованиеТовара; // Наименование товара — это реквизит формы

Однако, таким образом невозможно получить реквизиты «сложного» типа —
ТаблицаЗначений
,
ДеревоЗначений
. При попытке получить реквизит с таким типом по наименованию, будет возвращен объект типа
ДанныеФормыКоллекция
.

Чтобы получить значение реквизита со «сложным» типом, нужно воспользоваться функцией
РеквизитФормыВЗначение()
:

ТекущаяТаблица=РеквизитФормыВЗначение(«ВыбранныеОбъектыСтроительства»);

Для установки значения «сложного» реквизита, можно воспользоваться функцией
ЗначениеВРеквизитФормы(<Значение>, <ИмяРеквизита>)
, оба параметра обязательны.

Функции
РеквизитФормыВЗначение()
и
ЗначениеВРеквизитФормы()
доступны только на Сервере.

Объект

Строго говоря, такого ключевого слова в пределах формы нет. Просто, когда создается форма, например, форма элемента, 1С автоматически создает на форме реквизит с именем
Объект
. Через данный реквизит доступны свойства текущего объекта, который редактируется на форме.

или, более полная запись:

ЭтотОбъект

Содержит сам объект. Предназначено для получения объекта в модуле объекта или модуле формы.

Использование: Только чтение.

Доступность: Сервер, толстый клиент, внешнее соединение.

Реквизиты формы

Набор реквизитов формы описывает состав данных, которые отображаются, редактируются или хранятся в форме. При этом реквизиты формы сами по себе не обеспечивают возможности отображения и редактирования данных. Для отображения и редактирования служат элементы формы (смотрите раздел «Элементы формы» данной главы), связанные с реквизитами формы. Совокупность всех реквизитов формы будем называть данными формы.

Важно!
Необходимо помнить, что, в отличие от обычных форм, все данные управляемой формы должны быть описаны в виде реквизитов. Не допускается использование переменных модуля формы в качестве источников данных для элементов формы.

Имеется возможность назначить Основной реквизит формы
, т. е. реквизит, который будет определять стандартную функциональность формы (расширение формы). Следует помнить, что основной реквизит у формы может быть только один.

Расширение формы
– это дополнительные свойства, методы и параметры формы объекта УправляемаяФорма, характерные для объекта, являющегося основным элементом формы.

В процессе разработки формы можно явно задать возможность просмотра и редактирования конкретных реквизитов формы, в разрезе ролей, с помощью свойств Просмотр и Редактирование (подробнее смотрите раздел «Ролевая настройка формы» главы «Редакторы»). Кроме того, доступность того или иного реквизита в самой форме можно настраивать с помощью функциональных опций (подробнее о функциональных опциях можно посмотреть в главе «Управление интерфейсом конфигурации»).

Свойство реквизита формы Сохраняемые данные
является признаком того, что интерактивное изменение реквизита будет приводить к попытке блокировки данных формы для редактирования, а также к автоматической установке признака модифицированности формы.

Типы данных, доступные в управляемой форме

Управляемая форма отличается от обычной формы также и типами данных, с которыми она работает. Если обычная форма работает с большинством типов, которые предоставляет 1С:Предприятие (в том числе и вида СправочникОбъект, ДокументОбъект и т. д.), то в управляемой форме можно выделить следующие категории типов:

  • типы, которые непосредственно используются в форме – это те типы, которые существуют на стороне тонкого и Веб-клиента (например, Число, СправочникСсылка.Товары, ГрафическаяСхема, ТабличныйДокумент);
  • типы, которые будут преобразованы в специальные типы данных – типы данных управляемой формы. Такие типы отображаются в списке реквизитов формы в круглых скобках, например (СправочникОбъект.Товары);
  • динамический список (подробнее см. раздел «Динамический список» данной главы).

Преобразование прикладных объектов в данные формы

Некоторые прикладные типы (такие как СправочникОбъект и т. д.) не существуют на стороне тонкого и Веб-клиентов (подробнее см. главу «Концепция управляемого приложения»). Поэтому для представления в форме таких прикладных типов в платформе введены специальные типы данных, предназначенные для работы в управляемых формах. Эта особенность управляемого приложения обуславливает необходимость выполнять преобразование прикладных объектов в данные формы (и обратно).

Используются следующие типы данных:

  • ДанныеФормыСтруктура – содержит набор свойств произвольного типа. Свойствами могут быть другие структуры, коллекции или структуры с коллекциями. Таким типом представляется, например, в форме СправочникОбъект.
  • ДанныеФормыКоллекция – это список типизированных значений, похожий на массив. Доступ к элементу коллекции осуществляется по индексу или по идентификатору. Доступ по идентификатору может отсутствовать в некоторых случаях. Это обусловлено типом прикладного объекта, который представлен этой коллекцией. Идентификатором может быть любое целое число. Таким типом представляется, например, в форме табличная часть.
  • ДанныеФормыСтруктураСКоллекцией – это объект, который представлен в виде структуры и коллекции одновременно. С ним можно обращаться как с любой из этих сущностей. Таким типом представляется, например, в форме набор записей.
  • ДанныеФормыДерево – объект предназначен для хранения иерархических данных.

Прикладной объект представлен либо одним, либо несколькими элементами данных формы. В общем виде иерархия и состав данных формы зависят от сложности и взаимосвязи прикладных объектов управляемой формы.

Например, документ, содержащий табличную часть, будет представлен объектом типа ДанныеФормыСтруктура (собственно документ), которому подчинен объект типа ДанныеФормыКоллекция (табличная часть документа).

Важно!
Во время разработки конфигурации важно помнить, что прикладные объекты доступны только на сервере, в то время как объектами данных форм можно пользоваться и на сервере, и на клиенте.

Передача данных между клиентской и серверной частями управляемой формы

Фактически можно сказать, что данные формы – это унифицированное представление данных различных прикладных объектов, с которыми форма работает единообразно и которые присутствуют и на сервере, и на клиенте. То есть форма содержит некоторую «проекцию» данных прикладных объектов в виде своих собственных типов данных и выполняет преобразование между ними при необходимости. Однако в случае если разработчик конфигурации реализует свой алгоритм обработки данных, то преобразование данных (из специализированных типов в прикладные и обратно) он должен выполнять самостоятельно.

При редактировании реквизитов формы в специализированном редакторе (подробнее см. раздел «Реквизиты формы» главы «Редакторы») имеется возможность влиять на передачу данных между клиентом и сервером во время работы формы. Для этого служит колонка редактора реквизитов Использовать всегда
. Действие этого свойства различается для трех типов реквизитов:

  • Для реквизита, подчиненного динамическому списку (колонке динамического списка):
    • свойство включено – реквизит всегда считывается из базы данных и включается в данные формы;
    • свойство выключено – реквизит считывается из базы данных и включается в данные формы только тогда, когда есть видимый в данный момент элемент формы, связанный с реквизитом или его подчиненным реквизитом.
  • Для реквизита, подчиненного коллекции движений:
    • свойство включено – движения документа считываются из базы данных и будут присутствовать в данных формы;
    • свойство выключено – движения документа не будут считываться из базы данных и не попадут в данные формы (если нет элемента формы, ссылающегося на движения документа).
  • Остальные реквизиты формы:
    • свойство включено – реквизит будет присутствовать в данных формы вне зависимости от того, есть или нет хоть один элемент формы, который связан с реквизитом или его подчиненным реквизитом;
    • свойство выключено – реквизит будет присутствовать в данных формы только в том случае, если есть элемент формы, связанный с реквизитом или его подчиненным реквизитом. В отличие от реквизитов динамического списка, здесь не играет роли видимость элемента, связанного с реквизитом.

Примечание. Следует помнить, что свойство, установленное у родительского реквизита, действует на все подчиненные реквизиты. Например, если свойство Использовать всегда снято у табличной части документа, то система считает, что это свойство снято и у всех подчиненных реквизитов (несмотря на фактическое состояние свойства).

Методы для преобразования данных прикладных объектов в данные формы

Для конвертирования прикладных объектов в данные формы и обратно существует набор глобальных методов:

  • ЗначениеВДанныеФормы(),
  • ДанныеФормыВЗначение(),
  • КопироватьДанныеФормы().

Важно!
Методы, работающие с прикладными объектами, доступны только в серверных процедурах. Метод для копирования значений между данными формы доступен на сервере и на клиенте, так как не требует прикладных объектов в качестве параметров.

Во время конвертирования данных формы в прикладной объект нужно учитывать их совместимость.

  • ЗначениеВДанныеФормы() – преобразует объект прикладного типа в данные формы;
  • ДанныеФормыВЗначение() – преобразует данные формы в объект прикладного типа;
  • КопироватьДанныеФормы() – производит копирование данных формы, обладающих совместимой структурой. Возвращает значение Истина, если копирование произведено, или Ложь, если структура объектов несовместима.

Примечание. При выполнении стандартных действий (открытие формы, выполнение стандартной команды Записать и т. д.) формы с основным реквизитом, преобразование выполняется автоматически.

Приведем пример, как использовать преобразование данных в собственных алгоритмах.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

ОбъектТовар = Справочники.Товары.НайтиПоНаименованию(«Кофейник»).ПолучитьОбъект();
ЗначениеВДанныеФормы(ОбъектТовар, Объект);

КонецПроцедуры

&НаКлиенте
Процедура Записать()

ЗаписатьНаСервере();

КонецПроцедуры

&НаСервере
Процедура ЗаписатьНаСервере()

ОбъектТовар = ДанныеФормыВЗначение(Объект, Тип(«СправочникОбъект.Товары»));
ОбъектТовар.Записать();

КонецПроцедуры

Также у объекта УправляемаяФорма существуют методы, доступные на сервере:

  • ЗначениеВРеквизитФормы() – выполняет преобразование объекта прикладного типа в заданный реквизит формы.
  • РеквизитФормыВЗначение() – преобразует реквизит данных формы в объект прикладного типа.

Использование данных методов обычно удобнее, так как они, имеют, например, информацию о типе реквизита формы. Кроме того, метод РеквизитФормыВЗначение() выполняет установку соответствия данных формы и объекта, которая используется при формировании сообщений. Подробнее об этом можно прочитать в главе «Сервисные возможности навигации».

Приведем пример использования этих методов.

&НаСервере
Процедура ПересчитатьНаСервере()

// Преобразует реквизит Объект в прикладной объект.
Документ = РеквизитФормыВЗначение(«Объект»);
// Выполняет пересчет методом, определенным в модуле документа.
Документ.Пересчитать();
// Преобразует прикладной объект обратно в реквизит.
ЗначениеВРеквизитФормы(Документ, «Объект»);

КонецПроцедуры

Программный интерфейс

ДанныеФормыДерево (FormDataTree)

  • НайтиПоИдентификатору (FindById)
  • ПолучитьЭлементы (GetItems)

Описание:

Предназначен для моделирования дерева в данных управляемой формы.

Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту определяется в пространстве имен. Имя типа XDTO:

ПолучитьЭлементы (GetItems)

Синтаксис:

ПолучитьЭлементы()

Возвращаемое значение:

Тип: ДанныеФормыКоллекцияЭлементовДерева.

Описание:

Получает коллекцию элементов дерева верхнего уровня.

Доступность: клиент, сервер, тонкий клиент, веб-клиент.

НайтиПоИдентификатору (FindById)

Синтаксис:

НайтиПоИдентификатору(<Идентификатор>)

Параметры:

<Идентификатор> (обязательный)

Тип: Число. Идентификатор элемента дерева.

Возвращаемое значение:

Тип: ДанныеФормыЭлементДерева.

Описание:

Получает элемент коллекции по идентификатору.

Доступность: клиент, сервер, тонкий клиент, веб-клиент.

ДанныеФормыЭлементДерева (FormDataTreeItem)

Свойства:

<Имя свойства> (<Имя свойства>)

  • ПолучитьИдентификатор (GetId)
  • ПолучитьРодителя (GetParent)
  • ПолучитьЭлементы (GetItems)
  • Свойство (Property)

Описание:

Элемент дерева данных формы.

ДанныеФормыКоллекцияЭлементовДерева (FormDataTreeItemCollection)

Элементы коллекции:
ДанныеФормыЭлементДерева

Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются элементы коллекции.
Возможно обращение к элементу коллекции посредством оператора […]. В качестве аргумента передается индекс элемента.

  • Вставить (Insert)
  • Добавить (Add)
  • Индекс (IndexOf)
  • Количество (Count)
  • Очистить (Clear)
  • Получить (Get)
  • Сдвинуть (Move)
  • Удалить (Delete)

Описание:

Коллекция элементов дерева.

Доступность: клиент, сервер, тонкий клиент, веб-клиент.

См. также:

  • ДанныеФормыЭлементДерева, метод ПолучитьЭлементы
  • ДанныеФормыДерево, метод ПолучитьЭлементы

Особенности работы с деревом значений

Обновление дерева

Существует проблема падения
платформы при обновлении дерева.

Если в дереве был развернут какой-либо узел и выбран подчиненный узел, то при обновлении дерева функцией ЗначениеВДанныеФормы

происходит падение платформы.

Решение: перед обновлением нужно очищать дерево.

Например:

&НаСервере
Процедура ОчиститьДерево(элементы)
Для каждого элемент из элементы Цикл
ОчиститьДерево(элемент.ПолучитьЭлементы());
КонецЦикла;
элементы.Очистить();
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьДеревоПонятий()
дзПонятия = срСвойства.ПостроитьДеревоПонятий(НаДату, Мета.ТекущаяИБ());
ОчиститьДерево(ДеревоПонятий.ПолучитьЭлементы());
ЗначениеВДанныеФормы(дзПонятия, ДеревоПонятий);
КонецПроцедуры

&НаКлиенте
Процедура НаДатуПриИзменении(Элемент)
ЗаполнитьДеревоПонятий();
КонецПроцедуры

Общий реквизит в 1С
8.3 — это объект метаданных платформы, позволяющий использовать один реквизит для многих объектов конфигурации (справочников, документов, планов счетов и т.д). Объект создан в основном для облегчения труда разработчика и разделения данных.

Общие реквизиты были первоначально реализованы в версии 1С 7.7, но сразу в платформу 8 версии разработчики его не включили. Механизм общих реквизитов был введен разработчиками 1С только в релизе 8.2.14.

Общие реквизиты очень удобно добавлять, чтобы не изменять стандартные объекты в конфигурации, я часто их использую наряду с .

После добавления общего реквизита его можно использовать и в запросах и выводить на форму объектов — внешне он ничем не отличается от обычного реквизита.

Единственное ограничение общих реквизитов — невозможность использования их в .

Рассмотрим основные настройки и свойства общих реквизитов, отличные от других объектов конфигурации:

Состав
— список объектов, к которым будет использован общий реквизит, настройка напоминает настройку плана обмена.

Получите 267 видеоуроков по 1С бесплатно:

Автоиспользование
— настройка определяет, будет ли использоваться общий реквизит для тех объектов, у которых в составе указан режим использования «Автоматический».

Разделение данных
— эту настройку рассмотрим отдельно.

Разделение данных
— механизм, аналогичный механизму . Однако производительность данного механизма более эффективна, и он настраивается проще.

Механизм позволяет настроить отображение только элементов, которые может видеть пользователь. К примеру, можно разграничить все объекты (документы, справочники и т.д.), где установлена определенная организация.

Настройка разделения данных с помощью общих реквизитов 1С

Для настройки в общем реквизите необходимо указать разделение данных — Разделять
. Сразу после нажатия система предложит создать параметры учета по умолчанию:

При этом необходимо будет при старте системы указать параметры сеанса, как это сделать, с примером было описано в статье .

На этом настройка окончена — пользователю будет доступна только та информация, которая указана в выбранных параметрах сеанса.

Пример использования общего реквизита

Разберем настройку общего реквизита в 1С 8.3 на примере каркасной конфигурации и реквизита Организация:

В системе имеется 3 документа, где необходимо указание реквизита Организация: это Приходная Накладная, Расходная Накладная, Начисление Зарплаты.

Настройка проста:

  1. Создаем новый Общий реквизит, указываем тип — СправочникСсылка.Организация.
  2. В составе расставляем для наших документов — Использовать
    .

Все, настройка окончена!

Смотрим результат:

Система отображает общий реквизит «как свой»: и в запросах, и в реквизитах формы, и в других местах. Вот такое волшебство! 🙂

Не добавляется общий реквизит 1С 8.3

Понравилась статья? Поделить с друзьями:
  • Обучение за счет компании с последующим трудоустройством
  • Общемашиностроительные нормы времени на фрезерные работы
  • Общество с ограниченной ответственностью бизнес контроль
  • Общество с ограниченной ответственностью бизнес поставка
  • Общество с ограниченной ответственностью бизнес стандарт