Руководство разработчика ПРАВО ТИРАЖИРОВАНИЯ ПРОГРАММНЫХ СРЕДСТВ И ДОКУМЕНТАЦИИ ПРИНАДЛЕЖИТ ФИРМЕ «1С» Приобретая систему «1С:Предприятие», вы тем самым даете согласие не допускать копирования программ и документации без письменного разрешения фирмы «1С». © ООО «1С», 1996 – 2013 Фирма «1С», Москва, 123056, а/я 64 Отдел продаж: Селезневская ул., 21, телефон: +7 (495) 737-92-57, факс: +7 (495) 681-44-07, e-mail: [email protected] URL: http://www.1c.ru, http://www.v8.1c.ru, http://users.v8.1c.ru Группа разработки программ – А. Алексеев, А. Безбородов, Д. Бескоровайнов, П. Василец, А. Виноградов, А. Волков, И. Гольштейн, Е. Горностаев, Г. Дамье, А. Даровских, О. Дерут, Н. Евграфов, Б. Евтифеев, Д. Зарецкий, Д. Ивашов, И. Коваленко, С. Копиенко, Н. Корсаков, С. Кравченко, В. Кудрявцев, П. Кукушкин, А. Кунченко, А. Лакутин, М. Лейбович, Г. Леонтьев, А. Лехан, А. Макеев, А. Медведев, Е. Митрошкин, С. Мурзин, С. Нуралиев, М. Отставнов, Д. Павленко, А. Плякин, А. Рукин, Д. Русанов, М. Саблин, Е. Силин, Д. Службин, А. Смирнов, В. Соколов, П. Солодкий, В. Сосновский, Д. Сысоенков, А. Топорков, В. Тунегов, А. Трубкин, В. Филиппов, А. Цилябин, В. Черемисинов, П. Чиков, А. Чичерин, А. Шевченко, А. Щербинин. Документация – В. Байдаков, В. Дранищев, Е. Королькова, А. Краюшкин, И. Кузнецов, М. Лавров, А. Моничев, А. Плякин, М. Радченко. Группа консультационной поддержки – О. Акулова, С. Алексеева, О. Багрова, О. Баклушина, Э. Гарифуллина, В. Давыдова, О. Дмитренко, Л. Ермакова, М. Ершова, Ю. Жестков, О. Завальская, Н. Заявлина, М. Звонилов, М. Иванова, Г. Коробка, Ю. Лаврова, С. Лепешкина, С. Мазурин, С. Марков, Ю. Мисан, А. Павликов, И. Панин, О. Пехтерева, С. Постнова, А. Прокуровский, Е. Романова, Г. Степаненко, Н. Степанов, Т. Токарева, Е. Широкова. Группа тестирования – Т. Акулова, А. Андриянова, Е. Антонова, М. Губко, Б. Зиатдинов, А. Капралова, С. Карасев, И. Карелин, А. Лапин, Е. Литвиненко, Е. Медведев, О. Ридер, Е. Ситосенко, Е. Смирнова, Е. Стеценко, Н. Шаргунова. Корректура – Е. Семененко. Верстка – О. Шестакова. Наименование книги: 1С:Предприятие 8.3. Руководство разработчика. Номер издания: 83.002.05 Дата выхода: 29 мая 2013 г. ЛИНИЯ КОНСУЛЬТАЦИЙ Для пользователей системы «1С:Предприятие 8» услуги линии консультаций предоставляются по линии информационно-технологического сопровождения (ИТС). Получение консультаций возможно только после регистрации программного продукта (для чего необходимо заполнить регистрационную анкету и выслать ее в фирму «1С») и оформления подписки на ИТС. В стоимость комплекта поставки программного продукта включено обслуживание по линии ИТС в течение периода, указанного в вашей регистрационной анкете. Купон на бесплатное обслуживание по линии ИТС, а также конверт с маркой и адресом входят в состав приобретенного вами комплекта программ. По истечении периода бесплатного обслуживания получение консультаций возможно только по договору на ИТС. Для заключения договора обращайтесь к партнерам фирмы «1С». Телефон и адрес электронной почты для консультаций указаны на диске ИТС. Линия консультаций работает с 9:30 до 17:30 по московскому времени, кроме суббот, воскресений и праздничных дней (по распорядку московских предприятий). Обращаясь к линии консультаций, следует находиться рядом со своим компьютером, иметь под рукой настоящее руководство и свою половину регистрационной анкеты. Желательно заранее уточнить типы используемого компьютера и принтера. Набрав телефон линии консультаций, вы должны услышать ответ дежурного сотрудника. После этого сообщите наименование вашей организации, номер вашего экземпляра системы (он обозначен на CD-ROM комплекта поставки и на вашей половине регистрационной анкеты) и, возможно, другую регистрационную информацию по запросу сотрудника линии консультаций. Названная вами информация будет проверена по данным, указанным в отосланной в фирму «1С» половине регистрационной анкеты. Отвечая на возникшие у вас вопросы, дежурный сотрудник может воспроизвести возникшую ситуацию на своем компьютере. Он даст вам рекомендации сразу же или после обсуждения с разработчиками. Вам не нужно просить к телефону конкретных специалистов: мы отвечаем за работу всего персонала. Работа линии консультаций регистрируется, поэтому при повторных обращениях по сложным проблемам вы можете сослаться на дату и время предыдущего разговора. МЫ ВСЕГДА РАДЫ ВАМ ПОМОЧЬ! Введение Настоящая книга является руководством по разработке прикладных решений для системы «1С:Предприятие». Данный документ предназначен для специалистов, занимающихся разработкой, модификацией и внедрением прикладных решений на платформе «1С:Предприятие». Структура Руководства Руководство содержит описание общей концепции системы «1С:Предприятие», а также рассказывает о приемах работы с объектами системы, о создании форм, командного интерфейса, использовании различных сервисных механизмов системы. Глава 1 описывает концепцию системы «1С:Предприятие»: заложенные в нее принципы, общая схема работы и другое. Глава 2 посвящена работе с конфигурацией в целом: редактированию свойств конфигурации, копированию объектов конфигурации, сохранению конфигурации, объединению конфигураций, вспомогательным режимам работы. Глава 3 описывает интерфейс приложения и его устройство. Глава 4 содержит общие сведения о встроенном языке, описание используемых типов данных, операторов и синтаксических конструкций, а также основные приемы работы со встроенным языком. Глава 5 посвящена основным объектам конфигурации и их особенностям. Глава 6 посвящена описанию командного интерфейса и порядку его разработки. Глава 7 содержит описание формы, ее составных частей, а также описание работы с формой из встроенного языка. Глава 8 содержит описание языка запросов и основные приемы работы с запросами во встроенном языке. Глава 9 рассказывает об общих принципах и особенностях работы с данными системы «1С:Предприятие». Глава 10 посвящена описанию системы компоновки данных. Глава 11 посвящена организации бухгалтерского учета в системе «1С:Предприятие». Глава 12 посвящена работе с механизмами периодических расчетов, используемых в системе «1С:Предприятие». Глава 13 описывает бизнес-процессы и задачи. Глава 14 содержит описание механизма анализа данных и прогнозирования. Глава 15 посвящена описанию механизма обмена данными. Глава 16 описывает механизм XDTO. Глава 17 дает описание механизма Web-сервисов. Глава 18 описывает механизм заданий. Глава 19 описывает средства полнотекстового поиска в базе данных. Глава 20 описывает работу с временным хранилищем данных и применение временного хранилища для операций с файлами. Глава 21 описывает работу с журналом регистрации. Глава 22 рассказывает о механизме криптографии. Глава 23 описывает работу с внешними источниками данных. Глава 24 посвящена описанию механизма разделения данных. Глава 25 описывает разработку приложений для мобильных устройств. Глава 26 рассказывает об использовании специализированного редактора форм, текстового редактора, редактора табличных документов, редактора карты маршрута и редактора картинок. Глава 27 посвящена отладке и тестированию конфигураций. Глава 28 описывает механизм сравнения и объединения конфигураций. Глава 29 посвящена организации и использованию групповой разработки конфигураций. Глава 30 посвящена описанию механизмов создания файлов поставки и обновления, а также комплекта поставки. Данная глава будет интересна разработчикам тиражных конфигураций. Также в данной главе описывается использование файлов поставки и обновлений для типовых конфигураций, находящихся на поддержке разработчиков пользовательских конфигураций. Глава 31 рассказывает о сервисных режимах: настройке параметров конфигуратора, работе с синтакс-помощником, настройке шаблонов, использовании встроенного калькулятора и календаря, сравнении файлов, особенностях работы с окнами, локализации конфигураций в системе «1С:Предприятие». Глава 32 описывает механизм подключения внешних компонентов. Глава 33 содержит рекомендации по разработке кроссплатформенных прикладных решений. ВНИМАНИЕ! В документации, поставляемой в электронном виде, отсутствует часть материала. Этот материал присутствует в печатной версии документации, поставляемой вместе с продуктом. Что вы должны знать Характер изложения материала данного Руководства предполагает, что вы знакомы с операционной системой компьютера, на котором работает система «1С:Предприятие» (Microsoft Windows 2000, Microsoft Windows XP, Microsoft Windows Vista, Microsoft Windows 7, далее – Microsoft Windows), и владеете базовыми навыками работы в ней. Вам должны быть знакомы следующие понятия и навыки: ● использование меню Пуск (Start) для вызова программ; ● приемы работы с окнами; ● приемы работы с мышью; ● стандартные приемы работы с текстом и табличными документами (электронными таблицами) – ввод текста, ввод значений в ячейки табличного документа, редактирование, форматирование, печать и др.; ● работа с меню; ● использование управляющих элементов диалогов; ● стандартные диалоги; ● понятие буфера обмена Microsoft Windows и приемы работы с ним (далее буфер обмена); ● настройка операционной системы Microsoft Windows с помощью панели управления. Если вы недостаточно хорошо владеете перечисленными выше понятиями и навыками, рекомендуем обратиться к документации по операционной системе. Книги документации В состав документации входят книги по технологической платформе «1С:Предприятие»: ● «1С:Предприятие 8.3. Руководство пользователя». Книга содержит описание общих приемов работы с программными продуктами, созданными на базе платформы «1С:Предприятие», и может не поставляться отдельно. Данная книга не поставляется в составе продукта «1С:Предприятие 8.3. Версия для обучения программированию». ● «1С:Предприятие 8.3. Руководство разработчика». Книга необходима для изменения и настройки конфигурации под особенности учета конкретной организации, а также для разработки новых конфигураций. ● «1С:Предприятие 8.3. Руководство администратора». Книга описывает администрирование системы «1С:Предприятие», включая информацию об особенностях построения клиент-серверных систем. Данная книга не поставляется в составе продукта «1С:Предприятие 8.3. Версия для обучения программированию». ● «1С:Предприятие 8.3. Клиент-серверный вариант. Руководство администратора». Книга описывает особенности работы системы «1С:Предприятие» с информационными базами в варианте клиент-сервер в части установки и эксплуатации. Данная книга не поставляется в составе продукта «1С:Предприятие 8.3. Версия для обучения программированию». ● Синтаксис встроенного языка и языка запросов представлен в книге «1С:Предприятие 8.3. Руководство разработчика». Описание объектной модели полностью включено в поставку в электронном виде (в разделах справки конфигуратора и синтакс-помощнике). Описание объектной модели также содержится в книге «1С:Предприятие 8.3. Описание встроенного языка», которая распространяется отдельно. ВНИМАНИЕ! Комплект поставки конкретного продукта может включать лишь некоторые из перечисленных книг документации. Методические материалы и дополнительные возможности Фирма «1С» осуществляет методическую поддержку освоения и внедрения системы программ «1С:Предприятие». Методическая поддержка включает в себя разнообразные формы предоставления информации, необходимой для грамотной и эффективной разработки и использования прикладных решений. Сопроводительные файлы комплекта поставки «1С:Предприятия» В процессе установки платформы «1С:Предприятие» выполняется копирование на жесткий диск ряда сопроводительных файлов, содержащих описание изменений, реализованных в данной версии платформы, и инструкции по переходу с предыдущих версий. Все сопроводительные файлы располагаются в каталоге установочных файлов конкретной версии системы «1С:Предприятие», в каталоге \docs\ru. Если при установке системы использовался каталог, предложенный по умолчанию, то эти файлы будут располагаться в каталоге C:\Program Files\1cv82\НомерВерсии\docs\ru. Здесь НомерВерсии означает номер установленной версии. Так, для версии 8.2.9.100 каталог будет иметь следующий вид: C:\Program Files\1cv82\8.2.9.100\docs\ru. ● V8Update.htm – в этом файле содержатся отличия текущей версии платформы от предыдущих версий и особенности перехода на новую версию. ИТС – информационно-технологическое сопровождение Фирма «1С» осуществляет платную методическую поддержку пользователей в рамках информационно-технологического сопровождения (ИТС) программ системы «1С:Предприятие». Ежемесячные выпуски ИТС содержат большое количество постоянно обновляемой информации, позволяющей более эффективно использовать продукты системы «1С:Предприятие». Отметим наиболее важные составляющие ИТС: ● обновления технологической платформы «1С:Предприятия» и прикладных решений; ● методические материалы по технологической платформе «1С:Предприятие»; ● методические материалы по типовым прикладным решениям фирмы «1С»; ● конфигурация «Конвертация данных» для настройки правил обмена между информационными базами «1С:Предприятия», имеющими различную конфигурацию; ● система стандартов и методик разработки конфигураций для платформы «1С:Предприятие» (предназначена для ознакомления партнеров и пользователей фирмы «1С» с техническими и проектными решениями, используемыми при разработке типовых конфигураций на платформе «1С:Предприятие»); ● советы линии консультаций, помогающие пользователям «1С:Предприятия» получить ответы на наиболее часто встречающиеся вопросы и избежать типичных ошибок; ● информация по обучению работе с платформой «1С:Предприятие» и прикладными решениями фирмы «1С»; ● демонстрационные ролики программных продуктов, позволяющие получить первое представление о возможностях прикладных решений; ● справочники по заполнению деклараций по налогам (налог на прибыль, НДС, налог на имущество, ЕСН, взносы в ПФР); ● обширная подборка бухгалтерской периодики, включая текущие выпуски журналов и архивы; ● база аналитических обзоров законодательства и арбитражной практики; ● рекомендации по составлению квартальной и годовой отчетности в «1С:Бухгалтерии»; ● справочник типовых хозяйственных операций хозрасчетного предприятия; ● справочник по оформлению расчетов с персоналом по оплате труда и правовым аспектам трудовых отношений; ● справочная правовая система «Гарант» – полный набор нормативных документов законодательства Российской Федерации, в том числе по бухгалтерскому учету, налогам и предпринимательству. Начиная с 2005 года, стандартный сервис по поддержке пользователей – подписчиков ИТС включает доступ к сайту поддержки пользователей системы «1С:Предприятие». Более подробно о проекте ИТС можно прочитать на сайте фирмы «1С»: http://www.1c.ru/rus/support/its/its.htm. Оставить заявку на демонстрацию дисков и приобретение подписки на ИТС можно на сайте фирмы «1С»: http://www.1c.ru/rus/support/its/zajavka.jsp. Оформить подписку на ИТС можно у партнеров фирмы «1С». Список партнеров, имеющих опыт массового обслуживания пользователей в рамках проектов ИТС, опубликован на сайте фирмы «1С»: http://www.1c.ru/rus/partners/service.jsp. Информация по «1С:Предприятию» Адрес сайта: http://v8.1c.ru/AllInfo. Данный сайт представляет собой набор ссылок на часто используемую информацию для следующих категорий пользователей: ● пользователи прикладных решений, ● разработчики прикладных решений, ● партнеры фирмы «1С». Сайт системы программ «1С:Предприятие» Адрес сайта: http://v8.1c.ru/. Сайт содержит информацию по технологической платформе системы «1С:Предприятие» и по типовым прикладным решениям, выпущенным фирмой «1С» на ее основе. Пользовательский сайт Адрес сайта: http://users.v8.1c.ru/. На сайте поддержки пользователей системы «1С:Предприятие» представлена информация о номерах версий платформы и конфигураций, дате их выхода, выпусках ИТС, на которых опубликовано обновление. По каждой версии представлена следующая информация: ● для технологической платформы: ● отличия данной версии от предыдущих и особенности перехода; ● ошибки, исправленные при выпуске данной версии; ● дистрибутив обновления; ● файл readme.htm; ● для прикладных решений: ● новое в релизе; ● полный список изменений; ● список основных изменений; ● порядок обновления; ● дистрибутив обновления; ● номер версии платформы, необходимой для использования релиза конфигурации. Также на пользовательском сайте публикуются рекомендации по администрированию системы «1С:Предприятие». Основное преимущество, которое дает пользователям «1С:Предприятия» поддержка на данном сайте, – это возможность обновления технологической платформы и прикладных решений через Интернет до получения дисков ИТС. Также на сайте публикуются дополнительные компоненты, используемые системой «1С:Предприятие» (например, СУБД PostgreSQL), а также тестовые версии платформы и прикладных решений. ВНИМАНИЕ! К сайту поддержки пользователей имеют право доступа зарегистрированные пользователи программных продуктов системы «1С:Предприятие». При этом пользователи продуктов, для которых предусмотрено обслуживание по линии информационнотехнологического сопровождения (ИТС), должны иметь действующую подписку на ИТС. Зарегистрироваться на сайте поддержки пользователей можно самостоятельно либо обратиться к партнеру фирмы «1С». Для самостоятельной регистрации необходимо с главной страницы сайта перейти по ссылке Самостоятельная регистрация пользователей по PIN-коду и выполнить указанные на сайте действия. В процессе регистрации потребуется PIN-код, входящий в комплект поставки программного продукта. Если в комплекте поставки отсутствует PIN-код для регистрации на сайте, следует обратиться к партнеру фирмы «1С». Для регистрации программного продукта необходимо заполнить регистрационную анкету на программный продукт (она является частью регистрационной карточки) и отправить ее в фирму «1С» по почте или факсу. Для оформления подписки на ИТС можно обратиться к любому из сервис-партнеров фирмы «1С». Список партнеров, имеющих опыт массового обслуживания пользователей в рамках проектов ИТС, опубликован на сайте фирмы «1С»: http://www.1c.ru/rus/partners/service.jsp. Принятые обозначения Для лучшего понимания излагаемого материала в настоящем Руководстве приняты некоторые общие приемы выделения отдельных элементов текста. Соглашение о таких приемах приведено ниже. Обозначения клавиш. Клавиши, такие как Enter, Esc, Del и подобные, будут обозначаться, как показано выше, без кавычек. Для ссылок на клавиши управления курсором (клавиши со стрелками) будет использоваться фраза клавиши управления курсором, когда необходимо сослаться сразу на все эти клавиши. Если необходимо упомянуть эти клавиши по отдельности, будут использоваться выражения Стрелка вверх, Стрелка вниз, Стрелка вправо и Стрелка влево. Комбинации клавиш. Когда для выполнения какой-либо команды необходимо нажать комбинацию из двух клавиш, она дается в виде Ctrl + F3. Обозначения кнопок. Наименования кнопок в форме будут даваться их названиями без кавычек, например, ОК, Отмена, Удалить и так далее. Ключевые слова встроенного языка. Ключевые слова встроенного языка системы «1С:Предприятие» выделяются шрифтом и пишутся так, как в программных модулях: РабочаяДата. В тексте также будут встречаться ссылки на описания разделов или элементов встроенного языка (свойства, методы и т. д.). С данными описаниями можно ознакомиться в справке (ветвь Встроенный язык). Описание действия с помощью меню. Для описания выбора пункта меню используется следующая конструкция: Меню – Подменю – Подменю –... – Пункт. Например: «Для выбора масштаба изображения используется пункт Таблица – Вид – Масштаб, что эквивалентно тексту: «Для выбора масштаба изображения используется пункт Масштаб подменю Вид меню Таблица главного меню программы». Если выбор осуществляется не из главного меню программы, то это указывается дополнительно. Режимы работы системы «1С:Предприятие». Система «1С:Предприятие» работает в двух режимах: настройки и проверки конфигурации (далее в Руководстве – режим Конфигуратор или конфигуратор, когда в Руководстве описывается работа по созданию или изменению конфигурации) и исполнения конфигурации (далее в Руководстве – режим 1С:Предприятие). В данном Руководстве пользователем будет называться специалист, выполняющий разработку или сопровождение конфигурации. Выражение %APPDATA% означает переменную окружения ОС Windows, которая содержит путь к каталогу (в профиле пользователя), где приложения хранят свои данные. В случае стандартной установки (и для пользователя Ivanov) этот путь выглядит следующим образом: C:\Documents and Settings\Ivanov\Application Data Для ОС Windows Vista и выше этот путь выглядит следующим образом: C:\Users\Ivanov\AppData\Roaming Выражение %LOCALAPPDATA% означает переменную окружения ОС Windows Vista и старше, содержащую путь к каталогу (в профиле пользователя), в котором находятся данные приложения, специфичные для пользователя. В случае стандартной установки (и для пользователя Ivanov) этот путь выглядит следующим образом: C:\Users\Ivanov\AppData\Local Глава 1. Концепция системы «1С:Предприятие» является универсальной системой автоматизации деятельности предприятия. За счет своей универсальности система «1С:Предприятие» может быть использована для автоматизации самых разных участков экономической деятельности предприятия: учета товарных и материальных средств, взаиморасчетов с контрагентами и др. 1.1. Конфигурируемость Основной особенностью системы «1С:Предприятие» является ее конфигурируемость. Собственно система «1С:Предприятие» представляет собой совокупность механизмов, предназначенных для манипулирования различными типами объектов предметной области. Набор объектов, структуры информационных массивов, алгоритмы обработки информации, соответствующих поставленной задаче, определяет конкретная конфигурация. Вместе с конфигурацией система «1С:Предприятие» выступает в качестве уже готового к использованию программного продукта, ориентированного на определенные типы предприятий и классы решаемых задач. Конфигурация создается и сопровождается (поддерживается) штатными средствами системы. Конфигурация обычно поставляется в качестве типовой для конкретной области применения, но может быть изменена, дополнена пользователем системы, а также разработана заново. Система «1С:Предприятие» обеспечивает поддержку типовых конфигураций стандартными средствами. 1.2. Функционирование системы Функционирование системы делится на два процесса – разработка (описание модели предметной области средствами системы) и исполнение (обработка данных предметной области). На этапе разработки производится: ● формирование структуры обрабатываемой информации; ● создание форм для ввода исходных данных, просмотра различных списков данных; ● организация хранения введенной и итоговой информации; ● написание отчетов и обработок; ● формирование командных интерфейсов для различных групп пользователей; ● формирование списка пользователей; ● назначение пользователям определенных прав. Результатом разработки является программный продукт (конфигурация), который представляет собой модель предметной области. В режиме Конфигуратор можно создавать новые конфигурации, редактировать имеющиеся, а также производить сравнение и объединение нескольких конфигураций. На этапе разработки система оперирует такими универсальными понятиями (объектами), как документ, журнал документов, справочник, реквизит, форма, регистр и другие. Совокупность этих понятий и определяет концепцию системы. В свою очередь, процесс конфигурирования распадается на несколько составляющих (деление носит условный характер), определяющих последовательность написания и назначение томов описания. Это «визуальное» конфигурирование (создание структуры конфигурации, форм диалогов и выходных документов, механизм работы пользователей с данными (интерфейс) и права доступа различных групп пользователей к различной информации) и написание программ на встроенном языке «1С:Предприятия» для обработки входных и выходных данных. На уровне системы определены сами понятия объектов и стандартные операции по их обработке. Средства конфигурирования позволяют описать структуру информации, входящей в эти объекты, и алгоритмы, описывающие специфику их обработки, для отражения различных особенностей учета. Информационная структура проектируется на уровне предусмотренных в системе типов обрабатываемых объектов предметной области (константы, справочники, документы, регистры, перечисления и др.). В процессе исполнения система уже оперирует конкретными понятиями, описанными на этапе конфигурирования (справочниками товаров и организаций, счетами, накладными и т. д.). При работе пользователя в режиме 1С:Предприятие обработка информации выполняется как штатными средствами системы, так и с использованием алгоритмов, созданных на этапе конфигурирования. 1.3. Основные понятия системы В этом разделе рассматриваются основные понятия, которыми оперирует система «1С:Предприятие». Данный раздел будет полезен тем, кто еще не знаком с системой «1С:Предприятие». Описание тех или иных механизмов будет сопровождаться примерами. Возможно, что в описании будут встречаться еще незнакомые вам понятия и термины. Продолжайте чтение: смысл используемых терминов будет ясен в процессе изложения, а для более подробной информации всегда можно обратиться к соответствующим главам настоящего Руководства. 1.3.1. Понятие «конфигурация» Основу концепции составляет понятие «конфигурация». Конфигурацией в системе «1С:Предприятие» называется совокупность взаимосвязанных составных частей: ● подсистемы; ● структуры учетных данных, их форм ввода, выбора, печати; ● состава механизмов учета итоговых данных и движений учетных данных; ● состава различных отчетов и обработок; ● командного интерфейса; ● набора ролей (прав доступа); ● набора общих процедур и функций (модуль приложения, модуль управляемого приложения, модуль внешнего соединения, модуль сеанса, общие модули), макетов табличных документов и др.; ● вспомогательных объектов: ● функциональных опций и их параметров; ● хранилищ настроек; ● средств работы с Web (Web-сервисы, WS-ссылки); ● различной вспомогательной информации (картинки, шаблоны, стили и т. д.). Фактически структура конфигурации является моделью предметной области. Создание конфигурации выполняется при помощи конфигуратора. Созданная конфигурация используется системой «1С:Предприятие» для реализации программного окружения, пригодного для выполнения необходимых учетных задач. Роли в системе «1С:Предприятие» определяют полномочия пользователей на работу с информацией, которая обрабатывается в системе. Совокупность предоставляемых пользователю полномочий определяется, как правило, кругом его обязанностей. Операция назначения ролей пользователю решает две основные задачи: ● с одной стороны, ограничивается круг пользователей конфиденциальной информации, которая, безусловно, всегда присутствует в любой системе учета; ● с другой стороны, запрет выполнения определенных операций (в первую очередь операций удаления и корректировки данных) позволяет в какой-то степени предотвратить возможные потери информации. Все составные части конфигурации тесно связаны между собой и требуют, как правило, согласованного внесения изменений (особенно это касается пользовательских прав). Так, назначение ролей может выполняться только для существующих объектов конфигурации (конкретных документов, журналов, справочников, отчетов). Добавление в структуру конфигурации нового объекта должно сопровождаться внесением соответствующих изменений в роли. Система учитывает назначение прав на объекты при построении командного интерфейса. Если, например, пользователю запрещен просмотр какого-либо справочника, то команда открытия формы списка этого справочника будет удалена из командного интерфейса автоматически. Формы также автоматически учитывают наличие прав при отображении форм. 1.3.2. Объект конфигурации Под объектом конфигурации в системе «1С:Предприятие» понимается формальное описание группы понятий (предметной области, средств взаимодействия пользователя с системой) со сходными характеристиками и одинаковым предназначением. Приведем такой пример. Объект конфигурации Справочникв системе «1С:Предприятие» предназначен для ведения списков однородных элементов данных – справочников, картотек, нормативных сборников и т. п. Использование объектов конфигурации этого типа позволяет организовать ведение любых справочников, необходимых для автоматизации деятельности предприятия. Как правило, объекты конфигурации типа Справочникявляются компьютерными аналогами реально существующих на предприятии видов справочников, например, справочника сотрудников или номенклатуры товаров, хотя могут использоваться и для организации списков, не имеющих явных физических аналогов. Следует иметь в виду, что объект конфигурации описывает не конкретное значение, а только его вид. Например, справочник Физические лица описывает не конкретного человека, а содержит перечень реквизитов (набор видов характеристик о физическом лице), а также формы для ввода их значений, формы просмотра списков и макеты для печати информации. Другими словами, в конфигурации создается схема описания, с помощью которой учитываются все однородные объекты предметной области (в приведенном примере справочника Физические лица одно описание используется как для Петрова, Иванова, так и для любого другого физического лица). Реализованный в системе «1С:Предприятие» при помощи объекта конфигурации компьютерный аналог конкретного понятия предметной области будем называть объектом конфигурации. 1.3.2.1. Свойства объекта конфигурации Каждый объект конфигурации обладает уникальным набором свойств. Этот набор описан на уровне системы и не может быть изменен в процессе настройки конфигурации задачи. Набор свойств объекта конфигурации определяется в основном его назначением в системе «1С:Предприятие». Главным свойством любого объекта конфигурации является имя – краткое наименование объекта конфигурации. При создании нового объекта конфигурации ему автоматически присваивается условное имя, состоящее из слова, определяемого по виду объекта, и цифры (например, при создании реквизита создается реквизит с именем Реквизит1, при создании документа – Документ1и т. д.). Это имя можно изменить в процессе редактирования свойств объекта конфигурации, при этом система отслеживает уникальность имен. Имя объекта конфигурации не может быть пустым и быть длиннее 255 символов. Некоторые свойства из всего набора свойств, присущих объекту конфигурации, доступны для редактирования и могут быть так или иначе изменены в процессе конфигурирования системы. Характер изменений и их пределы также задаются на уровне системы. Специалист, осуществляющий конфигурирование системы, целенаправленным изменением свойств объекта конфигурации может добиться требуемого поведения объекта при работе системы. Однако такие изменения не затрагивают сущности объекта и не позволяют добиться от него действий, не свойственных объектам данного типа. Приведем такой пример. Объект конфигурации Константав системе «1С:Предприятие» предназначен для хранения информации, которая не изменяется во времени или изменяется очень редко. При этом не важны предыдущие значения константы. Простым примером константы может служить название предприятия: оно, как правило, не меняется в процессе деятельности предприятия (если предполагается, что значения каких-либо учетных данных, изменяемых во времени, нужно выбирать с учетом времени, то для таких данных необходимо использовать не константу, а регистр сведений без измерений). Константа обладает большим набором редактируемых свойств, из которых наиболее важными являются: ● имя константы, ● синоним, ● комментарий, ● тип данных, ● режим управления блокировкой, ● ссылка, позволяющая открыть модуль менеджера константы. В наиболее общем случае значение в константу вводится один раз (как, например, название предприятия). С точки зрения использования константы не важно, что именно хранится в константе; главным является то, что константа сохранила записанное в нее значение. Способность сохранять введенное в нее значение – неотъемлемая особенность константы в системе «1С:Предприятие». Редактирование свойств константы на эту способность не влияет. 1.3.2.2. Основные виды объектов конфигурации Все объекты конфигурации, которые существуют в системе «1С:Предприятие», образуют несколько основных видов. Каждый вид объектов конфигурации представляет собой как раз те «строительные элементы», из которых будет создаваться конфигурация. Формально объекты конфигурации объединяются в виды в дереве конфигурации. Названия видов пользователь видит на первом уровне дерева конфигурации, когда открывает окно Конфигурация в конфигураторе. Рис. 1. Дерево метаданных Несмотря на отсутствие формального определения, названия видов объектов конфигурации широко используются при работе с системой «1С:Предприятие». Например, специалист, осуществляющий конфигурирование системы «1С:Предприятие», видит свою цель в разработке необходимого набора справочников, документов, отчетов, журналов, которые будут реализовывать требуемую систему учета. Конечный пользователь системы «1С:Предприятие» – руководитель, бухгалтер, менеджер, кладовщик – также оперирует конкретными справочниками, документами и т. д. для решения стоящих перед ним задач. Общение между двумя этими категориями пользователей также будет происходить в понятиях видов объектов конфигурации. Объект данных какого-либо вида является уже конкретным документом, отчетом, журналом, константой и так далее. Как правило, каждый объект используется для работы со вполне определенной информацией предметной области. Ниже приведена краткая характеристика основных видов объектов конфигурации системы «1С:Предприятие». Подробная информация об объектах конфигурации, объединяемых в каждом из этих видов, будет изложена далее. 1.3.2.2.1. Константы Для работы с постоянной и условно постоянной информацией в системе используются объекты типа Константа. Информация, хранящаяся в константах, редко изменяется, но, как правило, часто используется в работе. Например, в константах может храниться наименование предприятия, его ИНН, фамилии директора и главного бухгалтера и другая подобная информация. В системе может быть описано неограниченное количество констант. 1.3.2.2.2. Справочники Для работы с постоянной и условно постоянной информацией с некоторым множеством значений в системе используются объекты типа Справочник. Обычно справочниками являются списки материалов, товаров, организаций, валют, сотрудников и др. Механизм поддержки справочников позволяет спроектировать и поддерживать самые различные справочники. На этапе конфигурирования можно описать, какими свойствами обладает каждый конкретный справочник. К настраиваемым свойствам относятся, например, длина и тип кода, количество уровней иерархии, поддержка уникальности кодов, набор реквизитов справочника. Помимо кода и наименования, механизм работы со справочниками позволяет создавать набор реквизитов для хранения любой дополнительной информации об элементе справочника (например, для номенклатуры это может быть закупочная и отпускная цены, производитель, для сотрудника – должность, образование, адрес места жительства и т. д.), а также табличные части. В табличных частях хранится однотипная информация, число которой может быть переменным, например, описание комплектующих изделия, состав семьи сотрудника, телефоны организации и т. д. Для каждого справочника может быть задано несколько типов форм: элемента, группы, списка, выбора, выбора группы. По каждому типу форм может быть создано произвольное число форм. Для описания соподчиненных сущностей можно использовать подчиненные справочники. В этом случае в подчиненном справочнике каждый элемент «принадлежит» к определенному элементу справочника-владельца. В конкретной конфигурации создается необходимое количество справочников для хранения данных об объектах, используемых при автоматизации данной предметной области. Например, это могут быть справочники Организации, Товары, Сотрудникии т. д. 1.3.2.2.3. Перечисления Перечисления используются в системе «1С:Предприятие» для описания постоянных наборов значений, не изменяемых в процессе работы конфигурации. На этапе конфигурирования можно описать практически неограниченное количество видов перечислений. В отличие от справочника, значения перечислений задаются на этапе конфигурирования и не могут быть изменены на этапе исполнения. Типичными примерами перечислений являются виды оплаты (наличная, безналичная, бартер), статус клиента (постоянный, разовый) и т. д. Одной из главных особенностей перечислений, отличающей их от справочников, является то, что набор значений перечисления не изменяется при работе конечного пользователя с программой. Например, алгоритм конфигурации может быть ориентирован на то, что каждый клиент имеет один из двух статусов – либо постоянный, либо разовый. В этом случае указание статуса клиента выполняется путем выбора одного из значений перечисления. Пользователь не может добавить новый статус. В отличие от перечислений, для справочников конкретные значения обычно вводятся пользователем при работе с программой, например: наименования товаров, контрагентов и прочее. 1.3.2.2.4. Документы Документы предназначены для отражения хозяйственных событий предприятия, которые имеют отношение к автоматизируемой предметной области. Например, в конфигурации, предназначенной для учета торговых операций, могут быть такие документы, как счет, приходная накладная, расходная накладная и проч. При помощи документов отражаются и платежи с расчетного счета, и операции по кассе, и движения по складу, и прочие подобные события. В процессе конфигурирования настраивается произвольное количество видов документов. Типичными примерами видов документов являются такие, как Платежное поручение, Счет, Приходная накладная, Расходная накладная, Накладная на внутреннее перемещение, Приходный кассовый ордер и другие. Каждый вид документа предназначен для отражения своего типа событий. Это определяет его структуру и свойства, которые описываются в конфигурации. Каждый вид документа может иметь неограниченное количество реквизитов и табличный частей. Несколько табличных частей требуются в тех случаях, когда одним документом необходимо зарегистрировать разные по сути, но связанные события, например: отразить поступление товара на склад и зарегистрировать понесенные дополнительные затраты – оплату транспорта, грузчиков и др. Для документа создаются формы ввода – экранные аналоги реальных документов. Если в других формах используются данные документов, то для включения этой информации разрабатываются формы для выбора. Для просмотра списка документов одного вида создаются формы списков. Число форм неограниченно. Каждый документ также может иметь неограниченное число печатных форм. Все документы характеризуются номером, датой и временем. При настройке для документа также задается длина номера документа, условия поддержки уникальности номеров и другие. Документы играют центральную роль для основных механизмов, реализуемых системой. Все документы образуют единую хронологическую последовательность. Фактически она отражает реальную последовательность событий. Внутри даты последовательность документов определяется их временем, при этом время документа является не столько средством отражения реального (астрономического) времени ввода документа, сколько средством, позволяющим четко упорядочить документы внутри одной даты. Данные, вводимые в документ (в реквизиты и табличные части документа), обычно содержат информацию о происшедшем событии: например, в накладной – информацию о том, с какого склада, каких товаров и сколько отгружено, какие дополнительные затраты произведены при приобретении товаров. Для документа весьма важным действием является его проведение. Если документ не является «проводимым», это значит, что событие, которое он отражает, не влияет на состояние учета, который ведется в данной конфигурации. Если документ проводится, то он изменяет состояние тех или иных учитываемых данных. При проведении документ может отразить зафиксированное им событие в механизмах, реализуемых различными регистрами. Например, в торговом предприятии выписка клиенту счета на оплату не изменяет состояния товарных или денежных средств предприятия, так как счет в данном случае – это только выражение намерения клиента приобрести товар. В этом случае в конфигурации для учета торговых операций документ Счет может не отражаться на регистрах учета. Однако если выписка счета сопровождается резервированием товара для данного клиента, то в этом случае документ Счет должен отражаться на регистрах учета, так как операция выписки счета еще и «замораживает», временно выключает из оборота определенное количество товаров. В этом случае конфигурация для учета торговых операций должна уметь отслеживать зарезервированный товар. 1.3.2.2.5. Журналы документов Журналы документов предназначены для просмотра документов разных видов. Каждый вид документа может быть показан в нескольких журналах. Журнал документов не добавляет новые данные в систему, а является средством для отображения в едином списке документов нескольких видов. Например, может быть создан журнал Складские документы, в котором будут отображаться все приходные и расходные накладные и накладные на внутреннее перемещение. Для журнала могут быть определены графы журнала, предназначенные для отображения реквизитов документов разного вида, отнесенных к данному журналу. Например, журнал торговых документов может содержать графу Контрагент, в которой будет отражаться реквизит Комитент документа Прием на комиссию, реквизит Организация документа Приходная накладная и т. д. Каждый журнал может иметь неограниченное число форм визуального представления и печатных форм. 1.3.2.2.6. Отчеты и обработки Для описания отчетов и процедур обработки информации на этапе конфигурирования может быть создано неограниченное число отчетов и обработок. Отчеты и обработки могут иметь несколько форм, предназначенных, например, для ввода параметров формирования отчета или параметров обработки данных. Например, для выдачи складской справки – выбор конкретного склада. Алгоритм получения отчета может описываться с использованием встроенного языка или формироваться системой автоматически, в случае использования системы компоновки данных (см. здесь). Для вывода отчетов может быть использован как текстовый формат, так и специализированный табличный формат отчетов (макеты). Система также поддерживает возможность разработки внешних обработок, хранящихся не в самой конфигурации, а в отдельных файлах. 1.3.2.2.7. Планы видов характеристик В системе «1С:Предприятие» объекты Планы видов характеристик предназначены для описания множеств однотипных объектов аналитического учета. 1.3.2.2.8. Планы видов расчета Объекты данного вида предназначены для создания видов расчетов, используемых в механизмах периодических расчетов. 1.3.2.2.9. Планы счетов План счетов является одним из основных понятий бухгалтерского учета. Планом счетов называется совокупность синтетических счетов, предназначенных для группировки информации о хозяйственной деятельности предприятия. Информация, накапливаемая на таких синтетических счетах, позволяет получить полную картину состояния средств предприятия в денежном выражении. 1.3.2.2.10. Планы обмена Объекты данного вида предназначены для организации обмена данными между различными информационными базами, а также информационными базами и внешними программными системами. 1.3.2.2.11. Бизнес-процессы и задачи Позволяют создавать формализованные описания типичных последовательностей работ, выполняемых в организации, и на их основе формировать списки задач, которые необходимо выполнить тому или иному сотруднику организации в данный момент. Например, процесс продажи товара может быть представлен как последовательность выписки счета, его утверждения, получения наличной оплаты и отгрузки товара со склада. За выполнение каждого из этапов могут отвечать различные сотрудники. Таким образом, в любой момент времени можно определить, в каком состоянии находится процесс продажи товара и кто из сотрудников в данный момент должен выполнить какие-либо действия. 1.3.2.2.12. Регистры Регистры предназначены для хранения и обработки различной информации, отражающей хозяйственную или организационную деятельность предприятия и не имеющей объектной природы. В регистрах обычно хранится информация об изменении состояний объектов или другая информация, не отражающая непосредственно объекты предметной области. Например, в регистрах может храниться информация о курсах валют или информация о приходе и расходе товаров. В системе «1С:Предприятие» существует 4 вида регистров: ● регистры сведений, ● регистры накопления, ● регистры расчетов, ● регистры бухгалтерии. 1.3.2.2.13. Специализированные объекты конфигурации (ветвь «Общие») Помимо объектов, описывающих предметную область учета, конфигурация содержит ряд вспомогательных объектов, не относящихся непосредственно к деятельности предприятия, однако тесно связанных с функционированием самой системы. Это механизмы взаимодействия пользователей с системой «1С:Предприятие» (командный интерфейс, критерии отбора, права доступа различных групп пользователей к различной информации); вспомогательные объекты оформительского назначения, позволяющие производить конфигурирование на основе сформированных стилей; библиотеки картинок с учетом национального языка; модуль приложения и общие модули, в которых располагаются процедуры и функции, доступные из прочих модулей конфигурации; общие макеты печатных форм и многое другое. 1.3.2.3. Подчиненные группы объектов В зависимости от вида объекта конфигурации объект может иметь различные подчиненные группы объектов. Например, реквизиты, измерения, формы, табличные части и т. д. Состав подчиненных объектов зависит от типа объекта. Реквизиты – дополнительная информация об объекте, доступная только в пределах этого объекта. Табличные части – наборы дополнительной информации об объекте, представленной в виде таблицы. ВНИМАНИЕ! Число строк одной табличной части не может быть более 100 000. Реквизиты табличных частей – состав табличной части объекта, доступный только в пределах табличной части объекта. Формы – форма используется для ввода, просмотра и редактирования информации, хранящейся в объекте конфигурации, содержит модуль формы – программу на встроенном языке системы «1С:Предприятие». Способность иметь визуальное представление позволяет объекту конфигурации организовать интерактивное взаимодействие с пользователем. Характер такого взаимодействия разрабатывается специалистом, осуществляющим конфигурирование системы «1С:Предприятие», и определяется в основном типом объекта конфигурации. Для разработки форм в конфигураторе применяется комплексный редактор форм, позволяющий редактировать все компоненты формы во взаимосвязи. Каждый объект может иметь несколько форм. Команды – используются для выполнения различных операций с объектом. Команды бывают независимыми и параметризуемыми. Макеты – табличные, HTML или текстовые документы (также могут использоваться двоичные и Active-документы), предназначенные для формирования печатных форм объекта. Графы – графы журнала документов. Измерения – для регистров это объекты конфигурации, данные о которых учитываются в регистре. Ресурсы – данные, учитываемые в регистре. Группы подчиненных объектов не удаляются и не имеют редактируемых свойств. 1.3.2.4. Типизированные и типообразующие объекты Одним из основных свойств некоторых объектов конфигурации является Тип данных. Это свойство определяет, какого рода информацию может содержать объект конфигурации. Тип данных объекта конфигурации назначается при создании или редактировании свойств объекта в процессе настройки конфигурации. Объекты конфигурации, для которых может быть указан тип информации, содержащейся в объекте, в системе «1С:Предприятие» называются типизированными объектами конфигурации. Такие объекты конфигурации, как Справочник, Документ, Обработка, не являются типизированными объектами, так как содержат «комплексную» информацию и, в свою очередь, включают в себя типизированные объекты конфигурации. Типы данных, которые может принимать объект конфигурации, можно разделить на две группы. Первую группу составляют примитивные типы данных: Число, Строка, Датаи Булево. Соответственно, информация, хранящаяся в объекте конфигурации, может быть числом, произвольной строкой символов, датой или логической величиной. Кроме этих типов к примитивным типам относят NULL, Неопределенои Тип(подробнее см. раздел «Примитивные типы данных» справки по встроенному языку). Кроме этого, некоторые объекты конфигурации системы «1С:Предприятие» также могут образовывать типы данных. Например, константе может быть назначен тип данных ДокументСсылка. В этом случае значение константы будет представлять собой ссылку на один из существующих в системе «1С:Предприятие» документов. Объекты конфигурации, которые могут образовывать типы значений конфигурации, в системе «1С:Предприятие» называются типообразующими объектами конфигурации. Такими объектами в системе «1С:Предприятие» являются: ● справочники, ● документы, ● планы видов характеристик, ● планы счетов, ● планы видов расчета, ● планы обмена, ● бизнес-процессы, ● задачи, ● перечисления. Необходимо обратить внимание, что типообразующие объекты конфигурации образуют тип данных сразу после создания в конфигураторе объекта любого из таких типов. При этом появляются сразу три новых вида типов: Ссылка, Объекти Список. Например, когда в конфигураторе создается новый справочник, то в списке типов данных появляются новые типы данных: СправочникСсылка.<ИмяСправочника>, СправочникОбъект.<ИмяСправочника>и СправочникСписок.<ИмяСправочника>. Такие типы данных могут быть присвоены любому из типизированных объектов конфигурации. Некоторые данные могут иметь составной тип. Для этого в окне редактирования типа данных нужно установить флажок Составной тип данных и указать те типы, которые могут принимать данные. Кроме того, допускается выбор специального типа ЛюбаяСсылка. При выборе типа данных реквизита система, помимо выбора типов, определенных в конкретном прикладном решении, предоставляет разработчику возможность выбирать наборы типов. Наборами типов, например, являются ЛюбаяСсылка, СправочникСсылка, Характеристика.<имя>и др. Наборы типов, так же как и составной тип данных, содержат некий перечень типов, определенных в данном прикладном решении, однако, в отличие от составного типа, этот перечень формируется системой автоматически, в результате анализа метаданных. Например, в прикладном решении имеются справочники Номенклатураи Контрагенты. Если определен реквизит составного типа данных, в который входят типы СправочникСсылка.Номенклатураи СправочникСсылка.Контрагенты, то наряду с этим можно определить реквизит, содержащий набор типов СправочникСсылка. И в том и в другом случае можно хранить в реквизите ссылки как на справочник Номенклатура, так и на справочник Контрагенты. После добавления нового справочника Ценыв реквизите составного типа по-прежнему могут храниться только ссылки на справочники Номенклатураи Контрагенты, а в реквизите, описанном как набор типов, допускается хранение ссылки на любой из справочников, доступных в данной конфигурации, в том числе и на справочник Цены. При запуске прикладного решения набор типов преобразуется системой, как правило, в составной тип, содержащий все типы, которые должны входить в этот набор. Поэтому во втором случае в набор типов попадет и новый справочник Цены. Однако набор типов не всегда преобразуется системой в составной тип данных. Если оказывается, что в набор типов входит единственный тип значений, то набор типов будет преобразован в этот самый тип значений. Такая ситуация возможна, например, когда план видов характеристик (назовем его Свойства) имеет единственный тип значений в свойстве ТипЗначенияХарактеристик. Тогда набор типов Характеристика.Свойствабудет преобразован системой не в составной тип данных, содержащий один тип значений, а в тот единственный тип значений, который указан для плана видов характеристик. Эта особенность может быть важна, когда, например, выполняется проверка реквизита, тип которого описан как Характеристика.Свойства, на заполненность. Когда Характеристика.Свойствапреобразуется системой в составной тип данных, проверять нужно на значение Неопределено, а если Характеристика.Свойствапреобразуется в определенный тип значения, то проверять нужно на значение по умолчанию данного типа. 1.3.3. Командный интерфейс Командный интерфейс – это основное средство навигации пользователя по функциональности конфигурации. Командный интерфейс строится на основе подсистем. Разработчик конфигурации включает прикладные объекты в соответствующие подсистемы. На основе этой информации (структуры подсистем и привязки объектов к подсистемам) система автоматически строит командный интерфейс для пользователя. Пользователю отображается структура прикладного решения (иерархия подсистем) и предоставляются стандартные команды доступа к функциональности прикладных объектов (вызов списков справочников, документов, открытие отчетов, обработок и т. д.). Однако разработчик, разумеется, может отредактировать предлагаемое системой построение командного интерфейса (изменить порядок, видимость команд). Для этого предназначен редактор командного интерфейса, который вызывается как для конкретной подсистемы, так и для всех подсистем. Сами команды, включаемые в командный интерфейс (открытие списков, ввод новых объектов, открытие отчетов и т. д.), предоставляются системой автоматически. Но разработчик может создать свои команды, которые будут включаться в командный интерфейс. Цель создания интерфейса – обеспечить структурированный доступ пользователей к той информации, которая необходима им в соответствии с их обязанностями. 1.3.4. Форма Совокупность экранного диалога, модуля, реквизитов и команд называется формой. Большинство объектов конфигурации в системе «1С:Предприятие» могут иметь визуальную форму. В самом общем случае форма как объект конфигурации состоит из следующих частей: ● Экранный диалог, используемый для ввода и редактирования информации. ● Модуль формы – программа на встроенном языке системы «1С:Предприятие». Как правило, модуль формы выполняет обработку вводимой в диалог информации для целей входного контроля, выполнения расчетов и т. д. ● Список реквизитов. ● Команды, используемые в форме. Любая из этих составных частей формы может отсутствовать, то есть не содержать информации. С помощью формы можно реализовать интерактивное взаимодействие прикладного объекта с пользователем. Характер такого взаимодействия разрабатывается специалистом, осуществляющим конфигурирование системы «1С:Предприятие». Подробнее об устройстве формы см. здесь. Для разработки форм в конфигураторе применяется редактор форм, позволяющий редактировать все компоненты формы во взаимосвязи. 1.3.5. Модуль Модулем называется программа на встроенном языке системы «1С:Предприятие». Модули располагаются в заданных точках структуры конфигурации и вызываются для выполнения в заранее известные моменты работы системы «1С:Предприятие». Специалист, выполняющий конфигурирование системы, может использовать модули для описания сложных алгоритмов взаимодействия объектов конфигурации, для которых недостаточно имеющихся в конфигураторе визуальных средств. В конфигурации существует несколько видов модулей. Это модуль управляемого приложения, модуль обычного приложения, модуль внешнего соединения, модуль сеанса, общие модули, модули форм и модули объектов конфигурации (менеджеров значения констант, справочников, документов, планов видов характеристик, планов счетов, планов видов расчета, планов обмена, бизнес-процессов, задач, отчетов, обработок, наборов записей регистров), модули менеджеров объектов конфигурации (справочников, документов, планов видов характеристик, планов счетов, планов видов расчета, планов обмена, бизнеспроцессов, задач, отчетов, обработок, регистров сведений, регистров накопления, регистров бухгалтерии, регистров расчета, перечислений, журналов документов, хранилищ настроек), модули наборов записей (регистров сведений, регистров накопления, регистров бухгалтерии, регистров расчета), модули команд. Для доступа к модулю необходимо в контекстном меню объекта конфигурации выбрать пункт Открыть модуль... Для корневого объекта конфигурации выбирается модуль управляемого приложения, модуль сеанса, модуль внешнего соединения и модуль обычного приложения. Некоторые объекты (например, константы, журналы документов) не имеют модуля. Подробное описание назначений модулей см. в разделе «Что такое программный модуль?» справки по встроенному языку. В модулях объектов возможно объявление переменных, процедур и функций, которые будут доступны при работе с объектом извне во встроенном языке, дополняя контекст объекта. В этих модулях располагают процедуры обработки различных событий, например, ввода на основании. Также в них располагают различные процедуры, с помощью которых выполняются действия над объектом, инициированные вне данного объекта (например, выполнение печати). Модуль менеджера позволяет расширить функциональность менеджеров, предоставляемых системой, за счет написания процедур и функций на встроенном языке. Фактически это позволяет описать методы для объекта конфигурации (например, справочника), которые относятся не к конкретному экземпляру объекта базы данных, а к самому объекту конфигурации. Модуль менеджера не может иметь переменных и тела модуля. Если функции или процедуры модуля менеджера объявлены как экспортируемые, к ним можно будет получить доступ через менеджер объекта: // Модуль менеджера справочника Контрагент. Функция ПолучитьСписокДебиторов()... КонецФункции // Вызов из прикладного кода. Дебиторы = Справочники.Контрагент.ПолучитьСписокДебиторов(); 1.3.6. Макет Макетом в системе программ «1С:Предприятие» называется объект конфигурации, предназначенный для формирования печатных форм. Общие макеты печатных форм располагаются в ветви Макеты ветви Общие дерева конфигурации: печатные формы объектов конфигурации (справочников, документов, журналов документов, планов счетов, планов видов характеристик, планов видов расчетов, регистров, отчетов и обработок и других объектов) располагаются в подчиненных объектах Макеты, а также во внешних файлах (в этом случае должно быть установлено свойство табличного документа Макет). Макеты могут быть следующего типа: ● Табличный документ – предполагает использование стандартной технологии создания и использования макетов. Подготовка макета производится с помощью табличного редактора. ● Двоичные данные – используются двоичные данные. ● ActiveDocument – предполагает использование технологии OLE Active document. ● HTML-документ – предполагает использование редактора HTML-документа. ● Текстовый документ – предполагает использование текстового документа в качестве макета. Подготовка текстового макета производится с помощью редактора текстовых макетов. ● Географическая схема – предполагает использование географической схемы, подготовленной в редакторе географических схем, в качестве макета. ● Графическая схема – предполагает использование подготовленной в редакторе графической схемы. ● Схема компоновки данных – предполагает использование схемы компоновки данных, подготовленной в конструкторе. ● Макет оформления компоновки данных – предполагает использование макета оформления системы компоновки данных. 1.4. Варианты работы «1С:Предприятие» поддерживает два варианта работы: ● файловый, ● клиент-серверный. И в том и в другом варианте все прикладные решения работают полностью идентично. Файловый вариант работы в основном предназначен для персонального использования, в то время как клиент-серверный вариант – для использования в рабочих группах или в масштабе предприятия. 1.4.1. Файловый вариант Файловый вариант работы с информационной базой рассчитан на персональную работу одного пользователя или работу небольшого количества пользователей в локальной сети. В этом варианте все данные информационной базы (конфигурация, база данных, административная информация) располагаются в одном файле. Такой вариант работы обеспечивает легкость установки и эксплуатации автоматизированной системы. При этом для работы с информационной базой не требуются дополнительные программные средства, достаточно иметь операционную систему и «1С:Предприятие». Файловый вариант «1С:Предприятия» обеспечивает высокую целостность информационной базы и простое создание резервных копий. Исключена ситуация, когда пользователь может по ошибке (например, при копировании информационной базы) перепутать различные файлы информационной базы и привести таким образом систему в неработоспособное состояние. Кроме этого, резервное копирование может осуществляться на файловом уровне, путем простого копирования файла информационной базы. Однако, несмотря на легкость и простоту использования, файловый вариант обладает некоторыми ограничениями (см. здесь). 1.4.2. Клиент-серверный вариант Клиент-серверный вариант предназначен для использования в рабочих группах или в масштабе предприятия. Он реализован на основе трехуровневой архитектуры «клиентсервер». Программа, работающая у пользователя (клиентское приложение), взаимодействует с кластером серверов «1С:Предприятия», а кластер, при необходимости, обращается к серверу баз данных (Microsoft SQL Server, PostgreSQL, IBM DB2 или Oracle Database). При этом физически кластер серверов «1С:Предприятия» и сервер баз данных могут располагаться как на одном компьютере, так и на разных. Это позволяет администратору при необходимости распределять нагрузку между серверами. Использование кластера серверов «1С:Предприятия» позволяет сосредоточить на нем выполнение наиболее объемных операций по обработке данных. Например, при выполнении даже весьма сложных запросов программа, работающая у пользователя, будет получать только необходимую ей выборку, а вся промежуточная обработка будет выполняться на сервере. Обычно увеличить мощность кластера серверов гораздо проще, чем обновить весь парк клиентских машин. Другим важным аспектом использования 3-уровневой архитектуры является удобство администрирования и упорядочивание доступа пользователей к информационной базе. В этом варианте пользователь не должен знать о физическом расположении конфигурации или базы данных. Весь доступ осуществляется через кластер серверов «1С:Предприятия». При обращении к той или иной информационной базе пользователь должен указать только имя кластера и имя информационной базы, а система запрашивает соответственно имя и пароль пользователя. Подробнее с администрированием системы можно ознакомиться в книге «1С:Предприятие 8.3. Руководство администратора». Несмотря на то, что система «1С:Предприятие» старается скрыть от пользователя особенности поведения различных серверов баз данных, это не всегда удается. Особенности работы системы с тем или иным сервером баз данных см. здесь. Важной особенностью работы в клиент-серверном варианте является возможность работы сервера «1С:Предприятия» и серверов баз данных на различных операционных системах (семейство Windows и различные дистрибутивы Linux). 1.5. Технологические средства разработки Для описания специфических алгоритмов обработки информации и создания интерфейса, ориентированного на удобное представление описанных в конфигурации данных, в системе «1С:Предприятие» используются несколько технологических механизмов. Встроенный программный язык. Необходимость наличия встроенного языка определена концепцией настраиваемости системы. Синтаксис встроенного языка вполне отвечает стандартам высокоуровневых языков. Язык является предметно-ориентированным. Он поддерживает специализированные типы данных предметной области, определяемые конфигурацией системы. Работа с этими типами данных в языке организована с использованием объектной техники. Язык ориентирован на пользователей различной квалификации. В частности, его отличает мягкая типизация данных, обеспечивающая быстрое написание программных модулей, и жесткий контроль синтаксических конструкций, уменьшающий вероятность ошибок. Так как система сочетает в себе визуальные и языковые средства конфигурирования, использование встроенного языка в системе имеет событийно-зависимую ориентацию, то есть языковые модули используются в конкретных местах для отработки отдельных алгоритмов, настраиваемых в процессе конфигурации. Так, например, для документа можно описать алгоритм автоматического заполнения реквизитов при вводе нового документа. Данная процедура будет вызвана системой в нужный момент. Механизм запросов. Для получения произвольных отчетов сложной структуры в системе предусмотрен предметно-ориентированный механизм запросов. Данное средство опирается на существующую условно-переменную структуру информационной базы системы, что позволяет сравнительно просто описывать достаточно сложные запросы. Встроенный текстовый редактор используется для создания программных модулей на встроенном языке и для редактирования документов в текстовом виде. Одной из особенностей редактора является возможность контекстного выделения цветом синтаксических конструкций встроенного языка, а также группировка различных синтаксических конструкций. При наборе текстов на встроенном языке удобно пользоваться контекстной подсказкой и шаблонами. Благодаря тому, что встроенный язык системы имеет мощные средства манипулирования текстами, текстовый формат может быть успешно использован для обмена с другими системами самой различной информацией. Встроенный редактор форм. Работа с настраиваемыми структурами данных и работа в интерфейсе операционной системы Microsoft Windows вызывает необходимость произвольной настройки форм для ввода и редактирования информации. Для этого в системе «1С:Предприятие» существует встроенный редактор форм. Редактор позволяет оформить большинство окон, которые используются в системе для ввода и просмотра предметной информации (формы документов, справочников, настройки отчетов). Встроенный редактор табличных документов. Для всех выходных документов (первичных документов и отчетов) в системе предусмотрен единый формат – формат табличных документов. Редактор табличных документов – это мощное средство, сочетающее в себе оформительские возможности табличной структуры и векторной графики. Он может быть использован как для создания небольших документов с очень сложной структурой линий (типа платежного поручения), так и для объемных ведомостей, журналов и других подобных документов. Редактор табличных документов предоставляет пользователям богатый набор оформительских возможностей (шрифты, цвета, линии, узоры). Имеется возможность вывода информации в графическом виде (диаграммы). Одной из главных особенностей редактора табличных документов является ориентация на формирование отчетов при помощи встроенного языка системы «1С:Предприятие». Гибкое построение отчетов с его помощью становится возможным благодаря наличию механизма манипулирования именованными областями документа. Редактор табличных документов позволяет манипулировать не только горизонтальными, но и вертикальными областями, что делает возможным создание отчетов, масштабируемых не только в высоту, но и в ширину. Сочетание возможностей редактора с таким объектом, как система компоновки данных, позволяет создавать универсальные отчеты, которые дают возможность обрабатывать и представлять информацию в различных разрезах и различной детализации без дополнительного вмешательства разработчика. С другой стороны, табличный документ может выступать в качестве элемента управления формы и таким образом использоваться для ввода данных. Встроенный редактор картинок. Редактор позволяет создавать картинки произвольных размеров для использования их в качестве пиктограмм панели инструментов, картинок кнопок и других оформительских целей. Встроенный редактор HTML-документов. Редактор позволяет создавать пользовательские описания и имеет большие оформительские возможности (механизм гиперссылок, использование стилей, размещение картинок и т. д.). Конструкторы – вспомогательные инструменты, облегчающие разработку стандартных элементов системы «1С:Предприятие». В системе имеются, например, конструкторы форм констант, справочников, документов, журналов документов, отчетов и других объектов, конструкторы печатных форм, конструкторы движений регистров и другие. С помощью конструкторов производится не только формирование визуальных составляющих этих объектов, но и в некоторых случаях (ввод на основании, печать, выходная форма и др.) формируются программные модули. Система настройки пользовательского интерфейса. Для того чтобы интерфейс конкретной конфигурации системы полностью отражал настроенные структуры данных и алгоритмы, в системе «1С:Предприятие», помимо редактора диалоговых форм и табличных документов, предусмотрена возможность настройки командного интерфейса системы. При этом командный интерфейс автоматически учитывает права доступа пользователя, который вошел в систему. При этом пользователю будут показаны только те объекты системы, доступ к которым пользователю разрешен. Подсистемы. Конфигуратор позволяет на этапе проектирования в рамках одной конфигурации выделить различные подсистемы (например, торговый учет и исследовательский комплекс). Для каждой подсистемы можно указать объекты конфигурации, которые в нее входят. Допускается указывать принадлежность одного объекта к нескольким подсистемам. Фактически подсистемы определяют основные разделы конфигурации, с которыми будет работать пользователь. В связи с тем, что структура подсистем определяет интерфейс конфигурации, следует уделять вопросам проектирования подсистем (и их иерархии) особое внимание. Система настройки прав доступа (роли). Данная система позволяет описывать наборы прав, соответствующие должностям пользователей или виду деятельности. Структура прав определяется конкретной конфигурацией системы. Например, могут быть введены такие наборы прав, как Главный бухгалтер, Кладовщик, Менеджер, Начальник отдела. Кроме того, для объектов, хранящихся в базе данных (справочник, документы, регистры и т. д.), могут быть определены права доступа к отдельным полям и записям. Сам список пользователей создается уже для конкретной организации. Каждому пользователю назначается одна или несколько ролей, основной интерфейс и язык, используемые при работе с программой. Отладчик. Для удобства разработки конфигурации в системе предусмотрен отладчик. Отладчик позволяет прослеживать исполнение программных модулей конфигурации, замерять сравнительное время исполнения, просматривать содержимое переменных. Хранилище конфигураций. Для групповой разработки конфигурации разработчики используют механизм хранилища конфигурации. Он позволяет распределять права доступа по модификации объекта конфигурации и производить необходимые изменения одновременно, а не последовательно. Поддержка конфигураций. Для удобства проведения обновлений конфигураций предусмотрен механизм формирования разработчиками типовых конфигураций файлов поставки и комплектов поставки (включают программу установки), а также механизм обновления типовых конфигураций, находящихся на поддержке. Глава 2. Работа с конфигурацией В этой главе будут рассмотрены общие приемы работы с объектами конфигурации, которые применимы к объектам любых типов. Особенности создания и редактирования объектов конфигурации различных типов рассматриваются далее в соответствующих главах Руководства. В данной главе в основном рассматриваются визуальные средства управления объектами конфигурации, имеющиеся в конфигураторе. Описание встроенного языка представлено в справке по встроенному языку. О сохранении и восстановлении информационной базы данных см. книгу «1С:Предприятие 8.3. Руководство администратора» или «1С:Предприятие 8.3. Клиент-серверный вариант. Руководство администратора». В информационной базе системы «1С:Предприятие» хранятся две конфигурации: ● основная конфигурация (редактируемая, далее просто конфигурация), ● конфигурация базы данных. Конфигурация базы данных определяет структуру таблиц базы данных и всю функциональность, с которой работают пользователи. Основная конфигурация используется только для изменения. Это позволяет вносить и сохранять изменения в конфигурации в процессе работы пользователей. Произвести изменение в конфигурации базы данных в процессе работы пользователей нельзя. О работе с конфигурацией базы данных см. здесь. 2.1. Открытие конфигурации Работа с конфигурацией осуществляется в окне Конфигурация. Для открытия конфигурации нужно выбрать пункт Конфигурация – Открыть конфигурацию. На экран выводится окно Конфигурация. Рис. 2. Конфигурация Чтобы увеличить рабочую область для работы с различными объектами, окно Конфигурация можно временно закрыть. Закрытие окна Конфигурация не означает завершения работы с отдельными ее составляющими, открытыми для редактирования: закрывается не конфигурация, а окно конфигурации. Для открытия окна Конфигурация нужно выбрать пункт Конфигурация – Окно конфигурации. 2.2. Сохранение конфигурации В процессе редактирования конфигурации могут быть созданы новые, изменены существующие или удалены имеющиеся объекты, подчиненные объекты (формы, реквизиты и т. д.). Любое такое изменение приводит к модифицированности конфигурации. Признак модифицированности конфигурации «*» показывается в заголовке окна Конфигурация. Для сохранения конфигурации (без завершения работы с конфигурацией) нужно выбрать пункт Конфигурация – Сохранить конфигурацию. Пункт доступен, если конфигурация была изменена, в отличие от редакторов текстового, табличного и HTML-документов, для которых пункт доступен всегда. Сохранение измененной конфигурации возможно в любой момент времени, даже если запущен режим 1С:Предприятие или производится отладка. 2.3. Закрытие конфигурации Для закрытия конфигурации нужно выбрать пункт Конфигурация – Закрыть конфигурацию. При этом если конфигурация была модифицирована (были произведены изменения), то конфигуратор выводит сообщение: Конфигурация была изменена. Сохранить изменения? Для сохранения внесенных изменений выбрать кнопку Да. Закрытие конфигурации с сохранением произведенных изменений возможно в любой момент времени, даже если запущен режим 1С:Предприятие или производится отладка. 2.4. Сохранение конфигурации в файл Для сохранения конфигурации в файл на диск нужно выбрать пункт Конфигурация – Сохранить конфигурацию в файл. На экран выводится стандартный диалог выбора файла. Следует выбрать каталог и указать имя файла, в который будет записана конфигурация. Сохраненный файл конфигурации необходим для операции сравнения и объединения конфигураций (см. здесь). ПРИМЕЧАНИЕ. Если конфигурация стоит на поддержке, то в информационной базе всегда хранится конфигурация поставщика. 2.5. Загрузка конфигурации из файла Для полной замены текущей конфигурации на конфигурацию, сохраненную в файле, нужно выбрать пункт Конфигурация – Загрузить конфигурацию из файла. 2.6. Дерево объектов конфигурации Конфигурация представляется в виде древовидной структуры, каждая ветвь которой описывает определенную составляющую конфигурации. Объекты конфигурации в дереве конфигурации представлены своими именами. Например, в ветви Документы располагаются объекты всех документов, используемых в конфигурации, а ветвь РасходнаяНакладнаяописывает объект документа Расходная накладная, ветвь Общие – Роли – все роли (права доступа к информации), используемые для различных видов пользователей, а ветвь Менеджер – права доступа менеджера отдела продаж и т. д. Корневые ветви дерева объединяют объекты конфигурации, логически связанные между собой и имеющие общее назначение. Например, ветвь Документы объединяет объекты типа Последовательности, Нумераторыи, собственно, объекты конфигурации типа Документ. Все эти объекты предназначены для организации ввода документов в системе «1С:Предприятие». Для работы в конфигураторе удобно использовать клавиатуру. Перечень сочетаний клавиш, которые могут использоваться в конфигураторе, можно получить во встроенной справке (раздел называется Сочетания клавиш (Конфигуратор)). Объекты конфигурации в пределах «своей» группы объектов конфигурации можно расставить в требуемом порядке. В таком же порядке объекты конфигурации будут выдаваться в различных списках. Для перестановки объекта конфигурации необходимо выделить его в окне Конфигурация и использовать пункты меню Действия – Переместить вверх или Действия – Переместить вниз, а также Действия – Упорядочить список. Для удобства поиска в дереве конфигурации объекта, редактируемого в данный момент (окно редактирования объекта, формы, макеты, модули), следует использовать пункт меню Правка – Найти в дереве. Предварительно нужно сделать активным окно редактирования объекта. После выполнения команды в дереве конфигурации будет выбран объект, данные которого в данный момент редактируются. Поиск в дереве метаданных можно осуществить двумя способами: ● Начать набирать на клавиатуре наименования объекта (при этом поиск будет выполняться только в открытых ветках дерева). ● Использовать стандартный механизм поиска (для вызова окна поиска необходимо нажать Ctrl + F). В этом случае будет открыто окно Результаты поиска, из которого можно перейти к требуемому объекту метаданных. Наименования объектов конфигурации, а также подчиненных объектов (реквизитов, табличных частей, форм и т. д.) можно перетаскивать в модули и текстовые документы с помощью мыши стандартным образом. 2.7. Настройка сортировки дерева метаданных Данный режим предназначен для сортировки объектов конфигурации. За один раз могут быть отсортированы однотипные объекты конфигурации, подчиненные одному объекту конфигурации. Рис. 3. Сортировка метаданных Например, формы конкретного справочника. ● Сортировать по – выбор свойства, по которому будет выполняться сортировка: ● Имени. Сортировка будет выполнена по именам объектов конфигурации. ● Синониму. Сортировка будет выполнена по синонимам объектов конфигурации. ● Комментарию. Сортировка будет выполнена по комментариям объектов конфигурации. ● Направление сортировки – выбор направления сортировки: ● По возрастанию. Будет выполняться сортировка в порядке возрастания. ● По убыванию. Будет выполняться сортировка по убыванию. 2.8. Создание и удаление объекта конфигурации 2.8.1. Создание объекта конфигурации Управление большинством объектов конфигурации выполняется в окне Конфигурация. В этом разделе будут изложены общие приемы создания объектов конфигурации, применимые к объектам конфигурации любых типов. Для создания нового объекта конфигурации необходимо выполнить следующие действия: ● в дереве конфигурации выделить наименование типа объекта конфигурации или любого из существующих объектов конфигурации того типа, который должен быть у создаваемого объекта; ● выбрать пункт Действия – Добавить окна Конфигурация. Создание нового подчиненного объекта можно также производить следующим образом: ● открыть окно редактирования объекта (выбрать пункт Действия – Изменить окна Конфигурация); ● указать нужный вид подчиненного объекта; ● нажать кнопку Добавить. В результате этих действий на текущей ветви дерева конфигурации появится новый объект, а на экран для редактирования свойств этого объекта будет автоматически вызвана палитра свойств, если палитра еще не была открыта (о работе с палитрой свойств см. здесь). Для объектов, имеющих широкий набор редактируемых свойств, дополнительно к палитре свойств может вызываться окно редактирования (о работе в окне см. здесь). Новому объекту конфигурации присваивается условное имя, состоящее из слова, соответствующего типу создаваемого объекта, и числа – порядкового номера нового объекта конфигурации. Например, для нового справочника имя будет начинаться со слова «Справочник». Палитра свойств объекта будет содержать значения свойств, задаваемые по умолчанию. В конфигураторе контролируются имена объектов перед обновлением конфигурации базы данных и перед формированием поставки. Для объектов, которые могут иметь подчиненные объекты (например, справочник может иметь реквизиты, табличные части, формы и макеты), производится создание нужного числа и состава подчиненных объектов. Их формирование и настройка производятся с использованием различных средств конфигуратора. Для облегчения создания некоторых составных частей (запросов, макетов и процедур печати, движений регистров, ввода на основании) объектов в конфигураторе имеются различные конструкторы – вспомогательные инструменты, облегчающие процесс проектирования (подробнее см. здесь). Для тех типов объектов, которые могут иметь формы, в системе имеются конструкторы форм – вспомогательные инструменты, облегчающие разработку форм объектов. Конструктор форм запускается при создании новой формы (о работе с конструктором форм см. здесь). Для редактирования форм предназначен редактор форм (о работе с ним см. здесь). Редактирование макетов, которые основаны на табличном документе, производится редактором табличных документов (см. здесь). Для формирования макетов можно использовать конструктор печати (см. здесь) и конструктор выходных форм (см. здесь). Редактирование макетов, которые основаны на текстовом документе, производится редактором текстовых документов (см. здесь). Программы на встроенном языке, располагающиеся в модулях, создаются с использованием текстового редактора (см. здесь). Для создания нового объекта можно использовать механизм перетаскивания объектов с помощью мыши. При перетаскивании объекта (как в пределах «своей» ветки, так и за ее пределы) создается новый объект. При этом производится проверка возможности использования исходных свойств объекта в результирующем. Если результирующий объект поддерживает свойства, то они копируются. Пример успешного копирования: перенос реквизитов, макетов справочника в документ. При копировании того же справочника в объект типа Стильуспешно перенесутся только имя, синоним и комментарий. Если исходный объект содержит подчиненные объекты (реквизиты, формы, макеты и др.), то при перетаскивании на «подобный» уровень (например, перетаскивается объект Справочник.Валютыв ветвь Документы) скопируются реквизиты, формы, макеты и табличные части. При этом некоторые свойства составных частей могут быть изменены (например, для документа отсутствует свойство Родитель). 2.8.2. Удаление объекта конфигурации Для удаления объекта конфигурации нужно указать его в дереве конфигурации и выбрать пункт Действия – Удалить окна Конфигурация. Если на объект нет ссылок в других объектах конфигурации, объект удаляется. Если на объект есть ссылки (объект используется), то выдается сообщение: Объект не может быть удален, так как на него есть ссылки в других объектах! А в окне сообщений выводится список использования данного объекта. На рис. 4 приведен пример окна сообщений при попытке удаления документа ПриходТовара. Рис. 4. Служебные сообщения Для перехода к объекту, в котором используется ссылка на удаляемый объект, нужно дважды щелкнуть мышью наименование этого объекта в окне сообщений. 2.8.3. Ссылки на объект конфигурации С точки зрения взаимосвязи объекты конфигурации делятся на несвязанные (например, реквизит Закупочная цена, имеющий тип Число) и связанные (например, реквизит Единица измерения справочника Номенклатура, ссылающийся на справочник Единицы измерения). Часто бывает полезно знать, какие объекты конфигурации ссылаются на данный объект, а также выяснить, какие объекты связаны с данным объектом. Для этих целей используются команды Действия – Поиск ссылок на объект и Действия – Поиск ссылок в объекте окна Конфигурация. На экран выводится диалог (см. рис. 5). Рис. 5. Ссылки на объект В нем нужно указать область поиска (свойства, подчиненные объекты) и нажать кнопку ОК. Если ссылки есть, то при выполнении команды в окно сообщений выводится список ссылок. Если ссылок нет, то на экран выводится одно из предупреждений: ● Ссылок на данный объект не существует, ● Ссылок в объекте не обнаружено. Команда Действия – Поиск ссылок в объекте выводит перечень всех агрегатных типов, которые использованы в объекте. Для перехода по ссылке необходимо дважды щелкнуть мышью соответствующую строку с наименованием объектассылки в окне сообщений. 2.9. Палитра свойств Процесс редактирования объекта конфигурации заключается в изменении свойств объекта, чтобы добиться требуемого поведения объекта в процессе использования. Палитра свойств – это окно в виде набора свойств, которые можно определить для объекта конфигурации. Состав свойств зависит от типа редактируемого объекта. В этом разделе описываются основные приемы работы с палитрой свойств. Для вызова палитры свойств нужно указать объект конфигурации и выбрать пункт Правка – Свойства. В палитре свойств свойства объекта группируются по категориям. Числокатегорий и состав свойств, размещенных в каждой категории, зависит от вида рассматриваемого объекта. Например, для реквизита документа палитра свойств содержит только категории свойств Основные, Характеристики и Тип данных. Состав свойств категории также зависит от вида объекта. Даже в случае выбора одинаковых видов объектов состав свойств определяется индивидуальными настройками конкретных объектов. Например, для иерархического справочника в состав свойств табличного поля категории Использование дополнительно включаются свойства Дерево, Иерархический просмотр и другие. Состав свойств также зависит от выбранных значений других свойств. Например, в свойстве Типпри выборе примитивного типа Числодобавляются свойства, характеризующие выбранный тип: Длина, Точностьи Неотрицательное. Панель инструментов палитры свойств состоит из пяти кнопок (см. рис. 6). С помощью первых трех кнопок производится управление показом свойств. Рис. 6. Кнопки окна свойств Далее описываются кнопки панели: ● Сортировка по алфавиту. Производит вывод свойств объекта, отсортированных по алфавиту (кнопка нажата). Сами категории не показываются. ● Сортировка по категориям. Производит вывод свойств объекта, отсортированных по категориям (кнопка нажата). ● Показывать только важные. При нажатой кнопке выводятся только важные свойства объекта; при отжатой – все свойства. ● Отменить редактирование. Отмена изменений в текстовом поле свойства. ● Сохранить. Записать изменения в текстовое поле свойства. Категории свойств можно располагать в виде закладок или списком. При расположении свойств списком сами свойства могут быть представлены в виде списка по категориям или по алфавиту (при этом наименования категорий не показываются). Для выбора способа показа категорий (должен быть включен показ категорий – кнопка Сортировка по категориям нажата) в любом свободном месте окна палитры свойств нужно открыть контекстное меню и выбрать необходимый способ показа (Закладками или Списком). Если выбран способ показа Закладками, то кнопки (Сортировка по алфавиту и Сортировка по категориям) становятся недоступными. При выборе способа показа Закладками для перехода к свойствам другой категории необходимо щелкнуть мышью соответствующую закладку. Для возврата к режиму показа категорий списком в окне свойств контекстного меню нужно выбрать пункт Списком. Если выбран способ показа Списком, то свойства объекта располагаются по категориям или по алфавиту. Для расположения по алфавиту следует нажать кнопку Сортировка по алфавиту панели инструментов палитры свойств. Все свойства показываются подряд в алфавитном порядке. Для расположения по категориям нужно нажать кнопку Сортировка по категориям панели инструментов. Все свойства группируются по категориям в виде списка (одна под другой). Наименование категории показывается полужирным шрифтом. Слева от наименования расположена кнопка управления показом свойств, входящих в категорию. Кнопка позволяет скрыть или показать набор свойств. Двойной щелчок мыши по наименованию категории свойств приводит к сворачиванию всех остальных категорий и показу свойств данной категории. При нажатой кнопке Показывать только важные производится показ только важных (основных) свойств объекта (независимо от режима показа списком или закладками, по категориям или по алфавиту). Для просмотра всех свойств нужно снова нажать кнопку Показывать только важные. В зависимости от вида объекта его свойства бывают доступными или недоступными для изменения. Например, в текстовом документе свойства объекта предназначены только для показа числа строк и символов, а также статуса документа, но они недоступны для изменения. Каждое свойство в палитре свойств имеет наименование, а также развернутое пояснение. Режим получения развернутого описания устанавливается с помощью команды контекстного меню Пояснение, вызываемого в любом свободном месте палитры свойств (вне полей ввода). Если этот режим установлен, то при выборе свойства в нижней части палитры свойств выводится развернутое пояснение. Помимо пояснительного описания может выводиться имя свойства для доступа к значению из программного модуля. Для свойств, которые могут быть доступны с помощью средств встроенного языка, можно настроить их показ в виде наименования или в виде имен свойств. Например, свойство с наименованием Тип значения имеет имя ТипЗначения. Режим показа можно изменить с помощью команды Отображать имена свойств контекстного меню. Имена свойств показываются в соответствии с выбранным вариантом встроенного языка. ВНИМАНИЕ! Имена свойств объектов метаданных и объекта метаданных Конфигурация не отображаются. Способ ввода значений в палитре свойств зависит от типа редактируемого свойства. Рис. 7. Возможные действия Для текстовых реквизитов – это обычный ввод текста (можно использовать буфер обмена), для свойств типа «флажок» – щелчок мышью. Значения некоторых свойств выбираются из списков. Поля таких свойств имеют кнопку списка выбора (см. рис. 7). Если поле свойства имеет кнопку выбора (см. рис. 7), то при ее нажатии открывается окно, в котором производится выбор значения свойства (или его просмотр в случае, когда редактирование объекта невозможно, например, для не захваченных в хранилище конфигурации объектов или для объектов, находящихся на поддержке без возможности редактирования). К таким свойствам относится, например, выбор файла картинки, определение цвета и другие. По кнопке просмотра (см. рис. 7) для текстовых данных вызывается окно редактирования строки на разных языках, для событий – процедура модуля формы, отрабатывающая данное событие, для свойств из категории Представление – существующая форма объекта данных. По кнопке очистки (см. рис. 7) производится сброс значения указанного свойства. Кнопка регулирования (см. рис. 7) позволяет увеличивать или уменьшать числовое значение на 1 в сторону больших или меньших значений. Кнопки в полях могут комбинироваться. При начале редактирования любого текстового поля палитры свойств становятся доступными кнопки панели инструментов палитры свойств Отменить редактирование (см. рис. 6) и Сохранить (см. рис. 6). Нажатие кнопки отмены отменяет произведенные изменения. Нажатие кнопки сохранения сохраняет изменение. В палитре свойств могут располагаться ссылки, с помощью которых открываются связанные с выбранным объектом различные формы. Например, вызов справочной информации (описание) объекта конфигурации, различных форм, процедур модуля формы. Такие ссылки изображаются подчеркнутым текстом. Нажатие ссылки открывает окно, связанное с этой ссылкой. Если просматриваются свойства объекта, редактирование которого запрещено (например, объект не захвачен в хранилище (см. здесь), то допускается открытие диалога редактирования типа в режиме «только просмотр». 2.10. Окно «Дополнительно» Для удобства просмотра и установки основных интерфейсных свойств объекта конфигурации можно использовать окно Дополнительно. Для его открытия нужно выбрать пункт Правка – Дополнительно. Для просмотра свойств достаточно в окне Конфигурация выбрать требуемый объект. Его свойства будут сразу показаны в окне Дополнительно. Информация в окне распределена по закладкам. Для объектов метаданных допустимо включение объекта в те или иные подсистемы независимо от взаимной подчиненности подсистем. Объект может быть отнесен одновременно и к «родительской», и к подчиненной ей подсистемам. Это выполняется на закладке Подсистемы. Рис. 8. Закладка «Подсистемы» На закладке Права представлен список ролей и права каждой роли по данному объекту. Рис. 9. Закладка «Права» В табличном поле Ограничение доступа к данным редактируются ограничения доступа к данным на уровне отдельных полей и записей (подробнее см. здесь). На закладке Функциональные опции представлен список функциональных опций, существующих в системе. Можно отметить те функциональные опции, к которым привязан данный объект метаданных. Рис. 10. Закладка «Функциональные опции» Закладка Общие реквизиты позволяет указывать, в состав каких общих реквизитов входит текущий объект. Правила редактирования в этом окне одинаковы с правилами редактирования в окне Состав свойства общего реквизита. Рис. 11. Закладка «Общие реквизиты» На закладке Планы обмена представлен список планов обмена. В списке отметками указаны те планы обмена, в которых производится учет изменений по данному объекту. Рис. 12. Закладка «Планы обмена» На закладке Командный интерфейс можно редактировать видимость стандартных и пользовательских команд выбранного объекта метаданных в разрезе различных подсистем. Команды, входящие в начальную страницу, собраны в узел Рабочий стол. Рис. 13. Закладка «Командный интерфейс» На закладке Ввод на основании представлен список объектов, на основании которых может вводиться данный объект, и список объектов, являющихся основанием планов обмена. Рис. 14. Закладка «Ввод на основании» С помощью флажка Только выбранные можно отображать только выбранные объекты или все объекты, которые могут вводиться на основании, где выбранные объекты отмечены флажками. На закладке Настройка поставки можно выбрать правило поставки для выбранного объекта конфигурации, аналогично тому, как это делается в специальном диалоге настройки поставки (см. здесь). Рис. 15. Закладка «Настройка поставки» 2.11. Окно редактирования объекта Для основных объектов конфигурации (справочники, документы, журналы документов и др.) редактирование свойств объектов, управление составом подчиненных объектов, настройку взаимодействия объектов удобно производить с помощью окна редактирования объекта. В большинстве случаев окно редактирования объекта вызывается при выборе пункта Действия – Изменить окна Конфигурация. Редактируемые свойства располагаются на нескольких закладках. Каждая закладка содержит набор реквизитов для настройки свойств объекта определенного вида. Так, на закладке Основные вводятся свойства Имя, Синоним и Комментарий; на закладке Подсистемы указывается, в каких подсистемах используется данный объект. Переход по закладкам производится с помощью кнопок Далее > и < Назад. Кроме того, нужная закладка может быть выбрана указателем мыши. В форме есть кнопка Действия, при нажатии которой на экран выводится контекстное меню объекта. С помощью команд этого меню можно открыть нужную форму, модуль объекта (если есть), вызвать нужный конструктор и другие действия. Состав закладок и набор управляющих элементов на однотипных закладках может меняться в зависимости от типа объекта конфигурации. Например, для объекта Справочникокно редактирования выглядит следующим образом: Рис. 16. Закладка «Основные» На закладке Основные указываются свойства Имя, Синоним и Комментарий. Кроме того, на данной закладке задаются свойства, участвующие в формировании представления объекта в командном интерфейсе (подробнее см. здесь). На закладке Подсистемы указывается, в каких подсистемах используется данный объект. Допустимо включение объекта в те или иные подсистемы независимо от взаимной подчиненности подсистем. Объект может быть отнесен одновременно и к «родительской», и к подчиненной подсистемам. Отнесение объекта к подсистемам определяет, в каких фрагментах командного интерфейса будут отображаться команды редактируемого объекта. Подробнее о командном интерфейсе см. здесь. На закладке Данные создаются реквизиты, ресурсы, измерения, табличные части и реквизиты табличных частей, а также другие подчиненные объекты (в зависимости от типа объекта). Кроме того, на закладке могут содержаться другие элементы управления для настройки свойств, характерных для конкретных типов объектов. Так, для справочника определяется длина наименования и кода, указывается тип кода и основное представление элемента справочника. Рис. 17. Закладка «Данные» С помощью кнопок панели инструментов, расположенной над списками подчиненных объектов, производится добавление, удаление и упорядочивание этих объектов. Свойства подчиненных объектов задаются в палитре свойств. Если окно редактирования открыто для объекта, редактирование которого запрещено (например, объект не захвачен в хранилище (см. здесь)), то допускается открытие диалога редактирования типа в режиме «только просмотр». На закладке Формы ведется управление формами объекта и выбираются основные формы. Рис. 18. Закладка «Формы» Подробнее про основные и дополнительные формы см. здесь. В свойстве Ввод по строке указываются те реквизиты объекта, по которым система будет выполнять поиск информации. Подробнее про ввод по строке см. здесь. Свойство Быстрый выбор отвечает за режим выбора по умолчанию. Подробнее о работе данного свойства см. здесь. На закладке Команды имеется возможность задать пользовательские команды, связанные с данным объектом. Описание видов команд см. здесь. При добавлении новой формы запускается конструктор форм, с помощью которого производится выбор вида формы, подбор состава размещаемых в форме реквизитов и построение собственно формы. Подробнее о работе с конструктором форм см. здесь. Основные приемы редактирования формы см. здесь. На закладке Макеты ведется управление макетами объекта. При добавлении нового макета запускается конструктор макетов, с помощью которого создается макет. Подробнее о работе с конструктором макетов см. здесь. Ниже списка макетов располагается кнопка Конструкторы, при нажатии которой открывается подменю для выбора вида конструктора (состав конструкторов зависит от типа объекта): ● При выборе пункта Конструктор печати запускается конструктор печати, с помощью которого создается макет и процедура для печати. Подробнее о работе с конструктором печати см. здесь. ● При выборе пункта Конструктор выходной формы запускается конструктор выходных (отчетных) форм (см. здесь). На закладке Права определяются права по объектам данного типа для каждой созданной роли. Для прикладных объектов (справочники, документы, планы видов характеристик, планы счетов, планы видов расчета, регистры, бизнес-процессы и задачи) на закладке Планы обмена указывается список объектов типа ПланОбмена. Следует установить пометку для тех планов обмена, в которых учитываются изменения редактируемого объекта. На закладке Прочее расположены кнопки открытия модуля объекта, модуля менеджера, справочной информации, а также может располагаться кнопка Предопределенные для открытия списка предопределенных элементов объекта (для справочников, планов видов характеристик, планов счетов, планов видов расчетов). Также на закладке могут располагаться реквизиты управления блокировкой (см. здесь) и настройки использования полнотекстового поиска (см. здесь). Эти реквизиты присутствуют только для следующих прикладных объектов: ● справочники, ● документы, ● планы видов характеристик, ● планы счетов, ● планы видов расчета, ● регистры, ● бизнес-процессы, ● задачи. Некоторые объекты могут содержать специальные закладки, относящиеся только к данному типу объектов: ● для объекта типа Справочник– это закладки Иерархия, Владельцы, Нумерация; ● для объекта Документ– это Нумерация, Движения, Журналы и Последовательности; ● для объекта ПланыВидовХарактеристик– Иерархия; ● для объекта ПланыВидовРасчетов– Расчет и Ввод на основании; ● для объекта ПланыСчетов– Субконто; ● для объекта РегистрыРасчета– Перерасчеты; ● для объекта Задача– Адресация; ● для всех регистров – Регистраторы; ● для объектов, изменения которых могут учитываться планами обмена, – Обмен данными. 2.12. Создание раздела справочной информации К некоторым объектам конфигурации можно «прикрепить» текст, объясняющий назначение и порядок использования объекта. Такой текст называется пользовательским описанием. При работе с системой «1С:Предприятие» пользователь может вывести описание на экран для просмотра. Создание и корректировка пользовательского описания выполняются при помощи встроенного HTML-редактора, который можно вызвать из палитры свойств объекта по ссылке Открыть свойства Справочная информация. Создание и редактирование текста описания производятся средствами HTML-редактора. Чтобы установить название, в тексте главы следует создать заголовок первого уровня, используя тег <H1> языка разметки. Следует иметь ввиду, что тег <STYLE> (и его содержимое), который может быть указан при ручном редактировании текста справочной информации вне тега <BODY>, будет проигнорирован при отображении главы справки в режиме «1С:Предприятие». Если требуется применить какое-либо специальное оформление для страницы справочной информации, его определение следует выполнять внутри тега <BODY>. Если установлено свойство Включать в содержание справки, то для данного объекта в содержание справки может включаться элемент по значению синонима объекта. Независимо от установки данного свойства в список индексов (для поиска в справке) включается строка по значению синонима объекта. Следует помнить, что появление объекта в дереве содержания зависит от значения одноименного свойства у подсистем, в состав которых входит объект (см. здесь). 2.13. Работа с конфигурацией базы данных 2.13.1. Дерево объектов конфигурации базы данных Для просмотра структуры конфигурации базы данных, свойств, форм, макетов и другой информации об объектах можно открыть окно конфигурации базы данных. Для этого нужно выбрать пункт Конфигурация – Конфигурация базы данных – Открыть окно конфигурации БД. По виду оно не отличается от окна Конфигурация. Рис. 19. Конфигурация базы данных Приемы работы с объектами конфигурации базы данных совпадают с приемами работы в окне Конфигурация с тем лишь отличием, что все объекты доступны только для чтения (просмотра). 2.13.2. Обновление конфигурации базы данных В процессе редактирования конфигурации могут быть созданы новые, изменены существующие или удалены имеющиеся объекты. Текущая структура базы данных может быть отлична от структуры конфигурации. Отличие конфигураций показывается в заголовке окна Конфигурация символами <!>. ПРИМЕЧАНИЕ. Знак отличия <!> конфигураций появляется только после сохранения изменений в основной конфигурации. Однако после сохранения основной конфигурации можно продолжить внесение изменений, и в этом случае в заголовке окна Конфигурация будут присутствовать признаки изменения для обеих конфигураций. Чтобы выполнить приведение в соответствие конфигурации и конфигурации базы данных, необходимо произвести обновление конфигурации базы данных. Для этого нужно выбрать пункт Конфигурация – Обновить конфигурацию базы данных. Если основная конфигурация еще не была сохранена, то сначала конфигуратор выполнит ее сохранение, а потом произведет обновление конфигурации базы данных. Если при обновлении конфигурации базы данных было открыто окно сообщений, то оно очищается. ВНИМАНИЕ! Обновление конфигурации базы данных может потребовать прекращения работы всех пользователей. Перед обновлением можно сравнить конфигурации, а также провести их объединение. Если на момент выполнения обновления конфигурации базы данных выполнялась отладка, то после сохранения текущей конфигурации на экран выводится вопрос: Для обновления конфигурации базы данных необходимо прекратить отладку. Продолжить? При ответе Да отладка прекращается, и конфигурация базы данных обновляется. При ответе Нет не производится обновление, и отладка не прекращается. Обновление конфигурации базы данных требует монопольного доступа конфигуратора к информационной базе. В зависимости от наличия пользователей, работающих с базой данных, и их режимов работы, возможно несколько вариантов поведения системы: ● конфигуратор выдает сообщение об ошибке исключительной блокировки в том случае, если: ● используется файловый вариант базы данных; ● есть сеансы, подключенные к информационной базе без использования веб-сервера; ● нет сеансов, работающих через веб-сервер; ● обновление конфигурации требует реструктуризации базы данных. ● конфигуратор предлагает завершить все сеансы и повторить обновление, если: ● обновление конфигурации требует реструктуризации базы данных; ● с файловым вариантом информационной базы работают веб-клиенты или тонкие клиенты, подключенные через веб-сервер; ● в остальных случаях конфигуратор предлагает выполнить динамическое обновление. ПРИМЕЧАНИЕ 1. При выдаче диагностических сообщений указываются характеристики сеансов, которые мешают выполнению действия. Если количество сеансов меньше или равно 5, то выводится подробный список сеансов (с указанием имени компьютера, типа приложения и т. д.), в противном случае выводится общее число сеансов. ПРИМЕЧАНИЕ 2. Работа информационной базы в монопольном режиме не переводит базу данных Microsoft SQL Server в однопользовательский (single user) режим. ПРИМЕЧАНИЕ 3. Для ускорения процесса реструктуризации информационной базы, при использовании СУБД Microsoft SQL Server, рекомендуется режим восстановления для базы данных устанавливать в значение Простой или С неполным протоколированием. Смену режима можно выполнять или перед выполнением реструктуризации или на постоянной основе, если не требуется выполнять восстановление базы данных на произвольный момент времени. Перед сменой режима восстановления базы данных необходимо выполнить резервное копирование базы данных! Ошибка монопольного доступа Если система не может получить монопольный доступ, то имеется возможность только дождаться, пока пользователи будут отключены от информационной базы, и повторить операцию обновления. Рис. 20. Ошибка исключительной блокировки Завершение сеансов и попытка обновления Если для обновления конфигурации базы данных необходимо завершить все сеансы, то пользователю выдается сообщение (см. рис. 21). Рис. 21. Отключение сеансов для обновления Если выбрана команда Завершить сеансы и повторить, то у пользователя запрашивается подтверждение выбранного действия (Завершение сеансов приведет к аварийному завершению работы пользователей! Выполнить завершение сеансов?) и в случае утвердительного ответа происходит попытка завершения работы всех сеансов информационной базы. Затем выполняется попытка повторного сохранения конфигурации базы данных. Завершение всех сеансов приведет к аварийному завершению работы всех клиентских приложений. Возможны ситуации, когда завершение работы сеанса невозможно. В этом случае попытку обновления конфигурации базы данных можно либо выполнить позже, либо завершить работу сеансов другими способами (например, выполнив перезагрузку рабочих процессов). Динамическое обновление Если есть возможность выполнить динамическое обновление, пользователю выдается специальное сообщение (см. рис. 22). Рис. 22. Динамическое обновление Если выбрана команда Обновить динамически, то выполняется обновление без завершения работы пользователей. Предполагается, что выполненные изменения будут записаны динамически в виде версии изменений конфигурации (конфигурация базы данных при этом не изменяется). Допускается выполнение повторных изменений основной конфигурации. Если при очередной попытке обновления конфигурации базы данных может быть установлен монопольный режим работы, конфигуратор осуществляет обновление конфигурации базы данных с учетом всех изменений (как текущих, так и предыдущих). ПРИМЕЧАНИЕ. Если используется клиент-серверный вариант работы с информационной базой, то после обновления конфигуратор будет перезапущен. При этом все несохраненные изменения в текстовых, табличных и других документах будут утеряны. Если было выполнено динамическое обновление, то работающие в этот момент пользователи продолжают работать со старой конфигурацией. Для того чтобы начать работать с обновленной конфигурацией, пользователю необходимо перезапустить систему «1С:Предприятие». Для контроля и оповещения пользователей о произведенных динамических изменениях следует использовать метод глобального контекста КонфигурацияБазыДанныхИзмененаДинамически(). ПРИМЕЧАНИЕ. После выполнения обновления конфигурации базы данных все версии, созданные динамическим обновлением, будут удалены. Если были обнаружены изменения, требующие реструктуризации базы данных, то на экран выводится диалог со списком таких изменений для подтверждения обновления. Рис. 23. Реорганизация информации Для подтверждения сохранения нужно нажать кнопку Принять, для отказа – кнопку Отмена. 2.13.3. Фоновое обновление конфигурации базы данных 2.13.3.1. Общее описание Обновление конфигурации базы данных, которое связано с реструктуризацией базы данных, выполняемое для информационных баз большого объема, может занимать длительное время. Во время выполнения обновления, работать с информационной базой не возможно. Для того чтобы свести потери времени на эту операцию к минимуму, существует специальный режим, выполняющий обновление конфигурации базы данных в фоновом режиме. Фоновое обновление конфигурации базы данных характеризуется следующими особенностями: ● Доступно только в клиент-серверном варианте информационной базы; ● Может выполняться при закрытом конфигураторе. ● Большая часть фонового обновления конфигурации базы данных выполняется без монопольного доступа к базе данных (включая выполнение операции реструктуризации базы данных). ● Во время фонового обновления недоступны следующие операции: ● Редактирование конфигурации. ● Отладка прикладного решения. ● Выполнение операции обновления конфигурации базы данных. ● Не допускается использование методов УстановитьРежимАгрегатов(), УстановитьИспользованиеАгрегатов(), ПерестроитьИспользованиеАгрегатов(). ● Изменение содержимого плана счетов или плана видов расчета, если связанный с ним регистр бухгалтерии или регистр расчета участвует в операции фонового обновления. Попытка изменить содержимое таких планов счетов или планов вида расчета вызывает ошибку. ● Фоновое обновление конфигурации можно поставить «на паузу» длительностью не более 48 часов. Если «пауза» продлится более 48 часов – фоновое обновление будет отменено. ● Не поддерживается работа фонового обновления для конфигураций, находящихся в режиме совместимости с версией 8.1 (см. здесь). ● Не поддерживается работа фонового обновления конфигурации базы данных при работе на СУБД IBM DB2 9.1. Процесс фонового обновления конфигурации состоит из нескольких этапов: ● Фаза обработки: ● Выполняется длительное время. ● Запуск данной фазы может быть выполнен любым способом: ● Интерактивно, из конфигуратора; ● Из встроенного языка (с помощью соответствующих методов); ● С помощью режима пакетного запуска конфигуратора. ● Во время выполнения фазы пользователи могут работать с информационной базой. ● Выполняется реструктуризация основного объема данных для следующих объектов конфигурации: ● Справочники, ● Документы, ● Журналы документов, ● Регистры сведений, ● Регистры накоплений, ● Регистры бухгалтерии, ● Регистры расчета, ● Последовательности, ● Планы счетов, ● Бизнес-процессы, ● Задачи. ● Во время выполнения фазы обработки, система фиксирует все измененные данные для вышеперечисленных объектов, по аналогии с механизмами обмена данными. ● Фаза актуализации: ● Запускается автоматически, после окончания фазы обработки, с интервалом 1 минута. ● Во время выполнения фазы пользователи могут работать с информационной базой. ● Фаза состоит из автоматически повторяющихся итераций. Каждая итерация анализирует изменения, накопленные с момента выполнения предыдущей итерации (или завершения фазы обработки) и выполняет реструктуризацию накопленных изменений. ● Итерации завершаются в момент перехода к следующей фазе. ● Фаза принятия изменений: ● Требует монопольный доступ к информационной базе. ● Во время выполнения фазы пользователи не могут работать с информационной базой. ● Первым шагом этой фазы выполняется актуализация данных, накопленных с момента проведения последней, перед текущей фазой, итерации фазы актуализации. ● Затем выполняется реструктуризация данных, не участвующих в фазах обработки и актуализации. В этих данных не предполагается большого объема изменений, и их реструктуризация выполняется быстро. ● Следующим шагом выполняется принятие всех изменений, выполненных в базе данных. ● После этого обновление конфигурации базы данных завершается. Если фоновое обновление запущено так, что не требуется выполнения реструктуризации базы данных, то в этом случае все обновление выполняется в фазе принятия изменений, переход к которой возможен сразу после начала фонового обновления. Во время фонового обновления имеется возможность остановить работу сервера или поставить процесс фонового обновления «на паузу». После остановки сервера или после аварийного завершения рабочего процесса, обслуживающего системное фоновое задание, выполняющее обновление, создание первого сеанса будет происходить несколько большее время, нежели обычно. Это связано с восстановления фонового обновления. Однако сам процесс фонового обновления находится в приостановленном состоянии. Для продолжения работы необходимо возобновить работу фонового обновления. Такое поведение реализовано для того, чтобы не произошло зацикливание системы в том случае, если причиной аварийного завершения рабочего процесса, обслуживающего фоновое обновление, является собственно фоновое обновление. После восстановления работоспособности сервера, фоновое обновление конфигурации базы данных продолжает работу следующим образом: ● Если работа была прервана в фазе обработки, то процесс продолжается с последнего объекта конфигурации, обработка которого не была завершена. ● Если работа была прервана в фазе актуализации – незаконченная итерация начинается заново. СОВЕТ. Рекомендуется отменять запущенный процесс фонового обновления конфигурации базы данных в тех случаях, когда не планируется завершение фонового обновления конфигурации базы данных (например, процесс поставлен на бесконечную «паузу»). Выполнение данной рекомендации положительно скажется на характеристиках системы, т. к. не будет происходить регистрация изменений для выполнения фазы актуализации. При выполнении операции фоновой реструктуризации следует учитывать некоторые особенности работы системы: ● Если регистр бухгалтерии или накопления добавлен в состав разделителя, то данный регистр обрабатывается во время фазы принятия изменений. ● Если изменен тип независимого разделителя (см. здесь), то все объекты, входящие в состав этого разделителя, обрабатываются во время фазы принятия изменений. ● Если изменяется тип измерения, входящего в основной отбор независимого регистра сведений, то такой регистр обрабатывается во время фазы принятия изменений. 2.13.3.2. Диалог фонового обновления конфигурации базы данных Для вызова операции фонового обновления конфигурации базы данных нужно выбрать пункт меню Конфигурация – Конфигурация базы данных – Фоновое обновление конфигурации базы данных. Рис. 24. Диалог фонового обновления конфигурации базы данных Нажатие кнопки Запустить запускает фазу обработки. При этом в окне служебных сообщений отображается текст: Старт фонового обновления конфигурации БД прошел успешно Конфигурация недоступна для редактирования. Выполняется фоновое обновление конфигурации базы данных. После запуска фонового обновления конфигурация блокируется от изменения. Во время выполнения любой фазы, работу фонового обновления можно приостановить с помощью кнопки Приостановить. Для того, чтобы продолжить выполнение фонового обновления служит кнопка Продолжить. После окончания фазы обработки начинается фаза актуализации, во время выполнения которой можно перевести систему к выполнению фазы принятия изменений с помощью кнопки Завершить или отказаться от обновления с помощью кнопки Отменить. СОВЕТ. Рекомендуется отменять запущенный процесс фонового обновления конфигурации базы данных в тех случаях, когда не планируется завершение фонового обновления конфигурации базы данных (например, процесс поставлен на бесконечную «паузу»). Выполнение данной рекомендации положительно скажется на характеристиках системы, т. к. не будет происходить регистрация изменений для выполнения фазы актуализации. Флажок Разрешить динамическое обновление служит для того, чтобы определить, нужно ли при нажатии на кнопку Запустить попытаться выполнить динамическое обновление вместо запуска процесса фонового обновления конфигурации базы данных. Если этот флажок установлен, то сразу же после нажатия на кнопку Запустить будет производиться проверка на возможность выполнить динамическое обновление конфигурации. В случае, когда конфигурация допускает такую возможность, вместо фонового обновления конфигурации базы данных будет производиться динамическое обновление. Флажок Выполнять на сервере служит для того, чтобы определить, где будет выполняться запуск, завершение и отмена. Если этот флажок сброшен, то данные действия будут выполняться на стороне клиентского приложения, а если установлен – то на стороне сервера «1С:Предприятия». Кроме того, если установлен данный флажок, то можно выполнять обновление конфигурации только при наличии права ОбновлениеКонфигурацииБазыДанных, без установленного права Администрирование. 2.13.4. Сохранение конфигурации базы данных в файл Для сохранения конфигурации базы данных в файл на диск нужно выбрать пункт Конфигурация – Конфигурация базы данных – Сохранить конфигурацию БД в файл. На экран выводится стандартный диалог выбора файла. Необходимо выбрать каталог и указать имя файла, в который будет записана конфигурация базы данных. Сохраненный файл конфигурации базы данных необходим для операции сравнения и объединения конфигураций (см. здесь). 2.13.5. Сравнение конфигурации и конфигурации базы данных Если в процессе внесения изменений в конфигурацию требуется получить отчет об отличиях от конфигурации базы данных, то следует выбрать пункт Конфигурация – Конфигурация базы данных – Сравнить, объединить с конфигурацией БД. В случае необходимости можно восстановить измененные объекты. 2.13.6. Отказ от изменений в конфигурации Для отказа от изменений в конфигурации достаточно выбрать пункт Конфигурация – Конфигурация базы данных – Вернуться к конфигурации БД. ПРИМЕЧАНИЕ. Пункты меню Сохранить конфигурацию БД в файл... и Вернуться к конфигурации БД доступны даже в случае закрытой редактируемой конфигурации. Команда Вернуться к конфигурации БД по-прежнему недоступна, когда информационная база подключена к хранилищу конфигурации. 2.14. Запуск «1С:Предприятия» В конфигураторе предусмотрен запуск режима 1С:Предприятие. Для этого нужно выбрать пункт Сервис – 1С:Предприятие. Часто необходимо запустить «1С:Предприятие» в режиме отладки. Для этого существует команда Отладка – Начать отладку (подробнее про отладчик см. здесь). Если конфигурация была модифицирована (были произведены изменения), то конфигуратор выводит вопрос: Редактируемая конфигурация отличается от конфигурации базы данных. Произвести обновление конфигурации базы данных? Для сохранения внесенных изменений следует выбрать кнопку Да. Если выбрана кнопка Нет, то режим 1С:Предприятие запускается без сохранения конфигурации. В случае отказа на экран выводится вопрос: Конфигурация базы данных не соответствует сохраненной конфигурации. Продолжить? Если выбрана кнопка ОК, то запускается режим 1С:Предприятие с прежней конфигурацией базы данных. Если выбрана кнопка Отмена, то запуск режима 1С:Предприятие не производится. 2.15. Выгрузка и загрузка файлов конфигурации Механизм выгрузки и загрузки файлов конфигурации позволяет осуществлять выборочную выгрузку/загрузку некоторых свойств объектов конфигурации (модулей, макетов и справочной информации). Для выгрузки свойств нужно выбрать пункт Конфигурация – Выгрузить файлы конфигурации. Рис. 25. Выгрузить файлы конфигурации В открывшемся окне следует отметитьотметьте те объекты конфигурации, которые нужно выгрузить, указатьукажите вид выгружаемых данных и укажите каталог, в который будет осуществлена выгрузка. Для начала выгрузки нажатьнажмите кнопку Выполнить. Выгружаемые данные записываются в файлы с именами, соответствующими названию выгружаемого свойства. Расширение файла соответствует типу данных:. ● htm – для справки и макетов HTML-документа; ● txt – для модулей и макетов текстового документа; ● mxl – для макетов табличного документа; ● geo – для макетов географической схемы; ● grs – для макетов графической схемы; ● bin – для макетов двоичных данных. Картинки выгружаются в том формате, в котором они хранятся в конфигурации. Загружаются картинки всех поддерживаемых форматов (см. здесь). Для выгрузки/загрузки прав доступа необходимо выбрать требуемые роли (или все) и указать пункт Права в списке Обрабатывать. Права доступа выгружаются в формате XML. Файл выгрузки включает в себя собственно права доступа, ограничения доступа к данным и шаблоны ограничений доступа. При выгрузке файлов справки и макетов HTML-документов формируется отдельный файл для каждого языка, для которого определен макет. При этом код языка включается в имя файла перед его расширением: например, Документ.РасходТовара.Справка.ru.htm означает файл со справочной информацией на русском языке документа РасходТовара. Загрузка данных осуществляется выбором пункта Конфигурация – Загрузить файлы конфигурации. Действия в окне аналогичны действиям, описанным для режима выгрузки данных. При загрузке производится попытка загрузить файлы справки и макеты HTML-документов для каждого языка, определенного в прикладном решении. Если при загрузке обнаружен только один файл (без указания в наименовании кода языка), то он загружается для текущего языка конфигурации. 2.16. Выгрузка и загрузка конфигурации Данный механизм позволяет осуществлять выгрузку всех объектов конфигурации в xml-файлы и выполнить обратную загрузку. Все объекты конфигурации выгружаются в один или несколько файлов. Основным файлов в выгрузке является файл Configuration.xml, который содержит описание свойств собственно конфигурации. В отдельные файлы выгружаются: ● Объекты конфигурации – объекты верхнего уровня, и подчиненные объекты, отдельно захватываемые в хранилище конфигурации. Примеры имен файлов: ● Document.ПродажиТоваров.xml – описание объект конфигурации Документ.ПродажиТоваров. ● CommonPicture.ПодсистемаЗакупки.xml – описание объекта конфигурации ОбщаяКартинка.ПодсистемаЗакупки (но не сама картинка). ● Отдельные свойства – как правило, имеющие большой объем или сложную структуру. Примеры имен файлов: ● CommonPicture.ПодсистемаЗакупки.Picture.xml – описание картинки (но не сама картинка). ● DataProcessor.Путеводитель.Template.ГлавнаяСтраница.xml – описание макета, расположенного в обработке (но не сам макет). ● Значения отдельных свойств, являющиеся файлами известных форматов (но не XML). К таким файлам можно отнести модули форм, макеты, картинки. Примеры имен файлов: ● CommonPicture.ПодсистемаЗакупки.Picture.Picture.png – картинка, сохраненная в общие картинки под именем ПодсистемаЗакупки. ● Catalog.Товары.Form.ФормаЭлемента.Form.Module.txt – модуль управляемой формы элемента справочника Товары. ● DataProcessor.ПомощникСозданияОбменаДанными.Form.Форма.Form.КартинкаВторойИнформационнойБазы.Picture.png – абсолютная картинка содержащаяся в свойстве Pictureэлемента управляемой формы КартинкаВторойИнформационнойБазы. Объекты, не являющиеся объектами разработки сохраняются в файле родительского объекта, например, файл DataProcessor.ПечатьЭтикетокИЦенников.Template.КомпонентаПечатиШтрихкодовLinux32.Template.bin означает собственно внешнюю компоненту печати этикетов и ценников, расположенную в двоичном макете КомпонентаПечатиШтрихкодовLinux32. Специальным образом выгружаются следующие элементы: ● Модуль объекта – выгружается в виде текстового файла (если таковой может быть получен) или в бинарном виде. Пример имени файла: ● DataProcessor.ЖурналРегистрации.ObjectModule.txt – модуль объекта метаданных Обработка.ЖурналРегистрации. ● HTML – выгружается в виде набора файлов: корневой файл свойства, файлы HTML страниц, файлы картинок (если таковые имеются). Корневой файл содержит список HTML страниц входящих в документ. HTML файлы являются страницами входящими в документ. Каждая из них соответствует конкретному языку, определенному в конфигурации. Справка по объектам конфигурации является частным случаем выгрузки HTML. Примеры имен файлов (для свойства Справка): ● Catalog.Товары.Help.xml – корневой файл внешнего свойства справка объекта метаданных Справочник.Товары. ● Catalog.Товары.Help.ru.html, Catalog.Товары.Help.en.html –страницы справки для русского и английского языков соответственно. ● Catalog.Товары.Help.Картинка.png – файл картинки, содержащийся в HTML документе со справкой. ● Конфигурации поставщиков – выгружается как файл информации о конфигурациях поставщиков во внутреннем формате (не XML) и файлы конфигурации (.cf) для каждой конфигурации поставщика. Примеры имен файлов: ● Configuration.ParentConfigurations – файл информации о конфигурациях поставщиков. ● Configuration.ParentConfigurations.УправлениеТорговлей.cf – конфигурация поставщика УправлениеТорговлей. При выгрузке все ссылки на объекты метаданных, ссылки на поля, идентификаторы типов и т. д. выгружаются в виде имен (Catalog.Товары). Все идентификаторы выгружаются на английском языке – упоминание справочника Товары будет выглядеть Catalog.Товары, а не Справочник.Товары. Если в объектах конфигурации существуют ссылки на отсутствующие объекты конфигурации, то такие ссылки выгружаются в виде текстового представления идентификатора и при загрузке также будут восстановлены в ссылку на отсутствующий объект конфигурации (для сохранения идентичности двух конфигураций). Для реквизитов и элементов управляемой формы выгружаются внутренние идентификаторы, используемые, в частности, для сохранения и восстановления настроек. При выгрузке ролей выгружаются значения только тех прав, которые отличаются от значений по умолчанию в момент выгрузки. При определении значений прав по умолчанию используются свойства роли Устанавливать права для новых объектов и Устанавливать права для реквизитов и табличных частей по умолчанию. Значения этих флажков являются значениями по умолчанию для прав доступа на объекты конфигурации и прав доступа на реквизиты и табличные части, соответственно. ПРИМЕЧАНИЕ. Обычные формы и интерфейсы обычного приложения выгружаются в двоичном виде. При загрузке, если обнаружены ошибки в файлах, то будет сформировано окно со списком ошибок. Если ошибки не являются критичными, то можно нажать кнопку Принять. Выбрав строку с ошибкой – можно открыть файл, содержащий ошибку. 2.17. Работа с мобильным приложением Описание работы с мобильным приложением см. здесь. 2.18. Отчет по конфигурации В конфигураторе можно вывести в текстовом или табличном виде информацию обо всех объектах конфигурации. Для этого следует выбрать пункт Конфигурация – Отчет по конфигурации. На экран выводится диалог. В нем нужно выбрать тип (текстовый или табличный) и имя файла, в который предполагается сохранить описание структуры конфигурации. Рис. 26. Отчет по конфигурации Создание описания объектов конфигурации для сложных конфигураций может занимать продолжительное время. Если требуется получить отчет по отдельным объектам конфигурации, то в поле Объекты нужно нажать кнопку выбора и в открывшемся диалоге выбора объектов установить флажки у нужных объектов. Рис. 27. Выбор объектов для отчета по конфигурации Допускается отбор по подсистемам. После окончания создания описания конфигурации будет открыто окно с описанием в выбранном формате (текстовом или табличном). 2.19. Глобальный поиск и замена Режим глобального поиска и замены предназначен для поиска определенной строки во всех модулях, диалогах, табличных документах, описаниях конфигурации и внешних файлах (внешние отчеты и обработки, табличные документы). Найденный текст может быть заменен другим. Этот режим может быть использован, например, для поиска всех вызовов некоторой глобальной процедуры или обращения к какому-либо реквизиту в разных модулях. Вызов режима поиска осуществляется выбором пункта Правка – Глобальный поиск, а режима замены – выбором пункта Правка – Глобальная замена. В этих режимах используется один и тот же диалог. Если выбран режим поиска, то становятся недоступными реквизиты режима замены. Поэтому для краткости рассмотрим процедуру глобальной замены, а потом укажем особенности режима поиска. На экран будет выдан диалог для задания параметров поиска. Рис. 28. Окно глобальной замены В поле Искать этого диалога следует ввести образец для поиска или выбрать один из образцов, которые были использованы ранее в операциях поиска из списка истории. В поле Заменить нужно ввести текст, на который следует произвести замену найденного текста, или выбрать один из образцов, которые были использованы ранее в операциях замены из списка истории. Чтобы различать при поиске прописные и строчные буквы, требуется установить флажок Учитывать регистр. При установленном флажке Искать слово целиком будут найдены только целые слова, а не части слов. Если не требуется открытия редакторов при групповой замене (по кнопке Заменить все), то нужно установить флажок Не открывать редакторы при групповой замене. При любом состоянии флажка редактор будет открываться при нажатии клавиши Искать или Заменить. Ниже расположена панель, на закладках которой указывается, где следует искать указанный образец. На закладке Типы текстов помечаются типы объектов, в которых будет произведен поиск. Если конфигурация редактируется для режима запуска Управляемое приложение (см. здесь), то из списка объектов будут исключены пользовательские интерфейсы. На закладке Конфигурации можно указать с точностью до объекта разделы конфигураций, в которых будет произведен поиск. Рис. 29. Глобальный поиск В список конфигураций помимо основной включается конфигурация базы данных и конфигурации хранилища. Конфигурации хранилища должны быть открыты перед вызовом режима поиска или замены. Для указания набора объектов нужно установить переключатель Выбранные объекты и пометить те объекты, в которых будет произведен поиск. При первом запуске в списке по умолчанию установлены пометки всех объектов. Чтобы снять установку, следует снять флажок в строке с наименованием конфигурации. Затем можно указывать конкретные объекты для поиска. На закладке Файлы можно указать каталог и типы файлов, в которых может производиться поиск. Могут быть просмотрены следующие типы просматриваемых файлов: конфигурации, расположенные в файлах (сохраненные, файлы поставки), внешние отчеты и обработки, текстовые и табличные документы. Если каталог не указан (реквизит Каталог не заполнен), то поиск в файлах не осуществляется. Поиск может также производиться в открытых документах тех же типов. Для этого следует установить флажок Искать в открытых документах. Выбранную совокупность настроек можно сохранить для дальнейшего использования. Для этого в поле Область поиска нужно указать имя настройки. Для использования прежней настройки достаточно выбрать имя настройки в выпадающем списке. Сохраняются следующие настроки: настройки на закладке Типы текстов, состав объектов только для основной конфигурации на закладке Конфигурации и настройки на закладке Файлы. Если был запущен режим поиска, то для начала поиска нужно нажать кнопку Искать. В режиме глобального поиска можно прервать процесс нажатием Ctrl + Break. На экран в окно Результаты поиска будет выведен список найденных вхождений исходного текста. Рис. 30. Результат глобального поиска Если какой-либо модуль имеет ограничение доступа (см. здесь), то перед поиском исходного текста в данном модуле система запрашивает пароль доступа. Необходимо ввести правильный пароль или отказаться от ввода пароля. Если пароль не введен, то просмотр в данном модуле не производится. Результат поиска можно просмотреть, а к каждому найденному значению можно перейти, если выбрать в результате поиска нужную строчку и нажать клавишу Enter. Для просмотра следующего или предыдущего найденного значения можно воспользоваться пунктами Действия – Следующая позиция и Действия – Предыдущая позиция. Результат поиска (весь список) можно запомнить в буфер обмена с помощью команды Копировать контекстного меню окна или с помощью соответствующей кнопки панели инструментов окна результатов поиска, а также вывести в табличный или текстовый документ. Ширину колонок можно изменить стандартным приемом – с помощью указателя мыши при нажатой клавише Ctrl. Если был запущен режим замены, то в поле На текст указывается образец текста, на который следует заменить исходный текст, указанный в поле Заменить. Если перед заменой требуется посмотреть исходный текст, то для начала поиска следует нажать кнопку Пропустить. На экран выводится результат первого найденного исходного текста. Если нажать кнопку Пропустить, то текущий текст будет пропущен и на экран будет выведено очередное вхождение исходного текста в текущем окне или другое окно, содержащее исходный текст. Если при групповой замене не требуется открытия объектов, в которых обнаружено вхождение исходного текста, нужно установить флажок Не открывать редакторы при групповой замене. ВНИМАНИЕ! Во время просмотра результатов поиска изменить условия поиска нельзя. Структура выбора области поиска (типы текста, список объектов конфигураций, файлов и открытые документы) запоминается и при следующем открытии диалога восстанавливается. Если требуется сохранить несколько областей, то каждой области в реквизите Область поиска нужно присвоить имя. При повторном открытии окна поиска в списке областей достаточно выбрать нужную и выполнить поиск. 2.20. Настройка рабочей области конфигуратора Для создания и редактирования конфигурации требуется одновременное использование различных окон. Например, просмотр, выбор, добавление и удаление объектов конфигурации производятся в окне Конфигурация; редактирование свойств объектов и их составных частей производится в палитре свойств; получение справочной информации по встроенному языку – в окне синтакс-помощника; сообщения и результаты поиска выводятся в окне сообщений. Кроме того, каждый объект конфигурации в общем случае может состоять из различных частей, каждая из которых редактируется в отдельном окне. Одновременное открытие различных служебных окон заметно сужает рабочую область, предназначенную для редактирования прикладных объектов (формы, модули и макеты) и редактирования общих объектов конфигурации (модуль приложения и общие модули, макеты, стили, интерфейсы и др.). Для расширения рабочей области и удобства работы можно воспользоваться некоторыми рекомендациями по настройке различных панелей конфигуратора, наличию и поведению различных служебных окон, использованию режимов показа окон. 2.20.1. Настройка панелей Конфигуратор спроектирован таким образом, чтобы максимально использовать рабочую область за счет автоматического выбора нужных панелей инструментов для каждого вида окна. Так, при редактировании табличного документа конфигуратор предоставляет панель инструментов, предназначенную для выполнения команд по редактированию табличного документа; при переходе в окно, содержащее модуль формы, конфигуратор закрывает панель инструментов табличного документа и показывает панель инструментов текстового редактора. Пользователь может самостоятельно настроить состав панелей инструментов и их размещение на экране. Если при настройке стандартной командной панели на ней размещают команды, которые отсутствуют на этой панели по умолчанию, то возможна ситуация, когда после перезапуска конфигуратора порядок команд на командной панели будет изменен. В этом случае рекомендуется скрыть стандартную панель, а вместо нее создать дополнительную командную панель, разместив на ней требуемые команды в нужном порядке. Порядок команд на ней изменяться не будет. Помимо панелей инструментов внизу располагается Панель окон и Панель состояния. Каждая из них занимает отдельную строку и не может быть перемещена в другое место. Если какая-либо панель не нужна, то ее можно скрыть с помощь контекстного меню в любом месте любой панели. Панель показывается, если слева от ее названия установлен флажок, и скрыта, если флажок снят. Для изменения режима показа панели достаточно в контекстном меню выбрать строку с наименованием панели. Чтобы панель окон не занимала постоянно часть рабочей области программы, можно установить режим Автоматически прятать. При работе панель окон скрыта. Чтобы она появилась, нужно подвести указатель мыши к месту размещения панели. 2.20.2. Окно «Конфигурация» Окно Конфигурация может быть закрыто и открыто в любой момент времени. После выбора всех требуемых для работы окон окно Конфигурация может быть закрыто. Закрытие окна не приводит к окончанию работы с конфигурацией. Его можно открыть в любой момент. Первоначальное состояние окна Конфигурация – Прикрепленное. В этом состоянии оно «перекрывает» все окна, находящиеся в состоянии Обычное (большинство окон показываются в этом состоянии). Чтобы использовать область, занимаемую окном Конфигурация, его состояние можно изменить на Обычное (в этом случае другие окна будут показываться поверх окна Конфигурация) или на Прячущееся (если окно не нужно, оно скрывается автоматически, а при подведении к нему указатель мыши раскрывается). 2.20.3. Использование режимов показа окон В режиме Обычный окно может располагаться (его видно) только в пределах свободной рабочей области конфигуратора. Использование других режимов позволяет расширить рабочую область или рациональнее ее использовать. Кроме того, можно «вынести» окно за пределы рабочей области. Каждое окно (кроме калькулятора) в конфигураторе может быть переведено в режим Прячущееся. Этот режим позволяет без лишних действий выбрать нужное окно для просмотра и редактирования, переведя указатель мыши в строку с заголовком окна. Когда просмотр закончен, для сворачивания окна достаточно просто перевести указатель мыши на любое другое окно или заголовок другого прячущегося окна. Целесообразно в этом режиме использовать окна, работа с которыми носит кратковременный характер (синтакс-помощник, окно Конфигурация, окно сообщений и результатов поиска, а также окно прикладных объектов, табличных и текстовых документов, открываемых в основном для просмотра). Режим состояния окна Свободное позволяет поместить данное окно в любое место экрана, независимо от размеров и положения окна программы (конфигуратора). В режиме Прикрепляемое окно может быть прикреплено к другому окну, находящемуся в этом состоянии, или к одной из сторон окна, а также расположено поверх другого прикрепляемого окна (совмещенные окна). Рекомендуется совмещать такие окна, просмотр которых одновременно не требуется. Например, окно палитры свойств и окно синтакс-помощника или Табло и Стек вызовов во время отладки. Подробнее о режимах показа окон см. здесь. Глава 3. Интерфейс приложения Интерфейс приложения ориентирован на удобную работу пользователя и устроен таким образом, что, выполняя необходимые действия в прикладном решении, пользователь работает с различными формами. Каждая форма может быть открыта разными способами, которые будут рассмотрены далее. Для того чтобы получить доступ к той или иной форме, следует найти в интерфейсе прикладного решения нужную команду (открытия списка, формирования отчета, ввода документа и т. д.) и выполнить ее. Процесс поиска нужной команды называется навигацией по прикладному решению. Структура прикладного решения в приложении представляется пользователю в виде иерархии, которая формируется подсистемами и входящими в них объектами метаданных (см. здесь). Формы, в которых работает пользователь, могут отображаться различными способами: ● на начальной странице, ● в отдельном окне, ● в отдельной закладке, ● в однооконном режиме – интерфейс Такси. Режим открытия форм (в отдельных окнах или в закладках) определяется отдельной настройкой клиентского приложения и начинает действовать после перезапуска клиентского приложения. Рис. 31. Установка внешнего вида прикладного решения Эта настройка выполняется в диалоге настройки параметров клиентского приложения, который доступен с помощью команды Главное меню – Сервис – Параметры. После выбора необходимого варианта внешнего вида, система предложит перезапустить прикладное решение. Рис. 32. Предложение перезапуска при смене внешнего вида При нажатии кнопки Перезапустить будет произведен перезапуск прикладного решения и оно откроется в выбранном внешнем виде. В «1С:Предприятии» существует два вида окон: ● основное окно, ● вспомогательное окно. Каждый вид окон в «1С:Предприятии» предназначен для выполнения определенных задач. Основное окно приложения предназначено для навигации по прикладному решению и вызова различных команд. Вспомогательное окно предназначено для работы с объектами информационной базы (например, с документами или элементами справочников), построения отчетов или выполнения обработки данных. Роль вспомогательного окна может выполнять закладка, отображаемая в рабочей области основного окна. Главное меню основных и вспомогательных окон «1С:Предприятия» содержит только общие команды, не имеющие прикладной специфики, и не может быть изменено разработчиком конфигурации. 3.1. Открытие форм в отдельных окнах В этом режиме формы открываются во вспомогательных окнах. Каждое окно «1С:Предприятия» появляется на панели задач операционной системы и в переключателе окон по нажатию клавиш Alt + Tab. 3.1.1. Основное окно приложения При работе с «1С:Предприятием» используется одно основное окно приложения. Структура основного окна организована таким образом, чтобы пользователь эффективно осуществлял навигацию по приложению, т. е. быстро находил нужные разделы и команды. Рис. 33. Структура основного окна приложения Каждое состояние основного окна можно рассматривать как своеобразное рабочее место. Например, перейдя в раздел Товарные запасы, пользователь увидит набор команд для выполнения наиболее частых действий, связанных с управлением товарными запасами. 3.1.1.1. Панель разделов Панель разделов показывает список подсистем верхнего уровня и позволяет быстро переключаться между ними. Каждый раздел соответствует подсистеме (например, Продажи, Закупки, Запасы). Для повышения наглядности каждой подсистеме можно установить понятную картинку. Отсутствие картинки не препятствует отображению подсистемы в панели разделов. Первым разделом всегда является основной раздел, который называется Главное. На начальной странице собраны самые необходимые и часто используемые инструменты прикладного решения. Остальные разделы соответствуют подсистемам первого уровня иерархии. Панель разделов имеет возможность горизонтальной прокрутки, однако с помощью прав доступа можно ограничить набор разделов так, что прокрутка не потребуется. ПРИМЕЧАНИЕ. Если в панели разделов нет ни одного раздела (они недоступны или скрыты пользователем), то панель разделов автоматически скрывается и основное окно приложения автоматически переключается на рабочий стол конфигурации. 3.1.1.2. Панель навигации Панель навигации отображает структуру конфигурации в соответствии с разделом, выбранным в панели разделов. Если у подсистемы имеются подчиненные подсистемы, то они будут отображаться как группы с возможностью сворачивания. В дальнейшем подсистемы, подчиненные подсистемам верхнего уровня, мы будем называть подразделами. При нажатии на гиперссылки этой панели, как правило, происходит открытие форм списков. При этом формы открываются непосредственно в основном окне, замещая друг друга. Щелчок по гиперссылке приводит к открытию формы в рабочей области основного окна приложения. В панели навигации могут располагаться команды трех стандартных групп: Важное, Обычное и См. также. Команды группы Важное будут выделены полужирным шрифтом. Если какой-либо группы нет, то она пропускается. Если разработчик конфигурации определил собственные группы команд из категории Панель навигации, то они будут располагаться непосредственно перед группой См. также (которая всегда является самой последней группой в панели навигации). При отображении группы См. также действуют следующие правила: ● команды группы См. также из отображаемого раздела и всех его подразделов визуально размещаются в одном списке См. также; ● команды выводятся в порядке разделов и подразделов, который задан при конфигурировании; ● внутри разделов и подразделов команды выводятся в порядке, который задан при конфигурировании. Порядок разделов (подсистем верхнего уровня), подразделов (подчиненных подсистем) и команд в группе См. также панели навигации можно изменять в редакторе фрагмента командного интерфейса. 3.1.1.3. Панель действий Панель действий содержит команды, которые соответствуют текущему разделу, выбранному в панели разделов. Эти команды объединены в стандартные группы: Создать, Отчеты, Сервис и группы, созданные разработчиком. Группа Создать включает в себя команды создания новых объектов информационной базы, например, документов или элементов справочников. В этой группе размещаются команды создания для всех объектов, входящих в подсистему, однако по умолчанию видимость этих команд отключена. Разработчик должен включить видимость для наиболее часто используемых команд создания новых объектов. Группа Отчеты содержит команды открытия отчетов, а группа Сервис – команды открытия обработок. Если в какой-либо группе нет ни одной команды, то группа не показывается. Если разработчик конфигурации определил собственные группы команд, принадлежащие категории Панель действий, то они располагаются после группы Сервис. При отображении групп панели действий действуют следующие правила: ● команды одинаковых групп из отображаемого раздела и всех его подразделов визуально размещаются в одном списке; ● команды выводятся в порядке разделов и подразделов, который задан при конфигурировании; ● внутри разделов и подразделов команды выводятся в порядке, который задан при конфигурировании. Порядок разделов (подсистем верхнего уровня), подразделов (подчиненных подсистем) и команд в группах панели действий можно изменять в редакторе командного интерфейса. Высота панели действий по умолчанию зависит от количества команд в группах и не превышает трех строк при автоматическом определении высоты панели. Однако пользователь может произвольно изменять высоту с помощью разделителя, расположенного под панелью. Если при текущей высоте панели действий в ней не помещаются все команды какой-либо группы, то в правом нижнем углу группы будет размещена пиктограмма, по нажатию на которую будет раскрыто меню, содержащее все команды группы. 3.1.1.4. Информационная панель Информационная панель предназначена для обращения к последним данным, редактируемым пользователем, а также для отображения перечня последних оповещений (информация о тех или иных действиях, выполненных в системе). Подробнее см. здесь. 3.1.1.5. Область системных команд Область системных команд позволяет выполнять ряд действий, не зависящих от прикладной специфики конфигурации, но помогающих в управлении системой. Кроме того, в этой области расположены различные команды, помогающие в работе с окном. Рис. 34. Левая часть области системных команд В левой части области системных команд расположена кнопка вызова главного меню, а также команды перехода по точкам навигации и меню работы с избранным пользователя. Точка навигации – это фрагмент интерфейса основного окна приложения, в который можно перейти с помощью команд, расположенных в основном окне приложения. В «1С:Предприятии» избранное – это список ссылок, специально отобранных самим пользователем для быстрого перехода к тем или иным разделам конфигурации, точкам навигации, формам объектов информационной базы, а также формам отчетов и обработок. Существует возможность программного управления списком избранного. Для этого используется объект ИзбранноеРаботыПользователя. Данный объект можно получить из хранилища системных настроек. ПРИМЕЧАНИЕ. При работе с избранным следует помнить, что список избранного является одноуровневым. В список избранного нельзя добавить ссылку на стандартную функцию (вызываемую с помощью команды Главное меню – Все функции – Стандартные). Во вспомогательных окнах область системных команд выглядит другим образом (см. здесь). В правой части области системных команд расположены различные вспомогательные команды, которые помогают в работе с окном. Перечень команд может быть настроен с помощью соответствующего меню настройки. 3.1.2. Вспомогательное окно Вспомогательным называется окно, которое открывается для выполнения какого-либо действия, а не для навигации по всему приложению в целом. В таких окнах, например, открываются формы документов или элементов справочников, формы отчетов и обработок. Рис. 35. Структура вспомогательного окна приложения Закрытие вспомогательного окна не приводит к закрытию всего приложения. Вспомогательных окон может быть открыто сколько угодно, но для каждого объекта информационной базы (например, документа или элемента справочника) оно одно, т. е. нельзя открыть несколько окон для просмотра одного и того же документа, если это специально не предусмотрено в конфигурации. Во вспомогательном окне можно выделить основную форму – форму, которая отображается по умолчанию при открытии вспомогательного окна и которая открывается при нажатии на первую ссылку панели навигации формы. При нажатии на другие ссылки панели навигации формы будут открываться вспомогательные формы. 3.1.2.1. Панель навигации формы Панель навигации вспомогательного окна (панель навигации формы) позволяет просматривать различные сведения, логически связанные с данными, которые отображает основная форма окна. В панели навигации могут располагаться команды трех групп: Важное, Перейти и См. также. Команды, относящиеся к группам Важное и Перейти, будут объединены общим заголовком Перейти, при этом команды группы Важное располагаются первыми, выделены полужирным шрифтом и отделены от остальных команд, расположенных под заголовком Перейти, небольшим отступом. Если какой-либо группы нет, то она пропускается. Если разработчик конфигурации определил собственные группы команд из категории Панель навигации формы, то они будут располагаться непосредственно перед группой См. также (которая всегда является самой последней группой в панели навигации формы). Существует возможность возврата к основной форме. Для этого нужно нажать гиперссылку в верхней части панели навигации (выделена полужирным шрифтом). 3.1.2.2. Командная панель формы Командная панель формы содержит команды, непосредственно связанные с объектом, который отображается в основной форме. Существуют стандартные группы Важное и Создать на основании; кроме того, на панели могут размещаться группы, созданные разработчиком. Каждая команда из группы Важное будет отображаться своей кнопкой на панели. Группа Создать на основании будет оформлена в виде подменю панели. Также в виде подменю будут оформлены все группы команд, созданные разработчиком. Команды формы, такие как Сохранить и закрыть, будут расположены перед командами группы Важное. Если в какой-либо группе нет ни одной команды, то группа не показывается. Если разработчик конфигурации добавил в эту область собственные группы, то они располагаются после группы Создать на основании. 3.1.2.3. Область системных команд Левая часть области системных команд вспомогательного окна содержит только команду открытия главного меню и команды работы с избранным. В правой части расположены различные вспомогательные команды, которые помогают в работе с окном (например, команды получения и перехода по ссылке, вызова калькулятора, календаря и т. д.). Правая часть области может быть настроена с помощью соответствующего меню настройки. 3.2. Открытие форм в закладках В этом режиме формы открываются в качестве закладок рабочей области основного окна. Некоторые формы попрежнему открываются в отдельных окнах (например, окна выбора), но эти окна не появляются на панели задач. Форму, открытую в закладке, можно открыть во вспомогательном окне, если этого требует логика работы. В этом случае вспомогательное окно будет отображаться на панели задач операционной системы и будет доступно при переключении окон по Alt + Tab. 3.2.1. Основное окно приложения При работе с «1С:Предприятием» используется одно основное окно приложения. Структура основного окна организована таким образом, чтобы пользователь эффективно осуществлял навигацию по приложению, т. е. быстро находил нужные разделы и команды. Рис. 36. Основное окно с закладками Каждое состояние основного окна можно рассматривать как своеобразное рабочее место. Например, перейдя в раздел Финансы, пользователь увидит набор команд для выполнения наиболее частых действий, связанных с управлением товарными запасами. Каждая закладка, отображаемая в рабочей области основного окна, может быть закрыта (включая закладку Рабочий стол). Это можно сделать или с помощью контекстного меню (команда Закрыть), или нажав на синюю картинку в правой части каждой закладки. ПРИМЕЧАНИЕ. Закладка Рабочий стол всегда располагается первой среди закладок. Любую закладку (кроме закладки Рабочий стол) можно также открыть во вспомогательном окне. Для этого нужно воспользоваться командой Открыть в отдельном окне контекстного меню закладки. Заголовок закладки изменяет размер в зависимости от количества закладок в основном окне. При увеличении количества закладок размер заголовка закладки уменьшается, и заголовок может оказаться нечитаемым. В этом случае для получения списка открытых закладок можно воспользоваться специальной кнопкой, расположенной справа от закладок. Рис. 37. Список закладок Если в форме, открытой в закладке, выполняется открытие блокирующей (например, формы выбора) или модальной формы, то такая форма не отображается отдельной закладкой и не присутствует в списке окон на панели задач. Такая форма блокирует содержимое только той закладки, в которой такая блокирующая форма была открыта. При этом остается возможность переключаться между закладками. В случае переключения на закладку с открытой блокирующей формой она будет отображена на экране. 3.2.1.1. Панель разделов Панель разделов показывает список подсистем верхнего уровня и позволяет быстро переключаться между ними. Каждый раздел соответствует подсистеме (например, Продажи, Закупки, Запасы). Для повышения наглядности каждой подсистеме можно установить понятную картинку. Отсутствие картинки не препятствует отображению подсистемы в панели разделов. Первым разделом всегда является Рабочий стол. На рабочем столе собраны самые необходимые и часто используемые инструменты прикладного решения. Остальные разделы соответствуют подсистемам первого уровня иерархии. Панель разделов имеет возможность горизонтальной прокрутки, однако с помощью прав доступа можно ограничить набор разделов так, что прокрутка не потребуется. При переходе по разделам не меняется информация, отображаемая в рабочей области, но меняется содержимое панели навигации и панели действий. Рис. 38. Переключение подсистем и рабочая область ПРИМЕЧАНИЕ. Если в панели разделов нет ни одного раздела (они недоступны или скрыты пользователем), то панель разделов автоматически скрывается и основное окно приложения автоматически переключается на рабочий стол конфигурации. 3.2.1.2. Панель навигации Панель навигации отображает структуру конфигурации в соответствии с разделом, выбранным в панели разделов. Если у подсистемы имеются подчиненные подсистемы, то они будут отображаться как группы с возможностью сворачивания. В дальнейшем подсистемы, подчиненные подсистемам верхнего уровня, мы будем называть подразделами. При нажатии на гиперссылки этой панели, как правило, происходит открытие форм списков. При этом формы открываются непосредственно в основном окне, замещая друг друга. Щелчок по гиперссылке приводит к открытию формы в рабочей области основного окна приложения. В панели навигации могут располагаться команды трех стандартных групп: Важное, Обычное и См. также. Команды группы Важное будут выделены полужирным шрифтом. Если какой-либо группы нет, то она пропускается. Если разработчик конфигурации определил собственные группы команд из категории Панель навигации, то они будут располагаться непосредственно перед группой См. также (которая всегда является самой последней группой в панели навигации). При отображении группы См. также действуют следующие правила: ● команды группы См. также из отображаемого раздела и всех его подразделов визуально размещаются в одном списке См. также; ● команды выводятся в порядке разделов и подразделов, который задан при конфигурировании; ● внутри разделов и подразделов команды выводятся в порядке, который задан при конфигурировании. Порядок разделов (подсистем верхнего уровня), подразделов (подчиненных подсистем) и команд в группе См. также панели навигации можно изменять в редакторе фрагмента командного интерфейса. 3.2.1.3. Панель действий Панель действий содержит команды, которые соответствуют текущему разделу, выбранному в панели разделов. Эти команды объединены в стандартные группы: Создать, Отчеты, Сервис и группы, созданные разработчиком. Группа Создать включает в себя команды создания новых объектов информационной базы, например, документов или элементов справочников. В этой группе размещаются команды создания для всех объектов, входящих в подсистему, однако по умолчанию видимость этих команд отключена. Разработчик должен включить видимость для наиболее часто используемых команд создания новых объектов. Группа Отчеты содержит команды открытия отчетов, а группа Сервис – команды открытия обработок. Если в какой-либо группе нет ни одной команды, то группа не показывается. Если разработчик конфигурации определил собственные группы команд, принадлежащие категории Панель действий, то они располагаются после группы Сервис. При отображении групп панели действий действуют следующие правила: ● команды одинаковых групп из отображаемого раздела и всех его подразделов визуально размещаются в одном списке; ● команды выводятся в порядке разделов и подразделов, который задан при конфигурировании; ● внутри разделов и подразделов команды выводятся в порядке, который задан при конфигурировании. Порядок разделов (подсистем верхнего уровня), подразделов (подчиненных подсистем) и команд в группах панели действий можно изменять в редакторе командного интерфейса. Высота панели действий по умолчанию зависит от количества команд в группах и не превышает трех строк при автоматическом определении высоты панели. Однако пользователь может произвольно изменять высоту с помощью разделителя, расположенного под панелью. Если при текущей высоте панели действий в ней не помещаются все команды какой-либо группы, то в правом нижнем углу группы будет размещена пиктограмма, по нажатию на которую будет раскрыто меню, содержащее все команды группы. 3.2.1.4. Информационная панель Информационная панель предназначена для обращения к последним данным, редактируемым пользователем, а также для отображения перечня последних оповещений (информация о тех или иных действиях, выполненных в системе). Подробнее см. здесь. 3.2.1.5. Область системных команд Область системных команд позволяет выполнять ряд действий, не зависящих от прикладной специфики конфигурации, но помогающих в управлении системой. Кроме того, в этой области расположены различные команды, помогающие в работе с окном. Рис. 39. Левая часть области системных команд В левой части области системных команд расположена кнопка вызова главного меню, а также команды вызова меню функций и меню работы с избранным пользователя. В главном меню расположено меню Вид, которое позволяет настроить внешний вид окна приложения. Рис. 40. Меню «Вид» В частности, данное меню позволяет отключать видимость панели разделов, панелей навигации и действий. Это позволит увеличить место под формы и уменьшить вероятность появления полос прокрутки. Также следует обратить внимание на команду Скрыть все панели команд. После выполнения команды скрывается панель разделов, панель навигации и панель действий. Рис. 41. Скрытые панели команд Повторное выполнение команды возвращает скрытые панели. Нужно помнить следующую особенность: команда Скрыть все панели команд не будет работать, если панель разделов, панель навигации и панель действий скрыты с помощью меню Вид. Для ускорения и упрощения доступа к командам той или иной подсистемы служит специальный режим – Меню функций. Для вызова этого режима следует нажать специальную кнопку в области системных команд. Рис. 42. Меню функций Меню функций представляет собой панель разделов и специальную форму, которая содержит все команды выбранного раздела. Перечень разделов и состав команд соответствуют текущим настройкам пользователя. Первая колонка формы соответствует панели навигации, остальные колонки – группам панели действий выбранной подсистемы. Отображение панели разделов не зависит от того, в каком состоянии находится настройка Главное меню – Вид – Панель разделов. После выбора необходимой команды основное окно возвращается к тому виду, какой был до вызова меню функций. Состав команд обновляется, если в окне функций выбрать другой раздел. В «1С:Предприятии» избранное – это список ссылок, специально отобранных самим пользователем для быстрого перехода к тем или иным разделам конфигурации, точкам навигации, формам объектов информационной базы, а также формам отчетов и обработок. Существует возможность программного управления списком избранного. Для этого используется объект ИзбранноеРаботыПользователя. Данный объект можно получить из хранилища системных настроек. ПРИМЕЧАНИЕ. При работе с избранным следует помнить, что список избранного является одноуровневым. В список избранного нельзя добавить ссылку на стандартную функцию (вызываемую с помощью команды Главное меню – Все функции – Стандартные). Во вспомогательных окнах область системных команд выглядит другим образом (см. здесь). В меню Окна отображается основное окно, закладки окна и вспомогательные окна. Флажком отмечается: ● активное вспомогательное окно; ● активная закладка основного окна; ● собственно основное окно, если в нем не открыто ни одной закладки. В правой части области системных команд расположены различные вспомогательные команды, которые помогают в работе с окном. Перечень команд может быть настроен с помощью соответствующего меню настройки. Доступность и состав команд зависят от текущей формы в активной закладке. 3.2.2. Вспомогательное окно Описание вспомогательного окна см. здесь. 3.3. Интерфейс «Такси» В этом режиме формы в основном открываются в рабочей области основного окна. Некоторые формы попрежнему открываются в отдельных окнах (например, окна выбора), но эти окна не появляются на панели задач. Переключение между окнами с помощью сочетания клавиш Alt+Tab невозможно. Можно переключаться между открытыми формами с помощью специальных кнопок, присутствующих в заголовке всех форм, которые открыты в рабочей области основного окна приложения. 3.3.1. Основное окно приложения При работе с «1С:Предприятием» используется одно основное окно приложения. Структура основного окна организована таким образом, чтобы пользователь эффективно осуществлял навигацию по приложению, т. е. быстро находил нужные разделы и команды. В основном окне приложения не выполняется открытия форм (кроме рабочей области). Рис. 43. Основное окно в интерфейсе «Такси» При работе в интерфейсе Такси, в основном окно приложения могут произвольно располагаться несколько различных панелей (см. здесь). В рабочей области основного окна приложения отображаются все формы, с которыми работает пользователь. Исключением являются блокирующие формы, которые открываются в отдельных окнах. Если в форме, открытой в рабочей области, выполняется открытие блокирующей (например, формы выбора) формы, то такая форма отображается в виде отдельного окна, но не присутствует в списке окон на панели задач. В зависимости от режима открытия окна (см. здесь), будет заблокирована работа либо с формой-владельцем, либо со всем интерфейсом системы. При этом если вспомогательное окно открыто в режим блокировки окна-владельца, остается возможность открывать другие формы и использовать командный интерфейс прикладного решения. В случае переключения на форму, из которой открыта форма, блокирующая работу с владельцем, блокирующая форма будет отображена на экране. Рассмотрим более подробно составные части основного окна приложения. 3.3.1.1. Начальная страница Работа с прикладным решением начинается с начальной страницы. Рис. 44. Начальная страница На эту страницу прикладной разработчик располагает формы, которые наиболее востребованы (по его замыслу) в данном прикладном решении. Доступность форм на этой странице определяется правами доступа и функциональными опциями. Начальную страницу невозможно закрыть. Настройка интерфейса начальной страницы выполняется с помощью свойств конфигурации (см. здесь). Пользователь также может сформировать персональный состав начальной страницы из списка доступных форм, которые прикладной разработчик разрешил помещать на начальной странице. Для этого необходимо воспользоваться специальным диалогом настройки начальной страницы: Главное меню – Вид – Настройка начальной страницы. 3.3.1.2. Панель разделов Панель разделов показывает список подсистем верхнего уровня и позволяет быстро выбирать нужный набор функций. Каждый раздел соответствует подсистеме (например, Продажи, Закупки, Запасы). Для повышения наглядности каждой подсистеме можно установить понятную картинку. Отсутствие картинки не препятствует отображению подсистемы в панели разделов. Первым разделом всегда является Главное. В основном разделе собраны самые необходимые и часто используемые инструменты прикладного решения. Остальные разделы соответствуют подсистемам первого уровня иерархии. Рис. 45. Панель разделов Фактически, элемент панели разделов группирует команды системы, логически связанные с каким-либо направлением работы в рамках прикладного решения. Например, действия, связанные с управлением закупками (раздел Закупки), управлением товарными запасами (раздел Товарные запасы) и т. д. Панель разделов не является инструментом переключения автоматизированных рабочих мест. Панель разделов имеет возможность прокрутки. Состав панели разделов для конкретного пользователя определяется его правами доступа и установленными функциональными опциями. Видимость доступных разделов может регулироваться самим пользователем с помощью команды Главное меню – Вид – Настройка панели разделов. Действие при выборе раздела зависит от того, отображается в главном окне панель команд текущего раздела или нет (см. здесь): ● Панель не отображается. В этом случае выбор какого-либо раздела приводит к отображению на экране меню функций данного раздела. В этом случае текущий раздел никак не отображается на экране (когда закрыто меню функций). Рис. 46. Меню функций при выборе раздела ● Панель отображается. В этом случае при выборе раздела не будет открыто меню функций, но будет изменено содержимое панели команд текущего раздела. Если отображаемой информации не достаточно, то можно открыть меню функций повторным выбором раздела. Также в этом случае на панели разделов всегда отображается текущий раздел. Рис. 47. Панель команд текущего раздела Меню функций содержит команды панели навигации и панели действий. Из меню функций имеется возможность добавить какую-либо команду в избранное. Для этого достаточно нажать звездочку, расположенную слева от имени команды. Для того чтобы удалить команду из избранного, необходимо еще раз нажать на картинку звездочки. При открытии меню функций в правом верхнем углу отображаются гиперссылки для настройки панели навигации (гиперссылка Настройка навигации) и панели действий (гиперссылка Настройка действий) для данной подсистемы. Открыть меню функций можно несколькими способами: ● Выбором раздела; ● С помощью команды панели инструментов (см. здесь). ● С помощью клавиатуры: ● С помощью сочетания клавиш Ctrl+Shift+T; ● С помощью сочетания клавиш Alt+2. В этом случае курсор будет установлен на первую команду панели навигации; ● С помощью сочетания клавиш Alt+3. В этом случае курсор будет установлен на первую команду панели действий. ПРИМЕЧАНИЕ. Если в панели разделов нет ни одного раздела (они недоступны или скрыты пользователем), то панель разделов автоматически скрывается. 3.3.1.3. Панель команд текущего раздела Панель команд текущего раздела содержит команды, соответствующие текущему разделу. Рис. 48. Панель команд текущего раздела Панель команд текущего раздела: ● Команды панели навигации располагаются в начале панели. Команды группы Важное выделены полужирным шрифтом. В случае, когда панель отображается горизонтально, отображается максимально возможное количество команд (минимум одна). Если все команды не помещаются в панель – на панели отображается подменю Еще, которое содержит оставшиеся команды. Если панель расположена вертикально, то отображается не менее одной и не более 10 команд панели навигации. Если в панели присутствует подменю Еще – оно будет располагаться 11 элементом командой панели. ● После команд панели навигации располагаются подменю для всех непустых групп команд панелей навигации и панели действий выбранного раздела. 3.3.1.4. Панель открытых Данная панель содержит список форм, открытых в текущем сеансе работы с прикладным решением. Рис. 49. Панель открытых Первой открытой формой всегда является начальная страница (если она настроена в прикладном решении). Формы рабочей области начальной страницы не отображаются как отдельные формы в панели открытых. Нажатие картинки («крестик») в правом верхнем углу элемента панели приведет к закрытию формы, которая отображается соответствующим элементом. 3.3.1.5. История «1С:Предприятие» сохраняет историю работы пользователя, которую можно применять для быстрого доступа к недавно открытым, созданным или отредактированным объектам информационной базы (документам, элементам справочников и др.). История содержит навигационные ссылки на элементы прикладного решения, упорядоченные по времени использования. История может отображать в виде формы истории и в виде панели истории. Рис. 50. Форма истории Элементы списка группируются по датам, когда использовалась та или иная форма прикладного решения. В рамках даты элементы упорядочены по времени использования, которое отображается справа от представления элемента. История работы пользователя хранится в информационной базе. При этом в истории хранится только одна запись на один объект информационной базы (запись о последующем изменении замещает запись о предыдущем изменении данного объекта в течении дня). Хранится не более 400 записей для конкретного пользователя. Если число сохраненных элементов равно 400, то при добавлении новых элементов истории наиболее старые события истории удаляются. Если список истории достаточно большой, то облегчить поиск в нем можно с помощью поиска. Для ввода поискового запроса предназначено специальное поле в верхней части формы, доступ к которой возможен с помощью сочетания клавиш Ctrl+F или просто начав набирать требуемый текст. Если история отображается в панели основного окна (см. здесь), то такой список обладает следующими особенностями: ● Отсутствует группировка по датам и отображение времени использования объекта прикладного решения. ● При горизонтальном расположении панели в ней отображается столько элементов, сколько помещается в отведенном месте. ● При вертикальном расположении панели в ней отображается не более 10 первых элементов. ● При нажатии на заголовок панели (слово История) открывается форма истории. Открыть форму истории можно с помощью команды панели инструментов или сочетания клавиш Ctrl+Shift+H. Информация попадает в историю работы пользователя несколькими путями: ● При выполнении интерактивных операций (открытие, создание, запись); ● При отображении оповещения пользователя, в котором присутствует навигационная ссылка на какой-либо объект системы (в историю попадет объект, на который указывает навигационная ссылка). Подробнее о механизме оповещений см. здесь. ● При программном изменении истории работы пользователя через свойство глобального контекста ИсторияРаботыПользователя. Если выполняется программная запись или открытие объекта, то информация о таком объекте не попадет в историю. 3.3.1.6. Избранное Избранное содержит список навигационных ссылок на различные элементы прикладного решения, которые пользователь отметил для частого использования. Избранное может отображать в виде формы избранного и в виде панели избранного. Рис. 51. Форма избранного Среди добавленных элементов пользователь может выделить элементы, которые он использует чаще всего. Для этого необходимо нажать пиктограмму кнопки, расположенной слева от элемента. Такой элемент будет выделен полужирным шрифтом и при последующем открытии избранного будет расположен в верхней части панели и не будет изменяться своего положения. Также имеется возможность переименовать элемент или удалить его из списка. Если список избранного достаточно большой, то облегчить нахождение в нем нужного элемента можно с помощью функции поиска. Для ввода поискового запроса предназначено специальное поле в верхней части формы, доступ к которой возможен с помощью сочетания клавиш Ctrl+F или просто начав набирать требуемый текст. Если избранное отображается в панели основного окна (см. здесь), то такой список обладает следующими особенностями: ● Отсутствует возможности поиска, переименования, удаления и отметки важного элемента избранного. ● При горизонтальном расположении панели в ней отображается столько элементов, сколько помещается в отведенном месте. ● При вертикальном расположении панели в ней отображается не более 10 первых элементов. ● При нажатии на заголовок панели (слово Избранное) открывается форма избранного. Открыть форму избранного можно с помощью команды панели инструментов или сочетания клавиш Ctrl+Shift+B. Избранное недоступно, если у пользователя отсутствует право СохранениеДанныхПользователя(см. здесь). 3.3.1.7. Панель инструментов Панель инструментов предназначена для быстрого доступа к следующим функциям системы: ● Меню функций. Подробнее см. здесь; ● Избранное работы пользователя (если для текущего пользователя установлено право СохранениеДанныхПользователя(см. здесь). Подробнее см. здесь; ● История работы пользователя. Подробнее см. здесь; ● Форма полнотекстового поиска (если он включен). Подробнее см. здесь. Вышеприведенный список соответствует картинкам на панели инструментов. Рис. 52. Панель инструментов 3.3.1.8. Форма полнотекстового поиска Чтобы воспользоваться полнотекстовым поиском, система предоставляет специальную форму, которую можно вызвать из панели инструментов (см. здесь). Эта форма доступна только в том случае, если включен полнотекстовый поиск. Рис. 53. Форма полнотекстового поиска В правой части формы отображаются последние запросы, введенные данным пользователем. Для быстрого получения результата поиска, достаточно нажать гиперссылку с нужным текстом. При использовании полнотекстового поиска есть возможность применять специальный язык, описание которого см. здесь. Если прикладного разработчика не устраивает системная форма полнотекстового поиска, то он может ее заменить с помощью свойства конфигурации Основная форма поиска (см. здесь). Открыть форму полнотекстового поиска можно с помощью команды панели инструментов или сочетания клавиш Ctrl+Shift+F. 3.3.1.9. Область системных команд Область системных команд позволяет выполнять ряд действий, не зависящих от прикладной специфики конфигурации, но помогающих в управлении системой. Кроме того, в этой области расположены различные команды, помогающие в работе с системой. Рис. 54. Область системных команд В левой части области системных команд расположена кнопка вызова главного меню прикладного решения. В частности, главное меню содержит меню Вид, который позволяет управлять внешним видом основного окна приложения. Рис. 55. Меню «Вид» Данное меню позволяет настроить отображение панели разделов, выполнить настройку начальной страницы и расположение панелей. Также в этом меню расположена команда, позволяющая скрыть все панели основного окна приложения, кроме панели инструментов. Повторное выполнение команды возвращает скрытые панели. Панель инструментов будет располагаться в такой ориентации, как это задано пользователем в редакторе панелей. Рис. 56. Скрыть все панели В правой части области системных команд располагаются различные сервисные команды, помогающие работе с системой и не зависящие от используемого прикладного решения, например, команды печати, получения навигационной ссылки и перехода по ней и т. д. 3.3.1.10. Настройка панелей Интерфейс Такси позволяет выполнять настройку отображения и местоположения различных панелей в основном окне приложения. Для этого служит Редактор панелей. Для его вызова необходимо использовать команду главного меню приложения Главное меню – Вид – Редактор панелей.... Рис. 57. Редактор панелей Открыв редактор, пользователь имеет возможность перемещать мышью соответствующий элемент основного окна приложения (нижняя часть формы, выделенная серым фоном) в нужное место. Элементы следует перетаскивать внутрь светлых прямоугольников, выделенных серой линией. В этом случае панели будут находиться в разных строках или колонках. Можно перетащить элемент на уже существующий элемент. В этом случае элементы будут расположены в одной строке или колонке. В центре редактора отображается рабочая область начальной страницы. В нее невозможно поместить ни одну панель. Рис. 58. Пример расположения панелей Для удаления элемента, нужно перенести его со схемы обратно на элемент с серым фоном. Кроме рабочей области основного окна приложения, остальные элементы могут быть убраны из основного окна приложения. Например, можно создать минималистический интерфейс прикладного решения, когда в основном окне присутствуют только рабочая область, панели инструментов и панель открытых. Рис. 59. Минималистичный интерфейс При нажатии кнопки Стандартные, интерфейс будет приведен в состояние, которые прикладной разработчик задал с помощью свойства конфигурации Интерфейс клиентского приложения (см. здесь). 3.3.2. Вспомогательное окно Вспомогательное окно – это окно приложения, в котором открываются формы, созданные в прикладном решении. Вспомогательное окно может быть открыто в рабочей области основного окна приложения и в отдельном окне. Режим открытия вспомогательного окна приложения зависит от значения свойства формы Режим открытия окна (см. здесь). Рис. 60. Структура вспомогательного окна приложения Закрытие вспомогательного окна не приводит к закрытию всего приложения. Вспомогательных окон может быть открыто сколько угодно, но для каждого объекта информационной базы (например, документа или элемента справочника) оно одно, т. е. нельзя открыть несколько окон для просмотра одного и того же документа, если это специально не предусмотрено в прикладном решении. Во вспомогательном окне можно выделить основную форму – форму, которая отображается по умолчанию при открытии вспомогательного окна и которая открывается при нажатии на Главное панели навигации формы. При нажатии на другие ссылки панели навигации формы будут открываться вспомогательные формы. Кнопки управления формами располагаются во все вспомогательных формах. Эти кнопки имеют следующее назначение (слева направо): ● Кнопка перехода к начальной странице; ● Кнопки перехода к предыдущей/следующей форме предназначены для перехода по списку открытых окон. Кнопка перехода к следующей форме активизируется только после того, как хотя бы раз была нажата кнопка перехода к предыдущему окну. ● Кнопка помещения формы в список избранного (см. здесь). Если форма отсутствует в списке избранного – цвет звездочки соответствует фону формы. В противном случае звездочка будет окрашена в желтый цвет. Данная кнопка недоступна, если у пользователя отсутствует право СохранениеДанныхПользователя(см. здесь). 3.3.2.1. Панель навигации формы Панель навигации вспомогательного окна (панель навигации формы) позволяет просматривать различные сведения, логически связанные с данными, которые отображает основная форма окна. В панели навигации могут располагаться команды трех групп: Важное, Перейти и См. также. Общее расположение команд следующее: ● Первой командой всегда является команда Главное (выделена полужирным шрифтом), которая предназначена для открытия основной формы вспомогательного окна приложения. ● Затем следуют команды группы Важное. ● Затем следуют команд группы Перейти. ● Последними следуют команды группы См. также. Если разработчик конфигурации определил собственные группы команд из категории Панель навигации формы, то команды из этих групп будут располагаться непосредственно перед командами группы См. также (команды этой группы всегда располагаются в самом конце панели навигации формы). Если команды не помещаются на панели навигации, то последней командой панели будет выступать подменю Еще, в котором будут располагаться все команды, которые не поместились на отображаемой части панели навигации. 3.3.2.2. Командная панель формы Командная панель формы содержит команды, непосредственно связанные с объектом, который отображается в основной форме. Существуют стандартные группы Важное и Создать на основании; кроме того, на панели могут размещаться группы, созданные разработчиком. Каждая команда из группы Важное будет отображаться своей кнопкой на панели. Группа Создать на основании будет оформлена в виде подменю панели. Также в виде подменю будут оформлены все группы команд, созданные разработчиком. Команды формы, такие как Сохранить и закрыть, будут расположены перед командами группы Важное. Если в какой-либо группе нет ни одной команды, то группа не показывается. Если разработчик конфигурации добавил в эту область собственные группы, то они располагаются после группы Создать на основании. В том случае, если все команды командной панели не помещаются на форме, они помещаются в специальное подменю Еще, которое располагается последней командой панели. Исключением является кнопка вызова справки, которая располагается правее подменю Еще в том случае, если для формы установлена справочная информация. Глава 4. Встроенный язык «1С:Предприятие» является гибкой настраиваемой системой, с помощью которой можно решать широкий круг задач в сфере автоматизации деятельности предприятий. Специфические алгоритмы конфигурации описываются в конфигураторе системы «1С:Предприятие», в программных модулях, содержащих тексты на встроенном языке системы «1С:Предприятие». 4.1. Назначение и краткая характеристика встроенного языка Встроенный язык системы «1С:Предприятие» предназначен для описания (на стадии разработки конфигурации) алгоритмов функционирования прикладной задачи. Встроенный язык (далее по тексту – язык) представляет собой предметно-ориентированный язык программирования, специально разработанный с учетом возможности его применения не только профессиональными программистами. В частности, все операторы языка имеют как русское, так и англоязычное написание, которое можно использовать одновременно в одном исходном тексте. Основной язык, описываемый в данной книге, – русский, однако для каждого оператора языка приводится его англоязычный синоним. При своей относительной простоте язык обладает некоторыми объектно-ориентированными возможностями, например, правила доступа к свойствам и методам специализированных типов данных (документам, справочникам и т. п.) подобны свойствам и методам объектов, используемых в других объектно-ориентированных языках. Однако специализированные типы данных не могут определяться средствами самого языка, а задаются в визуальном режиме. Типизация переменных в языке не жесткая, т. е. тип переменной определяется ее значением. Переменные не обязательно объявлять в явном виде. Неявным определением переменной является ее первое упоминание в левой части оператора присваивания. Возможно также явное объявление переменных при помощи соответствующего оператора. Допускается применение массивов, структур, соответствий и других универсальных коллекций значений. 4.2. Формат исходных текстов программных модулей 4.2.1. Что такое программный модуль Программные модули в конфигурации системы «1С:Предприятие» не являются самостоятельными программами в общепринятом понимании этого слова, поскольку они являются только частью всей конфигурации. Программный модуль – это текст на встроенном языке, в котором размещены тексты процедур и функций с необходимыми алгоритмами, вызываемые системой в определенные моменты работы. Поэтому программный модуль не имеет формальных границ своего описания типа: «Начало модуля» – «Конец модуля». Место размещения конкретного программного модуля предоставляется конфигуратором в тех точках конфигурации, которые требуют описания специфических алгоритмов функционирования. Эти алгоритмы следует оформлять в виде процедур или функций, которые будут вызваны самой системой в заранее предусмотренных ситуациях (например, при нажатии кнопки в диалоговом окне). Каждый отдельный программный модуль воспринимается системой как единое целое, поэтому все процедуры и функции программного модуля выполняются в едином контексте. 4.2.2. Контекст выполнения программного модуля Каждый программный модуль связан с остальной частью конфигурации. Эта связь называется контекстом выполнения модуля. Следует различать два вида контекста: ● глобальный контекст, ● локальный контекст выполнения конкретного модуля. 4.2.2.1. Глобальный контекст Глобальный контекст образуется: ● значениями свойств и методов глобального контекста; ● системными перечислениями и системными наборами значений (например, КодВозвратаДиалогаи Символы). Глобальный контекст виден всем программным модулям и определяет общую языковую среду конфигурации. 4.2.2.2. Локальный контекст Локальный контекст модуля образуется тем конкретным местом конфигурации задачи, для которого использован программный модуль. Локальный контекст виден только конкретному программному модулю и определяет для модуля набор непосредственно доступных модулю объектов, их свойств и методов. 4.2.3. Виды программных модулей В системе «1С:Предприятие» существуют несколько видов программных модулей. Они различаются по месту размещения и доступному контексту. 4.2.3.1. Модуль управляемого приложения Модулем управляемого приложения называется модуль, который автоматически выполняется в момент загрузки конфигурации, при старте системы «1С:Предприятие» в следующих режимах: ● тонкого клиента, ● веб-клиента, ● толстого клиента в режиме управляемого приложения. Модуль управляемого приложения предназначен для отработки действий, связанных с сеансом работы конечного пользователя (прежде всего обработки начала и окончания сеанса работы). Модуль управляемого приложения недоступен для процедур, работающих на сервере. В нем рекомендуется реализовывать только обработчики соответствующих событий. Процедуры и функции модуля управляемого приложения, а также переменные, для которых в заголовке указано ключевое слово Экспорт, являются доступными: ● в неглобальных клиентских общих модулях, ● клиентских процедурах и функциях модуля команды, ● клиентских процедурах и функциях модуля управляемой формы. В контексте модуля управляемого приложения доступны: ● часть глобального контекста, которая может исполняться в управляемом приложении; ● экспортируемые процедуры и функции любых клиентских общих модулей; ● экспортируемые процедуры и функции серверных неглобальных общих модулей, у которых установлено свойство Вызов сервера. 4.2.3.2. Модуль внешнего соединения Модуль внешнего соединения расположен, как и модуль приложения, в корневом разделе конфигурации. В нем располагаются процедуры-обработчики событий, которые инициализируются при старте и окончании работы системы в режиме внешнего соединения (СОМ-соединения). В модуле внешнего соединения возможно объявление переменных, а также объявление и описание процедур и функций, которые будут доступны для внешнего приложения. Объекты «1С:Предприятия», доступные извне через COM-соединение: ● экспортируемые переменные и процедуры/функции модуля внешнего соединения; ● экспортируемые переменные и процедуры/функции общих модулей: ● включение и исключение модулей целиком выполняются с помощью установки свойств общих модулей; ● включение и исключение фрагментов общих модулей выполняются с помощью инструкций препроцессора; ● глобальный контекст «1С:Предприятия». Модуль присутствует только в сессии внешнего соединения. В данном режиме характерно полное отсутствие пользовательского интерфейса. 4.2.3.3. Модуль сеанса Модулем сеанса называется модуль, который автоматически выполняется при старте системы «1С:Предприятие» в момент загрузки конфигурации. Модуль сеанса предназначен для инициализации параметров сеанса и отработки действий, связанных с сеансом работы. Этот общий модуль всегда исполняется в привилегированном режиме сервера «1С:Предприятия». Установка параметров сеанса выполняется в обработчике события УстановкаПараметровСеанса(). Исполнение модуля сеанса происходит до начала исполнения модуля управляемого приложения (модуля внешнего соединения). Модуль сеанса может содержать только определения процедур и функций, может использовать процедуры из общих модулей конфигурации и не содержит экспортируемых процедур и функций. 4.2.3.4. Общие модули Общие модули располагаются в отдельной ветке дерева метаданных. Основным назначением общих модулей является содержание общих алгоритмов конфигурации, доступных из разных модулей. В общих модулях отсутствует раздел определения переменных и раздел основной программы, то есть они содержат только раздел процедур и функций (см. раздел «Структура программного модуля»). В любом общем модуле возможно объявление и описание процедур и функций, которые будут доступны в любом модуле конфигурации. Подробнее про общие модули см. здесь. 4.2.3.5. Модули прикладных объектов Набор прикладных объектов имеет собственные модули. К таким объектам относятся: ● Менеджеры значения константы, ● Справочники, ● Документы, ● Отчеты, ● Обработки, ● Планы видов характеристик, ● Планы счетов, ● Планы видов расчетов, ● Планы обмена, ● Бизнес-процессы, ● Задачи, ● Регистры. Модули располагаются в ветках конфигурации, в которых содержатся сами объекты, и являются свойствами объектов. Каждый объект имеет свой индивидуальный модуль. В этих модулях возможно объявление переменных, процедур и функций, которые будут доступны при работе с объектом извне во встроенном языке, дополняя контекст объекта. В контексте модуля прикладного объекта имеется доступ к реквизитам и табличным частям объекта, а также его методам и событиям. 4.2.3.6. Модули менеджеров объектов Каждый прикладной объект имеет менеджер, предназначенный для управления этим объектом как объектом конфигурации. С помощью менеджера можно создавать объекты, работать с формами и макетами. Модуль менеджера позволяет расширить функциональность менеджеров за счет введения процедур и функций на встроенном языке. Фактически это позволяет описать методы для объекта конфигурации (например, справочника), которые относятся не к конкретному экземпляру объекта базы данных, а к самому объекту конфигурации. Контекст модуля менеджера образуется: ● свойствами и методами глобального контекста; ● экспортируемыми процедурами и функциями глобальных общих модулей (если эти модули компилируются на сервере); ● экспортируемыми процедурами и функциями неглобальных общих модулей (если эти модули компилируются на сервере); ● локальным контекстом самого модуля. Модуль менеджера не может иметь переменных и тела модуля. Если функции или процедуры модуля менеджера объявлены как экспортируемые, к ним можно будет получить доступ через менеджер объекта. Например, опишем функцию в модуле менеджера справочника Контрагенты: Функция ПолучитьСписокДебиторов() Экспорт... КонецФункции Тогда вызов этой функции из прикладного кода будет выглядеть следующим образом: Дебиторы = Справочники.Контрагенты.ПолучитьСписокДебиторов(); 4.2.3.7. Модули форм Эти модули содержатся в формах конфигурации (см. здесь). Каждая форма имеет свой индивидуальный модуль. В этих модулях возможно объявление переменных, процедур и функций, которые будут доступны при работе с формой извне во встроенном языке, дополняя контекст формы. Контекст формы будет образован: ● локальным контекстом самого модуля формы, реквизитами формы, которой «принадлежит» модуль; ● свойствами и методами объекта УправляемаяФормавстроенного языка; ● свойствами и методами расширения формы, определяемого типом того объекта, данные которого содержатся в основном реквизите формы; ● глобальным контекстом, в том числе неглобальными общими модулями и экспортируемыми функциями и процедурами глобальных общих модулей, при этом нужно обеспечивать согласованность того, как описана процедура в модуле формы (&НаКлиенте, &НаСервереи т. д.), и того, какие свойства установлены у общего модуля (Клиент (управляемое приложение), Сервер и т. д.); ● экспортируемыми переменными, процедурами и функциями модуля управляемого приложения. 4.2.3.8. Модули команд Модуль команды предназначен для того, чтобы описать в нем на встроенном языке те действия, которые должна выполнить система при вызове команды. Модуль команды может содержать только описание процедур и функций. Модуль команды не может иметь переменных и тела модуля. Обработчик ОбработкаКоманды()обязательно должен предваряться директивой препроцессора &НаКлиенте, т. к. именно там начинается исполнение команды. Контекст клиентских процедур модуля команды образуется: ● глобальным контекстом, в том числе неглобальными общими модулями и экспортируемыми функциями и процедурами глобальных общих модулей, при этом нужно обеспечивать согласованность того, как описана процедура в модуле формы (&НаКлиенте, &НаСервереи т. д.), и того, какие свойства установлены у общего модуля (Клиент (управляемое приложение), Сервер и т. д.); ● локальным контекстом самого модуля команды. Контекст серверных процедур модуля команды образуется: ● свойствами и методами глобального контекста; ● экспортируемыми процедурами и функциями глобальных общих модулей, если эти модули компилируются на сервере; ● неглобальными общими модулями, если эти модули компилируются на сервере; доступны экспортируемые методы таких модулей; ● серверными методами модуля команды. В модуле команды можно описывать методы с ключевым словом Экспорт. Однако как-либо использовать их за пределами этого модуля нельзя. Из встроенного языка невозможно получить доступ к командам и, следовательно, к их контексту тоже. 4.2.4. Формат программного модуля Структуру программного модуля можно подразделить на следующие разделы: ● раздел определения переменных, ● раздел процедур и функций, ● раздел основной программы. В конкретном программном модуле любой из разделов может отсутствовать. Раздел определения переменных размещается от начала текста модуля до первого оператора Процедура, или оператора Функция, или любого исполняемого оператора. В этом разделе могут находиться только операторы объявления переменных Перем. Раздел процедур и функций размещается от первого оператора Процедураили оператора Функциядо любого исполняемого оператора вне тела описания процедур или функций. Раздел основной программы размещается от первого исполняемого оператора вне тела последней процедуры или функции до конца модуля. В этом разделе могут находиться только исполняемые операторы. Раздел основной программы исполняется в момент инициализации модуля. Обычно в разделе основной программы имеет смысл размещать операторы инициализации переменных какими-либо конкретными значениями, которые необходимо провести до первого вызова любой из процедур или функций модуля. Исходный текст программного модуля может состоять из операторов и комментариев. 4.2.4.1. Комментарии Комментарий используется для размещения в исходном тексте программного модуля всякого рода пояснений к работе модуля. Хорошим тоном программирования считается, когда исходный текст содержит исчерпывающий комментарий с описанием алгоритма. В режиме исполнения программы комментарии пропускаются. В тексте программного модуля комментарий начинается парой символов «//» и заканчивается концом строки. Это значит, что комментарий можно начинать с начала строки или записывать его после оператора на той же строке. После начала комментария нельзя писать оператор на той же строке, необходимо закончить комментарий концом строки. А=В; // Это – комментарий // Это тоже комментарий 4.2.4.2. Формат операторов Операторы имеют вид стандартного обращения к процедуре, за исключением оператора присваивания (А = В;) и синтаксических конструкций встроенного языка (например, таких как Для, Пока, Если). Между собой операторы обязательно следует разделять символом точка с запятой. Конец строки не является признаком конца оператора, т. е. операторы могут свободно переходить через строки и продолжаться на другой строке. Можно располагать произвольное число операторов в одной строке, разделяя их символом точка с запятой. Операторы языка в программном модуле можно подразделить на две категории: операторы объявления переменных и исполняемые операторы. Операторы объявления переменных создают имена переменных, которыми манипулируют исполняемые операторы. Любой исполняемый оператор может иметь метку, используемую в качестве точки перехода в операторе Перейти. В общем случае формат оператора языка следующий: ~метка:Оператор[(параметры)] [ДобКлючевоеСлово]; В качестве меток используются специальные идентификаторы, начинающиеся с символа тильда и состоящие из последовательности букв, цифр и символов подчеркивание. Чтобы пометить оператор, нужно поместить перед ним метку и следующий за ней символ двоеточие. ~метка:А=В; 4.2.4.3. Имена переменных, процедур и функций Именем переменной, объявленной процедуры или функции может быть любая последовательность букв, цифр и знаков подчеркивания, начинающаяся с буквы или знака подчеркивания. Вновь создаваемые имена не должны совпадать с зарезервированными словами языка или именами свойств, непосредственно доступных в текущем контексте. Распознавание имен переменных, процедур и функций ведется без учета регистра букв. 4.2.4.4. Язык написания программных модулей Встроенный язык системы «1С:Предприятие» является двуязычным. Почти все зарезервированные слова, имена типов значений, свойств, методов, событий имеют два имени: русское и английское. Исключение составляют слова, не имеющие аналогов в русском языке. В тексте программных модулей эти имена можно свободно смешивать, используя то русские, то английские имена без каких-либо ограничений. 4.2.4.5. Регистры букв при написании программных модулей Регистр букв (строчные или заглавные) при написании имен переменных, свойств, методов, процедур, функций, а также функций встроенного языка не имеет значения. 4.2.4.6. Зарезервированные слова Приведенные далее ключевые слова являются зарезервированными и не могут использоваться в качестве создаваемых имен переменных, реквизитов объектов конфигурации и объявляемых процедур и функций. В данном варианте языка каждое из ключевых слов имеет два представления – русское и английское. Русское имя Английское имя Если If Тогда Then ИначеЕсли ElsIf Иначе Else КонецЕсли EndIf Для For Каждого Each Из In По To Пока While Цикл Do КонецЦикла EndDo Процедура Procedure Функция Function КонецПроцедуры EndProcedure КонецФункции EndFunction Перем Var Перейти Goto Возврат Return Продолжить Continue Прервать Break И And Или Or Не Not Попытка Try Исключение Except ВызватьИсключение Raise КонецПопытки EndTry Новый New Выполнить Execute ПРИМЕЧАНИЕ. Регистр букв (строчные или заглавные) при написании не имеет значения. 4.2.5. Специальные символы, используемые в исходном тексте Сим вол Описание // Двумя знаками косая черта начинается комментарий. Комментарием считается весь текст от символа до конца текущей строки | Используется только в строковых константах в начале строки и означает, что данная строка является продолжением предыдущей (перенос строки) ~ Начало метки оператора : Окончание метки оператора ; Символ разделения операторов () В круглые скобки заключается список параметров методов, процедур, функций и конструкторов. Также они используются в выражениях встроенного языка [] С помощью оператора квадратные скобки производится обращение к свойствам объекта по строковому представлению имени свойства. Также возможно обращение к элементам коллекций по индексу или другому параметру , Разделяет параметры в списке параметров методов, процедур, функций и конструкторов "" Обрамляет строковые литералы '' Обрамляет литералы даты . Десятичная точка в числовых литералах. Разделитель, используемый для обращения к свойствам и методам объектов встроенного языка + Операция сложения. Операция конкатенации строк - Операция вычитания * Операция умножения / Операция деления % Получение остатка от деления. Допускается использование дробных значений делимого и делителя > Логическая операция Больше >= Логическая операция Больше или равно < Логическая операция Меньше <= Логическая операция Меньше или равно = Операция присваивания. Логическая операция Равно <> Логическая операция Не равно 4.3. Примитивные типы данных Во встроенном языке системы «1С:Предприятие» поддерживается набор примитивных типов данных. Для большинства примитивных типов данных предусмотрена возможность использования в тексте модуля литералов, то есть указание значения соответствующего типа непосредственно в модуле. // Пример использования литерала типа Строка А = "Моя строка"; // Пример использования литерала типа Булево Б = Истина; // Пример использования литерала типа Число В = 12345.6789; NULL Описание: Значения данного типа используются исключительно для определения отсутствующего значения при работе с базой данных, например, при соединении таблиц. Литералы: NULL Булево (Boolean) Описание: Значения данного типа имеют два значения – Истинаи Ложь, задаваемых соответствующими литералами. Значения данного типа возвращаются в качестве результата вычисления логических выражений. Примечание: В операциях сравнения встроенного языка используются логические выражения. Это означает, что в выражении сравнения не обязательно писать так: Если МояПеременная = Истина Тогда КонецЕсли; Достаточно написать так: Если МояПеременная Тогда КонецЕсли; Литералы: ● Истина(True), ● Ложь(False). Дата (Date) Описание: Значения данного типа содержат дату от Рождества Христова (с 01 января 0001 года) и время с точностью до секунды. Литералы: Строка цифр, заключенная в одинарные кавычки вида ‘ГГГГММДДччммсс’, где: ● ГГГГ– четыре цифры года (включая тысячелетие и век); ● ММ– две цифры месяца; ● ДД– две цифры даты; ● чч– две цифры часа (в 24-часовом формате); ● мм– две цифры минут; ● сс– две цифры секунд. Во встроенном языке в литерале типа Датаобязательно должно задаваться значение года, месяца и дня. Для задания даты, соответствующей началу отсчета, достаточно указать '00010101'. Допускается при указании литералов типа Датаопускать последние символы (секунды, минуты, часы и т. д.). Это означает, что данные параметры будут равны нулю (для времени) или единице (для даты). В литерале даты допускается использование различных разделителей. Пример: Дата('2008.03.23 10:45:23') = "23.03.2008 10:45:23" Число (Number) Описание: Числовым типом может быть представлено любое десятичное число. Определены основные арифметические операции над данными числового типа: сложение, вычитание, умножение и деление. ВНИМАНИЕ! Максимально допустимая разрядность числа – 32 знака. Литералы: Набор цифр, написанных непосредственно в тексте модуля вида: [+|-]{0|1|2|3|4|5|6|7|8|9}[.{0|1|2|3|4|5|6|7|8|9}] В качестве разделителя целой и дробной части используется точка. Пример: А = 15; Б = -968.612; Строка (String) Описание: Значения данного типа содержат строку произвольной длины в формате Unicode. Литералы: Литералы строкового типа представляют собой набор символов, заключенных в кавычки. Для задания в строке символа " (кавычка) необходимо записать две кавычки подряд (""). Кроме того, допускаются «многострочные» строковые константы. В исходном тексте многострочные константы могут задаваться двумя способами: ● Между фрагментами, представляющими отдельные строки многострочной строки, не должно встречаться никаких символов, за исключением пробелов, переводов строки и строк комментариев. ● Каждая отдельная составляющая не замыкается кавычками, а на каждой последующей строке помещен символ переноса строки «|» (вертикальная черта). В этом варианте комментарии допускаются, если строка начинается с символа комментария «//». Пример: // Пример строки МояСтрока = "Это правильная строка"; // Пример 1 многострочной строки МояМногострочнаяСтрока = "Это |правильная |многострочная |строка"; // Пример 2 многострочной строки МояМногострочнаяСтрока = "Это тоже" //Это комментарий "правильная" "многострочная" "строка"; // Пример 3 строки с кавычками НазваниеФирмы = "ООО ""Василек"""; Результат вывода на экран или печать строки НазваниеФирмы(пример 3) будет выглядеть следующим образом: ООО "Василек" Неопределено (Undefined) Описание: Значение данного типа применяется, когда необходимо использовать пустое значение, не принадлежащее ни к одному другому типу. Например, такое значение изначально имеют реквизиты с составным типом значения. Существует одно-единственное значение данного типа, задаваемое литералом. Литералы: Неопределено(Undefined) Тип (Type) Описание: Значения данного типа используются для идентификации типов значений. Это необходимо для определения и сравнения типов. Данный тип не имеет литералов и возвращается функциями встроенного языка ТипЗнчи Тип(см. ниже). 4.4. Оператор присваивания Оператор присваивания (=) Описание: Оператор присваивания (символ «=») означает присваивание значения <Источник>переменной, обозначенной как <Назначение>. Синтаксис: <Назначение> = <Источник>; Параметры: <Назначение> В качестве назначения может выступать переменная или свойство объекта встроенного языка, которое допускает запись. <Источник> Выражение, значение которого необходимо присвоить. Пример: А = В; Стр1 = "777"; ДатаДокумента = '20020717'; 4.5. Выражения языка Выражение – это математическая, логическая или строковая формула, состоящая из соответствующих операций, по которой вычисляется значение. Математическое и логическое выражение может стоять справа от знака равенства в операторах присваивания, быть параметром процедур или функций. Логическое выражение также может быть условием в управляющих конструкциях Если, Пока, Для. Выражения состоят из констант, переменных и функций, связанных символами логических и/или арифметических операций. 4.5.1. Арифметические операции В языке определены следующие виды арифметических операций. Название Выражение Сложение (Оп1 + Оп2) Вычитание (Оп1 – Оп2) Умножение (Оп1 * Оп2) Деление (Оп1 / Оп2) Остаток от деления (Оп1 % Оп2) Унарный минус (-Оп1) Арифметические операции имеют один или два операнда, в зависимости от типа которых операция имеет ту или иную семантику. Тот или иной семантический вариант операции определяется по первому операнду. В случае несовпадения типа второго операнда с требуемым значение преобразуется к требуемому типу в соответствии с правилами преобразования типов. Если тип первого операнда не соответствует ни одному из допустимых типов, то в зависимости от ситуации может производиться преобразование типов или возбуждаться состояние ошибки выполнения. Операция Описание действия Сложение определено для следующих типов операндов Число+ Число Дата+ Число(к дате прибавляется число секунд) Вычитание определено для следующих типов операндов Число– Число Дата– Число(от даты отнимается число секунд) Дата– Дата(результатом является разница между двумя датами, измеренная в секундах) Умножение Число* Число Деление Число/ Число Остаток от деления Число% Число 4.5.2. Операция конкатенации Операция конкатенации («+») используется для того, чтобы присоединить одну строку к другой. Длина результирующей строки равна сумме длин соединяемых строк. В случае несовпадения типа данных второго или последующих операндов со строковым типом их значение преобразуется к строковому типу в соответствии с правилами преобразования типов. ФИО = Фамилия + " " + Имя + " " + Отчество; 4.5.3. Логические операции Логическая операция сравнивает операнды и вырабатывает значение типа Булево: Истинаили Ложь. Существует два вида логических операций: операции сравнения и булевы операции. В операциях сравнения сравниваются два значения. Булевы операции выполняются над значениями типа Булево, реализуя булеву алгебру. Символы булевых операций могут комбинироваться, образуя составные операции. Операции сравнения: В языке определены следующие виды операций сравнения. Операция Выражение операции Больше Оп1 > Оп2 Больше или равно Оп1 >= Оп2 Равно Оп1 = Оп2 Не равно Оп1 <> Оп2 Меньше Оп1 < Оп2 Меньше или равно Оп1 <= Оп2 Операции сравнения определены для следующих типов операндов. Операция Выражение операции Больше Число> Число Строка> Строка Дата> Дата Больше или равно Число>= Число Строка>= Строка Дата>= Дата Меньше Число< Число Строка< Строка Дата< Дата Меньше или равно Число<= Число Строка<= Строка Дата<= Дата Равно Любой тип = Любой тип Не равно Любой тип <> Любой тип Булевы операции: В языке определены следующие виды булевых операций. И(AND) конъюнкция (булево И) ИЛИ(OR) дизъюнкция (булево ИЛИ) НЕ(NOT) логическое отрицание (булево отрицание НЕ) Логические выражения вычисляются слева направо. Для того чтобы избежать неоднозначности и управлять последовательностью операндов, следует применять круглые скобки. Уровни старшинства логических операций: Уровень 1 операнды, заключенные в скобки Уровень 2 НЕ Уровень 3 И Уровень 4 ИЛИ ПРИМЕЧАНИЕ. При вычислении логического выражения вычисляются только необходимые части выражения. Например, в выражении (Цена > 0) И ПроверкаСуммы(), если Цена <= 0, функция ПроверкаСуммы()не вызывается. 4.6. Операторы и синтаксические конструкции ? (вычислить выражение по условию) Описание: Позволяет вычислить одно из двух заданных выражений в зависимости от результата вычисления логического выражения. Синтаксис: ?(<Логическое выражение>, <Выражение 1>, <Выражение 2>) Параметры: <Логическое выражение> Логическое выражение, результат вычисления которого определяет одно из результирующих выражений, которые будут вычислены. Если результат его вычисления Истина, то будет вычисляться <Выражение 1>. Если результат Ложь, то <Выражение 2>. <Выражение 1> Результирующее выражение, которое будет вычисляться, если результат логического выражения Истина. <Выражение 2> Результирующее выражение, которое будет вычисляться, если результат логического выражения Ложь. Возвращаемое значение: Результат вычисления одного из результирующих выражений. Пример: Статус = ?(ПолучитьСкидку() > 10, "Особый клиент", "Обычный клиент"); Предупреждение(Статус); ВызватьИсключение (Raise) Описание: При использовании данной формы оператора вызывается новое исключение. Синтаксис: ВызватьИсключение <Выражение> Англоязычный синтаксис: Raise <Expression> Параметры: <Выражение> Результат вычисления выражения преобразуется к строке, и данная строка используется в качестве описания исключения. Пример: ВызватьИсключение "Документ не может быть проведен"; См. также: Описание оператора Попытка. Выполнить (Execute) Описание: Позволяет выполнить фрагмент кода, который передается ему в качестве строкового значения. ВНИМАНИЕ! Не рекомендуется реализовывать с помощью этого метода существенную часть функциональности прикладных решений. ПРИМЕЧАНИЕ. Исполняемый код не может содержать в себе отдельных процедур или функций, т. к. исполнение кода само по себе идет в рамках процедуры или функции, в которой использован этот оператор. А также не может содержать явного объявления переменных. Синтаксис: Выполнить(<Строка>) Англоязычный синтаксис: Execute(<Строка>) Параметры: <Строка> Строка, содержащая текст исполняемого кода. Пример: // Выводит в окно сообщений текущую дату Выполнить("Сообщить(ТекущаяДата())"); ДобавитьОбработчик (AddHandler) Описание: Добавляет обработчик события. При добавлении обработчика события производится проверка соответствия числа параметров события числу параметров метода, назначаемого в качестве обработчика. Синтаксис: ДобавитьОбработчик <Событие>, <ОбработчикСобытия>; Англоязычный синтаксис: AddHandler <Событие>, <ОбработчикСобытия>; Параметры: <Событие> Событие, которому добавляется обработчик. Событие задается в форме <Выражение>.<ИмяСобытия>, где: ● <Выражение>– произвольное выражение на встроенном языке. Его результатом должен быть объект, к событию которого добавляется обработчик. ● <ИмяСобытия>– идентификатор (имя) события. <ОбработчикСобытия> Процедура/функция-обработчик события. Обработчиком события может являться метод объекта встроенного языка. Тогда <ОбработчикСобытия>задается как <Выражение>.<ИмяОбработчика>, где: ● <Выражение>– произвольное выражение на встроенном языке. Его результатом должен быть объект, метод которого служит обработчиком события. ● <ИмяОбработчика>– имя метода обработчика события. Также в качестве обработчика события может быть задана процедура/функция, находящаяся в области видимости. В этом случае обработчик события задается как имя процедуры/функции. Имеется возможность оформлять подписку на одноименные (в COM-объектах) события, но с разным числом параметров. Для этого на встроенном языке необходимо создать несколько обработчиков (каждый с указанием уникального имени и с указанием нужного количества параметров), а механизм подписки сам выберет нужный обработчик для нужной подписки. Пример: Обработка = Обработки.КонтрольДокумента.Создать(); Накладная = Документы.Накладная.СоздатьДокумент(); ДобавитьОбработчик Накладная.ПриЗаписи, Обработка.ПриЗаписиДокумента; msword = Новый COMОбъект("Word.Application"); ДобавитьОбработчик msword.DocumentChange, ПриИзмененииДокумента; Процедура ПриИзмененииДокумента() Сообщить("Документ изменен"); КонецПроцедуры Пример с разными параметрами: // Обработчик без параметров Процедура ОбработкаСобытия() КонецПроцедуры // Обработчик с одним параметром Процедура ОбработкаСобытия2(Параметр) КонецПроцедуры // Объект может генерировать события как с параметром, // так и без параметров Объект = Новый COMОбъект("Test.Events"); ДобавитьОбработчик Объект.TestEvent, ОбработкаСобытия ДобавитьОбработчик Объект.TestEvent, ОбработкаСобытия2 Для (For) Описание: Оператор цикла Дляпредназначен для циклического повторения операторов, находящихся выполнения цикла значение <Выражение 1>присваивается переменной <Имя переменной>. при каждом проходе цикла. Величина приращения счетчика при каждом выполнении цикла <Имя переменной>меньше или равно значению <Выражение 2>. Условие выполнения цикла внутри конструкции Цикл– КонецЦикла. Перед началом Значение <Имя переменной>автоматически увеличивается равна 1. Цикл выполняется, пока значение переменной всегда проверяется вначале, перед выполнением цикла. Синтаксис: Для <Имя переменной> = <Выражение 1> По <Выражение 2> Цикл // Операторы [Прервать;] // Операторы [Продолжить;] // Операторы КонецЦикла; Англоязычный синтаксис: For <Имя переменной> = <Выражение 1> To <Выражение 2> Do // Операторы [Break;] // Операторы [Continue;] // Операторы EndDo; Параметры: <Имя переменной> Идентификатор переменной (счетчика цикла), значение которой автоматически увеличивается на 1 при каждом повторении цикла. Так называемый счетчик цикла. <Выражение 1> Числовое выражение, которое задает начальное значение, присваиваемое счетчику цикла при первом проходе цикла. По Синтаксическая связка для параметра <Выражение 2>. <Выражение 2> Максимальное значение счетчика цикла. Когда переменная <Имя переменной>становится больше чем <Выражение 2>, выполнение оператора цикла Дляпрекращается. Цикл Операторы, следующие за ключевым словом Цикл, выполняются, пока значение переменной <Имя переменной>меньше или равно значению <Выражение 2>. // Операторы Исполняемый оператор или последовательность таких операторов. Прервать Позволяет прервать выполнение цикла в любой точке. После выполнения этого оператора управление передается оператору, следующему за ключевым словом КонецЦикла. Продолжить Немедленно передает управление в начало цикла, где производится вычисление и проверка условий выполнения цикла. Операторы, следующие в теле цикла за ним, на данной итерации обхода не выполняются. КонецЦикла Ключевое слово, которое завершает структуру оператора цикла. Пример: // Перебор дней текущего месяца ПоследнийДеньМесяца = День(КонецМесяца(ТекущаяДата())); Для ТекДень = 1 по ПоследнийДеньМесяца Цикл Состояние("Обрабатывается день: "+ ТекДень); // Операторы обработки очередного дня месяца... КонецЦикла; Для каждого (For each) Описание: Оператор цикла Для каждогопредназначен для циклического обхода коллекций значений. При каждой итерации цикла возвращается новый элемент коллекции. Обход осуществляется до тех пор, пока не будут перебраны все элементы коллекции, или может быть завершен досрочно при выполнении оператора Прервать. Синтаксис: Для каждого <Имя переменной 1> Из <Имя переменной 2> Цикл // Операторы [Прервать;] // Операторы [Продолжить;] // Операторы КонецЦикла Англоязычный синтаксис: For each <Имя переменной 1> In <Имя переменной 2> Do // Операторы [Break;] // Операторы [Continue;] // Операторы EndDo; Параметры: <Имя переменной 1> Переменная, которой при каждом повторении цикла присваивается значение очередного элемента коллекции. Из Синтаксическая связка для параметра <Имя переменной 2>. <Имя переменной 2> Переменная или выражение, предоставляющее коллекцию. Элементы этой коллекции будут присваиваться параметру <Имя переменной 1>. Цикл Операторы, следующие за ключевым словом Цикл, выполняются до тех пор, пока не будут перебраны все элементы коллекции. // Операторы Исполняемый оператор или последовательность таких операторов. Прервать Позволяет прервать выполнение цикла в любой точке. После выполнения этого оператора управление передается оператору, следующему за ключевым словом КонецЦикла. Продолжить Немедленно передает управление в начало цикла, где производится вычисление и проверка условий выполнения цикла. Операторы, следующие в теле цикла за ним, на данной итерации обхода не выполняются. КонецЦикла Ключевое слово, которое завершает структуру оператора цикла. Пример: // Перебор строк табличной части документа. Документ = Документы.РасходнаяНакладная.НайтиПоКоду(12345); // Проверим, найден нужный нам документ или нет Если Не Документ.Пустая() Тогда Для каждого СтрокаСостава из Документ.Состав Цикл Состояние("Строка: " + Документ.Состав.Индекс(СтрокаСостава)+1); // Операторы обработки очередной строки табличной части... КонецЦикла; КонецЕсли; Если (If) Описание: Оператор Еслиуправляет выполнением программы, основываясь на результаты одного или более логических выражений. Оператор может содержать любое количество групп операторов, возглавляемых конструкциями ИначеЕсли – Тогда. Синтаксис: Если <Логическое выражение> Тогда // Операторы [ИначеЕсли <Логическое выражение> Тогда] // Операторы [Иначе] // Операторы КонецЕсли; Англоязычный синтаксис: If <Логическое выражение> Then // Операторы [ElsIf <Логическое выражение> Then] // Операторы [Else] // Операторы EndIf; Параметры: <Логическое выражение> Логическое выражение. Тогда Операторы, следующие за Тогда, выполняются, если результатом логического выражения является значение Истина. // Операторы Исполняемый оператор или последовательность таких операторов. ИначеЕсли Логическое выражение, следующее за ключевым словом ИначеЕсли, вычисляется только тогда, когда условия в Еслии всех предшествующих ИначеЕслиоказались равны Ложь. Операторы, следующие за конструкцией ИначеЕсли– Тогда, выполняются, если результат логического выражения в данном ИначеЕслиравен Истина. Иначе Операторы, следующие за ключевым словом Иначе, выполняются, если результаты логических выражений в конструкции Еслии всех предшествующих конструкциях ИначеЕслиоказались равны Ложь. КонецЕсли Ключевое слово, которое завершает структуру оператора условного выполнения. Пример: Если ДеньНедели(ТекущаяДата()) = 6 Тогда Сообщить("Сегодня суббота."); ИначеЕсли ДеньНедели(ТекущаяДата()) = 7 Тогда Сообщить("Сегодня воскресенье."); Иначе Сообщить("Сегодня рабочий день."); КонецЕсли; Новый (New) Описание: Оператор позволяет создать значение указанного типа. Допустим только для тех типов, для которых разрешено создание новых значений. Для прикладных объектов необходимо использовать функциональную форму оператора Новый(вариант 2), так как при проверке модулей в конфигураторе не определены типы для прикладных объектов. Синтаксис (вариант 1): Новый <Имя типа>[(<Парам 1>,..., <Парам N>)] Параметры: Имя типа Указывается имя типа, значение которого создается. <Парам 1>,..., <Парам N> После имени типа в скобках могут указываться параметры, если они определены в конструкторах для данного типа. Допустимое количество параметров и их назначение указываются в описании конструкторов объекта. Пример: // Пример создания массива из трех элементов. Массив = Новый Массив(3); Синтаксис (вариант 2): Новый (<Тип>[, <Параметры конструктора>]) Параметры: Тип Имя типа или значение типа Тип. <Параметры конструктора> Массив параметров конструктора. Пример: ТипЗначения = Тип("КвалификаторыСтроки"); Параметры = Новый Массив(2); Параметры[0] = 20; Параметры[1] = ДопустимаяДлина.Переменная; КвалифСтр = Новый(ТипЗначения, Параметры); Перейти (Goto) Описание: Безусловная передача управления на другой оператор программы. Передает управление от одного оператора к другому. Область действия оператора ограничивается программным модулем, процедурой или функцией; он не может передать управление за пределы программного модуля, процедуры или функции. ПРИМЕЧАНИЕ 1. Метка в этом операторе не должна быть меткой перехода на оператор Процедураили Функция. ПРИМЕЧАНИЕ 2. Оператор безусловного перехода не может быть использован для передачи управления на операторы, находящиеся внутри конструкций: Пока– КонецЦикла, Для– КонецЦикла, Для каждого– КонецЦикла, Если– КонецЕсли, Попытка– Исключение– КонецПопыткиизвне этих конструкций. Синтаксис: Перейти <Метка>; Пример: Перейти ~Метка1;... ~ Метка1: Сообщить("Осуществлен переход по метке."); Перем (Var) Описание: Позволяет в явном виде объявить переменную. Синтаксис: Перем <Имя переменной 1> [Экспорт] [, <Имя переменной 2>,...]; Англоязычный синтаксис: Var <Имя переменной 1> [Export] [, <Имя переменной 2>,...]; Параметры: <Имя переменной 1>[, <Имя переменной 2>,...] Задается имя или имена объявляемых переменных. Экспорт Необязательное ключевое слово. Указывает, что данная переменная доступна при обращении к контексту этого модуля из других модулей. Данное ключевое слово необходимо указывать для каждой объявляемой переменной отдельно. Не имеет смысла при объявлении переменных отдельных процедур или функций. Пример: // Пример объявления одной переменной Перем А Экспорт; Перем Б; // Пример объявления нескольких переменных одним оператором Перем А, Б Экспорт; Неявное объявление переменных: В языке необязательно объявлять переменные в явном виде. Неявным определением переменной является первое ее появление в левой части оператора присваивания. Тип переменной определяется типом присвоенного ей значения. Не допускается использование в выражениях переменных, не объявленных ранее в явном или неявном виде. Область использования переменной: Область использования переменных зависит от места их определения в конфигурации. Существует три области, в которых можно объявить переменные: ● В разделе определения переменных программного модуля управляемого приложения. Это глобальные переменные. ● В разделе определения переменных модуля. Это переменные модуля. ● В процедуре или функции. Это локальные переменные. Глобальные переменные, объявленные с ключевым словом Экспорт, доступны для использования в исполняемых операторах, выражениях, в любой процедуре и функции любого клиентского программного модуля конфигурации. Переменные модуля доступны для использования в исполняемых операторах, выражениях, в любой процедуре и функции того программного модуля, в пределах которого они объявлены. Если они объявлены с ключевым словом Экспорт, то они доступны из других модулей через контекст модуля, в котором они объявлены. Локальные переменные доступны в пределах той процедуры или функции, в которой они объявлены. Если переменная определена как глобальная, то она видна из всех процедур и функций любого клиентского программного модуля конфигурации. Если же переменная определена внутри процедуры, то ее областью видимости является данная процедура или функция. Таким образом, если две переменные с одинаковыми именами используются в двух различных процедурах модуля и имя этой переменной не упоминается как глобальное, то это две различные переменные, локальные для процедур. Если же переменная определена как глобальная переменная, то любое использование имени этой переменной будет приводить к обращению к одной и той же переменной. Единственный способ создать для процедуры локальную переменную с именем, совпадающим с именем переменной, определенной как глобальная, – это объявить ее явно при помощи оператора Перем. Пока (While) Описание: Оператор цикла Покапредназначен для циклического повторения операторов, находящихся внутри конструкции Цикл– КонецЦикла. Цикл выполняется, пока логическое выражение равно Истина. Условие выполнения цикла всегда проверяется вначале, перед выполнением цикла. Синтаксис: Пока <Логическое выражение> Цикл // Операторы [Прервать;] // Операторы [Продолжить;] // Операторы КонецЦикла Англоязычный синтаксис: While <Логическое выражение> Do // Операторы [Break;] // Операторы [Continue;] // Операторы EndDo; Параметры: <Логическое выражение> Логическое выражение. Цикл Операторы, следующие за ключевым словом Цикл, выполняются, пока результат логического выражения равен Истина. // Операторы Исполняемый оператор или последовательность таких операторов. Прервать Позволяет прервать выполнение цикла в любой точке. После выполнения этого оператора управление передается оператору, следующему за ключевым словом КонецЦикла. Продолжить Немедленно передает управление в начало цикла, где производится вычисление и проверка условий выполнения цикла. Операторы, следующие в теле цикла за ним, на данной итерации обхода не выполняются. КонецЦикла Ключевое слово, которое завершает структуру оператора цикла. Пример: ВыборкаДок = Документы.РасходнаяНакладная.Выбрать(); // Цикл по всем документам Пока ВыборкаДок.Следующий() Цикл // Отобразим Документ в панели состояния Состояние("Обрабатывается документ №" + ВыборкаДок.Номер); // Операторы выполнения действий над документом КонецЦикла; Попытка (Try) Описание: Оператор Попыткауправляет выполнением программы, основываясь на возникающих при выполнении модуля ошибочных (исключительных) ситуациях, и определяет обработку этих ситуаций. В качестве ошибочных (исключительных) ситуаций воспринимаются ошибки времени выполнения модуля. Не предусмотрено определяемых пользователем исключений. Если при выполнении последовательности операторов попытки произошла ошибка времени выполнения, то выполнение оператора, вызвавшего ошибку, прерывается и управление передается на первый оператор последовательности операторов исключения. При этом управление будет передано даже в том случае, если ошибку вызвал оператор, находящийся в процедуре или функции, вызванной из операторов попытки. Если ошибка произошла в вызванной процедуре или функции, то ее выполнение будет прервано, а локальные переменные – уничтожены. Это справедливо для любой вложенности вызовов. После выполнения последовательности операторов исключения управление передается на следующий за ключевым словом КонецПопыткиоператор. Если же последовательность операторов попытки выполнилась без ошибок, то последовательность операторов исключения будет пропущена и управление также будет продолжено с оператора, следующего за ключевым словом КонецПопытки. Конструкции Попытка– Исключение– КонецПопыткимогут быть вложенными. При этом при возникновении исключительной ситуации управление передается на тот обработчик, в попытке которого произошла ошибка. Если же в последовательности операторов исключения этого обработчика выполняется оператор ВызватьИсключение, выполнение передается вышестоящему обработчику исключения и так далее. Если вышестоящего обработчика нет, исключительная ситуация обрабатывается системно с прекращением выполнения программного модуля. В выдаче диагностики помощь могут оказать встроенные функции ОписаниеОшибки()и ИнформацияОбОшибке()(см. описание функций встроенного языка). Синтаксис: Попытка // Операторы попытки Исключение // Операторы исключения [ВызватьИсключение;] // Операторы исключения КонецПопытки; Англоязычный синтаксис: Try // Операторы попытки Except // Операторы исключения [Raise;] // Операторы исключения EndTry; Параметры: // Операторы попытки Исполняемый оператор или последовательность таких операторов. Исключение Операторы, следующие за ключевым словом Исключение, выполняются, если при выполнении последовательности операторов произошла ошибка времени выполнения. // Операторы исключения Исполняемый оператор или последовательность операторов, которые обрабатывают исключительную ситуацию. ВызватьИсключение Оператор позволяет вызвать исключение в тех случаях, когда, несмотря на отработку исключительной ситуации, необходимо прервать выполнение модуля с ошибкой времени выполнения. Оператор допустим только внутри операторных скобок Исключение– КонецПопытки. Выполнение данного оператора прекращает выполнение последовательности операторов исключения, и производится поиск более «внешнего» обработчика исключения (при вложенных попытках). Если таковой есть, то управление передается на его первый оператор. Если нет, то исключительная ситуация обрабатывается системно, выдается сообщение о первоначально возникшей ошибке, а выполнение модуля прекращается. КонецПопытки Ключевое слово, которое завершает структуру оператора обработки исключительных ситуаций. Пример: Процедура СформироватьВExcel() Попытка // Пытаемся обратиться к программе MS Excel Табл = Новый ComObject("Excel.Application"); Исключение Предупреждение(ОписаниеОшибки()); Возврат; КонецПопытки; // Операторы формирования отчета... КонецПроцедуры Процедура (Procedure) Описание: Ключевое слово Процедураначинает секцию исходного текста, выполнение которого можно инициировать из любой точки программного модуля, просто указав ИмяПроцедуры()со списком параметров (если параметры не передаются, то круглые скобки, тем не менее, обязательны). Если в модуле приложения или общем программном модуле в теле описания процедуры использовано ключевое слово Экспорт, то это означает, что данная процедура является доступной из всех других программных модулей конфигурации. При выполнении оператора Возвратпроцедура заканчивается и возвращает управление в точку вызова. Если в тексте процедуры не встретился оператор Возврат, то после выполнения последнего исполняемого оператора происходит выполнение неявного оператора Возврат. Конец программной секции процедуры определяется по оператору КонецПроцедуры. Переменные, объявленные в теле процедуры в разделе Объявления локальных переменных, являются локальными переменными данной процедуры, поэтому доступны только в этой процедуре (за исключением случая передачи их как параметров при вызове других процедур, функций или методов). ПРИМЕЧАНИЕ. Ключевые слова Процедура, КонецПроцедурыявляются не операторами, а операторными скобками, поэтому не должны заканчиваться точкой с запятой (это может приводить к ошибкам выполнения модуля). Синтаксис: Процедура <ИмяПроцедуры>([[Знач] <Парам 1> [=<ДефЗнач>],...,[Знач] <Парам N> [=<ДефЗнач>]])[Экспорт] // Объявления локальных переменных; // Операторы; ... [Возврат;] // Операторы; ... КонецПроцедуры Англоязычный синтаксис: Procedure <ИмяПроцедуры>([[Val] <Парам 1> [=<ДефЗнач>],...,[Val] <Парам N>[=<ДефЗнач>]])[Export] // Объявления локальных переменных; // Операторы; ... [Return;] // Операторы; ... EndProcedure Параметры: <ИмяПроцедуры> Назначает имя процедуры. Знач Необязательное ключевое слово, которое указывает на то, что следующий за ним параметр передается по значению, т. е. изменение значения формального параметра при выполнении процедуры никак не повлияет на фактический параметр, переданный при вызове процедуры. Если это ключевое слово не указано, то параметр процедуры передается по ссылке, то есть изменение внутри процедуры значения формального параметра приведет к изменению значения соответствующего фактического параметра. <Парам 1>,..., <Парам N> Необязательный список формальных параметров, разделяемых запятыми. Значения формальных параметров должны соответствовать значениям передаваемых при вызове процедуры фактических параметров. В этом списке определяются имена каждого из параметров так, как они используются в тексте процедуры. Список формальных параметров может быть пуст. =<ДефЗнач> Необязательная установка значения параметра по умолчанию. Параметры с установленными значениями по умолчанию можно располагать в любом месте списка формальных параметров (подробнее см. раздел «Передача параметров процедур и функций»). Экспорт Необязательное ключевое слово, которое указывает на то, что данная процедура является доступной из других программных модулей. // Объявления локальных переменных Объявляются локальные переменные, на которые можно ссылаться только в рамках этой процедуры (см. оператор Перем). // Операторы Исполняемые операторы процедуры. Возврат Необязательное ключевое слово, которое завершает выполнение процедуры и осуществляет возврат в точку программы, из которой было обращение к процедуре. Использование данного оператора в процедуре необязательно. КонецПроцедуры Обязательное ключевое слово, обозначающее конец исходного текста процедуры, завершение выполнения процедуры. Возврат в точку, из которой было обращение к процедуре. Пример: Перем Глоб; // Описание процедуры Процедура МояПроцедура(Пар1, Пар2, Пар3) Экспорт Глоб = Глоб + Пар1 + Пар2 + Пар3; Возврат; КонецПроцедуры Глоб = 123; МояПроцедура(5, 6, 7); // Вызов процедуры УдалитьОбработчик (RemoveHandler) Описание: Удаляет обработчик события. При удалении обработчика события производится проверка соответствия числа параметров события числу параметров метода, назначенного в качестве обработчика. Синтаксис: УдалитьОбработчик <Событие>, <ОбработчикСобытия>; Англоязычный синтаксис: RemoveHandler <Событие>, <ОбработчикСобытия>; Параметры: <Событие> Событие, обработчик которого удаляется. Событие задается в форме <Выражение>.<ИмяСобытия>, где: ● <Выражение>– произвольное выражение на встроенном языке. Его результатом должен быть объект, обработчик события которого удаляется. ● <ИмяСобытия>– идентификатор (имя) события. <ОбработчикСобытия> Процедура/функция-обработчик события. Обработчиком события может являться метод объекта встроенного языка. Тогда <ОбработчикСобытия>задается как <Выражение>.<ИмяОбработчика>, где: ● <Выражение>– произвольное выражение на встроенном языке. Его результатом должен быть объект, метод которого служит обработчиком события. ● <ИмяОбработчика>– имя метода обработчика события. Также в качестве обработчика события может быть задана процедура/функция, находящаяся в области видимости. В этом случае обработчик события задается как имя процедуры/функции. Пример: УдалитьОбработчик Накладная.ПриЗаписи, Обработка.ПриЗаписиДокумента; Функция (Function) Описание: Ключевое слово Функцияначинает секцию исходного текста функции, выполнение которой можно инициировать из любой точки программного модуля, просто указав ИмяФункциисо списком параметров (если параметры не передаются, то круглые скобки, тем не менее, обязательны). Если в модуле приложения или общем программном модуле в теле описания функции использовано ключевое слово Экспорт, то это означает, что данная функция является доступной из всех других программных модулей конфигурации. Выполнение функции заканчивается оператором Возврат. Функции отличаются от процедур только тем, что возвращают ВозвращаемоеЗначение. Конец программной секции функции определяется по оператору КонецФункции. Вызов любой функции в тексте программного модуля можно записывать как вызов процедуры, т. е. в языке допускается не принимать от функции возвращаемое значение. Если ключевое слово Возвратв теле функции не указано или строка модуля, его содержащая, не выполнена, то функция возвращает значение типа Неопределено. Переменные, объявленные в теле функции в разделе Объявления локальных переменных, являются локальными переменными данной функции, поэтому доступны только в этой функции (за исключением случая передачи их как параметров при вызове других процедур, функций или методов). ПРИМЕЧАНИЕ. Ключевые слова Функция, КонецФункцииявляются не операторами, а операторными скобками, поэтому не должны заканчиваться точкой с запятой (это может приводить к ошибкам выполнения модуля). Синтаксис: Функция <ИмяФункции>([[Знач] <Парам 1>[=<ДефЗнач>],...,[Знач] <Парам N>[=<ДефЗнач>]])[Экспорт] // Объявления локальных переменных; // Операторы; ... Возврат <Возвращаемое значение>; // Операторы; ... КонецФункции Англоязычный синтаксис: Function <ИмяФункции>([[Val] <Парам 1>[=<ДефЗнач>],...,[Val] <Парам N>[=<ДефЗнач>]])[Export] // Объявления локальных переменных; // Операторы; ... Return <Возвращаемое значение>; // Операторы; ... EndFunction Параметры: <ИмяФункции> Назначает имя функции. Знач Необязательное ключевое слово, которое указывает на то, что следующий за ним параметр передается по значению, т. е. изменение значения формального параметра при выполнении функции никак не повлияет на фактический параметр, переданный при вызове функции. Если это ключевое слово не указано, то параметр функции передается по ссылке, то есть изменение внутри функции значения формального параметра приведет к изменению значения соответствующего фактического параметра. <Парам 1>,..., <Парам N> Необязательный список формальных параметров, разделяемых запятыми. Значения формальных параметров должны соответствовать значениям передаваемых при вызове функции фактических параметров. В этом списке определяются имена каждого из параметров так, как они используются в тексте функции. Список формальных параметров может быть пуст. =<ДефЗнач> Необязательная установка значения параметра по умолчанию. Параметры с установленными значениями по умолчанию можно располагать в любом месте списка формальных параметров (подробнее см. раздел «Передача параметров процедур и функций»). Экспорт Необязательное ключевое слово, которое указывает на то, что данная функция является доступной из других программных модулей. // Объявления локальных переменных Объявляются локальные переменные, на которые можно ссылаться только в рамках этой функции (см. оператор Перем). // Операторы Исполняемые операторы функции. Возврат <Возвращаемое значение> Ключевое слово, которое завершает выполнение функции и возвращает указанное значение в выражение, в котором используется функция. В качестве возвращаемого значения может выступать выражение или переменная, значение которого содержит результат обращения к функции. КонецФункции Ключевое слово, обозначающее конец исходного текста функции. Пример: Перем Глоб; // Описание функции Функция МояФункция(Пар1, Пар2, Пар3) Экспорт Глоб = Глоб + Пар1 + Пар2 + Пар3; Возврат Глоб; КонецФункции Глоб = 123; Рез = МояФункция(5, 6, 7); // Вызов функции 4.7. Основные приемы работы 4.7.1. Обращение к свойствам объектов Помимо основного обращения через точку, в языке системы «1С:Предприятие» предусмотрен механизм обращения к свойствам объектов по строке с именем свойства с помощью оператора [](квадратные скобки). Свойство объекта ([]) Описание: Такая конструкция позволяет обращаться к свойствам объектов так же, как это делается через точку с указанием имени свойства. Синтаксис: <Объект>[<Имя свойства>] Параметры: <Объект> Объект, к свойству которого идет обращение. <Имя свойства> Тип Строка. Имя свойства, к которому необходимо обратиться. Пример: Спр = Справочники.Номенклатура.НайтиПоКоду(ИскомыйКод); // Обращение к наименованию справочника по строке с именем свойства A = Спр["Наименование"]; // Обращение к наименованию справочника по имени свойства A = Спр.Наименование; // Оба эти обращения к свойству абсолютно равнозначны 4.7.2. Дополнение контекста объектов и форм В языке есть возможность при обращении к объектам и формам извне, из других программных модулей, обращаться к переменным, процедурам и функциям этих модулей, как к свойствам и методам самих объектов и форм. Можно обращаться к тем переменным, процедурам и функциям, которые объявлены с ключевым словом Экспорт. Для форм дополнительно возможно обращение к реквизитам формы. Пример: // Пример использования процедуры печати документов из журнала // документов. Допустим, у нас есть несколько различных документов, // причем у всех есть процедура Печать(). В модуле журнала // документов располагается кнопка "Печать", которая // вызывает процедуру печати текущего документа журнала. Процедура ПечатьНажатие(Элемент) // Получим текущий документ, на котором установлен курсор. ТекДок = ЭлементыФормы.ЖурналСписок.ТекущаяСтрока; // Получим основную форму текущего документа. ФрмТекДок = ТекДок.ПолучитьФорму(); // Вызовем процедуру печати, расположенную // в модуле формы документа. ФрмТекДок.Печать(); КонецПроцедуры 4.7.3. Передача параметров процедур и функций Передача параметров процедур и функций выполняется двумя способами. Один способ называется передачей по ссылке и представляет собой передачу не конкретного значения параметра, а адреса памяти (ссылки на переменную), где расположено это значение. Изменение переданного значения в вызываемой процедуре или функции приведет к изменению передаваемой переменной в вызывающем методе. Другой способ называется передачей по значению и представляет собой передачу копии значения параметра. В этом случае изменение переданного значения в вызываемой процедуре или функции не приведет к изменению значения передаваемой переменной в вызывающем методе. В то же время механизм передачи параметров процедур и функций зависит от того, какой вызов будет выполняться: ● вызов без передачи управления между клиентом и сервером (только на клиенте или только на сервере); ● вызов с передачей управления между клиентом и сервером. Подробнее рассмотрим каждый из способов вызова. 4.7.3.1. Вызов без передачи управления с клиента на сервер Если вызов происходит без передачи управления между клиентом и сервером (вызов происходит только на клиентской или только на серверной стороне), то по умолчанию параметры передаются по ссылке. При этом изменение формального параметра ведет к изменению соответствующего фактического параметра. С помощью модификатора Значперед именем формального параметра можно указать, что параметр передается по значению. В этом случае нельзя изменить значение фактического параметра путем присвоения формальному параметру какого-либо значения. &НаКлиенте Процедура МояПроцедура() А = 100; ПоСсылке(А); // Переменная А = 40, так как в теле процедуры значение // параметра Параметр1 изменено на 40. // Изменение переменной А произошло потому, что параметр передавался по ссылке А = 100; ПоЗначению(А); // Переменная А = 100, несмотря на то, что в в теле процедуры // значение параметра Параметр1 изменено на 40. // Изменение переменной А не произошло, так как параметр передавался по значению КонецПроцедуры &НаКлиенте Процедура ПоСсылке(Параметр1) Параметр1 = 40; КонецПроцедуры &НаКлиенте Процедура ПоЗначению(Знач Параметр1) Параметр1 = 40; КонецПроцедуры Однако необходимо помнить следующую особенность: если параметром передается агрегатный объект, то невозможно присвоить фактическому параметру другое значение, но возможно изменить сам переданный объект. Например, если в процедуру по значению передан массив, то можно очистить этот массив методом Очистить(), но нельзя изменить в вызывающей процедуре само значение параметра. &НаКлиенте Процедура МояПроцедура() Массив = Новый Массив; Массив.Добавить(12); Массив.Добавить(18); // В массиве есть два элемента ПоЗначению(Массив); // Массив пустой, но это по-прежнему массив, а не Число КонецПроцедуры // Параметр передается по значению &НаКлиенте Процедура ПоЗначению(Знач Параметр) // В массиве два значения Параметр.Очистить(); // В массиве нет значений! // Меняем формальный параметр Параметр = 14; // Изменено значение только формального параметра КонецПроцедуры Также следует учитывать особенности хранения переменных при организации вызовов: &НаКлиенте Процедура ТестоваяПроцедура() ЗначениеА = Новый Массив; ЗначениеА.Добавить(1); ЗначениеА.Добавить(2); ЗначениеБ = ЗначениеА; // обращение к любой переменной: ЗначениеА или ЗначениеБ вызывает // изменение одного и того же масива МояПроцедура(ЗначениеА, ЗначениеБ); // После завершения вызова процедуры обе переменные (ЗначениеА и ЗначениеБ) // ссылаются на один массив. // В массиве находятся следующие значения: // ЗначениеА[0] = ЗначениеБ[0] = "А" // ЗначениеА[1] = ЗначениеБ[1] = "Б" КонецПроцедуры &НаКлиенте Процедура МояПроцедура(Параметр1, Параметр2) // Несмотря на то, что параметров два, фактически работа происходит с одним массивом Параметр1[0] = 5; Параметр1[1] = 6; Параметр2[0] = "А"; Параметр2[1] = "Б"; КонецПроцедуры В данном примере следует обратить внимание на тот факт, что операция присваивания ЗначениеБ = ЗначениеА;(в процедуре ТестоваяПроцедура()) не приведет к созданию копии массива, который находится в переменной ЗначениеА. Обе переменные будут ссылаться на один и тот же массив! При этом в процедуру МояПроцедура()параметры передаются по ссылке, следовательно, при изменении двух разных формальных параметров происходит изменение одного физического массива. 4.7.3.2. Вызов с передачей управления с клиента на сервер Вызов процедур и функций с передачей управления между клиентом и сервером характерен тем, что в общем случае при таком вызове изменяется компьютер, на котором происходит работа вызываемого метода. Это происходит потому, что клиент работает на одном компьютере, а сервер – на другом. Следовательно, нельзя говорить о передаче параметров по ссылке, т. к. один компьютер не может получить прямого доступа к памяти другого компьютера. При работе в файл-серверном варианте клиент и сервер представляют собой один компьютер, но на логику взаимодействия это не влияет. Поэтому передача параметров в случае клиент-серверного взаимодействия происходит особым образом: ● При передаче управления с клиента на сервер (и обратно) всегда передаются копии параметров. При вызове серверной процедуры или функции с клиента происходит создание копии фактического параметра и передача этой копии на сторону сервера. При возврате управления с сервера на клиента также происходит создание копии формального параметра (с которым происходила работы в вызванной процедуре или функции) для передачи обратно на клиента. ● Если формальный параметр указан с модификатором Знач, то значение параметра будет передаваться только при вызове процедуры или функции и не будет передаваться обратно при возврате управления на клиента. ● Если для нескольких формальных параметров указывается одно и то же фактическое значение, то создается столько копий фактического значения, для скольких формальных параметров используется значение. ● Если в качестве формальных параметров указано значение одной и той же переменной, то после возврата управления с сервера значение этой переменной будет установлено в значение самого правого формального параметра (без модификатора Знач), который изменялся в вызываемой функции. &НаКлиенте Процедура ТестоваяПроцедура(Команда) ЗначениеА = Новый Массив; ЗначениеА.Добавить(1); ЗначениеА.Добавить(2); ЗначениеБ = ЗначениеА; // обращение к любой переменной: ЗначениеА или ЗначениеБ вызывает // изменение одного и того же масива // При вызове процедуры создается копия массива для каждого формального параметра СервернаяПроцедура(ЗначениеА, ЗначениеБ); // После завершения вызова процедуры: // 1. Переменные ЗначениеА и ЗначениеБ ссылаются на разные массивы // 2. В массивах находятся разные значения // ЗначениеА[0] = 5 // ЗначениеА[1] = 6 // ЗначениеБ[0] = "А" // ЗначениеБ[1] = "Б" КонецПроцедуры &НаСервере Процедура СервернаяПроцедура(Параметр1, Параметр2) // Так как передаются копии, для каждого формального параметра на сервере создан "свой" массив Параметр1[0] = 5; Параметр1[1] = 6; Параметр2[0] = "А"; Параметр2[1] = "Б"; // С сервера будут возвращаться копии переменных Параметр1 и Параметр2 КонецПроцедуры Следует всегда помнить о том, что при передаче параметров на сервер создается копия значения. Это позволит избежать труднодиагностируемых ошибок при работе системы. Рассмотрим пример: &НаКлиенте Процедура ТестоваяПроцедура(Команда) ЗначениеА = Новый Массив; ЗначениеА.Добавить(1); ЗначениеА.Добавить(2); ЗначениеБ = ЗначениеА; Структура = Новый Структура("Ключ1, Ключ2", ЗначениеА, ЗначениеА); СервернаяПроцедура(Структура); ЗначениеА[0] = 9; ЗначениеА[1] = 8; ЗначениеБ[0] = "C"; ЗначениеБ[1] = "D"; КонецПроцедуры &НаСервере Процедура СервернаяПроцедура(Параметр1) Параметр1.Ключ1[0] = "0"; Параметр1.Ключ1[1] = "1"; Параметр1.Ключ2[0] = "2"; Параметр1.Ключ2[1] = "3"; КонецПроцедуры После завершения вызова процедуры ТестоваяПроцедура()будет наблюдаться следующее состояние переменных: ● Массивы ЗначениеАи ЗначениеБидентичны и содержат значения «С» в первом элементе и значение «D» во втором элементе, т. к. переменная ЗначениеБуказывает на массив из переменной ЗначениеАи значения этих переменных не передавались на сервер. ● В переменной Структурабудут находиться два массива: ● Со значениями «0» и «1» для элементов массива, находящегося в элементе структуры с ключом Ключ1. ● Со значениями «2» и «3» для элементов массива, находящегося в элементе структуры с ключом Ключ2. ● Такое поведение будет обусловлено тем, что при вызове процедуры происходит создание копии не только самого параметра (переменная Структура), но и всех объектов, находящихся в этой структуре: два массива, которые изначально указывали на один массив со значениями элементов «0» и «1». 4.7.3.3. Общие особенности указания параметров Если параметру задано значение по умолчанию и он является последним в списке, то при вызове процедуры или функции его можно опускать в списке передаваемых фактических параметров и не ставить запятую перед опущенным параметром. Процедура МояПроцедура(Параметр1, Параметр2 = "по умолчанию")... КонецПроцедуры // При выполнении следующего вызова в процедуре "МояПроцедура", // значение параметра Параметр1 будет равно 1, // а значение параметра Параметр2 – "по умолчанию" МояПроцедура(1); Если параметру не задано значение по умолчанию, то при вызове процедуры или функции его можно опускать в списке передаваемых фактических параметров, но разделительную запятую нужно ставить. Если параметр при вызове процедуры опущен, то он принимает либо установленное по умолчанию значение (если оно есть), либо значение Неопределено. Процедура МояПроцедура(Параметр1, Параметр2, Параметр3 = "по умолчанию")... КонецПроцедуры // При выполнении следующего вызова в процедуре "МояПроцедура", // значение параметра Параметр1 будет равно 1, // значение параметра Параметр2 – Неопределено, // а значение параметра Параметр3 – "пример" МояПроцедура(1, , "пример"); Если при вызове метода, процедуры или функции параметры не передаются (пустой список параметров), то, тем не менее, круглые скобки обязательно требуется ставить. Не следует передавать с клиента на сервер (и обратно), а также выполнять сериализацию данных, содержащих циклические ссылки. В этом случае будет выдаваться ошибка и сеанс будет завершаться. При передаче с клиента на сервер и обратно строковых значений следует помнить, что эти значения не должны содержать символы, недопустимые с точки зрения спецификации XML версии 1.0 (http://www.w3.org/TR/xml/). СОВЕТ. На стороне сервера такую проверку можно выполнить с помощью функции НайтиНедопустимыеСимволыXML(). 4.7.4. Работа с коллекциями значений Ряд объектов в языке системы «1С:Предприятие» представляет собой коллекции значений. Большинство коллекций имеют набор схожих методов и свойств, таких как Количество(), Индекс(), Добавить(), Удалить()и т. д. В качестве свойств коллекции, как правило, выступают ее элементы. Для коллекций доступен обход элементов коллекции посредством конструкции Для каждого– Из– Цикл. Для большинства коллекций доступно обращение к элементам коллекции с помощью оператора [<Аргумент>](квадратные скобки). Как правило, в качестве аргумента передается индекс элемента коллекции. Индексирование элементов коллекции начинается с 0. Это означает, что индекс последнего элемента равен количеству элементов в коллекции минус 1. Если в процессе обхода коллекции происходит удаление или другие изменения состава элементов, то дальнейшее поведение системы не определено. Подробнее описание конкретных коллекций, их свойств, методов и приемов работы с ними см. в описаниях конкретных объектов. 4.7.5. Использование номеров и индексов В языке системы «1С:Предприятие» есть ряд объектов, отдельные части которых имеют нумерацию. К таким объектам, например, относится строка, символы которой имеют номер в строке, или табличный документ, строки и колонки которого имеют номер, и т. п. При обращении к частям объектов обычно используется понятие Номер. Номера начинаются с 1. При обращении к элементам коллекций используется понятие Индекс. Индексирование элементов коллекций начинается с 0. 4.7.6. Работа с системными перечислениями Во встроенном языке системы «1С:Предприятие» существует понятие системных перечислений. Они предназначены для определения некоторого ограниченного набора предопределенных значений. Доступ к системным перечислениям осуществляется как к свойствам глобального контекста его имени. Конкретные значения указываются через точку от имени системного перечисления. Системные перечисления используются, как правило, для задания значений параметров системных методов или свойств объектов, а также в качестве возвращаемых значений методов. 4.7.7. Работа с предопределенными значениями 4.7.7.1. С помощью менеджера объекта Получить предопределенное значение на стороне сервера «1С:Предприятия» можно с помощью менеджера соответствующего объекта. Строка, определяющая получаемый реквизит, имеет следующий вид: ТипПредопределенногоЗначения.ИмяОбъектаМетаданных.Значение Рассмотрим составляющие этой строки подробнее: ● ТипПредопределенногоЗначения– для получения предопределенных значений доступно указание следующих типов данных (написание во множественном числе): ● Справочники, ● ПланыВидовХарактеристик, ● ПланыСчетов, ● ПланыВидовРасчета, ● Перечисления. ● ИмяОбъектаМетаданных– указывается имя объекта метаданных так, как оно задано в конфигураторе. ● Значение– может быть одним из следующих: ● для перечислений указывается имя значения перечисления; ● для получения предопределенного значения указывается его имя, как оно задано в конфигураторе; ● ТочкиМаршрута.ИмяТочки– точка маршрута бизнес-процесса. В случае, если требуется получить точку маршрута бизнес-процесса, строка, описывающая получаемое значение, будет выглядеть следующим образом: БизнесПроцессы.ИмяОбъектаМетаданных.ТочкиМаршрута.ИмяТочкиМаршрута Пример: // Получение значения перечисления. Вид = Перечисления.ВидыТоваров.Товар; // Получение предопределенных данных справочника. Элемент = Справочники.Валюта.Рубль; // Точка маршрута бизнес-процесса Точка = БизнесПроцесс.Согласование.ТочкиМаршрута.Одобрение; 4.7.7.2. С помощью функции ПредопределенноеЗначение() В связи с тем, что на стороне клиента недоступны прикладные объекты, получение предопределенных реквизитов с помощью менеджеров объектов становится невозможным. Поэтому для их получения существует метод глобального контекста ПредопределенноеЗначение(). Параметром этого метода является строка, описывающая то, какое предопределенное значение требуется получить. Синтаксис описания предопределенного значения совпадает с синтаксисом оператора ЗНАЧЕНИЕязыка запросов (см. здесь). Строка, определяющая получаемый реквизит, имеет следующий вид: ТипПредопределенногоЗначения.ИмяОбъектаМетаданных.Значение Рассмотрим составляющие этой строки подробнее: ● ТипПредопределенногоЗначения– для получения предопределенных значений доступно указание следующих типов данных (написание в единственном числе): ● Справочник, ● ПланВидовХарактеристик, ● ПланСчетов, ● ПланВидовРасчета, ● Перечисление, ● БизнесПроцесс. ● ИмяОбъектаМетаданных– указывается имя объекта метаданных так, как оно задано в конфигураторе. ● Значение– может быть одним из следующих: ● для перечислений указывается имя значения перечисления; ● для получения предопределенного значения указывается его имя, как оно задано в конфигураторе; ● ТочкаМаршрута.ИмяТочки– точка маршрута бизнес-процесса; ● ПустаяСсылка– для получения пустой ссылки. В случае необходимости получить значение системного перечисления параметр метода будет выглядеть следующим образом: ИмяСистемногоПеречисления.ЗначениеСистемногоПеречисления. Например: ТипДиаграммы = ПредопределенноеЗначение("ТипДиаграммы.ВогнутаяПоверхность"); В случае, если требуется получить точку маршрута бизнес-процесса, строка, описывающая получаемое значение, будет выглядеть следующим образом: Пример: // Получение значения перечисления. Вид = ПредопределенноеЗначение("Перечисление.ВидыТоваров.Товар"); // Получение значения пустой ссылки. ПустаяСсылка = ПредопределенноеЗначение("Документ.РасходнаяНакл.ПустаяСсылка"); // Получение предопределенных данных справочника. Элемент = ПредопределенноеЗначение("Справочник.Валюта.Рубль"); // Точка маршрута бизнес-процесса Точка = ПредопределенноеЗначение("БизнесПроцесс.Согласование. ТочкаМаршрута.Одобрение"); 4.8. Особенности различных вариантов запуска системы Система «1С:Предприятие» может использоваться в файловом и клиент-серверном вариантах, во внешнем соединении, а также в виде Web-сервисов (см. здесь). Конфигуратор позволяет настроить использование процедур и функций общих модулей и модулей объектов для каждого варианта. 4.8.1. Исполнение процедур и функций Для указания разрешения применения процедур и функций различных модулей (про виды модулей см. здесь) используют инструкции препроцессору и директивы компиляции. 4.8.1.1. Различие инструкций препроцессора и директив компиляции Инструкции препроцессора и директивы компиляции предназначены для того, чтобы оставить в скомпилированном модуле только то, что действительно должно присутствовать в том или ином контексте. При этом инструкции препроцессора действуют на исходный текст модуля (т. е. удаляют из модуля текст, который не может там находится), а директивы компиляции действуют на структурные единицы программного кода (методы – процедуры или функции, а также объявления переменных). Фактически все программные модули, присутствующие в системе, можно разделить на две большие группы модулей: ● Модули, которые могут существовать (и выполняться) только в одном контексте, например, модуль управляемого приложения может выполняться только на стороне клиента (тонкого или веб-клиента). ● Модули, которые могут существовать (и выполняться) в нескольких контекстах. Такими модулями является модуль управляемой формы, модуль команды и общий модуль. Например, модуль управляемой формы может существовать в четырех экземплярах, при этом в процессе работы управление может передаваться между различными экземплярами модуля: ● клиентский контекстный модуль, ● серверный контекстный модуль, ● клиентский внеконтекстный модуль, ● серверный внеконтекстный модуль. При этом у модуля команды и общего модуля не может существовать контекстных экземпляров (в отличие от модуля формы). Поэтому некоторые модули могут компилироваться несколько раз, в зависимости от того, есть ли в этом модуле фрагменты кода, которые могут выполняться в том или ином контексте. Рассмотрим, какое влияние оказывают директивы компиляции и инструкции препроцессора на исходный программный текст модуля в процессе его преобразования в «исполняемый» код. Рассмотрим это на примере модуля управляемой формы. В момент создания формы формируется четыре экземпляра модуля формы и выполняется определение всех необходимых инструкций препроцессору для каждого экземпляра модуля. Затем происходит обработка каждого экземпляра модуля и исключение текста, обрамленного инструкциями препроцессора. Затем происходит компиляция получившегося программного кода в соответствии с контекстом и директивами компиляции. В результате получается исполняемый модуль. Предположим, в исходном тексте модуля формы встречается конструкция: &НаКлиенте Процедура РаботаСФайлами() #Если ВебКлиент Тогда // программный текст 1 // исполняется только на веб-клиенте #Иначе // программный текст 2 // исполняется на других типах клиента #КонецЕсли КонецПроцедуры Тогда будет выполнено следующее: ● Данная процедура будет компилироваться на любом клиенте (как следует из директивы компиляции). ● В то же время инструкции препроцессора будут определять, какой именно текст и на каком клиенте будет оставлен в модуле (и как следствие скомпилирован). В данном примере на веб-клиенте будет доступен только «программный текст 1», а на других клиентах – «программный текст 2». Однако если в модуле формы будет использован следующий код: #Если НаСервере Тогда &НаКлиенте Процедура Клиентская() КонецПроцедуры #КонецЕсли Тогда произойдет следующее: ● на сервере будет присутствовать исходный текст нашей процедуры, но он не будет скомпилирован, т. к. директива компиляции &НаКлиенте исключает возможность появления процедуры на стороне сервера; ● на клиенте не будет даже исходного текста нашей процедуры, т. к. его «вырежет» инструкция препроцессора, а значит, эта процедура не будет скомпилирована и не будет доступна для вызова. Исходя из описанного механизма и следует подходить к пониманию взаимодействия директив и инструкций, а также к их совместному применению. Также нужно отметить, что методы, отмеченные в программном модуле директивами &НаКлиентеНаСервереБезКонтекстаи &НаКлиентеНаСервере, попадут одновременно в разные экземпляры программных модулей. 4.8.1.2. Инструкции препроцессора Синтаксис инструкций препроцессору следующий: Инструкция препроцессору #Если <Логическое выражение> Тогда #ИначеЕсли <Логическое выражение> Тогда ... #Иначе #КонецЕсли Логическое выражение <Логическое выражение> = [НЕ] <Символ препроцессора> [<Булева операция> [НЕ] <Символ препроцессора> [<Булева операция> [НЕ] <Символ препроцесс Символ препроцессора <Символ препроцессора> = { Сервер | НаСервере | Клиент | НаКлиенте | ТонкийКлиент | ВебКлиент | ВнешнееСоединение | ТолстыйКлиентУправляемоеПр Булева операция <Булева операция> = {И | ИЛИ} Русское имя Английское имя #Если #If #Тогда #Then #Иначе #Else #ИначеЕсли #ElsIf #КонецЕсли #EndIf И AND ИЛИ OR НЕ NOT Сервер Server НаСервере AtServer Клиент Client НаКлиенте AtClient ТонкийКлиент ThinClient ВебКлиент WebClient ВнешнееСоединение ExternalConnection ТолстыйКлиентУправляемоеПриложение ThickClientManagedApplication ТолстыйКлиентОбычноеПриложение ThickClientOrdinaryApplication МобильноеПриложениеКлиент MobileAppClient МобильноеПриложениеСервер MobileAppServer Далее приведен перечень инструкций препроцессора и их краткое описание: ● Сервер, НаСервере– определяет сервер; ● Клиент, НаКлиенте– определяет любого клиента; ● ТонкийКлиент– определяет тонкого клиента; ● ВебКлиент– определяет веб-клиента; ● ВнешнееСоединение– определяет внешнее соединение; ● ТолстыйКлиентУправляемоеПриложение– определяет режим управляемого приложения толстого клиента; ● ТолстыйКлиентОбычноеПриложение– определяет обычный режим толстого клиента; ● МобильноеПриложениеКлиент– определяет клиентскую часть мобильного приложения; ● МобильноеПриложениеСервер– определяет серверную часть мобильного приложения. Далее приведена таблица, указывающая, какие инструкции препроцессора определены в каких режимах работы «1С:Предприятия»: Режим Сервер, Клиент, ТонкийКлиент ВебКлиент ТолстыйКлиентУправляемоеПриложение ТолстыйКлиентОбычноеПриложение НаСервере НаКлиенте В клиент-серверном варианте На стороне сервера + В толстом клиенте в обычном режиме + В толстом клиенте в управляемом режиме + В тонком клиенте + В вебклиенте + + + + + Во внешнем соединении В файл-серверном варианте В толстом клиенте в обычном режиме + + В толстом + клиенте в управляемом режиме + В тонком клиенте + На серверной + + + + стороне тонкого клиента В вебклиенте + + Во внешнем соединении В клиенте мобильного приложения На серверной стороне мобильного приложения + + Если используется неглобальный общий модуль, для которого установлено использование на клиенте (любом) и на сервере, то методы, заключенные в условие #Если Сервер Тогда #КонецЕсли, будут доступны только в том случае, если вызов этих методов выполняется со стороны сервера. Вызов таких методов со стороны клиента недоступен. Инструкции Сервери НаСервереполностью идентичны. Инструкции Клиенти НаКлиентеполностью идентичны. ПРИМЕЧАНИЕ. Перед передачей программного модуля на тонкий или веб-клиент сервер выполняет обработку инструкций препроцессора, находящихся в модуле. В ходе обработки текст на встроенном языке, который не исполняется на стороне вышеуказанных клиентов, заменяется на пробелы (т. е. фактически удаляется). При этом символы переноса строк и табуляции остаются на своих местах. 4.8.1.3. Директивы компиляции Синтаксис директивы компиляции следующий: Директива компиляции &<Директива> <Конструкция языка> Директива <Директива> = { НаКлиенте | НаСервере | НаСервереБезКонтекста | НаКлиентеНаСервереБезКонтекста | НаКлиентеНаСервере | Область | КонецОбласти } Конструкция языка <Конструкция языка> = { <Описание переменной> | <Описание процедуры> | <Описание функции> } Подробное описание конструкций языка см. здесь. Русское имя Английское имя НаКлиенте AtClient НаСервере AtServer НаСервереБезКонтекста AtServerNoContext НаКлиентеНаСервереБезКонтекста AtClientAtServerNoContext НаКлиентеНаСервере AtClientAtServer Область Region КонецОбласти EndRegion Далее приведен перечень директив компиляции и их краткое описание: ● НаКлиенте– означает, что метод выполняется на стороне клиента в контексте формы. Переменная существует все время жизни клиентской части формы. Из метода доступны клиентские переменные модуля формы. Допустимы вызовы любых методов. ● НаСервере– означает, что метод выполняется на стороне сервера в контексте формы. Переменная существует только во время вызова выполнения серверного вызова. Из метода доступны серверные переменные модуля формы. Допустимы вызовы: ● серверных; ● серверных внеконтекстных; ● клиент-серверных внеконтекстных методов; ● методов неглобальных серверных общих модулей. ● НаСервереБезКонтекста– означает, что метод исполняется на сервере вне контекста формы. Переменные не могут предваряться такой директивой компиляции. Из метода недоступны переменные модуля формы. Допустимы вызовы: ● серверных внеконтекстных; ● клиент-серверных внеконтекстных методов; ● методов не глобальных серверных общих модулей. ● НаКлиентеНаСервереБезКонтекста– означает, что метод исполняется как на клиенте, так и на сервере, вне контекста формы. Переменные не могут предваряться такой директивой компиляции. Из метода недоступны переменные модуля формы. Допустимы вызовы: ● серверных внеконтекстных; ● клиент-серверных внеконтекстных методов; ● методов неглобальных серверных общих модулей; ● методов неглобальных общих модулей с флажками Сервер и Клиент (управляемое приложение). ● НаКлиентеНаСервере– означает, что методы выполняются на клиенте и на сервере. Переменные не могут предваряться такой директивой компиляции. Допустимы вызовы: ● серверных внеконтекстных; ● клиент-серверных внеконтекстных методов; ● методов неглобальных серверных общих модулей; ● методов неглобальных общих модулей с флажками Сервер и Клиент (управляемое приложение). ● Область, КонецОбласти– не предназначены для указания места выполнения кода на встроенном языке. Служат для выделения фрагмента текста, который можно будет свернуть (аналогично процедурам, функциям и т. д.). Подробнее см. здесь. Ниже приведена таблица, показывающая, какие директивы компиляции доступны в каких модулях системы «1С:Предприятие»: Модуль формы Переменные модуля формы Модуль команды Общий модуль НаКлиенте + + + + НаСервере + + + + НаСервереБезКонтекста + НаКлиентеНаСервереБезКонтекста + НаКлиентеНаСервере + 4.8.2. Особенности использования объектов, их свойств и методов Каждый объект, метод или свойство встроенного языка (далее в этом разделе – объект) обладает определенной доступностью (см. синтакспомощник), которая определяет, где можно использовать объект, метод или свойство. Кроме того, в синтакс-помощнике указываются некоторые вспомогательные данные, которые могут помочь разработчику. Тонкий клиент – указывает, что объект доступен в тонком клиенте. Веб-клиент – указывает, что объект доступен в веб-клиенте. Сервер – указывает, что объект доступен на сервере «1С:Предприятия». Внешнее соединение – указывает, что объект доступен в режиме внешнего соединения. Толстый клиент – указывает, что объект доступен в толстом клиенте. Мобильное приложение (клиент) – указывает, что объект доступен в клиентской части мобильной платформы. Мобильное приложение (сервер) – указывает, что объект доступен на стороне сервера мобильной платформы. ВНИМАНИЕ! Если для объекта указано, что он недоступен для какого-либо из режимов запуска, то свойства и методы данного объекта также недоступны. Поэтому специального упоминания об этом при описании свойств и методов не приводится. ПРИМЕЧАНИЕ. Если объект недоступен на стороне какого-либо клиентского приложения, то в этом клиентском приложении также недоступен и тип этого объекта. Например, если в тонком клиенте недоступен объект СправочникОбъект.Контрагенты, то Тип("СправочникОбъект.Контрагенты") также недоступен в тонком клиенте. Сериализуется. Указывает возможность сохранения значения объектов (например, методами СохранитьЗначение()и ЗначениеВФайл()), сохранения параметров форм отчетов и обработок), а также помещения в ХранилищеЗначения. Данный объект может быть сериализован в/из XML. Указывает возможность поддержки чтения/записи значений данных системы «1С:Предприятие» в/из XML. Подробнее см. здесь. Возможен обмен с сервером. Указывает возможность обмена значениями данного типа между клиентом и сервером. ПРИМЕЧАНИЕ. Для управляемого режима запуска обмен между клиентом и сервером возможен для объектов, которые поддерживают XDTOсериализацию. Данный объект может быть сериализован в/из XDTO. Указывает на то, что данный тип имеет возможность отображения в модель данных XDTO. При этом указывается квалифицированное имя типа (типов) (указывается URI пространство имен и имя типа), в который отображается данный тип. Например, для типа ХранилищеЗначения: {http://v8.1c.ru/8/data/core}ValueStorage. Синтакс-помощник содержит информацию о кешировании результатов работы некоторых методов «1С:Предприятия». Например, для метода глобального контекста ПредопределенноеЗначение()будет указана следующая информация: Результат выполнения кешируется при первом обращении до изменения конфигурации или версии платформы. Глава 5. Объекты конфигурации В этой главе рассказывается о работе с конфигурацией в целом и о тех режимах и механизмах, которые используются для всех объектов конфигурации. Описание действий по созданию и настройке основных объектов конфигурации (константы, справочники, документы, последовательности, журналы, перечисления, отчеты, обработки, регистры), а также некоторых объектов, располагающихся в ветви конфигурации Общие (критерии отбора, стили), производится в документации на примере использования окна редактирования объекта (подробнее см. здесь). Аналогичные действия можно выполнять и в палитре свойств объектов. 5.1. Свойства конфигурации Конфигурация в целом имеет свои свойства, которые можно редактировать. Палитра свойств открывается для корневой ветки дерева конфигурации. Помимо основных свойств (см. здесь), присущих каждому объекту конфигурации, конфигурация имеет следующие рассмотренные ниже свойства. 5.1.1. Категория свойств «Основные» Основной режим запуска – выбирается режим запуска системы по умолчанию (Управляемое приложение или Обычное приложение). Для новой конфигурации устанавливается режим запуска Управляемое приложение. Также режим запуска можно изменять для пользователя системы (см. книгу «1С:Предприятие 8.3. Руководство администратора»). Данное свойство нельзя изменить, если свойство Режим совместимости установлено в значение Версия 8.1. Назначения использования – указывает назначение использования прикладного решения (Мобильное устройство или Персональный компьютер). Свойство доступно только в том случае, если свойство Основной режим запуска установлено в значение Управляемое приложение. В зависимости от выбранного назначения использования, изменяются возможности конфигуратора: ● Мобильное устройство – возможна разработка прикладного решения для работы на мобильном устройстве (подробнее см. здесь). При этом разработчику будет доступен ограниченный набор прикладных объектов (список ограничений см. здесь); ● Персональный компьютер – возможна разработка прикладного решения, не предназначенного для функционирования на мобильном устройстве и являющееся собой управляемое приложение; ● Установлены оба флажка (Мобильное устройство и Персональный компьютер) – возможна разработка прикладного решения, которое будет содержать объекты, доступные и на мобильном устройстве и в управляемом приложении на персональном компьютере. Следует иметь ввиду следующие особенности: ● Если среди назначений использования отсутствует Персональный компьютер, то: ● недоступна возможность изменения основного режима запуска; ● в палитре свойств (см. здесь) объектов конфигурации недоступны свойства, неиспользуемые на мобильной платформе; ● в качестве типов реквизитов могут выступать только типы объектов, доступные на мобильной платформе. ● Если среди назначений конфигурации присутствует Мобильное приложение, то: ● проверка модулей использует настройку для режима Мобильное приложение, этот режим, по умолчанию, предлагается для изменения при редактировании параметров; ● проверка конфигурации использует отдельно хранимую настройку выполняемых проверок; ● синтакс-помощник использует отдельно хранимую настройку наложенных отборов. Вариант встроенного языка – выбирается основной язык программирования (русский или английский). Выбор определяет, на каком языке будут формироваться языковые конструкции в модулях (например, при использовании синтакс-помощника) и выдаваться информация о примитивных типах данных. Вне зависимости от значения свойства можно использовать как русский, так и английский вариант языковых конструкций. При смене значения свойства вариант написания введенных языковых конструкций не изменяется. Основная роль – выбор основной роли конфигурации. Роль, указанная в этом свойстве, будет использоваться, если список пользователей конфигурации пуст и, таким образом, не проводится авторизация доступа при начале работы программы. В этом случае считается, что пользователь обладает административными правами вне зависимости от реального состояния права Администрирование в роли, указанной в качестве основной. Если не указана основная роль конфигурации и список пользователей пуст, то пользователь работает без ограничения прав доступа. Роли задаются в ветви дерева конфигурации Общие – Роли (см. здесь). Основной режим запуска должен соответствовать основной роли в части прав на запускаемые приложения. Так, если свойство Основной режим запуска установлено в значение Управляемое приложение, а для основной роли отключено право Тонкий клиент, то пользователь не сможет работать с прикладным решением с помощью тонкого клиента. Модуль управляемого приложения – по ссылке Открыть открывается окно редактирования модуля управляемого приложения (см. здесь). Модуль сеанса – по ссылке Открыть открывается окно редактирования модуля сеанса (см. здесь). Модуль внешнего соединения – по ссылке Открыть открывается окно редактирования модуля внешнего соединения (см. здесь). Использовать управляемые формы в обычном приложении – указывает необходимость использования управляемых форм в обычном режиме толстого клиента. При установке этого флажка изменяются правила выбора формы толстым клиентом (см. здесь), а также изменяются правила централизованной проверки конфигурации (см. здесь). ПРИМЕЧАНИЕ. Данное свойство доступно только в том случае, если режим редактирования конфигурации установлен в Управляемое приложение и обычное приложение. Использовать обычные формы в управляемом приложении – указывает необходимость использования обычных форм в управляемом режиме толстого клиента. При установке этого флажка изменяются правила выбора формы толстым клиентом (подробнее см. здесь), а также изменяются правила централизованной проверки конфигурации (подробнее см. здесь). ПРИМЕЧАНИЕ. Данное свойство доступно только в том случае, если режим редактирования конфигурации установлен в Управляемое приложение и обычное приложение. Дополнительные словари полнотекстового поиска – выбор общих макетов или констант, которые будут выступать в роли дополнительных словарей для полнотекстового поиска (см. здесь). Хранилище общих настроек – данное хранилище предназначено для хранения различных настроек прикладного решения. Платформа самостоятельно не записывает в данное хранилище никаких настроек. Хранилище, указанное в данном свойстве, должен использовать разработчик из встроенного языка, для того чтобы выполнять сохранение/восстановление прикладных настроек пользователя. Хранилище пользовательских настроек – в данное хранилище помещаются пользовательские настройки отчетов. Хранилище вариантов отчетов – в данное хранилище помещаются варианты отчетов. Хранилище настроек данных форм – в это хранилище сохраняются данные форм. Этим хранилищем можно пользоваться, например, для сохранения реквизитов обработок. При этом можно выбрать индивидуальное хранилище для каждого отчета и обработки. Хранилище пользовательских настроек динамических списков – в это хранилище сохраняются настройки динамических списков. Подробнее о хранилищах и работе с ними см. здесь. 5.1.2. Категория свойств «Представление» Командный интерфейс – по ссылке Открыть открывается редактор, который позволяет задавать видимость подсистем по умолчанию на начальной странице (в том числе в разрезе ролей). Рабочая область начальной страницы – по ссылке Открыть открывается форма настройки, которая позволяет указать, какие формы располагаются на начальной странице и по какому шаблону будет строиться рабочая область. Командный интерфейс основного раздела – по ссылке Открыть будет открыт диалог настройки командного интерфейса основного раздела. Картинка основного раздела – с помощью данного свойства можно изменить картинку основного раздела панели разделов. Интерфейс клиентского приложения – позволяет настроить расположение панелей по умолчанию для интерфейса Такси. Интерфейс будет принимать такой вид в том случае, когда в редакторе панелей (см. здесь) пользователь нажмет кнопку Стандартные. Основной язык – указывается основной язык конфигурации. Краткая информация – краткая информация о конфигурации. Подробная информация – подробная информация о конфигурации (допускается использование многострочного текста). Логотип – выбор логотипа. Выбор осуществляется в стандартном окне выбора картинки: Рис. 61. Выбор картинки ПРИМЕЧАНИЕ. Размер картинки для логотипа 64х64 точки или меньше. Тип картинки может быть любым из поддерживаемых системой «1С:Предприятие». Заставка – выбор заставки. Выбор осуществляется в стандартном окне выбора картинки. Картинка, используемая в качестве заставки, должна иметь размер 600x255 точек. Прозрачность не используется. Тип картинки может быть любым из поддерживаемых системой «1С:Предприятие». Авторские права – информация об авторе конфигурации. Адрес информации о поставщике – ссылка на информацию о поставщике конфигурации. Указывается в свойстве Авторские права. Может задаваться как с префиксом схемы (http://), так и без него. Адрес информации о конфигурации – ссылка на информацию о конфигурации. Может задаваться как с префиксом схемы (http://), так и без него. В окне О программе отображается следующая информация: Синоним конфигурации, свойство Адрес информации о конфигурации, свойство Авторские права, свойство Адрес информации о поставщике конфигурации. Основная форма констант – выбор основной формы для ввода и редактирования констант конфигурации. Эта форма выбирается из общих форм (см. здесь) в ветви конфигурации Общие – Общие формы. Подробнее про различные формы см. здесь. ПРИМЕЧАНИЕ. Данное свойство доступно только в том случае, если режим редактирования конфигурации установлен в Управляемое приложение и обычное приложение. Свойства Основная форма отчета, Основная форма настроек отчета и Основная форма варианта отчета позволяет указать общие формы, которые будут использоваться отчетами, у которых не указаны соответствующие формы. Например, можно создать общую форму отчета, содержащую некоторые возможности, которые должны присутствовать во всех отчетах прикладного решения, например, отправка сформированного отчета по электронной почте. Для решения такой задачи следует создать общую форму отчета, реализовать в этой форме необходимые команды и указать ее в свойстве конфигурации Основная форма отчета. После этого все отчеты, для которых не указана основная форма отчета, будут использовать созданную общую форму. Свойство Основная форма настроек динамического списка позволяет указать общую форму, с помощью которой будет выполняться редактирование настроек динамического списка в прикладном решении. Если данное свойство не заполнено – для редактирования настроек динамических списков будет использоваться автоматически генерируемая форма настроек. Свойство Основная форма поиска позволяет указать общую форму, которая будет использоваться вместо системной формы полнотекстового поиска, которая может быть вызвана в интерфейсе Такси из панели инструментов или с помощью сочетания клавиш. 5.1.3. Категория свойств «Разработка» В свойствах категории описываются данные о поставщике конфигурации и версии конфигурации (подробнее см. здесь). Адрес каталога обновлений – содержит адрес ресурса, который может использоваться для обновления прикладного решения. 5.1.4. Категория свойств «Справочная информация» Включать в содержание справки – если свойство установлено, то содержимое справочной информации включается в общее описание конфигурации. Справочная информация – по ссылке Открыть открывается окно редактирования описания конфигурации. 5.1.5. Категория свойств «Совместимость» Режим управления блокировкой данных – вариант управления блокировкой данных в транзакции (см. здесь). Режим автонумерации объектов – определяет, использовать повторно или нет автоматически полученные номера объектов, если они не записаны в базу данных. Значение данного свойства ОсвобождатьАвтоматическииспользуется для обеспечения режима работы нумерации, аналогичного версии «1С:Предприятие 8.0». Полученные автоматически номера и коды будут в дальнейшем использоваться, если объект, для которого они получены, не записан. Значение данного свойства НеОсвобождатьАвтоматическииспользуется для выбора режима работы, когда для объектов, требующих непрерывной нумерации, будет реализовано получение номеров при записи, а не при открытии формы. Режим использования модальности – указывает, можно в прикладном решении использовать методы, приводящие к открытию модальных окон или нельзя. Если свойство имеет значение Использовать – модальные окна можно использовать без ограничений. Если свойство имеет значение Не использовать – модальные окно нельзя использовать в данном прикладном решении. При попытке использования методов будет диагностироваться ошибка (в том числе и при синтаксическом контроле текста на встроенном языке). Вместо модальных окон следует использовать блокирующие окна (см. здесь). Если свойство имеет значение Использовать с предупреждением, то при использовании модальных окон ошибки диагностироваться не будут, но в окно сообщений будет выводиться сообщение о том, что использование модальных окон в данном режиме запрещено. При работе в таком режиме также следует заменить модальные окна блокирующие. Режим совместимости интерфейса – свойство управляет режимом интерфейса клиентского приложения: ● Версия 8.2 – клиентское приложение работает в интерфейсе версии 8.2. Переключение в интерфейс Такси невозможно. ● Версия 8.2. Разрешить Такси – по умолчанию используется интерфейс версии 8.2. Возможно переключение на интерфейс Такси с помощью диалога параметров, объект НастройкиКлиентскогоПриложенияили командной строки. ● Такси. Разрешить Версия 8.2 – по умолчанию используется интерфейс Такси. Возможно переключение на интерфейс версии 8.2 с помощью диалога параметров, объект НастройкиКлиентскогоПриложенияили командной строки. ● Такси – клиентское приложение работает в интерфейсе Такси. Переключение в режим интерфейса 8.2 невозможно. При использовании интерфейса версии 8.2 допустимо переключение между интерфейсом в отдельных окнах и интерфейсом в закладках. Если свойство Режим совместимости установлено в значение, большее значения Версия 8.3.2 (Не использовать, Версия 8.3.3 и выше), а свойство Режим совместимости интерфейса установлено в значение Версия 8.2 или Версия 8.2. Разрешить Такси, то для новых пользователей прикладного решения будет автоматически установлен интерфейс в закладках. Картинка БиблиотекаКартинок.Справкаотображается различными способами, если свойство Режим совместимости интерфейса установлено в значение Такси или Такси. Разрешить Версия 8.2 и в остальных случаях. Режим совместимости – свойство управляет поведением механизмов, которое в новой версии системы изменено по сравнению с предыдущими версиями. Данное свойство может принимать значения Версия 8.3.2, Версия 8.3.1, Версия 8.2.16, Версия 8.2.13, Версия 8.1 и Не использовать. Особенности работы системы в режиме совместимости с какой-либо версией см. здесь. Не поддерживается работа конфигурации с неизвестным режимом совместимости. Неизвестными режимами совместимости являются те, которые соответствуют функциональности, реализуемой в последующих версиях системы «1С:Предприятие». Например, если в версии 8.3.1 установить режим совместимости Не использовать, то он будет считаться неизвестным при открытии конфигурации в версии 8.2.16. При этом, если в версии 8.3.1 установить режим совместимости Версия 8.2.16, то при открытии конфигурации в версии 8.2.16 он будет отображаться как Не использовать. Если в конкретной версии не будет вводиться нового режима совместимости, то действие режима Не использовать будет аналогично предшествующей версии. При попытке запустить или загрузить конфигурацию с неизвестным режимом совместимости, будет выдаваться ошибка с указанием требуемой версии. Запрещена загрузка файлов 1cv8.dt, сформированных в версии 8.3.1 и выше, в «1С:Предприятии» младших версий (младше чем 8.3.1). Исключением является ситуация, когда в версии 8.3.1 свойство конфигурации Режим совместимости установлено в значение Версия 8.2.16. При конвертации конфигураций версии «1С:Предприятие 8.1» (и более ранних) свойство принимает значение Версия 8.1. В общем случае можно сказать, что при открытии конфигурацией более поздней версией «1С:Предприятия», свойство Режим совместимости будет устанавливаться в значение совместимости с предыдущей версией, если в новой версии введен такой режим. Если необходимо обеспечить работу прикладного решения сразу в нескольких версиях «1С:Предприятия» (в том числе и для которых есть режим совместимости), то в местах различного вызова кода рекомендуется вначале получать текущую версию платформы и затем сравнивать ее с режимом совместимости (если это необходимо). При этом не рекомендуется проверять режим совместимости на значение НеИспользовать. После того как информационная база была открыта с помощью версии 8.2.14, переход на версию 8.2.13 возможен только в том случае, если в конфигурации не использовались новые возможности версии 8.2.14. Для файлового варианта переход с версии 8.2.14 на версию 8.2.13 выполняется с помощью загрузки/выгрузки информационной базы. 5.2. Модуль управляемого приложения Модулем управляемого приложения называется модуль, который автоматически выполняется в момент загрузки конфигурации, при старте системы «1С:Предприятие» в следующих режимах: ● тонкого клиента, ● веб-клиента, ● толстого клиента в режиме управляемого приложения. Модуль управляемого приложения предназначен для отработки действий, связанных с сеансом работы пользователя (прежде всего обработки начала и окончания сеанса работы). Модуль управляемого приложения недоступен для процедур и функций, работающих на сервере. В нем рекомендуется реализовывать только обработчики соответствующих событий. Процедуры и функции модуля управляемого приложения, а также переменные, для которых в заголовках указано ключевое слово Экспорт, являются доступными: ● в клиентских неглобальных общих модулях, ● клиентских методах модулей форм, ● клиентских методах модулей команд. В контексте модуля управляемого приложения доступны экспортируемые процедуры и функции общих модулей. Модуль управляемого приложения, являясь частью конфигурации, сохраняется только в составе конфигурации. Использование пункта Файл – Сохранить приведет к выполнению процедуры сохранения сделанных изменений применительно ко всей конфигурации. 5.3. Модуль внешнего соединения В модуле внешнего соединения могут располагаться экспортируемые переменные, процедуры и функции, а также процедуры-обработчики событий ПриНачалеРаботыСистемы()и ПриЗавершенииРаботыСистемы(), используемые в режиме внешнего соединения (см. раздел «Средства интеграции и администрирования» справки по встроенному языку). 5.4. Модуль сеанса Модулем сеанса называется модуль, который автоматически выполняется при старте системы «1С:Предприятие», в момент загрузки конфигурации. Модуль сеанса предназначен для инициализации параметров сеанса и отработки действий, связанных с сеансом работы. Модуль сеанса всегда исполняется в привилегированном режиме в кластере серверов «1С:Предприятия». ВНИМАНИЕ! Модуль сеанса может содержать только определения процедур и функций. Модуль сеанса не содержит экспортируемых процедур и функций и может использовать процедуры из общих модулей конфигурации. Установка параметров сеанса выполняется в обработчике события УстановкаПараметровСеанса(). Исполнение модуля сеанса происходит после начала исполнения модуля приложения (модуля внешнего соединения), до вызова обработчика события ПередНачаломРаботыСистемы()(ПриНачалеРаботыСистемы()в случае модуля внешнего соединения). 5.5. Ветвь конфигурации «Общие» В этом разделе описываются такие объекты конфигурации, как Подсистемы, Общие модули, Параметры сеанса, Роли, Планы обмена, Критерии отбора, Подписки на события, Регламентные задания, Функциональные опции, Параметры функциональных опций, Хранилища настроек, Общие формы, Общие команды, Группы команд, Интерфейсы, Общие макеты, Общие картинки, пакеты XDTO, Web-сервисы, WS-ссылки, Стили, Языки. Эти объекты не описывают структуру данных и механизмы их обработки. Они предназначены для установки правил работы пользователей с данными, описания вспомогательных объектов, используемых для формирования различных форм, в механизме обмена данными, а также содержат общие модули и макеты печатных форм, доступные из любого модуля конфигурации. 5.5.1. Подсистемы Описание назначения подсистем см. здесь. ПРИМЕЧАНИЕ. Не рекомендуется задавать подсистеме имя Desktop. На структуру объектов ветви Подсистемы не накладывается никаких ограничений по числу и вложенности. Для просмотра объектов конфигурации, относящихся к определенному набору подсистем, в окне Конфигурация можно произвести настройку фильтра отбора объектов. Следует выбрать пункт Действия – По подсистемам окна Конфигурация и указать необходимый набор подсистем, а также установить дополнительные признаки отбора Включать объекты подчиненных подсистем и Включать объекты родительских подсистем. Рис. 62. Отбор по подсистемам В списке подсистем существует специальный пункт <Не входящие в подсистемы>, с помощью которого можно отобрать только те объекты, которые не принадлежат ни одной подсистеме. ПРИМЕЧАНИЕ. При установке отбора по подсистемам не показываются ключевые ветви дерева объектов конфигурации, в которых нет отобранных объектов. Принадлежность объектов конфигурации к определенной подсистеме определяет пользовательский интерфейс. Значение свойства объекта конфигурации Подсистемыдоступно в программе с помощью средств встроенного языка. Это предоставляет дополнительные возможности отбора данных. Команда контекстного меню Переместить подсистему позволяет изменить подчиненность подсистемы в иерархии подсистем. Для того чтобы «привязать» объекты метаданных к конкретной подсистеме (подсистемам), служит закладка Состав редактора подсистемы. Рис. 63. Состав подсистемы В верхней части окна перечислены все объекты конфигурации, которые могут быть отнесены к различным подсистемам. Отметка объекта галочкой (например, Организации на рис. 63) означает, что объект начинает входить в подсистему и появляется в нижней части окна. В нижней части окна перечислены все объекты, которые входят в редактируемую подсистему. Если свойство Включать в содержание справки установлено, то в содержание справки будет включена ветвь, отображающая справку по подсистеме и всем объектам, входящим в ее состав. Если свойство сброшено, то такая ветвь (описывающая подсистему и объекты, входящие в ее состав) в содержании справки будет отсутствовать, но справка по объектам, входящим в подсистему, будет доступна непосредственно в формах самих объектов. 5.5.2. Общие модули Объекты, расположенные в ветви дерева конфигурации Общие модули, предназначены для размещения в них текстов функций и процедур, которые могут вызываться из любого другого модуля конфигурации. ВНИМАНИЕ! Общий модуль может содержать только определения процедур и функций. Процедуры и функции общего модуля, для которых в заголовках указано ключевое слово Экспорт, являются одними из составных частей глобального контекста. Подробнее о написании процедур в общем модуле можно узнать в разделах «Формат исходных текстов программных модулей» и «Операторы» справки по встроенному языку. Для редактирования общего модуля необходимо в палитре свойств объекта типа Общие модули окна Конфигурация в свойстве Модуль щелкнуть мышью ссылку Открыть. Текст общего модуля будет выдан для редактирования в редакторе текстов системы «1С:Предприятие» в режиме редактирования текста программного модуля. Общий модуль, являясь частью конфигурации, сохраняется только в составе конфигурации. Свойство Глобальный определяет, являются ли экспортируемые методы общего модуля частью глобального контекста. Если свойство Глобальный установлено в значение Истина, то экспортируемые методы общего модуля доступны как методы глобального контекста. Если свойство Глобальный установлено в значение Ложь, то в глобальном контексте создается свойство с именем, соответствующим имени общего модуля в метаданных. Данное свойство доступно только для чтения. Значением данного свойства является объект ОбщийМодуль. Через данный объект доступны экспортируемые методы данного общего модуля. Таким образом, обращение к методам неглобальных общих модулей выглядит как XXXXX.YYYYY, где XXXXX– это имя свойства, соответствующее контексту общего модуля, а YYYYY– имя экспортируемого метода общего модуля. Пример: РаботаСТорговымОборудованием.ПодключитьСканерШтрихкодов(); 5.5.2.1. Различные контексты и общие модули С помощью свойств общих модулей и инструкций препроцессора можно организовать выполнение различных методов общих модулей в нужном контексте. Каждое свойство общего модуля отвечает за возможность компиляции (и исполнения) общего модуля в том или ином контексте. Доступны следующие свойства, отвечающие за контекст, в котором доступны методы общего модуля: ● Клиент (обычное приложение) – методы общего модуля будут доступны для толстого клиента в режиме обычного приложения; ● Клиент (управляемое приложение) – методы общего модуля будут доступны для тонкого клиента, вебклиента, а также для толстого клиента в режиме управляемого приложения; ● Сервер – методы общего модуля будут доступны на сервере; ● Внешнее соединение – методы общего модуля будут доступны во внешнем соединении. Если устанавливаются одновременно несколько свойств, то это означает, что методы общего модуля будут доступны в нескольких контекстах. Если у общего модуля установлено свойство Сервер и еще какое-либо свойство, то это означает, что общий модуль будет доступен одновременно на сервере и в выбранном клиенте. При этом необходимо понимать, что фактически это будет несколько вариантов скомпилированного кода (по числу выбранных клиентов и собственно для сервера). При этом если метод, расположенный в таком общем модуле, вызывается со стороны клиента, то будет использована клиентская копия общего модуля, а если с сервера – серверная. В этом случае с помощью директив препроцессора (подробнее см. здесь) можно «оградить» сервер от того кода, который на нем не может исполняться. Рассмотрим пример. В общем модуле (который может исполняться на тонком клиенте и на сервере) есть метод, который имеет несколько различное поведение на стороне тонкого клиента и на стороне сервера. Посмотрим, как это можно сделать: Процедура МетодОбщегоМодуля() Экспорт // Тут размещается различный важный код #Если ТонкийКлиент Тогда // Покажем предупреждение ПоказатьОповещениеПользователя("На клиенте"); #КонецЕсли КонецПроцедуры Тогда на стороне сервера код приобретет следующий вид: Процедура МетодОбщегоМодуля() Экспорт // Тут размещается различный важный код КонецПроцедуры А на стороне тонкого клиента код будет иметь следующий вид: Процедура МетодОбщегоМодуля() Экспорт // Тут размещается различный важный код // Покажем предупреждение ПоказатьОповещениеПользователя("На клиенте"); КонецПроцедуры Для передачи управления с клиента на сервер существует несколько способов: ● вызвать метод серверного общего модуля; ● в модуле формы или команды вызвать метод, который предваряется директивами компиляции &НаСервере, &НаСервереБезКонтекста(подробнее о модуле формы см. здесь). При этом из серверных процедур невозможно вызвать методы клиентских общих модулей (у которых не установлено свойство Сервер) и клиентские методы модуля формы или модуля команды. Управление вернется на клиента после того, как будет завершен самый внешний вызов серверного метода. Исключение составляют методы модуля формы и модуля команды, которые предваряются директивами компиляции &НаКлиентеНаСервере, &НаКлиентеНаСервереБезКонтекста(подробнее см. здесь). Также следует упомянуть следующие моменты: ● Если общий модуль доступен более чем для одного клиента, то при написании программного кода следует учитывать максимальные ограничения, которые могут накладываться клиентами, либо использовать инструкции препроцессора для «изоляции» кода, специфичного для того или иного клиента. ● Инструкции препроцессора также имеют смысл тогда, когда один общий модуль имеет несколько контекстов исполнения, например, внешнее соединение и тонкий клиент или (что встречается значительно чаще) какой-либо клиент и сервер. В этом случае инструкции препроцессора будут обрамлять интерактивный код, который невозможно использовать на сервере, но возможно на клиенте (см. пример выше). Подробнее об инструкциях препроцессора и директивах компиляции см. здесь и в разделе «Исполнение процедур и функций» справки по встроенному языку. Свойство Вызов сервера предназначено для управления возможностью вызова экспортируемых методов серверного общего модуля из клиентского кода. Если свойство установлено, то экспортируемые методы серверного общего модуля доступны для вызова со стороны клиента. Если свойство не установлено, то такие экспортируемые методы можно вызывать только из серверных методов (как методов серверных общих модулей, так и серверных методов модуля формы и модулей команд). СОВЕТ. Рекомендуется устанавливать в значение Ложьсвойство Вызов сервера в тех случаях, когда серверный общий модуль содержит методы, которые нежелательно вызывать с клиента (например, по причинам безопасности). ПРИМЕЧАНИЕ. Если одновременно установлены свойства Клиент (обычное приложение), Клиент (управляемое приложение), Внешнее соединение, то свойство Вызов сервера автоматически сбрасывается. Если устанавливается свойство Вызов сервера, то автоматически сбрасываются свойства Клиент (обычное приложение), Клиент (управляемое приложение) и Внешнее соединение, если эти свойства были установлены одновременно. Свойство Привилегированный предназначено для отключения контроля прав доступа при выполнении методов общего модуля. ПРИМЕЧАНИЕ. Если свойство Привилегированный установлено, то общему модулю автоматически устанавливается свойство Сервер и сбрасываются остальные свойства (Клиент (обычное приложение), Клиент (управляемое приложение) и Внешнее соединение). Привилегированный общий модуль может исполняться только на сервере. Подробнее о привилегированном режиме см. здесь. 5.5.2.2. Повторное использование возвращаемых значений Если общий модуль не является глобальным, то становится доступно свойство Повторное использование возвращаемых значений. Это свойство может принимать следующие значения: ● Не использовать – повторное использование возвращаемых значений для функций этого общего модуля не используется. ● На время вызова и На время сеанса – для общего модуля используется метод определения повторного использования данных. Суть этого метода заключается в том, что в ходе выполнения кода система запоминает параметры и результат работы функций после первого вызова функции. При повторном вызове функции с такими же параметрами, происходит возврат запомненного значения (из первого вызова) без выполнения самой функции. Если функция во время своего выполнения меняет значения параметров, то повторный вызов функции не будет это делать. Можно выделить следующие особенности сохранения результатов вызова: ● если функция выполняется на сервере и вызывается из серверного кода, то значения параметров и результат вызова запоминаются для текущего сеанса на стороне сервера; ● если функция выполняется на толстом или тонком клиенте, то значения параметров и результатов вызова запоминаются на стороне клиента; ● если функция выполняется на стороне сервера, а вызывается из клиентского кода, то значения параметров вызова запоминаются и на стороне клиента, и на стороне сервера (для текущего сеанса). Сохраненные значения удаляются: ● если свойство установлено в значение На время вызова: ● на стороне сервера – при возврате управления с сервера; ● на стороне клиента – при завершении работы процедуры или функции встроенного языка верхнего уровня (вызванной системой из интерфейса, а не из другой процедуры или функции встроенного языка); ● если свойство общего модуля установлено в значение На время сеанса: ● на стороне сервера – при окончании сеанса; ● на стороне клиента – при закрытии клиентского приложения. Сохраненные значения будут удалены: ● на сервере, в толстом клиенте, во внешнем соединении, в тонком клиенте и в веб-клиенте с обычной скоростью соединения – через 20 минут после вычисления сохраняемого значения или через 6 минут после последнего использования; ● в тонком клиенте и веб-клиенте с низкой скоростью соединения – через 20 минут после вычисления сохраняемого значения; ● при нехватке оперативной памяти в рабочем процессе сервера; ● при перезапуске рабочего процесса; ● при переключении клиента на другой рабочий процесс. После удаления значений вызов экспортируемой функции выполняется как при первом вызове. На выполнение процедур данное свойство общих модулей не влияет – процедуры выполняются всегда. Если у общего модуля установлено повторное использование возвращаемых значений, то на типы параметров экспортируемых функции накладывается ряд ограничений. Типы параметров могут быть только: ● Примитивными типами (Неопределено, NULL, Булево, Число, Строка, Дата). ● Любыми ссылками на объекты базы данных. ● Структурами со значениями свойств вышеперечисленных типов. В этом случае идентичность параметров контролируется «по содержимому» структур. Если у общего модуля свойство Повторное использование возвращаемых значений установлено в значение На время сеанса, то в значениях, возвращаемых функциями такого модуля, нельзя использовать значения типа МенеджерВременныхТаблиц. Если функция общего модуля, с установленным повторным использованием, вызываются из этого же самого общего модуля (например, с именем ОбщийМодуль), то следует помнить о следующей особенности: если функция вызывается по имени МояФункция(), то исполнение функции будет происходить при каждом вызове функции. Для того чтобы использовались сохраненные значения, функция следует вызывать по полному имени: ОбщийМодуль.МояФункция(). Метод глобального контекста ОбновитьПовторноИспользуемыеЗначения()удаляет все повторно используемые значения, как на стороне сервера, так и на стороне клиента, независимо от места вызова метода. После выполнения метода ОбновитьПовторноИспользуемыеЗначения()первый вызов функции будет выполнен полностью. 5.5.3. Параметры сеанса Параметры сеанса предназначены в основном для использования значений параметров в запросах и условиях ограничения доступа к данным для текущего сеанса. Использование параметров сеанса снижает время доступа к данным за счет исключения связанных таблиц. Настройка параметров сеанса производится в палитре свойств. Для каждого параметра сеанса определены два права доступа – Получениеи Установка(подробнее о правах см. раздел ниже). Если право Установкаснято, то инициализация данного параметра сеанса возможна только в общем модуле с установленным свойством Привилегированный или в модуле сеанса. Инициализация параметров сеанса может выполняться в модуле сеанса, в обработчике события УстановкаПараметровСеанса()(см. здесь). До инициализации параметр сеанса находится в состоянии Не установлено. При попытке чтения такого параметра сначала вызывается обработчик события УстановкаПараметровСеанса(). Если после вызова состояние параметра остается Не установлено, то вызывается исключение. Следует разделять области применения параметров сеанса и глобальных переменных модуля управляемого приложения (модуля внешнего соединения). Среди основных отличий параметров сеанса: ● Параметры сеанса являются объектами метаданных, что позволяет «1С:Предприятию» осуществлять повышенный контроль за их использованием. ● Параметры сеанса имеют тип. Набор типов параметров сеанса ограничен. Их важной общей чертой является невозможность изменения внутреннего состояния для объектов этих типов. ● Для установки или получения значения параметра сеанса текущий пользователь должен быть наделен соответствующим правом. ● В клиент-серверном варианте «1С:Предприятия» значения параметров сеанса хранятся на сервере и доступны как с сервера, так и с клиента. ● Параметры сеанса доступны как из встроенного языка «1С:Предприятия», например: ПараметрыСеанса.ТекущийПользователь = ИмяПользователя() Так и из ограничений доступа к данным, например: Документ.Отчет.Пользователь = &ТекущийПользователь В последнем случае для получения значения параметра сеанса у текущего пользователя наличия соответствующего права не требуется. ПРИМЕЧАНИЕ. Если параметру сеанса установлен один из следующих типов: ФиксированныйМассив, ФиксированнаяКоллекцияили ФиксированнаяСтруктура, то в качестве значения элемента коллекции может выступать значение Неопределено. 5.5.4. Роли и права доступа 5.5.4.1. Общая информация Каждый пользователь системы должен иметь свободный доступ к общей информации, такой как общие справочники, константы или перечисления. С другой стороны, необходимо, чтобы каждый пользователь имел дело только с той информацией, которая необходима ему для работы, и никак не мог своими неосторожными действиями повлиять на работу других пользователей или на работоспособность системы в целом. Конфигуратор системы «1С:Предприятие» предоставляет разработчикам развитые средства администрирования, предназначенные для решения указанных задач. Прежде всего, в процессе создания конфигурации создается необходимое число типовых ролей, описывающих полномочия различных категорий пользователей на доступ к информации, обрабатываемой системой. Роли могут быть заданы в достаточно широких пределах – от возможности только просмотра ограниченного числа видов документов до полного набора прав по вводу, просмотру, корректировке и удалению любых видов данных. В системе «1С:Предприятие» различают два типа прав – основные и интерактивные. Основные проверяются всегда, независимо от способа обращения к объектам информационной базы. Интерактивные проверяются при выполнении интерактивных операций (просмотр и редактирование в форме и т. д.). Доступные права доступа см. здесь (или в описании метода глобального контекста ПравоДоступа()в синтакс-помощнике). Если для объекта, данные которого представляются в форме, установлено (разрешено) право Просмотр, но не установлено право Редактирование, то в форме данный реквизит будет показан (элемент управления, связанный с данным объектом, отображает значение реквизита), но редактирование значения будет недоступно. Если снять право Просмотр, то при попытке открытия формы будет выдано предупреждение: Нарушение прав доступа!, и форма не будет открыта. В списке прав при редактировании роли следует обратить внимание на внутреннюю иерархию прав. Иерархия проявляется в виде «старшинства» прав. При снятии «старшего» права снимаются другие права («младшие»), связанные со «старшим» правом; и наоборот, при установке «младшего» права устанавливаются снятые «старшие» права. Так, при снятии права Просмотрснимается право Редактирование. Что вполне логично, так как нет смысла предоставлять право редактирования при невозможности показа элемента управления, связанного с данными. В общем случае права можно задавать: ● на всю конфигурацию в целом, ● объекты, ● реквизиты объектов, ● табличные части, ● реквизиты табличных частей, ● стандартные реквизиты. При создании новой роли устанавливаются следующие права доступа на корневой объект конфигурации: ТонкийКлиент, ВебКлиент, СохранениеДанныхПользователя, Вывод. 5.5.4.2. Привилегированный режим работы На сервере «1С:Предприятия» фрагменты кода могут исполняться как в обычном, так и в привилегированном режиме. В привилегированном режиме не выполняется проверка доступа на уровне записей, не производится контроль прав и разрешены любые операции, что ускоряет выполнение модулей. Для управления привилегированным режимом предназначен метод глобального контекста УстановитьПривилегированныйРежим(), который позволяет включать или выключать привилегированный режим. ВНИМАНИЕ! В клиент-серверном варианте вызов метода не оказывает влияния при работе на стороне клиента. По умолчанию привилегированный режим выключен. Количество включений привилегированного режима должно совпадать с количеством выключений. Однако если внутри процедуры или функции происходило включение привилегированного режима (один раз или более), но не происходило его выключение, то система автоматически выполнит выключение столько раз, сколько незавершенных включений было в покидаемой процедуре или функции Если в процедуре или функции вызовов метода УстановитьПривилегированныйРежим(Ложь)сделано больше, чем вызовов метода УстановитьПривилегированныйРежим(Истина), то будет вызвано исключение. Функция ПривилегированныйРежим()возвращает Истина, если привилегированный режим еще включен, и Ложь, если он полностью выключен. При этом не анализируется количество установок привилегированного режима в конкретной функции. Программная установка привилегированного режима может потребоваться в случае массированных операций с данными информационной базы, и при этом нет смысла проверять права доступа к данным. Например, существует пользователь, которому доверили выполнять пересчет цен товаров. Тогда в обработке, например, которая это выполняет, можно проверить право текущего пользователя выполнять данную обработку, а затем включить привилегированный режим и выполнить все необходимые операции с базой данных. При этом у пользователя может не быть прав на чтение цен. Но так как данная обработка не выдает пользователю самих цен, а только их пересчитывает, то поставленные задачи ограничения доступа будут также решены. Также существует возможность стартовать привилегированный сеанс. Это сеанс, в котором привилегированный режим установлен с самого начала работы системы. При этом во время работы метод ПривилегированныйРежим()будет всегда возвращать Истина, а возможность отключить привилегированный режим не поддерживается. Стартовать привилегированный сеанс может только пользователь, которому доступны административные права (право Администрирование). Запуск сеанса можно выполнить с помощью ключа командной строки запуска клиентского приложения UsePrivilegedModeили параметра строки соединения с информационной базой prmod. 5.5.4.3. Безопасный режим работы В случае необходимости использования на сервере «ненадежного» программного кода: внешние обработки или программный код, вводимый пользователем для использования в методах Выполнить()и Вычислить(), можно воспользоваться безопасным режимом работы. В безопасном режиме: ● Привилегированный режим отменяется. ● Переход в привилегированный режим игнорируется. ● Запрещены операции, приводящие к использованию внешних средств по отношению к платформе «1С:Предприятие»: ● Механизмы COM: ● COMОбъект(), ● ПолучитьCOMОбъект(), ● ОболочкаHTMLДокумента.ПолучитьCOMОбъект(). ● Загрузка внешних компонентов: ● ЗагрузитьВнешнююКомпоненту(), ● ПодключитьВнешнююКомпоненту(). ● Доступ к файловой системе: ● ЗначениеВФайл(), ● КопироватьФайл(), ● ОбъединитьФайлы(), ● ПереместитьФайл(), ● РазделитьФайл(), ● СоздатьКаталог(), ● УдалитьФайлы(), ● Новый Файл, ● Новый xBase, ● ЗаписьHTML.ОткрытьФайл(), ● ЧтениеHTML.ОткрытьФайл(), ● ЧтениеXML.ОткрытьФайл(), ● ЗаписьXML.ОткрытьФайл(), ● ЧтениеFastInfoset.ОткрытьФайл(), ● ЗаписьFastInfoset.ОткрытьФайл(), ● КаноническаяЗаписьXML.ОткрытьФайл(), ● ПреобразованиеXSL.ЗагрузитьИзФайла(), ● ЗаписьZipФайла.Открыть(), ● ЧтениеZipФайла.Открыть(), ● Новый ЧтениеТекста(), ● Новый ЗаписьТекста(), ● Новый Картинка(), если первый параметр – строка; ● Картинка.Записать(); ● Новый ДвоичныеДанные(); ● ДвоичныеДанные.Записать(); ● ФорматированныйДокумент.Записать(); ● ГеографическаяСхема.Прочитать(); ● ГеографическаяСхема.Записать(); ● ГеографическаяСхема.Напечатать(); ● ТабличныйДокумент.Прочитать(); ● ТабличныйДокумент.Записать(); ● ТабличныйДокумент.Напечатать(); ● ГрафическаяСхема.Прочитать(); ● ГрафическаяСхема.Записать(); ● ГрафическаяСхема.Напечатать(); ● ТекстовыйДокумент.Прочитать(); ● ТекстовыйДокумент.Записать(). ● Доступ к Интернету: ● Новый ИнтернетСоединение, ● Новый ИнтернетПочта, ● Новый ИнтернетПрокси, ● Новый HTTPСоединение, ● Новый FTPСоединение. ВНИМАНИЕ! При выполнении запрещенных операций во время выполнения генерирует исключение. ПРИМЕЧАНИЕ. Внешние отчеты и обработки, открываемые с помощью меню Файл – Открыть, выполняются в безопасном режиме, если у пользователя отсутствуют административные права доступа. Количество включений безопасного режима должно совпадать с количеством выключений. Однако если внутри процедуры или функции происходило включение безопасного режима (один раз или более), но не происходило его выключение, то система автоматически выполнит выключение столько раз, сколько незавершенных включений было в покидаемой процедуре или функции. Если в процедуре или функции вызовов метода УстановитьБезопасныйРежим(Ложь)сделано больше, чем вызовов метода УстановитьБезопасныйРежим(Истина), то будет вызвано исключение. Программная установка безопасного режима может потребоваться в том случае, когда разработчик конфигурации предполагает использование стороннего (по отношению к конфигурации) программного кода, надежность которого разработчик гарантировать не может. Примером такого кода является выполнение методов Выполнить()и Вычислить()в тех случаях, когда исполняемый код получается из внешнего мира. В этом случае хорошей практикой будет установка безопасного режима до выполнения этих методов: // Формируется программный код, который следует исполнить // Возможно, что код загружается из внешних источников // или введен вручную ИсполняемыйКод = ПолучитьВыполняемыйКодИзВнешнегоМира(); // Включим безопасный режим УстановитьБезопасныйРежим(Истина); // Выполним потенциально опасный код Выполнить(ИсполняемыйКод); // Выключим безопасный режим УстановитьБезопасныйРежим(Ложь); 5.5.4.4. Режимы удаления данных Система «1С:Предприятие» предоставляет пользователям возможность удаления лишней или устаревшей информации в двух режимах: ● непосредственное удаление объектов, при котором не производится анализ использования удаляемого объекта в других объектах базы данных; ● использование контроля ссылочной целостности, при котором объекты сначала помечаются на удаление, а затем производится контроль наличия ссылок на эти объекты в других объектах. Если пользователю разрешен режим непосредственного удаления, то в этом случае дополнительная ответственность ложится и на пользователя, выполняющего удаление объектов, и на разработчика (администратора системы), определяющего права пользователей и действия системы при неразрешенных ссылках. Работа системы без контроля ссылочной целостности может, например, быть использована специалистами в процессе отладки конфигурации. Если контроль ссылочной целостности не используется, то удаление объектов происходит непосредственно (без пометки на удаление) и появляется возможность образования неразрешенных ссылок. Самым радикальным способом установки режима контроля ссылочной целостности является отключение прав непосредственного удаления объектов в целом. Таким способом полностью исключается возможность в пределах данной конфигурации непосредственно удалять объекты. Пользователи будут иметь возможность только помечать объекты на удаление. Заметим, что также существует возможность непосредственного удаления объектов средствами встроенного языка. Поэтому элементы конкретной конфигурации могут выполнять непосредственное удаление в обход механизма контроля ссылочной целостности. В этом случае ответственность за целостность данных лежит на специалисте, выполняющем конфигурирование системы. 5.5.4.5. Правила сочетания ролей Роли обычно указываются для каждого вида деятельности. При включении в список пользователей нового пользователя (см. книгу «1С:Предприятие 8.3. Руководство администратора») ему может быть назначена определенная роль или совокупность ролей. В случае использования нескольких ролей алгоритм предоставления доступа по каждому объекту и виду права доступа (например, Пометка на удаление) будет работать следующим образом: ● если хотя бы в одной роли есть разрешение, то доступ будет открыт; ● если во всех ролях есть запрещение, то доступ будет закрыт. 5.5.4.6. Редактор прав доступа В левой части окна редактирования прав выводится дерево объектов конфигурации по всем подсистемам. В правой – список прав по выбранному объекту конфигурации в дереве конфигурации. Если для действия установлен флажок, то оно разрешено. Так, например, для пользователя с ролью МенеджерПоПродажамразрешен просмотр документа ПриходТовараи запрещено его интерактивное добавление. Рис. 64. Редактор прав доступа роли Состояние флажка Устанавливать права для новых объектов определяет, будут ли установлены права для этой роли на новые добавляемые объекты конфигурации (снят по умолчанию для новой роли). Состояние флажка Устанавливать права для реквизитов и табличных частей по умолчанию определяет, будут ли установлены права для этой роли на реквизиты (включая стандартные) и табличные части (включая стандартные) для новых объектов конфигурации (установлен по умолчанию). При изменении состояния флажка Устанавливать права для реквизитов и табличных частей по умолчанию система предлагает изменить (установить или сбросить) права доступа для всех реквизитов (включая стандартные) и табличных частей (включая стандартные) всех объектов конфигурации. В случае отказа от предлагаемого действия изменений в существующих объектах не происходит, а изменяется только поведение по умолчанию для новых объектов. При создании новой роли все права устанавливаются конфигуратором в следующее состояние: ● для объектов права не установлены; ● для реквизитов (включая стандартные) и табличных частей (включая стандартные) права установлены. Флажок Независимые права подчиненных объектов определяет, каким образом система будет учитывать состояние прав на родительский объект при определении прав на подчиненный объект. Если флажок установлен, то права родительского объекта не учитываются. Если флажок снят, то при определении права подчиненного объекта анализируется соответствующее право родительского объекта. Если у родительского объекта право отсутствует, у подчиненного объекта также отсутствует право, вне зависимости от состояния права у подчиненного объекта. Флажок Независимые права подчиненных объектов не отменяет того факта, что право на подчиненный объект требует наличия этого же права и на родительский. То есть для реквизита или табличной части нужно право на объект, для реквизита табличной части – на табличную часть и объект. Указанное свойство имеет влияние в том случае, если у пользователю назначено несколько ролей, права которых складываются «по ИЛИ». То есть, если в роли установлено свойство Независимые права подчиненных объектов и есть право только на реквизит, а в другой роли есть право только на объект, то после сложения прав ролей у пользователя будет право на реквизит При назначении прав доступа на реквизиты (табличные части) отчетов/обработок следует помнить следующую особенность: если у роли снят флажок Независимые права подчиненных объектов и для реквизита (табличной части) установлено право Редактирование, а для отчета/обработки право Просмотрне установлено, то считается, что и для реквизита (табличной части) право Редактированиене установлено. Если пользователю назначено несколько ролей, то проверка прав родительского объекта выполняется до того, как будет выполнено сочетание прав по ролям (для определения результирующего права на объект), см. здесь. Действие флажка Независимые права подчиненных объектов распространяется на следующие объекты: ● реквизиты (включая стандартные); ● табличные части (включая стандартные); ● реквизиты табличных частей (включая реквизиты стандартных табличных частей); ● команды. Чтобы изменить право доступа, в левом списке следует выбрать объект конфигурации, а в правом изменить состояние флажка в нужной строке вида действия. Если требуется изменить доступ сразу ко всем объектам выбранной ветви, нужно указать в левой части эту ветвь и изменить установку прав доступа. Описание каждой роли можно вывести в табличный или текстовый документ с помощью пункта Действия – Вывести список. 5.5.4.7. Просмотр и редактирование всех ролей Если в конфигурации используется несколько ролей, то для удобства просмотра и редактирования прав рекомендуется использовать окно Все роли. Для его открытия в дереве объектов конфигурации окна Конфигурация нужно указать ветвь Роли и в контекстном меню выбрать команду Все роли. Рис. 65. Окно редактирования «Все роли» В окне расположены три табличных поля. В первом (слева) производится выбор нужного объекта конфигурации. В первой колонке второго табличного поля выводится список прав по выбранному объекту. Другие колонки предназначены для указания использования каждого права для каждой существующей роли. Если для какой-нибудь роли требуется установить или снять все права, то достаточно в первой строке табличного поля установить или снять флажок разрешения. Если для какого-нибудь права требуется установить или снять его разрешение во всех ролях, то достаточно в первой колонке табличного поля установить или снять флажок разрешения. Поддерживается возможность перестановки колонок, соответствующих ролям. В третьем табличном поле редактируются условия доступа к данным на уровне отдельных полей и записей. 5.5.4.8. Ограничение доступа к данным 5.5.4.8.1. Общие замечания Механизм ограничений доступа к данным позволяет управлять правами доступа не только на уровне объектов метаданных, но и на уровне объектов базы данных «1С:Предприятия». Для ограничения доступа к данным могут быть использованы следующие объекты «1С:Предприятия»: ● роли, ● параметры сеанса, ● функциональные опции, ● привилегированные общие модули, ● ключевое слово РАЗРЕШЕННЫЕв языке запросов. Совместное использование перечисленных объектов позволяет обеспечить максимальную гибкость при необходимости разграничения прав доступа к данным между пользователями, выполняющими различные функции. Ограничения доступа к данным могут накладываться на следующие операции с данными (права доступа): чтение (право Чтение), добавление (право Добавление), изменение (право Изменение) и удаление (право Удаление). Текущий пользователь будет иметь возможность выполнить требуемую операцию в следующих случаях: ● Для операций чтения и удаления объект, находящийся в базе данных, должен соответствовать ограничению доступа к данным. ● Для операции добавления ограничению доступа к данным должен соответствовать объект, который планируется записать в базу данных. ● Для операции изменения ограничению доступа к данным должен соответствовать объект как до изменения (чтобы объект был прочитан), так и после изменения (чтобы объект был записан). При наложении ограничений доступа к данным следует помнить, что для операций изменения, добавления и удаления можно задать только одно условие, а для операции чтения можно задать более одного ограничения доступа к данным. Это означает, что для чтения разных полей объекта могут быть заданы разные условия, причем при задании условия можно указать как имя конкретного поля, так и специальное поле Прочие поля. В первом случае условие будет накладываться только в том случае, если в выборке (которой выполняется чтение данных) будет присутствовать поле, для которого задано ограничение, а во втором – ограничение будет накладываться для всех полей объекта, кроме полей, для которых ограничения заданы явным образом. При задании ограничения на конкретное поле, это поле будет считано в том случае, если ограничение выполняется, а при задании ограничения на Прочие поля, данные объекта будут прочитаны только в том случае, если ограничение выполняется для всех полей объекта, попавших в запрос чтения данных. Для объектов базы данных следующих видов могут быть наложены различные ограничения на разные виды изменений (добавление, модификацию, удаление): ● Планы обмена, ● Справочники, ● Документы, ● Планы видов характеристик, ● Планы счетов, ● Планы видов расчета, ● Бизнес-процессы, ● Задачи. Для следующих видов объектов базы данных возможно наложение ограничений на чтение не только всего объекта целиком, но и отдельных его полей: ● Планы обмена, ● Справочники, ● Документы, ● Журналы документов, ● Планы видов характеристик, ● Планы счетов, ● Планы видов расчета, ● Регистры сведений, ● Бизнес-процессы, ● Задачи. ВНИМАНИЕ! При обращении к полям объектов базы данных посредством свойств прикладных объектов из встроенного языка «1С:Предприятия» выполняется чтение всего объекта целиком, а не только значения используемого поля. Исключением является получение представления, когда будут прочитаны только значения полей, участвующих в формировании представления. Ограничения доступа содержатся в ролях, они могут быть указаны для большинства объектов метаданных и записываются на специальном языке, являющимся подмножеством языка запросов. 5.5.4.8.2. Язык ограничения доступа к данным Ограничения доступа к данным описываются на специальном языке, являющимся подмножеством языка запросов (подробное описание языка запросов см. здесь). Язык ограничения доступа к данным имеет следующие изменения относительно языка запросов: ● В запросе ограничения доступа к данным всегда присутствует одна таблица в качестве источника данных – это таблица объекта, на который накладывается ограничение (основной объект ограничения). ● Сокращено описание запроса. Язык ограничения доступа к данным использует только секции ИЗи ГДЕ языка запросов. Так, описание языка запросов выглядит следующим образом: <Описание запроса> ВЫБРАТЬ [РАЗРЕШЕННЫЕ] [РАЗЛИЧНЫЕ] [ПЕРВЫЕ <Количество>] <Список полей выборки> [ИЗ <Список источников>] [ГДЕ <Условие отбора>] [СГРУППИРОВАТЬ ПО <Поля группировки>] [ИМЕЮЩИЕ <Условие отбора>] [ДЛЯ ИЗМЕНЕНИЯ [<Список таблиц верхнего уровня>]] В то время как описание языка запросов ограничения доступа к данным выглядит следующим образом: <Описание запроса> [Псевдоним таблицы основного объекта ограничения] [ИЗ <Список источников>] [ГДЕ <Условие отбора>] Описание списка источников см. здесь. Описание условий отбора см. здесь. При этом следует помнить, что во вложенных запросах, используемых в языке ограничения доступа к данным, ограничен набор допустимых возможностей (см. здесь); ● В качестве элементов условий можно указывать параметры сеанса (см. здесь) и функциональные опции (см. здесь); ● В любом месте запроса ограничения доступа к данным допустимо использование шаблонов, упрощающих написание ограничений (см. здесь). Главной частью ограничения является условие, которое вычисляется для каждой записи таблицы базы данных, на которую накладывается ограничение доступа к данным. Запись считается доступной в том случае, если в результате работы условия для одной записи таблицы основного объекта ограничения получена не пустая таблица (т.е. таблица, в которой 1 или более записей). Если в результате работы условия получается пустая таблица – запись, для которой условие исполнилось таким образом, считается недоступной. Причем изменение записи таблицы основного объекта ограничения считается допустимым, если запись не противоречит ограничению, указанному для права, как до выполнения операции изменения, так и после выполнения этой операции. Поля таблиц В ограничениях доступа к данным можно использовать: ● Поля таблиц объекта, для которого описывается ограничение доступа к данным. Например, если ограничение накладывается на чтение элементов справочника Контрагенты, то в ограничении могут использоваться поля справочника Контрагентыи его табличных частей. В частности, наиболее простые ограничения на чтение элементов справочника Контрагентымогут выглядеть так: ГДЕ Наименование = "Кирпичный завод" Или так: ГДЕ Продукция.Наименование = "Кирпич красный" Где Продукция– это табличная часть справочника Контрагенты. ● Поля таблиц объектов, доступных по ссылкам в основном объекте ограничения. Например, если реквизит ОсновнойМенеджерсправочника Контрагентыимеет тип ссылки на справочник Пользователи, то ограничение доступа может иметь, например, следующий вид: ГДЕ ОсновнойМенеджер.Код = "Иванов" Или: ГДЕ ОсновнойМенеджер.ФизическоеЛицо.Наименование = "Петровский" ● Поля таблиц объектов, связанных с основным объектом ограничения некоторыми условиями и выражения над ними. Например, на чтение элементов справочника Контрагентыможет быть наложено следующее ограничение: Контрагенты ИЗ Справочник.Контрагенты КАК Контрагенты ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Пользователи КАК Пользователи ПО Контрагенты.ОсновнойМенеджер.Наименование = Пользователи.Наименование ГДЕ Пользователи.ФизическоеЛицо.Наименование = "Петровский" В этом ограничении используются поля элементов справочника Пользователи, связанных с данным элементом справочника Контрагентыпо значению полей Наименование. Вложенные запросы Вложенные запросы используются для формирования наборов записей, которые могут использоваться: ● для связывания с таблицей основного объекта ограничения; ● для использования в качестве операнда операций сравнения Вили НЕ В. Во вложенных запросах могут использоваться любые средства языка запросов, кроме: ● оператора В ИЕРАРХИИ; ● предложения ИТОГИ; ● результаты вложенных запросов не должны содержать табличные части; ● некоторых виртуальных таблиц, в частности ОстаткиИОбороты. В следующем примере ограничения на чтение из справочника Контрагенты, вложенный запрос используется в качестве набора записей для связывания с основным объектом ограничения: Контрагенты ИЗ Справочник.Контрагенты КАК Контрагенты ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ Пользователи.Наименование, Пользователи.ФизическоеЛицо ИЗ Справочник.Пользователи КАК Пользователи ГДЕ Пользователи.Код > "Петечкин") КАК Пользователи ПО Контрагенты.ОсновнойМенеджер.Наименование = Пользователи.Наименование ГДЕ Пользователи.ФизическоеЛицо.Наименование = "Петровский" В следующем примере приведено ограничение на чтение из справочника ПаспортныеДанныеФизЛиц, в котором вложенный запрос используется в качестве операнда операции сравнения В: ПаспортныеДанныеФизЛиц ГДЕ ПаспортныеДанныеФизЛиц.ФизЛицо В (ВЫБРАТЬ РАЗЛИЧНЫЕ Работники.ФизЛицо КАК ФизЛицо ИЗ РегистрСведений.Работники КАК Работники) Если во вложенном запросе необходимо получить данные из табличной части, то в разделе ИЗвложенного запроса необходимо обращаться непосредственно к табличной части. Например, вместо: ВЫБРАТЬ Ссылка КАК Ссылка, Продукция.Наименование КАК НаименованиеПродукции ИЗ Справочник.Контрагенты в качестве запроса, вложенного в ограничение, следует использовать: ВЫБРАТЬ Ссылка КАК Ссылка, Наименование КАК НаименованиеПродукции ИЗ Справочник.Контрагенты.Продукция Параметры сеанса В составе запросов ограничения доступа к данным могут входить параметры сеанса. Например, на чтение элементов справочника ГруппыПисемЭлектроннойПочтыможет быть задано следующее ограничение доступа: ГДЕ Владелец.ДоступКУчетнойЗаписи.Пользователь = &ТекущийПользователь И Владелец.ДоступКУчетнойЗаписи.Администрирование = ИСТИНА Где ТекущийПользователь– это параметр сеанса (см. здесь). Функциональные опции В составе запросов ограничения доступа к данным могут входить функциональные опции. Могут использоваться только не зависящие от параметров функциональные опции. Например, если у справочника Номенклатураесть реквизит ОсновнойСклад, то ограничение на чтение данного реквизита может выглядеть следующим образом: ГДЕ &УчетПоСкладам = ИСТИНА Где УчетПоСкладам– это функциональная опция (см. здесь). Особенности использования В ограничениях на объекты базы данных следующих типов могут быть использованы не все поля основного объекта данных ограничения: ● в регистрах накопления ограничения доступа могут содержать только измерения основного объекта ограничения; ● в регистрах бухгалтерии в ограничениях можно использовать только балансовые измерения основного объекта ограничения. ПРИМЕЧАНИЕ. Если в условиях ограничения доступа к данным оборотного регистра накопления используются измерения, не входящие в итоги, то при обращении к виртуальной таблице оборотов не используются хранимые итоги и запрос выполняется полностью по таблице движений. 5.5.4.8.3. Действия ограничения доступа Ограничения доступа проверяются при любом выполнении соответствующих операций над объектами базы данных (из диалогов, из встроенного языка, посредством запросов) и могут действовать одним из двух способов: ● Все. Способ «все» подразумевает, что некоторая операция над данными (из диалогов, из встроенного языка или посредством запросов) должна быть выполнена над всеми подразумеваемыми данной операцией объектами базы данных. Если при выполнении такой операции должны быть прочитаны или изменены объекты базы данных, для которых не выполняются соответствующие ограничения доступа, то операция завершается аварийно из-за нарушения прав доступа. ● Разрешенные. Способ «разрешенные» подразумевает, что при выполнении операции над данными должны быть прочитаны только те объекты базы данных, которые удовлетворяют соответствующим ограничениям доступа. Объекты базы данных, не удовлетворяющие ограничениям доступа, при выполнении такой операции считаются отсутствующими и на результат операции не влияют. Ограничения доступа к данным накладываются на объекты базы данных в момент обращения «1С:Предприятия» к базе данных. В клиент-серверном варианте «1С:Предприятия» наложение ограничений выполняется на сервере «1С:Предприятия». Способ действия ограничений, выбираемый для выполнения каждой операции над данными, определяется назначением этой операции и степенью ответственности ее результатов. В частности, способ «разрешенные» используется при отображении динамических списков и некоторых других интерактивных действиях. Способ «все» используется при выполнении любых операций с прикладными объектами из встроенного языка «1С:Предприятия», в том числе при любых изменениях объектов базы данных. Поэтому, например, могут возникнуть затруднения при построении отбора для метода Выбрать()менеджеров справочников, документов и других с последующим обходом результата в том случае, если на соответствующий объект установлено достаточно сложное ограничение, поскольку не всякое условие в ограничении прав доступа может быть адекватно представлено в виде отбора для метода Выбрать(). В запросах способом действия ограничений доступа к данным можно управлять. Для этого в языке запросов предусмотрено ключевое слово РАЗРЕШЕННЫЕ. Если в запросе не указано РАЗРЕШЕННЫЕ, то ограничения действуют способом «все». Если слово РАЗРЕШЕННЫЕуказано, то выбирается способ «разрешенные». Важно, что если в запросе не указано ключевое слово РАЗРЕШЕННЫЕ, то все отборы, заданные в этом запросе, не должны противоречить ни одному из ограничений на чтение объектов базы данных, используемых в запросе. При этом если в запросе используются виртуальные таблицы, то соответствующие отборы должны быть наложены и на сами виртуальные таблицы. Пример: ВЫБРАТЬ КонтактнаяИнформацияСрезПервых.Представление ИЗ РегистрСведений.КонтактнаяИнформация.СрезПоследних(, Тип = &Тип) КАК КонтактнаяИнформацияСрезПервых ГДЕ КонтактнаяИнформацияСрезПервых.Тип = &Тип При использовании объектной техники не поддерживается получение доступа к данным в режиме РАЗРЕШЕННЫЕ. Предполагается, что объектная техника используется для наиболее ответственных операций над данными, в том числе для их изменения. Для получения при помощи объектной техники всех данных, независимо от установленных ограничений, можно выполнять необходимые действия в привилегированном модуле или от имени пользователя с полными правами. Средств получения только разрешенных данных в объектной технике не предусмотрено. 5.5.4.8.4. Механизм наложения ограничений Любая операция над данными, хранимыми в базе данных, в «1С:Предприятии» в конечном счете приводит к обращению к базе данных с некоторым запросом на чтение или изменение данных. В процессе исполнения запросов к базе данных внутренние механизмы «1С:Предприятия» выполняют наложение ограничений доступа. При этом: ● Формируется список прав (чтение, добавление, изменение, удаление), список таблиц базы данных и список полей, используемых этим запросом. ● Из всех ролей текущего пользователя выбираются ограничения доступа к данным для всех прав, таблиц и полей, задействованных в запросе. При этом если какая-нибудь роль не содержит ограничений доступа к данным какой-нибудь таблицы или поля, то это значит, что в данной таблице доступны значения требуемых полей из любой записи. Иначе говоря, отсутствие ограничения доступа к данным означает наличие ограничения ГДЕ Истина. ● Получаются текущие значения всех параметров сеанса и функциональных опций, участвующих в выбранных ограничениях. Для получения значения параметра сеанса от текущего пользователя не требуется наличие права на получение этого значения. Однако если значение некоторого параметра сеанса не было установлено, то произойдет ошибка и запрос к базе данных выполнен не будет. На получение функциональных опций оказывает влияние свойство функциональной опции Привилегированный режим (см. здесь). Если это свойство сброшено, то текущий пользователь должен обладать правами на чтение объекта, в котором хранится функциональная опция. ● Ограничения, полученные из одной роли, объединяются операцией И. ● Ограничения, полученные из разных ролей, объединяются операцией ИЛИ. ● Построенные условия добавляются к SQL-запросам, с которыми «1С:Предприятие» обращается к СУБД. При обращении к данным со стороны условий ограничения доступа проверка прав не выполняется (ни к объектам метаданных, ни к объектам базы данных). Причем механизм добавления условий зависит от выбранного способа действия ограничений «все» или «разрешенные». Способ «все» При наложении ограничений способом «все» к SQL-запросам добавляются условия и поля так, чтобы «1С:Предприятие» могло получить информацию о том, были ли в процессе исполнения запроса к базе данных использованы данные, запрещенные для данного пользователя или нет. Если запрещенные данные были использованы, то инициируется аварийное завершение запроса. Наложение ограничений доступа способом «все» схематически представлено на рис. 66: Рис. 66. Способ «все» Способ «разрешенные» При наложении ограничений способом «разрешенные» к SQL-запросам добавляются такие условия, чтобы запрещенные текущему пользователю записи не оказывали влияния на результат запроса. Иначе говоря, при наложении ограничений в режиме «разрешенные» запрещенные данному пользователю записи считаются отсутствующими, что схематически представлено на рис. 67: Рис. 67. Способ «разрешенные» 5.5.4.8.5. Другие объекты, связанные с ограничениями доступа к данным При разработке конфигураций с использованием ограничений доступа к данным могут оказаться полезными такие объекты метаданных, как параметры сеанса, функциональные опции и общие модули с флажком Привилегированный. Параметры сеанса Параметры сеанса могут использоваться в ограничениях доступа к данным аналогично тому, как в запросе могут использоваться параметры запроса. Функциональные опции Не зависящие от параметров функциональные опции могут использоваться в ограничениях доступа к данным аналогично тому, как в запросе могут использоваться параметры запроса. Привилегированные общие модули Если для общего модуля установлен флажок Привилегированный, то исполнение процедур и функций этого модуля приобретает важную специфику: ● В клиент-серверном варианте «1С:Предприятия» привилегированным может быть только тот модуль, который исполняется на сервере. ● Исполнение процедур и функций привилегированного модуля и всего, что из них вызвано, выполняется при выключенной системе ограничения прав, как к объектам метаданных, так и к данным. Таким образом, из привилегированного модуля может быть выполнена любая операция над любыми объектами даже в том случае, если текущий пользователь не имеет соответствующих прав. Привилегированные модули предназначены для начальной установки значений параметров сеанса, используемых в ограничениях доступа к данным. Еще общие модули могут быть использованы для некоторых целостных действий над данными со стороны пользователя с ограниченными правами. Например, если в функции пользователя входит ввод и проведение документов, но пользователь не должен иметь доступа к данным, на которые влияет проведение документа, то выполнение операции проведения может быть вынесено в привилегированный модуль. Это позволит пользователю проводить документы без предоставления ему прав на другую информацию (регистры, например). Привилегированный режим Имеется возможность программной установки привилегированного режима при работе с данными. Программная установка привилегированного режима может потребоваться в случае массированных операций с данными информационной базы, и при этом нет смысла проверять права доступа к данным. Описание привилегированного режима см. здесь. 5.5.4.8.6. Использование препроцессора При редактировании текста ограничения доступа к данным возможно использование инструкций препроцессора. Доступны следующие инструкции: #ЕСЛИ <Выражение> #ТОГДА #ИНАЧЕЕСЛИ <Выражение> #ТОГДА #ИНАЧЕ #КОНЕЦЕСЛИ <Выражение>– произвольное логическое выражение на встроенном языке, результат которого имеет тип Булево. Выражение может содержать: ● операции сравнения <, >, <=, >=, =, <>; ● логические операции И, ИЛИ, НЕ; ● параметры сеанса – используется синтаксис &Параметр, где Параметр– имя параметра сеанса. Если результатом выражения инструкции #ЕСЛИили #ИНАЧЕЕСЛИявляется значение Истина, то в результирующий текст инструкции ограничения доступа помещается текст, расположенный после ключевого слова #ТОГДА. Если же результатом выражения является значение Ложь, то текст, расположенный после ключевого слова #ТОГДА, не помещается в текст инструкции ограничения доступа. Текст, расположенный после инструкции #ИНАЧЕ, будет помещен в результирующий текст ограничения доступа, если ни одно из ранних условий не было выполнено. ПРИМЕЧАНИЕ. Если текст ограничения доступа к данным содержит инструкции препроцессора, то такое ограничение не проходит проверку синтаксиса при редактировании и не может быть изменено при помощи конструктора. Пример: #ЕСЛИ &ТекущийПользователь <> "Климова" #ТОГДА <текст ограничения доступа> #КОНЕЦЕСЛИ Здесь ТекущийПользователь– параметр сеанса типа СправочникСсылка.Пользователи. Такая конструкция означает, что условие для установки ограничения доступа будет проверяться для всех пользователей из справочника, кроме пользователя Климовой. 5.5.4.8.7. Шаблоны текста ограничения доступа Роль может содержать список шаблонов ограничения доступа, которые описываются на закладке Шаблоны ограничений формы роли. Также шаблоны ограничения доступа можно редактировать в редакторе группового редактирования ограничений доступа и шаблонов (см. здесь). Каждый шаблон ограничения доступа имеет имя и текст. Имя шаблона подчиняется обычным правилам для имен, принятых в системе «1С:Предприятие». Текст шаблона содержит часть текста на языке ограничения доступа к данным и может содержать параметры, которые выделяются при помощи символа "#". После символа "#" могут следовать: ● Одно из ключевых слов: ● Параметр, после которого в скобках указывается номер параметра в шаблоне; ● ТекущаяТаблица– обозначает вставку в текст полного имени таблицы, для которой строится ограничение; ● ИмяТекущейТаблицы– обозначает вставку в текст полного имени таблицы (как строковое значение, в кавычках), к которой применяется инструкция, на текущем варианте встроенного языка; ● ИмяТекущегоПраваДоступа– содержит имя права, для которого выполняется текущее ограничение: ЧТЕНИЕ/READ, ДОБАВЛЕНИЕ/INSERT, ИЗМЕНЕНИЕ/UPDATE, УДАЛЕНИЕ/DELETE; ● имя параметра шаблона – означает вставку в текст ограничения соответствующего параметра шаблона; ● символ "#" – обозначает вставку в текст одного символа "#". В выражении ограничения доступа могут содержаться: ● Шаблон ограничения доступа, который указывается в формате #ИмяШаблона("Значение параметра шаблона 1", "Значение параметра шаблона 2",...). Каждый параметр шаблона заключается в двойные кавычки. При необходимости указания в тексте параметра символа двойной кавычки следует использовать две двойные кавычки. ● Функция СтрСодержит(ГдеИщем, ЧтоИщем). Функция предназначена для поиска вхождения строки ЧтоИщем в строке ГдеИщем. Возвращает Истинав случае, если вхождение обнаружено и Ложь– в противном случае. ● Оператор +для конкатенации строк. Для удобства редактирования текста шаблона на закладке Шаблоны ограничений в форме роли нужно нажать кнопку Установить текст шаблона. В открывшемся диалоге ввести текст шаблона и нажать кнопку ОК. Система «1С:Предприятие» выполняет проверку синтаксиса текстов шаблонов, проверку синтаксиса использования шаблонов и макроподстановку текстов шаблонов ограничения доступа роли в текст запроса. Макроподстановка шаблона заключается: ● в замене вхождений параметров в тексте шаблона на значения параметров из выражения использования шаблона в тексте ограничения; ● в замене выражения использования шаблона в тексте запроса на получившийся текст шаблона. При вызове конструктора запроса для условия, содержащего шаблоны ограничения доступа, выдается предупреждение о замене всех шаблонов. Далее приведены примеры шаблонов ограничений: Имя шаблона Шаблон Тело шаблона Итого = #Параметр(1) Использование Где #Шаблон("10") Результат Где Итого = 10 Имя шаблона Шаблон1(ВидДокумента) Тело шаблона ВидДокумента = #ВидДокумента Использование Где #Шаблон1(""Накладная"") Результат Где ВидДокумента = "Накладная" Имя шаблона Шаблон2 Тело шаблона ВидДокумента = #Параметр(1) ## #Параметр(2) Использование Где #Шаблон2(""Накладная"", "1"") Результат Где ВидДокумента = "Накладная # 1" Имя шаблона Шаблон3 Тело шаблона ВидДокумента = #Параметр(3) Использование Где #Шаблон3("","",""Накладная"") Результат Где ВидДокумента = "Накладная" 5.5.4.8.8. Общие рекомендации по ограничению прав Чтобы гибко управлять доступом пользователей к данным в соответствии с функциями при установке ограничений доступа к данным, рекомендуется придерживаться следующих принципов: ● Нужно выбрать совокупность информации (может быть зависимой от текущего пользователя), для которой целесообразна предварительная подготовка. Выбранная информация должна, с одной стороны, максимально упростить ограничения доступа к данным, а с другой стороны, не должна иметь слишком большой объем. Распределить ее по параметрам сеанса. ● Установить значения параметров сеанса в обработчике УстановкаПараметровСеанса()модуля сеанса. ● Задать ограничения доступа к тем данным, для которых это оправданно (данные являются секретными или наиболее важными для сохранения целостности системы). Необходимо иметь в виду, что установка ограничения доступа может привести к замедлению любого обращения к этим данным. Излишняя сложность ограничений также может привести к замедлению. ● При необходимости обеспечить выполнение некоторого ограниченного количества операций над данными со стороны пользователя, которому полный доступ к этим данным давать нецелесообразно, вынести эти действия в привилегированные модули или явно включать и выключать привилегированный режим в соответствующих местах программного кода (см. здесь). ● Доступ к данным при различных проверках, выполняемых системой при записи объектов, выполняется в привилегированном режиме (см. здесь). Это позволяет не отключать ограничения в правах на уровне записей для соответствующих полей, если работа конфигурации с этими данными планируется только в управляемом режиме: ● для справочников при проверке родителя, владельца и уникальности кода; ● для документов, бизнес-процессов и задач при проверке уникальности номера; ● для планов обмена отключена при проверке уникальности кода; ● для планов счетов и планов видов характеристик при проверке родителя и уникальности кода. При создании запроса ограничения к данным следует помнить о некоторых ограничениях и особенностях: ● Если для объектной таблицы заданы ограничения доступа к данным и в запросе к данным используется объединение с такой таблицей, то в условии соединения (секция запроса ПО) не допускается использование табличной части объекта с заданным ограничением доступа. ● Если в запросе указана таблица, у которой в запросе не используется ни одного поля, то на эту таблицу накладываются все ограничения доступа к данным. Например, запрос ВЫБРАТЬ КОЛИЧЕСТВО(*) ИЗ Справочник.Контрагентыбудет исполнен с учетом всех ограничений доступа, заданными для справочника Тест. Ограничения накладываются «по ИЛИ». Это значит, что будут доступны все записи, доступные хотя бы по одному условию. Если для каких-то полей не задано условий, то запрос будет выполнен для всех записей таблицы. Если в запросе используется таблица верхнего уровня, то ограничения, заданные для колонок вложенных таблиц, не накладываются. Если в запросе используется вложенная таблица, то накладываются ограничения как для вложенной таблицы, так и для таблицы верхнего уровня. Например, запрос ВЫБРАТЬ КОЛИЧЕСТВО(*) ИЗ Справочник.Контрагенты.Договорабудет исполнен с учетом всех ограничений для справочника Контрагенты, а также с учетом ограничений, относящихся к табличной части Договора. ● Если доступ к полям, необходимым для получения представления ссылочного объекта метаданных, запрещен с помощью ограничений доступа к данным или доступ к объекту запрещен на уровне прав доступа, то получение представления такого объекта не влияет на ход текущей транзакции. 5.5.4.8.9. Конструктор ограничения доступа к данным Для вызова конструктора в табличном поле Ограничения доступа к данным в колонке Ограничение доступа нужно перейти в режим редактирования и нажать кнопку выбора. На экран выводится форма конструктора: Рис. 68. Закладка «Таблицы и поля» конструктора ограничений С его помощью производится формирование условий для установки ограничения доступа к данным. На закладке Таблицы и поля следует выбрать нужные объекты и перенести их в раздел Таблицы и Поля. Если указано несколько таблиц, то в конструктор добавляется закладка Связи. Рис. 69. Закладка «Связи» конструктора ограничений На закладке Связи формируются условия, которые накладываются на связи между полями таблиц. Для ввода нового условия нужно нажать кнопку Добавить и в колонке Таблица1 выбрать одну из таблиц. В колонке Таблица2 выбрать таблицу, поля которой связаны с полями первой. Ниже списка условий расположены элементы управления, с помощью которых формируется условие связи таблиц. Если выбран простой тип условия, то в Поле1 и Поле2 выбираются связанные поля указанных таблиц и задается условие сравнения. Если выбраны поля, сравнение которых не производится, то в строке списка условий в колонке Условие связи выводится текст: Неверно заполненное условие. На закладке Условия, если требуется, нужно указать условия, по которым будет выполняться отбор исходных данных. Рис. 70. Закладка «Условия» конструктора ограничений По каждому выбранному полю необходимо выбрать вид условия и указать наименование параметра. В качестве параметра допускается использование параметра сеанса. Разрешается указывать несколько условий. В этом случае в колонке Условие табличного поля условий текст условия выводится в несколько строк. В любой момент создания запроса текст запроса можно просмотреть, нажав кнопку Запрос. 5.5.4.8.10. Групповое редактирование ограничений прав доступа и шаблонов Режим группового редактирования ограничений прав доступа и шаблонов вызывается командой Все ограничения доступа контекстного меню ветки Роли. В открывшейся форме присутствуют две закладки: Ограничения доступа и Шаблоны ограничений. Рис. 71. Все ограничения прав доступа и шаблоны На закладке Ограничения доступа можно просматривать все введенные ограничения доступа в общем списке (по всем ролям, объектам, правам, комбинациям полей). Существует возможность добавлять ограничение доступа сразу для нескольких ролей, объектов, прав и комбинаций ролей. Можно фильтровать список по различным критериям. Рис. 72. Отбор ограничений доступа Режим группового редактирования позволяет удалять выделенные в списке ограничения. Существует возможность редактировать выделенные ограничения. При этом можно заменять состав полей и/или ограничение доступа. Режим группового редактирования позволяет также копировать выделенные ограничения в другие роли. Рис. 73. Копирование ограничений На закладке Шаблоны ограничений можно видеть все шаблоны ограничения доступа, присутствующие в прикладном решении, при этом из собственно текста шаблона в таблице отображаются только первые 10 строк, которые завершаются символом "...", если текст шаблона более 10 строк. В окне редактирования шаблона будет отображаться полный текст шаблона. Рис. 74. Все шаблоны ограничения доступа Существует возможность добавлять шаблон ограничения доступа сразу для нескольких ролей. Имеется возможность отбирать необходимые шаблоны с помощью набора критериев, а также по значению текущей колонки. Рис. 75. Отбор шаблонов ограничения доступа При необходимости имеется возможность выполнить копирование одного или нескольких шаблонов в другие роли. Рис. 76. Копирование шаблонов Также редактор предоставляет возможность редактировать выделенные шаблоны. При этом можно изменять наименование и сам текст шаблона. 5.5.5. Общие реквизиты Общий реквизит – это реквизит, добавляемый ко всем или многим объектам конфигурации. Общий реквизит может использоваться в двух сценариях: ● Как общий реквизит, т. е. для упрощения указания реквизита, который присутствует во всех или многих объектах конфигурации, в которых этот реквизит сохраняет свой смысл и тип. В качестве примера такого использования общего реквизита можно привести поле произвольного комментария в документах прикладного решения. ● Как составная часть разделения данных – специального механизма, позволяющего разделить все хранимые данные, а также работу прикладного решения на отдельные части. При этом у общего реквизита включается разделение данных. В качестве примера такого использования можно привести понятие абонента, когда в одной физической информационной базе могут независимо работать различные «владельцы» данных, при этом пользователи такого прикладного решения будут считать, что в информационной базе кроме «их» данных нет больше ничего. Подробнее о механизме разделения данных см. стр. 1123. Для того чтобы создать общий реквизит, необходимо создать объект конфигурации Общий реквизит. Это можно сделать в режиме Конфигуратор обычным способом, то есть в окне конфигурации следует выбрать пункт Общие, далее Общие реквизиты и добавить новый объект. Рис. 77. Создание общего реквизита В результате будет создан объект конфигурации Общий реквизит, который можно использовать для включения общего реквизита в необходимые объекты конфигурации. Режим работы общего реквизита задается с помощью свойства Разделение данных. Если это свойство установлено в значение Не использовать, то созданный объект конфигурации будет использоваться только как реквизит, входящий в состав нескольких (или всех) объектов конфигурации. Если свойство установлено в значение Разделять, общий реквизит будет использоваться в качестве разделителя данных (см. стр. 1123). Список объектов конфигурации, в состав которых входит общий реквизит, определяется с помощью свойств Состав и Автоиспользование (или соответствующая закладка в окне Дополнительно (см. здесь)). Рис. 78. Общий реквизит без разделения Если свойство Автоиспользование установлено в значение Использовать, то созданный общий реквизит будет автоматически добавлен во все существующие объекты конфигурации (для которых возможно использование общих реквизитов), а также будет автоматически добавляться во все вновь создаваемые объекты конфигурации. В том случае, если свойство Автоиспользование установлено в значение Не использовать, автоматического добавления реквизита происходить не будет, а для выбора объектов, в состав которых необходимо включить общий реквизит, следует воспользоваться свойством Состав. Этим же свойством следует воспользоваться в том случае, если при автоматическом использовании общего реквизита существуют объекты, в которых общий реквизит добавлять не следует. Рис. 79. Состав общего реквизита Окно редактирования состава общего реквизита разделено на две части: ● в верхней части указаны все объекты конфигурации, которые могут входить в состав общего реквизита; ● в нижней части – объекты, настройки которых отличаются от настроек по умолчанию, определяемых значением свойства Автоиспользование общего реквизита: ● если свойство установлено в значение Использовать, то нижняя часть окна содержит список объектов, не входящих в состав общего реквизита; ● если свойство установлено в значение Не использовать, то нижняя часть окна содержит список объектов, входящих в состав общего реквизита. Редактирование можно осуществлять как в верхней, так и в нижней части окна, при этом редактируемый объект конфигурации будет перемещаться между частями окна, в зависимости от значения в колонке Использование. Для каждого объекта конфигурации колонка Использование может принимать одно из трех значений: ● Автоматически – означает, что назначение объекта конфигурации общему реквизиту зависит от значения свойства Автоиспользование общего реквизита: ● Использовать означает, что объект конфигурации входит в состав общего реквизита; ● Не использовать означает, что объект конфигурации не входит в состав общего реквизита. ● Использовать – означает, что объект конфигурации входит в состав общего реквизита вне зависимости от значения свойства Автоиспользование. ● Не использовать – означает, что объект конфигурации не входит в состав общего реквизита вне зависимости от значения свойства Автоиспользование. Таким образом, с помощью редактора свойства Состав можно, например, выборочно исключать некоторые объекты из состава общего реквизита, несмотря на то, что для него установлено автоиспользование. В состав общего реквизита (не находящегося в режиме разделения данных) могут входить следующие объекты конфигурации: ● справочники, ● документы, ● журналы документов, ● планы видов характеристик, ● планы счетов, ● планы видов расчета, ● бизнес-процессы, ● задачи, ● регистры сведений, ● регистры накопления, ● регистры бухгалтерского учета, ● регистры расчета, ● планы обмена, ● внешние источники данных. При записи документа общему реквизиту журнала присваивается значение общего реквизита документа или значение NULL, если документ не входит в состав общего реквизита. Общий реквизит может использоваться в ограничениях доступа к данным (см. стр. 233). Включать внешние источники данных в состав общего реквизита имеет смысл в том случае, когда общий реквизит является разделителем (см. здесь). С особенностями использования внешнего источника данных, входящего в состав разделителя, можно ознакомиться в соответствующем разделе (см. здесь). Общий реквизит может быть составного типа. СОВЕТ. Не следует использовать общие реквизиты для описания данных, которые являются частью бизнеслогики конкретных объектов. Общие реквизиты отображаются в редакторе формы при редактировании форм объектов, входящих в состав общего реквизита, и могут быть размещены на форме. 5.5.6. Планы обмена План обмена используется для реализации механизмов обмена данными. План обмена: ● содержит информацию об узлах, которые могут участвовать в обмене данными; ● определяет состав данных, которыми будет производиться обмен; ● указывает, следует ли задействовать механизм распределенной информационной базы при обмене. В одном прикладном решении может существовать несколько планов обмена, каждый из которых может описывать свой порядок обмена данными. Например, если выполняется обмен данными с удаленными складами и удаленными офисами, то, скорее всего, будут существовать два плана обмена (один – для обмена со складами, другой – для офисов), поскольку состав данных, которыми производится обмен со складами, будет значительно «уже», чем состав данных, предназначенных для обмена с офисами. Описание механизмов обмена данными см. здесь. 5.5.7. Критерии отбора Критерии отбора – одна из составляющих механизма отбора информации. С их помощью специалист, осуществляющий конфигурирование системы, создает предопределенные правила отбора. В режиме 1С:Предприятие по этим правилам будет выполняться отбор информации в списках. В окне редактирования объекта Критерий отбора нужно указать имя, синоним и комментарий. Тип критерия отбора может быть любым из стандартных типов или определенных как объекты дерева конфигурации. Допускается включение реквизитов с составным типом, заданным как СправочникСсылка, ДокументСсылкаи т. д., а также реквизитов с составным типом, определенным планом видов характеристик (Характеристика...). При создании типа критерия отбора следует указать те типы, по которым требуется производить отбор. На закладке Состав по этому типу будет сформирован состав объектов конфигурации, содержащих данные, тип которых входит в тип критерия отбора. В списке требуется установить отметку для тех реквизитов, по которым будет производиться данный отбор. Чтобы критерий отбора выполнял свои функции, в конфигураторе для него должен быть создан список (закладка Состав), состоящий из реквизитов справочников и документов. На состав списка не накладывается практически никаких ограничений: например, в отличие от графы журнала, для критерия отбора можно выбрать несколько реквизитов одного документа и реквизитов табличной части документа. Критериев отбора может быть произвольное число, а каждый критерий может иметь несколько форм представления результатов отбора. Этот механизм полезен в случае поиска различной информации. Например, требуется отобрать все документы, в которых используется (в реквизитах и табличных частях) определенный контрагент. При этом можно учитывать и другие условия отбора информации (например, поиск ведется только среди проведенных документов или в определенном интервале дат и т. д.). ПРИМЕЧАНИЕ. При открытии формы отбора следует передавать в нее параметр Отборс установленным значением отбора (элемент Значение). Подробнее о параметрах формы см. здесь. Критерий отбора может иметь произвольное число форм для визуального представления результатов отбора. Для оперативности получения информации по отбору вызов формы можно разместить в пользовательском меню или на панели инструментов. Если форм критерия отбора несколько, то в свойстве Основная форма указывается та форма, которая будет вызываться по умолчанию. Если в конфигурации определено несколько подсистем, нужно выбрать ту, к которой относится данный критерий отбора. Можно указать несколько различных подсистем. Для вызова формы критерия отбора система размещает соответствующую команду в панели навигации формы. 5.5.8. Подписки на события Подписки на события позволяют назначать обработчики событий для одного объекта или группы объектов встроенного языка. При добавлении новой подписки на событие, кроме общих свойств объектов конфигурации, следует указать источник события, само событие, обработчик которого назначается, и процедуру, являющуюся обработчиком этого события. Источниками событий могут являться прикладные объекты, наборы записей регистров, менеджеры объектов конфигурации. Допускается как множественный выбор объектов, являющихся поставщиками событий, так и выбор всех объектов одного типа (например, все документы). Выбор события осуществляется из выпадающего списка, причем список содержит те события, которые присутствуют во всех выбранных объектах. Если таких событий нет, список будет пуст. Выбор обработчика события выполняется в окне, содержащем процедуры, которые могут быть назначены в качестве обработчика события. Такие процедуры должны удовлетворять следующим требованиям: ● процедура должна быть расположена в общем модуле; ● у общего модуля, в котором расположена процедура, должны быть заданы следующие свойства: ● флажок Глобальный снят; ● флажок Клиент (обычное приложение) установлен; ● флажок Клиент (управляемое приложение) снят; ● флажок Сервер установлен; ● флажок Внешнее соединение установлен. ● количество параметров процедуры должно быть на единицу больше, чем количество параметров, которое имеет обработчик выбранного события (т. к. дополнительно к параметрам, передаваемым в обработчик события, передается еще и объект-источник данного события). При наступлении указанного события выполняется следующая последовательность действий: ● сначала отрабатывается событие в самом объекте и вызывается обработчик события, определенный в модуле объекта или набора записей; ● если в процессе выполнения обработчика параметр Отказустановлен в значение Истинаили вызвано исключение, действие прерывается; ● затем в произвольном порядке вызываются внешние обработчики, назначенные для данного события; ● если в процессе выполнения назначенного обработчика параметр Отказустановлен в значение Истинаили вызвано исключение, действие прерывается. В качестве источника в назначенный обработчик передается сам объект (набор записей), вызвавший событие. Назначенные обработчики событий вызываются в том же контексте, что и действие, вызвавшее событие. Если выполнение назначенного обработчика нужно перенести на сервер, следует вызывать в коде обработчика процедуру общего модуля, исполняемую на сервере. Назначение обработчиков событий доступно также и средствами встроенного языка. Для этого используются операторы ДобавитьОбработчики УдалитьОбработчик. У объектов, которые могут являться источниками событий, есть свойство ДополнительныеСвойстватипа Структура, позволяющее хранить информацию между вызовами событий, например, новый или старый это объект. 5.5.9. Регламентные задания 5.5.9.1. Основные возможности механизма заданий Основными возможностями механизма заданий являются: ● определение регламентных процедур на этапе программирования системы; ● выполнение заданных действий по расписанию; ● выполнение вызова заданной процедуры или функции асинхронно, т. е. без ожидания ее завершения; ● мониторинг хода выполнения заданий; ● управление заданиями (отмена, блокировка выполнения и др.); ● возможность ожидания завершения одного или нескольких заданий. 5.5.9.2. Фоновые задания Механизм фоновых заданий реализуется средствами встроенного языка. Фоновые задания предназначены для выполнения прикладных задач асинхронно. Они могут порождать дочерние фоновые задания, например, для распараллеливания сложных вычислений по различным рабочим серверам кластера в клиент-серверном варианте работы. Существует возможность ограничить выполнение фоновых заданий, имеющих одинаковые методы, по определенному прикладному признаку. Программное создание и управление фоновыми заданиями возможны из любого соединения пользователя с информационной базой системы «1С:Предприятие». Фоновое задание выполняется от имени пользователя, который его создал. 5.5.9.3. Регламентные задания Регламентные задания представляют собой неотъемлемую часть конкретного прикладного решения и описываются на этапе конфигурирования. Рис. 80. Расписание фоновых заданий Для каждого регламентного задания может быть задано расписание, в соответствии с которым регламентное задание будет автоматически запущено на исполнение. В системе «1С:Предприятие» поддерживаются однократные и периодические расписания. Можно задать дату начала и окончания выполнения, дневное, недельное и месячные расписания. Расписание можно задать как на этапе конфигурирования, так и на этапе выполнения (в режиме 1С:Предприятие). В процессе запуска регламентное задание порождает фоновое задание, которое и выполняет реальную обработку. Регламентное задание может выполняться от имени заданного пользователя и имеет возможность перезапуска (например, в случае непредвиденного завершения работы). В утилите администрирования клиент-серверного варианта работы автоматическое выполнение регламентных заданий может быть запрещено для конкретной информационной базы. 5.5.9.4. Особенности выполнения регламентных заданий В клиент-серверном варианте работы запуск регламентных заданий по расписанию осуществляет менеджер кластера. Таким образом, даже если с информационной базой не установлено ни одного клиентского соединения, регламентные задания будут выполняться (при условии, что они не запрещены для конкретной информационной базы). Особенность выполнения фоновых заданий в файловом и клиент-серверном вариантах см. здесь. 5.5.10. Функциональные опции и параметры функциональных опций 5.5.10.1. Назначение Функциональные опции позволяют разработчику описать возможности прикладного решения, которые можно оперативно включать или выключать на этапе внедрения и/или в процессе работы системы. Например, возможность работы с дополнительными свойствами товаров можно выделить в отдельную функциональную опцию. Тогда если отключить эту возможность, в интерфейсе прикладного решения «пропадут» все связанные (с дополнительными свойствами товаров) возможности. Система способна автоматически учитывать состояние сделанных настроек – скрывать выключенные возможности, делая интерфейс приложения более ясным и понятным для пользователя. При разработке возникают ситуации, когда значение функциональной опции должно зависеть от неких параметров, например, валютный учет ведется не у всех организаций. Для реализации такой зависимости служат Параметры функциональных опций – объекты, параметризующие функциональные опции. 5.5.10.2. На что влияют функциональные опции Функциональные опции могут оказывать влияние: ● На пользовательский интерфейс – при выключении каких-либо функциональных опций система скрывает в пользовательском интерфейсе все элементы, относящиеся к ней. При этом затрагиваются следующие элементы интерфейса: ● глобальный командный интерфейс; ● реквизиты формы (в том числе колонки реквизита формы типа ТаблицаЗначенийили ДеревоЗначений); ● команды формы; ● отчеты, реализованные с помощью системы компоновки данных. ВНИМАНИЕ! Если клиентское приложение работает с файловым вариантом информационной базы через вебсервер, то изменение функциональной опции приведет к изменению пользовательского интерфейса только после перезапуска веб-сервера (перезапуск клиентского приложения не вызовет изменение пользовательского интерфейса). ● На алгоритмы, написанные на встроенном языке – имеется возможность программно получать значения функциональных опций и использовать их в различных условиях, например, для уменьшения объема вычислений. ВНИМАНИЕ! Функциональные опции и их параметры не влияют на состав базы данных. Все таблицы и поля присутствуют в базе данных независимо от состояния функциональных опций. 5.5.10.2.1. Глобальный командный интерфейс Влияние функциональных опций на глобальный командный интерфейс заключается в том, что система скрывает команды всех объектов, относящихся к выключенным опциям. Например, если значение функциональной опции Закупкиравно значению Ложь, то будут скрыты команды открытия раздела Закупки, создания документа ПриходТовара, открытия списка ПриходТовараи т. д. В свою очередь, опция Закупкиможет учитывать значение параметра функциональной опции, например, Организация. Изменяя с помощью методов встроенного языка значение этого параметра, можно изменять состояние функциональной опции, а, следовательно, и видимость элемента интерфейса. Также следует учитывать следующие особенности формирования командного интерфейса: ● Команда будет исключена из командного интерфейса в том случае, если реквизит, являющийся параметром команды, отключен функциональной опцией. ● Команда будет исключена из командного интерфейса в том случае, если тип параметра команды отключен функциональной опцией. Если тип параметра команды составной, то команда становится недоступной тогда, когда отключаются все типы параметра. 5.5.10.2.2. Форма В форме функциональные опции могут влиять на реквизиты и команды формы и (как следствие) изменять видимость связанных с ними элементов формы (поля и колонки – для реквизитов формы, кнопки – для команд формы). При разработке формы необходимо учитывать следующие особенности поведения системы: ● Отключается реквизит формы ссылочного типа, если объект конфигурации, образующий этот тип, отключен функциональной опцией. Реквизит формы составного типа отключается в том случае, если функциональные опции отключают все составляющие типы. ● Отключается реквизит формы типа <Вид>Объект(например, основной реквизит формы), если объект конфигурации, образующий этот тип, отключен функциональной опцией. ● Таблица формы будет отключена, если она отображает данные реквизита формы, отключенного функциональной опцией. ● В диалоге выбора типов (например, для полей ввода, связанных с реквизитами составного типа) отсутствуют типы, если объекты конфигурации, формирующие эти типы, отключены функциональной опцией. Информация о типах, отключенных функциональными опциями, кэшируется на стороне клиента и очищается через 20 минут или во время вызова метода ОбновитьИнтерфейс(). ВНИМАНИЕ! В отличие от командного интерфейса, значения параметров функциональных опций устанавливаются только для конкретного экземпляра формы. 5.5.10.2.3. Система компоновки данных Система компоновки данных в основном используется для построения отчетов. Функциональные опции влияют на состав данных, которые выводятся в отчет, и на состав настроек отчета, доступных пользователю. Например, если выключена функциональная опция Валютный учет, то в отчете, выводящем реестр документов Приход товара, будет отсутствовать колонка Валюта и Валютная сумма, а в настройках будет отсутствовать возможность отбора, группировки, сортировки и т. д. по полю Валюта. Подробнее о влиянии функциональных опций на доступность полей в отчете, построенном на системе компоновки данных, см. здесь. 5.5.10.2.4. Характеристики Функциональные опции оказывают влияние на видимость полей формы, которые отображают значение характеристики объекта. Для этого необходимо включить в состав функциональной опции реквизит, хранящий значение характеристики. Рассмотрим пример. Характеристики используются для справочника Товары, виды характеристик хранятся в плане видов характеристик Характеристики, а значения – в качестве ресурса регистра сведений ЗначенияХарактеристик. Ресурс входит в состав функциональной опции УчетХарактеристик. Рис. 81. Влияние функциональных опций на характеристики В случае отключения функциональной опции УчетХарактеристикв формах отключается видимость полей (колонка Значение и поле Значение), отображающих значения характеристик, как показано на рис. 81. 5.5.10.3. Общая схема работы Механизм функциональных опций включает в себя два типа объектов метаданных: Функциональная опция и Параметры функциональных опций. Функциональная опция представляет собой объект метаданных, который может непосредственно влиять на состав интерфейса приложения (если функциональная опция хранит свое значение в реквизите типа Булево). С помощью объектов этого типа можно скрыть элементы, которые относятся к недоступной функциональности. Например, опция Валютный учет может скрыть справочник Валюты, поле Валютаиз документов, колонку Валютная сумма из отчетов. Источником значения функциональной опции является объект метаданных, выбранный в качестве свойства Хранение, например, это может быть константа. В случае хранения значения функциональной опции в реквизите справочника или ресурсе регистра сведений требуется дополнительная информация, которая указывает на то, как именно выбрать значение опции. Для этой цели предусмотрен отдельный объект метаданных – Параметры функциональных опций. Можно сказать, что параметры функциональных опций являются осями координат пространства значений функциональных опций. Причем один параметр функциональных опций может определять значение «своей» оси координат одновременно для множества функциональных опций. Рис. 82. Параметризуемая функциональная опция Рассмотрим пример: допустим, суммовой учет зависит от склада, принадлежащего конкретной организации (см. рис. 82). В нашей информационной базе можно вести учет от имени разных организаций и на разных складах. Для хранения значений функциональных опций создадим регистр сведений, где измерениями (осями координат) будут: ● Организация(соответствующего типа); ● Склад(соответствующего типа). Ресурсом регистра сведений будет значение функциональной опции суммового учета. Тогда общая структура конфигурации будет выглядеть следующим образом: ● Регистр сведений СуммовойУчет: ● измерение Организация; ● измерение Склад; ● ресурс СуммовойУчет, имеющий тип Булево. ● Параметр функциональных опций Организация. Свойство Использованиеуказывает на измерение Организациярегистра сведений СуммовойУчет. ● Параметр функциональных опций Склад. Свойство Использованиеуказывает на измерение Складрегистра сведений СуммовойУчет. ● Функциональная опция СуммовойУчет. Свойство Хранениеуказывает на ресурс СуммовойУчетрегистра сведений СуммовойУчет. В результате для того, чтобы определить необходимость ведения суммового учета, нам необходимо в каждом конкретном случае указать значения параметров функциональных опций (Организацияи Склад) и получить значение функциональной опции. Так, в примере, показанном на рис. 82, для Организации 1 и Склада 1 суммовой учет разрешен, а для Организации 2 и Склада 1 суммовой учет запрещен. 5.5.10.4. Взаимодействие с другими объектами Функциональные опции могут быть назначены следующим объектам конфигурации: ● Подсистемы, ● Общие команды, ● Общие формы, ● Константы, ● Критерии отбора, ● Справочник, ● Документ, ● Журнал, ● План счетов, ● План видов характеристик, ● План видов расчета, ● Бизнес-процесс, ● Задача, ● Планы обмена, ● Отчет, ● Обработка, ● Регистр накопления, ● Регистр сведений, ● Регистр бухгалтерии, ● Регистр расчета, ● Команда, ● Реквизит объекта метаданных, ● Табличная часть, ● Реквизит табличной части, ● Признак учета, ● Признак учета субконто, ● Реквизиты адресации, ● Измерение регистра, ● Ресурс регистра. Также функциональные опции могут влиять на видимость элементов формы. 5.5.10.5. Создание 5.5.10.5.1. Создание функциональной опции Для того чтобы создать функциональную опцию, необходимо создать объект конфигурации Функциональная опция. Это можно сделать в режиме Конфигуратор обычным способом, то есть в окне конфигурации следует выбрать пункт Общие, далее Функциональные опции и добавить новый объект. Рис. 83. Создание функциональной опции В результате будет создан объект конфигурации Функциональная опция, который можно использовать для назначения функциональных опций другим объектам метаданных. Рис. 84. Хранение значения функциональной опции Кроме имени объект имеет обязательное для заполнения свойство – Хранение. В редакторе для него можно выбрать один из объектов, который будет являться источником значения опции. В список доступных объектов входят: ● константы, ● реквизиты справочников, ● ресурсы регистров сведений. Ограничение на тип источника значения опции нет, но для управления интерфейсом пригодны только те функциональные опции, которые хранят свои значения в реквизитах, имеющих тип Булево. Значения функциональных опций с другими типами доступны только для анализа на встроенном языке. Свойство Привилегированный режим при получении отвечает за способ получения (и кеширования) значения функциональной опции. Рис. 85. Привилегированный режим при получении значения функциональной опции Если данное свойство установлено, то значение функциональной опции получается в привилегированном режиме. Полученное значение кешируется для всех сеансов, связанных с данной информационной базой. Если свойство Привилегированный режим при получении сброшено, то получение значения функциональной опции выполняется в обычном режиме. Кеширование выполняется для текущего сеанса. Кешируется как значение (если его удалось получить), так и признак невозможности получения значения (в том случае, если значение получить не удалось). Кеш сбрасывается при изменении значений параметров сеанса. СОВЕТ. Рекомендуется устанавливать свойство Привилегированный режим при получении для всех случаев, когда значение функциональной опции не содержит конфиденциальную информацию. 5.5.10.5.2. Создание параметра функциональных опций Для того чтобы создать параметр функциональной опции, необходимо создать объект конфигурации Параметры функциональных опций. Это можно сделать в режиме Конфигуратор обычным способом, то есть в окне конфигурации следует выбрать пункт Общие, далее Параметры функциональных опций и добавить новый объект. Кроме имени, параметр имеет обязательное свойство Использование. В нем указывается набор объектов, значения которых будут определять то, как следует выбирать значение функциональной опции. В список доступных объектов входят справочники и измерения регистра сведений. Для каждого параметра функциональных опций в данном списке можно выбрать один справочник (из всего перечня справочников) и по одному измерению каждого регистра сведений. ВНИМАНИЕ! Нельзя использовать один и тот же объект метаданных в нескольких параметрах функциональных опций. 5.5.10.6. Использование 5.5.10.6.1. Назначение объектам метаданных Объект метаданных (например, справочник) можно отнести к одной или нескольким функциональным опциям. Для этого служит свойство Функциональные опции, которое содержит ссылки на созданные в конфигурации функциональные опции. Рис. 86. Назначение функциональной опции объекту Список доступных опций ограничен только теми опциями, для которых в свойстве Хранениеназначен объект с типом значения Булево. ВНИМАНИЕ! Если объекту не назначена ни одна функциональная опция, то он считается видимым всегда. В противном случае объект считается видимым, если хотя бы одна из назначенных ему функциональных опций является включенной (т. е. функциональные опции сочетаются «по ИЛИ»). 5.5.10.6.2. Назначение реквизитам и командам формы Объекты, принадлежащие форме (Реквизиты и Команды), также можно задействовать в механизме функциональных опций. Рис. 87. Назначение функциональной опции команде Сделать это можно в редакторе формы, установив свойство Функциональные опции для требуемого объекта. Состояние функциональных опций будет влиять на отображение объектов формы точно так же, как это происходит в случае объектов метаданных. Например, в случае с командой, отключенной с помощью функциональной опции, будут убраны все связанные с ней кнопки. Если реквизиту формы или команде не назначена ни одна функциональная опция, то реквизит формы или команда считается видимой всегда. В противном случае реквизит формы или команда считается видимой, если хотя бы одна из назначенных ему функциональных опций является включенной. 5.5.10.6.3. Использование в механизме ограничения доступа к данным В условиях механизма ограничения доступа к данным (см. здесь) Функциональные опции могут использоваться точно так же, как и Параметры сеанса (см. здесь). Допустимо использовать только не зависящие от параметров опции, то есть те, которые привязаны к константам. ВНИМАНИЕ! Системой контролируется уникальность имен между параметрами сеанса и функциональными опциями. 5.5.10.6.4. Определение значения функциональной опции Значение функциональной опции определяется объектом, который указан в свойстве Хранение. В случае константы используется ее значение. Для опции, связанной с реквизитом справочника или ресурсом регистра сведений, – значения, хранящиеся в этих объектах. Для того чтобы найти конкретный объект, который хранит значение функциональной опции, необходима дополнительная информация – набор значений параметров функциональных опций. Если опция хранится в реквизите справочника, параметр должен содержать ссылку на конкретный элемент справочника. Если опция хранится в ресурсе регистра сведений, должны быть указаны значения всех измерений регистра. В этом случае каждое измерение должно характеризоваться своим параметром. Если для функциональной опции, имеющей тип Булево, заданы не все параметры, то выполняется сложение «по ИЛИ» всех значений с незаданными параметрами. Например, если функциональная опция хранится в регистре сведений с измерениями Организацияи Склади задано только измерение Организация, то значение функциональной опции будет равно Истина, если хотя бы у одного из складов, перечисленных в измерении Склад, значение функциональной опции будет равно значению Истина. Для функциональной опции, имеющий тип, отличный от Булево,ситуация с не полностью заданными параметрами приводит к генерации исключения. Методы встроенного языка позволяют получить значение опции, как в зависимости от переданных параметров, так и для параметров, установленных для командного интерфейса или конкретной формы. Если функциональная опция привязана к ресурсу периодического регистра сведений, то система использует срез последних для получения значения опции. Если требуется получать значение опции на какую-либо другую дату, необходимо указать значение для параметра функциональных опций Период(Period), имеющий тип Дата, который будет использоваться как дата получения среза. Этот параметр не нужно создавать в метаданных. Он предоставляется системой автоматически. При использовании параметризованных функциональных опций следует учитывать следующие особенности поведения: ● В формах списков колонка реквизита, связанного с параметризованной функциональной опцией, будет отображаться, если в информационной базе хранится хотя бы одно включенное значение данной функциональной опции. ● Если необходимо, чтобы при открытии формы реквизиты, связанные с функциональными опциями, были отключены по умолчанию, то нужно установить значения этих параметров в значения, отсутствующие в информационной базе (для справочников – пустая ссылка, для регистров сведений – значения измерений, для которых нет записей). В этом случае функциональная опция будет иметь значение Ложь. ● В том случае, когда в качестве параметра указана ссылка на группу (если типа параметра функциональной опции допускает создание групп), а не ссылка на элемент, поведение системы будет следующим: ● если реквизит, в котором хранится значение функциональной опции, используется как для элемента, так и для группы, то значение функциональной опции будет определяться значением этого реквизита. ● если реквизит, в котором хранится значение функциональной опции, не используется для группы, то при получении значения функциональной опции c помощью методов ПолучитьФункциональнуюОпцию(), ПолучитьФункциональнуюОпциюФормы()и ПолучитьФункциональнуюОпциюИнтерфейса()будет возращено значение NULL. Если, параметризованная таким значением, функциональная опция оказывает влияние на пользовательский интерфейс, то система будет воспринимать ее как выключенную (функциональная опция будет иметь значение Ложь). ● Для командообразующих объектов метаданных возможно установить привязку к параметризованной функциональной опции. В командном интерфейсе команды таких объектов будут отображаться только в том случае, если есть хотя бы одна комбинация параметров функциональных опций, при которых значение функциональной опции равно Истина. Однако с помощью метода УстановитьПараметрыФункциональныхОпцийИнтерфейса()можно задать конкретные значения параметров функциональных опций, и тогда видимость команд будет определяться именно заданными параметрами. ● Динамический список автоматически использует функциональные опции, используемые формой. Если реквизиты, которые используются в запросе динамического списка, будут отключены при заданной комбинации параметров функциональных опций, данные по ним не будут выбраны и отображены в динамическом списке, а реквизит будет удален из списков доступных реквизитов в диалоге настройки отображения данных динамического списка (в режиме 1С:Предприятие). 5.5.10.7. Работа с функциональными опциями во встроенном языке Методы глобального контекста ПолучитьФункциональнуюОпцию()и ПолучитьФункциональнуюОпциюИнтерфейса() возвращают значение функциональной опции. Разница между ними заключается в том, что первый метод позволяет указать набор параметров функциональных опций, а второй – возвращает значение функциональной опции исходя из параметров, заданных для командного интерфейса. В форме есть свой метод, который возвращает значение опции для параметров, указанных в рамках формы, – ПолучитьФункциональнуюОпциюФормы(). Для обновления глобального командного интерфейса следует явным образом вызывать метод УстановитьПараметрыФункциональныхОпцийИнтерфейса(). Командный интерфейс будет обновлен с учетом нового состояния функциональных опций. ПРИМЕЧАНИЕ. Если значение функциональной опции изменяется в базе данных, то автоматического обновления глобального командного интерфейса и открытых в это время форм не происходит. Для этого следует использовать метод ОбновитьИнтерфейс()после записи значений функциональных опций в базу данных. Следует помнить, что установка параметров функциональных опций (и выполнение метода ОбновитьИнтерфейс()) приводит к следующим последствиям: ● для каждой формы вызывается закрытие всех вспомогательных форм (с вызовом соответствующих обработчиков); ● формы, отказавшиеся от закрытия, не закрываются; ● происходит обновление состава элементов основной формы; ● если на момент обновления интерфейса активной формой была основная, происходит отображение основной формы в соответствии с новым составом элементов; ● если на момент обновления интерфейса активной формой была вспомогательная форма, то: ● будет выполнена команда открытия вспомогательной формы, если после обновления интерфейса она является доступной; ● в противном случае обновляется состав элементов основной формы и выполняется ее отображение; ● если на момент обновления интерфейса активной формой была вспомогательная форма, открытая с помощью команды, не относящейся к панели навигации формы, то вместо этой формы будет обновлен состав элементов основной формы и выполнено ее отображение. Для того чтобы обновить конкретную форму, следует либо заново открыть ее, либо вызвать метод УстановитьПараметрыФункциональныхОпцийФормы(), при этом вышеописанная последовательность действий отрабатывает только для той формы, в контексте которой вызвана установка параметров функциональных опций формы. Параметры не обязательно указывать все сразу, можно изменить значение конкретного параметра или набора параметров выборочно. Но эффективнее осуществляется именно групповая установка значений одним вызовом. Для получения значений параметров необходимо вызвать соответствующую функцию (ПолучитьПараметрыФункциональныхОпцийИнтерфейса()или ПолучитьПараметрыФункциональныхОпцийФормы()), которая вернет установленные параметры в виде структуры, где ключом будет выступать имя параметра. При открытии форма автоматически использует параметры функциональных опций, установленных для командного интерфейса. 5.5.11. Определяемые типы Определяемый тип – это специальный объект конфигурации, который предназначен для определения типа данных, который описывает часто используемую сущность или с высокой степень вероятности может изменяться при внедрении прикладного решения. В качестве примера можно рассмотреть универсальную подсистему, предназначенную для хранения контактной информации. В состав этой подсистемы входит регистр сведений, который хранит эту информацию. В этом регистре есть измерение, которое указывает, для какого объекта хранится контактная информация. В качестве значения измерения может выступать контрагент, собственная организация, физическое лицо и т. д. Причем тип (с именем СправочникиОрганизацийИФизическихЛиц), описывающий этот объект хранения, может встречаться не только в качестве типа измерения регистра. В процессе внедрения прикладного решения состав такого типа может изменяться – в него могут добавляться новые справочники или из его состава могут исключаться «лишние» типы. Если вместо типа СправочникиОрганизацийИФизическихЛициспользовать составной тип в каждом месте, где используется такая сущность, то придется везде изменять состав типов. Это сложно и существует возможность забыть о каком-либо реквизите с нужным составным типом. Если использовать составной тип, то в процесс доработки прикладного решения будет необходимо изменить только определение составного типа (и, естественно, все фрагменты прикладного кода, где этот тип используется). Все реквизиты, для которых в качестве типа указан тип СправочникиОрганизацийИФизическихЛиц, будут изменены автоматически. Определяемый тип обладает следующими особенностями: ● Может быть составным; ● Не может входить в состав типа значения плана видов характеристик; ● Не может входить в состав составного типа данных другого реквизита. Для описания типа на строенном языке следует использовать конструкцию вида ОпределяемыйТип.<ИмяОпределяемогоТипа>. ПРИМЕЧАНИЕ. Если требуется использовать прикладное решение с младшими версиями системы «1С:Предприятие» (младше версии 8.3.3), то следует удалить из конфигурации все определяемые типы. 5.5.12. Хранилища настроек Для сохранения информации о настройках пользователя, которые должны сохраняться между сеансами работы, в платформе реализованы хранилища настроек. Существует два вида хранилищ настроек: ● Стандартное хранилище – хранилище, используемое системой по умолчанию и хранящее данные в системных таблицах информационной базы. ● Хранилища настроек – специальные объекты метаданных, которые описывают хранение данных в некотором объекте информационной базы. Например, в этом объекте может быть описана работа с настройками, которые хранятся в справочнике. Платформа использует следующие хранилища: ● Системное хранилище – в данное хранилище система сохраняет все возможные настройки, которые нужны для работы платформы. К данным настройкам относятся настройки размеров форм, настройки печати табличного документа и т. п. Полный перечень настроек, сохраняемых в системном хранилище, (см. стр. ) здесь. В качестве системного хранилища настроек всегда используется стандартное хранилище настроек. То есть данные системного хранилища всегда сохраняются в системной таблице информационной базы. ● Хранилище общих настроек – данное хранилище предназначено для хранения различных настроек прикладного решения. Платформа самостоятельно не записывает в данное хранилище никаких настроек. Данное хранилище должен использовать разработчик из встроенного языка, для того чтобы выполнять сохранение/восстановление прикладных настроек пользователя. ● Хранилище пользовательских настроек отчетов – в данное хранилище помещаются пользовательские настройки отчетов. ● Хранилище вариантов отчетов – в данное хранилище помещаются варианты отчетов. ● Хранилище настроек данных форм – в это хранилище сохраняются данные форм. Этим хранилищем можно пользоваться, например, для сохранения реквизитов обработок. При этом можно выбрать индивидуальное хранилище для каждого отчета и обработки. ● Хранилище пользовательских настроек динамического списка – в это хранилище сохраняются пользовательские настройки динамического списка. При разработке конфигурации имеется возможность определить собственные хранилища настроек для всех хранилищ, кроме системного хранилища. Для этого необходимо создать объект хранилища настроек в соответствующей ветке дерева метаданных и затем указать его в нужном свойстве конфигурации. Свойства объекта Конфигурация имеют те же имена, что и вышеперечисленные хранилища. Данные хранилищ могут храниться как в системной таблице информационной базы, так и в некотором специальном объекте информационной базы, например, в справочнике или регистре сведений. Например, можно создать в конфигурации объект хранилища настроек и указать в свойстве конфигурации, что данное хранилище следует использовать для хранения настроек отчетов. Таким образом, настройки отчетов будут сохраняться не в системной таблице, а в некотором объекте, например, в справочнике, что дает возможность организовать работу с едиными настройками отчетов, реализовать систему прав, обмен настройками и т. п. Создавать собственное хранилище имеет смысл в тех случаях, когда необходима особая структура хранения настроек, необходимы специальные механизмы управления настройками, требуется обмен настройками в рамках распределенной базы данных ((см. стр. ) здесь) и других аналогичных случаях. ПРИМЕЧАНИЕ. Для хранения настроек рекомендуется выбирать такие объекты, для которых системой поддерживается способ идентификации, при котором идентифицирующий реквизит можно преобразовать в строку и обратно без потери данных. В качестве примера можно привести справочник и стандартный реквизит Код, уникальный во всем справочнике. 5.5.12.1. Общие принципы работы хранилища настроек Объект метаданных ХранилищеНастроекпредназначен для обеспечения хранения прикладных настроек конфигурации. За счет реализации обработчиков событий и создания форм объекта выполняется модификация механизма работы с настройками таким образом, что изменяется место хранения настроек (вместо системных таблиц используются объекты конфигурации, которые создал разработчик) и визуальные механизмы работы с настройками. В конфигурации может быть определено произвольное количество хранилищ настроек. Хранилище настроек может использоваться как только для программной работы, так и для программной и интерактивной работы. В первом случае для обеспечения необходимой функциональности требуется обязательная реализация обработчиком модуля объекта ХранилищеНастроек: ● ОбработкаСохранения– содержит реализацию метода Сохранить(). В данном обработчике необходимо выполнить сохранение настройки в некоторый объект. Например, в элемент справочника. ● ОбработкаЗагрузки– содержит реализацию метода Загрузить(). В данном обработчике необходимо получить настройки из некоторого объекта. Например, из элемента справочника. ВНИМАНИЕ! Если не реализовать тот или иной обработчик, то будет недоступно выполнение действия, которое обработчик реализует. Например, если не реализовать обработчик ОбработкаСохранения, будет недоступно сохранение настроек. В процессе разработки хранилища разработчик самостоятельно определяет, каким образом будет идентифицироваться объект хранилища, тем самым определяя тип параметра. Например, если настройки сохраняются в справочнике, то в качестве ключа настройки можно использовать поле Кодили значение Ссылка (элемента справочника). Если для работы с настройками требуется интерактивность (формы сохранения и восстановления настроек), то необходимо реализовать формы сохранения и восстановления настроек и заполнить соответствующие свойства объекта ХранилищеНастроек(Форма сохранения и Форма загрузки). ВНИМАНИЕ! Реализация форм сохранения и восстановления настроек является обязательной для выполнения интерактивных операций. Программное сохранение и восстановление настроек возможно и без реализации этих форм. Когда пользователь применяет команды сохранения или загрузки настроек, система получает соответствующую форму объекта хранилища настроек и отображает ее на экране. Например, при сохранении настроек отчета система будет использовать форму сохранения того объекта метаданных, который указан в качестве хранилища настроек отчетов (непосредственно у самого отчета или у всей конфигурации). При этом форме будут переданы параметры, более подробную информацию о которых можно получить в описании объекта ОписаниеНастроекв синтакс-помощнике. При создании формы с помощью конструктора необходимые параметры будут автоматически добавлены в список параметров формы. В формах следует использовать переданные параметры и соответствующим образом фильтровать список настроек. Так, следует отображать только настройки для указанного в параметре КлючОбъектаобъекта настройки (например, отчета). Если пользователь выбрал настройку, то результатом работы формы должно быть значение типа ВыборНастроек. В этом значении, в свойстве КлючНастроек, должен находиться ключ выбранной настройки (например, код элемента справочника или другой, идентифицирующий настройку параметр), а в свойстве ДополнительныеСвойства– дополнительная информация, которую пользователь мог указать в форме: Закрыть(Новый ВыборНастроек(КлючСохраняемойНастройки)); ВНИМАНИЕ! Не поддерживается сохранение настройки в стандартном хранилище настроек, если длина ключа объекта превышает 256 символов; длина ключа настроек превышает 128 символов; длина имени пользователя превышает 64 символа. 5.5.12.2. Создание объекта метаданных Для создания Хранилища настроек следует создать одноименный объект конфигурации. Это можно сделать в ветке Общие, пункт Хранилища настроек. Рис. 88. Создание хранилища настроек 5.5.12.3. Стандартное хранилище настроек Стандартное хранилище настроек представляется во встроенном языке объектом СтандартноеХранилищеНастроекМенеджер. Данный объект реализует тот же набор методов, что и объект ХранилищеНастроекМенеджер, и дополнительно реализует методы: ● ПолучитьСписок()– метод получения списка настроек для выбранного объекта настройки; ● Удалить()– удаление определенной настройки выбранного объекта настройки. Стандартное хранилище сохраняет настройки в системных таблицах информационной базы. В качестве ключа объекта настройки и в качестве ключа настройки системное хранилище настроек принимает строку. В качестве настроек системное хранилище принимает любое значение, которое может быть помещено в хранилище значений. ПРИМЕЧАНИЕ. При использовании методов Сохранить(), Удалить()и УстановитьОписание()объекта СтандартноеХранилищеНастроекМенеджерследует учитывать, что если объект, к которому относятся настройки (например, форма), в текущем сеансе уже использовался, то изменения произойдут только в следующем сеансе. СОВЕТ. При существенном программном изменении настроек (например, при копировании настроек от одного пользователя другому) рекомендуется предложить пользователю выполнить перезапуск клиентского приложения. 5.5.12.4. Сохранение настроек форм Разработчик может управлять сохранением данных форм в настройках. Для этого при разработке формы ему необходимо воспользоваться следующими свойствами формы: ● Сохранение данных формы в настройках – при помощи данного свойства разработчик формы может включить возможность сохранения данных формы (с возможностью выбора настройки, в которую будут сохраняться данные). Если у формы включена необходимость сохранения, то форма предоставляет команды сохранения/загрузки настроек. ● Автоматическое сохранение данных в настройках – указывает необходимость автоматического сохранения настроек при закрытии формы и восстановлении при открытии формы. При этом не важно, используется или нет список настроек. Если для формы установлена возможность сохранения данных, то необходимо указать, какие реквизиты формы должны сохраняться (колонка Сохранение на закладке Реквизиты редактора формы). При сохранении настроек в качестве ключа объекта используется полное имя формы. В настройках сохраняется объект типа Соответствие, в котором в качестве ключей находятся пути к сохраняемым реквизитам, а в качестве значений – их (реквизитов) значения. 5.5.12.5. Сохранение настроек отчетов У объектов Отчет и Внешний отчет имеются свойства метаданных Хранилище вариантов и Хранилище настроек. В данных свойствах указывается, в какие хранилища нужно сохранять варианты и настройки отчета соответственно. Если хранилища не указаны, то используются хранилища, указанные в свойствах конфигурации. Если в свойствах конфигурации также не указаны конкретные объекты ХранилищеНастроек, то используется системное хранилище. Форма отчета предоставляет команды сохранения и загрузки вариантов и настроек отчетов. При необходимости сохранять в настройках компоновки данных или пользовательских настройках компоновки данных некоторую дополнительную информацию можно воспользоваться свойствами ДополнительныеСвойства объектов НастройкиКомпоновкиДанныхи ПользовательскиеНастройкиКомпоновкиДанных. Свойство ДополнительныеСвойствапредставляет собой объект типа Структура. 5.5.12.6. Сохранение настроек динамических списков Пользовательские настройки динамических списков сохраняются в хранилище, которое указано в свойствах конфигурации (ХранилищеПользовательскихНастроекДинамическихСписков). Если в свойствах конфигурации не указано хранилище настроек, то используется системное хранилище. Возможностью автоматического сохранения пользовательских настроек динамического списка управляет свойство Автоматическое сохранение пользовательских настроек реквизита формы типа ДинамическийСписок. Когда свойство установлено в значение Истина, пользовательские настройки автоматически сохраняются при закрытии формы и загружаются при ее открытии. Форма динамического списка предоставляет команды сохранения и загрузки пользовательских настроек. Также динамический список предоставляет команду для установки стандартных настроек. В случае выполнения данной команды в динамический список попадут настройки, которые находятся в свойстве Список.КомпоновщикНастроек.Настройки. Для динамического списка возможен вызов события ПриОбновленииСоставаПользовательскихНастроекНаСерверев следующих случаях: ● При открытии формы динамического списка; ● После завершения редактирования пользовательских настроек, если изменился состав настроек. 5.5.12.7. Порядок разработки хранилища настроек Далее приводится рекомендованный порядок разработки хранилищ настроек: 1. Определяется, какое хранилище (см. начало раздела) будет использоваться. Например, будет реализовано хранилище настроек данных форм конфигурации. 2. Определяется перечень объектов метаданных, которые будут использовать это хранилище, и определяется перечень хранимой в хранилище информации, ее структура и типы. Эта информация поможет нам правильно выбрать объект метаданных, в данных которого будут храниться наши настройки. 3. На основании информации из п. 2 создается объект (и его структура), который будет хранить настройки. Пусть наши настройки хранятся в элементах справочника. Так как в нашем случае структура сохраняемых данных крайне разнородна, то нет смысла реализовывать отдельный набор реквизитов для хранения настроек каждой формы. Поэтому настройки будут храниться в реквизите справочника типа ХранилищеЗначения. 4. Создается объект типа ХранилищеНастроек, и для него выполняется реализация форм сохранения и загрузки. Тем самым обеспечивается интерактивность при сохранении и восстановлении настроек. 5. Для созданного объекта ХранилищеНастроеквыполняется реализация обработчиков событий, связанных с сохранением и восстановлением настроек. Если не выполнить эту операцию, то не будут происходить собственно операции чтения/записи настроек. Для решения этой задачи нужно реализовать обработчики событий ОбработкаСохраненияи ОбработкаЗагрузкив модуле созданного объекта типа ХранилищеНастроек. 6. В объектах, выделенных в п. 2 (или в свойствах конфигурации), заполняются соответствующие свойства, тем самым указывая объектам, в каких хранилищах будут храниться настройки. В нашем примере необходимо заполнить свойство конфигурации Хранилище настроек данных форм ссылкой на объект, созданный на шаге 4. 7. При необходимости выполняется реализация обработчиков событий, связанных с сохранением и восстановлением настроек в тех прикладных объектах, где это необходимо. 5.5.12.8. Работа с хранилищем настроек из встроенного языка В данном примере рассматривается копирование настроек текущего пользователя другим пользователям системы. В качестве источника настроек используется ХранилищеСистемныхНастроек. ПРИМЕЧАНИЕ. Пример, приведенный ниже, не является законченным. Он предназначен для демонстрации работы с стандартным хранилищем настроек. Список имен пользователей передается параметром процедуры СкопироватьНастройки()в виде массива. Процедура СкопироватьНастройки(СписокПользователей) ОписаниеНастроек = Новый ОписаниеНастроек; ВыборкаНастроек = ХранилищеСистемныхНастроек.Выбрать(); Пока ВыборкаНастроек.Следующий() Цикл Для каждого Пользователь Из СписокПользователей Цикл ОписаниеНастроек.Представление = ВыборкаНастроек.Представление; ХранилищеНастроек.Сохранить(ВыборкаНастроек.КлючОбъекта, ВыборкаНастроек.КлючНастроек, ВыборкаНастроек.Настройки, ОписаниеНастроек, Пользователь); КонецЦикла; КонецЦикла; КонецПроцедуры 5.5.13. Общие формы Механизм общих форм позволяет использовать формы, доступные из любого модуля текущей конфигурации. Подробно о порядке работы с редактором форм см. здесь. Если необходимо разместить команду открытия общей формы в командном интерфейсе, то сделать это можно с помощью свойства Использовать стандартные команды. Команда открытия общей формы будет размещена в командном интерфейсе тех подсистем, которым принадлежит общая форма. Если общая форма входит в состав функциональной опции и функциональная опция отключена, то стандартная команда общей формы не отображается в командном интерфейсе. Если создается общая форма, которая будет использоваться в качестве формы отчета, настроек отчета или варианта, то не рекомендуется для такой формы устанавливать свойство Использовать стандартные команды. 5.5.14. Общие команды В данной ветке разработчик может создавать команды, не имеющие объектной специфики или служащие для выполнения действий с объектами, которые не используют стандартные команды. Описание командного интерфейса см. здесь. Описание команд см. здесь. 5.5.15. Группы команд В данной ветке разработчик может создавать собственные группы команд. Созданная группа будет размещаться в той части командного интерфейса, который определен свойством команды Категория. Группа команд может быть размещена: ● в панели навигации, ● панели навигации формы, ● панели действий, ● командной панели формы. Описание командного интерфейса см. здесь. Описание команд см. здесь. 5.5.16. Общие макеты Механизм общих макетов (печатных форм, форм отчетов, справочных данных и т. д.) позволяет создавать шаблоны печатных форм, доступные из любого модуля текущей конфигурации. Подробно о порядке работы с редактором табличных документов см. здесь. 5.5.17. Общие картинки Конфигуратор позволяет включать в конфигурацию графические изображения – картинки. Картинки можно размещать в некоторых элементах управления, в формах, в макетах, а также обращаться к ним при помощи встроенного языка системы «1С:Предприятие». Если картинку планируется использовать в качестве пиктограммы в меню, панели инструментов, табличном документе и т. п., важно задать ей правильный размер, чтобы она отображалась без искажений. Рекомендуемый размер картинок: ● для пиктограмм – не более 16x16 точек; ● для использования в табличном поле – не более 14x14 точек; ● в качестве картинки кнопки выбора поля редактирования – не более 9x9 точек; ● для картинки, которая будет использована в качестве представления подсистемы, – не более 48x48 точек. СОВЕТ. Если картинку предполагается использовать в нескольких местах, ее размер разумно ограничить меньшим значением. Для работы с картинками предназначено окно Библиотека картинок. Для его вызова в окне Конфигурация нужно указать ветвь Общие картинки и в контекстном меню выбрать пункт Все картинки. На экран выводится окно ведения списка картинок (см. рис. 89). Рис. 89. Библиотека картинок Для добавления новой картинки следует нажать кнопку Добавить. На экран выводится окно, в котором можно выбрать картинку из файла или открыть редактор картинок и создать новую картинку, а также выбрать или изменить для картинки прозрачный фон. Для выбора готовой картинки нужно нажать кнопку Выбрать из файла и выбрать файл, в котором расположена подготовленная заранее картинка. Система «1С:Предприятие» позволяет использовать картинки форматов bmp, gif, jpg, png, tiff, ico и метафайлы (wmf, emf). СОВЕТ. Для картинок, которые будут использоваться в качестве пиктограмм в интерфейсе (см. рекомендованные размеры картинок в начале раздела), рекомендуется использовать форматы, поддерживающие сжатие без потерь (png и gif), для того чтобы избежать искажения и минимизировать трафик между клиентом и сервером. Нужно задать имя, по которому данная картинка будет выбираться средствами встроенного языка. Рис. 90. Свойства картинки Чтобы картинка при вставке хорошо вписывалась в элемент управления или форму, желательно установить ей прозрачный фон. Для этого в качестве цвета фона при редактировании картинки достаточно выбрать любой не используемый в картинке цвет, сформировать изображение и сохранить картинку. Для существующей картинки можно указать любой цвет. Благодаря установленной прозрачности данного цвета сквозь него становятся видны детали той части формы, которую закрывает область картинки. Для установки прозрачного фона нужно нажать кнопку Установить прозрачный фон. Указатель мыши изменит вид. Подвести курсор к той части картинки, цвет которой нужно сделать прозрачным, и щелкнуть левой кнопкой мыши. Выбранный цвет становится прозрачным. Для снятия прозрачности следует нажать кнопку Убрать прозрачность. Кнопки Установить прозрачный фон и Убрать прозрачность доступны только для картинок форматов bmp, jpg и tiff. Для картинок в остальных форматах данные кнопки недоступны. Подобные действия можно выполнить с помощью ссылки Открыть в свойстве Картинка. На экран выводится окно выбора картинки. Рис. 91. Выбор картинки Для редактирования картинки нужно нажать кнопку Редактировать. Запускается редактор картинок (подробнее см. здесь). 5.5.18. XDTO-пакеты Механизм XDTO является универсальным способом представления данных для взаимодействия с различными внешними источниками данных и программными системами. Подробнее об использовании механизма XDTO см. здесь. 5.5.18.1. Импорт схемы XML в глобальную фабрику XDTO Для того чтобы импортировать схему XML из файла .xsd в глобальную фабрику XDTO, следует выделить в дереве конфигурации ветку XDTO и выполнить команду контекстного меню Импорт XML-схемы... Рис. 92. Импорт XML-схемы После указания требуемого файла .xsd будет выполнена проверка существования в дереве конфигурации пакетов XDTO, пространства имен которых совпадают с импортируемыми из файла. Если такие пакеты существуют, то будет отображен список этих пакетов и предложено указать те пакеты, которые должны быть обновлены (по умолчанию существующие пакеты не обновляются). Рис. 93. Выбор пространств имен После этого будет выполнен импорт, в результате которого новые пакеты XDTO будут добавлены в дерево конфигурации, а пакеты, отмеченные для обновления, обновлены. 5.5.18.2. Экспорт схемы XML-данных конфигурации Для того чтобы экспортировать схему XML, соответствующую типам данных конфигурации (без учета пакетов XDTO, созданных в дереве конфигурации), в файл .xsd, следует выделить в дереве конфигурации ветку XDTO и выполнить команду контекстного меню Экспорт XML-схемы данных конфигурации... Рис. 94. Экспорт схемы конфигурации После выбора каталога и указания имени файла будет выполнен экспорт схемы XML в указанный файл. 5.5.18.3. Экспорт схемы XML-пакета XDTO Для того чтобы экспортировать схему XML, соответствующую существующему пакету XDTO, в файл .xsd, следует выделить в дереве конфигурации требуемый пакет XDTO и выполнить команду контекстного меню Экспорт XML-схемы... Рис. 95. Экспорт XML-схемы пакета XDTO После этого будет выполнена проверка выгружаемого пакета XDTO. Если будут обнаружены ошибки, соответствующие сообщения будут выведены в окно сообщений, а процедура экспорта будет прервана. В случае успешной проверки будет предложено выбрать каталог и имя файла .xsd, после чего схема XML будет экспортирована в указанный файл. 5.5.18.4. Проверка пакета XDTO Для того чтобы проверить пакет XDTO, следует выделить в дереве конфигурации требуемый пакет XDTO и выполнить команду контекстного меню Проверить пакет. В результате будет выполнена проверка модели пакета XDTO (описание правил проверки см. здесь). Если будут обнаружены ошибки, соответствующие сообщения будут выведены в окно сообщений. 5.5.18.5. Окно редактирования пакета XDTO Редактирование пакета XDTO выполняется в окне редактирования пакета XDTO. Рис. 96. Окно редактирования пакета XDTO При добавлении нового пакета XDTO в дерево конфигурации окно редактирования пакета XDTO открывается автоматически. Для того чтобы открыть окно редактирования для существующего пакета XDTO, следует выделить в дереве конфигурации требуемый пакет XDTO и выполнить команду контекстного меню Открыть пакет. 5.5.18.5.1. Иерархическая структура пакета XDTO Окно редактирования пакета XDTO содержит иерархическую структуру пакета XDTO, отображенную в виде дерева. В корне дерева расположен идентификатор пакета XDTO, содержащий URI пространства имен данного пакета. На первом уровне иерархии могут располагаться следующие элементы пакета: ● Директивы импорта – перечень директив импорта. Каждая директива импорта представляет собой ссылку на другой пакет, содержащий типы, на которые так или иначе ссылается данный пакет. При работе с данным пакетом XDTO средствами встроенного языка данный перечень директив импорта будет доступен в виде объекта КоллекцияПакетовXDTO, содержащегося в свойстве Зависимости пакета XDTO. ● Типы значений – перечень типов значений XDTO, которые содержит пакет XDTO. ● Типы объектов – перечень типов объектов XDTO, которые содержит пакет XDTO. ● Свойства – перечень свойств пакета XDTO. Представляет собой объявления объектов/значений, которые могут являться корневыми элементами документов XML, принадлежащих URI пространству имен данного пакета XDTO. ● Каждый тип значения XDTO описывается иерархической структурой и может содержать в своем составе следующие элементы: ● Образец – описывает один фасет XDTO типа Образец. ● Перечисление – описывает один фасет XDTO типа Перечисление. Каждый тип объекта XDTO описывается иерархической структурой, которая может содержать в своем составе набор свойств объекта. 5.5.18.5.2. Свойства пакета XDTO Редактирование свойств пакета XDTO выполняется в палитре свойств. Если палитра свойств открыта для пакета XDTO, выделенного в дереве конфигурации, то в ней будут содержаться следующие свойства: Имя, Синоним, Комментарий, Подсистемы и URI пространства имен. Кроме этого, палитра свойств будет содержать ссылку Пакет, по которой можно перейти в окно редактирования пакета XDTO. Рис. 97. Свойства пакета XDTO Если палитра свойств открыта для пакета XDTO, выделенного в окне редактирования пакета XDTO (корневой элемент), то она содержит единственное свойство – URI пространства имен. Это свойство задает URI пространства имен пакета XDTO, к которому принадлежат все определенные в этом пакете типы. 5.5.18.5.3. Свойства директивы импорта Редактирование свойств директивы импорта выполняется в палитре свойств. Для директивы импорта палитра свойств содержит единственное свойство – Пространство имен. Это свойство задает URI пространства имен импортируемого пакета. Рис. 98. Свойства директивы импорта 5.5.18.5.4. Свойства типа значения XDTO Редактирование свойств типа значения XDTO выполняется в палитре свойств. Рис. 99. Свойства значения XDTO Для типа значения XDTO палитра свойств содержит следующие свойства: ● Имя – имя типа значения XDTO. ● Базовый тип – базовый тип для данного типа значения XDTO. ● Вариант – вариант простого типа (атомарный тип, список, объединение). Если значение установлено, то должно не противоречить значениям Тип элемента и Типы объединения. ● Тип элемента – тип элемента списка в случае, когда тип значения XDTO определяется списком. При этом все фасеты и свойство Типы подчиненных должны быть пустыми. ● Типы объединения – список типов, образующих объединение в случае, когда тип значения XDTO определяется объединением. Объединяться могут только типы значений XDTO. При этом все фасеты и свойство Тип элемента должны быть пустыми. ● Длина – фасет длины. ● Минимальная длина – фасет минимальной длины. ● Максимальная длина – фасет максимальной длины. ● Пробельные символы – фасет пробельного символа. ● Минимум, включающий границу – фасет минимума, включающего границу. ● Минимум, не включающий границу – фасет минимума, не включающего границу. ● Максимум, включающий границу – фасет максимума, включающего границу. ● Максимум, не включающий границу – фасет максимума, не включающего границу. ● Общее количество цифр – фасет общего количества цифр. ● Количество цифр дробной части – фасет количества цифр дробной части. 5.5.18.5.5. Свойства типа объекта XDTO Редактирование свойств типа объекта XDTO выполняется в палитре свойств. Рис. 100. Свойства объекта XDTO Для типа объекта XDTO палитра свойств содержит следующие свойства: ● Имя – имя типа объекта XDTO. ● Базовый тип – базовый тип для данного типа объекта XDTO. Это может быть только тип объекта XDTO. ● Открытый – признак, является ли тип объекта XDTO открытым. Данное свойство показывает, может ли экземпляр объекта XDTO содержать дополнительные свойства, не определенные в его типе. ● Абстрактный – признак, является ли тип объекта XDTO абстрактным. ● Смешанный – свойство показывает, имеет ли соответствующий объект XDTO смешанное содержание. Если значение свойства Смешанный равно Истина, то значение Последовательный обязательно равно Истина, так как смешанное содержание невозможно смоделировать без применения последовательности XDTO. ● Упорядоченный – признак, является ли порядок следования элементов, представляющих значения свойств, строго соответствующим порядку следования свойств в типе объекта XDTO. Если свойство Упорядоченный имеет значение Ложь, то на входе порядок следования элементов XML не контролируется, а на выходе определяется порядком следования свойств, если только свойство Последовательный не имеет значение Истина. ● Последовательный – это свойство показывает, содержит ли экземпляр соответствующего объекта XDTO последовательность XDTO. Данный признак равен значению Истинав тех случаях, когда порядок следования вложенных элементов XML не может однозначно определяться порядком следования свойств в типе или соответствующий объект XDTO имеет смешанное содержание. Последовательность XDTO позволяет задать в явном виде порядок следования элементов, как они будут представлены в документе XML. Для объектов типов, у которых свойство Последовательный установлено в значение Ложь, порядок следования вложенных элементов соответствует порядку следования свойств. 5.5.18.5.6. Свойства свойств типа объекта XDTO Редактирование свойства свойств типа объекта XDTO выполняется в палитре свойств. Рис. 101. Палитра свойств типа XDTO Для типа объекта XDTO палитра свойств содержит следующие свойства: ● Имя – имя свойства. В пределах одного типа объекта XDTO имена свойств должны быть уникальными. ● Тип – тип свойства. Может быть как типом значения XDTO, так и типом объекта XDTO. ● Минимальное количество – минимальное количество значений свойства. Минимальное количество значений свойства может принимать значения >= 0. Естественно, значение Минимальное количество должно быть меньше или равно значению Максимальное количество (если, конечно, Максимальное количество не равно -1); ● Максимальное количество – свойство типа объекта XDTO может быть определено как содержащее одно или множество значений. Свойство считается содержащим одно значение, если свойство Максимальное количество равно 1. Если же свойство Максимальное количество больше 1, то считается, что свойство может содержать множество значений. Такое свойство в структуре объекта моделируется как список. Свойство Максимальное количество показывает максимальное количество значений свойства. Максимальное количество > 1 может быть задано только для свойств, представляемых в виде элемента XML. ● Возможно пустое – показывает, может ли свойство принимать неопределенное значение. Свойство Возможно пустое, равное Истина, может быть определено только для свойств с формой представления Элемент. Если Максимальное количество > 1, неопределенное значение является допустимым для элемента списка значений свойства. ● Фиксированное – указывает, является ли значение свойства фиксированным. Если установлено в значение Истина, то само фиксированное значение можно получить через свойство По умолчанию. ● По умолчанию – значение свойства по умолчанию. Тип значения по умолчанию может быть только типом значения XDTO. При этом данное значение должно быть совместимо с типом свойства (быть того же типа, что и тип свойства или же унаследованного типа). При создании объекта XDTO свойство, если оно допускает единственное значение, принимает значение по умолчанию. Для свойств с множеством значений список значений изначально пуст, независимо от того, определено или нет значение по умолчанию. ● Форма – форма представления свойства в XML. Это может быть Текст, Элемент или Атрибут. Если формой представления является Атрибут или Текст, то значение свойства Максимальное количество не может быть больше 1. Если свойство принимает значение Текст, то значение свойства Минимальное количество также должно быть равным 1. У одного типа только одно свойство может иметь форму представления Текст, при этом остальные свойства должны иметь форму представления Атрибут. ● Локальное имя – локальное имя, используемое для представления свойства. Для свойств с формой представления Текст – пустая строка. 5.5.18.5.7. Глобальное свойство Редактирование свойств глобального свойства выполняется в палитре свойств. Рис. 102. Палитра свойств глобального свойства Для глобального свойства палитра свойств содержит следующие свойства: ● Имя – имя глобального свойства. В пределах одного типа объекта XDTO имена глобальных свойств должны быть уникальными. ● Ссылка – ссылка на корневое определение свойства пакета. ● Тип – тип глобального свойства. ● Минимальное количество – минимальное количество значений свойства. Если Минимальное количество = 0, то значение свойства может быть не установлено. ● Максимальное количество – максимальное количество значений свойства. Если Максимальное количество равно -1, то количество значений свойства неограниченно. ● Возможно пустое – показывает, может ли свойство принимать неопределенное значение. ● Фиксированное – указывает, является ли значение свойства фиксированным. ● По умолчанию – значение свойства по умолчанию. Лексическое представление значения свойства должно соответствовать правилам проверки типа данного свойства. ● Форма – форма представления свойства в XML. Это может быть Текст, Элемент или Атрибут. ● Локальное имя – локальное имя, используемое для представления свойства. 5.5.19. Web-сервисы Механизм Web-сервисов позволяет использовать «1С:Предприятие» как набор сервисов в сложных распределенных и гетерогенных системах, а также позволяет интегрировать «1С:Предприятие» с другими промышленными системами использованием сервисно-ориентированной архитектуры. Подробнее об использовании механизма Web-сервисов см. здесь. 5.5.19.1. Добавление Web-сервиса Для того чтобы добавить Web-сервис в дерево конфигурации, следует выделить ветку Общие – Web-сервисы и выполнить команду контекстного меню Добавить. В результате выполнения команды будет открыто окно редактирования Web-сервиса (см. здесь). На закладке Прочее окна редактирования Web-сервиса следует установить следующие параметры: ● URI пространства имен – содержит URI пространства имен Web-сервиса. Каждый Web-сервис может быть однозначно идентифицирован по своему имени и URI пространству имен, которому он принадлежит. ● Пакеты XDTO – перечень пакетов XDTO, типы которых могут использоваться в качестве типов возвращаемого значения операций и типов параметров операций Web-сервиса. ● Имя файла публикаций – имя файла описания Web-сервиса, который расположен на веб-сервере (о публикации Web-сервисов см. книгу «1С:Предприятие 8.3. Руководство администратора»). Для получения доступа к Web-сервису необходимо использовать адрес, который формируется следующим образом: <Имя хоста веб-сервера>/<Имя виртуального каталога>/ws/<Имя Web-сервиса> или <Имя хоста вебсервера>/<Имя виртуального каталога>/ws/<Адрес Web-сервиса>. Так, если виртуальный каталог имеет имя DemoWS, имя Web-сервиса в конфигураторе указано как ДемонстрацияРаботыWS, а в качестве адреса указано DemoWorkWS, то обращение к Web-сервису можно выполнять одновременно по двум адресам (для получения доступа с локальной машины): http://localhost/DemoWS/ws/ДемонстрацияРаботыWS или http://localhost/DemoWS/ws/DemoWorkWS. Кроме этого, на закладке содержится кнопка Модуль, которая позволяет открыть для редактирования модуль Web-сервиса. 5.5.19.2. Иерархическая структура Web-сервиса Каждый Web-сервис, описываемый в дереве конфигурации, может содержать набор операций. Каждой операции должна соответствовать экспортируемая процедура, описанная в модуле Web-сервиса. Рис. 103. Описание Web-сервиса В свою очередь, каждая операция может содержать набор параметров, имена которых должны соответствовать именам параметров процедуры, описывающей данную операцию. 5.5.19.3. Операции Web-сервиса На закладке Операции выполняется добавление операции Web-сервиса. Редактирование свойств операции выполняется в палитре свойств. Рис. 104. Свойство операции Web-сервиса Тип возвращаемого значения – тип значения, которое возвращает операция Web-сервиса. Может являться типом значения XDTO или типом объекта XDTO. Возможно пустое значение – показывает, может ли возвращаемое значение принимать неопределенное значение. В транзакции – показывает, будет ли выполняться код модуля Web-сервиса в транзакции или нет. Если свойство установлено, то при вызове Web-сервиса автоматически будет начата транзакция, а при завершении транзакция будет либо зафиксирована, либо произойдет откат транзакции (в зависимости от результатов выполнения). Если свойство не установлено, при начале исполнения модуля Web-сервиса транзакция начата не будет. Имя процедуры – имя процедуры модуля Web-сервиса, которая будет выполнена при вызове данного свойства. 5.5.19.4. Параметры операции На закладке Операции для указанной операции нужно осуществить задание параметров операции Web-сервиса. Редактирование свойств параметра выполняется в палитре свойств. Рис. 105. Свойства параметра операции Тип значения – тип значения параметра операции Web-сервиса. Может являться типом значения XDTO или типом объекта XDTO. Возможно пустое значение – показывает, может ли значение параметра операции принимать неопределенное значение. Направление передачи – определяет направление передачи данных с помощью данного параметра. Возможные значения: ● Входной – означает, что параметр может использоваться только для передачи данных Web-сервису. ● Выходной – означает, что параметр может использоваться как для передачи данных, так и для их получения от Web-сервиса. 5.5.19.5. Указание типов, определяемых системой Чтобы в Web-сервисе воспользоваться типами, определяемыми системой «1С:Предприятие» (например, в параметрах и возвращаемом значении операций), нужно в конфигурации определить пакеты XDTO и для каждого пакета указать в его списке импортируемых пакетов (свойство Директивы импорта) набор пакетов платформы, в которые эти типы входят. URI пространства имен для указания типа содержится в статье синтакспомощника по объекту данного типа. 5.5.19.6. Публикация Web-сервисов Публикация Web-сервисов описывается в книге «1С:Предприятие 8.3. Руководство администратора». 5.5.20. WS-ссылки Система «1С:Предприятие» может использовать веб-сервисы, предоставляемые другими поставщиками, с помощью статических ссылок, создаваемых в дереве конфигурации. 5.5.20.1. Добавление WS-ссылки Для того чтобы добавить статическую ссылку на внешний веб-сервис в дерево конфигурации, следует выделить ветку WS-ссылки и выполнить команду контекстного меню Добавить или соответствующую команду меню Действия. Рис. 106. Добавление WS-ссылки В открывшемся окне следует ввести URL описания добавляемого веб-сервиса, например: http://users.v8.1c.ru/ws/products.1cws?wsdl. ПРИМЕЧАНИЕ. При добавлении WS-ссылки следует помнить, что «1С:Предприятие» удаляет из введенного URL завершающий символ «/», в силу чего URL http://localhost/ws/ws-service/?wsdl и URL http://localhost/ws/wsservice?wsdl с точки зрения «1С:Предприятия» будут считаться идентичными. 5.5.20.2. Иерархическая структура WS-ссылки Просмотр иерархической структуры WS-ссылки выполняется в окне просмотра WS-ссылки. Значения свойств элементов ссылки можно просмотреть в палитре свойств. Для того чтобы открыть окно просмотра WS-ссылки, следует выделить в дереве конфигурации требуемую WSссылку и выполнить команду контекстного меню Свойства. После этого в палитре свойств воспользоваться ссылкой WS-ссылка, которая открывает окно просмотра WS-ссылки. Рис. 107. WS-ссылка Окно просмотра содержит иерархическую структуру WS-ссылки, отображенную в виде дерева. На первом уровне иерархии могут располагаться: ● Модель данных – содержит перечень пакетов XDTO, описывающих структуру типов, используемую вебсервисами, на которые ссылается данная WS-ссылка. ● Web-сервисы – перечень Web-сервисов, на которые ссылается данная ссылка. Просмотр структуры и свойств модели данных выполняется аналогично работе с пакетами XDTO (см. здесь), за исключением того, что редактирование свойств пакетов, отображаемых в окне просмотра WS-ссылки, невозможно. Просмотр структуры WS-ссылки выполняется аналогично работе с Web-сервисами, за исключением того, что для каждого Web-сервиса отображаются поддерживаемые точки подключения Web-сервиса, для которых, в свою очередь, отображается список операций и параметров каждой операции. Рис. 108. Структура Web-сервиса Различные точки подключения Web-сервиса позволяют выполнять операции, используя различные протоколы. 5.5.21. Элементы стиля Объекты конфигурации Элементы стиля предназначены для единообразного оформления различных элементов формы в тех случаях, когда недостаточно того оформления, которое автоматически предлагает «1С:Предприятие». Например, требуется цвет каких-либо надписей в формах конфигурации сделать одинаковым. В этом случае логично создать элемент стиля, задать ему цвет и использовать созданный элемент для установки цвета текста элемента формы. Рис. 109. Использование элемента стиля Элементы стиля могут быть трех разных видов: ● Цвет, ● Шрифт, ● Рамка. ПРИМЕЧАНИЕ. Системные элементы стиля недоступны для выбора в качестве значений пользовательских элементов стиля. В диалоге выбора шрифта в тонком клиенте в списке шрифтов присутствуют шрифты, установленные на текущем компьютере, и перечень специальных шрифтов, заключенных в угловые скобки (<>). Если выбран шрифт <Шрифт текста>, то будет использоваться шрифт интерфейса «1С:Предприятия», остальные шрифты соответствуют соответствующим шрифтам операционной системы. В начале списка размеров шрифта <Шрифт текста> присутствует элемент <>. Выбор этого размера шрифта (его значение равно 0) означает, что будет использован размер шрифта интерфейса «1С:Предприятия». Начертание шрифта (жирный, наклонный и т. д.) по умолчанию берется из стиля, но может быть изменено пользователем без каких-либо ограничений. При выборе другого шрифта внесенные пользователем изменения размера или начертания не сохраняются и устанавливаются в значения по умолчанию. Имеется возможность программного доступа к значению элемента стиля с помощью свойства Значение. Пример: Метаданные.ЭлементыСтиля.ЦветОтрицательного.Значение 5.5.22. Языки Объекты конфигурации Языки предназначены для создания интерфейса программы на различных языках. Для каждого объекта конфигурации типа Языки резервируется отдельная строка для тех реквизитов метаданных, для которых допускается представление на разных языках. Рассмотрим пример формы для элемента справочника Номенклатура. Для языка Русский надписи формы выглядят так: Рис. 110. Форма на русском языке Если в ветви Языки создано несколько объектов (например, Русский и Английский), то для смены языка нужно выбрать пункт Конфигурация – Язык редактирования конфигурации. В открывшемся окне выбора языка выбрать язык просмотра конфигурации. Рис. 111. Выбор языка редактирования конфигурации Аналогичный результат можно получить с помощью кнопки выбора языка, расположенной в панели состояния справа от кнопок CAP и NUM (правый нижний угол основного окна конфигуратора). Конфигуратор заменит текст надписей на варианты надписей выбранного языка. Рис. 112. Форма на английском языке Разумеется, текст надписей должен быть заранее введен для каждого элемента управления. Для ввода текста в палитре свойств элемента управления Надписьв свойстве Заголовок(Текстили Синоним, в зависимости от типа элемента управления) нужно нажать кнопку «лупа» (см. рис. 113). На экран выводится окно Строки на разных языках. Рис. 113. Строки на разных языках СОВЕТ. В конфигурации нет ограничений на число языков. Однако не следует создавать объекты типа Языки «с запасом», т. к. создать объект Язык можно в любой момент. В свойстве Код языка указывается код языка, например, EN для языка Английский. Если в конфигурации определено два и более объекта типа Языки, то для свойства Синоними Заголовок элемента управления появляется кнопка редактирования текста на разных языках (в виде лупы). Первый объект языка программа создает в соответствии с выбором языка (страны) при создании новой информационной базы. Чтобы сформировать текстовое представление реквизита для отображения в форме, используется следующее правило: ● Выполняется получение заголовка отображаемого объекта на языке конфигурации текущего пользователя. Если заголовок задан, используется именно он. ● Выполняется попытка получения синонима отображаемого объекта на языке конфигурации текущего пользователя. Если синоним задан, используется именно он. ● Дальнейшее зависит от вида отображаемого объекта: ● для стандартных реквизитов получается представление на языке локализации платформы; ● для объектов, созданных прикладным разработчиком, используется имя объекта так (и на том языке), как оно задано в конфигурации. ВНИМАНИЕ! Если тексты в свойствах Синонимили Заголовоквведены, то изменение кода языка в свойстве Код языка приведет к «потере» введенных текстов (тексты остаются для прежнего значения кода). Тексты «восстанавливаются» при указании прежнего значения кода языка. Для редактирования текстов и выполнения задач локализации (создания интерфейса на другом языке) следует использовать режим Редактирование текстов интерфейса (см. здесь). В том случае, если предполагается использовать прикладное решение на мобильных устройствах, рекомендуется указывать коды языков в соответствии со стандартом ISO 639 (http://www.iso.org/iso/ru/language_codes). В противном случае при проверке конфигурации будет выдаваться предупреждение. 5.6. Общие свойства объектов конфигурации Данный раздел содержит описание общих свойств объектов метаданных. 5.6.1. Основные свойства Практически все объекты конфигурации имеют следующие свойства, располагающиеся в категории свойств Основные: ● Имя – имя объекта конфигурации. Имя должно состоять из одного слова, начинаться с буквы и не содержать специальных символов, кроме «_». По имени объекта производится доступ и управление объектом конфигурации средствами встроенного языка. Имена объектов конфигурации не должны совпадать с зарезервированными словами языка запросов (список зарезервированных слов см. здесь). ● Синоним – помимо имени можно указать также его синоним. Если конфигурация создается для использования на разных языках, то следует указать синонимы на используемых языках. При работе с системой «1С:Предприятие» синоним будет выдаваться в различных списках выбора, заголовках окон, текстах надписей, при формировании интерфейсов с учетом текущего языка. Синоним не имеет ограничений на использование символов. Если синоним не задан, выбирается имя. ПРИМЕЧАНИЕ. Имя или синоним, выдаваемые пользователю, также называются представлением объекта конфигурации. ● Комментарий – произвольная строка символов. Как правило, расшифровывает и поясняет имя объекта. 5.6.2. Представление объектов метаданных Для многих объектов метаданных реализована возможность задавать различные представления объекта. Это сделано для того, чтобы разработчик имел возможность задать представление стандартных команд, их подсказок, а также заголовков форм. Рис. 114. Представление объектов ● Представление объекта (для регистра – записи): ● название одного объекта (например, Расчетный счет); ● используется в представлении стандартной команды (создание объекта). ● Расширенное представление объекта (для регистра – записи) используется для формирования заголовка формы объекта. Например, Расчетный счет организации. ● Представление списка: ● название списка объектов (например, Расчетные счета); ● используется в представлении стандартной команды (команда открытия списка объектов). ● Расширенное представление списка – используется для формирования заголовка формы списка (например, Расчетные счета организации). ● Расширенное представление – заголовок формы отчета или обработки (например, Отчет о взаиморасчетах по расчетным счетам). ● Пояснение – используется для формирования подсказки к стандартным командам (например, Расчетные счета наших организаций). ● Картинка – картинка для представления подсистемы в панели разделов. Следует учитывать, что заполнение свойств, связанных с представлением объектов и списков, необходимо только в тех случаях, когда требуется несколько уточнить информацию, отображаемую для объекта по умолчанию. Например, существует справочник Товары(Имя объекта метаданных – Товары, Синоним объекта метаданных – Товары), элементами которого могут быть товары и услуги. Но в текстах команд вы хотите использовать единственное число для команды (создать товар) и не хотите отражать информацию об услугах, т. к. она «удлиняет» текст команды. В то же время в форме объекта вы хотите указать пользователю, что в данной форме можно редактировать и товары, и услуги. В этом случае имеет смысл свойство Представление объекта заполнить текстом Товар, а свойство Расширенное представление объекта заполнить текстом Товар (услуга). Тогда команда создания элемента справочника товары будет выглядеть как Товар: создать, а заголовок формы – Товар (услуга). Подробную информацию о том, какие из вышеперечисленных свойств каким объектам метаданных соответствуют см. здесь. Там же можно получить информацию о правилах формирования текстов стандартных команд, подсказок команд и заголовков форм. 5.6.3. Произвольное представление данных Стандартное представление данных, которое формирует система, может не устраивать пользователя. Например, если с системой работают пользователи, говорящие на разных языках и объекты системы содержат всю необходимую информацию также на разных языках. Например, для товаров существует два названия: на русском и на английском языке. А выводить нужный текст необходимо в зависимости от кода локализации сеанса. Также нужно, чтобы представление на нужном языке генерировалось везде, где формируется представление объекта: динамический список, отчет и т. д. Для реализации этой задачи существует специальный механизм, позволяющий разработчику определить реквизиты, которые участвуют в формировании представления, а также описать алгоритм, по которому формируется представление объекта. Данная возможность доступна для следующих объектов конфигурации: ● Планы обмена, ● Справочники, ● Документы, ● Планы видов характеристик, ● Планы счетов, ● Планы видов расчета, ● Бизнес-процессы, ● Задачи, ● Таблицы внешних источников данных. Механизм формирования представления состоит из двух этапов: определение реквизитов, участвующих в формировании представления и собственно формирование представления. Для определения списка реквизитов используется обработчик события ОбработкаПолученияПолейПредставления менеджера соответствующего объекта. Обработчик вызывается при первой попытке получения представления выбранного объекта, и результат работы сохраняется на время сеанса. В данном обработчике необходимо заполнить массив Поляименами реквизитов, которые будут участвовать в формировании представления. Если параметр СтандартнаяОбработкав обработчике будет установлено в значение Истина, то после завершения работы обработчика, массив Полябудет очищен и заполнен полями, используемыми для формирования стандартного представления данного объекта. В противном случае система будет использовать только те значения, которые были помещены в массив Поля. ПРИМЕЧАНИЕ. Примеры, приведенные ниже, не являются законченным. Они предназначены для демонстрации механизмов работы с произвольным представлением. Допустим, что в справочнике Товарыесть реквизиты РусскоеНаименование, АнглийскоеНаименованиеи Артикул, которые должны участвовать в формировании представления. В этом случае обработчик получения полей представления (в модуле менеджера справочника Товары) будет выглядеть следующим образом: Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка) Поля.Добавить("РусскоеНаименование"); Поля.Добавить("АнглийскоеНаименование"); Поля.Добавить("Артикул"); СтандартнаяОбработка = Ложь; КонецПроцедуры При необходимости получения представления система вызывает обработчик события ОбработкаПолученияПредставленияв менеджере соответствующего объекта. В этот обработчик передаются значения реквизитов, участвующих в формировании представления. Программный код, расположенный в обработчике, выполняет формирование текста представления. ВНИМАНИЕ! Обработчик события ОбработкаПолученияПредставлениявызывается при любой необходимости получения представления какого-либо объекта информационной базы. Избыточные данные, или неправильный выбор данных для формирования представления, может привести к существенному замедлению работы системы. Обработчик ОбработкаПолученияПредставленияформирует представление и возвращает его с помощью параметра Представлениеобработчика. Данные, необходимые для формирования представления, передаются с помощью параметра Данные. Данныепредставляют из себя структуру, где ключом является имя реквизита, а значением – значение реквизита для текущего объекта. Если параметр СтандартнаяОбработкаустановить в значение Истина, то система попытается сформировать стандартное представление для текущего объекта, исходя из переданных данных. Если в параметре Данныеотсутствуют реквизиты, необходимые для формирования стандартного представления, то представлением будет пустая строка. Рассмотрим пример формирования представления для двуязычного справочника Товары: Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; КодЛокализацииСеанса = ВРег(ТекущийКодЛокализации()); Если Найти(КодЛокализацииСеанса, "RU") <> 0 Тогда Текст = Данные.РусскоеНаименование; ИначеЕсли Найти(КодЛокализацииСеанса, "EN") <> 0 Тогда Текст = Данные.АнглийскоеНаименование; Иначе Текст = Данные.РусскоеНаименование; КонецЕсли; Представление = Текст + "(" + Данные.Артикул + ")"; КонецПроцедуры Следует помнить, что если в обработчике ОбработкаПолученияПредставлениябудет совершена ошибка встроенного языка, то возможна ситуация, когда работа приложения будет аварийно завершена. 5.6.4. Стандартные реквизиты Для того чтобы на уровне конфигурации переопределять некоторые интерфейсные свойства (такие как синоним, проверка заполнения и т. д.) стандартных реквизитов (например, Код, Наименование, Родитель) и стандартных табличных частей (например, ВидыСубконто, БазовыеВидыРасчета) прикладных объектов, существует возможность настройки этих свойств. Рис. 115. Стандартные реквизиты Для этого в палитре свойств ряда объектов существуют команды, открывающие списки стандартных реквизитов и стандартных табличных частей (см. рис. 115). Такие команды доступны для тех объектов, у которых имеются стандартные реквизиты и стандартные табличные части. С помощью палитры свойств можно переопределять некоторые свойства стандартных реквизитов таким образом, чтобы они более полно соответствовали требованиям решаемой прикладной задачи. Например, для свойства Владелецсправочника РасчетныеСчетаможно задать синоним Контрагент. Тогда во всех формах представление этого реквизита (Владелец) по умолчанию будет выглядеть как «Контрагент:». В том случае если свойства стандартного реквизита (или стандартной табличной части) не заданы, будут использованы свойства стандартных реквизитов по умолчанию. По своему набору свойств стандартный реквизит практически ничем не отличается от любого другого реквизита, за исключением того, что нельзя изменить: ● имя стандартного реквизита, ● тип стандартного реквизита, ● имя стандартной табличной части, ● индексирование стандартного реквизита. ВНИМАНИЕ! Наличие описания стандартного реквизита не меняет его имени, то есть все обращения к реквизиту во встроенном языке и в языке запросов остаются неизменными. 5.6.5. Предопределенные данные 5.6.5.1. Общая информация Предопределенные данные – это элементы прикладных объектов, которые создаются в конфигураторе и обращение к ним возможно по имени, без предварительного поиска. Предопределенные данные имеет смысл создавать в том случае, если какой-либо элемент данных будет нужен постоянно и требуется упростить обращение к этому элементу из программного кода. Например, в справочнике Товарыможно завести предопределенный элемент Услуга, обращение к которому будет выглядеть следующим образом: Справочники.Товары.Услуга. Предопределенными могут быть как элементы, так и группы элементов. Группы можно создавать в тех случаях, когда предопределенные элементы создаются в иерархических объектах, например в иерархическом справочнике. Предопределенные данные могут быть созданы: ● для справочников (см. здесь), ● планов счетов (см. здесь), ● планов видов характеристик (см. здесь), ● планов видов расчета (см. здесь). После создания предопределенного элемента в конфигураторе, возможность создания или обновления связанного с ним элемента данных определяется комбинацией двух значений: ● Значение свойства объекта конфигурации ОбновлениеПредопределенныхДанных. Устанавливается в конфигураторе; ● Значение свойства объекта в информационной базе. Получить и установить значение этого свойства можно в режиме «1С:Предприятие» с помощью методов ПолучитьОбновлениеПредопределенныхДанных()и УстановитьОбновлениеПредопределенныхДанных(). Свойство может принимать три значения: ● Не обновлять автоматически – в этом случае система не выполняет создание или обновление элемента данных при создании или изменении предопределенных данных. Следует понимать, что если для объекта конфигурации установлено такое свойство, то при обращении к предопределенным данным может генерироваться исключение, т. к. отсутствует элемент данных, связанный с предопределенным элементом; ● Обновлять автоматически – в этом случае система автоматически создаст (или обновит существующие) элементы данных для новых (или измененных) предопределенных данных; ● Авто – система автоматически определяет необходимость выполнения обновления. Обновление не будет выполняться в следующих случаях: ● Если в свойствах объекта конфигурации (в метаданных) свойство ОбновлениеПредопределенныхДанных установлено в значение Не обновлять автоматически, при этом значение, установленное в режиме «1С:Предприятие», значения не имеет. ● Если в свойствах объекта конфигурации (в метаданных) свойство ОбновлениеПредопределенныхДанных установлено в значение Обновлять автоматически, а с помощью метода УстановитьОбновлениеПредопределенныхДанных()установлено значение Не обновлять автоматически. ● Если значение Авто установлено и в метаданных и в режиме «1С:Предприятие», и действие выполняется в подчиненном узле распределенной информационной базы (см. здесь). Действие, которое будет выполнять система, определяется с помощью операции «И» между свойством объекта конфигурации и свойством объекта, заданным в режиме «1С:Предприятие». При этом следует понимать, что для определения действия (создавать или не создавать) не принимают участие значения Авто. Вначале они разрешаются в одно из двух значений: Не обновлять автоматически или Обновлять автоматически и уже эти значения участвуют в операции «И». Связь элемента данных и элемента предопределенных данных осуществляется с помощью свойства ИмяПредопределенныхДанных. С помощью этого свойства имеется возможность выполнять следующие действия: ● Связывать элемент предопределенных данных с элементов данных. Для этого следует присвоить свойству ИмяПредопределенныхДанныхимя предопределенного элемента данных, который надо связать с данными: ЭлементСсылка = Справочник.Товары.НайтиПоНаименованию("Услуга доставки "); Объект = ЭлементСсылка.ПолучитьОбъект(); Объект.ИмяПредопределенныхДанных = "Услуга"; Объект.Записать(); В результате этой операции, предопределенному элементу Услугасправочника Товарыбудет сопоставлен элемент данных с именем Услуга доставки. При записи объекта проверяется, что в информационной базе не существует другого элемента данных с именем предопределенных данных, установленного в значение, с которым записывается элемент данных. ● «Отключить» элемент данных от элемента предопределенных данных. Для этого необходимо присвоить свойству ИмяПредопределенныхДанныхпустую строку и записать элемент: Объект = Справочник.Товары.Услуга.ПолучитьОбъект(); Объект.ИмяПредопределенныхДанных = ""; Объект.Записать(); Если попробовать обратиться к предопределенному элементу Справочник.Товары.Услугапосле выполнения вышеприведенного примера, то будет сгенерировано исключение. Таким образом, процесс смены элемента данных, связанного с предопределенными данными, выполняется в два этапа: ● Выполняется «отключение» существующего элемента данных от предопределенного элемента; ● Выполняется связывание нового элемента данных с предопределенным элементом. Создание элементов данных, связанных с предопределенными данными, может быть выполнено одним из трех способов: ● Автоматически, во время реструктуризации информационной базы. Это происходит в следующем случае: ● Разрешено автоматическое создание и обновление предопределенных данных; ● Предопределенные данные ранее создавались в данной области данных или информационной базе. ● Автоматически, при первом обращении к таблице, хранящей данных объекта конфигурации. Создание предопределенных элементов в этом случае будет выполняться при условии, что создание предопределенных элементов не запрещено. ● С помощью встроенного языка, указав свойство ИмяПредопределенныхДанныхпри создании элемента данных. Этот способ можно использовать, если автоматическое создание предопределенных элементов запрещено в свойствах объектов конфигурации. Обновление данных, связанных с предопределенными, будет выполняться в том случае, если разрешено автоматическое обновление предопределенных данных, предопределенные данные связан с реальными данными и предопределенные данные изменены в конфигураторе. Во всех остальных случаях информация, введенная в конфигураторе, не будет перенесена в информационную базу. Изменение порядка следования предопределенных элементов в плане счетов и плане видов характеристик в связанных данных не обрабатывается, т. е. порядок элементов в данных будет таким же, каким он задан в метаданных. Данные, введенные пользователем (не предопределенные) будут располагаться после предопределенных. Если в конфигураторе выполнено удаление элемента предопределенных данных, то будет выполнено следующее: ● Элемент данных, связанный с элементом предопределенных данных, будет помечен на удаление. ● В списке субконто элемента плана счетов будут удалены соответствующие записи. ● В списках ведущих, базовых и вытесняющих видов расчета будут удалены соответствующие записи. Если в прикладном решении отключено автоматическое обновление предопределенных данных, то удаление предопределенного элемента приводит к изменению в связанном объекте данных (если таковой есть). Значение свойства ИмяПредопределенныхДанныхзаменяется значением #xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, где xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx– это уникальный идентификатор удаленного элемента метаданных. В обычной ситуации свойству ИмяПредопределенныхДанныхнельзя присвоить имя указанного выше вида. Исключением являются две ситуации: ● Если при записи объекта данных свойство ОбменДанными.Загрузкаустановлено в значение Истина; ● Изменяется объект, существующий в базе данных, для которого уже указано такое имя. 5.6.5.2. Работа в распределенной информационной базе При работе в режиме распределенной информационной базы вместе с конфигурацией передаются предопределенные элементы. Собственно элементы данных, связанные с предопределенными данными, передаются обычным образом, с помощью плана обмена. При этом автоматическое создание предопределенных данных в периферийной информационной базе не произойдет, подробное описание причины см. здесь. ВНИМАНИЕ! Если данные, связанные с предопределенными элементами, оказались получены в подчиненном узле раньше, чем конфигурация со связанными предопределенными элементами, то автоматического «связывания» данных и предопределенных данных не произойдет. Для этого потребуется повторно выгрузить из центральной в периферийную информационную базу нужные элементы данных. Если начальный образ периферийной информационной базы создается до того, как с главной информационной базой начали работать, можно воспользоваться специальным методом ИнициализацияПредопределенныхДанных() для создания предопределенных элементов, чтобы они автоматически попали в периферийную информационную базу. Метод надо вызывать до того, как выполнено создание начального образа. Если используется универсальный механизм обмена данными, то следует учитывать следующие особенности: ● При записи объекта данных, который в базе-источнике является предопределенным, система проверяет наличие такого же имени предопределенных данных в типообразующем объекте конфигурации. Если такое имя есть – объект будет загружен без изменений. Если такого имени нет – в объекте при загрузке будет очищено свойство ИмяПредопределенныхДанных. Например, выполняется универсальный обмен данными между одинаковыми информационными базами. В каждой информационной базе существует справочник Номенклатура. В каждой информационной базе в этом справочнике содержится предопределенный элемент Услуга. Ссылки на эти объекты данных разные. Тогда при загрузке произойдет следующее: система обнаружит наличие в базе-приемнике предопределенный элемент Услугаи выполнит загрузку с сохранением свойства ИмяПредопределенногоЭлемента. Это будет возможно в том случае, если перед записью элемента свойство ОбменДанными.Загрузкаустановлено в значение Истина. В противном случае будет вызвано исключение. Однако при попытке обратиться в базе-приемнике к предопределенному элементу Услуга, произойдет ошибка, т. к. в системе не может быть двух объектов, связанных с одинаковым предопределенным элементом. Не следует допускать возникновения такой ситуации. Прикладной разработчик должен самостоятельно обрабатывать попытку загрузки объекта данных с дублирующим именем предопределенных данных. ● При записи объекта данных, у которого имя предопределенных данных ссылается на удаленный элемент (имеет вид #xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx), то такой элемент будет записан в любом случае. При этом система не позволит записать два объекта, ссылающиеся на один удаленный предопределенный элемент (с одинаковым значением имени предопределенных данных), кроме как в случае, когда перед записью элемента свойство ОбменДанными.Загрузкаустановлено в значение Истина. 5.6.5.3. Работа в режиме разделения Описание особенностей работы в разделенной информационной базе см. здесь. 5.6.6. Ввод по строке Для прикладных объектов (справочники, документы, планы видов характеристик, планы счетов, планы видов расчета, регистры, бизнес-процессы и задачи, а также планы обмена) в свойстве Ввод по строке можно указать те реквизиты, по которым выполняется поиск. Если ввод по строке разрешен (заданы соответствующие реквизиты), то допустимо в поле ввода соответствующего типа не выполнять выбор из формы объекта, а ввести информацию, которая содержится в заданных реквизитах объекта. Рис. 116. Ввод по строке Например, у нас есть справочник Номенклатура, в котором находится несколько товаров, начинающихся со слова Bosch. Тогда, введя в поле ввода номенклатуры слово bosс, мы получим список товаров, которые начинаются с этого слова (см. рис. 116). В качестве реквизитов, по которым будет выполняться поиск, могут выступать: ● Для справочников, планов видов характеристик, планов счетов, планов видов расчета, планов обмена – Коди Наименование. ● Для документов – Номер. ● Для бизнес-процессов и задач – Номери Наименование. ● Реквизиты, имеющие тип Числоили Строка, для которых свойство Индексировать имеет значение Индексировать или Индексировать с доп. упорядочиванием. Примером последних может служить поле для ввода артикула, штрихкода, ИНН. Для формирования списка реквизитов нужно нажать кнопку выбора и в открывшемся диалоге перенести в левый список те поля, по которым может производиться ввод по строке. Рис. 117. Настройка ввода по строке Если полей несколько, то установить порядок их следования. При поиске по строке поиск выполняется в полях в той последовательности, в которой они приведены в данном диалоге. Например, для элемента справочника Номенклатураввод может осуществляться как по коду, так и по артикулу. Если значение кода одного элемента совпадет со значением артикула другого, то в список найденные значения попадут в том порядке, в котором указаны при настройке. ВНИМАНИЕ! При выполнении поиска данных (во время ввода по строке) действуют ограничения доступа к данным (см. здесь). 5.6.6.1. Особенности поведения поля ввода При вводе данных в поле ввода следует учитывать некоторые особенности работы со списком выбора. Если в результате набора текста система однозначно идентифицирует объект, который пользователь хочет ввести, то происходит автоматическая подстановка найденного объекта в поле ввода. Если в результате набора обнаружено несколько объектов, начинающихся с введенного текста, то список этих объектов будет расположен в выпадающем списке (не более 50 элементов). Во время ввода пользователь может с помощью кнопок Стрелка вверх и Стрелка вниз передвигаться по списку, при этом продолжая набор текста в самом поле. В этом случае для осуществления выбора требуется выбрать необходимый элемент и подтвердить выбор нажатием кнопки Enter или Tab. 5.6.6.2. Программное формирование списка выбора Если разработчика не устраивает, каким образом формируется список выбора, он может переопределить его самостоятельно. Сделать это можно двумя способами: ● Непосредственно в форме – в этом случае особое формирование списка выбора будет работать только для этого, единственного поля. Для этого необходимо определить обработчики событий НачалоВыбора, АвтоПодбори ОкончаниеВводаТекста. ● В модуле менеджера соответствующего объекта – в этом случае особое формирование списка выбора будет выполняться для всех полей ввода, в которых вводятся значения используемого объекта. Если поле связано с данными, имеющими тип ссылки на прикладной объект (например, СправочникСсылка, ПеречислениеСсылкаи т. д.), то список выбора можно сформировать или в модуле менеджера соответствующего объекта, или с помощью обработчиков модуля формы. В остальных случаях список выбора можно сформировать только с помощью обработчиков модуля формы. Подробнее остановимся на втором способе. Для программного формирования списка выбора необходимо переопределить обработчик события ОбработкаПолученияДанныхВыбораменеджера объекта. Обработчик получает набор параметров, определяющих условия формирования списка выбора. Набор параметров представляет собой структуру, которая содержит: ● Строку поиска – текстовую строку, содержащую текст, который пользователь ввел в поле ввода. Данный параметр присутствует всегда. ● Отбор – структура, которая описывает отбор так, как его описывает параметр формы Отбордля расширения формы для динамического списка. Данный параметр присутствует всегда. ● Свойство, которое указывает режим выбора групп и элементов (передается только для иерархических списков). ● Кроме этого, в структуре передаются элементы, которые заданы в свойствах элемента формы – Связи параметров выбора (см. здесь) и Параметры выбора (см. здесь). Кроме того, в обработчик передается переменная, в которую следует вернуть сформированный список выбора, и параметр СтандартнаяОбработка, который определяет поведение системы после того, как произойдет выход из обработчика. Если разработчик устанавливает параметр СтандартнаяОбработкав значение Ложь, то ему необходимо самому полностью формировать список выбора (учитывая ограничение в 50 отображаемых элементов). Если флажок стандартной обработки установить в значение Истина, то можно предоставить системе возможность сформировать список выбора, но при этом можно модифицировать параметры выбора (добавить дополнительные значения отбора, изменить режим выбора групп и элементов и т. д.). ПРИМЕЧАНИЕ 1. Если система сама формирует список выбора, при формировании списка учитываются ограничения доступа к данным (см. здесь). ПРИМЕЧАНИЕ 2. Примеры, приведенные ниже, не являются законченным. Они предназначены для демонстрации различных механизмов получения списков выбора. Так, следующий код в случае любого текста, вводимого пользователем, будет предоставлять выбор из трех товаров, с кодами 00000002, 00000003 и 00000004. Пример: Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) ДанныеВыбора = Новый СписокЗначений; ДанныеВыбора.Добавить(Справочники.Товары.НайтиПоКоду("00000002")); ДанныеВыбора.Добавить(Справочники.Товары.НайтиПоКоду("00000003")); ДанныеВыбора.Добавить(Справочники.Товары.НайтиПоКоду("00000004")); СтандартнаяОбработка = Ложь; КонецПроцедуры В следующем примере отбор, который сформировало поле ввода, будет расширен установкой дополнительного отбора так, чтобы в список выбора не попали услуги. При этом все формирование списка выбора берет на себя система. Пример: Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) Параметры.Отбор.Вставить("Вид", Перечисления.ВидыТоваров.Товар); КонецПроцедуры В качестве последнего примера рассмотрим упрощенный случай реализации отбора полностью средствами встроенного языка. В этом примере будет рассмотрен отбор товаров, название которых начинается со строки, введенной пользователем в поле ввода. Пример: Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | Товары.Ссылка как Товар |ИЗ | Справочник.Товары КАК Товары |ГДЕ | Товары.Наименование ПОДОБНО &Наименование"; Запрос.УстановитьПараметр("Наименование", Параметры.СтрокаПоиска + "%"); Результат = Запрос.Выполнить(); ТаблицаРезультатов = Результат.Выгрузить(); МассивТоваров = ТаблицаРезультатов.ВыгрузитьКолонку("Товар"); ДанныеВыбора = Новый СписокЗначений; ДанныеВыбора.ЗагрузитьЗначения(МассивТоваров); СтандартнаяОбработка = Ложь; КонецПроцедуры Также следует обратить внимание на еще один способ формирования списка выбора: передачу в качестве значения элемента списка значений не ссылки на искомый объект (как в примерах выше), а структуру особого содержания. Эта структура состоит из следующих элементов: ● Значение– собственно значение выбираемого элемента. Элемент структуры с таким именем должен быть обязательно. ● ПометкаУдаления– признак, что выбираемое значение помечено на удаление в информационной базе. Элемент структуры с таким именем не является обязательным. ● Предупреждение– строка с текстом предупреждения, которое отобразит «1С:Предприятие» при выборе такого элемента из списка значений. Элемент структуры с таким именем не является обязательным. Если в структуре свойство ПометкаУдаленияравно значению Истинаи не указано свойство Предупреждение, то система автоматически сформирует текст предупреждения. Если свойство Предупреждениеуказано, то отображается именно оно. Следует помнить, что текст Предупреждениезавершается вопросом Продолжить? и отображается в качестве вопроса с вариантами ответа Да и Нет. Далее будет показана модификация предыдущего примера, в котором для складов с установленным в значение Истинареквизитом НеИспользоватьбудет сформировано предупреждение Этот склад не должен использоваться. Также можно совмещать в одном списке выбора и значения типа Структура, и простые значения. Пример: Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ДанныеВыбора = Новый СписокЗначений; // Сформируем список с предупреждениями Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Склады.Ссылка, | Склады.Наименование, | Склады.НеИспользовать |ИЗ | Справочник.Склады КАК Склады"; Результат = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = Результат.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Структура = Новый Структура("Значение", ВыборкаДетальныеЗаписи.Ссылка); // Заполним предупреждение Если ВыборкаДетальныеЗаписи.НеИспользовать Тогда Структура.Вставить("Предупреждение", "Этот склад не должен использоваться!"); КонецЕсли; Элемент = ДанныеВыбора.Добавить(); Элемент.Значение = Структура; Элемент.Представление = ВыборкаДетальныеЗаписи.Наименование; КонецЦикла; КонецПроцедуры ПРИМЕЧАНИЕ. Если представления элементов (в том числе и элементов структуры с именем Значение) не указаны в явном виде, то они будут получены автоматически. 5.6.7. Формы Форма – это объект, созданный для ввода или просмотра какой-либо информации, а также для управления различными процессами. С помощью форм программа запрашивает у пользователя ту информацию, которая необходима ей для дальнейшей работы, либо выдает какую-либо информацию пользователю для просмотра и редактирования. В тех случаях, когда необходимо обеспечить функционирование конфигурации одновременно в обычном и управляемом режимах, можно использовать дополнительные формы объектов метаданных. При этом «1С:Предприятие» будет автоматически выбирать для использования ту форму, которая соответствует текущему режиму работы. Рис. 118. Основные и дополнительные формы Тонкий клиент и веб-клиент оперируют только управляемыми формами. Значит: ● если обе назначенные формы – управляемые, то будет открыта та форма, которая назначена как основная; ● если среди назначенных форм есть только одна управляемая, будет открыта именно она; ● если управляемая форма не назначена, она будет сгенерирована автоматически. Толстый клиент при выборе формы старается выбрать форму, которая максимально соответствует текущему режиму запуска: ● если никакие формы не назначены, то будет сгенерирована: ● в обычном режиме – обычная форма; ● в управляемом режиме – управляемая форма; ● если назначена только одна форма, то именно она и будет открыта; ● если назначены две формы, обычная и управляемая, то будет открыта: ● в обычном режиме – обычная форма; ● в управляемом режиме – управляемая форма. ● если назначены две обычные или две управляемые формы, то будет открыта та форма, которая назначена основной. Двойной комплект форм можно использовать в тех случаях, когда вы переводите вашу конфигурацию из неуправляемого в управляемый режим, либо когда необходимо, например, часть возможностей конфигурации сделать доступными в веб-клиенте (или тонком клиенте). В этом случае можно реализовать необходимые возможности в управляемых формах и указать их в качестве дополнительных форм. Тогда при работе в режиме веб-клиента (или тонкого клиента) будут использоваться нужные формы (управляемые). Однако следует учитывать, что на получение форм по умолчанию в толстом клиенте оказывают влияние свойства конфигурации Использовать управляемые формы в обычном приложении и Использовать обычные формы в управляемом приложении: ● Если свойство конфигурации Использовать управляемые формы в обычном приложении имеет значение Ложь, то в толстом клиенте, в обычном режиме, при получении формы по умолчанию обязательно должна быть получена обычная форма. Если ни основная, ни дополнительная форма не является обычной, то генерируется обычная форма. Однако если задана основная форма констант (свойство Основная форма констант), то будет использовать именно она, вне зависимости от состояния флажка Использовать управляемые формы в обычном приложении. ● Если свойство конфигурации Использовать обычные формы в управляемом приложении имеет значение Ложь, то в толстом клиенте, в управляемом режиме, при получении формы по умолчанию обязательно должна быть получена управляемая форма. Если ни основная, ни дополнительная форма не является обычной, то генерируется управляемая форма. Если в результате открывается форма, которая автоматически сгенерирована системой и режим запуска клиентского приложения отличается от режима запуска, установленного в свойстве конфигурации Основной режим запуска, то формы объектов и формы наборов записей открываются в режиме Только просмотр. Также в формах списков и формах объектов будут отсутствовать команды Создать на основании, а в формах списков – команда Создать, если для выполнения этих команд системе необходимо автоматически сгенерировать форму, подходящую для текущего режима запуска и режим запуска клиентского приложения отличается от режима запуска, установленного в свойстве конфигурации Основной режим запуска. Если в качестве основного режима запуска прикладного решения выбрано управляемое приложение, то для каждой управляемой формы прикладного решения можно выбрать назначение формы. Свойство формы Назначения использования эквивалентно (по составу и применению) аналогичному свойству конфигурации (см. здесь). Поведение редактора формы зависит от пересечения множеств назначений конфигурации и конкретной формы. Если в пересечении отсутствует значение Персональный компьютер, то: ● В палитре свойств недоступны свойства реквизитов, параметров, команд, элементов, которые не поддерживаются мобильной платформой; ● Недоступно редактирование контекстного меню элемента формы; ● Недоступно редактирование расширенной подсказки для элемента формы; ● Недоступны те виды полей формы, которые не поддерживаются мобильной платформой (см. здесь); ● Редактор настроек динамического списка не позволяет разворачивать доступные поля (связано с тем, что на мобильной платформе динамический список работает строго с одной таблицей). Если в назначении формы отсутствует значение Мобильное приложение, то она не включается в конфигурацию мобильного приложения. 5.6.8. Команды Для выполнения операций, связанных с конкретным объектом метаданных, существуют команды этого объекта. При этом непараметризованные команды объекта будут доступны в командном интерфейсе тех подсистем, в состав которых входит объект метаданных. Если команда является параметризованной, то она будет доступна в тех формах, которые содержат реквизиты формы (включая подчиненные реквизиты первого уровня основного реквизита формы) того же типа, что и тип параметра команды. Для команд требуется написать процедуру выполнения команды. Для этого служит модуль команды, в котором необходимо реализовать обработчик ОбработкаКоманды(). Данная процедура должна предваряться директивой &НаКлиенте, так как выполнение команды происходит в клиентском приложении. Однако другие процедуры и функции, расположенные в модуле команды, могут предваряться другими директивами, если это необходимо для выполнения команды. Подробнее про директивы компиляции см. здесь. Модуль команды может содержать, например, открытие формы отчета с предварительно установленным ему параметром для вывода на печать карточки определенного бухгалтерского счета или открытие формы списка товаров с установленным отбором по виду товара. Если команда, принадлежащая группе Панель навигации, должна открывать одну и ту же форму в разных закладках, следует при получении (или открытии) формы указывать ключ уникальности или ключевой параметр формы. ПРИМЕЧАНИЕ. Если команда расположена в панели навигации основного окна приложения (см. здесь), то повторный выбор этой команды не приведет к ее (команды) повторному выполнению. Это относится и к стандартным командам, и к командам, созданным в конфигурации. 5.6.9. Механизм заполнения реквизитов новых объектов Существует возможность заполнения реквизитов новых объектов при интерактивном создании (кроме копирования), при вводе на основании, при использовании методов ОткрытьФорму()/ПолучитьФорму()или при явном вызове метода Заполнить(). Это заполнение может выполняться: ● значениями отбора при вводе из списка; ● конкретными значениями, указанными в конфигурации в свойствах реквизитов (значения заполнения); ● значениями, которые разработчик указал в обработчике события ОбработкаЗаполнения(). Механизм обработки заполнения реализован для следующих объектов: ● планы обмена, ● справочники, ● документы, ● планы видов характеристик, ● планы счетов, ● планы видов расчета, ● наборы записей регистров сведений, ● бизнес-процессы, ● задачи. Для получения данных заполнения в обработчике ОбработкаЗаполнения()существует параметр ДанныеЗаполнения. В зависимости от того, каким образом вызван обработчик, значение параметра ДанныеЗаполненияможет принимать разные значения: ● Ввод на основании – в качестве значения параметра передается ссылка на объект-основание. При этом значение параметра ДанныеЗаполнениябудет являться ссылкой на объект-основание базы данных. ● Ввод из списка с установленным отбором – в качестве значения параметра передается структура, элементами которой становятся используемые элементы отбора с установленным видом сравнения Равно или В списке (при этом в списке находится единственное значение). При создании нового документа из формы журнала документов элементы отбора по графам журнала предварительно преобразуются таким образом, чтобы в качестве имени элемента структуры ДанныеЗаполнениявыступало имя реквизита документа, а не имя графы журнала. ● Ввод нового объекта или записи без использования отбора – значение параметра равно Неопределено. ● Ввод нового объекта или записи с помощью глобальной команды – значение параметра равно Неопределено. ● Программное выполнение методов ОткрытьФорму()/ПолучитьФорму() – в случае, если исполнение методов ОткрытьФорму()/ПолучитьФорму()приводит к созданию формы нового объекта, в качестве значения параметра обработчика ДанныеЗаполнениябудет передано значение (типа Структура) параметра формы ЗначенияЗаполнения. Если параметр ЗначенияЗаполненияне задан в параметрах формы, то значение параметра обработчика будет равно Неопределено. ● Программный вызов метода объекта Заполнить() – в качестве значения параметра передается та информация, которая передана в качестве параметра метода Заполнить(). ПРИМЕЧАНИЕ. Операция интерактивного создания нового объекта с помощью копирования обрабатывается в обработчике ПриКопировании()соответствующего объекта. На заполнение реквизитов из данных заполнения оказывает влияние свойство Заполнять из данных заполнения реквизита объекта метаданных. Если это свойство имеет значение Истина, то реквизиты будут заполняться системой из данных заполнения автоматически. Если свойство имеет значение Ложьили в данных заполнения нет необходимого значения, то система будет пытаться заполнить реквизит из свойства Значение заполнения. ВНИМАНИЕ! Разработчик может управлять заполнением стандартных реквизитов объектов наравне с самостоятельно созданными реквизитами. Например, можно запретить заполнение стандартного реквизита Родитель, и тогда он не будет автоматически заполняться текущей группой. Если после исполнения обработчика ОбработкаЗаполнения()параметр СтандартнаяОбработкаравен значению Истина, то система автоматически заполнит те реквизиты (включая стандартные), для которых в метаданных установлены свойства Заполнять из данных заполнения или Значение заполнения и которые не заполнены в обработчике (значение равно значению по умолчанию для типа реквизита). Свойство Заполнять из данных заполнения автоматически устанавливается системой для некоторых стандартных реквизитов ряда объектов: ● для справочников – реквизиты Родительи Владелец; ● для планов счетов, планов видов характеристик и планов видов расчета – реквизит Родитель; ● для регистра сведений – ведущие измерения; ● для стандартных реквизитов остальных объектов данное свойство автоматически не устанавливается. При этом данные для стандартного заполнения берутся системой из одноименных реквизитов данных, передающихся в параметре ДанныеЗаполнения. Данные заполнения передаются в создаваемую форму объекта в качестве стандартного параметра формы ЗначенияЗаполненияи передаются из этого параметра расширением формы для заполнения объекту. Также имеется возможность программно задать параметр формы ЗначенияЗаполнениянового объекта, при этом будут выполнены все действия, которые исполняются при интерактивном создании объекта. ПРИМЕЧАНИЕ. При программном создании нового объекта обработка заполнения системой автоматически не вызывается. Для вызова обработчика заполнения существует метод Заполнить(). Значение заполнения – это свойство реквизита объекта метаданных, позволяющее задать значение по умолчанию, которое может принимать реквизит при интерактивном создании объекта. ВНИМАНИЕ! Заполнение реквизитов из свойства Значение заполнения происходит после вызова обработчика ОбработкаЗаполнения(). Реквизит будет заполнен в том случае, если его значение не заполнено ранее (в обработчике ОбработкаЗаполнения()или механизмом стандартного заполнения). Тип значения заполнения совпадает с типом реквизита. При этом в качестве значения этого свойства можно указывать значения примитивных типов или предопределенные данные. 5.6.10. Проверка заполнения реквизитов В информационной системе данные могут вноситься множеством различных способов, и часто они могут быть некорректны. Поэтому при разработке решения бывает необходимо прилагать много усилий на реализацию проверки правильности вводимых данных и уведомления пользователя о некорректности введенной информации. Механизм проверки заполнения позволяет существенно упростить процесс разработки конфигураций. Платформа поддерживает автоматическую проверку указанных реквизитов прикладных объектов и форм, а также позволяет выполнить процесс проверки в модуле. Платформа выполняет автоматическую проверку заполнения: ● констант; ● справочников, документов, отчетов, обработок, планов видов характеристик, планов счетов, планов видов расчета, бизнес-процессов, задач: ● реквизитов и стандартных реквизитов, ● табличных частей, ● реквизитов и стандартных реквизитов табличных частей; ● наборов записей регистров бухгалтерии, регистра сведений, регистра накопления, регистра расчета, перерасчетов, последовательностей: ● измерений, ● ресурсов, ● реквизитов и стандартных реквизитов; ● реквизитов форм; ● реквизитов форм отчетов; ● реквизитов форм обработок. ПРИМЕЧАНИЕ. Проверка заполнения реквизитов выполняется аналогично функции ЗначениеЗаполнено(). Проверка заполнения табличных частей подразумевает, что табличная часть считается заполненной, когда в ней присутствует хотя бы одна строка. Проверка заполнения может быть вызвана двумя способами: ● вызовом метода ПроверитьЗаполнения()(у объекта или формы); ● автоматически. ВНИМАНИЕ! Если свойство конфигурации Режим совместимости установлено в значение Версия 8.1, то автоматическая проверка заполнения не работает. 5.6.10.1. Установки по умолчанию По умолчанию свойство устанавливается в значение Выдавать ошибку для следующих стандартных реквизитов: ● ПланОбмена– Наименование; ● Справочник– Владелец, Наименование; ● Документ– Дата; ● ПланВидовХарактеристик– Наименование; ● ПланСчетов– Код, Наименование; ● ПланСчетов.ВидыСубконто– ВидСубконто; ● ПланВидовРасчета– Наименование; ● ПланВидовРасчета.ВедущиеВидыРасчета– ВидРасчета; ● ПланВидовРасчета.БазовыеВидыРасчета– ВидРасчета; ● ПланВидовРасчета.ВытесняющиеВидыРасчета– ВидРасчета; ● РегистрСведений– Период; ● РегистрНакопления– Период; ● РегистрБухгалтерии– Период; ● РегистрРасчета– ПериодРегистрации, ВидРасчета, ПериодДействияНачало, ПериодДействияКонец; ● БизнесПроцесс– Дата; ● Задача– Наименование. 5.6.10.2. Порядок работы Автоматическая проверка заполнения вызывается расширением формы перед интерактивной записью всех объектов, кроме документов, бизнес-процессов, отчетов и обработок. Для этих объектов определено следующее поведение: ● для документов: ● проверка заполнения вызывается расширением формы перед проведением, если свойство Проведение установлено в значение Разрешить; ● проверка заполнения вызывается расширением формы перед записью, если свойство Проведение установлено в значение Запретить; ● для бизнес-процессов проверка заполнения вызывается расширением формы перед стартом; ● для отчетов проверка заполнения вызывается расширением формы при нажатии кнопки Сформировать; ● для обработок проверка заполнения вызывается расширением формы в случаях, если нажаты кнопки, связанные со стандартными командами формы OK, Да, Повторить, Пропустить. Если реквизит является основным реквизитом формы следующих типов: СправочникОбъект, ДокументОбъект, ОтчетОбъект, ПланВидовХарактеристикОбъект, ПланСчетовОбъект, ПланВидовРасчетовОбъект, БизнесПроцессОбъект, ЗадачаОбъект, то для значения такого реквизита также будет вызвана проверка заполнения. Для вызова проверки заполнения системой необходимо, чтобы у формы (с которой происходит работа) было установлено свойство Проверять заполнение автоматически. В этом случае вначале будет вызван обработчик ОбработкаПроверкиЗаполненияНаСервере()формы, а затем обработчик ОбработкаПроверкиЗаполнения()модуля объекта. ВНИМАНИЕ! Если у формы свойство Проверять заполнение автоматически установлено в значение Истинапри выполнении стандартных команд Записать (Провести для документов и т. д.), а также стандартных команд формы OK, Да, Повторить, Пропустить, будет вызван метод ПроверитьЗаполнение(). В противном случае проверка заполнения не вызывается ни для формы, ни для объекта. Процесс проверки заполнения происходит следующим образом: ● Формируется список имен реквизитов формы, для которых возможна проверка заполнения и для которых свойство ПроверкаЗаполненияустановлено в значение ВыдаватьОшибку. В этот список не будут включены имена реквизитов, тип которых не поддерживает проверку заполнения (например, СправочникОбъект), но будет включено имя основного реквизита формы. В автоматически формируемый список реквизитов не будут включены реквизиты формы, отключенные с помощью функциональных опций. ● Вызывается обработчик события формы ОбработкаПроверкиЗаполненияНаСервере, в котором разработчик может описать свой алгоритм проверки заполнения или изменить состав проверяемых реквизитов. В обработчик будет передан сформированный список имен реквизитов. Если в обработчике необходимо добавить к списку какие-либо реквизиты, это можно сделать только для реквизитов вышеперечисленных типов (для которых возможна проверка заполнения в форме) и основного реквизита. Добавление в список имен реквизитов объектного типа (например, СправочникОбъект) вызовет исключение при дальнейшей автоматической проверке. Добавление в список имени несуществующего реквизита вызовет исключение при дальнейшей автоматической проверке. ● После завершения работы обработчика события механизм проверки заполнения получает обратно список имен, проверяемых реквизитом (который, возможно, был изменен в обработчике). Система анализирует список реквизитов и проверяет заполненность каждого реквизита. Если реквизит является основным реквизитом объектного типа (например, Объекттипа СправочникОбъект), будет вызвана проверка заполнения самого объекта. Если реквизит является реквизитом объектного типа, но не основным, будет вызвано исключение. Разработчик имеет возможность влиять на процесс проверки путем определения в модуле объекта, набора записей и в модуле формы обработчика события ОбработкаПроверкиЗаполнения. Определив обработчик события, разработчик получает полный контроль над проверкой заполнения. В параметре ПроверяемыеРеквизитыобработчик получает массив реквизитов, для которых в режиме Конфигуратор указано, что они должны проверяться. Разработчик может произвольно модифицировать этот массив: ● удалять те реквизиты, проверку заполнения которых он реализует сам или считает, что их не нужно проверять в данный момент; ● добавлять необходимые реквизиты, для которых должна выполниться проверка заполнения. В случае если разработчика не устраивает стандартная процедура проверки, он может написать алгоритм проверки сам и, используя объект СообщениеПользователю, сообщить об имеющихся проблемах пользователю. Если в процессе проверки разработчик вывел пользователю сообщения об ошибках, необходимо установить параметр Отказв значение Истина, чтобы уведомить платформу о том, что текущее действие не может быть завершено. Параметр события ПроверяемыеРеквизитысодержит имена атрибутов в следующем формате: ● для реквизитов и констант – ИмяРеквизита, например, Поставщик; ● для табличных частей – ИмяТабличнойЧасти, например, Товары; ● для реквизитов табличных частей – ИмяТабличнойЧасти.ИмяРеквизита, например, Товары.Номенклатура; ● для реквизитов форм – ИмяРеквизита, например, ДокументОбъект. Для реквизитов, входящих в состав функциональных опций (см. здесь) без параметров, значение опции учитывается при проверке заполнения. Если функциональная опция включена, то реквизит будет включен в список проверяемых реквизитов; если опция выключена, реквизит не будет включен в список проверяемых реквизитов. Это значит, что отключенное поле не будет передано через параметры ПроверяемыеРеквизитыв ОбработкаПроверкиЗаполнения. Реквизиты, входящие в состав функциональной опции с параметрами (см. здесь), всегда включаются в список проверяемых реквизитов (параметр ПроверяемыеРеквизиты). Удаление реквизита из списка проверяемых реквизитов в таких случаях необходимо выполнять в обработчике ОбработкаПроверкиЗаполнения. Для этого следует получить значение функциональной опции, указав в качестве параметров необходимые данные объекта. 5.6.10.3. Правила отображения отметки незаполненного На отображение отметки незаполненного влияют следующие свойства элементов конфигурации: ● свойство Проверка заполнения реквизита или стандартного реквизита объекта метаданных; ● свойство Проверка заполнения реквизита формы; ● свойство Автоотметка незаполненного элемента формы; ● свойство ОтметкаНезаполненногоэлемента формы (доступно только для программного изменения). Свойство элемента формы Автоотметка незаполненного может быть установлено в значение: ● Авто – отметка будет отображаться, если у реквизита формы или реквизита (стандартного реквизита) объекта метаданных свойство Проверка заполнения установлено в значение Выдавать ошибку и реквизит, связанный с элементом формы, содержит пустое значение. ● Да – отметка будет отображаться для незаполненного элемента вне зависимости от того, в каком состоянии находится свойство Проверка заполнения. ● Нет – отметка не будет отображаться для незаполненного элемента вне зависимости от того, в каком состоянии находится свойство Проверка заполнения. При начале интерактивного изменения поля ввода отметка незаполненного перестает отображаться, при этом значение свойства ОтметкаНезаполненногоне изменяется. Отображение отметки восстанавливается (если это необходимо) после того, как в поле ввода завершено интерактивное редактирование или установлено значение. При этом свойство ОтметкаНезаполненногоможет быть изменено системой в том случае, если свойство АвтоОтметкаНезаполненногоустановлено в значение Истина: ● если значение в поле не заполнено, то свойство ОтметкаНезаполненногобудет установлено в значение Истина; ● если в поле значение заполнено, то свойство ОтметкаНезаполненногобудет установлено в значение Ложь. ПРИМЕЧАНИЕ. Если свойство ОтметкаНезаполненногоустановлено у таблицы, то для таблицы, в которой нет строк, будет подсвечена первая строка, а для заполненной таблицы – все строки. Кроме того, отметка незаполненного также будет отображена, если в окне сообщений есть сообщение (см. здесь), связанное с конкретным полем формы, вне зависимости от установленных свойств элемента формы и связанных с ним реквизитов. После очистки окна сообщений отметка незаполненного снимается у тех элементов формы, значение свойства ОтметкаНезаполненногокоторых равно значению Ложь. 5.6.11. Индексирование реквизитов объектов Большинство прикладных объектов конфигурации имеют в составе подчиненных объектов группу Реквизиты. В этой группе указываются дополнительные характеристики объектов. В режиме 1С:Предприятие часто требуется осуществлять отбор данных по значению какого-либо реквизита или сортировать списки данных по реквизитам. Средства «1С:Предприятия» позволяют выполнить подобную задачу, однако если данных достаточно много, такая задача может выполняться долго. Чтобы ускорить эту работу, следует реквизитам, по которым будет выполняться отбор или сортировка, устанавливать свойство Индексировать. Если свойство установлено (выбрано значение Индексировать или Индексировать с доп. упорядочиванием), то подобные задачи будут выполняться эффективнее. Для примитивных типов реквизитов указание индексирования предоставляет пользователям средство сортировки списка по щелчку мыши в области заголовка колонки. Наряду с сортировкой по реквизиту или отбором данных по значению какого-либо реквизита часто требуется, чтобы в результирующем списке данные были дополнительно отсортированы по основному представлению (наименованию или коду), т. е. в пределах одного значения реквизита записи были отсортированы по представлению. Добиться правильного результата можно, если выбрано значение индексирования Индексировать, а в условиях сортировки списка указаны реквизит и представление. Если возникает необходимость минимизации времени таких отборов или сортировки, то для реквизита следует выбрать значение индексирования Индексировать с доп. упорядочиванием (если выбор такого значения возможен). ВНИМАНИЕ! Механизм дополнительного упорядочивания будет эффективно использоваться только в том случае, когда в режиме 1С:Предприятие в условиях сортировки списка указан определенный порядок сортировки: сначала по реквизиту, а затем по представлению. Если такие условия сортировки не задаются, то использование значения Индексировать с доп. упорядочиванием не имеет смысла, т. к. оно будет эквивалентно обычному индексированию, однако размер индекса при этом будет больше. Индексирование с дополнительным упорядочиванием используется для реквизитов справочников, документов, планов видов характеристик, планов счетов, планов видов расчетов. Для реквизитов регистров допускается использование обычного индексирования. 5.6.12. Права Права доступа к объектам конфигурации можно редактировать как с помощью редактора прав доступа ролей (см. здесь), так и с помощью окна редактирования объекта (см. здесь). В окне редактирования объекта выполняется настройка прав доступа для данного объекта во всех ролях, которые существуют в системе. Имеется возможность задавать права доступа: ● для собственно объектов метаданных, ● табличных частей, ● реквизитов объектов. 5.6.13. Быстрый выбор За способ выбора объектов при заполнении полей ввода отвечают свойства Способ выбора и Быстрый выбор. Свойство Быстрый выбор отвечает за режим выбора по умолчанию. Свойство доступно только в том случае, если свойство Способ выбора имеет значение Обоими способами. Покажем работу свойств Быстрый выбор на примере. Допустим, у нас есть справочник Склады. У него свойство Способ выбора равно Обоими способами, а также установлено свойство Быстрый выбор. В этом случае по умолчанию выбор из значений справочника Складыво всей конфигурации будет осуществляться в режиме быстрого выбора. Если отключить свойство Быстрый выбор, то выбор по умолчанию станет Из формы. Также имеется возможность явного переопределения режима выбора для реквизита объекта метаданных и/или элемента формы. Для этого достаточно изменить значение Авто свойства Быстрый выбор на значение Использовать – для разрешения быстрого выбора или Не использовать – для запрещения быстрого выбора. По умолчанию свойство Быстрый выбор реквизита объекта метаданных и элемента формы установлено в значение Авто. Таким образом, получается трехуровневая схема управления режимом выбора: 1. Вначале платформа анализирует свойство Быстрый выбор элемента формы. 2. Если свойство равно Авто, то оно анализируется у реквизита объекта. 3. В случае равенства Авто выполняется анализ свойств Способ выбора и Быстрый выбор прикладного объекта, соответствующего типу реквизита. Если на каком-то из первых двух уровней (элемент формы и реквизит объекта) значение свойства Быстрый выбор отлично от Авто, анализ прекращается и выполняется выбор в определенном режиме. ПРИМЕЧАНИЕ. Если свойство Способ выбора прикладного объекта равно Из формы или Быстрый выбор (но только не Обоими способами), то установка свойств Быстрый выбор реквизита и элемента формы никак не влияет на способ выбора. 5.6.14. Связи параметров выбора Связи параметров выбора – данное свойство позволяет указать список реквизитов, которые будут поставлять значения, используемые при выборе значения реквизита, при открытии формы выбора, при отображении списка быстрого выбора и при выполнении ввода по строке. В качестве примера можно привести выбор договора с контрагентом. Вначале осуществляется выбор контрагента, а затем выполняется выбор договора только из списка договоров выбранного контрагента. Причем отбор автоматически изменяется при смене контрагента. Для того чтобы ограничить выбор, реквизиту в свойстве Связи параметров выбора устанавливается соответствие имени реквизита, по которому будет выполняться фильтрация выбираемых значений, и реквизита, из которого будет браться значение фильтрации. Рис. 119. Связи параметров выбора Значения, указанные в данном свойстве, будут переданы в открываемую форму через структуру Параметры(см. здесь). При этом значение колонки Имя будет соответствовать ключу элемента структуры, а значение реквизита, указанное в колонке Реквизит, – значению элемента структуры. Если в колонке Имя указано значение вида Отбор.Владелец, то будет создан параметр формы Отбор(типа Структура). В этой структуре будет создан элемент с ключом Код и значением, полученным из реквизита, указанного в колонке Реквизит (в нашем примере – Поставщик). Если имя у какого-либо элемента свойства Связи параметров выбора совпадает с именем какого-либо элемента свойства Параметры выбора (см. здесь), то приоритет отдается элементу из свойства Связи параметров выбора в том случае, если значение поля, указанного в элементе Связи параметров выбора, переданное в функцию ЗначениеЗаполнено(), возвращает Истина. При этом элемент из свойства Параметры выбора игнорируется. Также в окне редактирования связей параметров выбора можно задать режим очистки поля при изменении полей связи. Если значение свойства Режим изменения связанного значения равно Очищать, то поле будет очищено при интерактивном изменении значения связи (изменением считается также повторный выбор значения, ранее находившегося в поле) до наступления события ПриИзменении. В противном случае (значение свойства равно Не изменять) поле не будет очищено. Очистка происходит вне зависимости от реального изменения значения в элементе связи и выполняется до вызова обработчика события ПриИзменении. Если поле отображает данные таблицы (колонка таблицы или отдельное поле, связанное с текущими данными), то очистка такого поля производится, если источником данных для таблицы формы является ДанныеФормаКоллекцияили ДанныеФормыСтруктураСКоллекцией. Если реквизит, который нужно очистить, связан с табличными данными, а реквизит связи не является табличными данными, то очищаются значения во всех строках таблицы, где расположен реквизит, для которого выполнена настройка связей параметров выбора. Реквизит не может быть очищен, если он связан с колонкой реквизита типа ДинамическийСписок. Для стандартного реквизита Родительподчиненного справочника возможна ситуация, когда свойство Связи параметров выбора будет изменено системой автоматически. Это изменение происходит в следующих случаях: ● когда у справочника изменяется состояние подчиненности; ● когда у справочника изменяется значение свойства Иерархический справочник. Это изменение происходит следующим образом: ● если справочник является подчиненным и иерархическим, то для реквизита Родительв свойство Связи параметров выбора добавляется параметр Имя: Отбор.Владелец – Реквизит: Владелец; ● в противном случае параметр Имя: Отбор.Владелец – Реквизит: Владелец удаляется из списка параметров свойства Связи параметров выбора стандартного реквизита Родитель. Рассмотрим пример: на форме есть поле Покупательи поле РасчетныйСчетПокупателя. Для поля РасчетныйСчетПокупателясвойство СвязиПараметровВыбораустановлено в значение Объект.Покупатель, которое будет устанавливаться в поле отбора Владелец. Рис. 120. Очистка связанных элементов формы Тогда при интерактивном изменении значения поля Покупательбудет происходить автоматическая очистка значения поля РасчетныйСчетПокупателя. 5.6.15. Параметры выбора Параметры выбора – данное свойство позволяет указать значения параметров, которые будут применяться при выборе значения реквизита. Параметры выбора будут выполняться при открытии формы выбора, при отображении списка быстрого выбора и при выполнении ввода по строке. Например, необходимо ограничить выбор только теми товарами, у которых реквизит Видравен значению Перечисление.ВидыТоваров.Услуга. Для конкретного значения отбора можно указать список значений. Для этого при редактировании колонки Значение следует выбрать тип Фиксированный массив. Рис. 121. Параметры выбора Значения, указанные в данном свойстве, будут переданы в открываемую форму через структуру Параметры. При этом значение колонки Имя будет соответствовать ключу элемента структуры, а колонка Значение – значению элемента структуры. Если в колонке Имя указано значение вида Отбор.Код, то будет создан параметр формы Отбор(типа Структура). В этой структуре будет создан элемент с ключом Код и значением Значение. Если имя у какого-либо параметра свойства Связи параметров выбора (см. здесь) совпадает с именем какоголибо параметра свойства Параметры выбора, то приоритет отдается элементу из свойства Связи параметров выбора (параметр из свойства Параметры выбора игнорируется). Приоритет будет отдан в том случае, если значение поля, указанного в параметре Реквизитсвойства Связи параметров выбора, является заполненным (функция ЗначениеЗаполнено()для этого значения возвращает значение Истина). ПРИМЕЧАНИЕ. Значения, указанные в свойстве реквизита Параметры выбора, также используются динамическим списком и системой компоновки данных. При выборе значения субконто в ячейке таблицы, связанной с набором записей регистра бухгалтерии, автоматически устанавливается параметр выбора для поля Владелец, только если данный вид субконто имеет тип справочника дополнительных значений субконто. Значением параметра выбора является соответствующий вид субконто. 5.6.16. Прочее Свойство Использовать стандартные команды определяет возможность включения стандартных команд (например, команды открытия списка справочника) этого объекта в командный интерфейс. Если свойство имеет значение Ложь, то стандартные команды не будут отображаться системой, и включить объект в интерфейс можно только с помощью команды, созданной в конфигураторе. Свойство Форма выбора устанавливает форму, которая будет применяться для выбора значения реквизита. Используется для реквизитов, тип которых образован объектом метаданных, имеющим понятие форма. Например, у справочника Товарыесть несколько форм выбора, при этом для стандартного реквизита Родитель необходимо использовать особую форму. Для реализации такого поведения нужно указать эту особую форму в свойстве Форма выбора стандартного реквизита Родитель(подробнее про стандартные реквизиты см. здесь). Формат – для типов Число, Булево, Датапозволяет задать формат, с помощью которого при выводе будут отображаться данные реквизита. Формат редактирования – свойство позволяет задать формат редактирования данных типов Число, Булево, Дата. Связь по типу – устанавливает связь с реквизитом, ограничивая тип вводимых значений для поля ввода. Настройка связи по типу имеет смысл для реквизитов с составным типом данных, логически связанных с другим реквизитом типа ПланВидовХарактеристик.Ссылка, в том числе для связи реквизита, содержащего субконто с реквизитом, который содержит значение типа Ссылка на план счетов. Элемент связи по типу содержит номер вида субконто для случая, если реквизит, с которым выбрана связь по типу, имеет значение типа Ссылка на план счетов. Например, есть два реквизита – ВидХарактеристикии Характеристика. У реквизита ВидХарактеристики– тип ПланВидовХарактеристикВидыХарактеристикТоваров.Ссылка; у реквизита Характеристика– тип Характеристика.ВидыХарактеристикТоваров. В свойствах реквизита Характеристикаможно установить свойство Связь по типу – ВидХарактеристики. Тогда тип выбираемого значения будет определяться типом, который задан для выбранного значения плана видов характеристик. 5.7. Константы В системе «1С:Предприятие» константы предназначены для хранения постоянной или условно-постоянной информации. Такая информация либо совсем не изменяется в процессе деятельности предприятия, либо изменяется достаточно редко. Наиболее простой пример подобной информации – название организации, которое, как правило, не меняется. Основная причина использования констант заключается в том, что в них один раз заносится какая-либо информация, которая затем может использоваться при формировании документов, в расчетах, при построении отчетных форм. Значение константы время от времени может редактироваться. Рассмотрим такой пример. Наиболее часто на документах предприятия встречается подпись директора и главного бухгалтера. Естественно, что эти должностные лица должны самостоятельно ставить подписи. Но помимо самой подписи в документах требуется ее расшифровка – фамилия подписавшего документ. Конечно, можно ввести фамилии директора и главного бухгалтера непосредственно в формы документов. Но если какаялибо из фамилий изменится, то придется вновь редактировать все бланки документов и исправлять фамилии. Поэтому гораздо удобнее создать в конфигурации две константы – для хранения фамилий директора и главного бухгалтера, ввести эти фамилии в константы один раз, а в многочисленных бланках документов использовать имена констант для получения их значений. При смене директора или главного бухгалтера достаточно внести изменения только в константы – ввести в них новые фамилии, и все изменения автоматически будут отражены в тех местах, где эти константы используются. ВНИМАНИЕ! При изменении значения константы прежнее значение теряется. Для получения прежних значений данных вместо константы нужно использовать регистр сведений без измерений. Конфигуратор системы «1С:Предприятие» позволяет создавать практически неограниченное количество констант для хранения любой нужной информации. 5.7.1. Свойства константы Для работы с константами предназначена ветвь Константы дерева конфигурации. Свойства константы редактируются в палитре свойств. Необходимо обратить внимание, что константа является типизированным объектом конфигурации. Тип – указывается тип константы. Тип константы может быть любым из стандартных типов конфигурации (Дата, Число, СправочникСсылка, ДокументСсылкаи т. д.) или составным (состоящим из набора различных типов). В зависимости от выбранного типа палитра свойств может содержать дополнительные свойства, уточняющие выбранный тип. Если форму редактирования константы необходимо показать в командном интерфейсе, то следует установить свойство Использовать стандартные команды. В этом случае команда открытия редактора константы будет отображена в тех подсистемах, к которым отнесена константа. Форма редактирования константы задается с помощью свойства Основная форма (подробнее см. здесь). Формы для ввода констант создаются в ветви Общие формы (см. здесь). 5.8. Справочники При заполнении бланка какого-либо документа часто требуется указывать информацию, выбирая значение из заранее заданного списка. Возьмем в качестве примера анкету, которую требуется заполнять при поступлении на работу. При заполнении графы Место рождения необходимо указать населенный пункт. Хотя общее количество населенных пунктов достаточно большое, список всех населенных пунктов все-таки ограничен. Фактически место рождения можно указать, выбрав из подобного списка нужный населенный пункт. Такой список и представляет собой справочник. Таким образом, можно сказать, что справочник является списком возможных значений того или иного реквизита документа (в широком смысле слова «документ»). Справочники используются в тех случаях, когда необходимо исключить неоднозначный ввод информации. Например, для того, чтобы покупатель, продавец, кладовщик, директор понимали, о каком товаре идет речь, каждый должен называть его одинаково. И в этом случае необходим справочник. Обычно в торговом предприятии он имеет вид прайс-листа, а если такой справочник хранится в компьютере, то в него заносят всю возможную номенклатуру товаров, с которыми работает торговая фирма. Система «1С:Предприятие» позволяет вести практически неограниченное количество необходимых справочников. Каждый справочник представляет собой список однородных экземпляров объектов: сотрудников, организаций, товаров и т. д. Каждый такой экземпляр объекта будем называть элементом справочника. Следует иметь в виду, что в конфигурации создается структура справочника, а собственно его содержимое – элементы справочника – вводится пользователем при работе с программой. В процессе конфигурирования описывается структура информации, которая будет храниться в справочнике, разрабатывается экранное и, если необходимо, печатное представление справочника, задаются различные особенности его «поведения». Как правило, справочники имеют предопределенные реквизиты код и наименование, при этом код может иметь тип Числоили Строка. Система «1С:Предприятие» предоставляет широкие возможности по работе с кодами элементов справочника: автоматическое присвоение кодов, автоматический контроль уникальности кода и другие. Справочник в системе «1С:Предприятие» может быть иерархическим. Существуют два вида иерархии: иерархия групп и элементов и иерархия элементов. В первом случае все данные справочника будут разделяться на два вида: «просто» элементы справочника и группы справочника. Группы – это логическое объединение элементов справочника. Примером иерархического справочника может служить справочник товаров, где группами являются виды товаров («Сантехника», «Бытовая химия» и т. д.), а элементами – конкретные товары («Смеситель», «Зеркало», «Стиральный порошок»). Использование иерархических справочников позволяет организовать ввод информации в справочник с нужной степенью детализации. Элементы и группы элементов в иерархическом справочнике можно переносить из одной группы в другую. Для справочников с видом иерархии Иерархия элементов группы как самостоятельный вид отсутствуют. Их роль выполняют сами элементы. Отличительной особенностью таких справочников является функциональность всех элементов. Примером справочника данного вида может служить справочник подразделений. Каждое подразделение описывается одинаковым набором реквизитов и при этом логически может содержать другое подразделение или входить в него. Для иерархических справочников конфигуратор позволяет установить ограничение числа уровней справочников, или допускается неограниченное число уровней вложенности. Помимо кода и наименования для справочника можно создать набор реквизитов, позволяющих хранить дополнительную информацию об элементе справочника. Например, справочник Контрагентыможет содержать такие сведения, как полное наименование контрагента, его ИНН, фамилии директора и главного бухгалтера и другую информацию. Если объект предметной области, которой соответствует справочник, имеет не только такие «простые» свойства, например, полное наименование или ИНН, но и составные (списочные) свойства, справочнику может быть создан набор табличных частей. Например, в справочнике Контрагентыможет быть создана табличная часть для списка телефонных номеров контрагента. Имена реквизитов справочника не должны совпадать ни с одним именем реквизита из какой-либо табличной части. Для работы с информацией, хранящейся в справочнике, можно создать экранные формы. Могут быть созданы отдельные формы для просмотра списка элементов справочника, для редактирования элемента справочника, формы для выбора из справочника нужного элемента. Конфигуратор позволяет создать несколько форм одного типа, например, формы для выбора из справочника нужного элемента, и использовать разные формы в разных случаях. Рекомендуется создавать разные формы для отображения списка элементов и для выбора элементов справочника. 5.8.1. Свойства справочника Для работы со справочниками предназначена ветвь Справочники дерева конфигурации. При создании нового справочника открывается окно редактирования объекта (см. здесь). Иерархический справочник – если свойство установлено, то справочник имеет иерархическую структуру и становится доступным свойство Вид иерархии и Ограничение количества уровней иерархии. Вид иерархии – определяется, какой вид иерархии используется в данном справочнике. При выборе вида Иерархия групп и элементов для справочника определяются два вида элементов: группы и элементы. Группы предназначены только для объединения других групп и элементов справочника. Обычно для описания группы достаточно кода, наименования и родителя (ссылка на верхний уровень). Элемент справочника помимо этих реквизитов может содержать другие реквизиты, указанные на закладке Данные. Для справочников с этим видом иерархии можно создать формы группы и формы элемента. При выборе вида Иерархия элементов все элементы справочника равнозначны. Примером справочников такого вида могут служить справочники подразделений и статьи затрат. Размещать группы сверху – свойство становится доступным, если выбрано значение Иерархия групп и элементов. Если свойство Размещать группы сверху установлено, то при отображении справочника в виде иерархического списка группы окажутся в верхних строчках списка, а элементы справочника будут располагаться ниже. Если это свойство не установлено, расположение групп и элементов будет подчиняться установленным правилам сортировки (по коду, наименованию и пр.). Например, при создании новой группы с кодом большим, чем у всех имеющихся групп и элементов (при сортировке по коду), в первом варианте эта подгруппа окажется нижней среди групп, но выше остальных элементов справочника; во втором варианте она займет самую нижнюю строчку. Следует отметить, что установка или снятие свойства Размещать группы сверху не влияет на показ справочника в виде неиерархического списка. Количество уровней иерархии – свойство становится доступным, если установлено свойство Ограничение количества уровней иерархии. Справочники в системе «1С:Предприятие» могут иметь более одного уровня вложенности. Если свойство Ограничение количества уровней иерархии не установлено, то максимальное количество уровней вложенности справочника неограниченно. Владельцы – это свойство требует подробного объяснения. Любой справочник может использоваться как сам по себе, так и быть подчиненным какому-либо другому справочнику или справочникам. Например, справочник договоров может использоваться отдельно, а может быть связан со справочником организаций. Чтобы подчинить справочник другому, уже существующему в системе, в поле Список владельцев справочника следует нажать кнопку редактирования и в открывшемся окне выбора объекта отметить те справочники, которые являются владельцами данного справочника. Каждый такой справочник в системе «1С:Предприятие» называется владельцем, а сам справочник – подчиненным. В отличие от многоуровневого справочника, в котором все элементы имеют одинаковую структуру, использование механизма подчиненных справочников позволяет связать элементы разной структуры. В этом случае каждый элемент подчиненного справочника будет логически связан с одним из элементов справочникавладельца. Для справочников, которые имеют нескольких владельцев, у разных элементов могут быть владельцы разного типа, но у одного элемента может быть только один владелец. Использование подчинения – позволяет управлять ограничением, накладываемым на владельцев. Могут использоваться только элементы, только группы или и группы, и элементы. Если у справочника несколько владельцев, то ограничение применяется ко всем владельцам. Длина кода – свойство устанавливает максимальную длину кода элемента справочника. Конфигуратор позволяет установить длину кода равной 0. Это может понадобиться в тех случаях, когда код элемента справочника не используется. При назначении этого свойства желательно реально определить возможную длину кода. Однако следует иметь в виду, что в процессе эксплуатации конфигурации, если потребуется, длину кода можно увеличить. ПРИМЕЧАНИЕ. Максимальная длина кода равна 50. Длина наименования – в свойстве устанавливается максимально возможная длина наименования элемента справочника. Конфигуратор позволяет установить длину наименования равной 0. Это означает, что у справочника не будет наименования. ПРИМЕЧАНИЕ. Максимальная длина наименования равна 150. Серии кодов – свойство позволяет установить диапазон проверки кода на уникальность и автоматическое присвоение кодов. Если выбрана установка Во всем справочнике, то при автоматическом присвоении кода или при вводе кода пользователем вручную его уникальность будет проверяться среди всех элементов справочника. Установка В пределах подчинения справедлива только для иерархических и подчиненных справочников. В этом случае уникальность кода будет проверяться системой только в пределах той группы и того элемента справочника-владельца, в которую вводится новый элемент справочника или редактируется уже существующий элемент. При установке серии кодов В пределах подчинения нормальной является ситуация, когда находящиеся в разных группах элементы справочника имеют одинаковые коды. Это следует учитывать, если требуется переносить элементы многоуровневого справочника из одной группы в другую. При совпадении кода переносимого элемента с кодом уже существующего элемента в группе будет выдано предупреждение, и элемент не будет перенесен. При установке серии кодов В пределах подчинения владельцу в иерархических подчиненных справочниках обеспечивается автоматическая нумерация и контроль уникальности кодов среди элементов с одинаковым владельцем, но различными родителями. Тип кода – свойство позволяет выбрать тип значения для кода элемента справочника: Числоили Строка. Выбор строкового типа кода бывает полезным, когда используется сложная система кодирования, и код может включать помимо цифр также буквы и символы-разделители. Наиболее характерный пример – использование в качестве кодов артикулов для швейных изделий. Следует обратить внимание, что выбор строкового типа кода не исключает возможности автоматического присвоения таких кодов. Для самого первого элемента система формирует код вида 001 (количество нулей зависит от установленной длины кода), то есть код представляет собой строку символов, но все символы в этой строке являются цифрами. При вводе других элементов в справочник система будет продолжать присваивать коды аналогичным образом – 002, 003 и т. д. Если требования к ведению справочника предполагают непременное использование смешанных буквенноцифровых кодов, то для целей автоматической нумерации можно использовать коды вида AA001. Здесь первая часть кода – символы АА – является текстовым префиксом, а вторая часть – символы 001 – будет интерпретироваться системой как число и использоваться при автоматическом присвоении очередного кода. Например, если самым первым кодом в справочник введен АА001, то следующим автоматически присвоенным кодом будет АА002, затем – АА003, и так далее по возрастанию. Текстовый префикс можно задать вручную (при вводе в справочник нового элемента ввести такой «составной» код) или использовать возможности установки префикса из встроенного языка системы «1С:Предприятие» (метод УстановитьНовыйКод()). Допустимая длина кода – доступно в том случае, если свойство Тип кода установлено в значение Строка. С помощью свойства можно регулировать, строка какой длины будет хранить код. Если значение свойства равно Фиксированная, то длина строки, содержащая код элемента справочника, всегда будет равна значению, указанному в свойстве Длина кода. В противном случае длина строки будет равна реальному количеству символов, формирующих код элемента. Реквизиты. Любой новый справочник можно представить в виде таблицы, которая имеет две колонки: код элемента справочника и его наименование. Система «1С:Предприятие» помимо кода и наименования позволяет хранить дополнительную информацию об элементе справочника. При редактировании справочника можно описать набор дополнительных реквизитов, предназначенных для хранения таких дополнительных сведений. При показе справочника на экране эти реквизиты могут представляться в виде колонок табличного поля формы списка справочника. Кроме этого, сведения, хранящиеся в реквизитах, можно использовать при формировании в различных расчетах, при формировании отчетов и так далее. Используя механизм реквизитов справочника, легко организовать, например, картотеку сотрудников. Для этого достаточно для справочника Сотрудникисоздать реквизиты для хранения сведений об образовании, паспортных данных и прочей кадровой информации. С помощью встроенных средств поиска в справочнике при использовании конфигурации нужная информация о сотруднике может быть легко найдена. Табличные части. Для описания некоторых данных, относящихся к справочнику и не используемых самостоятельно, используют табличные части. Примером табличной части может служить состав семьи сотрудника (данные по каждому члену семьи описываются в реквизитах табличной части, а число членов семьи может быть произвольным), послужной список сотрудника и т. д. Если бы в приведенном примере сведения по составу семей сотрудников могли использоваться самостоятельно, то их можно было бы выделить в отдельный справочник, подчиненный справочнику Сотрудники. Основное отличие табличной части от подчиненного справочника в том, что на элементы справочника можно ссылаться, а на строки табличной части – нет. При обращении к элементу справочника он весь, вместе со всеми табличными частями, считывается из базы данных в память. Если табличная часть содержит достаточно большое количество строк, это может ухудшить производительность системы. Поэтому табличную часть стоит использовать, если не нужно хранить ссылки на элементы и количество элементов ограничено. Каждый справочник может иметь неограниченное число табличных частей. Автонумерация. Установка свойства приводит к тому, что вновь введенному элементу в справочнике код будет присваиваться при записи. Автоматически присвоенный код можно исправить. Контроль уникальности. Если код используется для однозначной идентификации конкретного элемента в справочнике, он должен быть уникальным (не должен повторяться). Если свойство Контроль уникальности установлено, проверка кода на уникальность будет проводиться автоматически при вводе в справочник нового элемента. Основное представление – в свойстве задается представление элементов справочника. Например, значения типа СправочникСсылка, введенные в реквизит документа, справочника или константу, будут представляться в виде кода или наименования элемента справочника в зависимости от данного свойства. Для форм списков данная колонка становится колонкой по умолчанию. При открытии списка эта колонка становится активной. Ввод на основании. На закладке Ввод на основании указывается, какие объекты конфигурации могут являться основанием для объектов данного типа и для каких объектов объекты данного типа могут являться основанием. По кнопке Конструктор ввода на основании запускается конструктор создания процедуры ввода на основании. Подробнее о работе с конструктором см. здесь. Примером ввода на основании может служить ввод документа Передача на реализацию на основании элемента справочника Товары. 5.8.2. Свойства реквизитов справочника Помимо основных свойств реквизиты справочника имеют следующие свойства: ● Тип – указывается тип данных реквизита. ● Использование – для иерархических справочников определяет использование реквизита для групп и элементов. 5.8.3. Предопределенные элементы справочника Разработчик конфигурации может создать для справочников набор предопределенных элементов и групп элементов (для иерархических справочников). Эти элементы не могут быть удалены пользователями в режиме 1С:Предприятие. Форма для ввода предопределенных элементов открывается нажатием кнопки Предопределенные на закладке Прочие окна редактирования объекта конфигурации. В конфигураторе вводятся только основные свойства элемента (имя, код и наименование). Имя элемента можно использовать в выражениях встроенного языка. Значения других реквизитов предопределенного элемента вводятся в режиме 1С:Предприятие. Визуально предопределенные элементы справочников в режиме 1С:Предприятие отличаются от элементов, созданных пользователями, видом пиктограммы. ВНИМАНИЕ! Для справочника, имеющего владельца, нельзя создать предопределенные элементы. И наоборот, справочнику, имеющему предопределенные элементы, нельзя назначить владельца. 5.9. Документы Документ – одно из основных понятий системы «1С:Предприятие». При помощи документов организуется ввод в систему информации о совершаемых хозяйственных операциях. В большинстве своем документы, которые создаются в процессе настройки конфигурации задачи, являются электронными аналогами стандартных бумажных документов, однако использование этого типа данных может выходить далеко за рамки простой фиксации информации о хозяйственных операциях. Каждый документ содержит информацию о конкретной хозяйственной операции и характеризуется своим номером, датой и временем. Дата и время – наиболее важные характеристики документов, так как позволяют устанавливать строгую временную последовательность совершения операций. В конфигурации описывается только структура документа, конкретные экземпляры документов вводятся при работе с программой пользователем. Например, созданный в конфигурации документ Накладная при работе с системой «1С:Предприятие» позволит формировать накладные, которые будут иметь разное содержание, но одинаковый набор реквизитов, одинаковую логику поведения и так далее. Далее для простоты вместо термина «структура документа» будет использоваться термин «документ», подразумевая под этим средства для ввода и визуализации документа. Конфигуратор позволяет описать структуру документа, организовать формы для ввода информации в документ и описать алгоритм построения печатных форм документа. Помимо даты, времени и номера документа можно создать набор реквизитов, позволяющих хранить дополнительную информацию. Если объект предметной области, которой соответствует документ, имеет не только такие «простые» свойства, как, например, дату, номер и итоговую сумму, но и составные (списочные) свойства, документу может быть создан набор табличных частей. Например, в документе Расходная накладная может быть создана табличная часть для списка продаваемой номенклатуры. Для работы с документами в конфигурации может быть создано необходимое количество списков документов одного вида и журналов документов разного вида. Форма списка отличается от формы журнала в первую очередь тем, что в списке отсутствует колонка Вид документа (т. к. список содержит документы одного вида), а журнал обычно содержит эту колонку. При создании документа можно указать перечень журналов, в которых будет осуществляться работа с документами этого вида. Для документов разных видов можно указывать один журнал, что позволяет произвольным образом группировать документы в журналах. Назначенные документу журналы можно менять. Документы могут изменять состояние регистров учета (проводиться). Если документ проведен, то данные, которые указал пользователь при вводе документа, отразились в учетных регистрах системы – изменились остатки товаров на складах, изменилась задолженность перед контрагентом и т. д. Документы могут проводиться в реальном времени (оперативное проведение) и прошлой датой (неоперативной проведение). 5.9.1. Свойства документа Для работы с документами предназначена ветвь Документы дерева конфигурации. На этой же ветви располагаются служебные объекты конфигурации – нумераторы и последовательности. В этом разделе будут описаны специфические свойства документа в дополнение к общим свойствам объектов конфигурации, описание которых см. здесь. Свойства документа редактируются в палитре свойств или окне редактирования (см. здесь). Данные по документу в окне редактора распределены по закладкам. На закладке Основное размещены основные данные по документу. На закладке Данные вводятся реквизиты и табличные части. В палитре свойств каждому реквизиту помимо основных свойств указывают тип. Если требуется обеспечить быстрый поиск или отбор нужной информации по реквизитам документа, для реквизитов нужно установить свойство Индексировать (подробнее см. здесь). На закладке Нумерация объединены данные, которые используются для назначения правил нумерации документов. У любого документа существуют обязательные реквизиты, которые создаются автоматически и которые удалить нельзя, – это дата, время и номер документа. В отличие от даты и времени, для номера документа можно задать несколько параметров, которые будут управлять поведением этого реквизита при работе с документами создаваемого вида. Совокупность этих параметров будет определять правила нумерации документов при работе системы «1С:Предприятие». Автонумерация – установка свойства приводит к тому, что вновь введенному документу номер будет присваиваться автоматически. Автоматически присвоенный номер можно исправить. Нумератор – документу может быть назначен нумератор из числа уже существующих в конфигурации. Для назначения документу нумератора из числа существующих в конфигурации следует выбрать имя нумератора в свойстве Нумератор. В этом случае прочие элементы группы Нумерация документа окна, за исключением свойства Автонумерация, становятся недоступными, то есть правила нумерации документов данного вида будут полностью определяться назначенным нумератором. О создании и свойствах нумераторов см. здесь. Использование нумераторов позволяет организовать сквозную нумерацию документов разных видов. Для этого всем документам, для которых требуется иметь сквозную нумерацию, должен быть назначен один нумератор. Контроль уникальности и присвоение очередного номера будут выполняться с учетом всех документов, для которых назначен этот нумератор. Длина номера – устанавливает максимальную длину номера документа. Тип номера – свойство аналогично свойству Тип кода справочника (см. здесь). Допустимая длина номера – доступно в том случае, если свойство Тип номера установлено в значение Строка. С помощью свойства можно регулировать, строка какой длины будет хранить номер. Если значение свойства равно Фиксированная, то длина строки, содержащая номер документа, всегда будет равна значению, указанному в свойстве Длина номера. В противном случае длина строки будет равна реальному количеству символов, формирующих номер документа. Контроль уникальности – если это свойство установлено, то при вводе нового документа его номер проверяется на уникальность в пределах, установленных в свойстве Периодичность. Периодичность – свойство устанавливает пределы контроля уникальности номеров документов и период повторяемости номеров. Если свойство Контроль уникальности номеров документов установлено, то в свойстве Периодичность указывается, в каких пределах будет осуществляться этот контроль. При установленном свойстве Автонумерация система «1С:Предприятие» будет присваивать очередной порядковый номер каждому новому документу. После завершения периода, установленного в свойстве Периодичность, нумерация документов начнется с 1. На закладке Движения производится настройка поведения при проведении и отмене проведения документа. Проведение – свойство устанавливает, разрешено ли проведение документа при записи. Если выбрано Разрешить, то документ осуществляет движения регистров (изменяет их состояние). Другим следствием такого выбора будет автоматический вызов обработчика события ОбработкаПроведенияпроведения документа в режиме 1С:Предприятие, возникающего при нажатии кнопки формы документа, для которой при конфигурировании выбрано предопределенное действие Записать и закрыть (обычно кнопка ОК). Для формирования обработчика события ОбработкаПроведенияможно воспользоваться конструктором движения регистров (см. здесь), кнопка вызова которого расположена на закладке Движения окна редактирования объекта Документ. Оперативное проведение – свойство устанавливает, разрешено ли оперативное проведение документа. Для документов с разрешенным оперативным проведением при выборе не текущей даты проведение осуществляется в неоперативном режиме, т. к. учитывается уже свершившийся факт, который не требует контроля, осуществляемого в оперативном режиме (например, проверка остатка, указанного в расходной накладной товара). Если для документа разрешено Оперативное проведение, то при создании нового документа время документа «нулевое». При проведении система получает оперативную отметку времени, которая может совпадать с текущей датой и текущим временем, а может быть и больше, чем текущее время, и присваивает ее документу, после чего осуществляется оперативное проведение. Более подробно об оперативной отметке времени см. здесь. В случае редактирования документа с установленным свойством Оперативное проведение время уже отличается от текущего, поэтому при проведении (указана текущая дата) документа на экран выводится запрос о виде проведения. Если на вопрос о виде проведения выбрать Оперативное проведение, то для документа устанавливается текущее время. Если при редактировании изменить время (например, указать будущее время текущего дня), то система также установит текущее время. Если на вопрос о виде проведения выбрать Неоперативное проведение, то, когда формат даты не предусматривает ввода времени, в документе указывается время начала дня. Удаление движений – свойство доступно, если в свойстве Проведение выбрано Разрешить. Оно задает режим удаления всех записей при перепроведении или отмене проведения документа, которые документ записал в процессе проведения: ● Режим Удалять автоматически означает, что удаление производится системой при выполнении повторного проведения уже проведенного документа (перед записью новых движений) и при отмене проведения документа. ● Режим Не удалять автоматически означает, что удаление движений выполняется программно в специальных случаях. Этот режим используется, если нужно управлять удалением и при проведении, и при отмене проведения. ● Режим Удалять автоматически при отмене проведения означает, что система будет автоматически удалять движения только при отмене проведения. При перепроведении движения не будут удаляться автоматически. Этот режим устанавливается по умолчанию. Если свойство Удаление движений у документа установлено в значение Не удалять автоматически или Не удалять автоматически при отмене проведения, то для избежание дублирования информации, следует выполнять очистку наборов записей коллекции Движениявначале операции проведение. Запись движений при проведении – свойство определяет поведение системы при создании движений во время проведения документа: ● Режим Записывать выбранные (режим по умолчанию) означает, что набор записей коллекции движения будет записан только в том случае, если свойство набора Записыватьустановлено в значение Истина(вне зависимости от того, были модифицированы записи набора или нет). ● Режим Записывать модифицированные (устанавливается при конвертации из версий «1С:Предприятие 8.1» и более ранних) означает, что записаны будут те наборы записей, которые были модифицированы (для них система автоматически установит свойство Записыватьв значение Истина). По окончании записи документа система ставит всем наборам записей, регистрирующим движения документа, свойство Записыватьв исходное состояние, даже если запись завершилась неудачно. Заполнение последовательности – выбирается режим автоматического заполнения последовательностей. В окне редактирования на закладке Последовательности определяется вхождение документа в последовательности. В окне редактирования документа на закладке Журналы можно отметить те журналы документов, в которых при работе пользователя с системой «1С:Предприятие» будут отражаться документы данного вида. Необходимые формы журналов документов могут быть созданы потом. На закладке Ввод на основании размещено два списка объектов конфигурации. В верхнем списке необходимо указать объекты, на основании которых может вводиться документ, а в нижнем – для которых данный документ является основанием при вводе нового объекта. ВНИМАНИЕ! Документ может вводиться как на основании другого документа, так и на основании объектов другого вида (элементов справочника, плана видов характеристик, плана счетов и плана видов расчета). И наоборот, документ может являться основанием для ввода не только другого документа, но и объектов другого вида. Для создания процедуры, осуществляющей подготовку данных создаваемого объекта на основании образца, следует воспользоваться специальным конструктором, описание которого см. здесь. На закладке Права имеется возможность установки привилегированного режима при проведении (свойство Привилегированный режим при проведении) и/или при отмене проведения документа (свойство Привилегированный режим при отмене проведения): ● Если свойство установлено, то соответствующее действие (проведение или отмена проведения) система будет выполнять всегда в привилегированном режиме (при вызове проведения или отмены проведения на стороне сервера и в файловом варианте). Однако привилегированный режим не будет установлен, если проведение (или отмена проведения) документа выполняется в клиент-серверном варианте на стороне толстого клиента. В привилегированном режиме выполняется: ● Автоматическое удаление движений. ● Автоматическая запись движений. ● Соответствующий обработчик (ОбработкаПроведенияили ОбработкаУдаленияПроведения). Однако запись объекта выполняется в обычном (непривилегированном) режиме. ● Привилегированный режим включается системой после выполнения записи объекта перед началом проведения (перед удалением движений, если они удаляются автоматически). Аналогично и при отмене проведения. ● При создании новых документов свойства имеют значение Истина, если в свойствах конфигурации указан основной режим запуска – управляемое приложение, и Ложь, если основным режимом запуска указан обычный. 5.9.2. Механизм проведения документов Информация, отражающая хозяйственную деятельность предприятия, хранится в регистрах (см. здесь). Документы могут изменять состояние регистров. Этот процесс называется проведением. Данный механизм является рекомендуемым механизмом изменения состояния регистров. Проведение может выполняться в оперативном или неоперативном режиме (свойство Оперативное проведение). ПРИМЕЧАНИЕ. Как правило, механизм оперативного проведения используется для решения задач оперативного учета. 5.9.2.1. Оперативное и неоперативное проведение Механизм оперативного проведения предназначен для того, чтобы разделить случаи, когда документ проводится в реальном времени, и случаи, когда проведение документа отражает уже свершившийся факт. Проведение в реальном времени необходимо тогда, когда ввод и проведение документа не просто фиксируют в системе произошедшее событие, а участвуют в его формировании, помогая оператору правильно ввести информацию. Разумеется, это имеет смысл только в тот момент, когда данное событие происходит в реальной жизни. Классическим примером является ввод и проведение документа, отражающего продажу товаров со склада. При вводе такого документа в задачу оператора входит не только правильный ввод списка товаров, которые приобретает покупатель, но и выполнение различных проверок. Прежде всего, необходимо проверить, что запрашиваемый товар имеется на указанном складе. При этом очень важно, чтобы проверка учитывала тот факт, что одновременно с этим оператором работают и другие операторы, которые могут одновременно выписывать те же самые товары. Соответственно, задачей системы является не допустить продажу одного и того же товара двум покупателям. Кроме того, может потребоваться и проверка доступного покупателю размера кредита или наличие факта оплаты счета, а также другие самые разнообразные проверки. В то же время если документ вводится задним числом, то есть в момент его ввода известно, что такое событие уже произошло в жизни предприятия, например, конкретный товар уже отгружен клиенту, необходимость в таких проверках отпадает, и нужно просто отразить в учете произошедшее событие. В этом случае проведение документа только фиксирует событие, а не участвует в его формировании. Таким образом, задача механизма оперативного проведения заключается в разделении этих двух вариантов проведения и с точки зрения пользователя, чтобы он понимал, какой вид проведения выполняется, и с точки зрения алгоритма проведения документа, чтобы тот отработал действия, соответствующие текущему варианту проведения. Следовательно, оперативность или неоперативность проведения документа определяется по его дате. Если дата проводимого документа совпадает с текущей датой, то система будет проводить такой документ в оперативном режиме, не задавая вопросов, и в обработке проведения об этом можно узнать, чтобы выстроить определенный алгоритм проведения документа. 5.9.2.2. Расширение формы и проведение Кроме свойства документа Оперативное проведение существует возможность задания режима проведения у расширения формы документа. Свойство Использовать режим проведения может принимать следующие значения: ● Неоперативный – документ всегда будет проводиться в неоперативном режиме. Если отсутствуют права на неоперативное проведение, будет выдано исключение. ● Оперативный – документ всегда будет проводиться в оперативном режиме. Если отсутствуют права на неоперативное проведение, то будет выдано исключение при попытке провести документ прошлого периода. ● Запрашивать – система всегда будет запрашивать текущий режим проведения. ● Автоматически – в этом случае система работает по следующему алгоритму: ● если дата документа меньше текущей, выполняется неоперативное проведение; ● если дата документа равна текущей, выполняется оперативное проведение; ● если дата документа больше текущей, выдается исключение; ● если невозможно провести документ в выбранном режиме (не хватает прав доступа и т. д.), также будет выдано исключение; ● если на стороне клиента режим проведения неизвестен, то в параметр РежимПроведенияобработчика события ПередЗаписьюбудет передано значение Неопределено. Одной из задач оперативного проведения документов является размещение документов в хронологическом порядке на шкале времени. Такое размещение необходимо, в частности, для того, чтобы корректно списывались остатки по регистрам остатков (см. здесь) оперативного учета. Для размещения документов используются такие понятия, как момент времени и оперативная отметка времени. Рассмотрим эти понятия более подробно. Для определения положения документа на оси времени используется реквизит документа Дата, который содержит время с точностью до секунды. Это позволяет контролировать последовательность записи документов. Однако при большом объеме создаваемых документов вероятна ситуация, когда несколько документов будут иметь одинаковое значение даты (т. е. будут созданы в течение одной секунды). Как в этом случае определить последовательность созданных документов? 5.9.2.3. Момент времени Для обработки подобных ситуаций существует понятие момент времени. Момент времени представляет собой совокупность даты, времени и ссылки на объект базы данных. Он позволяет однозначно идентифицировать любой объект ссылочного типа базы данных на оси событий, но имеет смысл в основном только для документов. Кроме того, момент времени позволяет идентифицировать и необъектные данные, например, записи регистров, подчиненных регистратору. Понятие момента времени реализовано во встроенном языке при помощи универсального объекта МоментВремени. Для нескольких документов, имеющих одинаковую дату и время, последовательность их на оси событий определяется системой исходя из ссылок на эти документы. Она может не совпадать с последовательностью создания документов, и она недоступна для изменения пользователем, то есть нельзя каким-либо образом повлиять на последовательность документов внутри одной секунды или «вычислить», что один документ создан раньше, а другой – позже. 5.9.2.4. Оперативная отметка времени Оперативная отметка времени – это значение типа Дата. Оперативная отметка времени – это «основа», которая собственно и позволяет выполнять оперативное проведение документов. Оперативная отметка времени создается системой каждый раз при оперативном проведении документа. Ее значение формируется исходя из текущей даты сеанса и последней созданной оперативной отметки. 5.9.2.5. Поясное время При работе системы в различных часовых поясах необходимо учитывать эту особенность при получении оперативной отметки времени. Например, когда в единой информационной базе, физически расположенной в одном городе (часовом поясе), ведется учет нескольких удаленных предприятий (например, филиалы холдинга), которые расположены в других городах (и других часовых поясах). В этом случае необходимо, чтобы для каждого филиала выдавалась своя отметка времени. Для учета часовых поясов существует понятие часового пояса информационной базы и часового пояса сеанса. Часовой пояс информационной базы определяет часовой пояс, который по умолчанию будет установлен для нового сеанса. При создании информационной базы часовой пояс информационной базы не определен. Однако может быть установлен с помощью метода глобального контекста УстановитьЧасовойПоясИнформационнойБазы(). Информация о часовом поясе информационной базы сохраняется в базе данных и не меняется при операциях загрузки/выгрузки информационной базы. При создании начального образа информационной базы (с помощью механизмов распределенной информационной базы, см. здесь) в создаваемый образ переносится часовой пояс информационной базы, из которой создается образ. Если часовой пояс информационной базы не задан, то используется часовой пояс компьютера, на котором установлен сервер «1С:Предприятия» (в клиент-серверном варианте), или часовой пояс локального компьютера (в файловом варианте). Часовой пояс сеанса описывает тот часовой пояс, в котором работает конкретный сеанс. По умолчанию часовой пояс сеанса равен часовому поясу информационной базы. Часовой пояс сеанса может быть установлен с помощью метода глобального контекста УстановитьЧасовойПоясСеанса(). Часовой пояс сеанса сохраняется до конца сеанса. Используется для определения текущей даты сеанса и получения оперативной отметки времени. 5.9.2.6. Получение оперативной отметки времени В ходе оперативного проведения система изменяет время документа таким образом, чтобы очередной документ, проводимый в оперативном режиме, имел бы момент времени более поздний, чем у предыдущего оперативно проведенного документа. Для этого используется понятие оперативной отметки времени. Оперативная отметка получается системой автоматически при оперативном проведении, но может быть получена во встроенном языке в явном виде с помощью метода ПолучитьОперативнуюОтметкуВремени()на основании текущей даты сеанса. Текущая дата сеанса равна дате компьютера, приведенной к часовому поясу сеанса. Под приведением понимается пересчет местного времени компьютера в поясное время, заданное часовым поясом сеанса. Пересчет выполняется через универсальное координированное время (UTC). Все пользователи обращаются к единому механизму оперативной отметки времени, а механизм выдает каждому пользователю очередную отметку. Механизм получения оперативной отметки времени обеспечивает получение даты, большей, чем предыдущая отметка, полученная этим или другим пользователем в данном часовом поясе. В качестве оперативной отметки система, как правило, возвращает текущее время сеанса. Однако если текущее время больше или равно последней выданной какому-либо пользователю отметке, то возвращается значение на секунду большее, чем значение последней выданной отметки. Таким образом, обеспечивается получение при каждом обращении значения, по возможности соответствующего текущему времени, но в обязательном порядке большего, чем предыдущее полученное значение. Следует помнить, что различные сеансы с одинаковым часовым поясом будут использовать одно и то же время для получения оперативной отметки времени. Таким образом, будет существовать столько несвязанных оперативных отметок времени, сколько уникальных часовых поясов будет установлено в качестве часовых поясов сеансов. 5.9.3. Нумераторы Нумератор представляет собой объект конфигурации, описывающий правила нумерации документов: тип и длину номера документа, его периодичность, необходимость контроля уникальности. Основное назначение нумератора – обеспечить возможность сквозной нумерации документов разного вида. Для этого таким документам назначается одинаковый нумератор. 5.9.3.1. Управление списком нумераторов Для работы с объектами конфигурации типа Нумератор предназначена ветвь дерева конфигурации, которая расположена «внутри» ветви Документы и начинается у ключевого слова Нумераторы. 5.9.3.2. Свойства нумератора В этом разделе будут описаны специфические свойства нумераторов в дополнение к общим свойствам объектов конфигурации, описание которых см. здесь. Рис. 122. Свойства нумератора Тип номера – выбирается тип значения для номера документа – числовой или текстовый. Выбор текстового типа номера бывает полезным, когда используется сложная система нумерации документов, и номер документа может включать, помимо цифр, также буквы и символы-разделители. Длина номера – устанавливает максимальную длину номера документа. Периодичность – свойство устанавливает две важные характеристики нумератора: пределы контроля уникальности номеров документов и период повторяемости номеров. Если свойство Контроль уникальности номеров документов установлено, свойство Периодичность устанавливает, в каких пределах осуществлять этот контроль. Например, если установлена периодичность В пределах дня, то уникальность номеров документов будет контролироваться в пределах суток: на следующие сутки номера документов могут повторяться, но в пределах суток они будут уникальны. При установленном свойстве Автонумерация (см. здесь) система «1С:Предприятие» будет присваивать очередной порядковый номер каждому новому документу. После завершения периода, установленного в свойстве Периодичность, нумерация документов начнется с 1. Контроль уникальности – если это свойство установлено, то при вводе нового документа его номер проверяется на уникальность в пределах, установленных в свойстве Периодичность. 5.9.4. Последовательности документов Последовательности документов являются вспомогательными объектами конфигурации. Они предназначены для обеспечения проведения определенных документов в строгой хронологической последовательности. Все документы в системе «1С:Предприятие» образуют единую хронологическую последовательность. Для этого каждый документ имеет дату и время. Даже если два документа имеют одинаковую дату и одинаковое время, они все равно располагаются в определенной последовательности, определяемой моментом их ввода в систему. Дата и время документа могут быть изменены. Таким образом, независимо от порядка ввода документов они могут быть расположены в последовательности, отражающей реальную последовательность происходивших в хозяйственной жизни предприятия событий, которые данные документы отражают. В системе «1С:Предприятие» в процессе проведения документ выполняет некоторые действия, которые отражаются данным документом в различных механизмах учета, поддерживаемых «1С:Предприятием». Алгоритм проведения документа, как правило, отражает в учете данные, записанные в самом документе (в его реквизитах и табличных частях). Однако в некоторых случаях алгоритм проведения документа анализирует также и текущие итоги, используя их при проведении. Например, если документ списывает товары или материалы по средней себестоимости, то для определения суммы списания алгоритм проведения будет анализировать остатки товаров (материалов) на момент документа. Если списание выполняется по методам LIFO или FIFO, то алгоритм проведения будет анализировать существующие остатки товаров (материалов) в разрезе партий на момент позиции документа, определяемой датой и временем проведения документа. Очевидно, что документы, основывающиеся при проведении на данные итогов, должны проводиться строго последовательно. Однако на практике из-за ошибок при вводе информации и несвоевременного поступления документов часто приходится вводить или исправлять документы задним числом. Разумеется, в этом случае движения регистров, сформированные всеми последующими документами (расположенными после того, который был исправлен), становятся некорректными. Например, если выяснилось, что в одной из приходных накладных, введенных в начале месяца, было неверно указано количество товара, то во всех последующих расходных накладных, списывающих имеющиеся в наличии партии, необходимо заново проанализировать остатки с учетом внесенных изменений и заново записать движения регистров. То есть все документы, анализирующие остатки и расположенные после измененного документа, должны быть перепроведены. Для автоматического контроля необходимости перепроведения документов используются объекты ветви Последовательности. Каждый введенный в конфигурации объект Последовательность обеспечивает контроль за порядком проведения документов указанных видов. Таким образом, в системе может существовать несколько независимых последовательностей. 5.9.4.1. Управление списком последовательностей Работа по созданию объектов конфигурации типа Последовательность ведется в окне Конфигурация. Для последовательности отведена отдельная ветвь дерева конфигурации, которая расположена «внутри» ветви Документы и начинается у ключевого слова Последовательности. 5.9.4.2. Свойства последовательности документов В этом разделе будут описаны специфические свойства последовательностей документов в дополнение к общим свойствам объектов конфигурации, описание которых см. здесь. Свойства последовательности редактируются в окне редактирования Последовательность. На закладке Использование выбираются документы, которые относятся к данной последовательности, и движения, влияющие на последовательность. Рис. 123. Свойства последовательности Перемещение границы при проведении. Если для свойства указано значение Перемещать, то документ, зарегистрированный в этой последовательности, при своем проведении будет пытаться переместить границу этой последовательности документов. Если для свойства указано значение Не перемещать, то документ не будет перемещать границу этой последовательности документов при своем проведении. Документы, входящие в последовательность – в верхнем списке окна Последовательность указываются виды документов, которые относятся к данной последовательности. В качестве документов, на проведение которых будет влиять данная последовательность, следует выбрать те виды документов, которые при проведении будут анализировать состояние различных регистров. Например, такими документами могут быть расходные накладные, накладные на передачу, на реализацию и т. д. Движения, влияющие на последовательность – одно из основных свойств последовательности. Оно определяет, какие из движений будут влиять на необходимость перепроведения документов данной последовательности, то есть движения или итоги каких механизмов учета используются документами данной последовательности при проведении. Например, в качестве таких движений могут выступать движения регистров. Для настройки данного параметра следует добавить в список те виды регистров, движения которых будут нарушать данную последовательность. Измерения. Последовательности могут иметь подчиненные объекты, называемые измерениями, которые создаются на закладке Данные окна редактирования. Если для последовательности не создано ни одного измерения, то при восстановлении данной последовательности будут перепроводиться все входящие документы. Если требуется, чтобы данная последовательность учитывала не все, а вполне определенные ситуации, то в последовательность включают измерение. В этом случае перепроводить нужно будет только те документы, которые изменяют состояние регистра с учетом свойств измерения. Если изменяется состояние регистров, участвующих в последовательности, то неактуальными становятся более поздние документы с теми же значениями в реквизитах (перечислены в свойстве измерения Соответствие реквизитам документов), которые содержатся в реквизитах удаленных (добавленных) записей регистров (перечислены в свойстве измерения Соответствие реквизитам движений). Например, последовательность учитывает изменение состояния регистров по документам Приходная накладная и Расходная накладная. Если требуется учитывать дополнительные критерии необходимости перепроведения указанных документов (например, нужно перепроводить документы по определенному значению номенклатуры), то в последовательность следует добавить измерение. В палитре свойств измерения указать его тип (СправочникСсылка.Номенклатура) и установить связь с реквизитами регистров. Рис. 124. Свойства измерения последовательности В соответствии с выбранным типом измерения в списки документов и регистров измерения для выбора включаются только те объекты, в состав которых входят указанные типы измерения. Введение измерения позволяет сократить время перепроведения документов, что особенно важно при значительном числе документов, т. к. будут перепроводиться только те документы, которые содержат данные по указанному значению измерения. 5.9.4.3. Работа с последовательностями документов При работе в режиме 1С:Предприятие для каждой введенной в конфигурации последовательности документов система будет автоматически поддерживать границу последовательности. В качестве границы последовательности будет выступать позиция документа. При последовательном проведении документов, входящих в данную последовательность, граница последовательности будет устанавливаться на каждый вновь проведенный документ. Однако если будет проводиться документ, относящийся к данной последовательности, но расположенный позже другого проведенного документа, относящегося к той же последовательности и находящегося после текущей границы последовательности, то граница последовательности сдвигаться не будет, так как нарушается последовательность проведения документов. Эта ситуация может быть проанализирована алгоритмом проведения документа. При проведении документов задним числом, отмене проведения или удалении документов, если удаляются или записываются движения регистров, указанные как влияющие на данную последовательность, граница последовательности отодвигается на момент измененного документа. Перед перемещением границы назад производится проверка на наличие границ, которые необходимо переместить назад. Эта проверка производится без эксклюзивной блокировки границы. Таким образом, граница последовательности будет продвигаться вперед при последовательном проведении документов, относящихся к данной последовательности, и будет отодвигаться назад при изменении задним числом движений регистров, относящихся к данной последовательности. В режиме перепроведения документов (вызывается выбором пункта Все функции – Стандартные – Проведение документов) существует специальная возможность восстановления последовательности проведения документов. При ее использовании система автоматически выполняет перепроведение всех документов, относящихся к данной последовательности, от границы последовательности до указанного момента. В приведенном нами примере с учетом товаров проводимые расходные накладные будут сдвигать границу последовательности вперед. Любое изменение в движениях по регистру, на котором ведется стоимостный учет товаров, записанное раньше границы последовательности, будет отодвигать границу последовательности назад, на момент этого документа. После этого проводимые документы, находящиеся позже границы последовательности, уже не будут двигать ее вперед, если между границей последовательности и проводимым документом окажутся проведенные документы из этой последовательности. Режим восстановления последовательности будет перепроводить все расходные накладные. Заметим, что приходные накладные хотя и влияют своими движениями на границу последовательности, перепроводиться не будут, так как они не используют в алгоритме проведения остатков и не включены в список документов, относящихся к данной последовательности. После выполнения восстановления последовательности проводимые после границы последовательности документы снова будут двигать границу вперед. Режим восстановления последовательности позволяет автоматически выполнить перепроведение всех документов, относящихся к последовательности, от текущей позиции границы последовательности до указанного момента. В верхней части диалога следует выбрать позицию, до которой будет выполняться перепроведение документа. 5.9.5. Ввод документов на основании Одним из режимов ввода новых документов в процессе работы пользователя с системой «1С:Предприятие» является режим ввода на основании. С точки зрения пользователя режим ввода на основании позволяет вводить документы или элементы справочников, заполняя их реквизиты путем копирования информации из другого объекта информационной базы – документа или объекта другого вида. На закладке Ввод на основании можно выбрать объекты, которые могут являться основанием для выбранного вида документа (поле Вводится на основании), и те объекты, которые могут быть введены на основании данного вида документов (поле Является основанием для). Для реализации механизма ввода на основании необходимо реализовать в модуле документа обработчик события ОбработкаЗаполнения. Описание работы механизма заполнения см. здесь. Текст обработчика может быть доработан специалистом, осуществляющим конфигурирование системы. В тексте обработчика следует предусмотреть выполнение тех или иных операций по переносу информации в зависимости от вида документа-образца, а также любые другие необходимые действия. Конструктор ввода на основании (см. здесь) предназначен для облегчения создания этого обработчика. 5.10. Журналы документов В системе «1С:Предприятие» журналы документов являются объектами, позволяющими осуществлять работу с документами разных видов. Работая с формами журнала, пользователь может вводить документы, просматривать их, редактировать и удалять. Пользователь может искать любой документ в журнале по содержимому граф, выполнять поиск документов по их номерам, осуществлять отбор документов по различным признакам. Конфигуратор позволяет создавать любое необходимое число журналов. При создании журнала для него может быть создано произвольное число экранных форм, на которых располагаются табличные поля, содержащие колонки для отображения вида документа, номера, даты и времени, а также дополнительные графы для отображения значений любых других реквизитов документов из числа отображаемых в каждом журнале. Если ни одной формы журнала не создано, в режиме 1С:Предприятие автоматически создается форма журнала по умолчанию. 5.10.1. Создание журнала Для работы с журналами документов предназначена ветвь Журналы документов дерева конфигурации. В системе «1С:Предприятие» процессы создания журналов и размещения документов по конкретным журналам тесно связаны между собой. Указание отображения информации документа в определенном журнале синхронизировано с данными журнала о документах, информация о которых представлена в журнале. При создании и журнала, и документов в список журналов и документов автоматически будет добавлен созданный журнал или документ. Для отражения данных документа в журнале необходимо или в журнале, или в документе указать эту принадлежность. Указание принадлежности документа журналу можно производить как в журнале, так и в документе, т. к. эта операция синхронизирована. 5.10.2. Редактирование журнала В этом разделе будут описаны уникальные свойства журналов в дополнение к общим свойствам объектов конфигурации (см. здесь), и приемы редактирования объектов конфигурации типа Журнал, отличные от общих приемов редактирования объектов конфигурации. Редактирование свойств журнала (формирование списка дополнительных граф и определение их состава, форм журнала и макетов печатных форм и др.) выполняется в окне редактирования (см. здесь). На закладке Данные формируется список документов, входящих в журнал, и список граф журнала. В каждом подчиненном объекте, расположенном в ветви Графы, указывается реквизит всех документов, включаемый в журнал (см. здесь). 5.10.3. Графы журнала документов Когда в конфигурации создается новый журнал документов, для работы с ним может быть создано неограниченное число форм журнала. Форма журнала создается с помощью конструктора форм объектов конфигурации (см. здесь). Конструктор размещает в форме табличное поле, содержащее набор граф для показа различных реквизитов документов. При создании формы журнала конструктор формы создает графы: картинка (для показа состояния документа), вид, дата и номер документа. Если требуется включить в журнал дополнительную информацию, то необходимо сформировать список дополнительных граф и разместить их в формах. На закладке Данные окна редактирования располагается список документов, данные которых отображаются в журнале. Для создания дополнительной графы в нижнем списке нужно добавить подчиненный объект Графа и указать реквизиты документов, данные которых будут показываться в графе. Для выбора реквизитов документов, которые будут размещены в графе журнала, в палитре свойств графы, в свойстве Ссылки, нужно нажать кнопку выбора. На экран выводится окно выбора реквизитов документов. Рис. 125. Выбор реквизитов для графы ВНИМАНИЕ! Нельзя выбрать несколько реквизитов одного и того же документа. Если реквизит какого-либо документа не выбран, то в данной графе журнала документов будет отсутствовать информация по всем документам этого вида. При выборе следует руководствоваться исключительно здравым смыслом и не смешивать в одной графе абсолютно разные понятия (например, наименование контрагента и сумму документа). Помимо обязательных граф документов (Дата, Номер, Вид документа) и граф, указанных в подчиненной группе объектов журнала Графы, в журнал можно добавить любое количество дополнительных граф. Если все, входящие в состав журнала, документы со строковым типом номера имеют фиксированную длину номера, то графа журнала Номер также будет иметь фиксированную длину. Если хотя бы один документ, входящий в состав журнала, со строковым типом номера имеет переменную длину номера – графа журнала Номер создается с переменной длиной. Новая графа добавляется в список граф выбранного объекта Журналы, а затем с помощью пункта Форма – Вставить реквизиты производится вставка графы в форму. Наличие в журнале дополнительных граф дает возможность пользователю получить наиболее важные сведения о документе уже при просмотре журнала, не открывая сам документ. Для элемента формы, отображающего графу журнала, автоматически применяются следующие свойства реквизитов, входящих в состав графы: ● Режим пароля – если такой режим установлен хотя бы у одного реквизита, входящего в состав графы. ● Формат – при полном совпадении у всех реквизитов, входящих в состав графы, на всех языках, определенных в конфигурации. ● Подсказка – если подсказки совпадают для всех реквизитов, выводится одна подсказка; если подсказки не совпадают, они выводятся через запятую. ● Выделять отрицательные – если данное свойство установлено у всех реквизитов, входящих в состав графы. ● Многострочный режим – если данное свойство установлено у всех реквизитов, входящих в состав графы. 5.11. Перечисления Перечисление представляет собой служебный тип данных, который не используется самостоятельно, а применяется в основном в совокупности с другими типами данных. Определить перечисление можно как список возможных значений реквизита. Перечисления используются при вводе значений реквизитов документов, справочников, при вводе значений констант, в тех случаях, когда необходимо исключить неоднозначный ввод информации. Рассмотрим в качестве примера такое понятие, как «статус покупателя». В простейшем случае покупатели бывают розничные и оптовые. Со статусом покупателя обычно связывают уровень предоставляемых скидок с продажной цены товаров. Такой список «статусов» – розничный, оптовый – может служить примером простого перечисления. При выписке расходной накладной от пользователя системы требуется указать статус покупателя, выбрав его из этого списка. Выбранный статус покупателя, в свою очередь, определяет размер продажных цен. Если статус покупателя вводится в процессе настройки конфигурации задачи как перечисление, то специалист, выполняющий конфигурирование системы «1С:Предприятие», может заранее ввести варианты расчета продажных цен в зависимости от указанного статуса. Прежде всего, перечисление не может пополняться в процессе работы с ним: список его значений задается при настройке перечисления в конфигураторе. Перечисление не имеет вложенности – все его значения находятся на одном уровне. Основная особенность перечисления состоит в том, что список значений перечисления известен и доступен в конфигураторе – сама конфигурация использует конкретные значения перечисления. Использование перечисления позволяет ограничить число возможных вариантов, например, при вводе реквизита документа. Так как список значений перечисления создается в конфигурации, то можно организовать проверку выбранного значения и описать действия, которые должны за этим выбором последовать. Для работы с перечислениями предназначена ветвь Перечисления дерева конфигурации. Редактирование перечисления заключается в создании списка значений перечислений. Для редактирования перечисления используется окно редактирования объекта Перечисление. При создании нового перечисления свойство Использовать стандартные команды выключено. На закладке Данные производится формирование значений перечисления. Рис. 126. Добавление значения перечисления В палитре свойств указывается имя и синоним. Список значений перечисления в режиме 1С:Предприятие используется следующим образом: каждое значение перечисления представляется синонимом; если синоним не задан, то используется его имя. В приведенном на рис. 126 примере значение перечисления ВидыТоваровбудет представляться в виде Товар (по введенному синониму). На закладке Формы создаются формы списка и выбора. Это позволяет создавать различные формы для выбора (в зависимости от применяемого контекста). Формы списка позволяют распечатывать списки перечислений. При создании формы списка по умолчанию автоматически включается свойство Использовать стандартные команды. На закладке Макеты могут быть созданы макеты печати. 5.12. Отчеты и обработки Любая система автоматизации учета только тогда выполняет свои функции, когда она имеет средства обработки накопленной информации и получения сводных данных в удобном для просмотра и анализа виде. Как правило, для решения подобных задач в системе автоматизации учета существует возможность формирования отчетов. Конфигуратор позволяет формировать набор различных отчетов, достаточных для удовлетворения потребности пользователей системы в достоверной и подробной выходной информации. Для получения отчетной информации в системе «1С:Предприятие» используются объекты конфигурации, расположенные в ветви Отчеты дерева конфигурации. Каждый объект этого типа может содержать алгоритм формирования «бумажного» или «электронного» отчета на внутреннем языке системы «1С:Предприятие» или схему компоновки данных, на основании которой система «1С:Предприятие» может автоматически выполнить отчет (см. здесь). Отчет может содержать одну или несколько форм, с помощью которых, при необходимости, можно организовать ввод каких-либо параметров, влияющих на ход алгоритма. Для вывода результатов выполнения алгоритма на экран и принтер отчет может иметь созданные с помощью конструктора макетов описания печатных форм (макеты). Редактирование свойств объектов типа Отчет и Обработка и создание подчиненных объектов выполняются в окне редактирования (см. здесь). Для выполнения различных действий над информацией в системе «1С:Предприятие» используются объекты конфигурации, расположенные в ветви Обработки дерева конфигурации. Например, с их помощью можно выполнять удаление из системы устаревших данных, импорт информации из других систем и многое другое. Характер выполняемых в этом случае действий отражает название объекта конфигурации – Обработка, так как в результате информация, хранящаяся в системе, претерпевает какие-либо изменения. Обработка может содержать одну или несколько форм, с помощью которых, при необходимости, можно организовать ввод каких-либо параметров, влияющих на ход алгоритма. Вывод результатов выполнения алгоритма на экран и принтер осуществляется с помощью конструктора макетов описания печатных форм (макеты). Основное отличие отчета от обработки заключается в возможности использования схемы компоновки данных (подробнее см. здесь). В остальном обработка не отличается от отчета. Существует возможность для нескольких (или всех) отчетов прикладного решения использовать единые формы отчета, настроек или варианта отчета. Для этого необходимо использовать общие формы. В общем случае можно выделить следующие варианты использования: ● Для всех отчетов прикладного решения используется единый набор форм работы с отчетами. В этом случае нужно создать необходимые формы и указать их в свойствах конфигурации (см. здесь). Тогда в самих отчетах формы разрабатывать не нужно, т. к. будут использоваться общие формы. ● Можно выделить наборы отчетов, для каждого из которых необходимо разработать свои формы работы с отчетом. В этом случае создаются общие формы работы с отчетами, которые указываются для каждого отчета «своей» группы. Так можно сделать особый набор форм, например, для бухгалтерских отчетов или для отчетов аналитиков. ПРИМЕЧАНИЕ. Если у нескольких отчетов в качестве основной формы указана одна общая форма, то в толстом клиенте (в обычном режиме) одновременно можно будет открыть только один из этих отчетов. 5.12.1. Внешние отчеты и обработки Внешним отчетом в системе «1С:Предприятие» называется отчет, хранящийся вне конфигурации, в отдельном файле внешнего отчета. Внешний отчет служит для решения тех же задач, что и объекты конфигурации типа Отчет. Внешней обработкой в системе «1С:Предприятие» называется обработка, хранящаяся вне конфигурации, в отдельном файле внешней обработки. Внешняя обработка служит для решения тех же задач, что и объекты конфигурации типа Отчет или Обработка. Основное назначение внешнего отчета (обработки) заключается в возможности реализовывать, поставлять и обновлять некоторые возможности отдельно от конфигурации. Внешние отчеты и обработки хранятся в файлах, имеющих расширение .erf и .epf соответственно. Имеется возможность разработки и отладки в процессе работы системы «1С:Предприятие». В этом случае разработка и отладка обработки (отчета) значительно ускоряются: редактирование и сохранение внешней обработки (отчета) выполняются в режиме Конфигуратор, без сохранения конфигурации в целом, а запуск – в режиме 1С:Предприятие. Для выполнения внешняя обработка (отчет) загружается при помощи пункта Файл – Открыть и работает так же, как и любая другая обработка (отчет) конфигурации. ПРИМЕЧАНИЕ. Внешний отчет или обработка, открываемые с помощью меню Файл – Открыть, будут исполняться в безопасном режиме (см. здесь), если у пользователя отсутствуют административные права доступа. Любой объект конфигурации типа Отчет или Обработка может быть сохранен в файл внешней обработки (отчета), и наоборот – существующий объект конфигурации может быть заменен внешней обработкой (отчетом). Для внешней обработки (отчета) может быть создана справочная информация, как и для других объектов конфигурации. СОВЕТ. Для обеспечения целостности конфигурации внешние обработки (отчеты) рекомендуется использовать в основном в отладочных целях. После отладки алгоритма формирования обработки (отчета) необходимо включить внешнюю обработку в конфигурацию. 5.12.1.1. Создание внешней обработки (отчета) Для создания внешней обработки (отчета) необходимо выбрать пункт Файл – Новый и в выданном на экран запросе выбрать строку Внешняя обработка или Внешний отчет. Рис. 127. Выбор вида документа На экран будет вызван редактор форм для разработки внешней обработки (отчета). Для внешнего отчета окно редактирования будет дополнительно содержать управляющие элементы для создания, настройки и редактирования системы компоновки данных. Так как внешняя обработка (отчет) не является частью текущей конфигурации (хотя и очень тесно с ней связана), процедура ее сохранения отличается от процедуры сохранения изменений конфигурации (см. здесь). Для сохранения внешней обработки (отчета) необходимо использовать пункт Файл – Сохранить, или Файл – Сохранить как..., или Файл – Сохранить копию. В стандартном диалоге сохранения файла нужно выбрать тип файла Внешняя обработка (*.epf) (Внешний отчет (*.erf)) и ввести имя для сохраняемой внешней обработки (отчета). 5.12.1.2. Использование внешних обработок (отчетов) Для использования внешней обработки (отчета) при работе с системой «1С:Предприятие» ее необходимо открыть так же, как это делается в конфигураторе. Однако следует иметь в виду, что в системе «1С:Предприятие» внешняя обработка (отчет) открывается только для исполнения: пользователь не может его редактировать. При попытке открытия проверяются соответствующие права доступа и происходит установка безопасного режима (если у пользователя нет административных прав). Компиляция модуля внешней обработки (отчета) выполняется при открытии внешней обработки (отчета), поэтому после редактирования внешней обработки (отчета) в конфигураторе и ее сохранения необходимо вновь открыть эту обработку в режиме 1С:Предприятие. Кроме того, работа с внешними обработками (отчетами) возможна также на сервере «1С:Предприятия». При этом сохраняются все ограничения на использование интерактивных объектов (форм и т. д.). Для того чтобы использовать внешнюю обработку (отчет) программно, необходимо вначале подключить ее с помощью метода Подключить()(доступен только на сервере «1С:Предприятия»). // На клиенте размещаем обработку во временном хранилище АдресХранилища = ""; Результат = ПоместитьФайл(АдресХранилища, "ВнешОбработка.epf", , Ложь);... // На сервере подключаем обработку из созданного ранее // временного хранилища. ИмяОбработки = ВнешниеОбработки.Подключить(АдресВременногоХранилища); В переменную ИмяОбработкибудет помещено имя внешней обработки, с помощью которого в дальнейшем будет происходить обращение к подключенной внешней обработке, например, открытие формы обработки: // Откроем форму подключенной внешней обработки ОткрытьФорму("ВнешняяОбработка."+ ИмяОбработки +".Форма"); Для программной работы внешняя обработка (отчет) может быть расположена: ● в файле, который расположен в конфигурации (например, в макете); ● в данных информационной базы; ● во временном хранилище (см. здесь). Имена внешних обработок (отчетов) должны быть уникальны в пределах сеанса. Если осуществляется подключение (программное или интерактивное) внешней обработки (отчета) с именем, повторяющим имя уже загруженной в данном сеансе внешней обработки (отчета), то будет произведено отключение старой обработки и подключение новой. ПРИМЕЧАНИЕ. При работе внешних обработок (отчетов) в толстом клиенте следует учитывать, что при работе в режиме управляемого приложения возможно открытие только управляемых форм, при работе в обычном режиме – только обычных форм. При использовании внешних обработок (отчетов) нужно иметь в виду следующие особенности: ● если подключена новая обработка (отчет) с таким же именем, как и подключенная обработка (отчет), то открытые формы от «старой» обработки (отчета) перестают работать (генерируется ошибка); ● при подключении внешней обработки (отчета), если подключаемая обработка (отчет) двоично идентична уже подключенной и совпадает признак безопасного режима, реального переподключения не происходит, ошибки при этом не выдается. В противном случае ранее подключенная внешняя обработка (отчет) отключается и выполняется новое подключение внешней обработки (отчета); ● при выполнении метода Создать(), параметр метода БезопасныйРежимигнорируется, если ранее было выполнено подключение внешней обработки (отчета) с помощью метода Подключить(). Если подключение ранее не выполнялось, то будет выполнено подключение внешней обработки (отчета) с использованием параметра БезопасныйРежимиз метода Создать(); ● при получении формы для внешней обработки (отчета) будет найдена открытая форма независимо от того, открыта она для подключенной сейчас обработки или для той, которая была подключена ранее (с тем же именем); ● при открытии обработки (отчета) с помощью команды главного меню Файл – Открыть, форма обработки (отчета) открывается методом ОткрытьФорму()с параметром Уникальность, равным значению Истина, чтобы можно было открыть новую форму обработки в случае ее изменения. 5.12.1.3. Редактирование внешней обработки (отчета) Редактирование внешней обработки (отчета) выполняется в конфигураторе. Чтобы открыть существующую внешнюю обработку (отчет), следует выбрать пункт Файл – Открыть. В выданном на экран стандартном диалоге выбрать тип файла Внешняя обработка (*.epf) (Внешний отчет (*.erf)) и указать имя открываемого файла. При открытии внешней обработки (отчета) в конфигураторе автоматически открывается окно редактирования объекта. В отличие от других объектов конфигурации, отладка внешней обработки (отчета) может производиться без перезапуска системы «1С:Предприятие». Достаточно после сохранения обработки (отчета) конфигуратором заново вызвать ее на выполнение в режиме 1С:Предприятие. 5.12.1.4. Справочная информация Внешняя обработка (отчет) может быть снабжена пользовательским описанием. Для редактирования описания в палитре свойств внешней обработки нужно щелкнуть ссылку Открыть свойства Справочная информация. В режиме 1С:Предприятие для просмотра описания внешней обработки (отчета) необходимо нажать клавишу F1. 5.12.1.5. Внешние обработки (отчеты) и объекты конфигурации Существующие в конфигурации объекты типа Отчет и Обработка могут быть преобразованы во внешние отчеты и обработки, и наоборот, внешние отчеты и обработки могут заменять собой существующий объект конфигурации типа Отчет или Обработка. Также внешние отчеты и обработки могут быть добавлены в структуру конфигурации как новые объекты конфигурации типа Отчет или Обработка. 5.12.1.5.1. Копирование обработки (отчета) во внешнюю обработку (отчет) Существующий объект конфигурации типа Отчет или Обработка может быть скопирован во внешнюю обработку или отчет. Для этого нужно выделить наименование объекта конфигурации в окне Конфигурация и в контекстном меню объекта конфигурации выбрать пункт Сохранить как внешнюю обработку, отчет. Затем в выданном на экран стандартном диалоге сохранения файла выбрать тип файла Внешняя обработка (*.epf) (Внешний отчет (*.erf)) и указать имя файла внешней обработки (отчета). В результате будет создана внешняя обработка (отчет), которая будет скопирована с выбранного объекта конфигурации. Сам объект конфигурации при этом не изменится. Выполнение этой операции целесообразно для последующей отладки создаваемого отчета или обработки. По окончании отладки внешняя обработка или отчет может быть вставлена в конфигурацию взамен существующего объекта конфигурации. 5.12.1.5.2. Замена обработки (отчета) на внешнюю обработку (отчет) Внешние отчет или обработка могут заменить собой существующий объект конфигурации типа Отчет или Обработка. Для замены объекта конфигурации внешней обработкой (отчетом) необходимо выделить его наименование в окне Конфигурация и использовать пункт Заменить на внешнюю обработку, отчет контекстного меню объекта конфигурации. Затем в выданном на экран стандартном диалоге открытия файла выбрать тип файла Внешняя обработка (*.epf) (Внешний отчет (*.erf)) и указать имя файла внешней обработки (отчета). 5.12.1.5.3. Добавление внешней обработки (отчета) в структуру конфигурации Существующая внешняя обработка (отчет) может быть вставлена в структуру конфигурации как новый объект конфигурации типа Отчет или Обработка. Для этого необходимо в структуре конфигурации выделить наименование любого объекта конфигурации типа Отчет или Обработка и использовать пункт Вставить внешнюю обработку, отчет контекстного меню объекта конфигурации. В выданном на экран стандартном диалоге открытия файла необходимо выбрать тип файла Внешняя обработка (*.epf) (Внешний отчет (*.erf)) и указать имя файла внешней обработки (отчета), которую требуется вставить в структуру конфигурации. В результате этих действий в дереве конфигурации появится новая обработка (отчет). 5.12.1.6. Сравнение и объединение внешних обработок (отчетов) Внешние обработки (отчеты) можно сравнивать и объединять с обработками (отчетами), расположенными в конфигурации, а также сравнивать и объединять с другими внешними обработками (отчетами). Для сравнения и объединения с отчетом или обработкой конфигурации в окне Конфигурация следует указать нужный объект, в контекстном меню этого объекта выбрать пункт Сравнить, объединить с внешней обработкой, отчетом... В стандартном диалоге выбора файла выбрать нужную внешнюю обработку (отчет). На экран выводится окно Сравнение и объединение... Приемы работы в окне полностью совпадают с приемами работы при объединении конфигураций (см. здесь). Рис. 128. Объединение обработок Для сравнения или объединения внешней обработки (отчета) с другой внешней обработкой (отчетом) нужно открыть исходную внешнюю обработку (отчет), в окне редактирования нажать кнопку Действия и в выпадающем меню выбрать пункт Сравнить, объединить с внешней обработкой, отчетом. В стандартном диалоге выбора файла выбрать нужную внешнюю обработку (отчет). Описание дальнейших действий см. здесь. 5.13. Планы видов характеристик В системе «1С:Предприятие» объекты Планы видов характеристик предназначены для описания видов характеристик объектов аналитического учета. Примером использования объектов данного типа является описание характеристик товаров, контрагентов. Они используются для реализации аналитического учета по субконто (не по субсчетам) при создании плана счетов. Основной особенностью использования планов видов характеристик является то, что объекты данного типа не описывают напрямую конкретный товар или счет, а ссылаются на такое описание. Так, для управленческого учета часто требуется описать не только такие обязательные свойства номенклатуры, как наименование, цена, артикул, поставщик, но и другие – цвет, срок годности, размер, вес, вкус и т. д. Очевидно, что для разных видов товара будет разный набор характеристик (для обуви желательно указать размер, полноту, цвет, материал и другие особенности; но эти характеристики не нужны для описания компьютерной техники). В этом случае достаточно, чтобы в конфигурации на объектном уровне были созданы все необходимые схемы описаний, а для конкретной позиции номенклатуры был выбран нужный вид описания (вид характеристики). Конфигуратор системы «1С:Предприятие» позволяет организовать любое количество планов видов характеристик в соответствии с требованиями полноты аналитического учета на предприятии. С точки зрения основных приемов работа с объектами типа План видов характеристик очень схожа с работой над объектами типа Справочник. Объекты также могут образовывать иерархическую структуру, они имеют одинаковый состав подчиненных объектов, их создание и редактирование можно выполнять в форме элемента, в форме списка или обоими способами и т. д. Для объекта План видов характеристик разработчик конфигурации может создать набор предопределенных элементов. Эти элементы не могут быть удалены пользователями в режиме 1С:Предприятие. Настройка объектов План видов характеристик имеет некоторые особенности. Объект План видов характеристик имеет свойство Тип значения характеристик, которое позволяет определить набор возможных типов данных, используемых для видов характеристик. Выбор типа значения осуществляется на закладке Основные окна редактирования объекта. Обычно при указании типа используют составной тип данных. Это позволяет при вводе конкретной характеристики сразу указывать нужное значение. Так, например, для плана счетов при определении видов субконто используется объект плана видов характеристик ВидыХарактеристикТоваров, для которого тип значения характеристики определяется как составной (см. рис. 129). Рис. 129. План видов характеристик «Виды характеристик товаров» Так, в случае использования объектов План видов характеристик для описания структуры плана счетов бухгалтерского учета виды субконто будут выбираться из предопределенных видов характеристик. При создании конкретного счета указывают, какие виды субконто связаны с данным счетом. Рис. 130. Использование видов субконто Как видно из рисунка, счет 40 «Выпуск продукции (работ, услуг)» имеет два вида субконто – НоменклатурныеГруппыи ВидыСтоимости, которые выбираются из набора предопределенных видов характеристик, определенных в данном плане видов характеристик. Для ведения учета в разрезе характеристики, не имеющей описания (справочника) в конфигурации, используется свойство плана видов характеристик Дополнительные значения характеристик. Например, требуется вести учет в разрезе центров затрат, а соответствующего справочника в конфигурации нет. Тогда пользователь может создать собственный вид характеристики ЦентрЗатрати указать, что значениями данного вида характеристик будут элементы дополнительного справочника. Так как данный справочник подчинен плану видов характеристик, то при выборе будут выдаваться только элементы справочника, подчиненные данному виду характеристик. Таким образом, значения от разных видов не будут смешиваться. ВНИМАНИЕ! При выборе в свойстве Тип значения характеристик примитивных типов Число, Строкаили Датав диалоге редактирования типа данных следует указать размер или состав типа с таким расчетом, чтобы данное описание охватывало все возможные значения. Так, если дробная часть числовых типов не указана, нельзя будет ввести дробные числа. Изменение в описании числовых данных после ввода пользовательских значений может привести к потере этих данных. Для создания предопределенных элементов в окне редактирования объекта типа План видов характеристик на закладке Прочее нужно нажать кнопку Предопределенные. На экран выводится окно со списком предопределенных элементов. Рис. 131. Предопределенные элементы плана видов характеристик Работа со списком предопределенных характеристик выполняется с помощью пунктов меню Действия. Визуально в режиме 1С:Предприятие предопределенные элементы характеристик отличаются от элементов, созданных пользователями, видом пиктограммы. В режиме 1С:Предприятие для элементов характеристик, созданных пользователями, тип значения можно менять. Пример создания и использования плана видов характеристик Можно привести примерную структуру данных для реализации хранения характеристик (несущественные для данного примера поля таблиц мы опускаем). Справочник «Номенклатура» Наименование Телефон Vega 700 Телефон Vega 300 Копировальный аппарат Omega План видов характеристик «ВидыХарактеристикНоменклатуры» Наименование Вес Время работы Формат бумаги Основной поставщик Регистр сведений «ХарактеристикиНоменклатуры» Наименование (измерение) ВидХарактеристики (измерение) ЗначениеХарактеристики (ресурс) Ссылка: Телефон Vega 700 Ссылка: Вес 70 Ссылка: Телефон Vega 700 Ссылка: Время работы 120 Ссылка: Телефон Vega 300 Ссылка: Вес 50 Ссылка: Телефон Vega 300 Ссылка: Время работы 80 Ссылка: Копировальный аппарат Omega Ссылка: Вес 1300 Ссылка: Копировальный аппарат Omega Ссылка: Формат бумаги «А4» Ссылка: Копировальный аппарат Omega Ссылка: Основной поставщик Ссылка: Приборпоставка Справочник «Контрагенты» Наименование Ссылка: Приборпоставка Внесем в конфигурацию объекты метаданных (справочники, план видов характеристик и регистр сведений) с приведенной в таблицах структурой. При попытке реализовать в конфигурации приведенный пример встанет один существенный вопрос. Неизвестно, какой тип нужно выбрать для ресурса ЗначениеХарактеристикирегистра ХарактеристикиНоменклатуры. Действительно, характеристики имеют не только различный смысл, но и различные типы значений. Здесь и начинают играть свою роль специфические особенности плана видов характеристик. Отличием плана видов характеристик от справочника является возможность описания типов значений характеристик. В метаданных для плана видов характеристик задается свойство Тип, описывающее тип значений характеристик. Это свойство имеет тип ОписаниеТипови должно содержать все типы значений, которые могут принимать различные характеристики. Например, в данном случае для плана видов характеристик ВидыХарактеристикНоменклатуры можно указать типы: ● Строка, длина 20; ● Число, формат 15.2; ● СправочникСсылка.Контрагенты. Такой набор типов должен обеспечить хранение всех приведенных в примере значений характеристик. После того как мы задали в плане видов характеристик значение свойства Тип(тип значения характеристик), в перечне типов, доступных для выбора, появляется тип Характеристика.ВидыХарактеристикНоменклатуры. Теперь при выборе типа ресурса ЗначениеХарактеристикимы можем выбрать тип (Характеристика.ВидыХарактеристикНоменклатуры), который определен планом видов характеристик. Следует обратить внимание на то, что здесь необходимо выбрать не тип ПланВидовХарактеристикСсылка.ВидыХарактеристикНоменклатуры, а именно тип Характеристика.ВидыХарактеристикНоменклатуры. Фактически выбором типа Характеристика.ВидыХарактеристикНоменклатурымы определяем тип ресурса косвенно, то есть указываются не конкретные типы, а указывается, что состав типов должен определяться типами, выбранными в свойстве плана видов характеристик. Таким образом, создав план видов характеристик, мы определили возможность хранения в базе данных перечня видов характеристик товаров и определили область допустимых значений характеристик. Однако план видов характеристик позволяет не только описывать типы значений характеристик всех видов, но и хранить в базе данных типы значений каждого вида характеристик, ведь в метаданных мы задаем типы для значений всех возможных видов характеристик, а у характеристик конкретного вида могут быть значения определенных типов. Например, вес должен задаваться именно числовым значением. Для решения этой задачи в плане видов характеристик поддерживается поле ТипЗначения. Это поле имеет тип ОписаниеТипови предназначено для описания допустимых типов конкретных видов характеристик. Таким образом, в нашем примере данные плана видов характеристик будут иметь следующий вид: План видов характеристик «ВидыХарактеристикНоменклатуры» Наименование ТипЗначения Вес Число Время работы Число Формат бумаги Строка Основной поставщик СправочникСсылка.Контрагенты Мы описали все необходимые объекты для хранения характеристик. Однако следует учитывать, что измерения Номенклатураи ВидХарактеристикис точки зрения системы никак между собой не связаны, и при вводе значений характеристик система никак не будет учитывать выбранный вид характеристики, а будет просто предлагать заполнять поле с выбором из всех типов, описанных в плане вида характеристик. В описании структуры регистра сведений не задается информация о логической связи полей, в которых хранятся виды характеристик и значения характеристик. В реальных решениях такая логическая взаимосвязь может быть достаточно сложной. Вид характеристики может храниться в других объектах и определяться в конфигурации сложным алгоритмом, зависящим от особенностей предметной области. Поэтому реализация взаимосвязи между видом характеристики и значением характеристики выполняется разработчиком конфигурации. Таким образом, в нашем случае необходимо для ввода записи регистра сведений реализовать взаимосвязь между видом характеристики и значением характеристики. Для этого необходимо установить для ресурса ЗначениеХарактеристикисвойство Связь по типу в значение ВидХарактеристики. Теперь, если пользователь будет менять вид характеристики, а существующее значение не будет соответствовать допустимым для выбранного вида типам характеристики, значение характеристики будет очищаться. Для того чтобы попробовать приведенный пример, нужно внести еще небольшое изменение в конфигурацию. Для измерения Номенклатурарегистра ВидыХарактеристикНоменклатурынужно установить свойство Ведущее, чтобы данные характеристик удалялись при удалении товара и чтобы в панели навигации формы справочника появилась бы команда открытия регистра сведений. Теперь мы можем убедиться, что у нас реализован механизм хранения характеристик. Открыв элемент справочника Номенклатура, мы можем выбрать гиперссылку панели навигации Характеристики номенклатуры и начать вводить характеристики конкретного элемента номенклатуры. При этом можно будет по мере ввода характеристик создавать новые виды характеристик и указывать их тип. В реализованном решении есть существенный недостаток. Реализована возможность вводить характеристики примитивных типов, а также тех ссылочных типов, которые определены в конфигурации. В данном случае используется справочник контрагентов для ввода основного поставщика. Однако очевидно, что часть свойств должна выбираться из некоторого набора значений. С другой стороны, состав значений для разных свойств будет различный. Соответственно, значения таких свойств не получится выбирать из справочников, имеющихся в конфигурации. В нашем примере мы вводим формат бумаги в качестве строки. Конечно, правильнее выбирать значение данного свойства из перечня возможных форматов, но заводить в конфигурации справочники для всех видов характеристик невозможно, так как справочники создаются при разработке конфигурации, а новые виды характеристик будут вводиться при использовании прикладного решения. В плане видов характеристик предусмотрена возможность решения этой задачи. Для хранения значений перечисляемых характеристик, которые не могут быть выбраны из имеющихся в конфигурации справочников, перечислений и других ссылочных данных, используется подчиненный справочник. Создадим подчиненный справочник ЗначенияХарактеристики установим у него подчинение плану видов характеристик ВидыХарактеристикНоменклатуры. Далее нужно выбрать этот справочник в качестве значения свойства ДополнительныеЗначенияХарактеристикплана видов характеристик. Кроме того, необходимо добавить тип СправочникСсылка: ЗначенияХарактеристик в свойство Типплана видов характеристик. Теперь для плана видов характеристик установлено, что он для перечисляемых значений характеристик может использовать справочник ЗначенияХарактеристик. В примере изменим ТипЗначенияу вида характеристики Формат бумаги, выбрав в нем Справочник ссылка: Значения характеристик. При заполнении значения характеристики будет предложен выбор из списка справочника ограниченный владельцем – видом характеристики Формат бумаги. Структура данных полученного примера будет выглядеть следующим образом. Справочник «Номенклатура» Наименование Телефон Vega 700 Телефон Vega 300 Копировальный аппарат Omega План видов характеристик «ВидыХарактеристикНоменклатуры» Наименование ТипЗначения Вес Число Время работы Число Формат бумаги СправочникСсылка: ЗначенияХарактеристик Основной поставщик Справочник ссылка: Контрагенты Цвет корпуса СправочникСсылка: ЗначенияХарактеристик Регистр сведений «ХарактеристикиНоменклатуры» Наименование (измерение) ВидХарактеристики (измерение) ЗначениеХарактеристики (ресурс) Ссылка: Телефон Vega 700 Ссылка: Вес 70 Ссылка: Телефон Vega 700 Ссылка: Время работы 120 Ссылка: Телефон Vega 300 Ссылка: Вес 50 Ссылка: Телефон Vega 300 Ссылка: Время работы 80 Ссылка: Копировальный аппарат Omega Ссылка: Вес 1300 Ссылка: Копировальный аппарат Omega Ссылка: Формат бумаги Ссылка: А4 Ссылка: Копировальный аппарат Omega Ссылка: Основной поставщик Ссылка: Приборпоставка Справочник «Контрагенты» Наименование Приборпоставка Справочник «ЗначенияХарактеристик» Владелец Код Наименование Ссылка: Формат бумаги 1 А3 Ссылка: Формат бумаги 2 А4 Ссылка: Цвет корпуса 3 Белый Ссылка: Цвет корпуса 4 Серебристый План видов характеристик предоставляет возможность вводить виды характеристик в процессе работы с информационной базой. Однако существует возможность определить в конфигурации и предопределенные виды характеристик. В основном рекомендуется создавать такие виды не как виды характеристик по умолчанию, а как значения, используемые в логике работы самой конфигурации. Например, это может быть процент новогодней скидки. Если такая характеристика введена для товара, то алгоритм расчета цен может использовать ее при определении отпускной цены в предновогодний период. 5.14. Регистры Регистры «1С:Предприятия» предназначены для хранения и обработки различной информации, отражающей хозяйственную или организационную деятельность предприятия. Объекты информационной базы типа Документ и Справочник предназначены для хранения информации об объектах предметной области, таких как сотрудники, товары, материалы, валюты. Соответственно, каждый объект базы данных отражает соответствующий объект предметной области. В регистрах обычно хранится информация об изменении состояний объектов или другая информация, не отражающая непосредственно объекты предметной области. Например, в регистрах может храниться информация о курсах валют или информация о приходе и расходе товаров. Объект базы данных существует независимо от значений его реквизитов и имеет самостоятельную ценность. Например, у сотрудника может поменяться фамилия, номер паспорта и любые другие реквизиты. При этом он будет оставаться тем же самым физическим лицом. После удаления объект нельзя создать заново. Даже если завести все его реквизиты в соответствии с удаленным объектом, это будет уже другой объект. Для объекта система хранит внутренний идентификатор – ссылку. Ссылка уникальна в пределах всей информационной базы. Двух объектов с одинаковыми ссылками не может существовать на всем протяжении жизни информационной базы. Ссылки удаленных объектов не присваиваются вновь созданным объектам. Система предоставляет возможность хранить в полях базы данных ссылки на объекты базы данных. Единицей хранения информации в регистрах является запись. Прикладная нагрузка записи регистра определяется исключительно хранящимися в ней данными. Например, сама запись о курсе валюты не представляет собой ничего существенного. Она не соответствует никакому объекту в предметной области. Существенным является только то, что в ней содержится валюта, дата и курс валюты, установленный на эту дату. Можно удалить эту запись и внести такую же – это не повлияет на логику работы системы. Соответственно, у записей регистров не существует ссылок, и в полях базы данных нельзя хранить ссылки на записи регистров. В данной главе приведено описание регистров сведений и регистров накоплений. О регистрах бухгалтерии см. здесь, а о регистрах расчета см. здесь. 5.14.1. Регистры сведений В этом разделе будет рассказано о понятии «регистр сведений» и об основах использования этих регистров. 5.14.1.1. Общая информация о регистрах сведений Основная задача регистра сведений – хранить существенную для прикладной задачи информацию, состав которой развернут по определенной комбинации значений и при необходимости развернут во времени. Например, если мы хотим хранить информацию о ценах конкурентов на продаваемые нами товары, то собранная информация о ценах разворачивается по товарам и конкурентам. А если мы хотим отслеживать динамику изменений цен и будем заносить их периодически, то хранимая информация разворачивается также и во времени. В системе «1С:Предприятие» для хранения подобных данных и работы с ними используется специальный механизм – регистр сведений. Регистр сведений фактически представляет собой в общем случае многомерный массив данных, необходимый для реализации функции, которая может выдать нужную информацию по определенному набору аргументов. Аргументы функции называются измерениями, а результат функции – ресурсами. В приведенном выше примере двумерный регистр ЦеныКонкурентовбудет содержать измерения Конкуренти Товари ресурс Цена. Ресурсов может быть больше чем один: например, можно хранить оптовую и розничную цены. Помимо измерений и ресурсов для регистра сведений может быть создан набор реквизитов. Реквизиты позволяют включать в записи регистров различную дополнительную информацию. Реквизиты не влияют на значения ресурсов регистра и могут использоваться для анализа записей регистра. Регистры сведений, информация в которых развернута во времени, называются периодическими. Для периодических регистров сведений система поддерживает такие стандартные операции, как получение наиболее позднего или наиболее раннего значения (например, получение последней введенной цены по конкретному товару и конкретному конкуренту), а также получение среза наиболее поздних или ранних значений. Например, могут быть получены все последние введенные цены по различным товарам и конкурентам. Для разворота информации во времени используется поле Периодрегистра. Оно не вносится в качестве измерения, а добавляется системой автоматически при создании периодического регистра. Для регистров сведений можно не создавать измерений. В этом случае регистр будет представлять набор периодических данных. Такие регистры могут использоваться, например, для хранения фамилий различных должностных лиц, чьи подписи располагаются в документах. В процессе ведения хозяйственной деятельности документы создаются и подписываются должностными лицами, имеющими право подписи в определенный момент времени. здесь показывалось, как использовать значения констант для подобных целей. Недостатком данного приема в случае смены значения константы является то, что при открытии архивного документа будет указана новая фамилия ответственного лица, выбранная из константы. В таких случаях нужно использовать не константу, а периодический регистр сведений, который хранит данные об изменениях, а в документах используется выбор значений из регистра сведений по дате документа. Наиболее характерный пример одномерной периодической величины – курс валюты. При выполнении каких-либо расчетов (например, при определении рублевой цены пересчетом валютной цены по курсу) важно знать его величину на момент вычисления. Особенно важно знать курс валюты при выполнении каких-либо расчетов задним числом – в этом случае необходимо «вспоминать» курс за уже прошедшие даты. Чтобы иметь возможность получать подобные сведения, необходимо создать таблицу, графами в которой были бы, очевидно, наименование валюты, дата курса и сама величина курса. Строки такой таблицы содержат курс нескольких валют на конкретную дату. Дата Валюта Курс 31.10.2008 USD 26,5430 31.10.2008 EUR 35,0447 01.11.2008 USD 27,0981 01.11.2008 EUR 34,4092 02.11.2008 USD 27,0793 02.11.2008 EUR 34,4828 При обращении к подобной таблице следует иметь в виду, что в колонке Курсхранятся конкретные величины курса на определенную дату и подразумевается, что на все последующие даты, до новой величины курса, курс не меняется. Поэтому для получения курса на какую-то промежуточную дату следует брать величину курса на ближайшую предыдущую дату, на которую существует записанный курс. Также следует понимать, что различные значения валют в колонке Валютафактически означают, что ведется параллельная история курсов нескольких валют. Иначе говоря, приведенную выше таблицу можно отобразить по-другому. Дата Курс USD Курс EUR 31.10.2008 26,5430 35,0447 01.11.2008 27,0981 34,4092 02.11.2008 27,0793 34,4828 Подобных колонок курсов в таблице может быть столько, сколько курсов разных валют требуется хранить. Если регистр непериодический, то поле Периоддля него не создается. В приведенном примере регистр ЦеныКонкурентовможет быть непериодическим, если мы не хотим хранить историю изменения цен, а хотим иметь только актуальные цены. Тогда функция регистра сможет ответить на вопрос: «Какая сейчас цена у такого-то конкурента на такой-то товар», но не сможет ответить на вопрос: «Какая была цена у такого-то конкурента на такой-то товар в начале года». Из описанных принципов работы регистра сведений вытекает то, что в системе может быть только одна запись с определенным набором и периодом измерений. Действительно, по одному товару одного конкурента может быть только одна цена. Если по какой-либо причине мы можем получить несколько цен и хотим занести эту информацию в базу данных, то нам нужно создать еще одно измерение для хранения того значения, по которому эти цены могут различаться. Например, можно завести измерение ИсточникИнформации. Тогда можно будет вводить цены конкурентов в разрезе источников. Уникальность записей по набору измерений принципиально отличает регистры сведений от регистров накоплений, которые позволяют вводить несколько записей с одинаковым значением измерений и периодом. Если при работе с регистром получение данных на самый первый или самый последний (текущий) моменты времени являются наиболее частыми вариантами использования, то для таких регистров имеет смысл разрешить системе поддерживать итоги для среза последних (свойство Разрешить итоги: срез последних) или среза первых (свойство Разрешить итоги: срез первых). В качестве примера такого использования можно привести регистр с отпускными ценами на товары. Цена товара может меняться с течением времени, но получение текущей цены является наиболее распространенным запросом к этому регистру. Итоги регистра сведений будут использоваться в случае выполнения всех следующих условий: ● Для регистра разрешено использование итогов в конфигурации; ● Для регистра разрешено использование итогов в режиме «1С:Предприятие»; ● Получаются данные на самую первую дату (срез первых) или самую последнюю (текущую) дату (срез последних), без указания значения периода; ● Условия для виртуальных таблиц СрезПервыхи СрезПоследнихзадаются только на значения измерений и разделителей, находящихся в режиме Независимо и совместно; ● В ограничениях доступа к данным используются только измерения и разделителей, находящихся в режиме Независимо и совместно. Если все условия не выполняются, то для получения информации из регистра будет использоваться обычный запрос. 5.14.1.2. Записи регистра сведений Строки регистра сведений, содержащие информацию о значениях ресурсов для определенных значений измерений и конкретного периода, называются записями. Для идентификации записи регистра сведений служит ключ записи. Записи в регистр сведений можно вносить двумя способами: ● вручную, ● документами. Выбор режима внесения записей см. здесь. Эти два варианта влияют на способ внесения информации, а не на основную логику работы регистра. Документ, которым вносится запись в регистр сведений, называется регистратором. Регистры, записываемые независимо, могут свободно редактироваться вручную или средствами встроенного языка. При этом если измерение такого регистра назначено как «ведущее» и значением измерения является ссылка на объект базы данных, то будет считаться, что запись регистра имеет смысл, только пока существует этот объект. Например, если назначить ведущим измерение Конкурент, то считается, что запись имеет смысл только как информация по данному конкуренту. Соответственно, при удалении данных конкурента записи по нему будут удалены автоматически. Если регистр записывается регистратором, то это значит, что записи будут жестко подчинены регистраторам – документам. Обычно это значит, что записи будут порождаться при проведении документов. Соответственно, при удалении документа записи будут удаляться автоматически. В отличие от ведущих измерений, регистратор может быть только один. Следует помнить, что ключ записи регистра сведений, созданный с помощью метода ПустойКлюч(), не равен ключу записи регистра сведений, значения измерений которого равны значениям по умолчанию для «своих» типов. 5.14.1.3. Редактирование регистра сведений Для работы с регистрами сведений предназначена ветвь Регистры сведений дерева конфигурации. При редактировании регистра определяются его свойства, разрабатывается структура регистра: создаются наборы измерений, ресурсов и реквизитов регистра, создаются экранные формы просмотра и редактирования записей регистра и, если необходимо, печатные формы регистра (см. здесь). В этом разделе в дополнение к общим свойствам объектов конфигурации будут описаны уникальные свойства регистра сведений. Регистр редактируется в окне редактирования Регистр сведений. Свойства регистра собраны на закладках. Рис. 132. Редактор регистра сведений Периодичность – это свойство позволяет указать, с какой периодичностью регистр должен сохранять значения ресурсов. Это свойство напрямую влияет на возможность получения значений ресурсов регистра методами встроенного языка. Для непериодического регистра можно получить только последнее введенное значение ресурсов регистра – информация за предыдущие периоды в таком регистре отсутствует. Для периодических регистров нельзя получить значение с меньшей периодичностью, чем установленная периодичность регистра. Периодичность не зависит от способа редактирования регистра. Режим записи – свойство определяет, каким образом будут вноситься записи: независимо (например, вручную) или будут подчиняться регистратору (например, документами). Если для регистра указано, что он периодический и выбран независимый режим записи, то становится доступным свойство Основной отбор по периоду. Если флажок установлен, то наряду с основными измерениями и реквизитами регистра, участвующими в отборе записей при регистрации изменений, можно указывать отбор по полю Период. На закладке Данные формируется структура данных регистра. Создаются измерения и ресурсы, а также реквизиты. На закладке Регистраторы производится управление списком регистраторов. Закладка доступна, если в свойстве Режим записи установлено Подчинение регистратору. Рис. 133. Задание регистраторов регистра сведений В верхнем списке производится управление списком регистраторов (устанавливаются или снимаются отметки), а в нижнем списке приводится список отмеченных объектов, являющихся регистраторами. Аналогично описанному для регистров сведений механизму управления списком регистраторов производится управление списком регистраторов для других видов регистров. Особенностью ресурсов регистров сведений является широкая типизация данных, в отличие от регистров других типов, где ресурсы могут быть только числовыми. Описание приемов создания форм и макетов см. здесь. 5.14.1.4. Разработка структуры регистра сведений Разработка структуры регистра заключается в создании наборов измерений, ресурсов и реквизитов. Для управления списком измерений, ресурсов и реквизитов регистра и редактирования их свойств служат управляющие элементы групп Измерения, Ресурсы, Реквизиты окна редактирования Регистр. С точки зрения настройки элементы этих групп одинаковы. Описание порядка использования этих управляющих элементов см. здесь. 5.14.1.4.1. Свойства измерения (ресурса, реквизита) регистра сведений Свойства измерений, ресурсов и реквизитов редактируются при помощи палитры свойств. В основном они совпадают с общими свойствами объектов конфигурации. Ниже в этом разделе будут описаны уникальные свойства измерений, ресурсов и реквизитов. Ведущее – установка этого свойства имеет смысл для измерений, тип данных которых – ссылка на объект конфигурации. В этом случае считается, что запись регистра сведений имеет смысл, только пока существует этот объект. При удалении объекта записи по нему будут автоматически удалены из регистра. Запрет пустых значений – установка этого флажка включает механизм запрета записи регистра с пустым значением измерения. Индексировать – для измерений свойство доступно для редактирования, если измерение не является ведущим. Для измерений, ресурсов и реквизитов с установленным свойством Индексировать создается отдельный индекс, что увеличивает производительность при работе с регистром. Для ведущих измерений индекс создается всегда. При просмотре регистра в режиме 1С:Предприятие существует возможность сортировать записи регистра по индексированным измерениям, ресурсам и реквизитам. Необходимое число форм для просмотра и редактирования регистра должно быть создано в процессе разработки конфигурации. 5.14.1.4.2. Упорядочивание списка измерений регистра сведений Порядок расстановки измерений регистра сведений имеет важное значение. Измерения, к которым необходим быстрый доступ, следует располагать в начале списка измерений. Последовательность расстановки измерений регистра сведений влияет на возможность применения методов встроенного языка, использующих позиционный доступ к измерениям. Также необходимо иметь в виду, что изменение порядка измерений требует реструктуризации информационной базы. 5.14.2. Регистры накопления Регистры в системе «1С:Предприятие» используются для накопления информации о наличии и движении какихлибо величин – материальных, денежных и других. Вся информация о хозяйственных операциях, которая вводится с использованием документов или формируется при помощи расчетов, должна быть накоплена в регистрах. Тогда эту информацию можно будет извлечь, проанализировать и представить пользователю в виде отчетных форм. В этом разделе будет рассказано о понятии регистр накопления и даны сведения об основах использования. 5.14.2.1. Общая информация о регистрах накопления Регистр накопления – это объект конфигурации, предназначенный для хранения движений регистра и итоговой информации. Проблема, которая обычно возникает при создании «хранилища» сводной информации, состоит в определении его структуры: в каких разрезах следует накапливать сводные данные, чтобы затем можно было извлечь нужную информацию без утомительной обработки. Система «1С:Предприятие» использует простые и в то же время гибкие средства для создания регистров накопления: достаточно просто задать, в каких разрезах и какие данные требуется хранить в регистре, а система сама обеспечит запись и получение нужных данных простыми языковыми средствами. Методы встроенного языка позволяют получить остатки регистра накопления на заданный момент времени. Есть возможность фильтрации по значениям измерений, а также получения остатков в разрезе других измерений. Рассмотрим пример. Предположим, что в создаваемой программе торгово-складского учета требуется хранить сведения о количестве и стоимости каждого товара на каждом складе. В дальнейшем предполагается получать информацию такого типа: «остаток конкретного товара на конкретном складе», «остаток конкретного товара всего, на всех складах», «стоимость всех товаров на конкретном складе». В идеологии системы «1С:Предприятие» регистр накопления такого вида представляет собой прямоугольную систему координат, на одной оси которой находятся склады, на другой – товары, а на пересечении конкретного склада и конкретного товара находятся цифры количества товара и стоимости товара. Рис. 134. Регистр накопления Физический смысл регистра накопления сформулировать довольно сложно, и, скорее всего, регистр накопления не имеет материального аналога. ВНИМАНИЕ! Поэтому определим, что регистр накопления – это n-мерная система координат, в узлах которой хранятся совокупные данные. Оси такой системы координат будем называть измерениями регистра, а хранящиеся в узлах данные – ресурсами регистра. 5.14.2.2. Движения регистра накопления Изменение состояния регистров накопления выполняется обычно при проведении документа. Процедура проведения документа расположена в модуле документа и содержит алгоритм формирования сведений об изменениях в регистрах, которые необходимо выполнить при проведении документа. Эти сведения называются движениями регистра. Механизм подсчета итогов использует движения регистров для выполнения непосредственных изменений в регистрах накопления. Таким образом, движения регистров содержат только приращения (со знаком плюс или минус) значений ресурсов регистра, а не итоговые величины значений. Специалист, выполняющий конфигурирование системы, имеет возможность предоставить конечному пользователю средства просмотра движений регистров. Конфигуратор позволяет создавать экранные и печатные формы для просмотра и анализа движений регистров. В процессе разработки конфигурации можно создать неограниченное количество регистров накопления. Однако следует учитывать, что запись изменений в большом числе регистров при проведении документа может вызывать уменьшение скорости работы системы в целом. Помимо измерений и ресурсов для регистра накопления может быть создан набор реквизитов. Реквизиты позволяют включать в движения регистров различную дополнительную информацию. Реквизиты не влияют на значения ресурсов регистра и могут использоваться для анализа движений регистра. 5.14.2.3. Итоги регистра накопления Как было написано выше, изменения в регистрах вносятся движениями регистра. Движения регистров оказывают влияние на его итоги. Итоги – это сводная информация регистров, которая получается путем суммирования значений, вносимых движениями регистров. Итоги регистра накопления можно представить в виде таблицы с количеством колонок, равным сумме измерений и ресурсов регистра накопления. Количество строк таблицы будет зависеть от количества различных значений измерения и ресурсов. Товар Склад Количество Сумма Стол Розничный 10 5 000 Стол Оптовый 5 2 500 Шкаф Временный 7 10 500 Шкаф Оптовый 2 3 000 Шкаф Розничный 10 15 000 Из таблицы видно, что измерение Товарпринимает значения Стол, Шкаф, а измерение Склад– Временный, Оптовый и Розничный. В колонках Количествои Сумма, отражающих ресурсы регистра накопления, записано количество и сумма каждого товара на каждом складе. В отличие от движений регистра, нет возможности непосредственно просматривать итоги регистра накопления. Для обращения к итогам в конфигурации может быть создано необходимое число отчетов, которые будут обращаться к итогам и выдавать их в виде товарных отчетов, складских карточек и ведомостей и т. д. 5.14.2.4. Регистры остатков и регистры оборотов В системе «1С:Предприятие» возможно использование регистров накопления двух типов: регистры остатков и регистры оборотов. Для регистра остатков методы встроенного языка позволяют получить остатки регистра накопления на заданный момент времени. Есть возможность фильтрации по значениям измерений, а также получения остатков в разрезе других измерений. Регистры оборотов предназначены для хранения информации, для которой понятие остатка лишено смысла, например, сумм продаж в разрезе покупателей. Рассмотрим в качестве примера отслеживание взаиморасчетов с покупателями товаров, которые производит или продает предприятие (потребителями услуг, оказываемых предприятием, и так далее). Можно утверждать, что ведение подобного учета – обязательная часть общего учета на любом предприятии. Для того чтобы оперативно получать информацию о взаимной задолженности предприятия и покупателя, потребуется регистр Взаиморасчеты, в котором для каждого покупателя будет храниться сумма задолженности. При совершении хозяйственной операции состояние регистра будет соответствующим образом изменяться, каждый раз отражая текущее состояние взаиморасчетов. Регистр Взаиморасчеты – это регистр остатков. Однако быстро получить информацию об объеме закупок, совершенных данным покупателем за какой-либо период времени, из регистра Взаиморасчеты нельзя – он такой информации не хранит. Поэтому придется приложить дополнительные усилия для ее получения: например, можно включить в структуру регистра реквизит Контрагент, а затем отобрать движения регистра по нужному контрагенту и вычислить общую сумму закупок. Но когда необходимо получать эти сведения оперативно (например, при достижении определенного объема закупок покупателю должна предоставляться скидка), такой способ, конечно же, не подходит. В этом случае решением проблемы может быть использование регистра оборотов. В таком регистре – назовем его Объем закупок – для каждого покупателя будет храниться информация об объеме закупок (об обороте покупателя). Теперь при совершении хозяйственных операций необходимо будет изменять не только состояние регистра Взаиморасчеты, но и регистр Объем закупок. В этот регистр при совершении клиентом каждой покупки будет заноситься информация о сумме покупки. В результате в регистре Объем закупок будет постоянно накапливаться информация об общем объеме закупок клиента. Из всего сказанного выше можно сделать выводы о преимуществах использования регистров. Прежде всего, регистры используются для хранения информации, к которой требуется получать оперативный доступ. «Уровень оперативности» и, соответственно, целесообразность использования регистра должен определять специалист, выполняющий конфигурирование системы «1С:Предприятие», в соответствии с требованиями пользователей системы. Также можно сказать, что регистры позволяют получать наиболее достоверную информацию о состоянии средств. Так как процессы сохранения документа и записи изменений в регистрах разделены (допускается сохранение документа без его проведения), может возникать расхождение между данными документов и информацией в регистрах. Но регистр, в отличие от документа, является хранилищем итоговой информации, поэтому именно запись изменений в регистры служит подтверждением того, что хозяйственная операция совершена. 5.14.2.5. Основные свойства регистра накопления Для работы с регистрами накопления предназначена ветвь Регистры накопления дерева конфигурации. Редактирование свойств объектов типа Регистр накопления и создание подчиненных объектов выполняются в окне редактирования (см. здесь). При редактировании регистра накопления определяется его вид, разрабатывается структура регистра: ● создаются наборы измерений, ресурсов и реквизитов регистра; ● если необходимо, создаются экранные и печатные формы просмотра движений регистра. ПРИМЕЧАНИЕ. В качестве типа измерения регистра накопления не могут выступать значения типа УникальныйИдентификатор, ДвоичныеДанные, строка неограниченной длины. В этом разделе будут описаны уникальные свойства регистра накопления, в дополнение к общим свойствам объектов. Вид регистра – если регистр предназначен: ● для хранения остатков (выберите из списка значение Остатки); ● хранения оборотов – значение Обороты. Описание разницы между регистрами остатков и оборотов см. здесь. Основная форма списка – для регистра может быть создано несколько форм для просмотра его движений. Если форм для ввода и выбора несколько, то в свойстве Основная форма списка можно указать форму, которая будет использоваться по умолчанию. Разрешить разделение итогов – если флажок установлен в значение Истина(значение по умолчанию), то будет задействован механизм разделителя итогов, который обеспечивает более высокую параллельность работы при записи в регистр. При одновременной записи движений несколькими сеансами система не будет обновлять одни и те же записи итогов, а будет записывать изменения итогов отдельно. При получении итогов эти данные складываются. Таким образом, обеспечивается и поддержание в актуальном состоянии итогов (для быстрого получения отчетов, например), и параллельность записи движений. Этот режим требует дополнительных расходов ресурсов (например, увеличивается количество данных в итоговых таблицах). Поэтому свойства есть и в конфигурации, и в языке для управления этим режимом. Записи будут «размножаться» только при параллельно выполняемых транзакциях. Их количество по каждой комбинации измерений будет зависеть от максимального количества одновременно выполняемых транзакций. При пересчете итогов накопленные отдельные записи сворачиваются. Режим разделения итогов может быть изменен пользователем в режиме работы 1С:Предприятие. По умолчанию свойство включено. Использование в итогах – если флажок установлен в значение Ложь, измерение исключается из хранимых итогов регистра. Также для регистра может быть создано несколько форм для просмотра его движений. Если форм для ввода и выбора несколько, то в свойстве Основная форма списка можно указать форму, которая будет использоваться по умолчанию. 5.14.2.6. Агрегаты оборотных регистров накопления Для повышения производительности системы в случае использования оборотных регистров накопления предназначен механизм агрегатов. Можно сказать, что агрегаты – это специализированные хранилища, предназначенные для использования в рамках механизмов запросов «1С:Предприятия». 5.14.2.6.1. Основные понятия При дальнейшем рассмотрении работы с агрегатами будут использоваться некоторые термины, которые мы определим в этом разделе. Агрегат – физическая таблица базы данных, хранящая сводные обороты всех ресурсов регистра по выбранным измерениям с выбранной периодичностью и за определенный период. В регистре, для которого формируются агрегаты, не может быть более 30 измерений. Агрегат характеризуется следующими параметрами: ● Размер агрегата – это размер таблицы агрегата. Оценочный показатель. ● Эффект – ожидаемое уменьшение среднего времени выполнения запроса с использованием агрегатов. Например, если эффект агрегата равен 90 %, то это означает, что среднее время выполнения запроса с использованием агрегатов будет на 90 % меньше, чем среднее время выполнения того же запроса, но с использованием итогов. Оценочный показатель. Период агрегата – интервал дат, данные за который помещены в агрегат. Периодичность агрегата – периодичность, с которой в агрегате хранятся данные. Список агрегатов – набор агрегатов, заданный на этапе конфигурирования. Список может быть сформирован либо вручную, либо загружен из файла, полученного в результате расчета оптимальных агрегатов. Статистика использования – информация о том, какие запросы (измерения, период, периодичность) выполняются к регистру. Используется для перестроения агрегатов и получения оптимального списка агрегатов. Оптимальный список агрегатов – список агрегатов, соотношение размера и эффекта которых является оптимальным для текущего состояния регистра (его движений и статистики использования). Режим агрегатов/итогов – если установлен режим агрегатов, то при выполнении запросов будут использоваться данные агрегатов; если установлен режим итогов, то при выполнении запросов будут использоваться данные итогов. Использование агрегатов – выключение использования агрегатов означает, что при изменении движений не будет выполняться никаких операций над агрегатами. Выключать использование агрегатов имеет смысл на время массированной загрузки данных в регистры, однако последующее включение использования агрегатов может привести к ресурсоемкому процессу актуализации агрегатов (если изменяемые данные находятся внутри периода агрегатов). 5.14.2.6.2. Общая схема работы с агрегатами Приведем общую схему работы с агрегатами: Рис. 135. Общая схема работы с агрегатами (клиент-серверный вариант) ПРИМЕЧАНИЕ. Данная схема описывает работу с одним регистром. Если необходимо работать с несколькими регистрами, то операцию, выполняемую на каждом шаге, следует выполнить для каждого регистра. Более подробно распишем приведенную схему работы: 1. Нужно создать в конфигураторе необходимый список агрегатов. Данный шаг не является обязательным. Создание агрегатов в режиме конфигуратора может использоваться в том случае, если требуется обеспечить постоянное использование какого-либо агрегата в любой информационной базе. Если агрегаты решено создавать в конфигураторе, то это можно сделать несколькими способами: ● Рассчитать (например, в режиме итогов) и загрузить оптимальные агрегаты (метод ОпределитьОптимальныеАгрегаты()). Если агрегаты ранее не использовались, то список оптимальных агрегатов будет получен только на основании таблицы движений регистра. Если агрегаты использовались, то список оптимальных агрегатов будет построен на основании таблицы движений и статистики использования. ● Создать собственный список агрегатов на основании анализа запросов к регистру. 2. После обновления конфигурации базы данных включить для регистра режим агрегатов (метод УстановитьРежимАгрегатов()). 3. Далее необходимо периодически выполнять перестроение агрегатов (метод ПерестроитьИспользованиеАгрегатов()). При выполнении этой операции система добавляет нужные агрегаты и удаляет неиспользуемые. Данная операция выполняется в том случае, если текущий список агрегатов не является оптимальным. Удаление производится только для тех агрегатов, которые создавались во время выполнения операции перестроения. Агрегаты, созданные в конфигураторе, автоматически не удаляются. Если агрегаты созданы в конфигураторе, то при выполнении операции перестроения с ними будут выполняться следующие действия: ● Агрегат будет включен в том случае, если вариант использования агрегата установлен в значение Всегда. Оценка эффективности использования такого агрегата не влияет на его использование. ● Агрегат будет включен на основании оценки эффективности использования в том случае, если режим использования агрегата установлен в значение Авто. Использование данного агрегата оценивается наряду с агрегатами, которые система создает автоматически. Если автоматически создаваемый агрегат окажется эффективнее агрегата, созданного в конфигураторе с режимом использования Авто, то будет использоваться автоматически создаваемый агрегат. 4. Затем необходимо выполнить обновление агрегатов (метод ОбновитьАгрегаты()). Обновление агрегатов производит перенос данных из таблиц движений выбранного регистра в соответствующие таблицы агрегатов. Переносятся те движения, которые были созданы в таблице движений после предыдущего обновления агрегатов. 5. Далее следует накопить статистику использования созданных агрегатов. Для этого следует в течение некоторого интервала времени (например, 1 месяц) выполнять типовые задачи, в которых используются данные из регистра, для которого был включен режим агрегатов. В процессе работы необходимо регулярно выполнять обновление агрегатов. По истечению этого периода следует выполнить перестроение агрегатов (шаг 3) и регулярно повторять операции шагов 3 – 5. Рассмотренная схема описывает подход к работе с агрегатами регистра в клиент-серверном варианте. В файловом варианте использования системы, работа с агрегатами выглядит несколько по-иному: Рис. 136. Общая схема работы с агрегатами (файловый вариант) Основное отличие этой схемы от общей схемы работы с агрегатами (см. рис. 136) заключается в следующем (будут описаны только отличия): ● На шаге 1 список агрегатов в конфигураторе следует создавать обязательно. ● Шаг 6. Пересчет оптимальных агрегатов (метод ОпределитьОптимальныеАгрегаты()) следует выполнять с некоторой регулярностью (например, 1 месяц). Во время этого периода (1 месяц) следует выполнять типовые задачи, в которых используются данные из регистра, для которого был включен режим агрегатов. В процессе работы необходимо регулярно выполнять обновление агрегатов. ● Шаг 7. После получения нового списка оптимальных агрегатов, необходимо определить, требуется изменение списка агрегатов в метаданных конфигурации или нет. Если изменение не требуется, то следует продолжить работу, перейдя на шаг 3. ● Шаг 8. Если необходимо выполнить обновление списка агрегатов, то следует выполнить загрузку необходимых (или всех) агрегатов (из списка оптимальных). Затем нужно обновить конфигурацию базы данных (произойдет реструктуризация информационной базы) и потом продолжить работу с шага 3. Рекомендации по выполнению каждого из рассмотренных шагов рассматриваются в следующем разделе. 5.14.2.6.3. Рекомендации по использованию агрегатов Формирование списка агрегатов Формирование списка агрегатов можно выполнять несколькими способами. Если агрегаты планируется включить для регистра, уже существующего в конфигурации, но для которого не было включено использование агрегатов, то это можно сделать следующими способами: ● Если в регистре отсутствуют движения или движений мало (не более 2–3 тысяч записей), следует выполнить анализ запросов, которые используют выбранный регистр, и получить перечень часто используемых комбинаций измерений, отборов, периодов запросов и периодичности получения данных. На основании полученной информации создать список агрегатов, при этом постараться минимизировать количество используемых агрегатов. ● Если в регистре присутствует существенное количество записей (более 3 тысяч), то можно выполнить расчет оптимальных агрегатов на основании данных регистра с помощью метода ОпределитьОптимальныеАгрегаты()и загрузить полученный список агрегатов. ● Если для используемого регистра был включен режим агрегатов и включено использование агрегатов (т. е. каким-то образом сформирован первоначальный список агрегатов), то можно также получить список оптимальных агрегатов и загрузить его в конфигураторе. Отличие этого способа от способа номер 2 заключается в том, что в этом случае для расчета оптимальных агрегатов будет использоваться статистика, которую ведет система. Поэтому полученный список агрегатов будет более эффективен, нежели получение оптимальных агрегатов для регистра, у которого не был включен режим агрегатов и использование агрегатов. ПРИМЕЧАНИЕ. Использовать метод получения оптимальных агрегатов имеет смысл в том случае, если в таблице движений регистра находятся не менее 3–5 тысяч записей. На меньшем количестве записей построенный список агрегатов может оказаться неэффективным. Выполнение перестроения Операцию перестроения агрегатов следует выполнять не реже, чем операцию расчета списка оптимальных агрегатов. При этом данная операция не предполагает изменения списка агрегатов, а старается «обойтись» только существующими агрегатами. Также следует помнить, что операция перестроения эффективна в том случае, если для ее работы накоплен достаточно большой объем статистических данных. Однако рекомендации по периоду перестроения в общем случае дать затруднительно, но можно отметить основные факторы: ● есть вероятность изменения характера данных в регистре; ● есть подозрения на изменение характера запросов (что приведет к изменению накапливаемой статистики). При выполнении операции следует указать два параметра: ● Максимальный относительный размер – задает ограничение на размер формируемого списка агрегатов (в процентах от таблицы движений). Если параметр равен 0, то ограничения на размер агрегатов не задаются. ● Минимальный эффект – процент, на который необходимо увеличить эффект старого списка при перестроении. Если новый список увеличивает эффект на заданное значение, то метод реально перестраивает список. Если параметр не указан или равен 0, это означает отсутствие требований к минимальному эффекту. Также происходит перестроение текущего списка агрегатов, если он больше, чем параметр Максимальный относительный размер, или удалось построить список с эффективностью большей как минимум на значение параметра Минимальный эффект. В противном случае список агрегатов не перестраивается. ПРИМЕЧАНИЕ. Операция перестроения является достаточно длительной и ресурсоемкой процедурой. Не рекомендуется выполнять ее во время интенсивной работы с информационной базой других пользователей. Выполнение операции обновления агрегатов Данную операцию рекомендуется выполнять чаще, чем выполняется операция перестроения агрегатов. Обновление агрегатов может выполняться двумя способами: ● Полностью обновляются все агрегаты, отмеченные как используемые. Это может занимать существенное время. ● Так называемое «порционное» заполнение. В этом случае за одно обращение обновляется период, равный 1 месяцу в 10 агрегатах. При выполнении операции следует указать параметр Максимальный относительный размер. Он задает ограничение на размер формируемого списка агрегатов (в процентах от таблицы движений). Если параметр равен 0, то ограничения на размер агрегатов не задаются. ПРИМЕЧАНИЕ. Желательно выполнять данную операцию в периоды минимальной нагрузки на информационную базу. СОВЕТ. Рекомендуется использовать режим разделения итогов при использовании агрегатов, особенно если обновление агрегатов выполняется регламентным заданием на фоне интенсивного проведения документов, связанных с регистром, у которого выполняется обновление агрегатов. Использование агрегатов Для определения агрегата, который будет использоваться для запроса, будет использован алгоритм, который будет описан далее. В запросе выделяются используемые измерения регистра, потом подбирается перечень агрегатов, которые содержат все используемые измерения, и наиболее полно соответствуют запросу по периодичности и периоду. Из этого списка выбирается агрегат, с минимальным размером. Именно этот агрегат и будет использоваться. В запросе может использовать агрегат, периодичность которого меньше периодичности, требуемой в запросе. В этом случае необходимые данные будут получены суммированием данных из меньших периодов. Возможна ситуация, когда период, заданный в запросе, не совпадает с периодом агрегатов. В этом случае для исполнения запроса возможно использование двух агрегатов. Рассмотрим пример. В информационной базе существуют два агрегата, закрывающие весь период запроса: ● С периодичностью месяц; ● С периодичностью день. Запрос исполняется за период с 15 сентября по 15 ноября. В этом случае будут использованы два агрегата: ● Агрегат с периодичностью месяц будет использован для получения данных за период с 1 октября по 31 октября; ● Агрегат с периодичностью день будет использован для получения данных за периоды с 15 сентября по 30 сентября и с 1 ноября по 15 ноября; ● Данные по разным агрегатам будут суммированы для получения окончательного результата. Виртуальная таблица оборотов регистра, для которого включен режим агрегатов, всегда содержит актуальные данные. Выполнение расчета оптимальных агрегатов Данная операция может выполняться по необходимости, она не является регулярной. Ниже приведен перечень ситуаций, при наступлении которых рекомендуется выполнить расчет списка оптимальных агрегатов: ● по истечении некоторого времени после первичного формирования списка агрегатов; ● в случае существенного падения производительности на текущем списке агрегатов; ● при существенном изменении характера данных; ● при изменении состава запросов к регистру; ● если есть вероятность, что текущий список агрегатов перестал быть оптимальным. ПРИМЕЧАНИЕ 1. Для клиент-серверного варианта данная операция не является обязательной. Формирование оптимальных агрегатов (при необходимости) выполняется автоматически во время выполнения перестроения агрегатов. ПРИМЕЧАНИЕ 2. Данная операция является наиболее ресурсоемкой и продолжительной. Настоятельно рекомендуется выполнять ее только в тех случаях, когда с информационной базой не работают другие пользователи. Использование регламентных заданий при работе с агрегатами Операции перестроения и обновления агрегатов можно выполнять с помощью регламентных заданий. Необходимо соблюдать следующие рекомендации при составлении расписания выполнения регламентных заданий: ● для регламентного задания, выполняющего операции перестроения и обновления, рекомендуется заполнять свойство регламентного задания Ключ (см. здесь). ● рекомендуется задавать расписание регламентных заданий перестроения и обновления так, чтобы не возникла ситуация, когда операции обновления и перестроения будут выполняться в одно время. Соблюдение рекомендаций приведет к предотвращению параллельного выполнения операций перестроения и обновления, что положительно скажется на производительности. 5.14.2.6.4. Редактирование агрегатов Создание и редактирование списка агрегатов возможно только для оборотного регистра накопления (свойство Вид регистра имеет значение Обороты). Для вызова конструктора агрегатов следует использовать команду Открыть агрегаты контекстного меню соответствующего регистра. Рис. 137. Вызов конструктора агрегатов Затем откроется окно конструктора агрегатов, в котором можно управлять агрегатами оборотного регистра накопления. Агрегатами можно управлять вручную, а также можно загрузить (для этого предназначена специальная кнопка командной панели) заранее подготовленный список оптимальных агрегатов. Рис. 138. Конструктор агрегатов При создании агрегатов можно указать вариант использования. Если стоит Авто (по умолчанию), то система будет сама определять необходимость использования данного агрегата во время выполнения операции перестроения агрегатов. Если стоит Всегда, значит система будет использовать агрегат всегда. Колонка Периодичность определяет минимальный период времени, за который агрегат будет хранить итоги по выбранным измерениям. Допускается иметь несколько агрегатов с одинаковым набором измерений, но с разной периодичностью. Не следует злоупотреблять количеством агрегатов. Большое количество агрегатов может привести к излишнему увеличению размера базы данных, но не приведет к повышению производительности работы запросов. В правой части окна можно указать, какие измерения входят в редактируемый агрегат. Агрегат может включать произвольное количество измерений (но не более 30) и не включать их вовсе. В этом случае система хранит сводные обороты по регистру с заданной периодичностью. Если существует xml-файл, содержащий список оптимальных агрегатов, то можно выполнить загрузку такого списка. Для этого стоит воспользоваться специальной командой конструктора агрегатов (см. рис. 138) и выбрать там предварительно подготовленный файл. Рис. 139. Загрузка списка оптимальных агрегатов Система выполнит сравнение списка из файла и текущего списка агрегатов и цветом отметит те агрегаты, которые рекомендуется добавить в систему (из списка Оптимальные агрегаты), и агрегаты, которые рекомендуется удалить из системы (список Агрегаты). Предложенные рекомендации можно не выполнять или выполнять в ограниченном объеме. 5.14.2.7. Разработка структуры регистра накопления Разработка структуры регистра заключается в создании наборов измерений, ресурсов и реквизитов на закладке Данные (см. здесь). 5.14.2.7.1. Свойства измерения (ресурса, реквизита) регистра накопления Свойства измерений, ресурсов и реквизитов редактируются при помощи палитры свойств. В основном они совпадают с общими свойствами объектов. Ниже в этом разделе будут описаны уникальные свойства измерений, ресурсов и реквизитов. Тип данных. В отличие от измерений и реквизитов, объекты вида Ресурс могут хранить только один тип данных – Число. Запрет незаполненных значений – установка этого флажка для измерения включает механизм запрета записи движений регистра с пустым значением измерения. Индексировать – данное свойство можно установить только для измерений. Установка свойства позволяет ускорить выполнение операций, обращающихся к данным регистра, например, если выбираются движения по конкретному значению данного измерения. К таким операциям относятся запросы с условием равенства данного измерения указанному значению, а также временный расчет и методы обхода движений объекта РегистрНакоплениявстроенного языка, использующие отбор по определенному значению измерения. Использование в итогах – если свойство не установлено, измерения исключаются из хранимых итогов регистра (свойство используется только для измерений оборотного регистра). Если такое измерение используется в запросе или в условии виртуальной таблицы, то виртуальная таблица не будет использовать хранимые итоги, а будет рассчитывать данные только по таблице движений. 5.14.2.7.2. Упорядочивание списка измерений регистра накопления Порядок расстановки измерений регистра накопления влияет на оптимизацию доступа к итогам регистра: измерения, к которым необходим быстрый доступ, следует располагать в начале списка измерений. Глава 6. Командный интерфейс Командный интерфейс – это основное средство доступа пользователя к функциональности приложения, средство, которое позволяет перемещаться между формами и выполнять те или иные действия. Разработчик конфигурации не прописывает детально команды глобального интерфейса и командных панелей форм для каждой реализуемой в приложении роли пользователя (или комбинации таких ролей), а описывает те правила, по которым командный интерфейс будет автоматически формироваться для пользователя. Формирование командного интерфейса выполняется в зависимости от прав пользователя (см. здесь), функциональных опций приложения (см. здесь) и, наконец, настроек самого пользователя. Такое декларативное описание командного интерфейса помогает решить задачу согласования предоставленных пользователю команд и прав пользователя на выполнение тех или иных действий, а также задачу модификации командного интерфейса приложения при неполном внедрении возможностей приложения. 6.1. Общее устройство командного интерфейса 6.1.1. Разделы и подразделы основного окна приложения Все глобальные команды основного окна приложения объединяются в разделы. Переход между ними осуществляется при помощи панели разделов. Состав этих разделов однозначно определяется составом подсистем верхнего уровня, для которых установлен признак Включать в командный интерфейс. Команды текущего раздела отображаются в панели навигации и панели действий основного окна. При отображении команд того или иного раздела в панели навигации возможно появление одного или нескольких «подразделов», каждый из которых – это совокупность команд, соответствующих подчиненной подсистеме (также с признаком Включать в командный интерфейс). Например, в разделе Торговый учет возможно появление подразделов Розничная торговля и Оптовая торговля за счет существования соответствующих подчиненных подсистем. 6.1.2. Виды команд Командный интерфейс пользователя можно разделить: ● на независимые глобальные команды, ● параметризуемые глобальные команды, ● локальные команды формы. В рамках данного раздела мы будем рассматривать только глобальные команды (описание локальных команд формы см. здесь). С другой стороны, команды делятся: ● на стандартные команды (автоматически добавляемые системой в командный интерфейс); ● навигационные команды; ● команды действия; ● команды, созданные в конфигурации. 6.1.2.1. Стандартные команды Для большинства объектов конфигурации система предоставляет стандартные команды, которые автоматически помещаются в командный интерфейс. Ниже приведен список таких объектов и стандартные команды, которые для них предоставляет система: ● Общая форма: ● Открыть общую форму; ● Константы: ● Открыть форму редактирования константы; ● Справочники: ● Открыть форму списка; ● Открыть форму нового; ● Открыть форму новой группы; ● Ввод на основании; ● Перейти к списку с отбором по владельцу; ● Документы: ● Открыть форму списка; ● Открыть форму нового; ● Ввод на основании; ● Журналы документов: ● Открыть форму списка; ● Отчеты: ● Открыть основную форму; ● Обработки: ● Открыть основную форму; ● План видов характеристик: ● Открыть форму списка; ● Открыть форму нового; ● Открыть форму новой группы; ● Ввод на основании; ● Планы счетов: ● Открыть форму списка; ● Открыть форму нового; ● Ввод на основании; ● Планы видов расчета: ● Открыть форму списка; ● Открыть форму нового; ● Ввод на основании; ● Перечисления: ● Открыть форму списка; ● Регистры сведений: ● Открыть форму списка; ● Открыть форму нового; ● Перейти к списку с отбором по регистратору; ● Регистры накопления: ● Открыть форму списка; ● Перейти к списку с отбором по регистратору; ● Регистры бухгалтерии: ● Открыть форму списка; ● Перейти к списку с отбором по регистратору; ● Регистры расчета: ● Открыть форму списка; ● Перейти к списку с отбором по регистратору; ● Бизнес-процессы: ● Открыть форму списка; ● Открыть форму нового; ● Ввод на основании; ● Перейти к списку задач с отбором по бизнес-процессу; ● Задачи: ● Открыть форму списка; ● Открыть форму нового; ● Ввод на основании; ● Планы обмена: ● Открыть форму списка; ● Открыть форму нового; ● Ввод на основании; ● Критерии отбора: ● Открыть форму списка. 6.1.2.1.1. Формирование и размещение стандартных команд Стандартные команды открытия формы списка и создания нового элемента формируются всегда, если не выключено свойство Использовать стандартные команды. Стандартная команда отчета формируется, если у отчета задана основная схема компоновки данных или задана основная или дополнительная форма. Стандартная команда обработки формируется, если у обработки задана основная или дополнительная форма. Стандартные команды для ввода на основании создаются системой в том случае, если соответствующим образом задано свойство Ввод на основании. Например, если для справочника Товары и для справочника Партии товаров сказано, что на их основании возможен ввод документов Приходная накладная и Расходная накладная, то у справочников появится стандартная команда ввода на основании. Стандартные команды для открытия формы списка с отбором по владельцу формируются в том случае, если соответствующим образом задано свойство справочника Владельцы, а для регистра сведений есть одно или несколько измерений с признаком Ведущее. Стандартная команда формы списка с отбором по регистратору формируется для регистров, подчиненных регистратору. Стандартные команды размещаются следующим образом: Панель Размещаемые команды Панель навигации Команды открытия списков Панель действий ● Команда открытия формы редактирования констант. ● Команды открытия форм новых объектов. ● Команды открытия форм отчетов и обработок Панель навигации формы Команды открытия формы списка с отборами Командная панель формы Команды ввода на основании 6.1.2.1.2. Параметризуемые стандартные команды Некоторые стандартные команды являются параметризуемыми, т. е. могут быть выполнены в контексте той или иной формы, получив в качестве параметра некоторое значение. Команда Тип параметра Ввод на основании Ссылка на объект-основание Открытие списка с отбором по владельцу Ссылка на объект-владелец Открытие списка с отбором по регистратору Ссылка на документ-регистратор Открытие списка критерия отбора Ссылка на значение критерия отбора О порядке формирования типа параметра стандартных параметризуемых команд см. здесь. Так, если для справочника Товары и для справочника Партии товаров сказано, что на их основании возможен ввод документа Приходная накладная, то тип параметра команды ввода на основании будет составным: СправочникСсылка.Товарыи СправочникСсылка.ПартииТоваров. Поэтому стандартная команда Ввод приходной накладной на основании будет автоматически размещена в формах элементов справочников товаров и партий товаров. 6.1.2.2. Независимые и параметризуемые глобальные команды Независимые глобальные команды предназначены для выбора пользователем той или иной функциональности в рамках приложения в целом. Выполнение такой команды не требует дополнительной информации (параметров). Это, например, такие команды, как: ● открытие списка справочника, ● открытие журнала документов, ● открытие формы того или иного отчета, ● открытие формы нового элемента справочника и т. д. Параметризуемые глобальные команды зависят от контекста выполнения и не могут быть выполнены без получения дополнительной информации (параметра выполнения команды). Это, например, такие команды, как: ● открытие списка подчиненного справочника (параметр – ссылка на элемент справочника-владельца); ● открытие списка записей регистра, подчиненного регистратору (параметр – ссылка на документрегистратор); ● ввод одного объекта на основании другого (параметр – объект, служащий «основанием»). Параметризуемые команды могут отображаться в панели навигации вспомогательного окна и непосредственно в командной панели формы. Глобальные команды отображаются в командной панели формы перед командой Открыть справку. При этом команды группы Важное размещаются непосредственно в командной панели, а остальные группы команд (стандартная группа Создать на основании и другие группы категории Командная панель формы) размещаются в виде подменю. Выполнение глобальных команд, размещенных в командной панели формы, приводит к открытию нового вспомогательного окна приложения. 6.1.2.3. Навигационные команды и команды действия Навигационными будем называть те команды, которые предназначены для перехода пользователя к очередной форме приложения, не покидая текущее (основное или вспомогательное) окно приложения. Навигационная команда открывает очередную форму в том же окне приложения, в котором команда была вызвана пользователем. Навигационными могут быть как независимые команды глобального командного интерфейса, так и параметризуемые глобальные команды. Навигационные команды размещаются в панели навигации основного или вспомогательного окна приложения. Примерами навигационных команд основного окна приложения могут служить команды перехода к списку справочника или журналу документов. Например, команда Валюты откроет в том же окне форму списка валют, а команда Финансовые документы откроет в том же окне форму списка документов. Примерами навигационных команд вспомогательного окна приложения могут служить команды перехода к спискам, логически подчиненным тому объекту, который редактируется в данном окне. Например, в форме редактирования элемента справочника валют может быть команда перехода к регистру сведений с историей изменения курса валюты; в форме документа может быть команда перехода к его движениям по тому или иному регистру и т. д. ПРИМЕЧАНИЕ. Отказ от открытия формы не прерывает выполнение навигационной команды. Использование отказа от открытия формы в навигационных командах приведет к открытию пустой формы. Командами действия будем называть те команды, выполнение которых, как правило, приводит к открытию нового вспомогательного окна приложения. Такие команды на некоторое время переключают пользователя на выполнение другой задачи, т. е. существенно изменяют контекст его деятельности. Например, команда создания нового документа переводит пользователя от задачи навигации по приложению, выполняемой в основном окне приложения, к задаче ввода нового документа. Такие команды размещаются в панели действий основного окна приложения или в командной панели формы, отображаемой во вспомогательном окне приложения. 6.1.2.4. Команды, созданные в конфигурации Кроме стандартных команд разработчик конфигурации может создать свои собственные команды, установить для них место размещения (группу команд), описать на встроенном языке действие, выполняемое при выполнении команд, и т. д. Более подробно о свойствах объекта Командасм. здесь и см. здесь. 6.1.3. Группы команд Все глобальные команды по месту своего размещения и по своему характеру делятся на четыре категории. Категория Описание Панель навигации Для размещения независимых навигационных команд Панель навигации Для размещения параметризуемых навигационных команд, вызываемых из формы формы Панель действий Для размещения команд, приводящих к появлению нового вспомогательного окна приложения Командная панель формы Для размещения в форме параметризуемых команд, приводящих к появлению нового вспомогательного окна приложения Приведенные здесь категории представляют собой перечень тех мест интерфейса приложения, в которых могут отображаться глобальные команды. Для группировки глобальных команд система реализует стандартные группы команд. Место размещения Панель навигации Стандартные группы команд ● Важное, ● Обычное, ● См. также Панель действий ● Создать, ● Отчеты, ● Сервис Панель навигации формы ● Важное, ● Перейти, ● См. также Командная панель формы ● Важное, ● Создать на основании Кроме того, при разработке конфигурации разработчик может создать собственные группы команд (объект конфигурации Общие – Группы команд, см. здесь), которые можно отнести к одной из перечисленных выше категорий (свойство Категория группы команд). Эти группы могут наряду с предопределенными группами использоваться для размещения в них разрабатываемых команд. 6.2. Построение глобального командного интерфейса В данном разделе рассмотрены объекты и свойства объектов конфигурации, влияющие на построение глобального командного интерфейса конфигурации. 6.2.1. Подсистемы Основа формирования глобального командного интерфейса основного окна приложения – структура подсистем конфигурации. Именно подсистемы формируют представление пользователя о функциональности приложения в целом. Структура подсистем описывает для пользователя общую функциональность системы. Таким образом, построение глобального командного интерфейса основного окна приложения «от структуры подсистем» налагает на разработчика определенную ответственность при разработке подсистем конфигурации. Фактически структура подсистем – это первое, что увидит пользователь при ознакомлении с приложением. Рис. 140. Отображение подсистем в разделы На структуру командного интерфейса влияют подсистемы, которым установлено свойство Включать в командный интерфейс. Но данное свойство устанавливается подсистемам по умолчанию, и, таким образом, предполагается, что подсистемы создаются в первую очередь именно для описания глобального командного интерфейса. ПРИМЕЧАНИЕ. Если в конфигурации нет ни одной подсистемы с установленным свойством Включать в командный интерфейс, то панель разделов не отображается в основном окне приложения. Подсистемы первого уровня приводят к появлению в приложении «разделов» – совокупности глобальных команд определенной предметной направленности. Разделы отображаются в панели разделов основного окна приложения. Выбор того или иного раздела изменяет состав команд панели навигации и панели действий. Подсистемы более низкого уровня приводят к появлению в панели навигации «подразделов», в которые собираются команды соответствующей подсистемы. Принадлежность объекта к тому или иному набору подсистем определяет появление команд объекта в соответствующих фрагментах командного интерфейса конфигурации. Однако новые объекты по умолчанию не принадлежат ни одной подсистеме. Это означает, что команды объекта отсутствуют в командном интерфейсе. Поэтому для помещения стандартных и созданных разработчиком команд объекта в соответствующие фрагменты командного интерфейса необходимо указать, каким подсистемам принадлежит тот или иной объект. Принадлежность объекта к разным подсистемам является независимой, т. е. объект можно отнести одновременно как к «родительской» и «подчиненной» подсистемам, так и только к «подчиненной», если это целесообразно из соображений формирования командного интерфейса. ПРИМЕЧАНИЕ. Если в конфигурации нет ни одной подсистемы с установленным свойством Включать в командный интерфейс, то на рабочий стол попадают все команды, которые на нем можно было разместить вручную. В этой ситуации меняется внешний вид редактора командного интерфейса рабочего стола: в нем исчезает дерево команд и пропадает возможность удалить команду с рабочего стола. Как только появляется первая подсистема, включенная в командный интерфейс, автоматическое добавление команд на начальную страницу перестает действовать и команды нужно размещать явно. ПРИМЕЧАНИЕ. Режим автоматического размещения на начальной странице всех команд не действует, если у конфигурации установлен режим запуска Обычный. 6.2.2. Команды Как говорилось выше, существуют стандартные команды, предоставляемые системой автоматически, и команды, создаваемые разработчиком в конфигурации. Объект конфигурации Командаможет быть создан как подчиненный объект для следующих объектов конфигурации: ● Справочники, ● Документы, ● Журнал документов, ● Отчеты, ● Обработки, ● Планы видов характеристик, ● Перечисления, ● Планы счетов, ● Планы видов расчета, ● Регистры сведений, ● Регистры накопления, ● Регистры бухгалтерии, ● Регистры расчета, ● Бизнес-процессы, ● Задачи, ● Планы обмена, ● Критерии отбора. Кроме того, возможно создание общих команд (ветка дерева конфигурации Общие – Общие команды, см. здесь). 6.2.3. Параметризация команды Если команда является параметризуемой, то ее выполнение предполагает получение некоторого значения в качестве параметра. Источником такого значения могут служить только данные формы. ВНИМАНИЕ! Задавать тип значения параметра команды имеет смысл только для тех команд, которые размещаются в формах (относятся к группам категорий Командная панель формы или Панель навигации формы). Свойство Тип параметра команды фактически задает состав форм, в контексте которых возможно выполнение данной команды. Например, если команда имеет тип параметра СправочникСсылка.Товары, то она может быть выполнена: ● в форме элемента справочника Товары, где параметром послужит ссылка на редактируемый в форме объект; ● в форме списка справочника Товары, где параметром послужит ссылка из текущей строки списка; ● в форме приходной накладной, где параметром послужит ссылка на товар из текущей строки табличной части документа и т. д. Количество значений выбранного типа, которые будут переданы команде в качестве значений параметра, определяет свойство Режим использования параметра. Если это свойство установлено в значение Одиночный, то в команду передается одно значение указанного типа. Если свойство установлено в значение Множественный, то в качестве параметра всегда передается массив значений (даже если выбрано одно значение). Этот режим имеет смысл выбирать тогда, когда источником данных для команды может являться таблица в режиме множественного выделения. В этом случае первым элементом массива будет выступать текущая строка (вне зависимости от последовательности выделения строк табличного поля). Так, если мы имеем список товаров, состоящий из элементов Миксер, Пылесос, Холодильник, Чайник, в котором выделены элементы Миксер, Холодильник и Чайник, а текущей строкой является Холодильник, то команда получит массив следующего содержания (по порядку элементов): Холодильник, Миксер, Чайник. Порядок элементов после первого не определен, несмотря на некоторый порядок, приведенный в примере. ПРИМЕЧАНИЕ. Если текущая строка не входит в выделение, то первый элемент в массиве невозможно идентифицировать однозначно. Формирование фрагментов командного интерфейса форм выполняется автоматически на основании типа основного реквизита. При редактировании формы возможно дополнение фрагмента командного интерфейса разработчиком формы. Например, если форма предназначена для редактирования товара, то в нее автоматически попадут все команды, тип параметра которых – СправочникСсылка.Товары(например, Печать карточки товара, Переход к списку цен товара и т. д.). Если товар имеет реквизит Производитель, то при разработке формы в нее также можно будет включить и команды с типом параметра СправочникСсылка.Контрагент(например, Карточка контрагента, Договора контрагента и т. д.), так как в форме можно получить значение для параметра таких команд. Но такие команды (которые не относятся к основному реквизиту) автоматически не включаются в командный интерфейс, однако разработчик может включить их с помощью редактора формы. Для группы справочника (вид иерархии Иерархия групп и элементов) и иерархического плана видов характеристик не происходит автоматического включения в командный интерфейс формы группы параметризуемых глобальных команд, однако разработчик может включить такие команды в командный интерфейс с помощью редактора формы. 6.2.4. Формирование командного интерфейса по умолчанию На место размещения команд влияют свойства Тип параметра команды, Группа и принадлежность команды (или родительского объекта) к той или иной подсистеме. Независимые (т. е. непараметризуемые) команды относятся к фрагментам глобального командного интерфейса, соответствующим подсистемам, в которые включен объект-владелец или сама команда (для общих команд). Параметризуемые команды относятся к фрагментам глобального командного интерфейса, соответствующим тем объектам, типы которых заданы в свойстве Типпараметра команды. Группа команд и в первом, и во втором случае – это своеобразное уточнение размещения команды в пределах одного фрагмента. Так, например, группы команд задают, в какой панели (навигации или действий) будут размещены независимые команды того или иного раздела. А для параметризуемых команд группа команд определяет, будет ли команда размещена в панели навигации формы или в командной панели формы. Таким образом, для независимых команд (команд, не требующих параметра, таких как открытие списка или открытие формы нового объекта) возможность размещения по умолчанию в категории иной, чем панель навигации или панель действий, востребована крайне редко. В свою очередь, размещение параметризуемых команд в панели навигации или панели действия не имеет смысла, так как в контексте основного окна приложения такие команды не могут получить параметры, необходимые для их исполнения. Приведем таблицу расположения команд. Независимые команды Параметризуемые команды Навигационные команды Панель навигации Панель навигации формы Команды действия Панель действий Командная панель формы Следует помнить, что по умолчанию глобальные команды не попадают в командный интерфейс форм групп иерархических справочников и планов видов характеристик. Для того чтобы глобальная команда была доступна в командном интерфейсе такой формы, ее необходимо разместить там вручную, с помощью редактора формы. При формировании командного интерфейса используются текстовые представления объектов конфигурации и различных команд. По умолчанию система формирует представления исходя из свойств Синоними Имя. Однако есть возможность влиять на это представление. Для этого используются представления объекта и списка. Подробнее об этом см. здесь. 6.2.5. Свойство «Командный интерфейс» Свойства Командный интерфейс (для подсистем), Командный интерфейс (для конфигурации) и Командный интерфейс основного раздела (для конфигурации) предназначены для редактирования состава глобальных команд соответствующего раздела или состава команд основного раздела. Редактирование этих свойств выполняется в том случае, если не устраивает автоматически сформированный порядок команд, группы, к которым отнесены команды в контексте данного раздела, и установленная автоматически видимость по умолчанию. В разных разделах одна и та же команда может отображаться в разных местах панели навигации или панели действия и может иметь разную видимость по умолчанию. Например, команда открытия списка справочника Товары с точки зрения раздела Торговля является важной и часто используемой, и разработчик может поместить ее в группу Важное. А с точки зрения раздела Бухгалтерский учет не так важна, и разработчик может поместить ее в группу См. также. Подробнее о редакторе фрагмента командного интерфейса см. здесь и см. здесь. 6.2.6. Редактирование состава команд Кроме возможности редактирования свойства подсистемы Командный интерфейс при помощи редактора этого свойства существует возможность редактирования состава команд сразу всех разделов в редакторе Все подсистемы (см. здесь). Редактирование состава глобальных команд, отображаемых в форме, выполняется в редакторе формы, на закладке Командный интерфейс (см. здесь). 6.2.7. Ролевая настройка видимости команд по умолчанию При автоматическом формировании команд разделов и команд форм устанавливается следующая видимость по умолчанию. По умолчанию видимы: ● команды открытия списков справочников, документов, журналов документов, планов видов характеристик, планов видов расчета, планов счетов, независимых регистров сведений, бизнеспроцессов, задач и планов обмена; ● команды открытия форм отчетов и обработок; ● команда открытия формы редактирования констант; ● команды перехода к списку подчиненного справочника; ● команды перехода к списку логически подчиненного регистра сведений (т. е. регистра с «ведущими» измерениями); ● команды ввода на основании; ● произвольные команды, созданные разработчиком при конфигурировании. По умолчанию невидимы: ● команды открытия списков перечислений, регистров сведений, подчиненных регистратору, регистров накоплений, регистров бухгалтерии, регистров расчета; ● команды открытия форм нового объекта и новой группы; ● команды перехода к спискам подчиненных регистров; ● команды перехода к спискам критериев отбора. Эти значения видимости, формируемые системой автоматически, могут быть изменены как для параметризуемых, так и для независимых команд. Причем значение видимости по умолчанию может быть задано в разрезе ролей, применяемых в конфигурации. При отображении команд в режиме 1С:Предприятие команда будет видна по умолчанию, если хотя бы для одной из ролей пользователя задана видимость для данной команды. При редактировании ролевой видимости следует исходить из того, что видимость команды для той или иной роли вступает в силу только тогда, когда команда доступна для этой роли. Таким образом, при настройке видимости для роли, сильно ограниченной в правах, почти никогда нет необходимости дополнительно скрывать команды, снимая им видимость по умолчанию (общее число доступных команд в том или ином разделе и так невелико). Ролевое редактирование видимости по умолчанию – это средство, позволяющее настроить начальную «насыщенность» глобального командного интерфейса в первую очередь для пользователей с широкими правами доступа. 6.3. Сервисные возможности навигации 6.3.1. Ссылки В «1С:Предприятии» имеется возможность получить текстовую ссылку на любой раздел командного интерфейса, отчет, обработку и на объекты информационной базы (документы, элементы справочников и т. д.). Рис. 141. Команды получения и перехода по ссылке Полученную ссылку можно сохранить и использовать в дальнейшем для перехода по ней. Так как ссылки являются текстовыми, то их можно отправлять другим пользователям, например, по электронной почте. Описание форматов ссылок см. здесь. Нельзя получить ссылку на инструменты, входящие в состав стандартных функций. Существует возможность запускать веб-клиент с одновременным переходом по ссылке. Для этого необходимо получить внешнюю ссылку из веб-клиента или тонкого клиента, подключенного к информационной базе через веб-сервер. Рис. 142. Получение внешней ссылки Для получения внешней ссылки следует воспользоваться обычной командой получения ссылки, убедившись, что в окне получения ссылки нажата кнопка Внешняя (см. рис. 142). Полученную ссылку можно ввести в адресной строке браузера, при этом будет загружено приложение и выполнен переход по ссылке (в примере на рис. 142 произойдет открытие формы отчета Остатки товаров). ПРИМЕЧАНИЕ. В Microsoft Internet Explorer не происходит загрузка приложения с переходом по ссылке, если ссылка относится к приложению, загруженному в текущем окне веб-браузера. Рекомендуется вводить ссылку в адресную строку нового пустого окна веб-браузера. 6.3.2. Оповещения пользователя Механизм оповещений предназначен для информирования пользователей о том, что система выполнила то или иное действие. Оповещения могут создаваться системой или разработчиком прикладного решения. Система создает оповещения при интерактивной записи/изменении объекта, а разработчик – вызовом метода ПоказатьОповещениеПользователя(). Оповещение отображается в окне, которое по умолчанию расположено в правом нижнем углу рабочей области экрана. Если с оповещением связана какая-либо ссылка, то пояснение будет одновременно являться гиперссылкой, ее нажатие приведет к открытию объекта, на который указывает ссылка. Пояснение также будет представлено гиперссылкой, если оповещение сформировано системой автоматически (при интерактивной записи/изменении объекта). Рис. 143. Оповещение пользователя Если при вызове метода не указан параметр Пояснение, то переход по навигационной ссылке также будет недоступен. Для того чтобы пользователь имел возможность перейти по гиперссылке, необходимо одновременно указывать и параметр Навигационная ссылка, и параметр Пояснение. Окно оповещения автоматически исчезает с экрана по истечении небольшого времени. Однако если навести на это окно курсор мыши, то окно будет существовать до тех пор, пока его принудительно не закроют или не уберут курсор мыши с площади окна оповещения. Если вызвать метод отображения оповещения несколько раз подряд, то пользователь увидит только самое последнее оповещение. ПРИМЕЧАНИЕ. Окно оповещения располагается поверх всех окон текущего приложения, кроме модальных окон. Модальное окно выводится поверх окна оповещения. При отображении в панели избранного и истории список оповещений выравнивается по правому краю панели. Наиболее позднее оповещение будет отображаться у правого края панели. Если оповещений больше пяти, то отображаются только пять последних оповещений. ПРИМЕЧАНИЕ. Список оповещений отображается только в течение жизни сеанса. Окна оповещений, которые открываются в веб-клиенте, привязаны к текущему активному окну: Рис. 144. Оповещение пользователя в веб-клиенте При закрытии окна, в котором было показано окно оповещения, это окно «передается» родительскому окну и т. д. до достижения основного окна приложения. ПРИМЕЧАНИЕ. В веб-клиенте нельзя перемещать окно оповещения и изменять его размер. 6.3.3. Отображение состояния длительных процессов В процессе разработки конфигурации возникают ситуации, когда необходимо информировать пользователя системы о состоянии выполнения длительных процессов (например, расчет зарплаты по подразделению). Для этого предназначена панель состояния. Панель состояния отображается вызовом метода Состояние()и недоступна для вызова на стороне сервера. В том случае, если необходимо отобразить на клиенте состояние длительного процесса, протекающего на сервере, нужно реализовать этот процесс таким образом, чтобы он мог выполняться на сервере «порциями», которые будут инициироваться со стороны клиента. Тогда одновременно со стартом очередной «порции» на сервере можно будет отображать изменение состояния выполнения процесса. Панель состояния отображается в окне, которое по умолчанию расположено в правом нижнем углу рабочей области экрана. Рис. 145. Окно отображения состояния Если требуется отображать ход выполнения процесса с помощью индикатора (например, мы знаем общее количество рассчитываемых сотрудников и хотим показать, сколько сотрудников уже рассчитано), то при вызове метода Состояние()необходимо указывать третий параметр метода, который определяет абсолютное значение индикатора прогресса. Минимальное значение индикатора прогресса всегда равно 0, а максимальное значение – 100. Состояние("Выполняется обработка данных", Счетчик*10, "Обрабатывается порция: " + Счетчик, БиблиотекаКартинок.ПодсистемаТоварныеЗапасы); Если при вызове метода третий параметр не указан, то индикатор прогресса также не будет отображаться на панели состояния. При этом текст пояснения будет располагаться непосредственно под текстом основного описания: Состояние("Выполняется проведение за " + Формат(ДатаПроведения, "ДЛФ=DD"), , "Проведено " + КоличествоПроведенных, БиблиотекаКартинок.Провести); Рис. 146. Состояние без прогресса Панель состояния автоматически исчезает с экрана по истечении небольшого времени после окончания работы фрагмента программы, вызвавшего появление панели состояния. Однако если навести на это окно курсор мыши, то окно будет существовать до тех пор, пока его принудительно не закроют или не уберут курсор мыши с площади панели состояния. ПРИМЕЧАНИЕ. Панель состояния располагается поверх всех окон текущего приложения, кроме модальных окон. Модальное окно выводится поверх панели состояния. В веб-клиенте панель состояния реализована в виде отдельного окна веб-браузера. Обновление этого окна имеет особенности: ● Microsoft Internet Explorer. Состояние обновляется после каждого вызова метода Состояние(). ● Mozilla Firefox. Состояние обновляется при каждом серверном вызове и после окончании выполнения программного кода на встроенном языке. Таким образом, если при выполнении программного кода на встроенном языке не было вызовов серверных методов, то панель состояния изменяться не будет. ● Google Chrome и Safari. Состояние обновляется только после окончания выполнения программного кода на встроенном языке. 6.3.4. Сообщения В прикладном решении большинство сообщений логически связано с данными. Например, если при проведении документа на складе не хватает некоторого количества определенной номенклатуры, программист должен уведомить об этом пользователя. Механизм сообщений позволяет разработчику сформировать сообщение, в котором можно указать, какой из реквизитов объекта стал причиной ошибки. При отображении в клиентском приложении сообщение может быть автоматически привязано к элементу формы, который редактирует этот реквизит, и рядом с ним будет выведено заданное сообщение. Сообщения выводятся в панель сообщений, которая располагается в нижней части рабочей области. Высота панели сообщений не превышает 5 строк. Если в панели размещается большее количество сообщений – появляется полоса прокрутки, но панель по высоте не увеличивается. Вручную также невозможно изменить высоту панели сообщений. Для функционирования этого механизма в платформе существует объект СообщениеПользователю. Рис. 147. Сообщения Механизм сообщений ориентирован на то, чтобы сообщить пользователю, что запрошенное им действие выполнить не удалось. Например, проведение документа невозможно из-за отсутствия остатков товара на складе. Если сообщение привязано к полю табличной части, то изменение порядка строк табличной части не оказывает влияния на корректность отображения сообщения. Рис. 148. Сообщения в табличной части Если строка, к которой было привязано сообщение, удалена, то сообщение будет привязано к элементу формы (см. здесь), который отображает табличную часть. В том случае, если сообщение привязано к строке таблицы, связанной с реквизитом формы типа ДанныеФормыКоллекция, ДанныеФормыДеревоили ДанныеФормыСтруктураИКоллекция, в этой таблице пользователем интерактивно выполнен поиск (с помощью соответствующей стандартной команды), в результате поиска строка, для которой создано сообщение, оказалась скрытой, то поиск будет автоматически отменен и сообщение будет показано в нужном месте. Если в таблице установлен программный отбор (свойство ОтборСтрок), то такой отбор не отменяется при отображении сообщения и выполняется позиционирование сообщения на таблицу в целом. ПРИМЕЧАНИЕ. Рекомендуется выводить сообщения только в том случае, если запрошенное пользователем действие не может быть выполнено, а не для информирования его о выполняемых действиях. Для информирования о выполняемом действии можно использовать метод ПоказатьОповещениеПользователя(). Чтобы сообщение об ошибке оказалось привязанным к нужному элементу формы, системе нужно знать следующую информацию: какой реквизит, какого объекта информационной базы, каким элементом формы отображается. Заполнение вышеописанных свойств позволяет ответить на все вопросы: ● Задавая значение свойства ПутьКДанным, мы указываем, какой реквизит формы хранит данные нашего объекта информационной базы. ● Задавая свойство Поле, мы указываем реквизит объекта, для которого будет отображаться сообщение. Можно сказать, что в сообщении пойдет речь о данных ПутьКДанным.Поле, которые в базе данных идентифицируются значением КлючКДанным. Дальше система автоматически (на основании знаний о структуре формы) определит элемент формы, в котором отображается необходимая информация. Затем в привязке к этому элементу формы будет отображено сообщение. Свойство Полеможет содержать описание данных в следующем формате: ● для реквизитов – строка вида ИмяРеквизита, например, Поставщик, Поставщик.Родитель; ● для реквизитов табличных частей – строка вида ИмяТабличнойЧасти[ИндексСтроки].ИмяРекизита, например, Номенклатура[10].Количество; ● для строк наборов записей – строка вида [ИндексСтроки].ИмяРеквизита, например, [10].Валюта. ● Свойство ИдентификаторНазначенияописывает, к какой форме должно быть привязано сообщение. Например, если сообщение формируется из формы, отображаемой на начальной странице, указание свойства ИдентификаторНазначенияпозволит отобразить сообщение, привязанное к той форме, из которой выполнялось формирование сообщения. Если в сообщении свойство КлючДанныхзаполнено и не совпадает с ключевым значением основного реквизита текущей формы (ссылкой объекта или ключом записи регистра сведений), то открывается новая форма объекта, соответствующая значению свойства КлючДанных. ● Если у сообщения свойство ПутьКДаннымне заполнено, то в него проставляется имя основного реквизита открытой формы объекта, вызывается показ сообщения во вновь открытой форме. Кроме того, выполняется перенос всех сообщений со свойством КлючДанных, равным значению этого свойства текущего сообщения, из окна текущей формы в открытую форму. При этом перенесенным сообщениям аналогичным образом проставляется свойство ПутьКДанным, если оно не установлено. Для заполнения пути к данным используется специальный механизм системы, который сохраняет информацию о соответствии элементов формы и объектов, а потом использует ее при вызове метода УстановитьДанные(). Таким образом, до выполнения процедур модуля объекта, в которых формируются сообщения, должно быть установлено соответствие между реквизитами формы и объектами, а в самом модуле разработчику нужно вызывать метод УстановитьДанные(). При выполнении стандартных действий с объектом в форме, например, при проведении документа, расширение формы само создает объект и само устанавливает соответствие. Поэтому в этих случаях разработчику не нужно предпринимать никаких действий. ПРИМЕЧАНИЕ. Если при записи нового объекта (плана обмена, справочника, документа, элемента плана счетов, элемента плана видов характеристик, элемента плана видов расчета, бизнес-процесса, задачи) в транзакции формировались сообщения пользователю, то при отмене транзакции в сообщениях очищаются ссылки на данный объект (свойство КлючДанных). Ниже описывается, как установить соответствие, если объект создается из данных формы программно. Связь между объектом и формой может быть задана явно, путем вызова метода, или неявно. Для явной установки соответствия используется метод УстановитьСоответствиеОбъектаФормы(). В качестве второго параметра в метод передается информация о том, в какой форме отображается объект (свойство ИдентификаторФормы) и в каком реквизите указанной формы хранится объект данных (свойство Реквизит) для последующей установки правильного соответствия сообщений и элементов управления формы: Параметры = Новый Структура; Параметры.Вставить("ИдентификаторФормы", УникальныйИдентификатор); Параметры.Вставить("Реквизит", "Объект"); УстановитьСоответствиеОбъектаИФормы(Объект, Параметры); Установленное соответствие будет существовать до тех пор, пока существует объект, для которого установлено соответствие. Для того чтобы сообщение использовало данные соответствия объекта и имени реквизита, необходимо связать сообщение с данными через метод УстановитьДанные()объекта СообщениеПользователю. ОбъектСправочник = СсылкаСправочник.ПолучитьОбъект(); Параметры = Новый Структура; Параметры.Вставить("ИдентификаторФормы", ИдентификаторФормы); Параметры.Вставить("Реквизит", "Объект"); УстановитьСоответствиеОбъектаИФормы(ОбъектСправочник, Параметры); ОбъектСправочник.ПроверитьЗаполнение(); Нужно понимать, что в методе УстановитьСоответствиеОбъектаИФормы()указывается имя реквизита для той формы, которая будет открыта по умолчанию для отображения элемента используемого справочника (в примере ОбъектСправочник). Тогда сообщения, которые создаются в обработчике проверки заполнения (ОбъектСправочник.ПроверитьЗаполнение()), будут корректно привязаны к реквизитам новой формы. Если свойство ИндентификаторФормыструктуры Параметры(в примере выше) содержит уникальный идентификатор, который не соответствует ни одному экземпляру формы, то для отображения сообщения будет создана и открыта новая форма. Получить соответствие можно методом ПолучитьСоответствиеОбъектаИФормы(). Получить соответствие можно до тех пор, пока существует объект, для которого оно установлено. ОписаниеСоответствия = ПолучитьСоответствиеОбъектаИФормы(Объект); Если для переданного объекта существует соответствие с реквизитом, имя реквизита будет возвращено как результат работы функции. Кроме того, соответствие может быть установлено формой при использовании метода РеквизитФормыВЗначение(). В большинстве случаев рекомендуется использовать именно этот способ. // Код в модуле документа. &НаСервере Процедура ОбработкаПроведения()... Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = "В строке 10 табличной части " + "Номенклатура не хватает " + НедостающееКоличество + " " + ЕдиницаИзмеренияНоменклатуры; Сообщение.Поле = "Номенклатура[9].Количество"; Сообщение.УстановитьДанные(ЭтотОбъект); Сообщение.Сообщить(); // Сообщение будет показано в форме и привязано к // элементу управления, связанному с полем // Количество в 10-й строке табличной части // Номенклатура.... КонецПроцедуры; В случае если создание сообщений пользователю (с помощью объекта СообщениеПользователю) выполняется во время контекстного или неконтекстного серверного вызова из формы, вызова из общего модуля или из модуля общей команды, вывод сообщений блокируется. Созданные сообщения будут показаны пользователю после возврата управления на клиентскую сторону. Для получения списка непоказанных сообщений используется метод ПолучитьСообщенияПользователю(). 6.3.5. Работа сочетаний клавиш В независимом вспомогательном окне срабатывают сочетания клавиш: ● команд панели навигации главного окна; ● команд панели действий главного окна; ● команд самого вспомогательного окна (как команд формы, так и команд панели навигации). При этом сочетания клавиш команд основного окна срабатывают, даже если команда, вызываемая тем или иным сочетанием клавиш, невидима, например, была скрыта пользователем. Во вспомогательных окнах не срабатывают сочетания клавиш скрытых команд панели навигации формы и скрытых элементов формы. В блокирующих окнах работают только сочетания клавиш самих окон, а сочетания клавиш команд главного окна не поддерживаются. 6.4. Порядок разработки командного интерфейса При разработке командного интерфейса обычно выполняется следующая последовательность действий: ● в начале разработки конфигурации определяется ее структура с точки зрения предметной области, т. е. создается дерево подсистем конфигурации; ● создается состав ролей, т. е. определяется, для кого предназначена данная конфигурация; ● при создании новых объектов конфигурации (справочников, документов и т. д.), как правило, они сразу относятся к тем или иным подсистемам, для объектов назначаются права доступа по ролям; ● если не устраивает стандартное расположение команд и их видимость по умолчанию, то выполняется редактирование свойства Командный интерфейс необходимых подсистем и редактирование состава команд тех форм, в которых автоматически размещены параметризованные команды необходимых объектов (перехода к подчиненному списку и ввода на основании). Уже эти минимальные действия приведут к тому, что в соответствующих разделах командного интерфейса появятся команды открытия форм списков объектов, команды ввода новых объектов (если включена их видимость в редакторе фрагмента командного интерфейса). Кроме того, если это определено в свойствах объекта, в формах других объектов конфигурации появятся команды ввода на основании, перехода к списку по регистратору, перехода к списку по владельцу и т. д. Рассмотрим пример создания документа Расход товара. При его создании мы сделаем следующее: ● укажем, что документ будет относиться к подсистемам Торговый учет и Бухгалтерия; ● установим ролям Менеджер по продажам и Администратор права на работу с этим документом; ● укажем, что документ вводится на основании документов Счет и Заказ покупателя; ● укажем, что он является регистратором для регистра Остатки товаров на складах. Эти действия приведут к появлению команды Расход товара в панели навигации раздела Торговый учет в том случае, если пользователь обладает ролью Менеджер по продажам или административными правами. Кроме того, в формах документов Счет и Заказ покупателя появится команда подменю Создать на основании, предназначенная для ввода расходной накладной. Нам не понадобилось редактировать интерфейсы для пользователей с такими ролями и формы документов Счет и Заказ покупателя. Стандартное представление команды перехода к списку накладных (Расход товара) может выглядеть неточным. Для его переопределения заполним свойство Представление списка документа РасходТовараи укажем там Продажи. Допустим, что нас не устраивает представление объекта по умолчанию (которое участвует в представлении команд) и мы хотим изменить его так, чтобы представление команды ввода на основании читалось следующим образом: Продажа: создать на основании. Для этого необходимо заполнить свойство Представление объекта документа Расход товара текстом Продажа. Теперь обратим внимание на то, что при стандартном размещении команды она находится в середине списка команд раздела Торговый учет. Предположим, что команда достаточно важна для этого раздела. Мы переходим к редактору Все подсистемы (или к редактору командного интерфейса подсистемы Торговый учет) и переносим команду в группу Важное. Раздел Бухгалтерия при этом не трогаем, оставляя там размещение команды по умолчанию. Наконец, обратим внимание на видимость команд по умолчанию. В форме документа Расход товара появилась команда перехода к списку записей регистра Остатки товаров на складах, но она по умолчанию невидима. Предположим, что эта команда важна для администратора системы и действительно по умолчанию не нужна менеджеру. Для того чтобы это отразить, создадим форму документа Расход товара, перейдем к редактированию командного интерфейса и для команды перехода к списку регистра установим видимость для роли Администратор, а видимость для менеджера менять не будем. Для администратора системы с его широкими правами доступа число команд оказалось слишком большим. Предположим далее, что командой перехода к списку расходных накладных он будет пользоваться крайне редко. Для того чтобы облегчить его командный интерфейс, опять перейдем к редактированию команд в редакторе Все подсистемы и для нашей команды снимем видимость для роли Администратор. Также можно для менеджера по продажам установить видимость по умолчанию для команды добавления документа Расход товара в панели действий, чтобы он смог вызывать ввод этого документа без обращения к списку документов. В процессе работы с конфигурацией пользователь может настраивать видимость команд по своему усмотрению. Глава 7. Формы Форма – это объект, созданный для ввода и просмотра какой-либо информации, а также для выполнения управления различными процессами. С помощью форм программа запрашивает у пользователя ту информацию, которая необходима ей для дальнейшей работы, либо выдает какую-либо информацию пользователю для просмотра и редактирования. Основное назначение формы – предоставить пользователю удобное средство для ввода и просмотра информации. Как и бумажный документ, форма позволяет быстро ввести необходимую информацию и запомнить ее для последующей обработки, а при необходимости вновь вернуться к ранее введенным данным для просмотра или корректировки. Отображаемая часть формы (видимая пользователю) описывается как дерево, включающее элементы формы. Элементы могут представлять собой поля ввода, флажки, переключатели, кнопки и т. д. Кроме того, элемент может быть группой, включающей другие элементы. Группа может представляться как панель с рамкой, панель со страницами (закладками), собственно страница, командная панель. Помимо этого элемент может представлять собой таблицу, которая тоже включает элементы (колонки). Структура элементов описывает то, как будет выглядеть форма. А вся функциональность формы описывается в виде реквизитов и команд. Реквизиты – это данные, с которыми работает форма, а команды – выполняемые действия. Таким образом, разработчик в редакторе формы должен включить в форму необходимые реквизиты и команды, создать отображающие их элементы формы и, если необходимо, скомпоновать элементы в группы. СОВЕТ. Разработку форм рекомендуется выполнять в разрешении 96 dpi. Система может автоматически создавать форму прикладного объекта, но разработчик может сам создать форму и определить состав ее реквизитов, команд и отображаемых элементов. На основе этого логического описания система автоматически формирует внешний вид формы для отображения пользователю. При этом системой учитываются различные свойства отображаемых данных (например, тип), чтобы максимально удобно для пользователя расположить элементы формы. Разработчик может влиять на расположение элементов различными установками. Он может определять порядок элементов, указывать желаемую ширину и высоту. Однако это является только некоторой дополнительной информацией, помогающей системе отобразить форму. В формах разработчик может использовать не только команды самой формы, но и глобальные команды, используемые в командном интерфейсе всей конфигурации. Кроме того, реализована возможность создания параметризуемых команд, которые будут открывать другие формы с учетом конкретных данных текущей формы. Например, это может быть вызов отчета по остаткам на том складе, который выбран сейчас в форме расходной накладной. В формах существует механизм привязки сообщений, выдаваемых пользователю, к данным формы. Это позволяет системе визуально отмечать и активизировать элементы формы, при заполнении которых пользователь допустил ошибку. Также форма автоматически учитывает ролевую доступность данных. Так, например, если какой-либо реквизит отображаемого объекта недоступен для просмотра определенному пользователю, то система автоматически удалит связанный с этим реквизитом элемент формы и перестроит форму. Форма создается в редакторе формы, который доступен в режиме Конфигуратор (см. здесь). В этом редакторе определяются: ● Реквизиты формы – предназначены для хранения данных, с которыми работает форма (см. здесь). ● Параметры формы – предназначены для организации связи между формами и управления функциональностью формы при ее открытии (см. здесь). ● Команды формы – предназначены для выполнения различных действий внутри формы (см. здесь). ● Модуль формы – содержит программный код, связанный с функционированием формы (см. здесь). ● Элементы формы – предназначены для отображения и редактирования реквизитов формы, а также для отображения и выполнения команд (см. здесь). ● Командный интерфейс – содержит команды, которые могут выполняться в форме и предоставлены глобальным командным интерфейсом и командами формы (см. здесь). ВНИМАНИЕ! Формы одновременно присутствуют и на стороне сервера, и на стороне клиента. Об этом всегда следует помнить при разработке формы. 7.1. Реквизиты формы Набор реквизитов формы описывает состав данных, которые отображаются, редактируются или хранятся в форме. При этом реквизиты формы сами по себе не обеспечивают возможности отображения и редактирования данных. Для отображения и редактирования служат элементы формы, связанные с реквизитами формы. Совокупность всех реквизитов формы будем называть данными формы. ВНИМАНИЕ! Необходимо помнить, что все данные формы должны быть описаны в виде реквизитов. Не допускается использование переменных модуля формы в качестве источников данных для элементов формы. В процессе разработки формы можно явно задать возможность просмотра и редактирования конкретных реквизитов формы, в разрезе ролей, с помощью свойств Просмотр и Редактирование (подробнее см. здесь). Кроме того, доступность того или иного реквизита в самой форме можно настраивать с помощью функциональных опций (подробнее о функциональных опциях см. здесь). Имеется возможность назначить Основной реквизит формы, т. е. реквизит, который будет определять стандартную функциональность формы (расширение формы). ВНИМАНИЕ! Следует помнить, что основной реквизит у формы может быть только один. Расширение формы – это дополнительные свойства, методы и параметры формы объекта УправляемаяФорма, характерные для типа, определяющего основной элемент формы. 7.1.1. Типы данных формы Форма оперирует ограниченным набором типов данных: ● Типы, которые непосредственно используются в форме, – это те типы, которые существуют на стороне тонкого клиента и веб-клиента (например, Число, СправочникСсылка.Товары, ГрафическаяСхема, ТабличныйДокумент). ● Типы, которые будут преобразованы в специальные типы данных, – типы данных формы. Такие типы отображаются в списке реквизитов формы в круглых скобках, например (СправочникОбъект.Товары). ● Динамический список – специальный тип данных, который позволяет организовать отображение на форме произвольной информации из таблиц базы данных. Для этого необходимо указать отображаемую таблицу или описать получаемую выборку на языке запросов. Механизм основан на системе компоновки данных и предоставляет возможности для сортировки, отбора, поиска, группировки и условного оформления получаемых данных. Некоторые прикладные типы (такие как СправочникОбъекти т. д.) не существуют на стороне тонкого клиента и веб-клиентов. Поэтому для представления в форме таких прикладных типов в платформе введены специальные типы данных, предназначенные для работы в формах. Эта особенность обуславливает необходимость выполнять преобразование прикладных объектов в данные формы (и обратно). Используются следующие типы данных: ● ДанныеФормыСтруктура– содержит набор свойств произвольного типа. Свойствами могут быть другие структуры, коллекции или структуры с коллекциями. Таким типом представляется, например, в форме СправочникОбъект. ● ДанныеФормыКоллекция– это список типизированных значений, похожий на массив. Доступ к элементу коллекции осуществляется по индексу или по идентификатору. В коллекциях, полученных на основе наборов записей регистров или табличных частей объектов, поле элемента коллекции НомерСтрокине соответствует реальному индексу элемента коллекции. Доступ по идентификатору может отсутствовать в некоторых случаях. Это обусловлено типом прикладного объекта, который представлен этой коллекцией. Идентификатором может быть любое целое число. Таким типом представляется, например, в форме табличная часть. ● ДанныеФормыСтруктураСКоллекцией– это объект, который представлен в виде структуры и коллекции одновременно. С ним можно обращаться как с любой из этих сущностей. Таким типом представляется, например, в форме набор записей. ● ДанныеФормыДерево– объект предназначен для хранения иерархических данных. ВНИМАНИЕ! Не рекомендуется использовать данные формы в качестве параметров процедур и функций, выполняющих передачу управления с клиента на сервер, а также в качестве возвращаемых значений функций, если при этом управление передается на клиента. ВНИМАНИЕ! При вызове серверных процедур и функций и возврате управления на клиента выполняется передача только изменений в данных формы. Если в качестве типа реквизита формы выбран тип Произвольный и в качестве значения реквизита выбрано мутабельное значение, то для того, чтобы данные между клиентом и сервером (и обратно) передавались корректно, нужно после изменения мутабельного значения снова его присвоить реквизиту формы. Прикладной объект представлен либо одним, либо несколькими элементами данных формы. В общем виде иерархия и состав данных формы зависят от сложности и взаимосвязи прикладных объектов формы. Например, документ, содержащий табличную часть, будет представлен объектом типа ДанныеФормыСтруктура(собственно документ), которому подчинен объект типа ДанныеФормыКоллекция(табличная часть документа). ВНИМАНИЕ! Во время разработки конфигурации важно помнить, что прикладные объекты доступны только на сервере, в то время как объектами данных форм можно пользоваться и на сервере, и на клиенте. При формировании реквизитов формы необходимо учитывать ряд ограничений: ● Запрещено присваивание реквизитам формы значений типа Массиви Соответствие. ● Для реквизитов произвольного типа объектов ДанныеФормыСтруктура, ДанныеФормыЭлементКоллекции, ДанныеФормыЭлементДерева, ДанныеФормыСтруктураСКоллекциейзапрещается присваивание значений типа Массиви Соответствие. ● Не рекомендуется использовать значения типов Массиви Соответствиев качестве элементов коллекций типа Структураили СписокЗначений. ● В вышеперечисленных случаях рекомендуется использовать фиксированные коллекции: ФиксированныйМассив, ФиксированноеСоответствие. ● Не рекомендуется использовать типы Структураи СписокЗначенийв данных реквизитов формы (т. е. в реквизитах реквизитов). Фактически можно сказать, что данные формы – это унифицированное представление данных различных прикладных объектов, с которыми форма работает единообразно и которые присутствуют и на сервере, и на клиенте. То есть форма содержит некоторую «проекцию» данных прикладных объектов в виде своих собственных типов данных и выполняет преобразование между ними при необходимости. Однако если разработчик конфигурации реализует свой алгоритм обработки данных, то преобразование данных (из специализированных типов в прикладные и обратно) он должен выполнять самостоятельно. При редактировании реквизитов формы имеется возможность влиять на передачу данных между клиентом и сервером во время работы формы. Для этого служит колонка редактора реквизитов Использовать всегда. Действие этого свойства различается для трех типов реквизитов: ● Для реквизита, подчиненного динамическому списку (колонке динамического списка): ● Свойство включено – реквизит всегда считывается из базы данных и включается в данные формы. ● Свойство выключено – реквизит считывается из базы данных и включается в данные формы только тогда, когда есть видимый в данный момент элемент формы, связанный с реквизитом или его подчиненным реквизитом. ● Для реквизита, подчиненного коллекции движений: ● Свойство включено – движения документа считываются из базы данных и будут присутствовать в данных формы. ● Свойство выключено – движения документа не будут считываться из базы данных и не попадут в данные формы (если нет элемента формы, ссылающегося на движения документа). ● Остальные реквизиты формы: ● Свойство включено – реквизит будет присутствовать в данных формы вне зависимости от того, есть или нет хоть один элемент формы, который связан с реквизитом или его подчиненным реквизитом. ● Свойство выключено – реквизит будет присутствовать в данных формы только в том случае, если есть элемент формы, связанный с реквизитом или его подчиненным реквизитом. В отличие от реквизитов динамического списка, здесь не играет роли видимость элемента, связанного с реквизитом. ПРИМЕЧАНИЕ 1. Следует помнить, что свойство, установленное у родительского реквизита, действует на все подчиненные реквизиты. Например, если свойство Использовать всегда снято у табличной части документа, то система считает, что это свойство снято и у всех подчиненных реквизитов (несмотря на фактическое состояние свойства). ПРИМЕЧАНИЕ 2. Для реквизитов формы, имеющих объектный тип (СправочникОбъект, ДокументОбъекти т. д.), реквизиты Ссылка, ПометкаУдаления и ЭтоГруппавсегда присутствуют в данных формы (если соответствующий реквизит есть у объекта), вне зависимости от состояния свойства Использовать всегда. ПРИМЕЧАНИЕ 3. Запрещено присваивание реквизитам данных формы значений других объектов данных формы. Если в редакторе реквизитов (колонка Тип) описание типа отображается в круглых скобках, например (СправочникОбъект.Товары), то это означает, что прикладной тип будет преобразован к типам, образующим данные формы. Если в данных формы оказывается недопустимый тип (например, как реквизит реквизита формы), то в редакторе реквизитов формы, рядом с именем типа данного реквизита, будет выводиться надпись (Недоступен в данных формы). В режиме 1С:Предприятие поле формы, соответствующее данному реквизиту, не будет создано. Никаких ошибок выводиться не будет. При копировании и редактировании объектов, содержащих такие данные, следует самостоятельно реализовывать программный код, обеспечивающий копирование и работу с такими реквизитами в форме. Далее рассмотрим некоторые особенности реквизитов форм разных типов: ● Для реквизитов формы типа ТаблицаЗначенийи ДеревоЗначенийимеется возможность добавлять колонки (команда Добавить колонку реквизита). Это определяет структуру данных создаваемой коллекции. ● Для реквизитов типа ДанныеФормыКоллекция(например, табличные части объектов) и ДанныеФормыСтруктураСКоллекцией(например, наборы записей регистров) имеется возможность задавать дополнительные колонки реквизитов (команда Добавить колонку реквизита), которые не имеют связи с данными, хранящимися в информационной базе. Эти колонки будут создаваться системой в момент создания данных формы. Обращение к таким реквизитам доступно как на клиенте, так и на сервере. Пример заполнения колонки реквизита, не связанной с данными: &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) Для Каждого Строка Из Объект.Товары Цикл // ВидТовара – реквизит, не связанный с данными Строка.ВидТовара = Строка.Товар.Вид; КонецЦикла КонецПроцедуры ● Для реквизита типа СписокЗначенийимеется возможность установить тип значения (свойство Тип значения), которое будет хранить список. При этом система будет автоматически ограничивать тип добавляемых данных при интерактивном добавлении. Также при этом не запрещается программное добавление, но будет выполняться попытка приведения значения добавляемого типа к ограничивающему типу (или составному типу). Свойство Тип значения также можно связать с элементом формы и получить возможность интерактивно ограничивать типы данных, которые могут быть добавлены в список значений. ● Для реквизита типа ДинамическийСписокимеется возможность задать параметры списка: основную таблицу, настройки и т. д. Подробнее см. здесь. ВНИМАНИЕ! Колонки реквизитов, не связанные с данными, не участвуют в преобразовании значений между данными формы и объектами информационной базы и обратно. Описание свойств Просмотр и Редактирование см. здесь. Изменения данных формы отображаются элементами формы после окончания выполнения встроенного языка или после принудительного вызова метода ОбновитьОтображениеДанных(). Рассмотрим пример. Допустим, в форме есть реквизит Счетчиктипа Число. Этот реквизит отображается на форме полем типа Поле индикатора. Пусть есть некоторое действие, ход выполнения которого должен отображаться индикатором. Действие вызывается нажатием кнопки на форме: Процедура ОбработчикКомандыФормы() Для Счетчик=1 по 100 Цикл ВыполнитьДействие(); КонецЦикла КонецПроцедуры Если нажать кнопку, инициирующую эту команду, в режиме 1С:Предприятия, то индикатор вначале будет в крайнем левом положении, а потом – сразу в крайнем правом (считаем, что метод ВыполнитьДействие()выполняется какое-то время, что должно позволить увидеть изменение индикатора). То есть индикатор обновится только после того, как закончится исполнение обработчика команды. Для того чтобы индикатор отображал ход выполнения процесса, нужно код обработчика заменить нижеследующим: Процедура ОбработчикКомандыФормы() Для Счетчик=1 по 100 Цикл ВыполнитьДействие(); ОбновитьОтображениеДанных(); КонецЦикла КонецПроцедуры После такого изменения индикатор начнет изменяться во время исполнения кода, расположенного в обработчике команды. ПРИМЕЧАНИЕ. В веб-клиенте вызов метода ОбновитьОтображениеДанных()приведет к обновлению элементов формы только после окончания выполнения кода на встроенном языке. 7.1.2. Преобразование данных прикладных объектов в данные формы и обратно Для конвертирования прикладных объектов в данные формы и обратно существует набор глобальных методов: ● ЗначениеВДанныеФормы(), ● ДанныеФормыВЗначение(), ● КопироватьДанныеФормы(). Методы, работающие с прикладными объектами, доступны только в серверных процедурах. Метод для копирования значений между данными формы доступен на сервере и на клиенте, так как не требует прикладных объектов в качестве параметров. Во время конвертирования данных формы в прикладной объект нужно учитывать их совместимость. ● ЗначениеВДанныеФормы()– преобразует объект прикладного типа в данные формы. ● ДанныеФормыВЗначение()– преобразует данные формы в объект прикладного типа. ● КопироватьДанныеФормы()– производит копирование данных формы, обладающих совместимой структурой. Возвращает значение Истина, если копирование произведено, или Ложь, если структура объектов несовместима. При преобразовании данных формы в прикладные объекты и обратно используется кеширование объектов, но при этом выполняется проверка актуальности версии объекта в кеше. ПРИМЕЧАНИЕ. При выполнении стандартных действий (открытие формы, выполнение стандартной команды Записатьи т. д.) в форме с основным реквизитом преобразование выполняется автоматически. Приведем пример, как использовать преобразование данных в собственных алгоритмах. &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) ОбъектТовар = Товары.НайтиПоНаименованию("Кофейник").ПолучитьОбъект(); ЗначениеВДанныеФормы(ОбъектТовар, Объект); КонецПроцедуры &НаКлиенте Процедура Записать() ЗаписатьНаСервере(); КонецПроцедуры &НаСервере Процедура ЗаписатьНаСервере() ОбъектТовар = ДанныеФормыВЗначение(Объект, Тип("СправочникОбъект.Товары")); ОбъектТовар.Записать(); КонецПроцедуры Также у объекта УправляемаяФормасуществуют методы, доступные на сервере: ● ЗначениеВРеквизитФормы()– выполняет преобразование объекта прикладного типа в заданный реквизит формы. ● РеквизитФормыВЗначение()– преобразует реквизит данных формы в объект прикладного типа. Использование данных методов обычно удобнее, так как они имеют, например, информацию о типе реквизита формы. Кроме того, метод РеквизитФормыВЗначение()выполняет установку соответствия данных формы и объекта, которая используется при формировании сообщений (см. здесь). Также следует помнить, что при преобразовании в данные формы (как с помощью метода ЗначениеВДанныеФормы(), так и с помощью метода ЗначениеВРеквизитФормы()) объектов типа ТаблицаЗначенийили ДеревоЗначенийнужно учитывать следующую особенность: в преобразуемом объекте должны существовать все колонки, которые существуют в данных формы. ВНИМАНИЕ! Колонки реквизитов, не связанные с данными (см. здесь), не участвуют в преобразовании значений между данными формы и объектами информационной базы и обратно. Колонки, отсутствующие в данных объекта, очищаются при преобразовании в данные формы. ПРИМЕЧАНИЕ. В качестве первого параметра методов РеквизитФормыВЗначение()и ДанныеФормыВЗначение()могут выступать только реквизиты формы следующих типов: ДанныеФормыСтруктура, ДанныеФормыКоллекция, ДанныеФормыСтруктураСКоллекцией, ДанныеФормыДерево. Приведем пример использования этих методов. &НаСервере Процедура ПересчитатьНаСервере() // Преобразует реквизит Объект в прикладной объект. Документ = РеквизитФормыВЗначение("Объект"); // Выполняет пересчет методом, определенным в модуле документа. Документ.Пересчитать(); // Преобразует прикладной объект обратно в реквизит. ЗначениеВРеквизитФормы(Документ, "Объект"); КонецПроцедуры 7.1.3. Динамический список Динамический список является специальным типом данных, который позволяет отображать на форме произвольную информацию из таблиц базы данных. Для этого нужно указать таблицу, данные из которой необходимо отобразить, или описать получаемую выборку на языке запросов. Механизм основан на системе компоновки данных и предоставляет возможности для сортировки, отбора, поиска, группировки и условного оформления получаемых данных. При этом источником данных служит запрос, который либо формируется системой автоматически (на основании указанных данных), либо пишется разработчиком вручную. Рис. 149. Варианты создания динамического списка При создании реквизита формы типа ДинамическийСписокразработчик может выбрать два способа формирования запроса к данным: ● Заданием основной таблицы – в этом случае достаточно просто указать таблицу (свойство Основная таблица), из которой необходимо получать данные, и система будет автоматически формировать запрос к данным (см. правую часть на рис. 149). ● Ручным формированием запроса – для этого нужно установить свойство Произвольный запрос (см. левую часть рис. 149). После этого будет доступно ручное формирование запроса получения данных из информационной базы. С помощью запроса можно выполнять выборку данных из нескольких таблиц, поэтому можно указать основную таблицу. Это нужно для того, чтобы динамический список мог определить, какие данные главные, а какие – второстепенные, и мог правильно выбирать и отображать информацию, а также предоставлять стандартные команды. Однако если в запросе невозможно определить основную таблицу, то ее можно не указывать, но тогда динамический список не будет предоставлять команды, связанные с основной таблицей. Если выбрано ручное формирование запроса, то на запрос налагаются некоторые ограничения: ● Динамический список не поддерживает работу с пакетными запросами. ● Динамический список не поддерживает в запросе объединения, если задана основная таблица. ● В динамических списках не поддерживается группировка, сортировка и отбор по реквизитам табличных частей. ● Динамический список не должен содержать секции УПОРЯДОЧИТЬ ПО, если задана основная таблица. Нужно использовать запрос без основной таблицы или задавать необходимое упорядочивание через настройки динамического списка. ● В числе полей запроса нельзя использовать поля подзапросов, возвращающих множественное количество значений. Необходимо использовать запрос без основной таблицы. ● Запрос не может содержать группировок и агрегатных функций, если задана основная таблица. Нужно использовать запрос без основной таблицы или задавать необходимые группировки через настройки динамического списка. ● Если динамический список отображается в виде иерархического списка или дерева, запрос не должен содержать условий отбора по родителю. ● Если динамический список отображается в виде иерархического списка или дерева, запрос должен быть построен так, чтобы в результате запроса присутствовали как элементы, так и их родители. ● Не поддерживается сортировка в динамическом списке, если запрос содержит агрегатные функции. ● В случае указания основной таблицы динамического списка запрос не должен содержать инструкций ПЕРВЫЕи РАЗЛИЧНЫЕ. ● В случае указания произвольного запроса, этот запрос не должен содержать инструкцию ПЕРВЫЕ. ● Не поддерживается указание в качестве основной таблицы динамического списка таблицы, которая используется в запросе только во внешнем соединении. ● Не рекомендуется использовать соединения таблиц внутри блока ИЗзапроса динамического списка, если эти соединения указаны с помощью расширения языка запросов для системы компоновки данных (в фигурных скобках). Рекомендуется переписать запрос, избавившись от таких соединений. При создании динамического списка нужно учитывать следующие особенности: ● Не поддерживается указание табличных частей объектов в качестве основной таблицы динамического списка. ● В качестве основной таблицы не могут быть выбраны таблицы регистрации изменений (используемые в механизмах обмена данными), таблицы последовательностей и таблицы перерасчетов (используемые в механизмах периодических расчетов). ● Если запрос, заданный для динамического списка, не обеспечивает уникальность выбираемых строк, то отображение строк списка и прокрутка будут выполняться некорректно. Другими словами, динамический список с указанной основной таблицей будет работать корректно в том случае, если в результате выполнения запроса, указанного в качестве источника данных, не увеличивается количество строк, получаемых из основной таблицы (с учетом наложенного отбора). Если же в результате выполнения запроса количество строк, получаемых запросом из основной таблицы, увеличивается, это будет приводить к нарушению уникальности ключа записей таблицы, отображаемой списком. В этом случае необходимо отключить использование основной таблицы. ● При программном изменении свойств динамического списка не происходит автоматического повторного заполнения командных панелей, связанных с этим динамическим списком. ● Для динамического списка, который отображает список перечисления, отсутствует возможность интерактивной настройки списка. Если форма списка предполагает отбор по связанным данным (например, отбор по владельцу в списке подчиненного справочника), то запрос формирования динамического списка в этом случае должен включать поле, содержащее ссылку на родительский элемент. Это поле должно иметь имя соответствующего стандартного реквизита: Владелец, Родитель, БизнесПроцесси т. д. В том случае, когда это требование не соблюдается, стандартная команда перехода к подчиненному списку сработает, но отбор установлен не будет. Если по какой-то причине выполнить требование не представляется возможным, следует отказаться от использования стандартных команд и реализовывать собственные команды для открытия таких списков. В том случае, если динамический список отображает данные, источником которых (свойство Основная таблица) является виртуальная таблица (см. здесь), для которой определены параметры НачалоПериодаи КонецПериода, то при установке пользователем периода отображения (команда Установить интервал дат...), заданные границы периода подставляются непосредственно в параметры виртуальной таблицы. В качестве параметра запроса динамического списка может выступать массив или список значений. Однако если параметром является список значений, то в качестве значения отбора будет использовано только первое значение списка. В случае если динамический список использует запрос с параметрами, первоначальная установка значений параметров должна выполняться в обработчике ПриСозданииНаСервере. Для динамического списка, являющегося основным реквизитом формы, имеется возможность устанавливать значения отбора с помощью параметра формы Отбор(подробнее о параметрах формы см. здесь). Для этого необходимо, чтобы имя свойства структуры, находящееся в параметре Отбор, совпало с именем поля отбора динамического списка. В этом случае значение свойства структуры будет установлено в качестве правого значения элемента отбора. Если в качестве значения элемента параметра Отборформы динамического списка передан массив, фиксированный массив или список значений, то в отбор добавляется условие с вариантом В Списке, в правое значение которого помещается список значений (в который преобразуются массив и фиксированный массив). В качестве произвольного запроса в динамическом списке может выступать запрос, в котором для формирования значения какого-либо поля используется параметр, например: ВЫБРАТЬ ВЫБОР КОГДА Доставка.Коэффициент = 1 ТОГДА &Представление ИНАЧЕ Доставка. Коэффициент КОНЕЦ КАК Коэффициент ИЗ Документ.ДоставкаПродукции КАК Доставка При этом если тип значения параметра отличается от типа реквизита объекта (например, Реквизит1имеет тип Число, а значение параметра – тип Строка), то для корректного отображения поля следует выполнить явное приведение значения параметра к нужному типу: ВЫБРАТЬ ВЫБОР КОГДА Доставка.Коэффициент = 1 ТОГДА ВЫРАЗИТЬ(&Представление КАК Строка(100)) ИНАЧЕ Доставка. Коэффициент КОНЕЦ КАК Коэффициент ИЗ Документ.ДоставкаПродукции КАК Доставка Если поле, по которому устанавливается отбор, отключено с помощью функциональных опций, то отбор по такому полю не устанавливается, даже если значение отбора передано в качестве параметров формы или связей параметров выбора. С помощью свойства Динамическое считывание данных динамическому списку указывается на необходимость считывать данные небольшими порциями. Независимо от этого признака действуют следующие условия: ● если установлен режим просмотра в виде иерархического списка, будут считываться только данные текущей группы; ● если установлен режим просмотра в виде дерева, то будут считываться только данные открытых узлов дерева; ● не поддерживается единовременная загрузка данных динамического списка в случае установленного иерархического просмотра (свойство Отображение установлено в значение Дерево или Иерархический список) и начальном отображении дерева, установленном в значение Раскрывать все уровни. Для получения данных будет выполнено столько запросов к серверу, сколько узлов находится в отображаемом списке. При получении данных для отображения динамический список использует один из трех способов: 1. Считывание из базы данных выполняется порциями с количеством элементов данных, равным количеству строк, одновременно отображаемых списком. Не выполняется кеширование данных на сервере. 2. Считывание из базы данных выполняется порциями по 1000 элементов данных. Выполняется кеширование данных на сервере. 3. Считывание из базы данных выполняется порциями. Первая порция равна 1000 элементов. Каждая следующая порция увеличивается на 1000 элементов (при достижении конца предыдущей выборки). Чем ближе передвигается «точка просмотра» к концу отображаемых данных, тем большая выборка считывается из базы данных, в пределе становясь равной всем отображаемым данным. Выполняется кеширование данных на сервере. В зависимости от того, что выбрано основной таблицей динамического списка и какое значение принимает свойство Динамическое считывание, используются те или иные способы считывания данных: ● В качестве значения свойства Основная таблица указана одна из следующих таблиц: план обмена, справочник, список документов, журнал документов, план видов характеристик, план счетов, план видов расчета, бизнес-процесс, задача, таблица точек бизнес-процесса. ● Ключ, идентифицирующий строку таблицы: Ссылка. ● Установлено свойство Динамическое считывание: используется способ 1 (описание способов приведено выше). ● Снято свойство Динамическое считывание: используется способ 2 (описание способов приведено выше). ● В качестве значения свойства Основная таблица указана одна из следующих таблиц: основная таблица регистра сведений, регистра накопления, регистра бухгалтерии, регистра расчета, виртуальная таблица регистра бухгалтерии ДвиженияССубконто. ● Ключ, идентифицирующий строку таблицы: КлючЗаписи. ● Установлено свойство Динамическое считывание: используется способ 1 (описание способов приведено выше). ● Снято свойство Динамическое считывание: используется способ 2 (описание способов приведено выше). ● В качестве свойства Основная таблица указан одна из следующих таблиц: критерий отбора. ● Ключ, идентифицирующий строку таблицы: Ссылка. ● Свойство Динамическое считывание не применимо. ● Используется способ 2 (описание способов приведено выше). ● В качестве свойства Основная таблица указана виртуальная таблица регистра сведений СрезПервыхили СрезПоследних. ● Ключ, идентифицирующий строку таблицы: КлючЗаписи. ● Свойство Динамическое считывание не применимо. ● Используется способ 2 (описание способов приведено выше). ● В качестве свойства Основная таблица указана одна из виртуальных таблицы регистров, кроме перечисленных выше. ● Ключ, идентифицирующий строку таблицы: Число. ● Свойство Динамическое считывание не применимо. ● Используется способ 3 (описание способов приведено выше). ● Свойство Основная таблица не указано, используется произвольный запрос. ● Ключ, идентифицирующий строку таблицы: Число. ● Свойство Динамическое считывание не применимо. ● Используется способ 3 (описание способов приведено выше). Для отображения данные передаются на клиента порциями следующего размера: количество элементов данных, одновременно отображаемых списком, увеличенное на две строки. При создании формы, содержащей динамический список, первоначально на клиента передается 42 элемента данных каждого динамического списка (если в списке более 42 элементов). Если динамический список отображает более 42 строк, то при открытии формы на клиента будут переданы данные по стандартному алгоритму: количество элементов данных, одновременно отображаемых списком, увеличенное на две строки. В своей работе динамический список использует значения следующих свойств реквизитов объектов метаданных: ● формат, ● формат редактирования, ● подсказка, ● признак выделения отрицательных значений, ● маска, ● признак многострочного режима, ● признак расширенного редактирования, ● режим пароля. При отображении и редактировании отбора и параметров системы компоновки данных используется формат редактирования соответствующего поля. Свойство Настройка списка – нажатие на гиперссылку Открыть приводит к открытию формы настройки отображения динамического списка. Настройка списка выполняется таким же образом, как и аналогичные операции в системе компоновки данных. Рис. 150. Условное оформление динамического списка Во время настройки динамического списка в конфигурации разработчик прикладного решения имеет возможность сделать следующее: ● задать поля, по которым необходимо проводить упорядочивание; ● описать отбор данных в списке; ● указать настройки условного оформления; ● задать поля, по которым необходимо группировать данные. Задавать сортировку разработчику имеет смысл, если не устраивает устанавливаемая системой сортировка по умолчанию. СОВЕТ. Следует помнить о том, что неудачный выбор полей сортировки (равно как отбора и группировки данных) негативно влияет на эффективность динамической выборки. ВНИМАНИЕ! Не разрешается сортировка и группировка по полям, содержащим строки неограниченной длины. С точки зрения прикладного разработчика, настройки динамического списка состоят из нескольких частей, которые связаны между собой. Основным свойством, через которое можно управлять настройками динамического списка является КомпоновщикНастроек. Это объект содержит три набора настроек, которые при работе системы определяют окончательные настройки, применяемые к динамическому списку: ● Настройки– настройки, созданные в режиме Конфигуратора; ● ПользовательскиеНастройки– это настройки, которые изменяет пользователь в режиме «1С:Предприятие»; ● ФиксированныеНастройки– эти настройки задаются программно, из прикладного языка. Также в этой свойство попадают значения отбора, которые передаются в форму с помощью ее параметров. Свойства динамического списка Отбор, Порядок, Параметры, УсловноеОформление предоставляют быстрый доступ к фиксированным настройкам компоновщика настроек динамического списка. Другими словами, данные обращения являются эквивалентными: Список.КомпоновщикНастроек.ФиксированныеНастройки.Отбори Список.Отбор. При формировании окончательной настройки динамического списка, различные варианты настроек комбинируются следующим образом: ● Если какой-либо вид настроек целиком отмечен как пользовательский, то в результирующие настройки попадают пользовательские настройки (Список.КомпоновщикНастроек.ПользовательскиеНастройки). При этом если какие-либо элементы настроек отмечены как недоступные, то эти настройки будет помещены в результирующие настройки из свойства Список.КомпоновщикНастроек. Настройки. ● Если какой-либо вид настроек отмечен как пользовательский не целиком, а поэлементно, то: ● Элементы, отмеченные как пользовательские, попадут в результирующие настройки из свойства Список.КомпоновщикНастроек.ПользовательскиеНастройки. ● Элементы, отмеченные как недоступные, попадут в результирующие настройки из свойства Список.КомпоновщикНастроек.Настройки. ● Фиксированные настройки (Список.КомпоновщикНастроек.ФиксированныеНастройки) добавляются в результирующие настройки «как есть». При этом недопустима ситуация, когда в фиксированных и пользовательских настройках есть одноименные настройки, например отбор с одинаковым левым значением в условии. Управление тем, какие настройки будут доступны пользователю, а какие – нет, выполняется в окне настройки динамического списка. Рис. 151. Управление включением в пользовательские настройки Флажок в нижней части окна (см. рис. 151) отвечает за размещение в настройках (обычных или быстрых) всего вида настроек. Эта возможность доступна для отбора, порядка, группировки и условного оформления. Если настройки указаны с режимом редактирования Быстрый выбор, то в свойстве Группа пользовательских настроек таблицы формы, отображающей динамический список, необходимо указать пустую группу формы, в которой будут располагаться элементы, связанные с быстрыми пользовательскими настройками динамического списка. Если группа не указана – быстрые пользовательские настройки не будут отображены на форме. Также имеется возможность явно вызвать создание пользовательских настроек с помощью встроенного языка с помощью метода СоздатьЭлементыФормыПользовательскихНастроек()расширения динамического списка. Также имеется возможность выбирать возможность размещения в пользовательских настройках конкретных элементов настроек. Эта возможность доступна для элементов отбора и условного оформления (см. рис. 151). Если необходимо, чтобы при открытии динамического списка были загружены какие-либо специальные настройки, то это можно сделать двумя способами: ● С помощью параметра формы динамического списка ПользовательскиеНастройки. Данные, содержащиеся в этом параметре, будут помещены в пользовательские настройки динамического списка. ● С помощью параметра формы динамического списка КлючПользовательскихНастроек. Если при открытии формы указать этот параметр, то в динамический список, являющийся основным реквизитом формы, будут загружены пользовательские настройки, расположенные в хранилище настроек с указанным ключом. 7.1.4. Свойства реквизитов Данный раздел содержит описание некоторых свойств реквизитов формы. Заголовок – текст, который используется в качестве заголовка элемента формы, связанного с данным реквизитом, если не задано свойство элемента формы Заголовок. Основной реквизит – определяет, что данный реквизит формы является основным и определяет расширение формы. Сохраняемые данные – если для реквизита установлено это свойство, то интерактивное изменение такого реквизита будет приводить: ● К попытке блокировки связанного реквизита формы. ● Установке признака изменения у формы (флаг Модифицированность). ● Если у реквизита установлено свойство Сохраняемые данные и форма находится в режиме Только просмотр, то все элементы формы, связанные с этим реквизитом, также будут находиться в состоянии Только просмотр. Проверка заполнения – определяет необходимость проверки данного реквизита на заполнение (значение свойства равно Выдавать ошибку). Проверка заполнения возможна только для реквизитов следующих типов: ● примитивных типов данных (Число, Строка, Булево, Дата, любые типы ссылок, стандартный период), ● список значений, ● дерево значений, ● таблица значений. ПРИМЕЧАНИЕ. Проверка заполнения реквизитов выполняется аналогично функции ЗначениеЗаполнено(). Проверка заполнения табличных частей подразумевает, что табличная часть считается заполненной, когда в ней присутствует хотя бы одна строка. 7.1.5. Условное оформление формы Форма позволяет устанавливать условное оформление элементов формы. Настройка условного оформления выполняется аналогично настройке условного оформления системы компоновки данных. Вызов настройки условного оформления доступен из панели свойств корневого элемента формы. Доступны следующие виды условного оформления: ● Цвет фона – позволяет изменять цвет фона и применяется для: ● Элементов формы: поле ввода, поле текстового документа, таблица, обычная кнопка. ● Полей таблицы: поле надписи, поле ввода, поле переключателя, поле картинки. ● Цвет текста – позволяет изменять цвет текста и применяется для: ● Элементов формы: поле надписи, поле ввода, поле текстового документа, поле картинки, поле переключателя, таблица, обычная кнопка, гиперссылка, декорация-текст, декорация-картинка. ● Полей таблицы: поле надписи, поле ввода, поле переключателя. ● Шрифт – позволяет изменять шрифт и применяется для: ● Элементов формы: поле надписи, поле ввода, поле текстового документа, поле картинки, поле переключателя, поле календаря, таблица, обычная кнопка, гиперссылка, декорация-текст, декорация-картинка. ● Полей таблицы: поле надписи, поле ввода. ПРИМЕЧАНИЕ. Изменение шрифта элемента формы, выполненное с помощью условного оформления, не учитывается при определении размера элементов. ● Выделять отрицательные – позволяет задать выделение отрицательных значений. Применяется для следующих элементов формы: поле надписи, поле ввода и поля таблицы: поле надписи, поле ввода. ● Горизонтальное положение – задает горизонтальное положение значения и применяется для: ● Элементов формы: поле надписи, поле ввода, декорация-текст. ● Полей таблицы: поле надписи, поле ввода. ● Отметка незаполненного – позволяет задать отметку незаполненного значения и применяется для: ● Элементов формы: поле ввода, таблица. ● Полей таблицы: поле ввода. СОВЕТ. Если управление свойством Отметка незаполненного выполняется с помощью условного оформления, то рекомендуется для оформляемого поля установить свойство Автоотметка незаполненного в значение Нет. ● Текст – используется для задания текста и применяется для полей таблицы: поле надписи, поле ввода. ● Формат – позволяет изменить формат вывода значения и применяется для: ● Элементов формы: группа вида Страница, группа вида Обычная группа. ● Полей таблицы: поле надписи, поле ввода. ● Видимость – используется только для отключения отображения полей таблицы: поле надписи, поле ввода, поле переключателя, поле картинки. Место ячеек с отключенным отображением занимается за счет изменения размера соседних ячеек. Алгоритм растягивания ячеек может различаться в различных клиентских приложениях. ● Доступность – используется только для отключения доступности полей таблицы: поле надписи, поле ввода, поле переключателя, поле картинки. ● Только просмотр – используется только для включения режима Только просмотр для полей таблицы: поле надписи, поле ввода, поле переключателя, поле картинки. ● Отображать – используется только для отключения видимости значений полей таблицы: поле надписи, поле ввода, поле переключателя, поле картинки. ПРИМЕЧАНИЕ. Для условного оформления используется текущая дата компьютера, скорректированная с учетом часового пояса сеанса «1С:Предприятия». Подробнее про часовые пояса см. здесь. Если с помощью условного оформления оформляется колонка таблицы формы, то при вычислении условия используются текущие данные той таблицы, к которой относится оформляемая колонка. Если оформляемое поле не относится к таблице, то для вычисления условия используются текущие данные первой (по порядку размещения в редакторе формы) таблицы формы. Условное оформление позволяет задавать некоторые виды оформления элементов формы в зависимости от значений реквизитов формы, при этом оформление формы будет динамическим, т. е. будет учитывать изменение данных формы. Для изменения оформления формы не требуется никаких специальных действий. Рассмотрим пример такого оформления. Допустим, нам необходимо в документе Расход товара выделить те строки табличной части, в которых количество менее 10 штук. Для этого нужно в условном оформлении формы задать следующие условия: ● Вид условного оформления – цвет текста. В качестве значения цвета выберем Особый цвет из стиля. ● В качестве условия выберем следующее выражение: Объект.Товары.Количество Меньше "10". В этом выражении Объект – основной реквизит формы, Товары – табличная часть, Количество – реквизит табличной части. ● В качестве оформляемых полей выберем всю табличную часть Товары. Рис. 152. Настройка условного оформления Результат работы условного оформления можно увидеть на рис. 153. Рис. 153. Результат условного оформления Таким образом, цвет шрифта первой строки табличной части стал красным, т. к. количество товара в этой строке меньше 10. Однако выделять особым цветом всю строку не всегда возможно, и нужно выделять непосредственно ячейку табличной части с количеством. Для этого изменим заданное условное оформление: в качестве оформляемых полей выберем не всю табличную часть Товары, а конкретное поле: Количество. В этом случае будет выделено только одно поле: Рис. 154. Оформление одного поля табличной части Также следует отметить возможность использовать значения колонок, не связанных с данными информационной базы, в выражениях условий. 7.1.6. Форматированный документ В процессе разработки прикладных решений возникает необходимость предоставить пользователю возможность выполнять редактирование текстов с оформлением (далее форматированный документ). В качестве примера такой необходимости можно привести написание писем электронной почты, различных служебных записок или сопроводительных документов. Для работы с форматированным документом предназначен объект ФорматированныйДокумент, с помощью которого можно выполнять программную обработку документа, и поле ввода вида Поле форматированного документа, который предназначен для интерактивного изменения форматированного документа. В информационной базе форматированный документ рекомендуется хранить в реквизите типа ХранилищеЗначения, в который помещается объект типа ФорматированныйДокумент. Для того чтобы предоставить пользователю возможность интерактивного изменения документа, следует выполнить следующие шаги: ● Создать реквизит формы типа ФорматированныйДокументи установить для него свойство Сохраняемые данные. ● Создать элемент формы типа Поле ввода вида Поле форматированного документа и связать его с ранее созданным реквизитом. ● При чтении данных формы (обработчик ПриЧтенииНаСервере()) загрузить в реквизит формы документ (метод УстановитьHTML()), который необходимо редактировать, предварительно получив его из информационной базы. ● Перед записью данных формы (обработчик ПередЗаписьюНаСервере()) получить результат (метод ПолучитьHTML()) редактирования документа и поместить его в реквизит, сохраняемый в информационной базе. В процессе работы с документом можно использовать закладки. Закладкой называет позиция в документе. При определении позиции нужно учитывать следующие особенности: ● содержимое документа считается одной последовательностью символов; ● перенос строки считается одним символом; ● картинка считается одним символом. С помощью закладок можно получать и устанавливать выделение или позицию курсора в редакторе, добавлять и удалять элементы текста в документе (собственно текст, картинка, перевод строки). Если при получении выделения позиция начала и позиция окончания совпадают, это значит, что выделение отсутствует и получено положение курсора. Так же и при установке выделения: если начальная и конечная позиция выделения совпадают, происходит изменение позиции курсора, без выделения. Также следует помнить, что при программном изменении выделенного текста не происходит отмены выделения. Выделение остается в тех же позициях, в которых оно было до программного изменения текста. Приведем пример получения и установки выделения в редакторе форматированного документа. // Содержимое – реквизит формы типа ФорматированныйДокумент // Редактор – элемент формы типа Поле форматированного документа // Начало – реквизит формы типа Число. Указывает позицию начала выделения. // Окончание – реквизит формы типа Число. Указывает позицию окончания выделения. &НаКлиенте Процедура ПолучитьВыделение() ПозицияНачала = 0; ПозицияОкончания = 0; Элементы.Редактор.ПолучитьГраницыВыделения(ПозицияНачала,ПозицияОкончания); Начало = Содержимое.ПолучитьПозициюПоЗакладке(ПозицияНачала); Окончание = Содержимое.ПолучитьПозициюПоЗакладке(ПозицияОкончания); КонецПроцедуры &НаКлиенте Процедура УстановитьВыделение() ПозицияНачала = Содержимое.ПолучитьЗакладкуПоПозиции(Начало); ПозицияОкончания = Содержимое.ПолучитьЗакладкуПоПозиции(Окончание); Элементы.Редактор.УстановитьГраницыВыделения(ПозицияНачала,ПозицияОкончания); КонецПроцедуры При выполнении операций удаления закладка, описывающая начало удаляемого фрагмента, может оказаться некорректной. Если при этом необходимо сохранить позицию начала удаляемого фрагмента, то следует воспользоваться позицией начала фрагмента. Так, пример замены выделенного текста другим текстом будет выглядеть следующим образом. Процедура ВставитьСтрокуВТекущуюПозицию(Редактор, Содержимое, Строка) Перем Начало, Конец; Редактор.ПолучитьГраницыВыделения(Начало, Конец); Позиция = Содержимое.ПолучитьПозициюПоЗакладке(Начало); Содержимое.Удалить(Начало, Конец); Начало = Содержимое.ПолучитьЗакладкуПоПозиции(Позиция); Содержимое.Вставить(Начало, Строка); Закладка = Содержимое.ПолучитьЗакладкуПоПозиции(Позиция + СтрДлина(Строка)); Редактор.УстановитьГраницыВыделения(Закладка, Закладка); КонецПроцедуры Если в форматированном документе присутствуют гиперссылки и форматированный документ отображается в режиме Только просмотр, то гиперссылки доступны для перехода. Переход выполняется в новом окне веб-браузера. Также имеется возможность программного доступа к тексту форматированного документа. Сам текст состоит из объектов типа ПараграфФорматированногоДокумента, который доступен через свойство Элементыобъекта ФорматированныйДокумент. При этом каждый параграф состоит из объектов типа ТекстФорматированногоДокумента, ПереводСтрокиФорматированногоДокументаи КартинкаФорматированногоДокумента (элементы форматированного документа). Доступ к этой коллекции обеспечивается через свойство Элементыобъекта ПараграфФорматированногоДокумента. Границей элемента не обязательно является граница слова. Например, следующий пример показывает перебор всех параграфов форматированного документа, содержащих текст, и отдельную обработку каждого параграфа. Пример: Для каждого Параграф Из Документ.Элементы Цикл Если Параграф.ТипПараграфа = ТипПараграфа.Обычный Тогда ОбработатьОбычныйПараграф(Параграф); ИначеЕсли Параграф.ТипПараграфа = ТипПараграфа.МаркированныйСписок Тогда ОбработатьСписок(Параграф); ИначеЕсли Параграф.ТипПараграфа = ТипПараграфа.НумерованныйСписок Тогда ОбработатьСписок(Параграф); Иначе Продолжить; КонецЕсли; КонецЦикла; Обработка элементов форматированного документа, входящего в состав параграфа, может оказаться полезной в том случае, если нужно, например, убрать все оформление в виде курсива или полужирного шрифта. Пример: Полужирный = Новый Шрифт(, , Истина); Курсив = Новый Шрифт(, , , Истина); Обычный = Новый Шрифт; Для каждого Элемент Из Параграф.Элементы Цикл Если ТипЗнч(Элемент) = Тип("ПереводСтрокиФорматированногоДокумента") Тогда Продолжить; КонецЕсли; Если Элемент.Шрифт = Полужирный ИЛИ Элемент.Шрифт = Курсив Тогда Элемент.Шрифт = Обычный; КонецЕсли; КонецЦикла; При программной работе с текстом также могут помочь методы ПолучитьЭлементы()и СформироватьЭлементы(). Эти методы возвращают массив элементов форматированного документа. Чтобы увидеть разницу в работе этих методов, рассмотрим пример форматированного документа, содержащего следующую строку: 012 456 890. Строка состоит из 10 символов, где на месте символов 5 и 7 расположены пробелы. Необходимо получить элементы, которые расположены между позициями 2 и 9 этого документа. ПозицияНачала = Документ.ПолучитьЗакладкуПоПозиции(2); ПозицияОкончания = Документ.ПолучитьЗакладкуПоПозиции(9); Результат = Документ.ПолучитьЭлементы(ПозицияНачала, ПозицияОкончания); Для каждого Элемент Из Результат Цикл Сообщить("Текст – " + Элемент.Текст); КонецЦикла; Результат = Документ.СформироватьЭлементы(ПозицияНачала, ПозицияОкончания); Для каждого Элемент Из Результат Цикл Сообщить("Текст – " + Элемент.Текст); КонецЦикла; Разница в работе этих методов будет в том, что метод ПолучитьЭлементы()возвращает все элементы, которые попадают между заданными закладками (включая все граничные элементы), т. е. рассматриваемом примере будет выведен следующий текст: Текст – 012 456 890 А при работе метода СформироватьЭлементы()вывод будет следующий: Текст – 2 456 8 Другими словами, при использовании метода СформироватьЭлементы()система формирует набор элементов таким образом, чтобы он включал в себя только то содержимое форматированного документа, которое ограничено закладками. Нужно помнить, что метод СформироватьЭлементы()изменяет форматированный документ во время своего вызова и если (в рассматриваемом примере) после вызова метода СформироватьЭлементы()снова вызвать метод ПолучитьЭлементы(), то результат работы будет такой: Текст – 2 456 8 Такой результат будет даже в том случае, если полученный, после вызова СформироватьЭлементы(), набор элементов никак не изменялся. 7.2. Параметры формы Параметры формы (закладка Параметры) служат двум целям: ● Описать набор данных, которые будут влиять на открытие формы (параметризация формы). Для этого нужно перечислить все необходимые параметры и указать их типы. ● Определить параметры, которые будут влиять на ключ уникальности формы. Для этого необходимо установить свойство Ключевой параметр у тех параметров, которые должны участвовать в формировании ключа уникальности формы. При попытке открыть форму система производит поиск существующей формы с помощью сформированного ключа уникальности формы. Если в системе существует форма с полученным ключом уникальности, возвращается именно эта форма; если нет – создается новая форма. При вызове формы значения параметров, созданных разработчиком, можно указывать в структуре параметров наряду с системными параметрами форм (если таковые имеются). Параметры формы можно передать в форму в момент ее создания. Анализ переданных параметров можно выполнить в событии ПриСозданииНаСервере()(коллекция Параметрыявляется свойством объекта УправляемаяФорма): // В месте вызова. // Формируем параметр формы. Параметры = Новый Структура(); Параметры.Вставить("Важность", ПредопределенноеЗначение("Перечисление.Важность.Важно")); // Открываем форму с указанием параметров. ОткрытьФорму("ОбщаяФорма.ФормаПросмотра", Параметры);... // В модуле формы. &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Важность = Перечисления.Важность.Важно Тогда... КонецЕсли; КонецПроцедуры ВНИМАНИЕ! После вызова обработчика события ПриСозданииНаСерверевсе неключевые параметры формы удаляются из коллекции Параметры. СОВЕТ. Неключевые параметры формы, необходимые для дальнейшей работы, нужно сохранять в данных формы. 7.2.1. Стандартные параметры формы Для того чтобы поддерживать автоматическое взаимодействие между формами, система предоставляет ряд стандартных параметров, которые используются для управления формами при их открытии. С помощью этих параметров системой реализуется в полях форм выбор из форм выбора, открытие форм объектов, работа стандартных команд и т. д. То есть они обеспечивают различные заложенные в систему сценарии работы интерфейса. Но разработчик также может использовать эти параметры во встроенном языке, передавая их при вызове метода ОткрытьФорму(). Перечень стандартных параметров форм в зависимости от вида расширения формы можно посмотреть в разделах Встроенный язык – Интерфейс (управляемый) – Управляемая форма – Расширение... встроенной справки. 7.2.2. Пример работы с параметрами формы Для демонстрации работы параметров формы рассмотрим реализацию выбора элемента в поле ввода. Сутью примера будет реализация механизма выбора элемента из списка на встроенном языке. К моменту начала работы с примером нужно иметь конфигурацию, обладающую следующими свойствами: ● имеется справочник Товарыс иерархией групп и элементов; ● имеется справочник Аналогис реквизитом ВыбранныйТовартипа СправочникСсылка.Товары; ● оба справочника имеют формы элементов. Теперь реализуем в этой конфигурации все механизмы, которые использует платформа для выбора элемента из списка, на встроенном языке. При этом мы увидим: ● как происходит использование стандартных параметров формы; ● каким образом их использует сама система; ● как их может использовать разработчик. Добавим дополнительный параметр, который будет управлять закрытием формы выбора после выбора элемента. Назовем этот параметр ЗакрыватьПослеВыбора(тип Булево). Добавим его в качестве параметра формы ФормаВыборасправочника Товары. Для того чтобы открыть форму выбора элемента, необходимо в форме элемента справочника Аналогисоздать обработчик события НачалоВыборау элемента формы ВыбранныйТовар. &НаКлиенте Процедура ВыбранныйТоварНачалоВыбора(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ПараметрыВыбора = Новый Структура; ПараметрыВыбора.Вставить("РежимВыбора", Истина); ПараметрыВыбора.Вставить("ВыборГруппИЭлементов", ИспользованиеГруппИЭлементов.Элементы); ПараметрыВыбора.Вставить("РазрешитьВыборКорня", Ложь); ПараметрыВыбора.Вставить("ТекущаяСтрока", Объект.ВыбранныйТовар); ПараметрыВыбора.Вставить("ЗакрыватьПослеВыбора", Ложь); ОткрытьФорму("Справочник.Товары.ФормаВыбора", ПараметрыВыбора, Элементы.ВыбранныйТовар); КонецПроцедуры Следует отдельно остановиться на третьем параметре метода ОткрытьФорму(). Этот параметр определяет, кто будет владельцем формы выбора и кому будет приходить оповещение о сделанном выборе. В данном случае мы указали владельцем формы выбора сам элемент формы, но также мы можем указать этим параметром и саму форму. В этом случае будет необходимо реализовывать обработчик ОбработкаВыборамодуля формы и в нем решать, в какой реквизит формы помещать выбранные данные. ПРИМЕЧАНИЕ. Если мы не будем реализовывать обработчик события НачалоВыбора, то его действия выполнит сама система. Это справедливо и для всех дальнейших обработчиков, которые использованы в примере. Теперь необходимо обработать переданные параметры в форме выбора. Сделаем это в обработчике ПриСозданииНаСервере()модуля формы выбора. &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; Элементы.Список.ВыборГруппИЭлементов = Параметры.ВыборГруппИЭлементов; Элементы.Список.РазрешитьВыборКорня = Параметры.РазрешитьВыборКорня; Элементы.Список.ТекущаяСтрока = Параметры.ТекущаяСтрока; ЗакрыватьПриВыборе = Параметры.ЗакрыватьПослеВыбора; КонецПроцедуры Для того чтобы проверить работоспособность установленных нами параметров формы, установим, с помощью конфигуратора, у таблицы формы выбора Списоксвойство ВыборГруппИЭлементовв значение Группы(без применения параметра не будет доступен выбор элементов справочника). ПРИМЕЧАНИЕ. Если у таблицы Список, отображающей список товаров, свойство РежимВыборане будет установлено в значение Истина, то выбор товаров будет недоступен. Теперь нам необходимо обработать выбор желаемого элемента в форме выбора. Для этого нужно определить обработчик события ВыборЗначения таблицы формы. &НаКлиенте Процедура СписокВыборЗначения(Элемент, СтандартнаяОбработка, Значение) СтандартнаяОбработка = Ложь; ОповеститьОВыборе(Значение); КонецПроцедуры Нам осталось реализовать обработку выбора элемента в самом поле ввода. Для этого необходимо обработать событие ОбработкаВыборанашего поля ввода ВыбранныйТовар. &НаКлиенте Процедура ВыбранныйТоварОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; Объект.ВыбранныйТовар = ВыбранноеЗначение; КонецПроцедуры Мы самостоятельно реализовали системный механизм выбора значения в поле ввода на форме. ВНИМАНИЕ! Данный пример не является законченным. Его единственным назначением является демонстрация механизмов работы с параметрами формы. Если при создании параметров (обработчик ВыбранныйТоварНачалоВыбора()) заменить строку: ПараметрыВыбора.Вставить("ЗакрыватьПослеВыбора", Истина); на строку: ПараметрыВыбора.Вставить("ЗакрыватьПослеВыбора", Ложь); то форма выбора перестанет закрываться после того, как будет осуществлен выбор. Это можно использовать, например, для реализации формы подбора (выбор нескольких товаров без закрытия формы выбора). 7.3. Команды формы Действия в форме выполняются с помощью команд формы. Сами команды служат лишь описанием выполняемых действий. Для того чтобы команда стала выполнять свою функцию, она должна быть привязана к элементу формы (типа Кнопка). Можно выделить несколько групп команд, которые присутствуют в форме: ● Команды, создаваемые разработчиком в процессе проектирования формы. Для них необходимо создавать обработчик непосредственно в модуле формы. ● Стандартные команды, которые предоставляются расширением основного реквизита формы и расширениями реквизитов, которые являются списками (например, табличная часть объекта, динамический список, набор записей регистра сведений и т. д.), если с этим реквизитом есть связанный элемент формы. ● Глобальные команды – команды, предоставленные глобальным командным интерфейсом (подробнее про командный интерфейс см. здесь). Такие команды могут быть непараметризованными и параметризованными. Параметризованные глобальные команды будут предоставлены форме только в том случае, если на форме есть источники параметров с соответствующими типами. Доступность стандартных команд формы и элементов формы определяется свойством Состав команд соответствующего элемента формы. Команды, которые предоставляет глобальный командный интерфейс (закладка Глобальные команды), могут быть размещены в любом месте формы, точно так же, как и команды формы. В свойстве Действие указывается обработчик, который реализует действие, выполняемое командой. Если обработчик не задан, то команда будет недоступна для использования. К выбору в этом поле доступны только процедуры и функции без параметров, которые являются клиентскими (подробнее см. здесь). Если команда изменяет данные формы, то следует указать на это установкой свойства Изменяет сохраняемые данные. Тогда при попытке выполнения команды будут выполняться следующие действия: ● Выполнена попытка блокировки связанного реквизита формы. Если попытка закончится неудачей – команда не будет выполнена. ● Установлен признака изменения у формы (флаг Модифицированность). Если у для команды установлено свойство Сохраняемые данные и форма находится в режиме Только просмотр, то все элементы формы, связанные с этой командой, также будут находиться в состоянии Только просмотр. Кроме того, исполнение параметризованной глобальной команды, для которой параметр предоставляется реквизитом с установленным свойством Сохраняемые данные, для нового и несохраненного объекта приведет к попытке записать объект. При этом пользователю будет задан вопрос о необходимости записи. Если ответ будет отрицательный – команда не будет выполнена. ПРИМЕЧАНИЕ. При автоматическом заполнении командных панелей и контекстных меню, для которых указан источник команд, стандартные команды не добавляются, если в данном элементе есть кнопки, добавленные вручную с такими же командами. Данная логика не распространяется на команды, добавляемые из фрагмента глобального командного интерфейса. Для упрощения разработки различных диалогов в стандартные команды формы добавлены команды Да, Нет, ОК, Отмена, Повторить, Прервать, Игнорировать. Если такая команда добавлена в форму, то при нажатии пользователем этой кнопки будут выполнены следующие действия: ● Для формы, открытой в модальном режиме, выполняется закрытие формы и возвращается соответствующее значение типа КодВозвратаДиалога. ● Для формы, открытой в немодальном режиме, выполняется только закрытие формы. При формировании имени обработчика выполнения команды будет использоваться свойство команды Имя. Использование – подробнее см. здесь. Функциональные опции – определяет, с какими функциональными опциями связан данный реквизит формы. Подробнее про функциональные опции см. здесь. 7.4. Модуль формы Модуль формы состоит из набора процедур и функций. Допускаются переменные и тело модуля. Каждая процедура, функция или объявление переменной модуля формы должны предваряться одной из следующих директив компиляции: ● НаКлиенте– означает, что метод выполняется на стороне клиента, а переменная существует все время жизни клиентской части формы. Из клиентского метода допустимыми являются вызовы любых методов. ● НаСервере– означает, что метод выполняется на стороне сервера, а переменная существует только во время вызова выполнения серверного вызова. Для серверных методов допустимыми являются вызовы серверных, серверных внеконтекстных и клиент-серверных внеконтекстных методов. ● НаСервереБезКонтекста– означает, что метод исполняется на сервере вне контекста формы. Переменные не могут предваряться такой директивой компиляции. В таких методах недоступен контекст формы. При вызове этих методов не выполняется передача данных формы на сервер и обратно. Применение внеконтекстных методов позволяет существенно уменьшить объем передаваемых данных при вызове серверной процедуры из среды клиентского приложения. Из серверных внеконтекстных методов формы допускается вызов серверных методов общих модулей. ● НаКлиентеНаСервереБезКонтекста– означает, что метод исполняется как на клиенте, так и на сервере, вне контекста формы. Переменные не могут предваряться такой директивой компиляции. Также такой метод не имеет доступа к переменным модуля формы. Из клиент-серверного внеконтекстного метода можно вызывать методы неглобальных серверных общих модулей, а также методы неглобальных общих модулей с флажками Сервер и Клиент (управляемое приложение). Отсутствие директивы компиляции перед процедурой означает использование директивы по умолчанию. Директивой по умолчанию является НаСервере. При передаче управления с клиента на сервер с помощью контекстного вызова нужно учитывать следующую особенность: перед началом вызова данные формы передаются на сторону сервера, затем происходит выполнение серверного вызова, и потом данные формы передаются обратно на клиента. Это может занимать достаточно существенное время. В то же время внеконтекстный серверный вызов не выполняет таких преобразований, поэтому выполняется быстрее. В программном модуле формы (т. е. фрагменте кода, размещенном вне процедур и функций) допустимо использование инструкций препроцессора для явного выделения участков кода инициализации соответствующих переменных. ВНИМАНИЕ! В серверной переменной формы невозможно сохранить данные между двумя вызовами серверной стороны формы. Не допускается использование нескольких директив компиляции перед одним методом или переменной. Не допускается наличие одноименных методов или переменных, отличающихся только директивами компиляции. Обработчики команд формы, созданных разработчиком, могут располагаться только в клиентских методах модуля формы. В модуле формы рекомендуется использовать директивы препроцессора только внутри процедур и функций. ПРИМЕЧАНИЕ. Для понимания результата при «пересечении» инструкциями препроцессора границ процедур следует учитывать, что обработка инструкций препроцессора выполняется до обработки директив компиляции. Полный перечень директив компиляции и инструкций препроцессора см. здесь. Приведем пример использования директив компиляции: &НаСервере Перем СервернаяПеременная; &НаКлиенте Перем КлиентскаяПеременная; &НаСервере Процедура Серверная() Сообщить(СервернаяПеременная); КонецПроцедуры &НаКлиенте Процедура Команда1Выполнить() Сообщить(КлиентскаяПеременная); Серверная(); КонецПроцедуры #Если Сервер Тогда СервернаяПеременная = "Сервер"; #КонецЕсли #Если НаКлиенте Тогда КлиентскаяПеременная = "Клиент"; #КонецЕсли 7.5. Элементы формы Иерархия элементов формы определяет внешний вид и состав отображаемых на форме элементов управления. Существует несколько типов элементов формы: ● форма – собственно форма, корневой элемент дерева элементов; ● поле формы; ● декорация формы; ● таблица формы; ● кнопка формы; ● группа формы. Элементы формы типа поле формы и таблица формы всегда связаны с данными формы. Если связанный реквизит не указан, или он недоступен на клиенте ввиду ограничения по правам, или исключен из состава (свойства Просмотр и Редактирование реквизитов формы), поля не будет видно на форме, и оно будет автоматически удалено при создании формы в режиме исполнения. 7.5.1. Общие свойства элементов формы Данный раздел описывает общие свойства элементов формы. Свойства, специфичные для конкретных элементов, будут описаны ниже. 7.5.1.1. Группа свойств «Основные» Свойство Положение заголовка определяет, каким образом будет выводиться заголовок элемента. Заголовком является синоним данных, связанных с выбранным элементом формы, если не указано свойство Заголовок у элемента формы. Заголовок всегда оканчивается символом ":" (добавляется системой автоматически). При добавлении элемента в свойстве Данные необходимо указать ссылку на реквизит формы, с которым этот элемент связан. Если элемент формы не связан с реквизитом формы, то он не будет отображен на форме. Если на форму добавляется кнопка, то в свойстве Команда необходимо указать ссылку на команду, которая будет выполняться при нажатии кнопки. Если кнопка не связана с командой, то она не будет отображена на форме. Элемент формы может находиться в режиме Только просмотр (запрещающем любые изменения), если у него установлено свойство Только просмотр (в конфигураторе или программно), или у группы, в которую он входит, установлено свойство Только просмотр, или связанный с ним реквизит формы имеет признак Сохраняемые данные и у формы установлен режим Только просмотр. Для управления видимостью элементов формы существуют два свойства: Видимость и Пользовательская видимость. Первое свойство можно изменять как в редакторе формы (в конфигураторе), так и программно. Свойство Пользовательская видимость настраивается только в конфигураторе и задает начальную видимость элемента формы в разрезе ролей. Результирующая видимость элемента формы образуется сложением «по И» свойств Видимость и Пользовательская видимость для конкретного пользователя. Описание редактирования свойства Пользовательская видимость см. здесь. Кроме того, изменяя видимость элементов формы в диалоге Настройка формы, пользователь фактически выполняет изменение свойства Пользовательская видимость конкретного элемента формы. Описание свойств Высота и Ширина (или Количество строк) см. здесь. С помощью свойства Пропускать при вводе можно задать пропуск элемента формы при обходе формы с помощью клавиши ENTER. Если свойство установлено в значение Да, то элемент будет пропущен при обходе по ENTER (но доступен при обходе с помощью клавиши Tab или указания элемента мышью). Если свойство установлено в значение Нет, то элемент не будет пропущен при обходе с помощью клавиши ENTER. Также существует возможность указать автоматическое определение необходимости пропуска элемента формы. Для этого необходимо установить значение этого свойства равным Авто. В этом случае будет использоваться следующий алгоритм работы: ● Элемент типа Поле будет пропускаться в случае поля вида, поля надписи или поля картинки, а также в зависимости от значения свойства Отображение предупреждения при редактировании (см. здесь). ● Элемент типа Кнопка не будет пропускаться в том случае, если кнопка является кнопкой по умолчанию. ● Элемент типа Декорация будет пропускаться. ● Элемент типа Таблица не будет пропускаться. 7.5.1.1.1. Специальные режимы связи элементов с реквизитами Как уже отмечалось, любой элемент, отображающий какие-либо данные, должен быть связан с реквизитом данных формы. Помимо связи с «обычными» реквизитами, доступны еще несколько специальных режима. Связь с текущими данными таблиц Элемент формы может быть связан с реквизитом, представляющим собой колонку таблицы, размещенной на форме. При этом в данном элементе отображаются данные поля текущей строки таблицы. Такая связь допускается как для полей, так и для таблиц, при этом не требуется, чтобы в таблице отображалась соответствующая колонка. Элемент, связанный с текущими данными, может находиться как в режиме Только просмотр, так и в режиме редактирования. Например, необходимо расположить на форме поле, которое отображает цену для текущей строки товара. Для этого в нужное место иерархии элементов формы добавляем поле (вид поля ввода может быть как Поле надписи, так и Поле ввода), для которого в качестве данных выбираем (в диалоге Выбор реквизита) Объект.Товары.Цена. Здесь Объект– это реквизит формы типа Документконкретного вида, Товары– это табличная часть документа, а Цена– реквизит табличной части. Связь с определенной строкой таблицы Элемент формы может быть связан с реквизитом, представляющим собой колонку указанной строки таблицы, являющейся реквизитом формы. Такая связь допускается как для полей, так и для таблиц, при этом не требуется, чтобы в таблице отображалась соответствующая колонка. Конкретная строка задается индексом строки (например, ТаблицаЗначений[1]) или последовательностью индексов для иерархических таблиц (например, ТаблицаЗначений[2].СписокИтогов[4]). Элемент, связанный с текущими данными, может находиться как в режиме Только просмотр, так и в режиме редактирования. ПРИМЕЧАНИЕ. Данная связь не поддерживается для динамических списков. Например, необходимо расположить на форме поле, которое отображает значение поля Долгиз 4-й строки таблицы значений Контрагенты. Для этого в нужное место иерархии элементов формы добавляем поле (вид поля ввода может быть как Поле надписи, так и Поле ввода), для которого в качестве данных выбираем (в диалоге Выбор реквизита) Контрагенты[3].Долг. Здесь Контрагенты– это реквизит формы типа (ТаблицаЗначений), а Долг– колонка таблицы значений. Если данные поля ссылаются на отсутствующую строку – редактировать такое поле будет нельзя, даже если выбрано поле ввода, в противном случае изменение, выполненное в поле ввода, будет выполнено и в таблице, на которую ссылается поле ввода. В примере выше, если пользователь изменит поле ввода, значение из этого поля попадет в колонку Долг4-й строки таблицы значений Контрагенты. Связь с реквизитами через ссылку Если в данных формы есть реквизиты ссылочных типов (например, СправочникСсылка), то элемент формы можно связать с реквизитом, полученным по этой ссылке. Данные для таких элементов будут получаться автоматически и обновляться при изменении ссылки. Связь с реквизитами через ссылку может быть любой глубины. Элементы, связанные с такими реквизитами, всегда находятся в режиме Только просмотр. ПРИМЕЧАНИЕ. Для реквизитов составного типа (включая типы СправочникСсылка, ДокументСсылкаи т. д.) недоступно получение реквизитов через ссылку. Например, нужно расположить на форме поле, которое отображает артикул текущей строки товара. Для этого нам необходимо добавить в нужное место иерархии элементов формы поле с видом Поле надписи, для которого в качестве данных выбрать (в диалоге Выбор реквизита) Объект.Товары.Товар.Артикул. Здесь Объект– это реквизит формы типа Документконкретного вида, Товары– это табличная часть документа, Товар– это реквизит табличной части, а Артикул– реквизит справочника Товары. Связь с итогами коллекций Элемент формы может быть связан с реквизитами, представляющим собой итоговые значения некоторых коллекций: табличные части, наборы записей, список значений (только количество строк в коллекции). Такими реквизитами могут быть: ● итоги по числовым полям, ● количество строк в коллекции. Элементы, связанные с такими реквизитами, всегда находятся в режиме Только просмотр. В качестве примера поместим на форму поле, отображающее суммовой итог для табличной части Товары. Для этого в качестве данных поля формы укажем Объект.Товары.ИтогСумма, где Объект– это основной реквизит формы, Товары– табличная часть документа, а ИтогСумма– специальный реквизит. Связь может быть установлена не только для самого элемента. Также поддерживается установка связи для отображения данных в подвале таблицы и в заголовке закладки (группы вида Страница). В зависимости от типа данных, которые отображает элемент формы (поле ввода, кнопка и группа), с помощью свойства Вид можно задать способ отображения данных. 7.5.1.2. Группа свойств «Использование» Подробнее про использование свойства Быстрый выбор см. здесь. Свойства Связи параметров выбора см. здесь и Параметры выбора см. здесь. Если значения свойств Связи параметров выбора и Параметры выбора заданы и в свойствах реквизита объекта метаданных, и в свойствах элемента формы, то значения свойства будут объединены. Объединение будет выполняться «по ИЛИ» (по именам параметров). Имеется возможность указывать расширенную подсказку для следующих элементов формы: ● Поле; ● Таблица; ● Группа; ● Кнопка; ● Декорация. Расширенная подсказка задается с помощью свойства Расширенная подсказка соответствующего элемента формы. Включается возможность указания данной подсказки с помощью команды Показать расширенную подсказку контекстного меню элемента формы. При этом сама расширенная подсказка представляет собой декорацию формы типа Текст. Расширенная подсказка позволяет задавать подсказку с применением различного оформления (цвет, шрифт и т. д.). Для этого необходимо выбрать в окне редактирования расширенной подсказки значение переключателя Форматированная строка. Сам текст расширенной подсказки задается в свойстве декорации Заголовок. Также у вышеперечисленных элементов формы можно задать отображение подсказки: вокруг элемента формы, кнопкой рядом с элементом формы, всплывающим окном или отображение будет выбираться автоматически. Если задан режим отображения подсказки Кнопка, то отображаться будет свойство Заголовок расширенной подсказки с форматированием. Если задан режим отображения Всплывающий, то будет отображаться свойство Заголовок расширенной подсказки, но в виде обычной строки (с убранным форматированием). Если заданы одновременно свойства Подсказка и свойство Заголовок расширенной подсказки – отображаться будет текст из расширенной подсказки. 7.5.1.3. Группа свойств «События» В данной группе собраны ссылки на обработчики, которые предоставляет тот или иной элемент формы. 7.5.1.4. Картинки элементов Элементы формы позволяют использовать для своего оформления картинки. Задание картинки возможно двумя способами: ● из конфигуратора, ● программным способом. В случае, если картинка задается программным способом, может быть установлена либо пустая картинка, либо картинка из библиотеки картинок конфигурации. Если картинка задается из конфигуратора, то возможен еще один вариант – задание картинки из файла на диске (внешняя картинка). Использование таких картинок рекомендуется только в тех случаях, когда разрабатываются внешние отчеты или обработки, которые могут использоваться в различных конфигурациях, и картинка является значимым элементом оформления. В остальных случаях использование таких картинок является нежелательным. Для команд формы и глобальных команд выбрать внешнюю картинку невозможно. 7.5.2. Форма Описывает визуальные свойства формы. Элемент такого типа всегда существует в единственном числе и находится в корне иерархии элементов. Также в свойствах формы описываются обработчики событий формы. Режим открытия формы управляется специальным свойством – Режим открытия окна. Данное свойство описывает, каким образом будет открыто окно: ● Независимый – форма открывается: ● Режим Формы в отдельных окнах. Форма открывается в немодальном окне, которое является вспомогательным окном приложения. ● Режим Формы в закладках. Форма открывается в отдельной закладке. ● Режим Такси. Форма открывается в рабочей области основного окна приложения. ● Блокировать окно владельца – форма открывается в немодальном окне, в режиме, когда работа с формой, из которой инициировано открытие текущей формы, блокируется. Данный режим предназначен для форм, в которых вводится мало информации и работа с которыми не требует длительного времени, например, для ввода элементов справочников, содержащих небольшое количество реквизитов. Этот режим внешне аналогичен модальному открытию формы, однако при открытии из встроенного языка работа модуля не останавливается на время работы открываемой формы. При этом все остальное взаимодействие с формой выполняется как с другими немодальными формами. Такая форма также открывается во вспомогательном окне. Форма, открытая в таком режиме, не участвует в поиске уже открытых форм. Если попытаться открыть точно такую же форму (даже с параметром уникальности, установленным в значение Ложь), то форма, открытая в режиме Блокировать окно владельца, не будет найдена и будет открыта новая форма. Этот режим по умолчанию установлен у следующих форм: ● элемент и группа справочника, ● узел плана обмена, ● элемент и группа плана видов характеристик, ● счет, ● вид расчета, ● задача, ● запись независимого регистра сведений. ● Блокировать весь интерфейс – аналогично форме, которая открывается в режиме Блокировать окно владельца, но блокируется работа не только с родительской формой, но со всем интерфейсом прикладного решения. Такой режим открытия не используется в качестве установки «по умолчанию». При открытии формы в блокирующем режиме используется следующий алгоритм определения блокируемого окна: ● Если в свойстве ВладелецФормызадана форма и эта форма не закрыта, блокируется окно этой формы. ● Если в свойстве ВладелецФормызадан элемент формы и эта форма не закрыта, то блокируется окно формы, которой принадлежит этот элемент. ● В остальных случаях (если в свойстве ВладелецФормызадано значение Неопределеноили форма владельца закрыта) блокируется окно, которое является текущим окном клиентского приложения на момент открытия формы. Свойство Режим открытия окна не оказывает влияния на открытие формы, если она открывается в модальном режиме, а также при открытии в уже существующем основном или вспомогательном окне. Описание правила формирования автоматического заголовка см. здесь. Свойство формы Вертикальная прокрутка определяет, как будут вести себя элементы формы в том случае, если форма будет сжиматься по вертикали. Если для свойства установлено значение Использоватьили Авто(которое для конкретной формы определяется как Использовать), то полоса вертикальной прокрутки появится после того, как вертикальный размер элементов формы достигнет размера, который был задан при редактировании формы в конфигураторе (это относится и к элементам с автоматически определением высоты элемента). Если для свойства установлено значение ИспользоватьПриНеобходимости, то перед появлением полосы прокрутки элементы формы будут сжиматься по вертикали до своего минимального размера. Рассмотрим пример: имеется форма с реквизитом Списоктипа ДинамическийСписок. Этот реквизит отображается на форме таблицей Список, для которой высотка указана в 8 строк таблицы. Если свойство формы Вертикальная прокрутка установить в значение Использовать, то форма практически не будет сжиматься: Рис. 155. Вертикальная прокрутка формы – использовать В этом случае полоса вертикальной прокрутки появилась сразу, как только форма попытались сжать по вертикали. Если свойство формы Вертикальная прокрутка установить в значение ИспользоватьПриНеобходимости, то форма вначале максимально уменьшит свой размер по вертикали, и лишь потом появится вертикальная полоса прокрутки: Рис. 156. Вертикальная прокрутка формы – использовать по необходимости При установке свойства в значение Авто, поведение формы определяется системой на основании типа основного реквизита формы: ● Если основной реквизит формы имеет тип ДинамическийСписок, или основной реквизит формы имеет тип ОтчетОбъект, и для расширения формы отчета заполнено свойство РезультатОтчета, то значение Автотрактуется как значение ИспользоватьПриНеобходимости; ● В остальных случаях значение Автотрактуется как Использовать. Для формы можно отобразить командную панель (ее расположением на форме можно управлять с помощью свойства Положение командной панели). Состав стандартных команд формы можно регулировать через свойство формы Состав команд. Если свойство Разрешить изменять форму снято, то пользователь не может изменить состав и относительное положение элементов формы в режиме 1С:Предприятие. Свойство Проверять заполнение автоматически отвечает за проверку заполнения данных формы. Подробнее о проверке заполнения см. здесь. Если свойство формы Сохранение данных формы в настройках установлено в значение Использовать список, то в списке реквизитов становится доступной колонка Сохранение. Те реквизиты, для которых свойство Сохранение будет установлено в значение Истина, будут сохраняться в хранилище данных формы (подробнее см. здесь). Для сохранения будет использовано либо хранилище, указанное в свойстве формы Хранилище настроек, либо хранилище, указанное в свойстве Хранилище настроек данных форм конфигурации. ПРИМЕЧАНИЕ. Недоступно указание флажка Сохранение для табличных частей объектов. Для установки режима Только просмотр у формы существует свойство ТолькоПросмотр, доступное только для программного изменения. В случае установки этого свойства в состояние Истинаследующие стандартные команды станут недоступны (в том числе и при попытке использовать для вызова этих команд сочетания клавиш): ● Для всех форм: ● Восстановить параметры. ● Для табличного поля: ● Добавить, ● Скопировать, ● Удалить. ● Команды Создать на основании. ● Для расширения формы объекта, записи регистра сведений, константы: ● Записать, ● Записать и закрыть, ● Провести, ● Провести и закрыть, ● Отмена проведения, ● Старт, ● Выполнено. ● Для расширения формы выбора/настроек: ● Завершить редактирование, ● Выбрать настройки. ● Для расширения табличного поля для динамического списка: ● Пометить на удаление, ● Провести, ● Отмена проведения, ● Создать группу, ● Переместить в группу. ● Для расширения табличного поля для списка значений: ● Изменить, ● Переместить вверх, ● Переместить вниз, ● Сортировать по убыванию, ● Сортировать по возрастанию, ● Подбор. ● Все команды изменения следующих коллекций системы компоновки данных: ● коллекций настроек, ● коллекций доступных полей. ● Для расширения табличного поля для ДанныеФормыКоллекция, ДанныеФормыДерево, ДанныеФормыСтруктураИКоллекция: ● Изменить, ● Переместить вверх, ● Переместить вниз, ● Сортировать по убыванию, ● Сортировать по возрастанию. Также будут недоступны элементы формы, связанные с этими командами. Если для формы установлено свойство Только просмотр и основным реквизитом формы является динамический список, то все таблицы, связанные с этим списком, также перейдут в режим просмотра. Кроме того, если заполнено свойство Список групп, то элемент формы, указанный в этом свойстве, также перейдет в режим просмотра. При этом свойство элементов формы Только просмотр не будет изменено. 7.5.3. Поле Элемент формы Поле предназначен для отображения и редактирования какого-либо реквизита формы. Поле формы может быть нескольких видов: ● поле ввода, ● поле надписи, ● поле флажка, ● поле картинки, ● поле переключателя, ● поле текстового документа, ● поле табличного документа, ● поле календаря, ● поле индикатора, ● поле полосы регулирования, ● поле диаграммы, ● поле диаграммы Ганта, ● поле дендрограммы, ● поле графической схемы, ● поле географической схемы, ● поле HTML-документа, ● поле форматированного документа. Если поле является подчиненным элементом для элемента формы Таблица, то оно может принимать следующие типы: ● поле ввода, ● поле картинки, ● поле надписи, ● поле флажка. Если вставляется поле вида Поле переключателя, то для него необходимо задать свойство элемента формы Список выбора, который определяет количество и значения переключателей. По умолчанию используется горизонтальное расположение переключателей. Для того чтобы расположить их по вертикали, необходимо изменить значение свойства Количество колонок. Для полей вида Поле флажка и Поле переключателя существует возможность указывать вид отображения. Это делается с помощью свойства Вид флажка у соответствующего элемента формы. Для поля флажка можно выбрать представление в виде флажка или тумблера. Рис. 157. Флажок или тумблер На рис. 157 представлены различные варианты отображения поля флажка. В верхней части рисунка поле флажка представлено тумблером, а в нижней – флажком. Для поля переключателя можно выбрать представление в виде переключателя или тумблера. Рис. 158. Переключатель или тумблер На рис. 158 представлены различные варианты отображения поля переключателя. В верхней части рисунка поле переключателя представлено в виде тумблера, а в нижней – в виде переключателя. Для того чтобы разместить на форме поле ввода с видами: поле табличного документа, поле диаграммы, поле диаграммы Ганта, поле дендрограммы, поле графической схемы, поле географической схемы, необходимо создать реквизит формы соответствующего типа и указать этот реквизит в качестве данных элемента формы. Для того чтобы разместить на форме поле HTML-документа, необходимо создать реквизит формы типа Строка, затем создать поле ввода вида Поле HTML документа и указать созданный реквизит в качестве данных для этого поля. В качестве значения реквизита формы может выступать навигационная ссылка или текст HTML-документа. ПРИМЕЧАНИЕ. Следует учитывать, что при использовании поля HTML-документа может не обеспечиваться поддержка всей функциональности HTML. В частности, не поддерживаются скрипты с состоянием (переменные, хранящие значения, необходимые в различных обработчиках событий), свойство HTML-документа parentWindow, работа с языком разметки SVG. Ограничения могут быть обусловлены специфическими особенностями функционирования HTML (в том числе и неидентичное функционирование) в формах «1С:Предприятия» в клиентских приложениях и различных веббраузерах. Чтобы разместить на форме поле форматированного документа, необходимо создать реквизит формы типа ФорматированныйДокумент, затем создать поле ввода вида Поле форматированного документа и указать созданный реквизит в качестве данных для этого поля. ПРИМЕЧАНИЕ. Работа с реквизитом типа ГеографическаяСхемавозможна только на сервере. Если в поле ввода формы редактируется реквизит, который заполняется автоматически, но, тем не менее, может заполняться вручную (в крайне редких случаях), то такое поведение можно реализовать с помощью свойств поля ввода Отображение предупреждения при редактировании и Предупреждение при редактировании. Если значение свойства Отображение предупреждения при редактировании равно Отображать, то при попытке начать редактирование поля «1С:Предприятие» выдаст предупреждение, которое состоит либо из строки, указанной в свойстве Предупреждение при редактировании, либо формируется автоматически. Если свойство АвтоОтметкаНезаполненногополя ввода установлено в значение Истина, то свойство этого поля ОтметкаНезаполненногобудет автоматически актуализироваться при передаче значения из реквизита в поле ввода. Для стандартных полей Коди Номер(для объектов с автоматической нумерацией) автоматическая строка предупреждения будет выглядеть как Номер заполняется при записи автоматически, а для остальных полей автоматическая строка будет выглядеть как Редактирование поля "Имя поля" не рекомендуется. Если значение свойства Отображение предупреждения при редактировании равно Авто, то для стандартных реквизитов Коди Номербудет использоваться значение Отображать, а для остальных полей – Не отображать. Свойство Отображение предупреждения при редактировании также оказывает влияние на свойство поля ввода Пропускать при вводе. Если значение свойства Пропускать при вводе равно Авто, то поле будет пропускаться при вводе в том случае, если значение свойства Отображение предупреждения при редактировании равно Отображать (или Авто для стандартных полей Коди Номер). Для реквизита формы типа СтандартныйПериодили СтандартнаяДатаНачаласуществуют два способа редактирования: ● С использованием одного поля формы. В этом случае можно разместить на форме поле, связанное непосредственно с редактируемым реквизитом. Тогда все редактирование будет выполняться именно в этом поле. ● С использованием нескольких полей. При этом можно разместить на форме поля, связанные со свойствами реквизита. В этом случае разработчик может сам реализовывать необходимую логику взаимодействия варианта стандартного периода и значений дат. Свойство поля ввода Подсказка ввода позволяет указывать подсказку, которая будет формироваться непосредственно «внутри» поля ввода, если выполняются следующие условия: ● Тип связанного реквизита не является типом Числоили Дата. ● Значение связанного реквизита не содержит значение по умолчанию для данного типа. 7.5.4. Декорация Представляет собой оформительский элемент формы. Декорация не связана с данными (реквизитами формы). Декорация может представлять собой надпись или картинку. СОВЕТ. Рекомендуется использовать декорацию только для неизменяемых текстовых пояснений. Текст, который может изменяться программно, рекомендуется отображать полем вида поле надписи. 7.5.5. Таблица Элемент формы Таблица предназначен для визуализации табличных данных. Это может быть динамический список, табличная часть, список значений и т. д. Положение командной панели таблицы регулируется свойством Положение командной панели элемента формы. Состав стандартных команд, располагающихся в командной панели таблицы, регулируется с помощью свойства Состав команд. Команды, отключенные при редактировании данного свойства, становятся недоступными. Имеется возможность группировать колонки с помощью элемента формы Группа. Подробнее об этом см. здесь. Для реквизита формы типа СписокЗначенийсуществует выбор, каким образом реквизит будет отображаться. Если выбирается вариант Таблица, то список значений будет выглядеть как таблица с доступными колонками: Значение, Представление, Пометка и Картинка. При этом следует помнить об особенности отображения значений в колонке Значение. В этой колонке будет отображено значение колонки Представление. Само значение при этом остается неизменным. Если будет выбран тип Поле ввода, то для редактирования списка будет открыто специальное окно. Также для таблицы, связанной с реквизитом типа СписокЗначений, предоставляется стандартный набор команд редактирования, включая команды установки и снятия пометок. Если таблица связана с реквизитом типа ДинамическийСписок, у которого в настройках списка (свойство реквизита формы Настройка списка) задана группировка, то список всегда будет отображаться в режиме Дерево (свойство элемента формы Отображение), вне зависимости от того, какой режим отображения задан разработчиком. Если для табличного поля, связанного с динамическим списком, установлено свойство Только просмотр, то при открытии из такого списка форм объектов им будет автоматически установлен параметр формы ТолькоПросмотр. Также для таблицы, связанной с динамическим списком, имеется возможность управлять обновлением списка при изменении данных с помощью свойства Обновление при изменении данных. Если свойство установлено в значение Авто, то список будет автоматически обновляться при любых изменениях отображаемых данных. Если свойство имеет значение Не обновлять, то список не будет выполнять автоматическое обновление и для обновления списка необходимо явно выполнить команду Обновить(). Если для динамического списка задано автоматическое обновление с указанным интервалом и свойство Обновление при изменении данных установлено в значение Авто, интервал отсчитывается от ближайшего изменения данных, а если в значение Не обновлять – от последнего вызова автоматического обновления или выполнения команды Обновить(). Для таблицы, связанной с основным реквизитом формы типа динамический список, имеется возможность управлять режимом множественного выбора с помощью соответствующего параметра формы. Значение параметра формы МножественныйВыборбудет установлено в одноименное свойство таблицы. При этом свойство Режим выделения будет установлено в значение Множественный, если параметр формы МножественныйВыбор имеет значение Истина. При открытии формы выполняется чтение данных только для видимых таблиц, связанных с динамическими списками. Для таблиц, которые не видимы при открытии формы, чтение данных выполняется в момент их (таблиц) отображения пользователю. В частности, для невидимых таблиц, значение свойства ТекущаяСтрокабудет равно Неопределено. Эту особенность следует учитывать при разработке логики формы. Для динамического списка, находящегося в режиме выбора, при добавлении нового объекта будет выполнена проверка на соответствие добавленного объекта установленным критериям отбора, и если новый объект удовлетворяет критериям отбора, на него будет установлен курсор в таблице, отображающей динамический список. Если форма списка плана счетов или справочника с иерархией элементов открывается с установленными параметрами РазрешитьВыборКорня, равным Истина, и РежимВыбора, равным Истина, то для всех таблиц формы, связанных с основным реквизитом формы (типа ДинамическийСписок), будут автоматически изменены значения следующих свойств: ● свойство ОтображатьКореньбудет установлено в значение Истина; ● свойство РазрешитьВыборКорнябудет установлено в значение Истина; ● свойство Отображениебудет установлено в значение Дерево. Если таблица отображает иерархический список, для которого установлена картинка строк, то для строк таблицы, отображающих группы, установленная картинка будет игнорироваться и всегда будет выводиться стандартная картинка группы. ПРИМЕЧАНИЕ. Если таблица отображает динамический список (см. здесь) и свойство Начальное отображение дерева установлено в значение Раскрывать все уровни, то при создании формы на сервере будет получен только список строк, отображаемых на первом уровне, а затем, при открытии формы, будут получены остальные отображаемые строки. Причем для каждой отображаемой группы будет выполнен отдельный запрос к серверу. При разработке форм возникают ситуации, когда необходимо в таблице предотвратить прокрутку некоторых колонок. Например, в табличной части нужно зафиксировать колонки Номер, Номенклатура и Сумма. При этом колонки Номер и Номенклатура требуется прижать к левому краю таблицы, а Сумма – к правому. Для выполнения такой операции предназначено свойство ФиксацияВТаблице. Данное свойство доступно у поля, размещенного в таблице, и у группы вида Группа колонок (см. здесь). В нашем примере необходимо для колонок Номер и Номенклатура установить свойство ФиксацияВТаблицев значение Лево, а для колонки Сумма – в значение Право. Колонки будут прижаты к соответствующему краю таблицы вне зависимости от того, где эти колонки были расположены в редакторе формы, однако зафиксированные колонки располагаются в том порядке, в котором они расположены в редакторе формы. Если признак фиксации указан у группы, то прижата будет вся группа (вместе со всеми подчиненными элементами формы), при этом значение свойства ФиксацияВТаблицедля подчиненных элементов игнорируется. Если признак фиксации указан у колонки, входящей в группу, для которой свойство ФиксацияВТаблицеустановлено в значение Нет, то колонка будет обрабатываться как отдельная колонка, не входящая в группу. Свойство Поиск при вводе символов отвечает за то, каким образом система будет обрабатывать набор символов с клавиатуры, если активным элементом является таблица и в колонку невозможен непосредственный ввод данных: ● Авто – в этом случае окно поиска открывается для таблицы, связанной с динамическим списком, для остальных таблиц окно поиска не открывается. ● Использовать – окно поиска открывается для любых типов реквизитов, связанных с таблицей. ● Не использовать – окно поиска не открывается для любых типов реквизитов, связанных с таблицей. 7.5.6. Кнопка На форме команда отображается элементом формы Кнопка. Кнопка может отображаться в командной панели и просто на форме. В случае своего отображения на форме кнопка может также иметь вид гиперссылки (для этого нужно изменить свойство Вид). Команда, к которой будет происходить обращение по нажатию кнопки, устанавливается с помощью свойства Команда. Установленное свойство Только во "Все действия" означает, что по умолчанию кнопка будет находиться в меню Еще (Все действия), однако пользователь может сделать кнопку доступной на панели, воспользовавшись специальным редактором. 7.5.7. Группа При разработке формы имеется возможность различного объединения элементов. Можно объединять поля, страницы формы, команды, колонки. На форме могут находиться группы элементов управления. Это могут быть группы полей, страницы, группы команд. Также для элементов типа Таблица можно создавать группы колонок. В редакторе можно создать группы следующих видов: ● Обычная группа – предназначена для объединения элементов формы. Такая группа может обладать различными вариантами обрамления: ● Нет – группа специально никак не выделяется; ● Слабое выделение – заголовок группы отображается большим шрифтом зеленого цвета; ● Обычное выделение – заголовок группы отображается большим шрифтом зеленого цвета. Вокруг элементов группы (с каждой стороны) формируются отступы; ● Сильное выделение – заголовок группы отображается большим шрифтом зеленого цвета. С левой стороны (на всю высоту группы) формируется полоса зеленого цвета. Снизу формируется отступ. Обычную группу можно настроить таким образом, что пользователь (в режиме «1С:Предприятия») сможет сворачивать или разворачивать такую группу. Например, можно разместить в сворачиваемой группе информацию, которая не важна при регулярной работе с формой, но иногда может потребоваться для просмотра и анализа. Поведение группы (обычная или сворачиваемая) определяется свойством Поведение. Начальное состояние группы определяется флажком Свернута. Группа не может быть свернута или развернута, если у нее не отображается заголовок или заголовок не заполнен. Прикладной разработчик не может определить текущее состояние группы из встроенного языка. Также он не может принудительно свернуть или развернуть группу. Управлять состоянием группы (свернутая или развернутая) можно с помощью специальной картинки или гиперссылки. Для задания элемента, управляющего состоянием, служит свойство Отображение управления. Также можно задать заголовок группы (свойство Свернутый заголовок), который будет отображаться в том случае, если группа находится в свернутом состоянии. Если свойство Свернутый заголовок не заполнено, то в свернутом состоянии будет отображаться обычный заголовок группы. ● Командная панель – элемент формы, предназначенный для размещения кнопок и групп. Свойство командной панели Источник команд определяет элемент формы (Форма или элементы формы типа Таблица), который предоставит «свои» команды для отображения в командной панели. Состав команд для отображения в командной панели регулируется свойством Состав команд элемента формы, являющегося источником команд. ● Группа, добавляемая в командную панель, может быть одного из следующих видов: ● Подменю – группа, которая позволяет делать выпадающие меню. ● Группа кнопок – позволяет создать группу кнопок, которые будут обладать следующими свойствами: ● группа кнопок отделяется разделителями слева и справа; ● каждая группа кнопок может обладать собственным источником команд. ● Страницы – данная группа предназначена для организации панели с закладками. Закладки могут располагаться как по вертикали, так и по горизонтали. Кнопки прокрутки появляются в том случае, если закладки не помещаются в отведенное им место на форме (по ширине или высоте группы Страницы). Для того чтобы добавить на такую панель страницы, необходимо добавить столько вложенных групп, сколько страниц должно быть у панели. Внутри группы вида Страницы могут располагаться только группы вида Страница: ● Страница – группа специального вида, которая предназначена для формирования страниц панели. Данная группа может содержать другие вложенные элементы. ● Группа колонок – позволяет объединять колонки в таблице. С помощью группы этого вида можно изменять правило группировки колонок (вертикальная или горизонтальная группировка). Группы могут быть вложенными. Элементы формы можно перемещать между группами. При этом автоматически определяется допустимость такого переноса. В случае, если перенос требует изменения каких-либо свойств элемента (например, Вид), изменение осуществляется автоматически. Если в результате изменились требования к подчиненным элементам, они либо автоматически изменяются, либо удаляются. Свойство Только просмотр группы влияет на все элементы, подчиненные группе. Свойство группы Разрешить изменение состава управляет возможностью изменять состав группы в процессе настройки формы пользователем. Если свойство выключено, то пользователь не может изменять состав и менять порядок элементов внутри группы. Однако свойство не влияет на возможность пользователя изменить видимость элементов, входящих в состав группы. Если у группы указано свойство Данные заголовка, то эти данные будут автоматически отображаться в заголовке группы. Если у группы установлено свойство Заголовок, то данные заголовка отображаются в скобках после заголовка: Заголовок (Данные заголовка). Любая группа кнопок (командная панель, подменю, группа кнопок, контекстное меню) заполняется по одинаковым правилам. Кнопки будут отображены в следующем порядке: 1. Кнопки, предоставляемые источником команд, с которым связана данная группа. 2. Кнопки командного интерфейса, если источник команд подразумевает его включение. 3. Пользовательские команды, добавленные в данную группу. 4. Команды меню Еще (Все действия) (только для командной панели). 5. Последней будет размещена Справка (в том случае если она была предоставлена источником команд). Если вышеприведенный автоматический порядок расположения кнопок в группе не устраивает, то можно воспользоваться следующими возможностями: ● Снять флажок Автозаполнение для командной панели формы, контекстного меню или командной панели элемента и добавить нужные команды (в нужном порядке) вручную. ● Отключить источник команд командной панели, затем добавить нужные команды (в нужном порядке) вручную, затем добавить группу типа Группа кнопок и установить для добавленной группы источник команд. ● Можно вручную поместить кнопку, связанную со стандартной командой источника команд, в необходимое место командной панели. В этом случае соответствующая команда не будет автоматически размещена в командной панели. 7.5.8. Специальные командные панели Кроме создания собственных командных панелей (элемент формы Группа вида Командная панель) редактор форм предоставляет возможность работать со специализированными командными панелями: ● Командная панель формы – система предоставляет командную панель формы. Ее видимостью, положением и наполнением можно управлять. Видимость и положение панели управляются с помощью свойства формы Положение командной панели, а содержимое управляется свойством Автозаполнение специальной группы Командная панель. Кроме стандартных команд, которые могут быть добавлены на командную панель формы, туда автоматически добавляются команды из раздела Командная панель формы глобального командного интерфейса. Если основным реквизитом формы является динамический список и у командной панели формы установлено свойство Автозаполнение, то в нее автоматически будут добавлены команды, предоставляемые этим динамическим списком. Если на форме также присутствует элемент формы, отображающий дерево, то командная панель формы будет дополнена командами, которые предоставлены реквизитом, связанным с таким элементом. ● Командная панель таблицы – системой автоматически предоставляется командная панель для элемента формы вида Таблица. Ее видимостью, положением и наполнением можно управлять. Видимость и положение панели управляются с помощью свойства формы Положение командной панели, а содержимое управляется свойством Автозаполнение специальной группы Командная панель. ● Контекстное меню элемента – имеется возможность модифицировать стандартное контекстное меню элемента формы. Для этого контекстное меню необходимо отобразить в дереве элементов формы с помощью команды контекстного меню Показать контекстное меню элемента формы. Если в контекстное меню элемента добавить элемент вида Группа и указать у этой группы в качестве источника команд другой элемент формы, то добавленная группа будет заполнена командами (в режиме 1С:Предприятие) по тем же правилам, что и контекстное меню элемента, выбранного в качестве источника команд. Во все вышеперечисленные командные панели можно добавлять собственные команды, которые создаются с помощью редактора команд. Если есть необходимость поместить команды, расположенные в командной панели формы (см. здесь), в какую-либо командную панель, то необходимо выполнить следующее: ● Разместить в командной панели элемент Группа – Командная панель. ● Выбрать эту группу в качестве источника команд Глобальные команды командной панели формы. Если в командной панели или контекстном меню, содержащем группу с источником команд Глобальные команды командной панели формы, есть группа, для которой установлен источник команд Форма, то при заполнении этой группы команды, относящиеся к командному интерфейсу формы, не добавляются. 7.5.9. Особенности поведения элементов формы В режиме ТолькоПросмотр, который установлен как для конкретного элемента, так и для формы в целом, поля формы вида надпись, картинка, декорация-надпись, декорация-картинка отображаются незапрещенными. Если для поля вида надпись или картинка свойства Гиперссылкаустановлено в значение Истина, то при выборе гиперссылки (с помощью клавиши ENTER или двойного щелчка мыши) будет срабатывать обработчик события элемента формы Нажатие. Разработчику необходимо самому выполнять обработку свойства ТолькоПросмотру формы или соответствующего элемента и выполнять соответствующие действия (например, по блокировке данных для редактирования). Элемент формы Кнопка, связанный с командой, у которой свойство Изменяет сохраняемые данные имеет значение Истина, будет отображаться запрещенным, если для него (или формы в целом) установлено свойство ТолькоПросмотрравным значению Истина. Если в обработчике ПриИзмененииполя, расположенного в таблице формы, выполняются действия, которые ведут к вызову сервера и перестроению формы, то обработчики событий этой таблицы ПриОкончанииРедактированияи ПередОкончаниемРедактированияне будут вызваны. Табличный документ, расположенный на форме, по вертикали прокручивается построчно. 7.5.10. Правила размещения элементов формы В общем случае можно определить правила размещения элементов формы следующим образом: ● Элементы формы размещаются в горизонтальном (каждый новый элемент формы располагается правее предыдущего) или вертикальном (каждый новый элемент формы располагается ниже предыдущего) направлении (в зависимости от свойства формы Группировка), без ограничения по количеству отображаемых элементов. ● Порядок отображения элементов определяется порядком их расположения на закладке Элементы редактора формы. ● Размер формы (и элементов формы) может быть ограничен свойствами Ширина и Высота (или Высота в строках таблицы). ● В случае, если при размещении элементов заданные размеры формы будут превышены, в форме появятся линейки прокрутки. ● Если отображаемый элемент является группой, то правила размещения элементов формы внутри группы эквивалентны правилам размещения внутри формы. Несмотря на простоту алгоритма, у разработчика есть несколько способов существенно вмешаться в этот алгоритм и повысить удобочитаемость формы: ● группы элементов формы, ● размеры элементов, ● ширина подчиненных элементов. Далее мы рассмотрим подробнее каждую из перечисленных возможностей. ВНИМАНИЕ! При размещении элементов одновременно работают и основные правила размещения, и дополнительные правила, которые рассмотрены ниже. 7.5.10.1. Группы и объединение элементов формы Для объединения элементов формы доступны несколько видов элемента формы Группа: ● Командная панель – не позволяет изменять правила размещения, установленные для родительского элемента формы (другой группы или формы). ● Страница – позволяет изменять правила размещения элементов. ● Обычная группа – позволяет изменять правила размещения элементов. ● Группа колонок – позволяет изменять правила размещения элементов (колонок таблицы формы). Для группы вида Обычная группа или Страница можно задавать группировку (свойство Группировка) элементов и ширину подчиненных элементов (свойство Ширина подчиненных элементов). Опишем пример использования такой группировки. Рис. 159. Вертикальная группировка Рассмотрим создание формы документа. При этом группировка элементов формы выбрана как Вертикальная, но мы хотим, чтобы реквизиты документа Дата и Номер располагались не в двух строках, а в одной. Для этого мы создадим группу с именем ДатаИНомер, установим свойство Группировка в значение Горизонтальная и поместим туда элементы формы Номер и Дата. Рис. 160. Горизонтальная группировка ПРИМЕЧАНИЕ. Следует отметить, что группы могут иметь неограниченную вложенность. При этом свойство Группировка может быть разным для каждой вложенной группы. 7.5.10.2. Размеры элементов формы Для каждого элемента формы можно задать размеры – высоту и ширину. Размеры задаются в абстрактных единицах измерения. Реальный размер элемента формы в режиме 1С:Предприятие может не совпадать с указанными размерами. При определении размеров элементов система учитывает шрифт (и его размеры), указанный в свойствах элементов формы. ПРИМЕЧАНИЕ. Изменение шрифта элемента формы, выполненное с помощью условного оформления, не учитывается при определении размера элементов. Если размеры заданы равными 0, то платформа будет вычислять размеры автоматически, стремясь к наилучшему отображению формы на экране. Если размеры заданы отличными от 0, то действуют следующие правила: ● размер, заданный для родительского элемента, ограничивает размеры подчиненных элементов; ● размер, заданный для подчиненного элемента, изменяет размер родительского элемента до тех пор, пока не нарушается предыдущее условие. Если размер родительского элемента задан таким образом, что подчиненные элементы не помещаются в отведенное место, то действуют следующие правила: ● Если они не помещаются по высоте, добавляется вертикальная полоса прокрутки. ● Если они не помещаются по ширине, уменьшается их размер так, чтобы они отображались без горизонтальной прокрутки. Тем не менее, горизонтальная прокрутка появится в форме, если уменьшить ее ширину так, что элементы больше не смогут уменьшаться по ширине. 7.5.10.3. Ширина подчиненных элементов При проектировании форм возникают ситуации, когда нужно расположить элементы формы в две колонки, шириной колонок подчеркнув их значимость. Для решения первой задачи (размещение в две колонки) необходимо использовать группы, а для решения второй задачи – использовать свойство Ширина подчиненных элементов (для групп, имеющих горизонтальную группировку элементов). ВНИМАНИЕ! Следует помнить, что свойство Ширина подчиненных элементов оказывает влияние на размещение элементов формы только тогда, когда у родительской группы установлена горизонтальная группировка и существуют только две подчиненные группы. Это свойство может иметь следующие значения: ● Авто – ширина элементов подбирается системой автоматически. ● Одинаковая – выбирается одинаковая ширина элементов. ● Левый широкий – ширина левого элемента относится к ширине правого элемента как 3:2. ● Левый очень широкий – ширина левого элемента относится к ширине правого элемента как 2:1. ● Левый узкий – ширина левого элемента относится к ширине правого элемента как 2:3. ● Левый очень узкий – ширина левого элемента относится к ширине правого элемента как 1:2. Рассмотрим это на примере. Рис. 161. Ширина подчиненных элементов Допустим, нам необходимо, чтобы в шапке документа было две колонки. В одной (левой) должны быть реквизиты Покупательи Склад, а в другой (правой) – реквизиты Вид цен и Валюта взаиморасчетов. При этом мы считаем, что левая колонка является более значимой, и мы хотим увеличить ее ширину. Для этого создаем группу Шапка и задаем в ней тип группировки Горизонтальная. В этой группе создаем еще две группы: Левая и Правая. Каждая группа имеет тип группировки Вертикальная. В группу Левая поместим реквизиты Покупательи Склад, а в группу Правая – реквизиты ВидЦени Валюта. Затем у группы Шапка установим свойство Ширина подчиненных элементов в значение Левый очень широкий. ПРИМЕЧАНИЕ. Основное предназначение свойства Ширина подчиненных элементов состоит в том, чтобы указать платформе, какие пропорции следует соблюдать при формировании формы. 7.5.11. Выравнивание границ элементов формы При размещении элементов в форме система «1С:Предприятие» выполняет автоматическое выравнивание левой границы областей данных элементов формы в зависимости от типа элемента формы и некоторых правил. В данном разделе описываются правила выравнивания границ элементов формы. Элемент формы состоит из области данных – области элемента формы, в которой отображаются данные, и области заголовка (заголовок) – области элемента формы, которая отображает заголовок (см. рис. 162). Стандартная ширина области данных определяет ширину области данных и обладает следующими свойствами: ● определяется типом данных реквизита, связанных с элементом формы или свойством Ширина элемента формы; ● не зависит от свойства элемента формы Растягивать по горизонтали. Рис. 162. Структура элемента формы 7.5.11.1. Выравнивание левых границ областей данных 7.5.11.1.1. Общие правила Если в форму или группу вида Обычная группа или Страница с вертикальной группировкой (свойство Группировка установлено в значение Вертикальная) поместить несколько элементов, имеющих заголовки, отображаемые слева от области данных, то будет выполнено выравнивание левых границ областей данных элементов формы. Рис. 163. Выравнивание левой границы Однако для выполнения такого выравнивания необходимо соблюдение следующих правил: ● Расширение заголовка не приведет к тому, что ширина области данных станет меньше стандартной ширины данных: Рис. 164. Ширина области данных стала меньше стандартной ширины области данных В примере, показанном на рис. 164, выравнивание перестает работать после того, как строка заголовка первого элемента расширится. При этом ширина области данных поля ФИО станет меньше, чем стандартная ширина области данных этого поля, в том случае, если бы выравнивание произошло. Это соотношение изменяет добавление к заголовку одной буквы «я». ● Ширина заголовка не станет существенно превышать максимальное значение из стандартной ширины области данных поля и ширины заголовка этого поля. Рис. 165. Заголовок больше стандартной ширины области данных В примере, показанном на рис. 165, выравнивание перестает работать после того, как строка заголовка второго элемента расширится так, что ширина заголовка поля Фамилия, имя, отчество... станет существенно больше, чем стандартная ширина области данных поля. Это соотношение изменяет добавление к заголовку слова «абонента». Если для нескольких элементов, расположенных вертикально, невозможно определить единую ширину заголовка по вышеописанным правилам, то система будет определять наборы элементов, внутри которых условия выполняются. Объединение в наборы не зависит от порядка следования элементов по вертикали. Объединение элементов начинается с элемента, заголовок которого имеет минимальную ширину. При этом элементы, расположенные в одном наборе, не обязательно будут следовать подряд. Рис. 166. Выравнивание наборов элементов При выравнивании следует учитывать некоторые особенности: ● Если у элемента формы нет заголовка или заголовок расположен не слева, то такой элемент не выравнивается. ● Таблицы формы не выравниваются, даже если у нее имеется заголовок, расположенный слева. Рис. 167. Таблицы не выравниваются ● Если между элементами есть элемент, для которого выравнивание неприменимо, то он не влияет на выравнивание. Рис. 168. Выравнивание неприменимо к элементу формы ● Для флажка отображаемыми данными считается прямоугольная область, в которой отображается сам флажок. Рис. 169. Выравнивание флажка 7.5.11.1.2. Вложенные группы Если элементы формы (с отображаемыми заголовками слева) расположены в группе типа Обычная группа, то выравнивание элементов будет происходить вместе с обрамляющими элементами только в том случае, если свойство Отображение у группы установлено в значение Нет. В противном случае элементы, помещенные в группу, при выравнивании не будут учитывать элементы, расположенные вокруг группы. Рис. 170. Выравнивание с учетом групп элементов 7.5.11.2. Выравнивание правых границ элементов формы Выравнивание правых границ элементов формы зависит от свойства элемента формы Растягивать по горизонтали. Если свойство Растягивать по горизонтали установлено в значение Авто, то выравниванием правой границы элементов управляет система. Если свойство установлено в значение Нет, то данный элемент не изменяет размер по горизонтали, а если у него есть вложенные элементы, препятствует изменению горизонтального размера этих элементов. Если свойство установлено в значение Да, то: 1. Правая граница элемента формы изменяет свое положение до тех пор, пока не «упрется» в другой элемент (или границу формы), препятствующий дальнейшему изменению положения. Рис. 171. Расширение элемента вправо до ограничителя 2. Вложенные элементы формы, у которых свойство Растягивать по горизонтали установлено в значение Да (или Авто – для некоторых элементов), также изменяют положение своей правой границы при изменении размера родительского элемента формы. Рис. 172. Расширение подчиненных элементов 3. Если правее элемента формы есть другие элементы формы, которые могут быть перемещены вправо, такое перемещение выполняется до тех пор, пока для самого правого элемента формы не срабатывает ограничение из п. 1 (элемент формы «толкает» своих соседей справа). Рис. 173. Перемещение элемента справа 4. Если свойство Растягивать по горизонтали установлено в значение Да для двух (и более) рядом расположенных элементов, то при изменении горизонтального размера родительского элемента такие элементы изменяют свою ширину одновременно и пропорционально. Рис. 174. Пропорциональное изменение В примере на рис. 174 кнопка Отмена, расположенная между декорациями, не изменяет свой размер, т. к. у нее нет свойства Растягивать по горизонтали. 7.5.11.3. Выравнивание нижних границ элементов формы Выравнивание нижних границ элементов формы зависит от свойства элемента формы Растягивать по вертикали. Если свойство Растягивать по вертикали установлено в значение Авто, то выравниванием нижних границ элементов управляет система. Если свойство установлено в значение Нет, то данный элемент не изменяет размер по вертикали, а если у него есть вложенные элементы, препятствует изменению вертикального размера этих элементов. Если свойство установлено в значение Да, то: 1. Нижняя граница элемента формы изменяет свое положение до тех пор, пока не «упрется» в другой элемент (или границу формы), препятствующий дальнейшему изменению положения. Рис. 175. Расширение элемента 2. Вложенные элементы формы, у которых свойство Растягивать по вертикали установлено в значение Да (или Авто – для некоторых элементов), также изменяют положение своей нижней границы при изменении размера родительского элемента формы. Рис. 176. Изменение вложенного элемента 3. Если ниже элемента формы есть другие элементы формы, которые могут быть перемещены вниз, такое перемещение выполняется до тех пор, пока для самого нижнего элемента формы не срабатывает ограничение из п. 1 (элемент формы «толкает» своих соседей снизу). Эта ситуация изображена на рис. 176 (элемент Склад). 7.5.12. Механизм перетаскивания В «1С:Предприятии» поддерживается операция перетаскивания. С ее помощью можно осуществлять перенос данных между разными элементами формы. Например, можно переносить элементы списка справочника из одной группы в другую, переносить данные из табличного поля в поле табличного документа или перенести список выделенных файлов из проводника Microsoft Windows в какой-либо элемент формы. Операции перетаскивания поддерживают следующие элементы формы: ● таблица формы, ● поле табличного документа, ● поле календаря, ● поле картинки, ● декорация-картинка. При операциях перетаскивания используются следующие термины: ● источник данных – элемент формы, из которого можно перетаскивать данные; ● приемник данных – элемент формы, в который можно перетаскивать данные. Существует возможность разрешать или запрещать элементам управления предоставлять или принимать данные, т. е. быть источником или приемником данных. Для этого у элементов формы существуют следующие свойства: ● Разрешить начало перетаскивания – разрешает элементу формы предоставлять данные. ● Разрешить перетаскивание – разрешает элементу формы принимать данные. Эти свойства можно устанавливать из палитры свойств или из встроенного языка. При нажатии кнопки мыши на выделенной области элемента управления у элемента управления – источника данных вызывается обработчик события НачалоПеретаскивания. В качестве параметров данного события передаются объекты типа ПараметрыПеретаскиванияи Выполнение. Параметр ПараметрыПеретаскиванияимеет следующие свойства: ● Значение– содержит перетаскиваемое значение, например, для табличного поля это может быть ссылка на объект, для табличного документа – область табличного документа, для календаря – дата. Можно присвоить этому свойству свое значение (например, какую-нибудь структуру), тогда это значение будет являться перетаскиваемым объектом. Для таблицы управляемой формы, связанной с реквизитом формы типа ДанныеФормыКоллекция, ДанныеФормыДеревоили ДанныеФормыСтруктраСКоллекцией,в качестве значения перетаскивания передается: ● идентификатор строки (или массив идентификаторов), если перетаскивание осуществляется в рамках одной таблицы; ● элемент коллекции (или массив элементов), если перетаскивание осуществляется между разными таблицами. ● Действие– указывает действие перетаскивания и является значением типа ДействиеПеретаскивания. ● ДопустимыеДействия– указывает допустимые действия перетаскивания и является значением типа ДопустимыеДействияПеретаскивания. При помощи этого свойства можно указать, какие операции возможны с данными источника данных (например, только копирование). Параметр Выполнениепозволяет разрешить или запретить стандартную обработку операции перетаскивания из данного элемента управления. Для события НачалоПеретаскиваниястандартной обработкой является начало перетаскивания данных. Далее у элемента формы – приемника данных вызывается обработчик события ПроверкаПеретаскивания. Данный обработчик вызывается всякий раз, когда курсор попадает на новый объект в элементе формы – приемнике данных (например, в новую ячейку таблицы или поля табличного документа, при попадании в новую дату в поле календаря). Набор параметров данного события зависит от элемента формы – приемника данных, но первые два параметра у всех одинаковы. Это объекты типа ПараметрыПеретаскиванияи СтандартнаяОбработка. Остальные параметры описывают объект под курсором. При обработке данного события можно управлять видом курсора, т. е. например, указывать, что перетаскивание в данный элемент управления запрещено или возможно только копирование. Для этого нужно установить необходимое действие в свойстве Действиепараметра ПараметрыПеретаскивания. Необходимо учитывать, что устанавливаемое действие перетаскивания должно быть разрешенным, т. е. не вступать в противоречие со значением свойства ДопустимыеДействия. Например, действие Копированиене вступает в противоречие со значением допустимых действий КопированиеИПеремещение, а значение Перемещениевступает в противоречие со значением допустимых действий Копирование. Параметр СтандартнаяОбработкаиспользуется для указания возможности стандартной обработки элементом формы данного события. Стандартная обработка перетаскивания зависит от типа элемента управления: ● Для таблицы проверяется возможность вставки значения, т. е. проверяется тип значения, и, если он совпадает с типом отображаемых данных, производятся стандартные действия. Стандартные действия для иерархических динамических списков – перемещение в группу, для таблиц, отображающих наборы записей или табличные части, – изменение порядка строк и копирование. Если у таблицы свойство ИзменятьПорядокСтрокустановлено в значение Ложь, то при перетаскивании внутри таблицы стандартная обработка отменяет перетаскивание и событие Перетаскиваниевызвано не будет. Если свойство ИзменятьПорядокСтрокустановлено в значение Истинаили перетаскивание осуществляется извне таблицы, стандартная обработка не отменяет перетаскивание. Стандартная обработка не отменяет перетаскивание, если у таблицы свойство РежимВыделенияустановлено в значение Множественный, свойство ИзменятьПорядокСтрокустановлено в значение Истинаили перетаскивание осуществляется извне таблицы, и перетаскивается более одного элемента. ● Для поля табличного документа – проверка возможности вставить передаваемое значение. ● Для поля картинки и календаря стандартной обработки нет. Если отпустить клавишу мыши в элементе формы – приемнике данных, вызывается обработчик события Перетаскивание. Набор параметров этого события тот же, что и у события ПроверкаПеретаскивания. Параметр СтандартнаяОбработкапозволяет разрешить или запретить стандартную обработку события элементом формы. Стандартные действия перетаскивания описаны выше. Затем в элементе управления – источнике данных вызывается обработчик события ОкончаниеПеретаскивания. При обработке этого события элемент формы – приемник данных может, например, удалить перемещенные данные или очистить какие-либо переменные. 7.6. Командный интерфейс формы Командный интерфейс формы состоит: ● из панели навигации формы, ● командной панели самой формы. Имеется возможность редактирования командного интерфейса формы: включение новых, использование имеющихся команд и т. д. Заметим, что командный интерфейс формы редактируется на отдельной закладке в редакторе формы и описывает состав панели навигации вспомогательного окна, в котором отображается форма, и частично состав командной панели формы. В основном этот механизм нужен для настройки команд глобального интерфейса, которые необходимо отображать в форме в этих двух панелях. Состав командной панели формы определяется и непосредственно в структуре элементов, и в редакторе командного интерфейса. Команда автоматически попадает в командный интерфейс формы, в случае если тип параметра параметризованной команды совпадает с типом основного реквизита формы. Кроме того, можно принудительно добавить команду в нужную панель командного интерфейса. Для этого достаточно просто перетащить ее в нужную группу нужной командной панели. Установленный признак Автоположение показывает, что будет использована последовательность команд, формируемая системой по умолчанию. Если его отключить, то можно редактировать порядок команд. Для того чтобы настроить видимость команд, которые расположены в панелях командного интерфейса, можно снять флажок в колонке Автовидимость и изменить значение в колонке Видимость. 7.7. Различные подходы к модальности 7.7.1. Общая информация В прикладных решениях, разрабатываемых с помощью системы «1С:Предприятие», часто возникает необходимость открыть форму, которая будет предоставлять одновременно несколько возможностей: ● Блокировать работу с другими фрагментами интерфейса прикладного решения; ● Позволять ввести какую-либо информацию (включая ответ на вопрос); ● Останавливать исполнение кода прикладного решения до момента, пока не будет завершена работа с открытой формой. Причем рассматриваемые формы могут быть созданы прикладным разработчиком на встроенном зыке «1С:Предприятие» и являться частью самой платформы (например формы, которые открывают методы Предупреждение(), Вопрос()и т. д.). В рамках системы «1С:Предприятие» существуют две схемы использования таких форм: ● Модальные окна; ● Блокирующие окна. В рамках одного прикладного решения может использовать или какой-либо один подход или смешанная модель. Для управления такой возможностью существует специальное свойство конфигурации – Режим использования модальности (см. здесь). Первая схема использования модальности (модальные окна) предполагает использование особых типов окон операционной системы – модальные окна. В случае использования этой схемы исполнение кода на встроенном языке останавливается до тех пор, пока модальная форма не будет закрыта. Значение возврата будет получено непосредственно в месте открытия модальной формы и сразу после этого (в том же методе) можно выполнять какие-либо действия с этим значением: проанализировать, использовать в алгоритме и т. д. Модальные окна можно открыть с помощью методов ОткрытьФормуМодально()или Предупреждение(). Однако, модальные окна не поддерживаются при работе на устройствах iPad и плохо поддерживаются в веб-клиенте. В этих случаях рекомендуется использовать схему использования модальности с помощью блокирующих окон. Основное отличие блокирующего окна от модального заключается в том, что открытие блокирующего окна не останавливает исполнение кода на встроенном языке. Получение результата работы блокирующего окна выполняется с помощью специальной процедуры обратного вызова. Следствием этой особенности является тот, что алгоритм, использующий модальные вызовы для управления своей работой, будет необходимо полностью переработать для использования с блокирующими окнами. С точки зрения прикладного разработчика, разница между двумя схемами использования модальных окон будет продемонстрирована на следующем примере. Допустим, что есть некоторый клиентский обработчик, который задает пользователю вопрос и в зависимости от данного ответа выполняет одну или другую ветку прикладного кода. Пример с модальными окнами: &НаКлиенте Процедура ВыполнитьАлгоритм() Результат = Вопрос("Выполнить быстро или не медленно?", РежимДиалогаВопрос.ДаНет); Если Результат = КодВозвратаДиалога.Да Тогда // Первый вариант алгоритма Иначе // Второй вариант алгоритма КонецЕсли; КонецПроцедуры В этом примере (модальные окна) работа встроенного языка остановится на строке Результат = Вопрос()и продолжится только после того, как пользователь ответит на заданный вопрос. Пример с блокирующими окнами: &НаКлиенте Процедура ВыполнитьАлгоритм(Команда) ОбратныйВызов = Новый ОписаниеОповещения("ВыполнитьАлгоритмОбратныйВызов", ЭтотОбъект); ПоказатьВопрос(ОбратныйВызов, "Выполнить быстро или не медленно?", РежимДиалогаВопрос.ДаНет); КонецПроцедуры &НаКлиенте Процедура ВыполнитьАлгоритмОбратныйВызов(Результат, ДополнительныеПараметры) Экспорт Если Результат = КодВозвратаДиалога.Да Тогда // Первый вариант алгоритма Иначе // Второй вариант алгоритма КонецЕсли; КонецПроцедуры В этом примере (с использованием блокирующих окон) алгоритм оказывается разделенным на две части: ● Место, где отображается вопрос пользователю; ● Место, где обрабатывается ответ пользователя. Но это разные фрагменты прикладного кода. После вызова метода ПоказатьВопрос()исполнение кода на встроенном языке не завершится. Однако, пользователь сможет ответить на заданный вопрос только в том случае, когда исполнение кода на встроенном языке будет завершено и управление будет передано системе «1С:Предприятие». Следовательно, в месте вызова метода, отображающего форму с вопросом, невозможно получить результат работы пользователя с открытой формой. После того, как пользователь ответит на вопрос, будет вызвана экспортная процедура, описание которой прикладной разработчик должен передать в метод открытия блокирующего окна. Описание метода обратного вызова создается с помощью объекта ОписаниеОповещения. Метод обратного вызова может располагаться в модуле формы, модуле команды и общем модуле. Если требуется указать, что метод обратного вызова находится в том же модуле, что и вызов блокирующего окна, следует использовать значение ЭтотОбъект. Также имеется возможность передать в обработчик обратного вызова различные вспомогательные данные, которые в самом обработчике будут доступны через формальный параметр ДополнительныеПараметры. Это могут быть входные данные для работы алгоритма, различные параметры и т. д. В общем случае, после вызова любого метода работы с блокирующими окнами, метод, содержащий такой вызов, должен сразу завершаться, а весь дальнейший код должен быть расположен в обработчике оповещения. В том случае, если требуется организовать каскадный вызов методов обратного вызова, следует использовать метод ВыполнитьОбработкуОповещения(). Также этот метод можно использовать в тех случаях, когда реализация какого-либо действия может произойти либо сразу, либо после задания вопроса о необходимости действия. Например, при попытке перечитать файл с данными, проверяется текущее состояние редактора, и если данные в редакторе изменены – задается вопрос о возможности перечитать данные. Пример: &НаКлиенте Процедура ПеречитатьДанные(Команда) ОбратныйВызов = Новый ОписаниеОповещения("ПеречитатьДанныеЗавершение", ЭтотОбъект, ИмяФайлаСДанными); Если Модифицированность Тогда ПоказатьВопрос(ОбратныйВызов, "Данные изменены. Перечитать?", РежимДиалогаВопрос.ДаНет); Иначе ВыполнитьОбработкуОповещения(ОбратныйВызов, КодВозвратаДиалога.Да); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ПеречитатьДанныеЗавершение(Результат, ИмяФайла) Экспорт Если Результат = КодВозвратаДиалога.Да Тогда // выполним чтение данных Модифицированность = Ложь; КонецЕсли; КонецПроцедуры 7.7.2. Особенности использования блокирующих окон В тонком и толстом клиенте, в отличие от веб-клиента, метод НачатьПомещениеФайла()останавливает исполнение кода на встроенном языке. Тем не менее, после завершения операции вызов процедуры обратного вызова, переданной в метод НачатьПомещениеФайла(), все равно будет выполнен. Для того чтобы избежать различий в поведении при работе в тонком клиенте и веб-клиенте, следует весь код, который должен быть выполнен после помещения файла, размещать строго в обработчике обратного вызова. Если логика построения прикладного решения требует, чтобы при закрытии формы пользователю был задан вопрос, то следует это делать особым образом, который отражен в примере: &НаКлиенте Перем ОтветПередЗакрытием; &НаКлиенте Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) Если ОтветПередЗакрытием <> Истина Тогда Отказ = Истина; ОбратныйВызов = Новый ОписаниеОповещения("ПередЗакрытиемЗавершение", ЭтотОбъект); ПоказатьВопрос(ОбратныйВызов, "ЗакрытьФорму?", РежимДиалогаВопрос.ДаНет); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ПередЗакрытиемЗавершение(Результат, ДополнительныеПараметры) Экспорт Если Результат = КодВозвратаДиалога.Да Тогда ОтветПередЗакрытием = Истина; Закрыть(); Иначе ОтветПередЗакрытием = Неопределено; КонецЕсли; КонецПроцедуры Фактически, закрытие формы выполняется в два этапа: ● Вначале задается вопрос о необходимости (возможности) закрытия формы и собственно закрытие формы отменяется. ● После того, как пользователь ответил на вопрос, в специальной клиентской переменной отмечается, что сейчас будет выполнено «настоящее» закрытие формы и форма закрывается повторно. Для объектов ДиалогРедактированияСтандартногоПериода, КонструкторФорматнойСтроки, ДиалогВыбораШрифта, ДиалогВыбораЦвета, ДиалогРасписанияРегламентногоЗаданияв обработчик обратного вызова, который передается при вызове метода Показать(), в качестве первого параметра передается значение основного свойства закрываемого диалога, если в диалоге нажата кнопка ОК или Неопределенов остальных случаях. Например, при редактировании стандартного периода, в качестве первого параметра обработчика обратного вызова будет выступать объект СтандартныйПериод(или Неопределено). 7.7.3. Соответствие методов При переработке существующих алгоритмов, использующих модальные окна, на блокирующие окна, будет полезна следующая таблица, в которой приведено соответствие «модальных» и «блокирующих» методов глобального контекста и различных объектов: Объект «Модальный» метод «Блокирующий» метод Глобальный контекст ОткрытьФормуМодально() ОткрытьФорму() Вопрос() ПоказатьВопрос() ОткрытьЗначение() ПоказатьЗначение() Предупреждение() ПоказатьПредупреждение() ВвестиДату() ПоказатьВводДаты() ВвестиЗначение() ПоказатьВводЗначения() ВвестиСтроку() ПоказатьВводСтроки() ВвестиЧисло() ПоказатьВводЧисла() УстановитьВнешнююКомпоненту() НачатьУстановкуВнешнейКомпоненты() УстановитьРасширениеРаботыСФайлами() НачатьУстановкуРасширенияРаботыСФайлами() УстановитьРасширениеРаботыСКриптографией() НачатьУстановкуРасширенияРаботыСКриптографией() ПосместитьФайл() НачатьПомещениеФайла() ДиалогРедактированияСтандартногоПериода Редактировать() Показать() КонструкторФорматнойСтроки ОткрытьМодально() Показать() ОбработкаРасшифровкиКомпоновкиДанных ВыбратьДействие() ПоказатьВыборДействия() ДиалогВыбораШрифта Выбрать() Показать() ДиалогВыбораЦвета Выбрать() Показать() ДиалогРасписанияРегламентногоЗадания ОткрытьМодально() Показать() СписокЗначений ОтметитьЭлементы() ПоказатьОтметкуЭлементов() ВыбратьЭлементы() ПоказатьВыборЭлементов() ОткрытьМодально() Открыть() ВыбратьИзМеню() ПоказатьВыборИзМеню() ВыбратьИзСписка() ПоказатьВыборИзСписка() УправляемаяФорма 7.8. Работа с формой из встроенного языка 7.8.1. Открытие формы Для того чтобы открыть форму, существуют два способа: ● Воспользоваться методом ОткрытьФорму()/ОткрытьФормуМодально(). ● Воспользоваться комбинацией метода ПолучитьФорму()и метода Открыть()или ОткрытьМодально()объекта УправляемаяФорма. В любом из перечисленных случаев можно передать в открываемую форму параметры формы. Использовать метод ОткрытьФорму()рекомендуется во всех случаях, кроме необходимости открыть форму в модальном режиме и затем получить результат работы формы через реквизиты открываемой формы. Такая особенность связана с тем, что в качестве значения возврата модальной формы будут выступать те данные, которые возвращает сама форма, и у разработчика не будет доступа к объекту УправляемаяФорма, чтобы получить реквизиты формы. Если предварительно получить форму методом ПолучитьФорму(), доступ к реквизитам можно будет получить после завершения работы метода ОткрытьМодально(). Пример 1: // Откроем форму списка справочника товары // в режиме "только просмотр" Параметры = Новый Структура("ТолькоПросмотр", Истина); ОткрытьФорму("Справочник.Товары.ФормаСписка", Параметры); Пример 2: // Открыть модальную форму и после закрытия // получить доступ к реквизитам формы Форма = ПолучитьФорму("ОбщаяФорма.ВыборПериода"); Результат = Форма.ОткрытьМодально(); Если Результат = КодВозвратаДиалога.Да Тогда ДатаНачала = Форма.ДатаНачала; ДатаОкончания = Форма.ДатаОкончания; КонецЕсли; Описание работы с параметрами формы см. здесь. ПРИМЕЧАНИЕ. Не следует выполнять программное открытие и закрытие одной и той же формы в одном вызове встроенного языка. 7.8.2. Переопределение открываемой формы В прикладных системах может возникать задача открытия различных форм при различных параметрах объекта (или текущего окружения). Например, для элемента справочника Номенклатуранужно открывать разные формы для собственно товара и для услуги. Или для некоторого автоматизированного рабочего места нужно открывать разные формы в зависимости от текущих настроек пользователя. Для выполнения такой задачи в модуле менеджера объекта следует создать обработчик события ОбработкаПолученияФормы. В этом обработчике нужно выполнить все необходимые проверки и принять решение о том, какую форму следует открывать. Данный обработчик вызывается только в том случае, если происходит попытка открыть стандартную форму объекта с помощью имен форм по умолчанию. Так, при открытии формы элемента справочника Номенклатурав следующем случае обработчик будет вызван. ОткрытьФорму("Справочник.Номенклатура.ФормаОбъекта"); Однако обработчик не будет вызван, если попытаться открыть форму следующим образом. ОткрытьФорму("Справочник.Товары.Форма.ФормаЭлемента"); Рассмотрим пример с разными формами формы элемента справочника более подробно. При открытии формы будет выполняться анализ реквизита Видсправочника Номенклатура, и в том случае, если значение этого свойства равно значению Перечисления.ВидыТоваров.Услуга, открывать форму ФормаУслугисправочника Номенклатура. Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) Если ВидФормы = "ФормаОбъекта" И Параметры.Ключ.Вид = Перечисления.ВидыТоваров.Услуга Тогда ВыбраннаяФорма = Метаданные.Справочники.Товары.Формы.ФормаУслуги; СтандартнаяОбработка = Ложь; КонецЕсли; КонецПроцедуры Данный обработчик следует разместить в модуле менеджера справочника Номенклатура. ПРИМЕЧАНИЕ. Обработчик ОбработкаПолученияФормыне вызывается при попытке открытия общих форм, форм констант, форм хранилищ настроек, внешних отчетов и внешних обработок. 7.8.3. Модификация свойств элементов формы В процессе работы с формой возникают ситуации, когда необходимо изменять какие-либо свойство элементов формы, например, доступность элементов. Для выполнения этих действий следует воспользоваться коллекцией Элементы. Данная коллекция предоставляет доступ к списку всех элементов формы (без учета иерархии). Для доступа к иерархии элементов предназначены свойства Родительи ПодчиненныеЭлементы(для элементов группа, таблица и для собственно формы). Так, отключение доступности элемента формы Водительвыполняется следующим образом: Элементы.Водитель.Доступность = Ложь; Следует обратить внимание на особенность установки свойств ТолькоПросмотр, Доступностьи Видимостьдля элементов, содержащих подчиненные элементы. Установка свойства для родительского элемента оказывает влияние также на все подчиненные элементы формы. При этом значение изменяемого свойства самого элемента не изменяется. Другими словами, фактическое значение свойств ТолькоПросмотр, Доступностьи Видимость конкретного элемента формы определяется как сложение «по И» значений этих свойств всех родителей данного элемента. Например, мы имеем группу ВалютаДокумента, которая состоит из полей ввода Валютаи КурсВалюты. Если необходимо сделать всю группу недоступной, достаточно выполнить следующее: Элементы.ВалютаДокумента.Доступность = Ложь; СОВЕТ. При программной модификации свойств элементов формы следует избегать неоправданной модификации свойств, для которых в синтакспомощнике указано Изменение свойства на клиенте требует обращения к серверу. Это замедляет работу формы и требует лишних обращений к серверу. ПРИМЕЧАНИЕ. Если модификация элементов формы приводит к изменению расположения элементов на форме (например, при изменении видимости элементов формы), то возможны вызовы различных обработчиков событий, связанных с активизацией элементов (например, будет вызвано событие ПриАктивизацииСтрокиу таблицы). Программное изменение свойства Виду элемента формы, обладающего расширением (поле, таблица, группа, декорация), приводит к созданию нового расширения элемента формы. Свойства элемента формы, относящиеся к расширению, устанавливаются в значения по умолчанию и не переносятся из расширения элемента, которое было до изменения свойства Вид. ПРИМЕЧАНИЕ. Следует помнить, что свойства элементов формы, относящиеся к отображаемым данным (например, ПутьКДанным, ПутьКДаннымЗаголовкаи т. д.), можно изменять только для новых элементов формы или после смены вида элемента формы. 7.8.4. Модификация формы Существует возможность программной модификации формы. Для модификации (создания, изменения и удаления) доступны: ● реквизиты формы, ● локальные команды формы, ● элементы формы. ПРИМЕЧАНИЕ. Удалять можно только те объекты, которые созданы программно. Общую схему программной работы с формой можно представить следующим образом: ● изменение состава реквизитов формы, ● изменение состава команд формы, ● изменение состава элементов формы. Отдельно следует заметить, что работа по добавлению, изменению и удалению составных частей формы возможна только на сервере. Также стоит обратить внимание на тот факт, что на программную модель формы не оказывают влияния пользовательские настройки и функциональные опции формы. При выполнении пользовательских настроек пользователь будет настраивать именно ту форму, которую он видит (с учетом программных модификаций формы). Если пользователь добавляет какие-либо элементы формы, то обращение к таким элементам из встроенного языка невозможно. Об этой особенности следует помнить и при разработке механизмов взаимодействия с пользователем. Так, например, если в элемент формы Группа вида Страницы пользователь добавит страницу, то при переходе на эту страницу свойство группы ТекущаяСтраницастанет равно Неопределено. Свойство формы ТекущийЭлементтакже будет содержать значение Неопределенов том случае, когда активным элементом формы является элемент, добавленный пользователем. Более подробно рассмотрим все этапы модификации формы. 7.8.4.1. Изменение состава реквизитов Изменение (добавление и удаление) реквизитов выполняется методом ИзменитьРеквизиты()объекта УправляемаяФорма. При этом действия удаления и добавления выполняются за один вызов. Это позволяет выполнять операцию изменения свойств реквизитов формы. При этом следует понимать, что операция изменения состава реквизитов является ресурсоемкой операцией (фактически происходит полное создание формы), именно поэтому операции изменения состава реквизитов формы выполняются пакетным образом. Рассмотрим подробнее методику создания реквизитов. Вначале нам необходимо создать нужное количество объектов типа РеквизитФормы. При создании реквизита мы указываем его имя, тип реквизита и то место в иерархии реквизитов формы (см. здесь), которое будет занимать создаваемый реквизит. Так, если мы создаем таблицу значений из двух колонок, то программный код для их создания будет выглядеть следующим образом: МоиРеквизиты = Новый Массив; МоиРеквизиты.Добавить(Новый РеквизитФормы("ТаблицаДанных", Новый ОписаниеТипов("ТаблицаЗначений"), , "Таблица значений", Ложь)); МоиРеквизиты.Добавить(Новый РеквизитФормы("Поставщик", Новый ОписаниеТипов("СправочникСсылка.Контрагенты"), "ТаблицаДанных", "Кто поставляет", Ложь)); МоиРеквизиты.Добавить(Новый РеквизитФормы("Товар", Новый ОписаниеТипов("СправочникСсылка.Товары"), "ТаблицаДанных", "Имя товара", Ложь)); Следует обратить внимание, что для двух последних реквизитов предпоследний параметр указывает, для какого реквизита будут создаваться колонки. Другими словами, существует возможность добавлять колонки для реквизитов тех типов, которые это позволяют. На рис. 177 изображены реквизиты, созданные в редакторе формы, аналог которых создает код, приведенный выше. Рис. 177. Эквивалент программному коду После того как были созданы все реквизиты, которые планировалось создать в форме, следует выполнить изменение списка реквизитов: ИзменитьРеквизиты(ДобавляемыеРеквизиты, УдаляемыеРеквизиты); Выполнение данного кода приведет к тому, что система вначале удалит реквизиты, перечисленные в массиве УдаляемыеРеквизиты, а затем выполнит добавление реквизитов из массива ДобавляемыеРеквизиты. После чего произойдет перестроение формы. При удалении реквизитов происходит потеря данных, которые в них содержатся, однако если добавляемый и удаляемый реквизит имеют совместимые типы или добавляемый реквизит отличается от удаляемого реквизита только свойствами (но не типом), то данные, хранимые реквизитом, будут сохранены. После добавления реквизита обращение к нему в программном коде возможно только с помощью конструкции ЭтаОбъект.ИмяРеквизита. Выражение «ЭтаОбъект.» является обязательным для программно добавляемых реквизитов. Для того чтобы изменить состав или свойства реквизитов, следует вначале получить изменяемые реквизиты. Сделать это можно с помощью метода ПолучитьРеквизиты(). Следует обратить внимание на две особенности полученного списка: ● данный список не является динамическим и не отслеживает изменения реквизитов, которые произошли после вызова метода; ● несмотря на то, что полученный список можно изменять, эти изменения никак не отразятся на реальных свойствах реквизитов формы. После того как получен интересующий нас список реквизитов формы, можно выполнить с полученными реквизитами какие-либо действия (например, изменить заголовки всех реквизитов) и затем выполнить метод изменения реквизитов. Изменение реквизитов следует делать с предварительным удалением. Например, если мы хотим изменить свойства реквизита ПараметрЗаказа, то это следует делать таким образом: МассивРеквизитов = ПолучитьРеквизиты("ПараметрЗаказа");... // Выполним изменения реквизита... УдаляемыеРеквизиты = Новый Массив; УдаляемыеРеквизиты.Добавить("ПараметрЗаказа"); ИзменитьРеквизиты(МассивРеквизитов, УдаляемыеРеквизиты); 7.8.4.2. Изменение состава команд Для того чтобы управлять составом команд формы, у объекта УправляемаяФормасуществует специальная коллекция – Команды. С помощью этой коллекции мы можем добавлять, удалять и изменять команды формы. Так, для добавления команды КомандаУстановкиСтатусас заголовком Установить статус, которая будет вызывать обработчик с именем ОбработчикПрограммныхКоманд, необходимо выполнить следующий программный код: &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Команда = Команды.Добавить("КомандаУстановкиСтатуса"); Команда.Действие = "ОбработчикПрограммныхКоманд"; Команда.Заголовок = "Установить статус"; КонецПроцедуры &НаКлиенте Процедура ОбработчикПрограммныхКоманд(Команда)... КонецПроцедуры Обработчик команды должен существовать в модуле формы и предваряться директивой компиляции &НаКлиенте. ПРИМЕЧАНИЕ. Один обработчик может обслуживать несколько программно добавляемых команд. 7.8.4.3. Работа с элементами формы После того как созданы все необходимые реквизиты и команды, можно добавлять элементы управления. Для управления элементами формы у объекта УправляемаяФормасуществует коллекция Элементы, с помощью которой можно добавлять, удалять, изменять свойства элементов формы, а также перемещать элементы формы между родителями. Коллекция Элементыпредоставляет доступ к списку элементов формы, который не учитывает возможную иерархию элементов. Для работы с иерархией у объекта коллекции Элементысуществуют свойства Родительи ПодчиненныеЭлементы. Первое свойство указывает на родительский элемент формы, например, для поля формы, расположенного в группе, свойство Родительбудет указывать на элемент формы типа ГруппаФормы. Свойство ПодчиненныеЭлементысуществует у тех элементов формы, которые могут иметь подчиненные элементы. Например, для элемента формы типа ГруппаФормыколлекция ПодчиненныеЭлементыбудет содержать те элементы, которые расположены в этой группе. Для перемещения элемента из одной коллекции в другую (например, из одной группы в другую) существует метод Переместить(). Параметры данного метода описывают перемещаемый элемент, нового родителя элемента и тот элемент формы, перед которым нужно поместить перемещаемый элемент. Если последний параметр метода не указан, то перемещаемый элемент будет размещен в конце коллекции элементов нового родителя. ПРИМЕЧАНИЕ. При программном изменении состава элементов формы возможны вызовы различных обработчиков событий, связанных с активизацией элементов (например, будет вызвано событие ПриАктивизацииСтрокиу таблицы). Рассмотрим подробнее способ добавления элемента управления. В примере показано, как разместить на форме два элемента: ● поле формы, связанное с реквизитом формы; ● кнопку, связанную с командой формы. &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) МоиРеквизиты = Новый Массив; ТипСтрока = Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки()); МоиРеквизиты.Добавить(Новый РеквизитФормы("ОписаниеОбъекта", ТипСтрока, "", "Описание объекта", Ложь)); ИзменитьРеквизиты(МоиРеквизиты); Команда = Команды.Добавить("ИзменитьСтроку"); Команда.Действие = "ОбработчикПрограммныхКоманд"; Команда.Заголовок = "Изменить строку"; Элемент = Элементы.Добавить("ОписаниеОбъекта", Тип("ПолеФормы")); Элемент.Вид = ВидПоляФормы.ПолеВвода; Элемент.ПутьКДанным = "ОписаниеОбъекта"; Элемент = Элементы.Добавить("ИзменитьСтроку", Тип("КнопкаФормы")); Элемент.ИмяКоманды = "ИзменитьСтроку"; КонецПроцедуры... &НаКлиенте Процедура ОбработчикПрограммныхКоманд(Команда) ЭтаОбъект.ОписаниеОбъекта = "Описание объекта, сформированное командой"; КонецПроцедуры Форма, в которой будет размещен этот код, будет выглядеть как на рис. 178. Форма показана после того, как пользователь нажал кнопку Изменить строку. Рис. 178. Результат программной модификации формы 7.8.5. Работа с динамическим списком В данном разделе приведены примеры выполнения некоторых операций по работе с динамическим списком, размещенным в форме. ПРИМЕЧАНИЕ. Примеры, приведенные ниже, не являются законченным. Они предназначены для демонстрации различных механизмов работы с динамическим списком. 7.8.5.1. Параметр запроса динамического списка В данном разделе приведен пример установки параметра запроса динамического списка. Предположим, что для динамического списка указан следующий запрос к данным: ВЫБРАТЬ Товары.Код КАК Код, Товары.Наименование КАК Наименование, Товары.Артикул КАК Артикул, ТоварныеЗапасыОстатки.КоличествоОстаток КАК Количество, ЦеныТоваровСрезПоследних.Цена КАК Цена, Товары.ЭтоГруппа ИЗ Справочник.Товары КАК Товары ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварныеЗапасы.Остатки(, Склад = &Склад) КАК ТоварныеЗапасыОстатки ПО (ТоварныеЗапасыОстатки.Товар = Товары.Ссылка) ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныТоваров.СрезПоследних(, ВидЦен = &ВидЦен) КАК ЦеныТоваровСрезПоследних ПО Товары.Ссылка = ЦеныТоваровСрезПоследних.Товар Тогда для установки параметров данного запроса (в обработчике ПриСозданииНаСервере()) нужно указать параметры Склади ВидЦенследующим образом. // СписокТоваров – реквизит формы типа ДинамическийСписок // Параметры.Склад и Параметры.ВидЦен – параметры формы соответствующих типов &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) СписокТоваров.Параметры.УстановитьЗначениеПараметра("Склад", Параметры.Склад); СписокТоваров.Параметры.УстановитьЗначениеПараметра("ВидЦен", Параметры.ВидЦен); КонецПроцедуры 7.8.5.2. Отбор В данном разделе приведены примеры установки и удаления отбора в динамическом списке. Установить Функция добавляет отбор в динамический список и возвращает созданный элемент отбора. Функция ДобавитьОтбор(СписокОтборов, ИмяПоля, Значение, ВидСравнения = Неопределено, Использование = Истина) НовыйЭлемент = СписокОтборов.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); НовыйЭлемент.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяПоля); НовыйЭлемент.ВидСравнения = ?(ВидСравнения = Неопределено, ВидСравненияКомпоновкиДанных.Равно, ВидСравнения); НовыйЭлемент.ПравоеЗначение = Значение; НовыйЭлемент.Использование = Использование; Возврат НовыйЭлемент; КонецФункции Пример использования: // ДинамическийСписок – реквизит формы типа "ДинамическийСписок" // В списке должна быть колонка "Контрагент" // Выполняется установка отбора по полю "Контрагент", значение // отбора находится в переменной "КонтрагентСсылка", отбор включен, // условие отбора – равно. ДобавитьОтбор(ДинамическийСписок.КомпоновщикНастроек.ФиксированныеНастройки.Отбор, "Контрагент", КонтрагентСсылка); Удалить Процедура удаляет отбор динамического списка и возвращает результат удаления. Если имя поля с удаляемым отбором не указано, выполняется очистка списка отборов. Функция УдалитьОтбор(СписокОтборов, ИмяПоля = "") Если ПустаяСтрока(ИмяПоля) Тогда СписокОтборов.Элементы.Очистить(); Возврат Истина; КонецЕсли; Поле = Новый ПолеКомпоновкиДанных(ИмяПоля); ОтборУдален = Ложь; Для каждого ЭлементОтбора Из СписокОтборов.Элементы Цикл Если ЭлементОтбора.Использование И ЭлементОтбора.ЛевоеЗначение = Поле Тогда СписокОтборов.Элементы.Удалить(ЭлементОтбора); ОтборУдален = Истина; КонецЕсли; КонецЦикла; Возврат ОтборУдален; КонецФункции Пример использования: // ДинамическийСписок – реквизит формы типа "ДинамическийСписок" // В списке должна быть колонка "Контрагент" // Выполняется удаление отбора по полю "Контрагент". Результат = УдалитьОтбор(ДинамическийСписок.КомпоновщикНастроек.ФиксированныеНастройки.Отбор, "Контрагент"); 7.8.5.3. Группировка В данном разделе приведены примеры установки и удаления группировки в динамическом списке. Установка Функция добавляет группировку в динамический список и возвращает созданный элемент группировки. Функция ДобавитьГруппировку(СписокГруппировок, ИмяПоля, Использование = Истина, ТипГруппировки = Неопределено) Поле = Новый ПолеКомпоновкиДанных(ИмяПоля); НовыйЭлемент = СписокГруппировок.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных")); НовыйЭлемент.Использование = Использование; НовыйЭлемент.Поле = Поле; НовыйЭлемент.ТипГруппировки = ?(ТипГруппировки = Неопределено, ТипГруппировкиКомпоновкиДанных.Элементы, ТипГруппировки); Возврат НовыйЭлемент; КонецФункции Пример использования: // ДинамическийСписок – реквизит формы типа "ДинамическийСписок" // В списке должна быть колонка "Контрагент" // // Выполняется создание группировки по полю "Контрагент", созданная // группировка будет использоваться, тип группировки – только элементы ДобавитьГруппировку(ДинамическийСписок.КомпоновщикНастроек.ФиксированныеНастройки.Группировка, "Контрагент"); Удаление Процедура удаляет группировку динамического списка и возвращает результат удаления. Если имя поля с удаляемой группировкой не указано, выполняется очистка списка группировок. Функция УдалитьГруппировку(СписокГруппировок, ИмяПоля = "") Если ПустаяСтрока(ИмяПоля) Тогда СписокГруппировок.Элементы.Очистить(); Возврат Истина; КонецЕсли; Поле = Новый ПолеКомпоновкиДанных(ИмяПоля); ГруппировкаУдалена = Ложь; МассивЭлементовДляУдаления = Новый Массив; Для каждого ЭлементГруппировки из СписокГруппировок.Элементы Цикл Если ЭлементГруппировки.Поле = Поле тогда МассивЭлементовДляУдаления.Добавить(ЭлементГруппировки); КонецЕсли; КонецЦикла; Для каждого УдаляемыйЭлемент из МассивЭлементовДляУдаления Цикл СписокГруппировок.Элементы.Удалить(УдаляемыйЭлемент); ГруппировкаУдалена = Истина; КонецЦикла; Возврат ГруппировкаУдалена; КонецФункции Пример использования: // ДинамическийСписок – реквизит формы типа "ДинамическийСписок" // // Выполняется удаление всех группировок в динамическом списке Результат = УдалитьГруппировку(ДинамическийСписок.КомпоновщикНастроек.ФиксированныеНастройки.Группировка); 7.8.5.4. Порядок (сортировка) В данном разделе приведены примеры установки и удаления упорядочивания динамического списка. Установка Функция добавляет поле сортировки в динамический список и возвращает созданный элемент порядка. Функция ДобавитьПорядок(СписокПорядков, ИмяПоля, Использование = истина, ТипУпорядочивания = Неопределено) Поле = Новый ПолеКомпоновкиДанных(Поле); НовыйЭлемент = СписокПорядков.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных")); НовыйЭлемент.Использование = Использование; НовыйЭлемент.Поле = Поле; НовыйЭлемент.ТипУпорядочивания = ?(ТипУпорядочивания = Неопределено, НаправлениеСортировкиКомпоновкиДанных.Возр, ТипУпорядочивания); Возврат НовыйЭлемент; КонецФункции Пример использования: // ДинамическийСписок – реквизит формы типа "ДинамическийСписок" // В списке должна быть колонка "Наименование" // // Выполняется установка сортировки по полю "Наименование", // направление сортировки – по убыванию, сортировка используется ДобавитьПорядок(ДинамическийСписок.КомпоновщикНастроек.ФиксированныеНастройки.Порядок, "Наименование", НаправлениеСортировкиКомпоновкиДанных.Убыв); Удаление Процедура удаляет сортировку динамического списка и возвращает результат удаления. Если имя поля упорядочивания не указано, выполняется очистка списка упорядочивания. &НаКлиенте Функция УдалитьПорядок(СписокПорядков, ИмяПоля = "") Если ПустаяСтрока(ИмяПоля) Тогда СписокПорядков.Элементы.Очистить(); Возврат Истина; КонецЕсли; Поле = Новый ПолеКомпоновкиДанных(ИмяПоля); ПорядокУдален = Ложь; МассивЭлементовДляУдаления = Новый Массив; Для каждого ЭлементПорядка из СписокПорядков.Элементы Цикл Если ЭлементПорядка.Поле = Поле тогда МассивЭлементовДляУдаления.Добавить(ЭлементПорядка); КонецЕсли; КонецЦикла; Для каждого УдаляемыйЭлемент из МассивЭлементовДляУдаления Цикл СписокПорядков.Элементы.Удалить(УдаляемыйЭлемент); ПорядокУдален = Истина; КонецЦикла; Возврат ПорядокУдален; КонецФункции Пример использования: // ДинамическийСписок – реквизит формы типа "ДинамическийСписок" // // Выполняется удаление (не отключение) порядка по полю "Наименование" Результат = УдалитьПорядок(ДинамическийСписок.КомпоновщикНастроек.ФиксированныеНастройки.Порядок, "Наименование"); 7.8.5.5. Условное оформление В данном разделе приведены примеры задания условного оформления динамического списка. В условном оформлении используется динамический список Список, в котором есть поля Организацияи Сумма(типа Число). В примере задаются три элемента условного оформления: ● если значение поля Суммаменьше 500, то текст полей Организацияи Суммаоформляется красным цветом; ● если значение поля Суммабольше 500, но меньше 10 000, то для всех полей строки текст оформляется синим цветом; ● если значение поля Суммабольше 10 000, то текст полей Организацияи Суммаоформляется зеленым цветом. Также в примере используется функция установки отбора (см. здесь). Функция УстановитьУсловноеОформление(СписокОформления, ИменаОформляемыхПолей, СтруктураОформление, Использование = Истина) Экспорт НовыйЭлемент = СписокОформления.Элементы.Добавить(); НовыйЭлемент.Использование = Использование; // Зададим оформляемые поля, заданные массивом с именами полей Для каждого ИмяПоля Из ИменаОформляемыхПолей Цикл ОформляемоеПоле = НовыйЭлемент.Поля.Элементы.Добавить(); ОформляемоеПоле.Использование = Истина; ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(ИмяПоля); КонецЦикла; // Зададим оформление, заданное структурой, // в которой – Ключ: имя параметра оформления, // а Значение – значение параметра оформления Для каждого ЭлементОформления Из СтруктураОформление Цикл НовыйЭлемент.Оформление.УстановитьЗначениеПараметра(ЭлементОформления.Ключ, ЭлементОформления.Значение); КонецЦикла; Возврат НовыйЭлемент; КонецФункции Пример задания условного оформления: ЭлементыУсловногоОформления = Список.КомпоновщикНастроек.ФиксированныеНастройки.УсловноеОформление; ОформляемыеПоля = Новый Массив; ОформляемыеПоля.Добавить("Сумма"); ОформляемыеПоля.Добавить("Организация"); // ***** Установка красного цвета для суммы менее 500 Оформление = Новый Структура; Оформление.Вставить("ЦветТекста", Новый Цвет(128,0,0)); НовыйЭлемент = Список.УстановитьУсловноеОформление(ЭлементыУсловногоОформления, ОформляемыеПоля, Оформление); // Зададим условие оформления: Сумма < 500 Список.ДобавитьОтбор(НовыйЭлемент.Отбор, "Сумма", 500, ВидСравненияКомпоновкиДанных.Меньше); // ***** Установка зеленого цвета для суммы более 10 000 Оформление = Новый Структура; Оформление.Вставить("ЦветТекста", Новый Цвет(0,128,0)); НовыйЭлемент = Список.УстановитьУсловноеОформление(ЭлементыУсловногоОформления, ОформляемыеПоля, Оформление); // Зададим условие оформления: Сумма > 10 000 Список.ДобавитьОтбор(НовыйЭлемент.Отбор, "Сумма", 10000, ВидСравненияКомпоновкиДанных.Больше); // установка синего цвета, если сумма в интервале от 500 до 10 000 Оформление = Новый Структура; Оформление.Вставить("ЦветТекста", Новый Цвет(0,0,128)); // Передача пустого массива в качестве списка оформляемых полей // означает оформление всех полей строки НовыйЭлемент = Список.УстановитьУсловноеОформление(ЭлементыУсловногоОформления, Новый Массив, Оформление); // Cоздадим группу условий "И" ГруппаОтборов = НовыйЭлемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); ГруппаОтборов.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ; // Зададим условие оформления: Сумма > 500 И Сумма < 10 000 Список.ДобавитьОтбор(ГруппаОтборов, "Сумма", 500, ВидСравненияКомпоновкиДанных.Больше); Список.ДобавитьОтбор(ГруппаОтборов, "Сумма", 10000, ВидСравненияКомпоновкиДанных.Меньше); Глава 8. Работа с запросами Для формирования и выполнения запросов к таблицам базы данных в системе используется специальный объект Запрос. Запросудобно использовать, когда необходимо получить сложную выборку данных, сгруппированную и отсортированную нужным образом. Одним из классических примеров его применения может служить сводка по состоянию регистра учета на определенный момент времени. Кроме того, механизм запросов позволяет легко получать информацию в различных временных разрезах. 8.1. Источники данных (таблицы) запросов В качестве источников данных языка запросов выступают таблицы базы данных. Таблицы подразделяются на два основных класса: реальные и виртуальные. Реальные таблицы хранятся в базе данных, то есть интерпретируются из реально существующей таблицы базы данных. В случае использования реальной таблицы могут присутствовать вычисляемые поля, значения которых вычисляются как функция нескольких реальных полей. Виртуальные таблицы не хранятся в базе данных. При обращении к информации виртуальных таблиц система автоматически собирает информацию реальных таблиц базы данных для выполнения запроса. Виртуальная таблица может быть параметризована, то есть реальное наполнение виртуальной таблицы может определяться значениями параметров, фактические значения которых задаются в тексте запроса. Для каждой виртуальной таблицы определяется имя, которое используется в запросах для идентификации таблицы. Имя таблицы может быть задано на английском и русском языках. Например, Справочник.Товары. Имена таблиц и полей не могут совпадать с ключевыми словами языка запросов. Отдельный подкласс таблиц образуют так называемые объектные таблицы. В качестве объектной таблицы обязательно выступает реальная таблица базы данных. Смысловое отличие объектных таблиц от прочих следует из названия – объектные таблицы предназначены для хранения состояния объектов системы «1С:Предприятие», таких как справочники, документы и т. п. Каждой объектной таблице соответствует тип объектов системы «1С:Предприятие». Например, объектам типа Справочник.Товарысоответствует одна таблица, объектам типа Справочник.Контрагенты– другая. Каждая отдельная запись объектной таблицы хранит состояние отдельного объекта соответствующего типа. В соответствии с этим у каждой объектной таблицы определено поле типа Cсылкана текущую запись. Кроме того, для объектных таблиц определен способ получения пользовательского представления объекта из содержимого полей записи. Объектные таблицы могут быть также иерархическими. Для иерархических таблиц определяется специально выделенное поле Родитель, содержащее ссылку на запись, которой в соответствии с иерархией подчиняется текущая запись. В качестве поля таблицы может фигурировать: ● поле виртуальной или реальной таблицы, ● вложенная таблица. Основное отличие обычного поля от вложенной таблицы состоит в том, что в рамках одной записи обычному полю соответствует одно-единственное значение, а вложенной таблице соответствует значение типа РезультатЗапросас заранее заданным набором колонок. Примером вложенной таблицы может являться табличная часть документа или справочника. В качестве типов значения полей таблиц может выступать значение типа NULL. Такие значения содержатся в полях записей таблиц, для которых данное поле не определено или не имеет смысла. Например, значения такого типа содержатся в записях, относящихся к группам справочника, по полям, для которых установлено, что они могут иметь значение только у элементов этого справочника. 8.2. Язык запросов Как было описано выше, для выполнения запроса необходимо составить текст запроса. Текст запроса – это инструкция, в соответствии с которой должен быть выполнен запрос. В тексте запроса описывается, какие таблицы информационной базы используются в качестве источников данных запроса, поля таблиц, которые требуется обрабатывать в запросе, правила группировки, сортировки результатов и т. д. Инструкция составляется на специальном языке (языке запросов) и состоит из отдельных частей – секций, предложений, слов, функций и комментариев. Далее в этой главе рассматривается назначение и способы использования всех конструкций языка запросов. 8.2.1. Синтаксическая диаграмма конструкций языка запросов В данной главе синтаксис языка запросов описывается при помощи набора правил. Каждое правило описывает одну конструкцию языка. Каждая конструкция языка может содержать в себе ключевые слова; разделители (точки, запятые, круглые скобки), в свою очередь, другие конструкции языка. <Конструкция языка> ЭТО_КЛЮЧЕВОЕ_СЛОВО <Это_конструкция_языка>, <Это_конструкция_языка> ЭТО_ФУНКЦИЯ ( <Это_конструкция_языка> ) В правилах, описывающих язык запросов, конструкции языка указываются в угловых скобках. Ключевые слова и названия функций описываются заглавными буквами. Конструкции языка могут содержать необязательные элементы – ключевые слова и пр. В правилах, описывающих язык запросов, необязательные элементы заключены в квадратные скобки. [ЭТО_НЕОБЯЗАТЕЛЬНОЕ_СЛОВО] [<Это_необязательная_конструкция>] В некоторых случаях в конструкции языка может использоваться один из нескольких альтернативных элементов. Такие элементы в правилах перечисляются через вертикальную черту. ЛИБО_ЭТО_СЛОВО | ЛИБО_ЭТО_СЛОВО <Либо_эта_конструкция> | <Либо_эта_конструкция> Описания всех конструкций сопровождаются примерами, поясняющими порядок их использования в языке запросов. 8.2.2. Комментарии в языке запросов Текст запроса может включать комментарии. Комментарием считается часть строки, начинающаяся с последовательности символов // и продолжающаяся до конца строки. // Это комментарий При выполнении запроса комментарии игнорируются. ПРИМЕЧАНИЕ. Конструктор запросов удаляет комментарии из текста. 8.2.3. Использование предопределенных данных конфигурации Текст запроса может содержать предопределенные данные конфигурации, такие как: ● значения перечислений, ● предопределенные данные: ● справочников, ● планов видов характеристик, ● планов счетов, ● планов видов расчетов, ● пустые ссылки, ● значения точек маршрута бизнес-процессов. Также текст запроса может содержать значения системных перечислений, которые могут быть присвоены полям в таблицах базы данных: ВидДвиженияНакопления, ВидСчетаи ВидДвиженияБухгалтерии. Обращение в запросах к предопределенным данным конфигурации и значениям системных перечислений осуществляется с помощью литерала функционального типа. ЗНАЧЕНИЕ(<ПредставлениеЗначения>) Для системных перечислений представление значения имеет вид: <ИмяСистемногоПеречисления>.<Значение> Допустимые имена системных перечислений приведены выше, с перечнем допустимых для каждого из них значений можно ознакомиться в его описании. Для предопределенных данных конфигурации представление значения имеет вид: <ТипПредопределенногоЗначения>.<ИмяОбъектаМетаданных>.<Значение> Тип предопределенного значения может быть: ● Справочник(Catalog); ● ПланВидовХарактеристик(ChartOfCharacteristicTypes); ● ПланСчетов(ChartOfAccounts); ● ПланВидовРасчета(ChartOfCalculationTypes); ● Перечисление(Enum). В качестве имени объекта метаданных указывается имя объекта метаданных, как оно задано в конфигураторе. Для определенных в конфигурации перечислений значение указывается как имя соответствующего объекта метаданных типа ЗначениеПеречисления. Для всех остальных типов предопределенных значений – как имя предопределенного элемента данных, как оно указано в конфигураторе, или ПустаяСсылка (EmptyRef) для указания пустой ссылки. Для точек маршрутов бизнес-процессов представление значения имеет вид: БизнесПроцесс.<ИмяОбъектаМетаданных>.ТочкаМаршрута.<ИмяТочкиМаршрута> Ниже приведено несколько фрагментов запросов, поясняющих использование предопределенных данных в запросах. ГДЕ Город = ЗНАЧЕНИЕ(Справочник.Города.Москва) ГДЕ Город = ЗНАЧЕНИЕ(Справочник.Города.ПустаяСсылка) ГДЕ ТипТовара = ЗНАЧЕНИЕ(Перечисление.ВидыТоваров.Услуга) ГДЕ ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) ГДЕ ТочкаМаршрута = ЗНАЧЕНИЕ(БизнесПроцесс.Согласование.ТочкаМаршрута.Согласие) 8.2.4. Двуязычное представление ключевых слов Одной из существенных особенностей языка запросов системы «1С:Предприятие» является то, что, как и во встроенном языке, все ключевые слова имеют два варианта написания: на русском и английском языках. Далее в этой главе указываются русские варианты написания ключевых слов. Ниже в таблице приведены соответствия русского и английского вариантов написания ключевых слов языка запросов. Русское написание Английское написание АВТОУПОРЯДОЧИВАНИЕ AUTOORDER БУЛЕВО BOOLEAN В IN ВНЕШНЕЕ OUTER ВНУТРЕННЕЕ INNER ВОЗР ASC ВСЕ ALL ВЫБОР CASE ВЫБРАТЬ SELECT ВЫРАЗИТЬ CAST ГДЕ WHERE ГОД YEAR ДАТА DATE ДАТАВРЕМЯ DATETIME ДЕКАДА TENDAYS ДЕНЬ DAY ДЕНЬГОДА DAYOFYEAR ДЕНЬНЕДЕЛИ WEEKDAY ДЛЯ ИЗМЕНЕНИЯ FOR UPDATE [OF] ДОБАВИТЬКДАТЕ DATEADD ЕСТЬ IS ЕСТЬNULL ISNULL ЗНАЧЕНИЕ VALUE И AND ИЕРАРХИИ HIERARCHY ИЕРАРХИЯ HIERARCHY ИЗ FROM ИЛИ OR ИМЕЮЩИЕ HAVING ИНАЧЕ ELSE ИНДЕКСИРОВАТЬ ПО INDEX BY Истина TRUE ИТОГИ... ПО TOTALS... BY КАК AS КВАРТАЛ QUARTER КОГДА WHEN КОЛИЧЕСТВО COUNT КОНЕЦПЕРИОДА ENDOFPERIOD КОНЕЦ END ЛЕВОЕ LEFT Ложь FALSE МАКСИМУМ MAX МЕЖДУ BETWEEN МЕСЯЦ MONTH МИНИМУМ MIN МИНУТА MINUTE НАЧАЛОПЕРИОДА BEGINOFPERIOD НЕ NOT НЕДЕЛЯ WEEK НЕОПРЕДЕЛЕНО UNDEFINED ОБЩИЕ OVERALL ОБЪЕДИНИТЬ UNION ПЕРВЫЕ TOP ПЕРИОДАМИ PERIODS ПОДОБНО LIKE ПОЛНОЕ FULL ПОЛУГОДИЕ HALFYEAR ПОМЕСТИТЬ INTO ПРАВОЕ RIGHT ПРЕДСТАВЛЕНИЕ PRESENTATION ПУСТАЯТАБЛИЦА EMPTYTABLE РАЗЛИЧНЫЕ DISTINCT РАЗРЕШЕННЫЕ ALLOWED СГРУППИРОВАТЬ ПО GROUP BY СЕКУНДА SECOND СОЕДИНЕНИЕ... ПО JOIN... ON СПЕЦСИМВОЛ ESCAPE ПОДСТРОКА SUBSTRING СЕКУНДА SECOND СРЕДНЕЕ AVG ССЫЛКА REFS СТРОКА STRING СУММА SUM ТИП TYPE ТИПЗНАЧЕНИЯ VALUETYPE ТОГДА THEN ТОЛЬКО ONLY УБЫВ DESC УПОРЯДОЧИТЬ ПО ORDER BY ЧАС HOUR ЧИСЛО NUMBER УНИЧТОЖИТЬ DROP ПРИМЕЧАНИЕ. Регистр букв (строчные или заглавные) при написании не имеет значения. 8.2.5. Основные секции текста запроса Текст запроса можно описать следующим правилом: <Текст Запроса> <Описание запроса> [<Объединение запросов>] [<Упорядочивание результатов>] [АВТОУПОРЯДОЧИВАНИЕ] [<Описание итогов>] Как видно из этого правила, текст запроса состоит из нескольких частей, или секций: ● <Описание запроса> – это единственная обязательная секция в тексте запроса, и во многих случаях достаточно указать только ее. В секции определяются источники данных запроса, поля выборки, группировки и т. д. Эта секция, в свою очередь, описывается целым набором правил и подробно рассматривается ниже. ● <Объединение запросов> – язык запросов позволяет объединять результаты выполнения нескольких запросов. Описание объединения запросов см. здесь. ● В секции <Упорядочивание результатов> можно определить условия упорядочивания строк в результате запроса. Описание упорядочивания результата запроса см. здесь. ● Секция АВТОУПОРЯДОЧИВАНИЕпозволяет включить режим автоматического упорядочивания строк в результате запроса. Описание данного режима см. здесь. ● В секции <Описание итогов> можно указать, какие итоги необходимо рассчитывать в запросе. Описание данной секции см. здесь. 8.2.6. Описание запроса Как уже было сказано, в тексте запроса должна обязательно присутствовать секция описания запроса, в которой определяются: ● поля, которые будут содержаться в результате запроса; ● источники данных запроса – исходные таблицы; ● условия, влияющие на выборку данных в запросе; ● порядок группировки результатов запроса. Секция описания запроса состоит из нескольких взаимосвязанных предложений: <Описание запроса> ВЫБРАТЬ [РАЗРЕШЕННЫЕ] [РАЗЛИЧНЫЕ] [ПЕРВЫЕ <Количество>] <Список полей выборки> [ИЗ <Список источников>] [ГДЕ <Условие отбора>] [СГРУППИРОВАТЬ ПО <Поля группировки>] [ИМЕЮЩИЕ <Условие отбора>] [ДЛЯ ИЗМЕНЕНИЯ [<Список таблиц верхнего уровня>]] Описание запроса начинается с обязательного ключевого слова ВЫБРАТЬ. Ключевое слово РАЗРЕШЕННЫЕозначает, что запрос выберет только те записи, на которые у текущего пользователя есть права. Если данное слово не указать, то запрос отработает с ошибкой, когда он выберет записи, на которые у пользователя нет прав. Данное ключевое слово может присутствовать только в предложении ВЫБРАТЬверхнего уровня и распространяется на весь запрос, включая вложенные запросы. С помощью ключевого слова РАЗЛИЧНЫЕможно указать, что в результат не должны попадать повторяющиеся строки. Конструкция ПЕРВЫЕ <Количество>позволяет задать предельное количество строк в результате запроса. Будут отобраны самые первые (в соответствии с правилами упорядочивания результатов запроса) строки. Количество задается целым числом. В языке запросов добавлена возможность исполнения упорядочивания во вложенных запросах в случае, если вложенный запрос содержит конструкцию ПЕРВЫЕ. В секции <Список полей выборки>описываются поля, которые должны содержаться в результате запроса (правила описания полей выборки см. здесь). В предложении ИЗ <Список источников>указываются источники данных – таблицы информационной базы, содержимое которых обрабатывается в запросе. Описание источников может быть опущено только в том случае, если они полностью определены в списке полей выборки (правила описания источников данных запроса см. здесь). Предложение ГДЕ <Условие отбора>позволяет отфильтровать результат запроса. В результат попадают только те записи, для которых указанное условие оказывается истинным (правила описания условий отбора см. здесь). Предложение ДЛЯ ИЗМЕНЕНИЯпредназначено для указания необходимости блокировки считываемых в транзакции данных. Считанные данные становятся недоступными для чтения в других сессиях. Для файлового варианта блокируются указанные таблицы, а для клиент-серверного варианта – только выбранные записи. Блокировка снимается после завершения транзакции. Предложение СГРУППИРОВАТЬпозволяет описать порядок группировки результатов запроса (см. здесь). Предложение ИМЕЮЩИЕпозволяет накладывать условия на результаты группировки (см. здесь). Во всех примерах запросов в данной главе приводится текст запроса и результат запроса. Подразумевается, что текст запроса передается в качестве параметра методу Выполнить()объекта Запрос. Приведем пример достаточно простого запроса, состоящего из одного оператора ВЫБРАТЬи списка полей выборки. Пример: // В отчет необходимо вывести список товарных накладных. Выбрать Документ.РасходнаяНакладная.Ссылка Результат: Рис. 179. Результат запроса 8.2.6.1. Использование слова «РАЗЛИЧНЫЕ» Во многих ситуациях желательно, чтобы одинаковые строки в отчете не повторялись. Пример: // Необходимо узнать, каким вообще контрагентам // отгружался товар за период. Выбрать Документ.РасходнаяНакладная.Контрагент Результат: Рис. 180. Результат запроса Видно, что в результате запроса много повторяющихся строк, что снижает его наглядность. Чтобы избежать повторений, в описании запроса следует указать ключевое слово РАЗЛИЧНЫЕ. Пример: Выбрать Различные Документ.РасходнаяНакладная.Контрагент Результат: Рис. 181. Результат запроса 8.2.6.2. Использование слова «ПЕРВЫЕ» В некоторых случаях необходимо вывести в отчет ограниченное количество строк. Для этого в описании запроса следует указать ключевое слово ПЕРВЫЕи после него – требуемое количество строк. Пример: // Необходимо отобрать пять самых дорогих товаров. // Выборка должна осуществляться в порядке убывания цены товара. Выбрать Первые 5 Справочник.Номенклатура.Наименование, Справочник.Номенклатура.ЗакупочнаяЦена Упорядочить По Справочник.Номенклатура.ЗакупочнаяЦена Убыв Результат: Рис. 182. Результат запроса 8.2.7. Описание полей выборки После обязательного ключевого слова ВЫБРАТЬ(и уточняющих слов РАЗЛИЧНЫЕи ПЕРВЫЕ) в тексте запроса задается список полей выборки. Эти поля будут обрабатываться при выборке данных в запросе. Результат запроса также будет иметь набор полей, определенный в данном списке. Поля выборки описываются по следующим правилам: <Список полей выборки> <Поле выборки>[, <Поле выборки>[,...]] | * <Поле выборки> <Описание поля> [[КАК] <Псевдоним поля>] <Описание поля> <Выражение>[.<Группа полей>]|<Описание пустой таблицы> <Описание пустой таблицы> ПУСТАЯТАБЛИЦА.(<Список псевдонимов>) <Список псевдонимов> [<Псевдоним поля>][,<Список псевдонимов>] Список полей выборки состоит из одного или нескольких элементов, разделенных запятыми. Каждое поле выборки состоит из описания поля выборки и необязательного псевдонима поля. Вместо перечисления полей в списке выборки можно указать звездочку (*). Это будет означать, что результат запроса должен содержать все поля, которые есть в исходных таблицах – источниках данных запроса, описанных в списке источников. ПРИМЕЧАНИЕ 1. При указании звездочки (*) в списке полей выборки в результат не включаются виртуальные поля исходных таблиц. ПРИМЕЧАНИЕ 2. Получение выборок очень большого размера (более 64 Мб) требует наличия достаточного количества свободного места на диске, используемом для размещения временных файлов сервера и клиента. Описание поля определяет, каким образом должны формироваться значения поля. В простейшем случае поле выборки является ссылкой на поле исходной таблицы. Ссылка может задаваться с указанием таблицы, содержащей это поле, или без указания самой таблицы. Разыменование полей см. здесь. В общем случае поле выборки может представлять собой не только ссылку на поле исходной таблицы, а некоторое выражение (подробнее см. здесь). Результаты запроса могут быть сгруппированы (см. здесь) с помощью агрегатных функций (см. здесь), указанных в качестве выражений в полях выборки. Каждому полю выборки может быть назначен псевдоним (см. здесь). В дальнейшем псевдоним поля может использоваться для более удобного обращения к данному полю. Группа полей может указываться только тогда, когда поле выборки указывает на вложенную таблицу (см. здесь). В этом случае можно указать, какие поля должны обрабатываться в выборке по вложенной таблице. Если группа полей не указана, в выборке будут обрабатываться все поля вложенной таблицы. 8.2.7.1. Псевдонимы полей в списке выборки Если полю выборки назначить псевдоним, то в дальнейшем к этому полю можно будет обращаться, используя его псевдоним, в предложениях УПОРЯДОЧИТЬ ПОи ИТОГИ, а также при работе с результатом запроса. Такое обращение может быть более удобным и наглядным, а в некоторых случаях единственно возможным. Ключевое слово КАКможет предшествовать псевдониму поля. Это слово можно не указывать вообще, но если оно указано, повышается наглядность и удобочитаемость текста запроса. Псевдонимы полей задаются в соответствии с правилами назначения идентификаторов переменных. Псевдонимы в запросе не могут совпадать. Назначение псевдонимов полям само по себе никак не влияет на выборку данных в запросе. Пример: // Необходимо выбрать из справочника товаров // наименования товаров и наименования групп. Выбрать Справочник.Номенклатура.Наименование Как Товар, Справочник.Номенклатура.Родитель.Наименование Как Группа Из Справочник.Номенклатура Результат: Рис. 183. Результат запроса (фрагмент) Следует обратить внимание, что поля в результате запроса называются Товари Группа. Если бы псевдонимы полей не были указаны, поля в результате запроса назывались бы Наименованиеи Наименование1(названия полей в результате запроса не могут совпадать, поэтому к названию второго поля автоматически добавлено «1»), что менее наглядно. 8.2.7.2. Вложенные таблицы в списке полей выборки Поле в списке выборки может ссылаться на вложенную таблицу источника данных запроса. В этом случае поле результата запроса будет иметь тип РезультатЗапроса, то есть содержать вложенный результат запроса, сформированный на основе вложенной таблицы – источника. По умолчанию во вложенный результат включаются все поля вложенной таблицы – источника данных. Имеется возможность явно определить группу полей, которые должны содержаться во вложенном результате запроса. Группа полей вложенного результата описывается по следующему правилу: <Группа полей> ( <Список вложенных полей> ) | * <Список вложенных полей> <Вложенное поле>[, <Вложенное поле>[,...]] <Вложенное поле> <Выражение> [[КАК] <Псевдоним поля>] Список вложенных полей состоит из одного или нескольких элементов, разделенных запятыми. Если список состоит из одного элемента, его не обязательно заключать в скобки. Вместо перечисления вложенных полей можно указать звездочку (*); это будет означать, что результат запроса должен содержать все поля, которые есть во вложенной таблице. Вложенное поле может представлять некоторое выражение (см. здесь). В простейшем случае выражение – это ссылка на поле вложенной таблицы. Каждому вложенному полю может быть назначен псевдоним. В дальнейшем псевдоним поля может использоваться для более удобного обращения к данному полю, аналогично псевдонимам полей списка выборки – см. здесь. Псевдонимы вложенным полям могут быть назначены независимо от того, задан ли псевдоним самой вложенной таблице. Пример: // В отчет необходимо вывести спецификацию товарных накладных // сам документ, номенклатуру и количество. Выбрать Документ.РасходнаяНакладная.Ссылка, Документ.РасходнаяНакладная.Состав.(Номенклатура Как Товар, Количество) Результат: Рис. 184. Результат запроса (фрагмент) Следует обратить внимание, что поле Составрезультата запроса представляет собой вложенную таблицу, имеющую поля Номенклатураи Количество. 8.2.7.3. Пустые вложенные таблицы в списке выборки Если в запросе используется объединение и в некоторых частях объединения присутствуют вложенные таблицы, а в некоторых – нет, возникает необходимость дополнения списка выборки полями – пустыми вложенными таблицами. Делается это при помощи ключевого слова ПУСТАЯТАБЛИЦА. После него в скобках указываются псевдонимы полей, из которых будет состоять вложенная таблица. Пример: ВЫБРАТЬ Ссылка.Номер, ПУСТАЯТАБЛИЦА.(Ном, Тов, Кол) КАК Состав ИЗ Документ.РасходнаяНакладная ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ Ссылка.Номер, Состав.(НомерСтроки, Номенклатура, Количество) ИЗ Документ.РасходнаяНакладная 8.2.8. Описание источников запроса Задача предложения ИЗсостоит в том, чтобы обозначить список исходных таблиц – источников данных, используемых в данном операторе ВЫБРАТЬ. Следует отметить, что предложение ИЗв языке запросов является опциональным. Оно может быть опущено в том случае, если источники данных полностью квалифицированы в описании списка полей выборки, содержащегося в предложении ВЫБРАТЬ. Следует обратить внимание, что ряд примеров в предыдущих разделах не содержал предложения ИЗ. После ключевого слова ИЗуказывается список источников. В общем случае список источников описывается следующим набором правил: <Список источников> <Источник>[, <Источник>[,...]] <Источник> <Описание источника> [ <Перечень соединений> ] <Описание источника> <Таблица> [[КАК] <Псевдоним источника>] <Таблица> <Имя таблицы>[(<Параметры>)] | (<Описание запроса>) Источники данных запроса перечисляются в списке источников через запятую. Каждый источник в списке источников обязательно включает в себя описание источника; кроме того, может быть указан перечень соединений – правила соединений источника с другими источниками. Описание спецификации соединений см. здесь. Если в качестве источника данных выступает таблица информационной базы, описание источника содержит имя таблицы. Если исходная таблица виртуальная, могут быть указаны параметры ее формирования. Подробно параметры виртуальных таблиц описаны в разделе Встроенный язык – Работа с запросами – Таблицы запросов встроенной справки. В качестве источника данных запроса может выступать также вложенный запрос. В этом случае описание источника содержит описание запроса. Описание использования вложенных запросов см. здесь. В описании источника данных может быть также назначен его псевдоним (см. здесь). В дальнейшем псевдоним источника может использоваться для более удобного обращения к данному источнику. 8.2.8.1. Спецификации соединений При определении нескольких источников в списке для каждой записи из первой таблицы-источника осуществляется выборка из второй таблицы-источника и т. д. Таким образом, в результате запроса формируются все возможные комбинации всех записей из всех указанных источников. Пример: ВЫБРАТЬ Контрагенты.Ссылка как Контрагент, ТипыЦен.Ссылка КАК ТипЦены ИЗ Справочник.Контрагенты КАК Контрагенты, Справочник.ТипыЦен КАК ТипыЦенРезультат Результат: Рис. 185. Результат запроса (фрагмент) Результат запроса содержит комбинации всех контрагентов со всеми типами цен. Как правило, такой результат сам по себе смысла не имеет. Обычно комбинации записей из разных исходных таблиц требуется ограничить какими-либо условиями. В языке запросов имеется возможность описать такое соединение источников, указывая сами источники и определяя условия, в соответствии с которыми комбинации записей из этих источников требуется включить в результат запроса. Соединения бывают нескольких видов; они описываются следующими правилами: <Перечень соединений> <Соединение> [<Перечень соединений>] <Соединение> [ВНУТРЕННЕЕ] СОЕДИНЕНИЕ <Описание источника> ПО <Условие отбора> | ЛЕВОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ <Описание источника> ПО <Условие отбора> | ПРАВОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ <Описание источника> ПО <Условие отбора> | ПОЛНОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ <Описание источника> ПО <Условие отбора> В общем случае перечень соединений может содержать и описывать не только одно соединение (двух источников), но и несколько соединений нескольких источников сразу. Описание источника содержит описание исходной таблицы (см. здесь). Условие отбора содержит условия, в соответствии с которыми в выборке необходимо соединить данные из исходных таблиц – источников запроса. Правила описания условий в языке запросов см. здесь. Ключевые слова ЛЕВОЕ, ПРАВОЕи ПОЛНОЕуточняют характер соединения. Слова ВНУТРЕНЕЕили ВНЕШНЕЕ можно не указывать вообще, они повышают наглядность и удобочитаемость текста запроса. Соединяемые источники не равнозначны между собой, и в некоторых случаях результат зависит от того, какая таблица указана первой, до ключевого слова СОЕДИНЕНИЕ(слева от него), а какая – второй (справа). Для описания соединений будем использовать две простые таблицы. Одна таблица называется Компании, состоит из двух полей: Наименованиеи Телефони содержит следующие данные: Рис. 186. Таблица «Компании» Другая таблица называется Контакты, состоит из трех полей: Наименование, Телефони Компания(ссылка на элемент таблицы Компании). Таблица содержит следующие данные: Рис. 187. Таблица «Контакты» ПРИМЕЧАНИЕ. В терминах «1С:Предприятия» обе таблицы являются справочниками. 8.2.8.1.1. Внутреннее соединение Внутреннее соединение означает, что из обеих исходных таблиц – источников данных в результат запроса необходимо включить только те комбинации записей, которые соответствуют указанному условию. Остальные записи в результат не попадают. Пример: ВЫБРАТЬ Компании.Наименование КАК Компания, Контакты.Наименование КАК Контакт ИЗ Справочник.Контакты КАК Контакты ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Компании КАК Компании ПО Контакты.Компания = Компании.Ссылка Результат: Рис. 188. Результат запроса 8.2.8.1.2. Левое внешнее соединение Левое внешнее соединение означает, что в результат запроса нужно включить комбинации записей из обеих исходных таблиц, которые соответствуют указанному условию. Но, в отличие от внутреннего соединения, в результат запроса нужно включить также еще и записи из первого (указанного слева от слова СОЕДИНЕНИЕ) источника, для которых не найдено соответствующих условию записей из второго источника. Таким образом, в результат запроса будут включены все записи из первого источника; они будут соединены с записями из второго источника при выполнении указанного условия. Строки результата запроса, для которых не найдено соответствующих условию записей из второго источника, будут содержать NULLв полях, формируемых на основании записей из этого источника. Пример: ВЫБРАТЬ Контакты.Наименование КАК Контакт, Компании.Наименование КАК Компания ИЗ Справочник.Контакты КАК Контакты ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Компании КАК Компании ПО Контакты.Компания = Компании.Ссылка Результат: Рис. 189. Результат запроса 8.2.8.1.3. Правое внешнее соединение Правое внешнее соединение означает, что в результат запроса нужно включить комбинации записей из обеих исходных таблиц, которые соответствуют указанному условию. Кроме того, в результат запроса нужно также включить и записи из второго (указанного справа от слова СОЕДИНЕНИЕ) источника, для которых не найдено соответствующих условию записей из первого источника. Таким образом, в результат запроса будут включены все записи из второго источника; они будут соединены с записями из первого источника при выполнении указанного условия. Строки результата запроса, для которых не найдено соответствующих условию записей из первого источника, будут содержать NULLв полях, формируемых на основании записей из этого источника. ПРИМЕЧАНИЕ. Фактически правое внешнее соединение можно выразить через левое внешнее соединение. Именно так делает конструктор запросов конфигуратора. Пример: ВЫБРАТЬ Контакты.Наименование КАК Контакт, Компании.Наименование КАК Компания ИЗ Справочник.Контакты КАК Контакты ПРАВОЕ СОЕДИНЕНИЕ Справочник.Компании КАК Компании ПО Контакты.Телефон = Компании.Телефон Результат: Рис. 190. Результат запроса 8.2.8.1.4. Полное внешнее соединение Полное внешнее соединение означает, что в результат запроса нужно включить комбинации записей из обеих исходных таблиц, которые соответствуют указанному условию. Кроме того, в результат запроса нужно также включить и те записи из обоих источников, для которых не найдено соответствий. Таким образом, в результат запроса будут включены все записи из обоих источников; они будут соединены друг с другом при выполнении указанного условия. Строки результата запроса, для которых не найдено соответствующих условию записей из какого-либо источника, будут содержать NULLв полях, формируемых на основании записей из этого источника. Пример: ВЫБРАТЬ Контакты.Наименование КАК Контакт, Компании.Наименование КАК Компания ИЗ Справочник.Компании КАК Компании ПОЛНОЕ СОЕДИНЕНИЕ Справочник.Контакты КАК Контакты ПО (Контакты.Телефон = Компании.Телефон) Результат: Рис. 191. Результат запроса 8.2.8.2. Псевдонимы источников данных Если источнику данных назначить псевдоним, то в дальнейшем к этому источнику можно будет обращаться, используя этот псевдоним (и уже нельзя будет обращаться через указание имени таблицы). Такое обращение может быть более удобным и наглядным, а в некоторых случаях единственно возможным. Псевдоним задается в соответствии с правилами назначения идентификаторов переменных. Псевдонимы в запросе не могут совпадать. Ключевое слово КАКможет предшествовать псевдониму источника. Это слово можно не указывать вообще, но если оно указано, повышается наглядность и удобочитаемость текста запроса. Назначение псевдонимов источникам само по себе никак не влияет на выборку данных в запросе. Пример: ВЫБРАТЬ Товар.Наименование, Товар.Родитель ИЗ Справочник.Номенклатура КАК Товар Данный пример демонстрирует использование в списке полей выборки псевдонима Товар, назначенного исходной таблице Справочник.Номенклатура. 8.2.8.3. Вложенные таблицы в списке источников В списке источников могут фигурировать и вложенные таблицы – табличные части справочников и документов. Пример: // В отчет необходимо вывести спецификацию товарных накладных // показать сам документ, номенклатуру и количество. // В списке источников указана вложенная таблица "Состав" // табличная часть накладной. // Выборка ограничена восемью записями, чтобы не перегружать пример. ВЫБРАТЬ ПЕРВЫЕ 8 РасходнаяНакладнаяСостав.Ссылка, РасходнаяНакладнаяСостав.Номенклатура, РасходнаяНакладнаяСостав.Количество ИЗ Документ.РасходнаяНакладная.Состав КАК РасходнаяНакладнаяСостав Результат: Рис. 192. Результат запроса Следует обратить внимание, что при указании вложенной таблицы в списке источников допускается обращение как к полям самой вложенной таблицы, так и к полям таблицы верхнего уровня (той, которая содержит вложенную таблицу) через поле Ссылка. В данном случае происходит обращение к полю Ссылка.НаименованиеПолясамого документа. 8.2.8.4. Вложенные запросы в списке источников В списке источников запроса в качестве таблицы-источника может использоваться вложенный запрос. В этом случае описание источника содержит описание вложенного запроса. Описание вложенного запроса составляется точно так же, как и обычного (см. здесь). Использование вложенного запроса в качестве источника данных ничем не отличается от использования таблицы информационной базы. В качестве полей такого источника доступны все поля, описанные в списке полей выборки вложенного запроса. Пример: ВЫБРАТЬ ВложенныйЗапрос.Ссылка, ВложенныйЗапрос.Номенклатура, ВложенныйЗапрос.Количество ИЗ (ВЫБРАТЬ ПЕРВЫЕ 8 РасходнаяНакладнаяСостав.Ссылка КАК Ссылка, РасходнаяНакладнаяСостав.Номенклатура КАК Номенклатура, РасходнаяНакладнаяСостав.Количество КАК Количество ИЗ Документ.РасходнаяНакладная.Состав КАК РасходнаяНакладнаяСостав) КАК ВложенныйЗапрос Результат будет точно таким же, как и в предыдущем примере. 8.2.9. Фильтрация результатов запроса Предложение ГДЕ <Условие отбора>позволяет задать условие отбора данных из исходных таблиц – источников запроса; в запросе будут обрабатываться только те записи, для которых данное условие оказывается истинным. Пример: // Необходимо выяснить, какие контрагенты являются частными лицами. ВЫБРАТЬ Контрагенты.Наименование ИЗ Справочник.Контрагенты КАК Контрагенты ГДЕ Контрагенты.Вид = ЗНАЧЕНИЕ(Перечисление.ВидыКонтрагентов.ЧастноеЛицо) Результат: Рис. 193. Результат запроса ПРИМЕЧАНИЕ. Совершенно не обязательно, чтобы поле, фигурирующее в предложении ГДЕ, входило в список выборки. Условие отбора может определяться и как простое логическое выражение, и как более сложное, в котором простые логические выражения соединяются между собой логическими операторами И, ИЛИ, НЕ. Описание условий в языке запросов см. здесь. 8.2.10. Группировка результатов запроса Исходные данные в запросе могут быть сгруппированы с помощью агрегатных функций, указанных в качестве полей в списке выборки. Это означает, что строки в результате запроса будут содержать результаты вычисления указанных агрегатных функций, рассчитанные (сгруппированные) по записям исходных таблиц. Сами агрегатные функции указываются в списке полей выборки. В предложении СГРУППИРОВАТЬ ПО <Поля группировки>необходимо указать список полей, по которым следует произвести группировку. В запросе будут группироваться записи исходных таблиц, содержащие одинаковые значения указанных полей. Список полей группировки содержит ссылки на поля исходных таблиц – источников запроса, указанные через запятую: <Поля группировки> <Разыменование поля> [, <Разыменование поля> [,...]] ВНИМАНИЕ! При группировке результатов запроса в списке полей выборки обязательно должны быть указаны агрегатные функции, а помимо них допускается указывать только поля, по которым осуществляется группировка. Исключение составляют ситуации, когда агрегатные функции применены к полям вложенной таблицы. В этом случае в списке полей выборки возможны обращения к полям таблицы верхнего уровня, без группировки результатов по этим полям. При использовании агрегатных функций предложение СГРУППИРОВАТЬ ПОможет быть и не указано совсем; при этом все результаты запроса будут сгруппированы в одну-единственную строку. Пример: // Требуется получить статистику по продаже товаров: // максимальную, минимальную и среднюю цены в расходных накладных. Выбрать Накладная.Номенклатура, Среднее (Накладная.Цена) Как Среднее, Максимум(Накладная.Цена) Как Максимум, Минимум (Накладная.Цена) Как Минимум Из Документ.РасходнаяНакладная.Состав Как Накладная Сгруппировать По Накладная.Номенклатура Результат: Рис. 194. Результат запроса (фрагмент) 8.2.11. Условия на значения агрегатных функций Предложение ИМЕЮЩИЕ <Условие отбора>позволяет накладывать условия на значения агрегатных функций. В других конструкциях языка запросов, например, в предложении ГДЕ, указывать в условиях агрегатные функции нельзя. Пример: // Необходимо выбрать товары, которых продали более 20 штук. ВЫБРАТЬ Накладная.Номенклатура, СУММА(Накладная.Количество) КАК Количество ИЗ Документ.РасходнаяНакладная.Состав КАК Накладная СГРУППИРОВАТЬ ПО Накладная.Номенклатура ИМЕЮЩИЕ СУММА(Накладная.Количество) > 20 Результат: Рис. 195. Результат запроса ВНИМАНИЕ! В условии отбора можно использовать только агрегатные функции и поля, по которым осуществляется группировка. 8.2.12. Объединение запросов В языке запросов имеется возможность объединять несколько запросов. При этом записи, полученные с помощью каждого из объединяемых запросов, будут собраны в один результат запроса. При объединении каждый запрос собирает данные независимо, а такие операции, как упорядочивание результатов и расчет итогов, выполняются уже над результатом объединения запросов. Поля результата запроса будут называться так, как описано в списке полей выборки первого из объединяемых запросов. Поля выборки остальных запросов сопоставляются с полями результата в соответствии с порядком их следования в списке полей выборки. Объединяемые запросы должны иметь одинаковое количество полей в списке полей выборки. Если поля выборки объединяемых запросов имеют разный тип, то поля результата запроса будут иметь составной тип. Объединение запросов описывается по следующему правилу: <Объединение запросов> ОБЪЕДИНИТЬ [ВСЕ] <Описание запроса> [<Объединение запросов>] Объединение запросов начинается с обязательного ключевого слова ОБЪЕДИНИТЬ, после которого следует описание присоединяемого запроса. Далее может присоединяться еще один запрос и т. д. По умолчанию при объединении запросов полностью одинаковые строки в результате запроса, сформированные разными запросами, заменяются одной. Если требуется, чтобы были оставлены разные строки, необходимо указать ключевое слово ВСЕ. Пример: ВЫБРАТЬ Приход.Номенклатура КАК Товар, СУММА(Приход.Количество) КАК Приход, СУММА(0) КАК Расход ИЗ Документ.ПриходнаяНакладная.Состав КАК Приход СГРУППИРОВАТЬ ПО Приход.Номенклатура ОБЪЕДИНИТЬ ВЫБРАТЬ Расход.Номенклатура, СУММА(0), СУММА(Расход.Количество) ИЗ Документ.РасходнаяНакладная.Состав КАК Расход СГРУППИРОВАТЬ ПО Расход.Номенклатура Результат: Рис. 196. Результат запроса (фрагмент) 8.2.13. Упорядочивание результатов запроса Предложение УПОРЯДОЧИТЬ ПОпозволяет сортировать строки в результате запроса. <Упорядочивание результатов> УПОРЯДОЧИТЬ ПО <Условия упорядочивания> <Условия упорядочивания> <Поле упорядочивания> [<Порядок>] [, <Поле упорядочивания> [<Порядок>][,...]] <Поле упорядочивания> <Выражение> <Порядок> ВОЗР | УБЫВ | ИЕРАРХИЯ | ИЕРАРХИЯ УБЫВ В предложении УПОРЯДОЧИТЬ ПОчерез запятую перечисляются условия, в соответствии с которыми необходимо упорядочить результат запроса. Выборки упорядочиваются сначала по первому условию, потом по второму и т. д. Условие упорядочивания в общем случае может представлять собой некоторое выражение (см. здесь). Строки результата запроса будут упорядочены по значениям этого выражения, рассчитанным для каждой строки. Упорядочивание может осуществляться в порядке возрастания или убывания значений, а для таблиц, для которых задано свойство иерархичности, – также и по иерархии (см. здесь). Порядок может задаваться для каждого поля независимо. Описание правил сравнения значений см. здесь. Поле, фигурирующее в условиях упорядочивания, совсем не обязательно должно попадать в результат запроса. Пример: // Требуется отобрать 5 самых дорогих товаров, // расположив их в порядке убывания цены. ВЫБРАТЬ ПЕРВЫЕ 5 Номенклатура.Наименование, Номенклатура.ЗакупочнаяЦена ИЗ Справочник.Номенклатура КАК Номенклатура УПОРЯДОЧИТЬ ПО Номенклатура.ЗакупочнаяЦена УБЫВ Результат: Рис. 197. Результат запроса 8.2.13.1. Упорядочивание по иерархии Для справочников можно назначать упорядочивание по иерархии справочника. Пример: ВЫБРАТЬ Справочник.Номенклатура.Наименование, Справочник.Номенклатура.ПолноеНаименование УПОРЯДОЧИТЬ ПО Справочник.Номенклатура.Наименование Иерархия Результат: Рис. 198. Результат запроса (фрагмент) Иерархически сортировать можно только по полю, но не по некоторой операции над ним: поле упорядочивания должно содержать ссылку на поле исходной таблицы – источника данных запроса. ВНИМАНИЕ! Упорядочивание по иерархии имеет смысл задавать в том случае, если в качестве источника определена именно таблица справочника, а не какая-либо другая таблица, содержащая только ссылку на справочник. Пример: ВЫБРАТЬ РасходнаяНакладная.Контрагент.Наименование, РасходнаяНакладная.Номер, РасходнаяНакладная.Склад, ИЗ Документ.РасходнаяНакладная КАК РасходнаяНакладная В данном примере иерархического упорядочивания не получится, поскольку нет связи со справочником, и группы из этого справочника в результат запроса не попадут. Для упорядочивания по иерархии необходимо организовать соединение со справочником. Пример: ВЫБРАТЬ Контрагенты.Наименование КАК Наименование, РасходнаяНакладная.Номер, РасходнаяНакладная.Склад ИЗ Справочник.Контрагенты КАК Контрагенты ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная КАК РасходнаяНакладная ПО Контрагенты.Ссылка = РасходнаяНакладная.Контрагент УПОРЯДОЧИТЬ ПО Наименование ИЕРАРХИЯ Результат: Рис. 199. Результат запроса (фрагмент) 8.2.13.2. Упорядочивание во вложенных таблицах В предложении УПОРЯДОЧИТЬ ПОможно определять также и условия упорядочивания записей из вложенных таблиц; причем их можно комбинировать с условиями упорядочивания по таблице верхнего уровня. При этом важен порядок указания полей таблицы одного уровня (вложенной или верхнего уровня) относительно друг друга, но не важно, в каком порядке указаны поля таблицы одного уровня относительно полей таблицы другого уровня: упорядочивание выполняется всегда сначала по таблице верхнего уровня, а потом по вложенной таблице. Пример: // В отчет необходимо вывести спецификацию товарных накладных // показать сам документ, номенклатуру и количество. // Документы требуется упорядочить по номеру, // а состав – по наименованию товара. Выбрать Документ.РасходнаяНакладная.Ссылка, Документ.РасходнаяНакладная.Состав.(Номенклатура Как Товар, Количество) Упорядочить По Документ.РасходнаяНакладная.Номер, Документ.РасходнаяНакладная.Состав.Номенклатура.Наименование 8.2.14. Автоупорядочивание результатов Предложение АВТОУПОРЯДОЧИВАНИЕпозволяет включить режим автоматического формирования полей для упорядочивания результата запроса. Автоупорядочивание работает по следующим принципам: ● Если в запросе было указано предложение УПОРЯДОЧИТЬ ПО, то каждая ссылка на таблицу, находящаяся в этом предложении, будет заменена полями, по которым по умолчанию сортируется таблица (для справочников это код или наименование, для документов – дата документа). Если поле для упорядочивания ссылается на иерархический справочник, то будет применена иерархическая сортировка по этому справочнику. ● Если в запросе отсутствует предложение УПОРЯДОЧИТЬ ПО, но есть предложение ИТОГИ, тогда результат запроса будет упорядочен по полям, присутствующим в предложении ИТОГИпосле ключевого слова ПО, в той же последовательности; и если итоги рассчитывались по полям-ссылкам, то по полям сортировки по умолчанию таблиц, на которые были ссылки. ● Если в запросе отсутствуют предложения УПОРЯДОЧИТЬ ПОи ИТОГИ, но есть предложение СГРУППИРОВАТЬ ПО, тогда результат запроса будет упорядочен по полям, присутствующим в предложении, в той же последовательности; и если группировка велась по полям-ссылкам, то по полям сортировки по умолчанию таблиц, на которые были ссылки. ● Если в запросе отсутствуют предложения УПОРЯДОЧИТЬ ПО, ИТОГИи СГРУППИРОВАТЬ ПО, результат будет упорядочен по полям сортировки по умолчанию для таблиц, из которых выбираются данные, в порядке их появления в запросе. 8.2.15. Расчет итогов запроса Предложение ИТОГИпозволяет определить, расчет каких итогов необходим в запросе. При расчете итогов вычисляются значения агрегатных функций по выборкам с одинаковыми значениями полей – контрольных точек. Итоги добавляются в результат запроса как итоговые строки. Порядок расчета итогов запроса описывается в соответствии со следующими правилами: <Описание итогов> <Итоги> [<Описание итогов>] <Итоги> ИТОГИ [<Список итоговых полей>] ПО [ОБЩИЕ] <Список контрольных точек> <Список итоговых полей> <Итоговое поле> [,<Список итоговых полей> [,...]] <Итоговое поле> <Агрегатная функция> | <Выражение> [[КАК] <Псевдоним поля>] <Список контрольных точек> <Контрольная точка> [, <Контрольная точка> [,...]] <Контрольная точка> <Выражение> [[ТОЛЬКО] ИЕРАРХИЯ] | [ПЕРИОДАМИ(Секунда | Минута | Час | День | Неделя | Месяц | Квартал | Год | Декада | Полугодие [,<Литерал типа DATE> | <Идентификатор параметра>] [,<Литерал типа DATE> | <Идентификатор параметра>])] [[КАК] Псевдоним поля] Описание итогов начинается с обязательного ключевого слова ИТОГИ. Список агрегатных функций содержит перечень агрегатных функций (см. здесь), которые необходимо рассчитывать в итогах. Ключевое слово ОБЩИЕозначает, что необходимо сформировать итоговую строку по всему результату запроса. Описание расчета общих итогов см. здесь. Помимо общих итогов можно задать расчет итогов по контрольным точкам. Для этого после обязательного ключевого слова ПОнеобходимо указать <Список контрольных точек>. Каждая контрольная точка содержит выражение, вычисляемое при выполнении запроса. По каждой комбинации значений этих выражений будут рассчитаны и добавлены в результат запроса итоговые строки. Если контрольная точка является ссылкой на справочник, возможен расчет итогов по иерархии справочника (см. здесь). Для этого после такой ссылки нужно указать обязательное ключевое слово ИЕРАРХИЯ. 8.2.15.1. Расчет итогов во вложенных таблицах В настоящей версии программы не поддерживается расчет итогов по вложенным таблицам. 8.2.15.2. Итоги по иерархии Есть возможность рассчитать итоги по иерархии. Для этого после имени поля, для которого вычисляются итоги, необходимо указать ключевое слово ИЕРАРХИЯ. В результате будут рассчитаны итоги по контрольным точкам и итоги по иерархии для контрольных точек. Пример: ВЫБРАТЬ Документ.Номенклатура КАК Номенклатура, Документ.Количество КАК Количество, Документ.Ссылка.Номер, Документ.Ссылка.Контрагент ИЗ Документ.РасходнаяНакладная.Состав КАК Документ УПОРЯДОЧИТЬ ПО Документ.Номенклатура ИТОГИ СУММА(Количество) ПО Номенклатура ИЕРАРХИЯ Результат: Рис. 200. Результат запроса (фрагмент) При необходимости можно рассчитать только итоги значений по иерархии, без расчета итогов в контрольных точках. Для этого перед ключевым словом ИЕРАРХИЯнужно указать ключевое слово ТОЛЬКО. Пример: ВЫБРАТЬ Документ.Номенклатура КАК Номенклатура, Документ.Количество КАК Количество, Документ.Ссылка.Номер, Документ.Ссылка.Контрагент ИЗ Документ.РасходнаяНакладная.Состав КАК Документ УПОРЯДОЧИТЬ ПО Документ.Номенклатура ИТОГИ СУММА(Количество) ПО Номенклатура ТОЛЬКО ИЕРАРХИЯ Результат: Рис. 201. Результат запроса (фрагмент) 8.2.15.3. Дополнение дат В случае если поле, по которому рассчитываем итоги, является полем типа Дата, возможно дополнение результатов датами в заданном периоде. Делается это при помощи ключевого слова ПЕРИОДАМИ, после которого в скобках указывается вид периода (Секунда, Минута, Час, День, Неделя, Месяц, Квартал, Год, Декада, Полугодие), начальная и конечная даты интересуемого периода. Если начальная и конечная даты не указаны, будут использованы первая и последняя даты, участвующие в результате. Пример: // Получить количество покупок по клиентам по часам выбранного дня ВЫБРАТЬ ПриходнаяНакладная.Контрагент, НАЧАЛОПЕРИОДА(ПриходнаяНакладная.Дата, ЧАС) КАК Период, КОЛИЧЕСТВО(ПриходнаяНакладная.Ссылка) КАК КоличествоПокупок ИЗ Документ.ПриходнаяНакладная КАК ПриходнаяНакладная СГРУППИРОВАТЬ ПО ПриходнаяНакладная.Контрагент, НАЧАЛОПЕРИОДА(ПриходнаяНакладная.Дата, ЧАС) ИТОГИ СУММА(КоличествоПокупок) ПО Период ПЕРИОДАМИ(МИНУТА, ДАТАВРЕМЯ(2006,6,28), ДАТАВРЕМЯ(2006,6,28)) Результат: Рис. 202. Результат запроса Такое представление результата получится, только если при обходе результата по группировке Период использовать в качестве источника измерения все записи периода. 8.2.15.4. Расчет общих итогов Для расчета итогов по всей таблице в предложении ИТОГИследует указать слово ОБЩИЕ. В этом случае будут вычислены значения агрегатных функций для всех записей таблицы. Пример: ВЫБРАТЬ Документ.Номенклатура, Документ.Количество КАК Количество, Документ.Ссылка.Номер, Документ.Ссылка.Контрагент ИЗ Документ.РасходнаяНакладная.Состав КАК Документ ИТОГИ СУММА(Количество) ПО ОБЩИЕ Результат: Рис. 203. Результат запроса (фрагмент) 8.2.15.5. Совместное использование итогов и группировки Если итоги используются совместно с группировкой и для итогов не указан список агрегатных функций, он будет автоматически формироваться из агрегатных полей списка выборки. Если запрос содержит объединение, агрегатные функции будут браться из первого запроса. Пример: ВЫБРАТЬ Документ.Номенклатура КАК Номенклатура, Документ.Ссылка.Контрагент КАК Контрагент, СУММА(Документ.Количество) КАК Количество ИЗ Документ.РасходнаяНакладная.Состав КАК Документ СГРУППИРОВАТЬ ПО Документ.Номенклатура, Документ.Ссылка.Контрагент ИТОГИ ПО Номенклатура, Контрагент Результат: Рис. 204. Результат запроса (фрагмент) 8.2.15.6. Псевдонимы итогов Полям итогов – контрольным точкам, для которых считаются итоги, можно назначить псевдоним, для последующего обращения к ним из встроенного языка предприятия. Для этого после выражения – контрольной точки необходимо указать имя псевдонима аналогично тому, как это делается в списке полей выборки. Пример: ВЫБРАТЬ Документ.Номенклатура КАК Номенклатура, Документ.Количество КАК Количество, Документ.Ссылка.Номер, Документ.Ссылка.Контрагент ИЗ Документ.РасходнаяНакладная.Состав КАК Документ УПОРЯДОЧИТЬ ПО Документ.Номенклатура ИТОГИ СУММА(Количество) ПО Номенклатура ТОЛЬКО ИЕРАРХИЯ КАК Товары В случае, если псевдоним не указан, система сама даст имя итогу так, чтобы оно было уникально. В приведенном выше примере итог будет иметь имя Товары. 8.2.16. Выражения в языке запросов Во многих конструкциях языка запросов могут использоваться выражения. Выражения языка запросов описываются следующим набором правил: <Выражение> <Разыменование поля> | <Агрегатная функция> | <Встроенная функция> | <Операция выбора> | <Приведение типа>[.<Разыменование поля>] | <Значение> | <Выражение> <Бинарная операция> <Выражение> | <Унарная операция> <Выражение> | ( <Выражение> ) <Бинарная операция> +|–|*|/ <Унарная операция> –|+ В простейшем случае выражение является ссылкой на поле исходной таблицы – источника данных запроса. Ссылка может задаваться с указанием таблицы, содержащей это поле, или без указания самой таблицы. Описание разыменования полей см. здесь. Выражения в списке полей выборки, в предложениях ИМЕЮЩИЕ, ИТОГИ, УПОРЯДОЧИТЬ ПО, могут быть агрегатными функциями (см. здесь). Выражение может быть встроенной функцией языка запросов (см. здесь). Могут использоваться операции выбора (см. здесь) и операции приведения типа значения (см. здесь). В выражениях могут непосредственно указываться значения логических, числовых, строковых и др. констант; также могут использоваться значения параметров запроса (см. здесь). В выражениях к значениям соответствующих типов могут применяться бинарные и унарные операции. При использовании операции деления рекомендуется делать проверку делителя на отличие от нуля. 8.2.16.1. Разыменование полей Выражения языка запросов в простейшем случае представляют собой ссылки на поля таблиц информационной базы. В общем виде ссылки описываются следующими правилами: <Разыменование поля> [<Таблица>.]<Имя поля>[.<Имя поля>[...]] <Таблица> <Имя таблицы> | <Псевдоним источника> Разыменование поля начинается с имени таблицы, содержащей это поле. Если имя поля уникально – существует только у одной из таблиц среди указанных в списке источников, таблица может быть опущена. Если поле имеет ссылочный тип, язык запросов позволяет обращаться к полям таблицы, на которую ссылается поле, и так далее. Имена полей указываются через точку. Если исходной таблице в списке источников присвоен псевдоним источника, он может использоваться вместо имени таблицы в разыменовании полей этой таблицы. В противном случае указывается имя таблицы (см. здесь). 8.2.16.2. Агрегатные функции языка запросов В языке запросов предусмотрены агрегатные функции, которые используются при группировке результатов запроса и при подсчете итогов. Агрегатные функции предназначены для обобщения значений указанного параметра. Определены следующие агрегатные функции: <Агрегатная функция> СУММА ( <Выражение> ) | СРЕДНЕЕ ( <Выражение> ) | МИНИМУМ ( <Выражение> ) | МАКСИМУМ ( <Выражение> ) | КОЛИЧЕСТВО ( [РАЗЛИЧНЫЕ] <Выражение> | * ) Пример: ВЫБРАТЬ Накладная.Номенклатура.Наименование, СУММА(Накладная.Сумма) КАК Сумма, СРЕДНЕЕ(Накладная.Сумма) КАК Среднее, МАКСИМУМ(Накладная.Сумма) КАК Максимум, МИНИМУМ(Накладная.Сумма) КАК Минимум, КОЛИЧЕСТВО(Накладная.Сумма) КАК Колич ИЗ Документ.РасходнаяНакладная.Состав КАК Накладная СГРУППИРОВАТЬ ПО Накладная.Номенклатура, Накладная.Номенклатура.Наименование ИТОГИ ПО ОБЩИЕ Результат: Рис. 205. Результат запроса (фрагмент) Агрегатные функции могут использоваться в списке полей выборки, в предложениях ИМЕЮЩИЕ, ИТОГИ, УПОРЯДОЧИТЬ ПО. СУММА Описание: Функция вычисляет арифметическую сумму всех попавших в выборку значений поля. В качестве параметра функции можно указывать только поля, содержащие числовое значение. Если поле не может содержать числовых значений, то применение функции СУММАк такому полю вызовет ошибку. Данная функция может быть применена к такому полю, только если поле может содержать числовые значения (имеет составной тип данных). Но если среди значений поля в выборке встретится нечисловое значение (помимо значений NULL), это вызовет ошибку. СРЕДНЕЕ Описание: Функция вычисляет среднее значение всех попавших в выборку значений поля. В качестве параметра функции можно указывать только ссылки на поля, содержащие числовое значение. Если поле не может содержать числовых значений, то применение функции СРЕДНЕЕк такому полю вызовет ошибку. Данная функция может быть применена к такому полю в том случае, если поле может содержать числовые значения (имеет составной тип данных). Но если среди значений поля в выборке встретится нечисловое значение (помимо значений NULL), это вызовет ошибку. МИНИМУМ Описание: Функция вычисляет минимальное значение из всех попавших в выборку значений поля. В качестве параметра функции можно указывать ссылки на поля, содержащие значения любого типа. При определении минимального значения применяются правила сравнения значений, описанные в разделе «Правила сравнения значений». МАКСИМУМ Описание: Функция вычисляет максимальное значение из всех попавших в выборку значений поля. В качестве параметра функции можно указывать выражения, содержащие значения любого типа. Не может применяться к выражениям с типом ХранилищеЗначения, МоментВремении строкам неограниченной длины. При определении максимального значения применяются правила сравнения значений, описанные в разделе «Правила сравнения значений». КОЛИЧЕСТВО Описание: Функция подсчитывает количество значений параметра, попавших в выборку. В отличие от других агрегатных функций, функция КОЛИЧЕСТВОдопускает три способа использования: ● Функция позволяет подсчитать количество значений указанного поля, не равных NULL. ● Функция позволяет подсчитать количество различных значений указанного поля, не равных NULL. Для этого перед спецификацией поля нужно указать ключевое слово РАЗЛИЧНЫЕ. ● Функция позволяет подсчитать количество строк в результате запроса. Для этого в качестве параметра функции нужно указать звездочку «*». В качестве параметра функции можно указывать ссылки на поля, содержащие значения любого типа. Пример: ВЫБРАТЬ КОЛИЧЕСТВО(*) КАК Всего, КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Накладная.Номенклатура) КАК Разные ИЗ Документ.РасходнаяНакладная.Состав КАК Накладная Результат: Рис. 206. Результат запроса 8.2.16.3. Встроенные функции языка запросов В языке запросов определены встроенные функции, которые могут использоваться в выражениях в списке полей выборки (см. здесь) и в условии отбора в предложении ГДЕ(см. здесь). Определены следующие встроенные функции: <Встроенная функция> ПОДСТРОКА ( <Выражение>, <Значение>, <Значение> ) | ГОД ( <Выражение> ) | КВАРТАЛ ( <Выражение> ) | МЕСЯЦ ( <Выражение> ) | ДЕНЬГОДА ( <Выражение> ) | ДЕНЬ ( <Выражение> ) | НЕДЕЛЯ ( <Выражение> ) | ДЕНЬНЕДЕЛИ ( <Выражение> ) | ЧАС ( <Выражение> ) | МИНУТА ( <Выражение> ) | СЕКУНДА ( <Выражение> ) | НАЧАЛОПЕРИОДА(<Выражение>, Минута | Час | День | Неделя | Месяц | Квартал | Год | Декада | Полугодие) | КОНЕЦПЕРИОДА(<Выражение>, Минута | Час | День | Неделя | Месяц | Квартал | Год | Декада | Полугодие) | ДОБАВИТЬКДАТЕ (<Выражение>, Минута | Час | День | Неделя | Месяц | Квартал | Год | Декада | Полугодие, <Выражение>) | РАЗНОСТЬДАТ(<Выражение>, <Выражение>, Секунда | Минута | Час | День | Месяц | Квартал | Год) | ТИПЗНАЧЕНИЯ(<Выражение>) | ПРЕДСТАВЛЕНИЕ(<Выражение>) | ЕСТЬNULL(<Выражение>, <Выражение>) ПОДСТРОКА Описание: Данная функция предназначена для выделения подстроки из строки. В функцию передаются три параметра: ● Строка, из которой необходимо выделить подстроку. Выражение, имеющее тип Строка. ● Позиция символа, с которого начинается выделяемая из строки подстрока. Значение типа Число. ● Длина выделяемой подстроки. Значение типа Число. Если в качестве первого параметра фигурирует строка, то результатом функции будет строка (возможно, нулевой длины). Если в качестве первого параметра будет использовано значение NULL, то результатом функции также будет значение NULL. Другие значения считаются недопустимыми и вызывают состояние ошибки. Пример: ВЫБРАТЬ ПЕРВЫЕ 8 Контрагенты.Наименование, ПОДСТРОКА(Контрагенты.Наименование, 3, 5) КАК Подстрока ИЗ Справочник.Контрагенты КАК Контрагенты Результат: Рис. 207. Результат запроса ГОД Описание: Данная функция предназначена для вычисления номера года из значения типа Дата. Параметр функции – это выражение, имеющее тип Дата. Если в качестве параметра фигурирует значение типа Дата, то результатом функции будет значение типа Число. Если в качестве параметра будет использовано значение NULL, то результатом функции также будет значение NULL. Другие значения считаются недопустимыми и вызывают состояние ошибки. КВАРТАЛ Описание: Данная функция предназначена для вычисления номера квартала из значения типа Дата. Номер квартала находится в диапазоне 1–4. Параметр функции – это выражение, имеющее тип Дата. Если в качестве параметра фигурирует значение типа Дата, то результатом функции будет значение типа Число. Если в качестве параметра будет использовано значение NULL, то результатом функции также будет значение NULL. Другие значения считаются недопустимыми и вызывают состояние ошибки. МЕСЯЦ Описание: Данная функция предназначена для вычисления номера месяца из значения типа Дата. Номер месяца находится в диапазоне 1–12. Параметр функции – это выражение, имеющее тип Дата. Если в качестве параметра фигурирует значение типа Дата, то результатом функции будет значение типа Число. Если в качестве параметра будет использовано значение NULL, то результатом функции также будет значение NULL. Другие значения считаются недопустимыми и вызывают состояние ошибки. ДЕНЬГОДА Описание: Данная функция предназначена для вычисления дня года из значения типа Дата. День года находится в диапазоне 1–366. Параметр функции – это выражение, имеющее тип Дата. Если в качестве параметра фигурирует значение типа Дата, то результатом функции будет значение типа Число. Если в качестве параметра будет использовано значение NULL, то результатом функции также будет значение NULL. Другие значения считаются недопустимыми и вызывают состояние ошибки. ДЕНЬ Описание: Данная функция предназначена для вычисления дня месяца из значения типа Дата. День месяца находится в диапазоне 1–31. Параметр функции – это выражение, имеющее тип Дата. Если в качестве параметра фигурирует значение типа Дата, то результатом функции будет значение типа Число. Если в качестве параметра будет использовано значение NULL, то результатом функции также будет значение NULL. Другие значения считаются недопустимыми и вызывают состояние ошибки. НЕДЕЛЯ Описание: Данная функция предназначена для вычисления номера недели года из значения типа Дата. Параметр функции – это выражение, имеющее тип Дата. Если в качестве параметра фигурирует значение типа Дата, то результатом функции будет значение типа Число. Если в качестве параметра будет использовано значение NULL, то результатом функции также будет значение NULL. Другие значения считаются недопустимыми и вызывают состояние ошибки. ДЕНЬНЕДЕЛИ Описание: Данная функция предназначена для вычисления дня недели из значения типа Дата. День недели находится в диапазоне 1 (понедельник) – 7 (воскресенье). Параметр функции – это выражение, имеющее тип Дата. Если в качестве параметра фигурирует значение типа Дата, то результатом функции будет значение типа Число. Если в качестве параметра будет использовано значение NULL, то результатом функции также будет значение NULL. Другие значения считаются недопустимыми и вызывают состояние ошибки. ЧАС Описание: Данная функция предназначена для вычисления часа суток из значения типа Дата. Час суток находится в диапазоне 0–23. Параметр функции – это выражение, имеющее тип Дата. Если в качестве параметра фигурирует значение типа Дата, то результатом функции будет значение типа Число. Если в качестве параметра будет использовано значение NULL, то результатом функции также будет значение NULL. Другие значения считаются недопустимыми и вызывают состояние ошибки. МИНУТА Описание: Данная функция предназначена для вычисления минуты часа из значения типа Дата. Минута часа находится в диапазоне 0–59. Параметр функции – это выражение, имеющее тип Дата. Если в качестве параметра фигурирует значение типа Дата, то результатом функции будет значение типа Число. Если в качестве параметра будет использовано значение NULL, то результатом функции также будет значение NULL. Другие значения считаются недопустимыми и вызывают состояние ошибки. СЕКУНДА Описание: Данная функция предназначена для вычисления секунды минуты из значения типа Дата. Секунда минуты находится в диапазоне 0–59. Параметр функции – это выражение, имеющее тип Дата. Если в качестве параметра фигурирует значение типа Дата, то результатом функции будет значение типа Число. Если в качестве параметра будет использовано значение NULL, то результатом функции также будет значение NULL. Другие значения считаются недопустимыми и вызывают состояние ошибки. НАЧАЛОПЕРИОДА Описание: Функция предназначена для выделения определенной даты из заданной даты. Параметры функции – это выражение, имеющее тип Датаи тип периода – одно из значений: Минута, Час, День, Неделя, Месяц, Квартал, Год, Декада, Полугодие. Пример: ВЫБРАТЬ НАЧАЛОПЕРИОДА(ДАТАВРЕМЯ (2002, 10, 12, 10, 15, 34), МЕСЯЦ) Результат: Рис. 208. Результат запроса Пример: ВЫБРАТЬ НАЧАЛОПЕРИОДА(ДАТАВРЕМЯ(2002, 10, 12, 10, 15, 34), ДЕНЬ) Результат: Рис. 209. Результат запроса КОНЕЦПЕРИОДА Описание: Функция предназначена для выделения определенной даты из заданной даты. Параметры функции – это выражение, имеющее тип Датаи тип периода – одно из значений: Минута, Час, День, Неделя, Месяц, Квартал, Год, Декада, Полугодие. Пример: ВЫБРАТЬ КОНЕЦПЕРИОДА(ДАТАВРЕМЯ(2002, 10, 12, 10, 15, 34), МЕСЯЦ) Результат: Рис. 210. Результат запроса Пример: ВЫБРАТЬ КОНЕЦПЕРИОДА(ДАТАВРЕМЯ(2002, 10, 12, 10, 15, 34), ГОД) Результат: Рис. 211. Результат запроса ДОБАВИТЬКДАТЕ Описание: Функция предназначена для прибавления к дате некоторой величины. Первый параметр – исходная дата, к значению которой требуется добавить заданную величину, определяемую вторым и третьим параметрами; выражение, имеющее тип Дата. Второй параметр – тип увеличения, одно из значений: Секунда, Минута, Час, День, Неделя, Месяц, Квартал, Год, Декада, Полугодие. Третий параметр – величина, на которую требуется увеличить дату, задаваемую первым параметром; тип Число(дробная часть игнорируется). Пример: ВЫБРАТЬ ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2002, 10, 12, 10, 15, 34), МЕСЯЦ, 1) Результат: Рис. 212. Результат запроса Пример: ВЫБРАТЬ ДобавитьКДате(ДатаВремя(2002, 10, 12, 10, 15, 34), День, 5) Результат: Рис. 213. Результат запроса РАЗНОСТЬДАТ Описание: Функция предназначена для получения разницы между двумя датами. Первый параметр – выражение типа Дата. Второй параметр – выражение типа Дата. Третий параметр – тип разности, одно из значений: Секунда, Минута, Час, День, Месяц, Квартал, Год. Пример: ВЫБРАТЬ РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2002, 10, 12, 10, 15, 34), ДАТАВРЕМЯ(2002, 10, 14, 9, 18, 06), ДЕНЬ) Результат: Рис. 214. Результат запроса Пример: ВЫБРАТЬ РАЗНОСТЬДАТ(ДатаВремя(2002, 10, 12), ДатаВремя(2002, 11, 03), МЕСЯЦ) Результат: Рис. 215. Результат запроса ВНИМАНИЕ! Функция рассчитывает календарную разницу между двумя датами, поэтому ее нельзя использовать там, где необходимо рассчитать количество банковских или рабочих дней между двумя датами. Функция ТИПЗНАЧЕНИЯ Описание: Функция определения типа значения в запросе. Параметры: Параметры функции – выражение любого типа. Возвращаемое значение – значение типа Тип. Пример: ВЫБРАТЬ ТИПЗНАЧЕНИЯ(УчетНоменклатуры.Регистратор) КАК Документ ИЗ РегистрНакопления.УчетНоменклатуры КАК УчетНоменклатуры Функция ПРЕДСТАВЛЕНИЕ Описание: Данная функция предназначена для получения строкового представления значения произвольного типа. Параметр функции – выражение любого типа. Возвращаемое значение – представление значения, тип Строка. Результат работы функции не может быть использован внутри других функций, за исключением функции ПРЕДСТАВЛЕНИЕ. Пример: ВЫБРАТЬ ПРЕДСТАВЛЕНИЕ(Документ.Контрагент) КАК Получатель, ПРЕДСТАВЛЕНИЕ(Документ.Дата) КАК Дата ИЗ Документ.РасходнаяНакладная КАК Документ Результат: Рис. 216. Результат запроса Функция ЕСТЬNULL (ISNULL) Описание: Функция предназначена для замены значения NULLна другое значение. Параметры функции: ● первый параметр – выражение любого типа; ● второй параметр – выражение любого типа. Возвращаемое значение: значение первого параметра, если первый параметр не содержит значение NULL; значение второго параметра в противном случае. Второй параметр будет преобразован к типу первого в том случае, если тип первого параметра является строкой или числом. Пример: // Получить сумму по полю Количество. В случае, если нет // записей, получить 0 ВЫБРАТЬ ЕСТЬNULL(СУММА(РасходнаяНакладнаяСостав.Количество), 0) ИЗ Документ.РасходнаяНакладная.Состав КАК РасходнаяНакладнаяСостав 8.2.16.4. Операции выбора в языке запросов В выражениях языка запросов могут применяться операции выбора, которые позволяют получить одно из возможных значений в соответствии с указанными условиями. Операция выбора описывается следующим набором правил: <Операция выбора> ВЫБОР <Альтернативы выбора> [ИНАЧЕ <Выражение>] КОНЕЦ <Альтернативы выбора> <Одиночный выбор> [<Альтернативы выбора>] <Одиночный выбор> КОГДА <Логическое выражение> ТОГДА <Выражение> В операции выбора может указываться неограниченное количество альтернативных одиночных выборов КОГДА... ТОГДА. Они обрабатываются в запросе последовательно. Если логическое выражение имеет значение Истина, обработка операции выбора завершается. Результатом операции является значение выражения, указанного после слова ТОГДА. Описание логических выражений см. здесь. Значение выражения, указанного после слова ИНАЧЕ, используется в качестве результата операции выбора в том случае, если во всех ранее указанных альтернативных одиночных выборах предикат имел значение Ложь. Пример: ВЫБРАТЬ Номенклатура.Наименование, ВЫБОР КОГДА Номенклатура.ЭтоГруппа = ИСТИНА ТОГДА "Это группа" КОГДА Номенклатура.ЗакупочнаяЦена > 1000 ТОГДА "1000 -" КОГДА Номенклатура.ЗакупочнаяЦена > 100 ТОГДА "100 – 1000" КОГДА Номенклатура.ЗакупочнаяЦена > 10 ТОГДА "10 – 100" КОГДА Номенклатура.ЗакупочнаяЦена > 0 ТОГДА "0 – 10" ИНАЧЕ "Не задана" КОНЕЦ КАК Цена ИЗ Справочник.Номенклатура КАК Номенклатура Результат: Рис. 217. Результат запроса (фрагмент) 8.2.16.5. Приведение типа в языке запросов Поля исходных таблиц могут иметь составной тип. Для таких полей возникает необходимость привести значения поля к какому-либо определенному типу. В языке запросов предусмотрена возможность приведения типа. Ею можно пользоваться в списке полей выборки и в условии отбора в предложении ГДЕ. <Приведение типа> ВЫРАЗИТЬ ( <Выражение> КАК <Тип значения> ) <Тип значения> Булево | Число [(Длина[, Точность])]| Строка [(Длина)]| Дата | <Имя таблицы> <Длина> Число <Точность> Число Выражение приводится к одному из примитивных типов или к ссылочному типу данных. В последнем случае имя таблицы указывает на соответствующую таблицу информационной базы. Если выражение содержит в составном типе требуемый тип значения, то приведение типа считается осуществимым, и для каждого значения указанного типа результатом будет это самое значение. Для значений других типов результатом приведения типа будет значение NULL. Если выражение не содержит в составном типе требуемый тип значения, то выполнение данного запроса завершится ошибкой из-за принципиальной невозможности совершить приведение типов. 8.2.16.6. Константы и параметры в языке запросов В выражениях языка запросов могут напрямую указываться значения типа Булево, Число, Строкаили Дата. Также могут использоваться значения параметров запроса. <Значение> ИСТИНА | ЛОЖЬ | <Литерал типа ЧИСЛО> | <Литерал типа СТРОКА> | <Литерал типа ДАТА> | <Литерал типа ТИП> | <Имя параметра> | НЕОПРЕДЕЛЕНО | NULL <Литерал типа Число> <Целое число>[.<Целое число>] <Литерал типа Строка> "<Последовательность символов>" <Литерал типа Дата> ДАТАВРЕМЯ ( <Целое число>, <Целое число>, <Целое число>[, <Целое число>, <Целое число>, <Целое число>] ) Значения типа Булево, Число, Строкав языке запросов задаются так же, как и во встроенном языке. Значения типа Датазадаются с помощью ключевого слова ДАТАВРЕМЯ, после которого в скобках последовательно указываются год, месяц, день, час, минута, секунда. Последние три указывать необязательно. ВНИМАНИЕ! Максимальная дата, которую возможно задать при помощи литерала ДАТАВРЕМЯ– 31.12.3999 23:59:59. В запрос могут передаваться параметры (см. описание объекта Запрос). Значения параметров могут использоваться в выражениях языка запросов. Для этого необходимо указать символ "&" и после него имя параметра. <Литерал типа Тип> ТИП(<Имя типа>) <Имя типа>– имя примитивного типа либо имя таблицы, тип ссылки которой нужно получить. Результатом данной конструкции будет значение типа Типдля указанного типа. Пример: // Получение типа "Строка" ТИП(Строка) // Получение типа – ссылка на справочник "Номенклатура" ТИП(Справочник.Номенклатура) Значения типа Типв языке запросов можно использовать в операциях сравнения, упорядочивания, группировки. Пример: ВЫБРАТЬ ТИПЗНАЧЕНИЯ(Остатки.Регистратор) ИЗ РегистрНакопления.УчетНоменклатуры КАК Остатки ГДЕ ТИПЗНАЧЕНИЯ(Остатки.Регистратор) = ТИП(Документ.РасходнаяНакладная) Возможна передача значения типа Типкак параметр запроса. Пример: ВЫБРАТЬ ТИПЗНАЧЕНИЯ(Остатки.Регистратор) ИЗ РегистрНакопления.УчетНоменклатуры КАК Остатки ГДЕ ТИПЗНАЧЕНИЯ(Остатки.Регистратор) = &Тип При сравнении значения типа Типзначения упорядочиваются в следующем порядке (первый тип считается самым малым): ● NULL, ● Неопределено, ● Булево, ● Число, ● Дата, ● Строка, ● ссылка на таблицу, ● другие типы. 8.2.17. Условия в языке запросов В языке запросов используются условия отбора, в соответствии с которыми осуществляется отбор данных в предложениях ГДЕ, ИМЕЮЩИЕи СОЕДИНЕНИЕ. Условия описываются по следующим правилам: <Условие отбора> <Логическое слагаемое> [ИЛИ <Логическое слагаемое>] <Логическое слагаемое> <Логический сомножитель> [И <Логический сомножитель>] <Логический сомножитель> НЕ <Логический сомножитель> | ( <Условие отбора> ) | <Логическое выражение> В простейшем случае условие является выражением, результат которого имеет значение логического типа. Логические выражения описаны в следующем разделе. Условия могут определяться и как более сложные логические выражения, где фигурируют простые логические выражения, соединенные между собой с помощью логических операторов И, ИЛИ, НЕ. Логические операторы имеют приоритет: ● Самый высокий приоритет имеет логический оператор НЕ. ● Следующим по приоритету является оператор И. ● Самый низкий приоритет у оператора ИЛИ. ● В условиях сначала вычисляются простые логические выражения, затем операции НЕ, затем операции И, в последнюю очередь – операции ИЛИ. Для того чтобы обеспечить другой порядок вычислений, можно использовать круглые скобки (). 8.2.17.1. Логические выражения в языке запросов В языке запросов в операциях выбора и в условиях отборов используются логические выражения. <Логическое выражение> <Выражение> | <Выражение> <Операция сравнения> <Выражение> | <Выражение> [НЕ] В [ИЕРАРХИИ] (<Список значений>) | <Выражение> [НЕ] В [ИЕРАРХИИ](<Описание запроса>) | <Выражение> [НЕ] МЕЖДУ <Выражение> И <Выражение> | <Выражение> ЕСТЬ [НЕ] NULL | <Выражение> ССЫЛКА <Имя таблицы> | <Выражение> [НЕ] ПОДОБНО <Литерал типа СТРОКА> [СПЕЦСИМВОЛ <Литерал типа СТРОКА>] <Операция сравнения> > | < | = | >= | <= | <> <Список значений> <Выражение>[, <Выражение> [,...]] Логическим выражением может быть: ● обычное выражение языка запросов, если его результат имеет логический тип; ● операция сравнения двух выражений языка запросов; выполняется в соответствии с правилами сравнения значений, описанными в разделе «Правила сравнения значений»; ● оператор проверки совпадения/несовпадения значения выражения с одним из перечисленных или со значениями, содержащимися в результате другого запроса; ● оператор проверки вхождения значения выражения в диапазон; ● оператор проверки значения выражения на NULL; ● оператор проверки ссылочного значения выражения на ссылку на определенную таблицу; ● оператор проверки строкового значения наподобие шаблону. При сравнении значений используются правила сравнения значений, описанные ниже. 8.2.17.2. Правила сравнения значений Поскольку в языке запросов могут сравниваться значения разных типов, определены правила, по которым выполняется сравнение двух значений. Данные правила используются: ● для сравнения значений в операторах сравнения; ● для определения максимального и минимального значений в агрегатных функциях МИНИМУМи МАКСИМУМ; ● для упорядочивания записей результата запроса в соответствии с порядком, заданным в предложении УПОРЯДОЧИТЬ ПО. Если типы значений отличаются друг от друга, то отношения между значениями определяются на основании приоритета типов: ● тип NULL(самый низший); ● тип Булево; ● тип Число; ● тип Дата; ● тип Строка; ● ссылочные типы. Отношения между различными ссылочными типами определяются на основе внутренних ссылочных номеров таблиц, соответствующих тому или иному типу. Если типы данных совпадают, то производится сравнение значений по следующим правилам: ● У типа Булевозначение Истинабольше значения Ложь. ● У типа Числообычные правила сравнения для чисел. ● У типа Датаболее ранние даты меньше более поздних. ● У типа Строкасравнение производится в соответствии с установленными национальными особенностями базы данных. Операция сравнения строк не учитывает концевые пробелы, в отличие от сравнения строк на встроенном языке, где концевые пробелы участвуют в операции сравнения. Например, сравнение строк «bb» и «bb " на встроенном языке вернет Ложь(строки не равны), и Истина в языке запросов (строки равны). ● Ссылочные типы сравниваются на основе своих значений (номера записи и т. п.). ● Не поддерживается сравнение полей типа УникальныйИдентификаторс полями других типов; ● Не допускается сравнение полей неограниченной длины (строки неограниченной длины, ХранилищеЗначения, поле ТипЗначенияиз таблицы планов видов характеристик). ВНИМАНИЕ! Любая операция сравнения двух значений, в которой участвует хотя бы одно значение NULL, дает результат, аналогичный значению Ложь. 8.2.17.3. Оператор проверки совпадения значения Форма оператора «В» для проверки совпадения с одним из перечисленных Оператор Впозволяет проверить, совпадает ли значение выражения, указанного справа от него, с одним из значений, описанных слева. Если совпадает хотя бы с одним, результатом оператора будет Истина, иначе – Ложь. Применение НЕизменяет действие оператора на обратное. Сравнение значений производится по правилам, описанным в разделе «Правила сравнения значений». Пример: ВЫБРАТЬ Номенклатура.Наименование ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Родитель.Наименование В ("Бытовая техника", "Оргтехника") Форма оператора «В» для проверки принадлежности по иерархии Для справочников проверка может осуществляться и на принадлежность по иерархии. Результатом оператора В ИЕРАРХИИбудет Истина, если значение выражения слева является ссылкой на элемент справочника и входит во множество значений справа или иерархически принадлежит какой-нибудь группе, содержащейся в этом множестве. Пример: // В качестве параметра Группа в запрос передается ссылка // на какую-либо группу справочника Номенклатура. ВЫБРАТЬ Номенклатура.Наименование ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Ссылка В ИЕРАРХИИ(&Группа) В качестве множества значений, на совпадение с которыми выполняется проверка, может фигурировать и результат запроса. В этом случае справа от оператора Внеобходимо указать описание запроса. Пример: ВЫБРАТЬ Номенклатура.Наименование ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Ссылка В ИЕРАРХИИ (ВЫБРАТЬ Номенклатура.Ссылка ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Наименование = "Одежда") Форма оператора «В» для проверки совпадения значения с одним из результатов запроса Примером применения данного оператора может послужить следующий. Пример: // Выбрать названия товаров, которые присутствовали // в расходных накладных ВЫБРАТЬ Товары.Наименование ИЗ Справочник.Номенклатура КАК Товары ГДЕ Товары.Ссылка В (ВЫБРАТЬ РасходнаяНакладнаяСостав.Номенклатура ИЗ Документ.РасходнаяНакладная.Состав КАК РасходнаяНакладнаяСостав) Результат: Рис. 218. Результат запроса (фрагмент) Для получения противоположного результата, то есть если нужно определить, что значение не совпадает ни с одним из результатов запроса, запрос выглядит следующим образом. Пример: // Выбрать названия товаров, которые присутствовали // в расходных накладных ВЫБРАТЬ Товары.Наименование ИЗ Справочник.Номенклатура КАК Товары ГДЕ (НЕ Товары.Ссылка В (ВЫБРАТЬ РасходнаяНакладнаяСостав.Номенклатура ИЗ Документ.РасходнаяНакладная.Состав КАК РасходнаяНакладнаяСостав)) Результат: Рис. 219. Результат запроса (фрагмент) Заметим, что из запроса операции Ввозможно обращение к полям таблиц, которые встречались во внешнем запросе до появления операции. Пример: // Выбрать названия товаров, которые присутствовали // в расходных накладных ВЫБРАТЬ Товары.Наименование ИЗ Справочник.Номенклатура КАК Товары ГДЕ Товары.Ссылка В (ВЫБРАТЬ РасходнаяНакладнаяСостав.Номенклатура ИЗ Документ.РасходнаяНакладная.Состав КАК РасходнаяНакладнаяСостав ГДЕ РасходнаяНакладнаяСостав.Номенклатура = Товары.Ссылка) Результат: Рис. 220. Результат запроса (фрагмент) Использование операции «В» («НЕ В») по нескольким полям Синтаксис для вложенного запроса: (выражение1, выражение2,..., выражениеN) В (ВЫБРАТЬ выражение1, выражение2,..., выражениеN...) Синтаксис для таблицы значений: (выражение1, выражение2,..., выражениеN) В (&Параметр) В качестве параметра следует передавать таблицу значений, первые N колонок которой будут использоваться для операции В. 8.2.17.4. Оператор проверки вхождения значения в диапазон Оператор МЕЖДУпозволяет проверить, входит ли значение выражения, указанного слева от него, в диапазон, указанный справа. Если входит, результатом оператора будет Истина, иначе – Ложь. Применение НЕизменяет действие оператора на обратное. Правила сравнения значений см. здесь. Пример: ВЫБРАТЬ Номенклатура.Наименование, Номенклатура.ЗакупочнаяЦена ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.ЗакупочнаяЦена МЕЖДУ 100 И 1000 8.2.17.5. Оператор проверки значения на NULL Оператор ЕСТЬNULLпозволяет проверить значение выражения слева от него на NULL. Если значение равно NULL, результатом оператора будет Истина, иначе – Ложь. Применение НЕизменяет действие оператора на обратное. Пример: ВЫБРАТЬ Номенклатура.Наименование, Номенклатура.ЗакупочнаяЦена ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.ЗакупочнаяЦена ЕСТЬ NULL 8.2.17.6. Оператор проверки ссылочного значения Оператор ССЫЛКАпозволяет проверить, является ли значение выражения, указанного слева от него, ссылкой на таблицу, указанную справа. Если да, результатом оператора будет Истина, иначе – Ложь. Описание разыменования таблиц см. здесь. Пример: ВЫБРАТЬ РасходнаяНакладная.Номер, РасходнаяНакладная.Дата ИЗ Документ.РасходнаяНакладная КАК РасходнаяНакладная ГДЕ РасходнаяНакладная.Контрагент ССЫЛКА Справочник.Контрагенты 8.2.17.7. Оператор проверки строки на подобие шаблону Оператор ПОДОБНОпозволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа. Значение выражения должно иметь тип Строка. Если значение выражения удовлетворяет шаблону, результатом оператора будет Истина, иначе – Ложь. Следующие символы в строке шаблона являются служебными и имеют смысл, отличный от символа строки: ● «%» (процент): последовательность, содержащая любое количество произвольных символов. ● «_» (подчеркивание): один произвольный символ. ● «[...]» (в квадратных скобках один или несколько символов): любой одиночный символ из перечисленных внутри квадратных скобок. В перечислении могут встречаться диапазоны, например, az, означающие произвольный символ, входящий в диапазон, включая концы диапазона. ● «[^...]» (в квадратных скобках значок отрицания, за которым следует один или несколько символов): любой одиночный символ, кроме тех, которые перечислены следом за значком отрицания. Любой другой символ означает сам себя и не несет никакой дополнительной нагрузки. Если в качестве самого себя необходимо записать один из перечисленных символов, то ему должен предшествовать спецсимвол. Сам спецсимвол (любой подходящий символ) определяется в этом же операторе после ключевого слова СПЕЦСИМВОЛ. Например, шаблон: "%АБВ[0-9][абвг]\_абв%" СПЕЦСИМВОЛ "\" означает подстроку, состоящую из последовательности символов: ● буквы А, ● буквы Б, ● буквы В, ● одной цифры, ● одной из букв а, б, в или г, ● символа подчеркивания, ● буквы а, ● буквы б, ● буквы в. Причем перед этой последовательностью может располагаться произвольный набор символов. 8.3. Выполнение и работа с запросами во встроенном языке Для формирования запросов, выборки и обработки результатов запросов в языке предусмотрен специальный набор объектов. С помощью этих объектов выполняется формирование запроса, обход записей запроса и т. д. 8.3.1. Основные приемы работы Основные приемы работы с запросами во встроенном языке системы «1С:Предприятие» удобнее всего рассматривать на примерах. Приведем типичный пример использования запроса. // Создадим Запрос Запрос = Новый Запрос("ВЫБРАТЬ Товар.Наименование Наименование, |Товар.Родитель.Наименование НаименованиеРодителя |ИЗ Справочник.Товары Товар"); // Выполним запрос и запишем результат в переменную РезультатЗапроса. РезультатЗапроса = Запрос.Выполнить(); // Получим выборку из результата запроса. Выборка = РезультатЗапроса.Выбрать(); // Пока в выборке есть записи... Пока Выборка.Следующий() Цикл //... выведем в окно сообщений поля из результата. Товар = Выборка.Наименование; Родитель = Выборка.НаименованиеРодителя; Сообщить("Товар: " + Товар + " Родитель: " + Родитель); КонецЦикла; Как видно из этого примера, работа с запросом ведется при помощи трех основных объектов: ● Запрос– объект, выполняющий сам запрос. Представлен в примере переменной с именем Запрос. ● РезультатЗапроса– объект, содержащий полученные при выполнении запроса данные. Представлен в примере переменной с именем РезультатЗапроса. ● ВыборкаИзРезультатаЗапроса– объект, позволяющий обходить (т. е. перебирать) записи из результата. Представлен в примере переменной с именем Выборка. Рассмотрим подробнее объект ВыборкаИзРезультатаЗапроса. Для этого нам понадобится следующий запрос: ВЫБРАТЬ РасходнаяНакладнаяСостав.Номенклатура КАК Номенклатура, РасходнаяНакладнаяСостав.Количество КАК Количество ИЗ Документ.РасходнаяНакладная.Состав КАК РасходнаяНакладнаяСостав УПОРЯДОЧИТЬ ПО РасходнаяНакладнаяСостав.Номенклатура ИТОГИ СУММА(Количество) ПО Номенклатура ИЕРАРХИЯ Результат: Рис. 221. Рабочая выборка В этой таблице мы добавили первый столбец, которого нет в тексте запроса, но он будет использоваться нами в дальнейшем для идентификации записи в результате. Итоговые записи в таблице выделены курсивом, итоговые записи для иерархических уровней справочника выделены жирным шрифтом. 8.3.1.1. Способы обхода результата запроса 8.3.1.1.1. Линейный обход результата Первый и самый простой способ обхода – линейный. При линейном обходе выборка будет выдавать записи в той последовательности, в которой они располагаются в результате запроса. В нашем примере это будут записи с номерами 1, 2, 3, 4, 5 и так далее до записи с номером 20. Для получения линейной выборки из результата необходимо вызвать метод Выбрать()объекта РезультатЗапросабез параметров либо с параметром ОбходРезультатаЗапроса.Прямой. Пример: СпособВыборки = ОбходРезультатаЗапроса.Прямой; Выборка1 = РезультатЗапроса.Выбрать(СпособВыборки); // что равнозначно записи Выборка1 = РезультатЗапроса.Выбрать(); 8.3.1.1.2. Иерархический обход результата Следующий способ обхода результата – иерархический. При данном способе обходятся только записи, находящиеся на одном уровне. Для получения иерархической выборки из результата необходимо вызвать метод Выбрать()объекта РезультатЗапросас параметром ОбходРезультатаЗапроса.ПоГруппировкамСИерархией. Пример: СпособВыборки = ОбходРезультатаЗапроса.ПоГруппировкамСИерархией; Выборка2 = РезультатЗапроса.Выбрать(СпособВыборки); Выборка из результата с иерархическим обходом в нашем примере обойдет только записи с номерами 1 и 11, так как только эти две записи находятся на самом верхнем уровне. Проиллюстрируем это, представив наш результат в виде дерева, где узлами будут итоговые записи, а листьями дерева – детальные записи. Вот что у нас получится: Рис. 222. Иерархический обход результата запроса Из этого рисунка видно, что именно записи с номерами 1 и 11 и только они находятся на первом уровне дерева, в результате чего только они и попадают в первый проход иерархической выборки. Возникает вопрос: как получать остальные записи результата запроса? Для этого у объекта ВыборкаИзРезультатаЗапросаможно получить еще одну выборку, которая будет обходить подчиненные записи текущей записи выборки. В нашем примере в момент, когда объект Выборка2будет позиционирован на запись с номером 1, мы запросим у него иерархическую выборку. Таким образом мы получим выборку, которая нам вернет записи с номерами 2, 7. А когда Выборка2будет позиционирована на записи с номером 11, полученная у нее иерархическая выборка вернет записи с номерами 12, 16. Так реализуется иерархический обход результатов запроса. Заметим, что у выборки можно получать вложенные выборки любого типа. Так, если бы мы запросили у объекта Выборка2, позиционированной на записи 1, линейную выборку, то с ее помощью мы бы получили записи с номерами со 2-го по 10-й. Проиллюстрируем описанную методику на примере. Пример: Процедура ВыполнитьЗапрос() // Создадим запрос. Запрос = Новый Запрос; // Установим текст запроса Запрос.Текст = "ВЫБРАТЬ |РасходнаяНакладнаяСостав.Номенклатура КАК Номенклатура, |РасходнаяНакладнаяСостав.Количество КАК Количество |ИЗ |Документ.РасходнаяНакладная.Состав КАК РасходнаяНакладнаяСостав |УПОРЯДОЧИТЬ ПО |РасходнаяНакладнаяСостав.Номенклатура |ИТОГИ |СУММА(Количество) |ПО |Номенклатура ИЕРАРХИЯ"; // Выполним запрос и запишем результат в переменную // РезультатЗапроса. РезультатЗапроса = Запрос.Выполнить(); // Получим выборку из результата запроса. СпособВыборки = ОбходРезультатаЗапроса.ПоГруппировкамСИерархией; Выборка = РезультатЗапроса.Выбрать(СпособВыборки); ВыдатьРекурсивно(Выборка); КонецПроцедуры Процедура ВыдатьРекурсивно(Выборка) // Пока в выборке есть записи... Пока Выборка.Следующий() Цикл //... выведем в окно сообщений поля из результата Товар = Выборка.Наименование; Количество = Выборка.Количество; Сообщить("Товар: " + Товар + " Количество: " + Количество); // Продолжим выборку подчиненных записей СпособВыборки = ОбходРезультатаЗапроса.ПоГруппировкамСИерархией; ВыдатьРекурсивно(Выборка.Выбрать(СпособВыборки, Выборка.Группировка())); КонецЦикла; КонецПроцедуры 8.3.1.1.3. Обход результата по группам Третий и последний способ обхода результата – по группам. Он сходен с иерархическим обходом, но с одним различием: записи с иерархическими итогами при обходе в нем рассматриваются как детальные, а не как итоговые. Для получения выборки по группам из результата запроса необходимо вызвать метод Выбрать()объекта РезультатЗапросас параметром ОбходРезультатаЗапроса.ПоГруппировкам. Пример: СпособВыборки = ОбходРезультатаЗапроса.ПоГруппировкам; Выборка2 = РезультатЗапроса.Выбрать(СпособВыборки); // Перебрав в ней все, мы получим записи с номерами: // 1, 2, 7, 11, 12, 16. Пример: Процедура ВыполнитьЗапрос() // Создадим запрос. Запрос = Новый Запрос; // Установим текст запроса Запрос.Текст = "ВЫБРАТЬ |РасходнаяНакладнаяСостав.Номенклатура КАК Номенклатура, |РасходнаяНакладнаяСостав.Количество КАК Количество |ИЗ |Документ.РасходнаяНакладная.Состав КАК РасходнаяНакладнаяСостав |УПОРЯДОЧИТЬ ПО |РасходнаяНакладнаяСостав.Номенклатура |ИТОГИ |СУММА(Количество) |ПО |Номенклатура ИЕРАРХИЯ"; // Выполним запрос и запишем результат в переменную // РезультатЗапроса. РезультатЗапроса = Запрос.Выполнить(); // Получим выборку из результата запроса СпособВыборки = ОбходРезультатаЗапроса.ПоГруппировкам; Выборка = РезультатЗапроса.Выбрать(СпособВыборки); // Пока в выборке есть записи... Пока Выборка.Следующий() Цикл //... выведем в окно сообщений поля из результата Товар = Выборка.Наименование; Количество = Выборка.Количество; Сообщить("Товар: "+Товар+" Итого по товару: "+Количество); ВыдатьДочерниеЗаписи(Выборка.Выбрать()); КонецЦикла; КонецПроцедуры Процедура ВыдатьДочерниеЗаписи (Выборка) // Пока в выборке есть записи... Пока Выборка.Следующий() Цикл //... выведем в окно сообщений поля из результата Товар = Выборка.Наименование; Количество = Выборка.Количество; Сообщить("Товар: "+Товар+" Количество: "+Количество); КонецЦикла; КонецПроцедуры 8.3.1.2. Работа с выборкой Объект ВыборкаИзРезультатаЗапросапредназначен для обхода записей результата запроса. Можно представить себе выборку как некоторый объект, который содержит указатель на текущую запись в результате и предоставляет программе доступ ко всем полям текущей записи. Для навигации по записям запроса используются три метода: ● Следующий()– перейти к следующей записи результата в соответствии с порядком обхода выборки. При первом вызове позиционирует выборку на первую запись. Когда будут выбраны все записи, данный метод просигнализирует об этом, вернув значение Ложь. ● СледующийПоЗначениюПоля()– получить следующую запись со значением в заданном поле, отличающимся от значения в этом поле текущей записи. ● НайтиСледующий()– найти запись с заданными значениями некоторых полей. 8.3.1.2.1. Использование метода «СледующийПоЗначениюПоля()» Метод позволяет сгруппировать записи результата по значениям полей. Пример: ВЫБРАТЬ Док.Номенклатура, Док.Ссылка.Контрагент КАК Контрагент, Док.Количество ИЗ Документ.РасходнаяНакладная.Состав КАК Док УПОРЯДОЧИТЬ ПО Док.Номенклатура.Наименование, Контрагент Результат: Рис. 223. Результат запроса Получим линейную выборку из результата запроса и обойдем выборку при помощи метода СледующийПоЗначениюПоля(). Пример: Выборка = РезультатЗапроса.Выбрать(); Пока Выборка.СледующийПоЗначениюПоля("Товар") Цикл // здесь мы получим записи с номерами 1, 5, 9, 12 Пока Выборка.СледующийПоЗначениюПоля("Контрагент") Цикл // здесь мы сначала получим записи с номерами 1, 2, 3, 4 // затем 5, 6, 7 // затем 9, 10, 11 // затем 12, 13, 14, 15 КонецЦикла; КонецЦикла; Следует обратить внимание на то, что во внутреннем цикле не была выбрана запись с номером 8, т. к. в ней такое же значение поля Получатель, как и в предыдущей записи. Заметим, что если в цикле получения по значению поля получать записи при помощи метода Следующий(), то будут выбраны все записи с равным значением поля, заданного в предыдущем вызове метода СледующийПоЗначениюПоля(). Пример: Выборка = РезультатЗапроса.Выбрать(); Пока Выборка.СледующийПоЗначениюПоля("Товар") Цикл // здесь мы получим записи с номерами 1, 5, 9, 12 Пока Выборка.Следующий() Цикл // здесь мы сначала получим записи с номерами 1, 2, 3, 4 // затем 5, 6, 7, 8 // затем 9, 10, 11 // затем 12, 13, 14, 15 КонецЦикла; КонецЦикла; 8.3.1.2.2. Методы определения типа текущей записи В тот момент, когда выборка позиционирована на записи, мы можем у выборки узнать характеристики этой записи. Получение характеристик записи осуществляется следующими методами: ● Уровень()– определяет уровень записи в результате запроса. ● ТипЗаписи()– определяет принадлежность записи к одному из следующих типов: ● групповой итог, ● итого по иерархии, ● детальная запись, ● общий итог. ● Группировка()– определяет имя поля, по которому были рассчитаны итоги. Для иллюстрации работы этих методов посмотрим, что они будут возвращать в виде записей для запроса, рассматриваемого в начале главы. ВЫБРАТЬ РасходнаяНакладнаяСостав.Номенклатура КАК Номенклатура, РасходнаяНакладнаяСостав.Количество КАК Количество ИЗ Документ.РасходнаяНакладная.Состав КАК РасходнаяНакладнаяСостав УПОРЯДОЧИТЬ ПО РасходнаяНакладнаяСостав.Номенклатура ИТОГИ СУММА(Количество) ПО Номенклатура ИЕРАРХИЯ Результат: Рис. 224. Иерархия записей 8.3.2. Работа с временными таблицами Язык запросов системы «1С:Предприятие» позволяет использовать временные таблицы в запросах. Использование временных таблиц помогает повысить производительность запросов и сделать текст сложных запросов более легким для восприятия. Работа с временными таблицами обеспечивается двумя составляющими: ● объектом встроенного языка МенеджерВременныхТаблиц, который хранит в себе данные временных таблиц; ● синтаксисом языка запросов, позволяющим создавать новые временные таблицы и использовать существующие временные таблицы. 8.3.2.1. Менеджер временных таблиц Менеджер временных таблиц предназначен для управления временем существования временных таблиц, создаваемых в процессе работы прикладного решения. В одном прикладном решении может быть создано произвольное количество экземпляров менеджера временных таблиц, каждый из которых хранит свой набор временных таблиц. Каждая временная таблица однозначно идентифицируется своим именем, и в пределах одного менеджера временных таблиц все временные таблицы должны иметь уникальные имена. ПРИМЕЧАНИЕ. Имена временных таблиц должны соответствовать требованиям, предъявляемым к именам переменных встроенного языка (см. здесь). Экземпляр менеджера временных таблиц может быть создан с помощью конструктора Новый. Пример: МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; Все временные таблицы, созданные в данном экземпляре менеджера, существуют до тех пор, пока существует сам экземпляр менеджера временных таблиц. При уничтожении экземпляра менеджера все временные таблицы, содержащиеся в нем, также удаляются. Менеджер временных таблиц можно закрыть принудительно при помощи метода Закрыть(). При этом будут удалены все созданные в нем таблицы. Дальнейшая работа с данным экземпляром менеджера будет невозможна. 8.3.2.2. Создание временных таблиц Создание временных таблиц осуществляется с помощью объекта Запросвстроенного языка системы «1С:Предприятие». Связь запроса с менеджером временных таблиц осуществляется с помощью свойства МенеджерВременныхТаблицзапроса, в котором указывается тот экземпляр менеджера, в котором должны создаваться временные таблицы. Пример: МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Временная таблица может быть создана на основе данных базы данных или на основе внешнего источника данных (например, таблицы значений). Для того чтобы создать временную таблицу на основе данных базы данных, следует установить объекту Запросменеджер временных таблиц, а затем выполнить запрос к базе данных, используя ключевое слово ПОМЕСТИТЬ, после которого указать имя создаваемой временной таблицы. Ключевое слово ПОМЕСТИТЬ располагается после списка выборки запроса. Пример: ВЫБРАТЬ Номенклатура.Код, Номенклатура.Наименование ПОМЕСТИТЬ ВременнаяТаблица ИЗ Справочник.Номенклатура КАК Номенклатура Результат исполнения такого запроса будет содержать одну строку с одной колонкой Количество, в которой будут находиться записи, помещенные в созданную таблицу. Если менеджер временных таблиц не установлен или был закрыт, или в установленном менеджере временных таблиц уже существует таблица с указанным именем, будет выдана ошибка. При создании временных таблиц не на основании внешнего источника можно использовать конструкцию ДЛЯ ИЗМЕНЕНИЯ. Это необходимо в тех случаях, когда требуется получить данные во временную таблицу и одновременно заблокировать их от чтения другими транзакциями. Пример: ВЫБРАТЬ РасходнаяНакладная.Ссылка, РасходнаяНакладная.Номер, РасходнаяНакладная.Дата ПОМЕСТИТЬ ВременнаяТаблица ИЗ Документ.РасходнаяНакладная КАК РасходнаяНакладная ГДЕ РасходнаяНакладная.Ссылка В(&Документы) ДЛЯ ИЗМЕНЕНИЯ При необходимости создания индекса для временной таблицы следует в запросе указать ключевое слово ИДЕКСИРОВАТЬ ПО, после которого перечислить поля, по которым нужно построить индекс. Пример: ВЫБРАТЬ Номенклатура.Код КАК Код, Номенклатура.Наименование ПОМЕСТИТЬ ВременнаяТаблица ИЗ Справочник.Номенклатура КАК Номенклатура ИНДЕКСИРОВАТЬ ПО Код Поля, по которым происходит индексирование, должны находиться в списке выборки. Если в качестве источника используется таблица значений, то у этой таблицы значений должны быть явно указаны типы значений, содержащихся в колонках. Для того чтобы создать временную таблицу и заблокировать данные таблиц, на основании которых создается временная, следует использовать конструкцию ДЛЯ ИЗМЕНЕНИЯ. Пример: ВЫБРАТЬ РасходнаяНакладная.Ссылка, РасходнаяНакладная.Номер, РасходнаяНакладная.Дата ПОМЕСТИТЬ ВременнаяТаблица ИЗ Документ.РасходнаяНакладная КАК РасходнаяНакладная ГДЕ РасходнаяНакладная.Ссылка В(&Документы) ДЛЯ ИЗМЕНЕНИЯ Для того чтобы создать временную таблицу на основании внешнего источника, следует в тексте запроса в списке источников указать имя параметра, в который будет помещен внешний источник. Остальной синтаксис идентичен обычному созданию временной таблицы. В качестве внешнего источника могут выступать: ● таблица значений, ● табличная часть, ● результат запроса. Ниже приведен пример создания временной таблицы на основе внешнего источника: ВЫБРАТЬ Источник.Код, Источник.Наименование ПОМЕСТИТЬ ВременнаяТаблица ИЗ &ВнешнийИсточник КАК Источник В данном примере во временную таблицу ВременнаяТаблицабудет помещено содержимое колонок Коди Наименованиеиз внешнего источника, например, таблицы значений, переданной в качестве параметра ВнешнийИсточник. ВНИМАНИЕ! Создание временной таблицы невозможно, если она создается на основании таблицы значений, которая содержит в колонках значение типа УникальныйИдентификатор. ВНИМАНИЕ! Если временная таблица создается на основании внешнего источника, в запросе нельзя использовать объединения и соединения, а также поля, являющиеся реквизитами полей таблиц, на основании которых создается временная таблица. 8.3.2.3. Использование временных таблиц Для использования существующих временных таблиц в запросе следует установить объекту Запрос менеджер временных таблиц, после чего к временным таблицам, содержащимся в данном менеджере временных таблиц, можно обращаться по имени, как к обычным таблицам запроса. 8.3.2.4. Удаление временных таблиц Для удаления временной таблицы из менеджера временных таблиц следует воспользоваться ключевым словом языка запроса УНИЧТОЖИТЬ, после которого указывается имя уничтожаемой таблицы, например: УНИЧТОЖИТЬ ВременнаяТаблица Если уничтожаемой таблицы не существует, будет выдана ошибка. 8.3.3. Работа с пакетными запросами Платформа системы «1С:Предприятие» позволяет работать с пакетами запросов. В пакетном запросе тексты запросов разделяются символом «;». Запросы исполняются последовательно, при этом временные таблицы, которые были созданы во время исполнения какого-либо запроса, будут существовать до окончания исполнения всего пакета запроса или до исполнения в пакете запроса, уничтожающего данную временную таблицу, например: Запрос = Новый Запрос; Запрос.Текст= "ВЫБРАТЬ |УчетНоменклатурыОстаткиИОбороты.Номенклатура, |УчетНоменклатурыОстаткиИОбороты.КоличествоПриход, |УчетНоменклатурыОстаткиИОбороты.КоличествоРасход, |УчетНоменклатурыОстаткиИОбороты.КоличествоКонечныйОстаток |ПОМЕСТИТЬ УчетНоменклатуры |ИЗ |РегистрНакопления.УчетНоменклатуры.ОстаткиИОбороты (,, Авто,, ) КАК УчетНоменклатурыОстаткиИОбороты |; | |ВЫБРАТЬ |УчетНоменклатуры.Номенклатура, |УчетНоменклатуры.КоличествоРасход, |УчетНоменклатуры.КоличествоКонечныйОстаток |ИЗ |УчетНоменклатуры КАК УчетНоменклатуры |; Результат=Запрос.Выполнить(); Первый запрос создает временную таблицу, данные из которой используются во втором запросе. Если объекту Запрос, исполняющему пакетный запрос, установлен менеджер временных таблиц, временные таблицы, которые не были уничтожены в рамках пакетного запроса, сохранятся в установленном менеджере. В тексте пакетного запроса возможно использование и уничтожение временных таблиц, которые существовали в установленном менеджере временных таблиц на момент запуска пакета на исполнение. Кроме метода Выполнить(), последовательно выполняющего все запросы пакета и возвращающего результат последнего запроса в пакете, платформа системы «1С:Предприятие» предоставляет еще один метод – ВыполнитьПакет(). Этот метод последовательно выполняет все запросы и возвращает массив результатов для каждого запроса из пакета в последовательности расположения запросов в тексте пакета. Результатом выполнения запроса на уничтожение временной таблицы является значение Неопределено, которое также помещается в массив результатов. Глава 9. Работа с данными 9.1. Механизм объектных блокировок При работе с объектными данными (справочники, документы, счета и пр.) система «1С:Предприятие» обеспечивает два вида объектных блокировок – пессимистическую и оптимистическую. Они позволяют выполнять целостные изменения объектов при одновременной работе нескольких пользователей. 9.1.1. Пессимистическая блокировка Механизм пессимистической блокировки объектов базы данных предназначен для того, чтобы запретить изменение данных объекта другими сеансами или данным сеансом до тех пор, пока блокировка не будет снята (автоматически или с помощью методов встроенного языка). В основном механизм пессимистической блокировки используется системой «1С:Предприятие» для блокировки объектов, редактируемых в форме. В то же время разработчик имеет возможность задействовать этот механизм, используя средства встроенного языка. Система «1С:Предприятие» использует механизм пессимистической блокировки с помощью расширений форм прикладных объектов. В тот момент, когда пользователь начинает модификацию объекта в форме, расширение формы устанавливает пессимистическую блокировку. Если после этого другой пользователь, например, попытается выполнить редактирование того же объекта, ему будет выдано сообщение о том, что не удалось заблокировать объект. Когда пользователь, редактировавший объект, закроет форму объекта, расширение формы снимет пессимистическую блокировку. В том случае, если необходимо в нестандартной форме объекта обеспечить такое же поведение, что и в стандартной форме объекта, можно использовать метод формы ЗаблокироватьДанныеФормыДляРедактирования()для установки пессимистической блокировки и метод формы РазблокироватьДанныеФормыДляРедактирования()для снятия блокировки. Разработчик, для того чтобы задействовать пессимистическую блокировку, может использовать метод глобального контекста ЗаблокироватьДанныеДляРедактирования(). Возможны два варианта установки пессимистической блокировки: ● С указанием идентификатора формы – в этом случае блокировка устанавливается на время жизни форм, в которой установлена блокировка и снимается автоматически при закрытии формы или завершении сеанса. Также блокировка может быть снята с помощью метода глобального контекста РазблокироватьДанныеДляРедактирования()с указанием того же идентификатора формы, который указывался для установки блокировки. ● Без указания идентификатора формы – в этом случае устанавливаемая блокировка не привязана к какой-либо форме. Блокировка будет автоматически снята при завершении сеанса, при возврате управления с сервера или при завершении транзакции (если блокировка устанавливалась в транзакции). Также блокировка может быть снята с помощью метода глобального контекста РазблокироватьДанныеДляРедактирования()без указания идентификатора формы. Однако следует учитывать, что сам по себе факт установки блокировки не препятствует изменению или удалению объекта в базе данных. Поэтому для того, чтобы обеспечить невозможность изменения заблокированного объекта, операции изменения объекта в другом сеансе также должна предшествовать попытка блокировки этого объекта. Блокировка заблокированного объекта базы данных вызывает исключение, которое может быть обработано конструкцией Попытка... Исключение... КонецПопытки. &НаСервере Функция ПримерМодификации() ТоварСсылка = Справочники.Товары.НайтиПоКоду("000000001"); Попытка ЗаблокироватьДанныеДляРедактирования(ТоварСсылка); // Можно выполнять модификацию данных объекта //... ТоварОбъект = ТоварСсылка.ПолучитьОбъект(); ТоварОбъект.Наименование = "Новое наименование"; ТоварОбъект.Записать(); Возврат Истина; Исключение // Нельзя модифицировать данные объекта Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Данные объекта уже заблокированы"; Сообщение.Сообщить(); Возврат Ложь; КонецПопытки; КонецФункции Следует помнить, что попытки установить блокировку одного и того же объекта с указанием идентификатора формы и без указания идентификатора несовместимы друг с другом. ТоварСсылка = Справочники.Номенклатура.НайтиПоКоду(1); ЗаблокироватьДанныеДляРедактирования(ТоварСсылка); Попытка ЗаблокироватьДанныеДляРедактирования(ТоварСсылка, , ИдентФормы); Исключение // исключение из-за несовместимости блокировок КонецПопытки; Для снятия пессимистической блокировки разработчик может использовать метод глобального контекста РазблокироватьДанныеДляРедактирования(). 9.1.2. Пессимистическая блокировка и транзакции Операции блокировки объектов влияют только на выполнение других операций блокировки объектов и не влияют на операции над данными и на процесс течения транзакций. Блокировка заблокированного объекта базы данных вызывает исключение, которое может быть обработано и не приводит к обязательному откату транзакции. Если в течение транзакции при выполнении метода ЗаблокироватьДанныеДляРедактирования() возникло исключение, то оно может быть обработано конструкцией Попытка... Исключение... КонецПопыткии не требует обязательного отката транзакции. Блокировки объектов, установленные в течение транзакции, снимаются при окончании транзакции, если блокировка устанавливалась без указания идентификатора формы. 9.1.3. Оптимистическая блокировка Оптимистическая блокировка запрещает запись объекта в базу данных, если после считывания объекта он был изменен в базе данных. Строго говоря, оптимистическая блокировка представляет собой проверку, которая выполняется перед записью объекта в базу данных. Когда объект встроенного языка считывает данные из базы данных, в числе прочего считывается и версия объекта, хранящегося в базе данных. Если до начала редактирования данных пользователем (до установки пессимистической блокировки) данные объекта в базе данных были изменены (например, другим пользователем), то номер версии объекта, хранящийся в базе данных, также изменится. При попытке пользователя записать этот объект будет выполнена проверка соответствия версии объекта, находящегося в памяти, и версии объекта, хранящейся в базе данных. Так как версии отличаются, будет выдано предупреждение о том, что версия объекта изменилась или он был удален, то есть сработает оптимистическая блокировка. Оптимистическая блокировка гарантирует, что если пользователь изменяет объект, то его изменения не «затрут» изменения, сделанные другими сеансами или другими программными объектами этого же сеанса. 9.2. Механизм транзакций Независимо от выбранного варианта работы (файловый или клиент-серверный) система «1С:Предприятие» обеспечивает работу с информацией, хранящейся в базе данных, с использованием механизма транзакций. Транзакция – это неделимая с точки зрения воздействия на базу данных последовательность операций манипулирования данными. Она выполняется по принципу «все или ничего» и переводит базу данных из одного целостного состояния в другое целостное состояние. Если по каким-либо причинам одно из действий транзакции невыполнимо или произошло какое-либо нарушение работы системы, база данных возвращается в то состояние, которое было до начала транзакции (происходит откат транзакции). Транзакции могут использоваться как самой системой «1С:Предприятие», так и разработчиком при написании модулей. Система «1С:Предприятие» осуществляет неявный вызов транзакций при выполнении любых действий, связанных с модификацией информации, хранящейся в базе данных. Например, все обработчики событий, расположенные в модулях объектов и наборов записей, связанные с модификацией данных базы данных, вызываются в транзакции. В транзакции выполняется также чтение объектов следующих типов: ПланОбменаОбъект, ДокументОбъект, СправочникОбъект, ПланВидовХарактеристикОбъект, ПланВидовРасчетаОбъект, ПланСчетовОбъект, БизнесПроцессОбъект, ЗадачаОбъект, ПоследовательностьНаборЗаписей, РегистрСведенийНаборЗаписей, РегистрНакопленияНаборЗаписей, РегистрБухгалтерииНаборЗаписей, РегистрРасчетаНаборЗаписей, ПерерасчетНаборЗаписей. При этом в режиме управляемых блокировок (см. здесь) выполняется установка разделяемой блокировки по значению регистратора для наборов записей и по значениям отбора для набора записей независимого регистра сведений. Наряду с этим разработчик может использовать работу с транзакциями в явном виде. Для этого используются процедуры глобального контекста НачатьТранзакцию(), ЗафиксироватьТранзакцию()и ОтменитьТранзакцию(). 9.2.1. Использование явного вызова транзакций Метод НачатьТранзакцию()позволяет открыть транзакцию. После этого все изменения информации базы данных, выполняемые последующими операторами, могут быть либо целиком приняты, либо целиком отвергнуты. Для принятия всех выполненных изменений используется метод ЗафиксироватьТранзакцию(). Для того чтобы отменить все изменения, выполнявшиеся в открытой транзакции, используется метод ОтменитьТранзакцию(). Если количество вызовов метода НачатьТранзакцию()превышает количество вызовов методов ЗафиксироватьТранзакцию()или ОтменитьТранзакцию(), то система выполнит неявный вызов метода ОтменитьТранзакцию()в следующих случаях: ● при окончании выполнения встроенного языка (обработчик события, внешнее соединение, automation-сервер); ● при передаче управления с сервера на клиента. Если количество вызовов методов ЗафиксироватьТранзакцию()или ОтменитьТранзакцию()превышает количество вызовов метода НачатьТранзакцию(), то при выполнении лишнего вызова метода ЗафиксироватьТранзакцию()или ОтменитьТранзакцию()будет порождено исключение. Таким образом, схема работы с транзакцией в общем виде может выглядеть следующим образом: Попытка НачатьТранзакцию(); // Последовательность операторов... ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); КонецПопытки; При использовании такой схемы следует помнить о том, что не все ошибки, возникающие при работе с базой данных, обрабатываются системой одинаково. В общем случае все ошибки базы данных можно разделить на две категории: ● невосстановимые, ● восстановимые. Невосстановимые ошибки – это ошибки, при возникновении которых нормальное функционирование системы «1С:Предприятие» может быть нарушено, например, могут быть испорчены данные. При возникновении невосстановимой ошибки выполнение системы «1С:Предприятие» прекращается в любом случае. Если невосстановимая ошибка произошла в процессе выполнения транзакции, то все изменения, сделанные в рамках этой транзакции, отменяются системой. Восстановимые ошибки – это ошибки, не вызывающие серьезных нарушений в работе системы «1С:Предприятие». В случае возникновения восстановимой ошибки дальнейшая работа системы может быть продолжена. При этом, естественно, сама операция, вызвавшая ошибку, прекращается, и вызывается исключение, которое может быть перехвачено и обработано конструкцией Попытка... Исключение... КонецПопытки. Если восстановимая ошибка произошла в процессе выполнения транзакции, то система автоматически не выполняет отмену транзакции, предоставляя разработчику возможность самостоятельно обработать сложившуюся ситуацию. В зависимости от характера произошедшей ошибки возможны различные сценарии обработки этой ситуации. Если произошедшая ошибка не связана с базой данных, то возможно продолжение транзакции и дальнейшей работы модуля. Если разработчик считает это необходимым, он может отменить транзакцию или, наоборот, продолжить выполнение транзакции, если произошедшая ошибка не нарушает атомарность транзакции. Если же исключительная ситуация была вызвана ошибкой базы данных, то система фиксирует факт возникновения ошибки в этой транзакции, и дальнейшее продолжение транзакции или ее фиксация становятся невозможны. Единственная операция с базой данных, которую разработчик может произвести в данной ситуации, – это отмена транзакции. После этого он может осуществить попытку выполнения этой транзакции еще раз. Например, фрагмент кода, реализующий этот подход при записи некоторых данных в базу данных, может выглядеть следующим образом. // Признак окончания попыток выполнения записи Записано = Ложь; // Попытки записи выполняются в цикле Пока Не Записано Цикл Попытка НачатьТранзакцию(); Данные.Записать(); ЗафиксироватьТранзакцию(); // В случае фиксации транзакции прекратить попытки записи Записано = Истина; Исключение // В случае неудачи отменить текущую транзакцию и // следующую попытку начать с новой транзакции ОтменитьТранзакцию(); КонецПопытки; КонецЦикла; 9.2.2. Вложенный вызов транзакций В рамках уже выполняемой транзакции можно обращаться к процедурам НачатьТранзакцию(), ЗафиксироватьТранзакцию()и ОтменитьТранзакцию(). Например, может использоваться следующая схема вызовов: НачатьТранзакцию();... // Вложенный вызов транзакции НачатьТранзакцию();... ЗафиксироватьТранзакцию();... // Вложенный вызов транзакции НачатьТранзакцию();... ЗафиксироватьТранзакцию();... ЗафиксироватьТранзакцию(); Однако подобное обращение не означает начала новой транзакции в рамках уже выполняющейся. ВНИМАНИЕ! Система «1С:Предприятие» не поддерживает вложенных транзакций. Это означает, что всегда действует только транзакция самого верхнего уровня. Все транзакции, вызванные внутри уже открытой транзакции, фактически относятся к той же транзакции, а не образуют вложенную транзакцию. Таким образом, отмена изменений, выполняемая во вложенной транзакции, будет приводить в конечном счете не к отмене изменений самой вложенной транзакции, а к отмене всех изменений транзакции верхнего уровня. В то же время фиксация изменений, выполненная во вложенной транзакции, игнорируется. 9.2.3. Влияние транзакций на работу программных объектов В общем случае программные объекты, используемые системой «1С:Предприятие», абсолютно «прозрачны» для транзакций базы данных. Иначе говоря, транзакции базы данных могут вызываться при выполнении различных методов программных объектов, однако, например, действия, выполняемые базой данных при откате транзакции, в общем случае никак не влияют на соответствующие программные объекты. Из этого следует, что при отмене транзакций базы данных разработчик (если в этом есть необходимость) должен самостоятельно обеспечивать адекватное изменение данных соответствующих программных объектов. Это можно выполнять путем повторного чтения всех данных объекта или путем изменения некоторых реквизитов программного объекта (если, например, это необходимо для отображения в интерфейсе). В этом правиле есть исключения. В силу значительной прикладной специфики программных объектов системы «1С:Предприятие» в некоторых случаях откат изменений, выполненных в базе данных, все же может влиять на значения свойств соответствующих программных объектов. Это происходит в следующих случаях: ● при отмене транзакции признак проведения документа восстанавливает значение, которое было до начала транзакции; ● если объект был создан и записан в транзакции, то при откате транзакции очищается значение ссылки; ● если объект создавался вне транзакции и при записи его в транзакции использовался код/номер, сгенерированный автоматически, то при отмене транзакции код/номер очищается. 9.3. Механизм управляемых блокировок 9.3.1. Общие сведения о блокировках В идеальном случае в любой СУБД транзакции должны обеспечивать изоляцию изменений, выполняемых в базе данных. Иными словами, несколько транзакций, выполняющих изменение данных, не должны мешать друг другу. Самым простым способом решения этой проблемы является последовательное выполнение транзакций. Следующая транзакция выполняется после того, как закончилась предыдущая. Однако в реальной ситуации, при многопользовательской работе, такой подход приводит к резкому снижению производительности системы. Поэтому на практике используются механизмы, позволяющие выполнять несколько транзакций одновременно. Для того чтобы одновременное выполнение транзакций стало возможным, используется несколько уровней изоляции транзакций. На самом низком уровне изоляции транзакции могут сильно влиять друг на друга. На самом высоком уровне они полностью изолированы. Таким образом, за большую изоляцию транзакций приходится платить большими накладными расходами и замедлением работы системы. Возможность изоляции одних транзакций от других обычно реализуется благодаря блокировкам, накладываемым на используемые ими данные. В зависимости от уровня изоляции накладываются различные типы блокировок на различные объекты базы данных, на различное время. С точки зрения системы «1С:Предприятие» работа с данными может выполняться в одном из двух режимов: ● в транзакции, ● вне транзакции. Режим работы с данными вне транзакции допускает только операции чтения данных. Этот режим введен для того, чтобы обеспечить максимальную скорость и параллельность чтения данных. Поэтому любая операция чтения данных, выполняемая вне транзакции, считается безответственной. Это означает, что такая операция чтения может вернуть устаревшие данные или даже незафиксированные изменения, произведенные другой транзакцией, т. е. чтение выполняется «не глядя» на блокировки данных, расставленные другими транзакциями. Режим работы с данными в транзакции допускает любые операции чтения и модификации данных. При этом должны соблюдаться следующие правила: ● Чтение данных должно быть воспроизводимым, т. е. любая последующая операция чтения данных с тем же условием выборки должна возвращать такой же результат. ● Результат чтения должен содержать наиболее актуальные данные. Это означает, что никакая другая транзакция не может изменить данные, считанные в данной транзакции, до тех пор, пока данная транзакция не будет завершена. ● Результат чтения не должен содержать незафиксированные изменения данных базы данных. 9.3.2. Управляемые блокировки Система «1С:Предприятие» позволяет использовать два режима работы с базой данных в рамках транзакции: режим автоматических блокировок и режим управляемых блокировок. Принципиальное отличие этих режимов заключается в следующем. Режим автоматических блокировок не требует от разработчика каких-либо действий по управлению блокировками в транзакции для того, чтобы обеспечивались перечисленные выше правила работы с данными в транзакции. Эти правила обеспечиваются платформой системы «1С:Предприятие» за счет использования определенных уровней изоляции транзакций в той или иной СУБД. Такой режим работы является наиболее простым для разработчика, однако в некоторых случаях (например, при интенсивной одновременной работе большого количества пользователей) используемый уровень изоляции транзакций в СУБД не может обеспечить достаточной параллельности работы, что проявляется в виде большого количества конфликтов блокировок при работе пользователей. При работе в режиме управляемых блокировок система «1С:Предприятие» использует гораздо более низкий уровень изоляции транзакций в СУБД, что позволяет значительно повысить параллельность работы пользователей прикладного решения. Однако, в отличие от режима автоматических блокировок, данный уровень изоляции транзакций уже не может сам по себе обеспечить выполнение всех правил работы с данными в транзакции (в частности, не обеспечивается воспроизводимость чтения данных в транзакции). Поэтому при работе в управляемом режиме от разработчика требуется самостоятельно управлять блокировками, устанавливаемыми в транзакции. В сводном виде отличия при работе в режиме автоматических блокировок и в режиме управляемых блокировок приведены в следующей таблице: Вид блокировки Уровень изоляции транзакций Автоматические блокировки Файловая БД Таблиц Serializable MS SQL Server Записей Repetable Read или Serializable IBM DB2 Записей Repetable Read или Serializable PostgreSQL Таблиц Serializable Oracle Database Таблиц Serializable Файловая БД Таблиц Serializable MS SQL Server 2000 Записей Read Commited MS SQL Server 2005 и выше Записей Read Commited Snapshot IBM DB2 Записей Read Commited PostgreSQL Записей Read Commited Oracle Database Записей Read Commited Управляемые блокировки ПРИМЕЧАНИЕ. Рекомендуется разработку прикладных решений вести в режиме управляемых блокировок с целью максимального использования возможностей СУБД. Использование прикладного решения в автоматическом режиме используется для совместимости с предыдущими версиями прикладных решений и не рекомендуется для реальной эксплуатации. Поведение системы при безответственном чтении (например, при работе динамических списков, выполнении отчетов) также отличается в различных режимах блокировок. В сводном виде отличия безответственного чтения в разных режимах работы блокировок (автоматическом или управляемом) приведены в следующей таблице: Чтение вне транзакции Автоматические блокировки Файловая БД «Грязное» чтение MS SQL Server «Грязное» чтение IBM DB2 «Грязное» чтение PostgreSQL Согласованное чтение Oracle Database Согласованное чтение Управляемые блокировки Файловая БД «Грязное» чтение MS SQL Server 2000 «Грязное» чтение MS SQL Server 2005 и выше Согласованное чтение IBM DB2 «Грязное» чтение PostgreSQL Согласованное чтение Oracle Database Согласованное чтение 9.3.3. Установка режима блокировок в конфигурации Конфигурация имеет свойство Режим управления блокировкой данных. Каждый прикладной объект конфигурации также имеет свойство Режим управления блокировкой данных. Режим управления блокировкой данных для всей конфигурации в целом может быть установлен в значения Автоматический, Управляемый (установлено по умолчанию для новой конфигурации) и Автоматический и управляемый. Значения Автоматический и Управляемый означают, что соответствующий режим блокировки будет использоваться для всех объектов конфигурации, независимо от значений, установленных для каждого из объектов. Значение Автоматический и управляемый означает, что для конкретного объекта конфигурации будет использован тот режим, который указан в его свойстве Режим управления блокировкой данных: Автоматический или Управляемый. Следует отметить, что режим управления блокировкой данных, указанный для объекта метаданных, устанавливается для тех транзакций, которые инициируются системой «1С:Предприятие» при работе с данными этого объекта (например, при модификации данных объекта). Если же, например, операция записи объекта выполняется в транзакции, инициированной разработчиком (метод НачатьТранзакцию()), то режим управления блокировкой данных будет определяться значением параметра Режим блокировок метода НачатьТранзакцию(), а не значением свойства объекта метаданных Режим управления блокировкой данных. По умолчанию параметр Режим блокировок имеет значение РежимУправленияБлокировкойДанных.Автоматический, поэтому для того, чтобы в явной транзакции использовать режим управляемых блокировок, следует указывать значение этого параметра РежимУправленияБлокировкойДанных.Управляемый. 9.3.4. Работа с управляемыми блокировками средствами встроенного языка Для управления блокировками в транзакции предназначен объект встроенного языка БлокировкаДанных. Экземпляр этого объекта может быть создан с помощью конструктора и позволяет описать необходимые пространства блокировок и режимы блокировок. Для установки всех созданных блокировок используется метод Заблокировать()объекта БлокировкаДанных. Если этот метод выполняется в транзакции (явной или неявной), блокировки устанавливаются и при окончании транзакции будут сняты автоматически. Если метод Заблокировать()выполняется вне транзакции или в автоматическом режиме управления блокировками в рамках транзакции, то будет сгенерировано исключение. Объект БлокировкаДанныхпредставляет собой коллекцию элементов блокировки данных, каждый из которых описывает блокировки одного пространства блокировок. Пространства блокировок определены в платформе системы «1С:Предприятие» и соответствуют структуре прикладных объектов конфигурации. Для каждого пространства блокировок в платформе определены имена полей, значения которых могут анализироваться при установке тех или иных блокировок. Допустимы следующие имена пространств блокировок и имена полей пространств блокировок: Имя пространства блокировки Имя поля пространства блокировки Справочник.<имя> Ссылка; <имя поля> Документ.<имя> Ссылка; <имя поля> ПланОбмена.<имя> Ссылка; <имя поля> ПланСчетов.<имя> Ссылка; <имя поля> БизнеcПроцесс.<имя> Ссылка; <имя поля> Задача.<имя> Ссылка; <имя поля> ПланВидовРасчета.<имя> Ссылка; <имя поля> ПланВидовХарактеристик.<имя> Ссылка; <имя поля> РегистрСведений.<имя>.НаборЗаписей– только для регистра сведений, подчиненного регистратору Регистратор РегистрСведений.<имя> Период – если есть; <имя измерения> РегистрНакопления.<имя>.НаборЗаписей Регистратор РегистрНакопления.<имя> Период; <имя измерения> РегистрБухгалтерии.<имя>.НаборЗаписей Регистратор РегистрБухгалтерии.<имя> Период; <имя измерения>; <вид движения>– значение системного перечисления ВидДвиженияБухгалтерии; Счет; Субконто<N>; <вид субконто>. РегистрРасчета.<имя>.НаборЗаписей Регистратор РегистрРасчета.<имя> ПериодРегистрации; ПериодДействия; <имя измерения> Перерасчет.<имя>.НаборЗаписей ОбъектПерерасчета Последовательность.<имя>.НаборЗаписей Регистратор Последовательность.<имя> <имя измерения> Константа.<имя> Где <имя поля>– имя поля, по которому может быть установлена управляемая блокировка. Перечень допустимых полей (по которым может быть установлена управляемая блокировка) задается в свойстве Поля блокировки данных для следующих объектов: ● справочники, ● документы, ● планы видов характеристик, ● планы счетов, ● планы видов расчета, ● планы обмена, ● бизнес-процессы, ● задачи. Не рекомендуется устанавливать блокировки по реквизитам (и общим реквизитам) следующих типов: строка неограниченной длины, хранилище значения, описание типов. Рекомендация относится к следующим объектам: справочники, документы, планы видов характеристик, планы видов расчета, планы счетов, бизнес-процессы, задачи, планы обмена. Запрещено устанавливать блокировки по полям Предопределенныйи ИмяПредопределенныхДанныхв справочниках, планах видов характеристик, планах видов расчета, планах счетов. При установке управляемой транзакционной блокировки на пространство РегистрБухгалтерии.<Имя>, если значение субконто задано ссылкой на характеристику, то в плане счетов эта характеристика должна быть одним из субконто этого счета. Если соответствующее субконто у счета не задано, то будет выдана ошибка. Для каждого пространства блокировки может быть задано произвольное количество условий на поля, по которым будут определяться записи, подлежащие блокировке. Условия задаются на равенство значения поля указанному значению или на вхождение значения поля в указанный диапазон. Условия могут быть заданы двумя способами: ● с помощью явного указания имени поля и значения (метод УстановитьЗначение()объекта ЭлементБлокировкиДанных); ● с помощью указания источника данных, содержащего необходимые значения (свойство ИсточникДанныхобъекта ЭлементБлокировкиДанных). При явном указании значения поля в параметры метода УстановитьЗначение()передается имя поля и значение: Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить( "Справочник.Магазин"); ЭлементБлокировки.УстановитьЗначение("Код", 100); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; Блокировка.Заблокировать(); Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ТоварыНаСкладах"); ЭлементБлокировки.УстановитьЗначение("Качество", Справочники.Качество.НайтиПоКоду("1")); Следует иметь в виду, что одну и ту же запись регистра можно заблокировать дважды: первый раз блокируя саму запись, а второй раз – блокируя набор, в который эта запись входит. При удалении или изменении объекта, для которого доступна блокировка по полям, выполняется блокировка по полю Ссылкаи по всем полям, указанным в свойстве Поля блокировки данных. При выполнении изменения объект блокируется как по «старым» значениям полей (которые были до начала записи), так и по «новым» значениям (которые находятся в записываемом объекте). В качестве значения может быть передан также объект встроенного языка Диапазон, который создается с помощью конструктора и позволяет задать верхнюю и нижнюю границы диапазона (границы диапазона включаются в диапазон). При использовании источника данных устанавливается значение свойства ИсточникДанных, а затем с помощью метода ИспользоватьИзИсточникаДанных()задается соответствие полей области блокировки полям источника данных: Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка. Добавить("РегистрНакопления.ТоварыНаСкладах"); ЭлементБлокировки.ИсточникДанных = ДокументОбъект.ВозвратнаяТара; ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура"); ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Склад", "Склад"); В качестве источника данных может выступать: ● результат запроса, ● табличная часть, ● набор записей, ● таблица значений. Соответственно, при установке соответствия полей именами полей источника будут являться: ● имена колонок результата запроса, ● имена реквизитов табличной части, ● имена измерений, ● имена колонок таблицы значений. Объект Диапазонтакже может являться значением поля источника данных. Для каждого элемента блокировки может быть задан один из двух режимов блокировки: ● разделяемый, ● исключительный. Режим блокировки задается с помощью свойства Режимобъекта ЭлементБлокировкиДанных. Таблица совместимости управляемых блокировок выглядит следующим образом: Разделяемая Исключительная Разделяемая + - Исключительная - - Разделяемый режим блокировки подразумевает, что заблокированные данные не могут быть изменены другой транзакцией до окончания текущей транзакции. Исключительный режим блокировки подразумевает, что заблокированные данные не могут быть изменены другой транзакцией до окончания текущей транзакции, а также не могут быть прочитаны другой транзакцией, устанавливающей разделяемую блокировку на эти данные. Говоря о совместимости действий, выполняемых в транзакции, следует учитывать, что помимо явных управляемых блокировок, устанавливаемых пользователем, система «1С:Предприятие» устанавливает также неявные управляемые исключительные блокировки при записи данных в транзакции. При чтении данных объекта из базы данных (получении объекта и обращении к ссылке) не выполняется транзакционная блокировка объекта. Если блокировка необходима, то ее нужно устанавливать средствами языка до обращения к объекту. Таким образом, таблица совместимости действий, выполняемых в транзакции при использовании режима управляемых блокировок, выглядит следующим образом. Блоки–ровка Реж–им ББ R W R W R W ББ R + + + + + + W + - - - - - R + - + - - - W + - - - - - R + - - - - - W + - - - - - РБ ИБ РБ ИБ Где: ● R – чтение, ● W – запись, ● ББ – без блокировки, ● РБ – разделяемая блокировка, ● ИБ – исключительная блокировка. 9.3.5. Особенности работы в режиме «Автоматический и управляемый» Режим управления блокировками Автоматический и управляемый предназначен для решения проблем, возникающих при параллельной работе с отдельными объектами конфигурации. Например, существует большая конфигурация, которую сложно в один момент перевести в режим управляемых блокировок, однако есть один или два документа, являющиеся «камнем преткновения» при одновременной работе с ними большого количества пользователей. В этом случае вся конфигурация может быть переведена в режим Автоматический и управляемый, а затем сам документ и затрагиваемые при его записи объекты конфигурации – в режим Управляемый. Это позволит настроить работу с данным документом в режиме управляемых блокировок, в то время как основная часть конфигурации будет продолжать функционировать в автоматическом режиме управления блокировками. При работе в режиме управления блокировками Автоматический и управляемый следует учитывать две особенности: ● Независимо от режима, указанного для данной транзакции, система будет устанавливать соответствующие управляемые блокировки. ● Режим управления блокировками определяется транзакцией самого «верхнего» уровня. Другими словами, если к моменту начала транзакции была начата другая транзакция, то начинаемая транзакция может быть выполнена только в том в режиме, который установлен для уже выполняющейся транзакции. Рассмотрим перечисленные особенности более подробно. Первая особенность заключается в том, что даже если для транзакции используется автоматический режим управления блокировками, система установит дополнительно и соответствующие управляемые блокировки при записи данных в этой транзакции. Из этого следует, что транзакции, исполняющиеся в режиме управляемых блокировок, могут конфликтовать с транзакциями, исполняющимися в режиме автоматического управления блокировками. Вторая особенность заключается в том, что режим управления блокировками, указываемый для объекта метаданных в конфигурации или указываемый при начале транзакции в явном виде (как параметр метода НачатьТранзакцию()), является лишь «желаемым» режимом. Фактический режим управления блокировками, в котором будет исполняться транзакция, зависит от того, является ли данный вызов начала транзакции первым, или к этому моменту уже начата другая транзакция в данной сессии системы «1С:Предприятие». Например, если требуется управлять блокировками при записи наборов записей регистра, при проведении документа, то управляемый режим блокировок должен быть установлен как для самого регистра, так и для документа, поскольку запись наборов записей регистра будет выполняться в транзакции, открытой при записи документа. Возможны четыре различных сочетания режимов управления блокировками в транзакции, которые представлены в следующей таблице: Режим существующей транзакции Режим начинаемой транзакции Результат Автоматический Автоматический Начинаемая транзакция будет выполнена в автоматическом режиме Автоматический Управляемый Начинаемая транзакция будет выполнена в автоматическом режиме Управляемый Автоматический Будет вызвана исключительная ситуация Управляемый Управляемый Начинаемая транзакция будет выполнена в управляемом режиме 9.3.6. Особенности работы с большим количеством управляемых блокировок Следует помнить, что если на одно пространство накладывается более 100 000 блокировок, то может произойти эскалация блокировки. При эскалации блокировки блокируется все пространство. При использовании независимых разделителей эскалация происходит для одного набора значений разделителей: ● Блокируется все пространство только в рамках значений разделителей; ● На сеансы с другими значениями разделителей эскалация влияния не оказывает. 9.3.7. Модификация конфигураций при переходе к режиму управляемых блокировок При переходе к частичной или полной работе в режиме управляемых блокировок прикладное решение требует доработки. Доработка заключается в том, что необходимо выявить участки кода, которые требуют наличия управляемых блокировок, и затем в этих участках кода установить требуемый режим управляемой блокировки данных. Это можно осуществить двумя способами: ● с помощью объекта БлокировкаДанных; ● с помощью свойства БлокироватьДляИзмененияу наборов записей регистров накопления и регистров бухгалтерии. Необходимая управляемая блокировка будет автоматически установлена платформой в том случае, если записывается набор записей регистра, у которого данное свойство имеет значение Истина. 9.3.7.1. Определение участков кода, требующих доработки Управляемые блокировки необходимо устанавливать в тех участках кода, которые удовлетворяют одному из следующих условий: ● Считываются данные, которые в дальнейшем должны быть изменены. ● Считывается некоторая согласованная совокупность данных (содержащихся в нескольких объектах), и согласованность считанных данных необходимо поддержать. В этом случае данные из этой совокупности должны быть заблокированы либо единовременно перед считыванием, либо по мере считывания отдельных элементов. Если некоторый элемент данных считывается однократно, не связан логически с другими элементами данных и при этом не будет изменен в той же транзакции, то его можно не блокировать. ● Важно обеспечить неизменность считываемых данных до конца транзакции. Например, некоторые данные, считываемые в транзакции, могут быть прочитаны еще раз, и важно обеспечить их неизменность. Типичным примером таких операций может служить запрос к остаткам номенклатуры в модуле проведения документа. 9.3.7.2. Выбор режима управляемой блокировки Для операций, описанных выше, режим блокировки следует устанавливать исходя из следующих соображений: ● Исключительный режим блокировки следует устанавливать для тех данных, которые должны быть изменены в рамках этой же транзакции. Это позволит предотвратить конфликты блокировок. ● Разделяемый режим блокировки следует устанавливать для тех данных, которые только считываются и изменять которые не предполагается, но заблокировать все-таки требуется. 9.3.7.3. Примеры доработки конфигурации Далее приведем пример установки управляемых блокировок в модуле набора записей регистра накопления ТоварыНаСкладах. Прежде всего, следует создать управляемую блокировку: Блокировка = Новый БлокировкаДанных; Затем следует проанализировать текст запроса, формируемого в модуле, и создать необходимые блокировки. Исключительная блокировка на регистр «ТоварыНаСкладах» В ходе выполнения модуля набора записей формируется запрос, содержащий следующий фрагмент: //... ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, Номенклатура В (ВЫБРАТЬ РАЗЛИЧНЫЕ Номенклатура ИЗ Документ.РеализацияТоваровУслуг.Товары ГДЕ Ссылка = &ДокументСсылка)) //... В данном случае нужно следует установить следующие блокировки: БлокировкаТоварыНаСкладах1 = Блокировка. Добавить("РегистрНакопления.ТоварыНаСкладах"); БлокировкаТоварыНаСкладах1.Режим = РежимБлокировкиДанных.Исключительный; БлокировкаТоварыНаСкладах1.ИсточникДанных = ДокументОбъект.Товары; БлокировкаТоварыНаСкладах1.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура"); БлокировкаТоварыНаСкладах1.ИспользоватьИзИсточникаДанных("ХарактеристикаНоменклатуры","ХарактеристикаНоменклатуры"); БлокировкаТоварыНаСкладах1.ИспользоватьИзИсточникаДанных("Склад", "Склад"); Разделяемая блокировка на регистр «ТоварыВРезервеНаСкладах» В ходе выполнения модуля формируется запрос, содержащий следующий фрагмент: //... ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, Номенклатура В (ВЫБРАТЬ РАЗЛИЧНЫЕ Номенклатура ИЗ Документ.РеализацияТоваровУслуг.Товары ГДЕ Ссылка = &ДокументСсылка)) //... В данном случае нужно установить следующие блокировки: БлокировкаТоварыВРезервеНаСкладах1 = Блокировка.Добавить("РегистрНакопления.ТоварыВРезервеНаСкладах"); БлокировкаТоварыВРезервеНаСкладах1.Режим = РежимБлокировкиДанных.Разделяемый; БлокировкаТоварыВРезервеНаСкладах1.ИсточникДанных = ДокументОбъект.Товары; БлокировкаТоварыВРезервеНаСкладах1.ИспользоватьИзИсточникаДанных("Номенклатура", Номенклатура"); БлокировкаТоварыВРезервеНаСкладах1.ИспользоватьИзИсточникаДанных( "ХарактеристикаНоменклатуры", "ХарактеристикаНоменклатуры"); БлокировкаТоварыВРезервеНаСкладах1.ИспользоватьИзИсточникаДанных("Склад", "Склад"); Разделяемая блокировка на регистр «ТоварыКПередачеСоСкладов» В ходе выполнения модуля формируется запрос, содержащий следующий фрагмент: //... ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(, Номенклатура В (ВЫБРАТЬ РАЗЛИЧНЫЕ Номенклатура ИЗ Документ.РеализацияТоваровУслуг.Товары ГДЕ Ссылка = &ДокументСсылка)) //... В данном случае нужно установить следующие блокировки: БлокировкаТоварыКПередачеСоСкладов1 = Блокировка.Добавить("РегистрНакопления.ТоварыКПередачеСоСкладов"); БлокировкаТоварыКПередачеСоСкладов1.Режим = РежимБлокировкиДанных.Разделяемый; БлокировкаТоварыКПередачеСоСкладов1.ИсточникДанных = ДокументОбъект.Товары; БлокировкаТоварыКПередачеСоСкладов1.ИспользоватьИзИсточникаДанных("Номенклатура","Номенклатура"); БлокировкаТоварыКПередачеСоСкладов1.ИспользоватьИзИсточникаДанных("ХарактеристикаНоменклатуры", "ХарактеристикаНоменклатуры"); БлокировкаТоварыКПередачеСоСкладов1.ИспользоватьИзИсточникаДанных("Склад", "Склад"); Блокировки по табличной части «ВозвратнаяТара». Исключительная блокировка на регистр «ТоварыНаСкладах» В ходе выполнения модуля формируется запрос, содержащий следующий фрагмент: //... ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, Номенклатура В (ВЫБРАТЬ РАЗЛИЧНЫЕ Документ.РеализацияТоваровУслуг.ВозвратнаяТара.Номенклатура ИЗ Документ.РеализацияТоваровУслуг.ВозвратнаяТара ГДЕ Документ.РеализацияТоваровУслуг.ВозвратнаяТара.Ссылка = &ДокументСсылка) И Качество = &Новый) //... В данном случае нужно установить следующие блокировки: БлокировкаТоварыНаСкладах2 = Блокировка.Добавить("РегистрНакопления.ТоварыНаСкладах"); БлокировкаТоварыНаСкладах2.Режим = РежимБлокировкиДанных.Исключительный; БлокировкаТоварыНаСкладах2.ИсточникДанных = ДокументОбъект.ВозвратнаяТара; БлокировкаТоварыНаСкладах2.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура"); БлокировкаТоварыНаСкладах2.ИспользоватьИзИсточникаДанных("Склад", "Склад"); БлокировкаТоварыНаСкладах2.УстановитьЗначение("Качество", Справочники.Качество.НайтиПоКоду("1")); Блокировки по табличной части «ВозвратнаяТара». Разделяемая блокировка на регистр «ТоварыВРезервеНаСкладах» В ходе выполнения модуля формируется запрос, содержащий следующий фрагмент: //... ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, Номенклатура В (ВЫБРАТЬ РАЗЛИЧНЫЕ Документ.РеализацияТоваровУслуг.ВозвратнаяТара.Номенклатура ИЗ Документ.РеализацияТоваровУслуг.ВозвратнаяТара ГДЕ Документ.РеализацияТоваровУслуг.ВозвратнаяТара.Ссылка = &ДокументСсылка)) КАК Резервы //... В данном случае нужно установить следующие блокировки: БлокировкаТоварыВРезервеНаСкладах2 = Блокировка.Добавить("РегистрНакопления.ТоварыВРезервеНаСкладах"); БлокировкаТоварыВРезервеНаСкладах2.Режим = РежимБлокировкиДанных.Разделяемый; БлокировкаТоварыВРезервеНаСкладах2.ИсточникДанных = ДокументОбъект.ВозвратнаяТара; БлокировкаТоварыВРезервеНаСкладах2.ИспользоватьИзИсточникаДанных("Номенклатура","Номенклатура"); БлокировкаТоварыВРезервеНаСкладах2.ИспользоватьИзИсточникаДанных("Склад", "Склад"); Блокировки по табличной части «ВозвратнаяТара». Разделяемая блокировка на регистр «ТоварыКПередачеСоСкладов» В ходе выполнения модуля формируется запрос, содержащий следующий фрагмент: //... ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(, Номенклатура В (ВЫБРАТЬ РАЗЛИЧНЫЕ Документ.РеализацияТоваровУслуг.ВозвратнаяТара.Номенклатура ИЗ Документ.РеализацияТоваровУслуг.ВозвратнаяТара ГДЕ Документ.РеализацияТоваровУслуг.ВозвратнаяТара.Ссылка = &ДокументСсылка)) КАК ТоварыКПередаче //... В данном случае нужно установить следующие блокировки: БлокировкаТоварыКПередачеСоСкладов2 = Блокировка.Добавить("РегистрНакопления.ТоварыКПередачеСоСкладов"); БлокировкаТоварыКПередачеСоСкладов2.Режим = РежимБлокировкиДанных.Разделяемый; БлокировкаТоварыКПередачеСоСкладов2.ИсточникДанных = ДокументОбъект.ВозвратнаяТара; БлокировкаТоварыКПередачеСоСкладов2.ИспользоватьИзИсточникаДанных("Номенклатура","Номенклатура"); БлокировкаТоварыКПередачеСоСкладов2.ИспользоватьИзИсточникаДанных("Склад", "Склад"); После того как все необходимые блокировки созданы, следует заблокировать перечисленные данные: Блокировка.Заблокировать(); //... далее следует прежний текст модуля 9.4. Монопольный режим Монопольный режим – специальный режим доступа к базе данных, при использовании которого работать с базой данных можно, используя только один сеанс. Монопольный режим можно использовать в тех случаях, когда требуется выполнить существенные, согласованные, изменения с информационной базой, которые нет необходимости выполнять в рамках транзакции. При этом желательно исключить влияние других сеансов на результаты изменения. Установку монопольного режима требуют некоторые методы встроенного языка (например, метод УдалитьОбъекты()), а также работа Конфигуратора. Для установки или снятия монопольного режима необходимо использовать метод глобального контекста УстановитьМонопольныйРежим(). Проверить установку монопольного режима можно с помощью метода МонопольныйРежим(). Невозможно изменить состояние монопольного режима в том случае, если активна транзакция (явная или неявная). В случае установки монопольного режима, запрещено создание новых сеансов с данной информационной базой, а также невозможна установка монопольного режима в том случае, если с информационной базой работают более чем из одного сеанса. В случае работы в монопольном режиме не устанавливаются управляемые блокировки (попытки их установки игнорируются). При работе с монопольным режимом следует помнить про следующую особенность работы системы: если из сеанса, который установил монопольный режим, будет запущено фоновое задание, то запущенное фоновое задание «отнимет» монопольный режим у родительского сеанса. Во время работы фонового задания родительский сеанс не имеет возможности изменять данные в информационной базе. Монопольный режим «вернется» к родительскому сеансу после того, как запущенное фоновое задание будет завершено. Глава 10. Система компоновки данных Система компоновки данных предназначена для создания отчетов «1С:Предприятия» на основе их декларативного описания. Использование декларативного описания отчетов позволяет реализовать следующие возможности: ● создание отчета без программирования; ● возможность создания различных вариантов отчета; ● возможность задания различных вариантов пользовательских настроек; ● использование автоматически генерируемых форм просмотра и настройки отчета; ● разбиение исполнения отчета на этапы; ● исполнение отдельных этапов построения отчета на различных компьютерах; ● независимое использование отдельных частей системы компоновки данных; ● программное влияние на процесс выполнения отчета; ● настройки структуры отчета; ● совмещение в отчете нескольких таблиц; ● создание вложенных отчетов и др. Возможности системы компоновки данных используются: ● при работе динамических списков (см. здесь); ● при подготовке данных для последующей обработки (например, в обработках). 10.1. Общие сведения о компоновке данных Система компоновки данных представляет собой совокупность элементов, каждый из которых соответствует определенному этапу выполнения отчета. Таким образом, весь процесс выполнения отчета в системе компоновки данных сводится к последовательному переходу от одного элемента к другому, доходя в итоге до готового отчета. Каждый элемент системы компоновки данных имеет собственное декларативное описание, возможность программного доступа и возможность сериализации в/из XML. Такой подход позволяет гибко управлять различными этапами выполнения отчета. Основные элементы системы компоновки данных представлены на рис. 225. Рис. 225. Основные элементы системы компоновки данных Схема компоновки данных – описывает суть данных, которые предоставляются отчету (откуда получать данные и как можно управлять компоновкой данных). Представляет собой базу, на основе которой могут быть сформированы всевозможные отчеты. Может содержать: ● текст запроса с инструкциями системы компоновки данных; ● описание нескольких наборов данных; ● описание доступных полей; ● описание связей между несколькими наборами данных; ● описание параметров получения данных; ● описание макетов полей и группировок и др. Настройки компоновки данных – описывают все, что может настроить разработчик или пользователь в некоторой установленной схеме компоновки данных. Могут содержать: ● отбор; ● упорядочивание; ● условное оформление; ● структуру отчета (составные части будущего отчета); ● параметры получения данных; ● параметры вывода данных и др. Макет компоновки данных – представляет собой уже готовое описание того, как должен быть сформирован отчет. В нем соединяется схема компоновки и настройки компоновки. Фактически представляет собой результат применения конкретных настроек к схеме компоновки и является готовым заданием процессору компоновки на формирование отчета нужной структуры с учетом конкретных настроек. Элемент результата компоновки данных – результат компоновки данных представляется набором элементов результата компоновки данных. Как самостоятельная логическая сущность результат компоновки данных не существует, существуют только его элементы. Элементы результата компоновки данных можно вывести в табличный документ для представления их конечному пользователю или в другие виды документов. Процесс компоновки данных состоит из нескольких этапов, которые представлены на рис. 226. Рис. 226. Этапы процесса компоновки данных Создание схемы компоновки данных может быть выполнено: ● визуально, при помощи конструктора схемы компоновки данных; ● визуально, при помощи любого редактора, позволяющего редактировать текст XML; ● программно, при помощи объектов встроенного языка системы «1С:Предприятие». Редактирование настроек компоновки данных – для редактирования настроек компоновки в системе предусмотрен ряд объектов встроенного языка и расширений табличного поля. Подготовка к исполнению – процесс формирования макета компоновки данных. В данном процессе формируются запросы, необходимые для получения данных, указанных в настройках, формируются макеты областей отчета. Исполнение компоновки данных – это процесс получения, агрегации, оформления данных. Вывод результата компоновки данных – полученный результат компоновки может быть выведен в документ, который будет показан пользователю. Отчет может быть выведен в различных форматах. Схема на рис. 227 в обобщенном виде представляет объекты системы компоновки данных, используемые на различных этапах создания отчета. Рис. 227. Объекты системы компоновки данных Конструктор схемы компоновки данных – может быть использован для создания схемы компоновки данных. Компоновщик настроек компоновки данных – может быть использован для редактирования настроек системы компоновки данных. Компоновщик макета компоновки данных – используется для подготовки к исполнению. Процессор компоновки данных – осуществляет исполнение компоновки данных. Процессор вывода результата компоновки данных в табличный документ – выводит элементы результата компоновки данных в табличный документ. Отличительной особенностью отчета, получаемого с помощью системы компоновки данных, является то, что он может иметь сложную структуру, включающую в себя различное сочетание следующих элементов: ● группировка, ● таблица, ● диаграмма, ● вложенный отчет. Таким образом, отчет, полученный с помощью системы компоновки данных, представляет собой не таблицу, а сложную иерархическую структуру, в которой участвуют перечисленные элементы. Рис. 228. Структура отчета На данном рисунке приведен пример отчета, содержащего на первом уровне иерархии диаграмму и группировку по номенклатурным группам. А внутри группировки по номенклатурным группам расположена таблица, содержащая обороты номенклатуры, принадлежащей указанной номенклатурной группе. 10.2. Общие объекты системы компоновки данных 10.2.1. Свойство «Использование» Многие объекты, в основном подсистемы настроек компоновки данных, имеют свойство булевого типа Использование. Это свойство позволяет отключать часть функциональности без ее физического удаления. Значение этого свойства по умолчанию – Истина, кроме отдельно описанных случаев. 10.2.2. Поле системы компоновки данных Это объект, представляющий путь к данным поля. Поле реализовано в виде отдельного типа с целью устранить неоднозначность в свойствах некоторых объектов, которые могут принимать значения как строк, так и полей. Имеет конструктор с параметром Строка, описывающий путь к данным; свойств и методов не имеет. Если путь к данным содержит идентификатор с пробелами или специальными символами, то такие идентификаторы следует заключать в квадратные скобки. 10.2.3. Параметры системы компоновки данных Механизм параметров был реализован для единообразного использования и редактирования коллекций некоторых значений, состав и тип элементов которых определен заранее и не может быть изменен. Механизм параметров состоит из двух частей: ● Доступные параметры – определяют состав коллекции и допустимые типы ее элементов. Параметр является аналогом поля системы компоновки данных. ● Значения параметров. 10.3. Схема компоновки данных Схема компоновки данных представляется объектом встроенного языка системы «1С:Предприятие» СхемаКомпоновкиДанныхи состоит из множества других вложенных объектов. Схема компоновки данных имеет представление в виде XML; таким образом, может быть создана любыми средствами, позволяющими генерировать XML, равно как и использована любыми средствами, которые могут читать XML. Схема компоновки данных используется для предоставления информации о доступных настройках, а также при формировании макета компоновки данных (см. здесь), т. е. при исполнении компоновки данных. Для визуального редактирования схемы компоновки данных предназначен конструктор схемы компоновки данных (см. здесь). Загрузку схемы компоновки данных из XML можно осуществить стандартными средствами встроенного языка. ЧтениеXML = Новый ЧтениеXML; ЧтениеXML.УстановитьСтроку(ЭлементыФормы.ТекстСхемыКомпоновкиДанных.ПолучитьТекст()); СКД = СериализаторXDTO.ПрочитатьXML(ЧтениеXML, Тип("СхемаКомпоновкиДанных")); Все выражения, описываемые в схеме компоновки данных, записываются на языке выражений системы компоновки данных (см. здесь). 10.3.1. Составные части схемы компоновки данных Каждая схема компоновки данных содержит множество объектов, описывающих ту или иную часть. Рассмотрим эти составные части. Рис. 229. Составные части схемы компоновки данных 10.3.1.1. Источники данных Схема компоновки данных может содержать несколько источников данных. Под источником данных подразумевается источник, из которого будут получаться данные. В качестве источника данных выступает информационная база системы «1С:Предприятие». Источники данных описываются в свойстве ИсточникиДанныхсхемы, которое содержит коллекцию значений, состоящую из элементов ИсточникДанныхСхемыКомпоновкиДанных. 10.3.1.2. Наборы данных Наборы данных в схеме компоновки данных содержат информацию о том, какие поля можно получать из данного набора, какие поля набора данных можно использовать в отборе и т. п. В схеме компоновки данных допускается наличие нескольких наборов данных (см. здесь). Наборы данных описываются в свойстве НаборыДанныхсхемы. Свойство содержит коллекцию значений, в которую могут входить следующие элементы: ● запрос (НаборДанныхЗапросСхемыКомпоновкиДанных) – получение данных описывается при помощи языка запросов; ● объект (НаборДанныхОбъектСхемыКомпоновкиДанных) – описывается имя внешнего набора данных, из которого будут получаться данные; ● объединение (НаборДанныхОбъединениеСхемыКомпоновкиДанных) – описываются наборы данных – составные части объединения. Все три набора данных содержат ряд общих свойств: ● Имя – имя набора данных, под которым к этому набору данных можно будет обращаться из других объектов схемы компоновки данных. В рамках одной схемы компоновки данных имена наборов данных должны быть уникальными. ● Поля – описания полей, доступных для набора данных. Кроме этого, наборы данных – запрос и объект содержат свойство ИсточникДанных– имя источника данных, из которого будут получаться данные. Оно должно содержать имя одного источника данных, присутствующего в схеме компоновки данных (см. здесь). Набор данных – запрос содержит свойство Запрос– текст запроса, при помощи которого будут получаться данные из источника данных. В тексте запроса допускается использование специального расширения – расширения языка запросов для системы компоновки данных (см. здесь). Набор данных – объединение содержит свойство Элементы, содержащее перечень наборов данных, входящих в объединение (см. здесь). 10.3.1.2.1. Набор данных – запрос Содержит обычный запрос к данным, расположенным в информационной базе «1С:Предприятия». Набор данных – запрос может содержать пакетный запрос. Результирующим запросом будет пакетный запрос. При этом состав полей, которые будут помещаться во временную таблицу, автоматически определяется по использованным в других запросах полям. В случае, если от временной таблицы не понадобилось ни одно поле, временная таблица не будет помещаться в результирующий запрос. Отбор, применяемый в настройках компоновки данных, применяется во всех запросах пакета. Содержимым набора данных будет считаться результат последнего запроса пакета. В рамках одного набора данных возможно обращение только к одному источнику данных (включая внешние источники данных). 10.3.1.2.2. Набор данных – объект Набор данных – объект используется для вывода в отчет информации из некоторого объекта встроенного языка: таблицы значений, результата запроса, текущего документа и т. п. Этот «источник» данных описывается в схеме компоновки, затем он заполняется программным образом, например, по нажатию какой-то кнопки, и в качестве внешнего набора данных передается в процессор компоновки. 10.3.1.2.3. Набор данных – объединение Набор данных – объединение содержит свойство Элементы, описывающее наборы данных, которые необходимо объединить. Заметим, что значения полей набора данных – объединение будут получаться из полей вложенных наборов данных по их пути к данным. Так, в приведенном примере у внешнего набора данных будет поле СуммаРасх. Данные для него будут получаться из вложенных наборов данных, у которых путь к данным – СуммаРасход. 10.3.1.2.4. Поле набора данных схемы компоновки данных Набор данных может содержать описания полей, которые будут доступны для этого набора данных. Поля набора данных описываются в свойстве Поля наборов данных, которое содержит коллекцию значений, состоящую из элементов ПолеНабораДанныхСхемыКомпоновкиДанных. 10.3.1.3. Связи наборов данных Наборы данных, присутствующие в схеме компоновки данных, могут быть связаны друг с другом. Связи наборов данных описываются в свойстве СвязиНаборовДанныхсхемы компоновки данных, которое содержит коллекцию значений, состоящую из элементов СвязьНаборовДанныхСхемыКомпоновкиДанных. 10.3.1.4. Вычисляемые поля В схеме компоновки данных существует возможность описать поля, которые будут вычисляться по некоторым выражениям с использованием полей наборов данных. Данные поля могут быть использованы в настройках точно так же, как поля набора данных. Вычисляемые поля описываются в свойстве ВычисляемыеПоляСхемыКомпоновкиДанныхсхемы компоновки данных, которое содержит коллекцию значений, состоящую из элементов ВычисляемоеПолеСхемыКомпоновкиДанных. 10.3.1.5. Поля ресурсов В схеме компоновки данных возможно описание полей ресурсов, значения которых будут вычисляться для групповых записей. Осуществляется это при помощи описания поля итога. Поля итога описываются в свойстве ПоляИтогасхемы компоновки данных, которое содержит коллекцию значений, состоящую из элементов ПолеИтогаСхемыКомпоновкиДанных. При расчете ресурсов каждая запись набора данных, для которого рассчитывается ресурс, участвует в расчете ресурса только один раз. 10.3.1.6. Параметры Схема компоновки данных содержит описание параметров данных. Параметры данных описываются в свойстве Параметры схемы компоновки данных, которое содержит коллекцию значений, состоящую из элементов ПараметрСхемыКомпоновкиДанных. Для параметра можно указать признак обязательности использования параметров и запрет незаполненного параметра. Например, с помощью комбинации этих признаков можно реализовать параметр, без заполнения которого формирование отчета невозможно. 10.3.1.7. Вложенные схемы Схема компоновки данных может содержать описания вложенных схем компоновки данных. Вложенные схемы компоновки данных описываются в свойстве ВложенныеСхемыКомпоновкиДанныхсхемы компоновки данных, которое содержит коллекцию значений, состоящую из элементов ВложеннаяСхемаКомпоновкиДанных. 10.3.1.8. Макеты В схеме компоновки данных можно описать макеты, которые будут использоваться для вывода поля или группировки. При указании макета для поля или группировки указывается имя макета, описанного в данном свойстве. Макеты описываются в свойстве Макеты схемы компоновки данных. Свойство содержит коллекцию значений, состоящую из элементов ОписаниеМакетаСхемыКомпоновкиДанных. 10.3.1.9. Макеты полей Для каждого поля в схеме компоновки данных может быть указано имя макета, используемого для вывода данного поля в результат компоновки. Рис. 230. Макеты полей Связь поля с макетом описывается с помощью объекта МакетПоляСхемыКомпоновкиДанных. Коллекция этих объектов содержится в свойстве МакетыПолейобъекта СхемаКомпоновкиДанных. 10.3.1.10. Макеты группировок Для каждой группировки в схеме компоновки данных можно указать имя макета, который будет использоваться при выводе данной группировки. Связь группировки с макетом описывается с помощью объекта МакетГруппировкиСхемыКомпоновкиДанных. Коллекция этих объектов содержится в свойстве МакетыГруппировокобъекта СхемаКомпоновкиДанных. 10.3.1.11. Макеты заголовков группировок Для каждой группировки могут описываться также макеты заголовков группировок. Связь заголовка группировки с макетом описывается с помощью объекта МакетГруппировкиСхемыКомпоновкиДанных(см. предыдущий раздел). Коллекция этих объектов содержится в свойстве МакетыЗаголовковГруппировокобъекта СхемаКомпоновкиДанных. 10.3.1.12. Настройки по умолчанию Каждый вариант отчета, который задан в схеме компоновки данных, содержит настройки компоновки данных по умолчанию, которые могут быть заданы разработчиком. При этом вариантом по умолчанию будет считаться тот вариант, который стоит первым в списке вариантов настроек системы компоновки данных (вариант Диаграмма по периодам на рис. 231). Настройки варианта по умолчанию будут применяться при первом открытии отчета, при выборе команды Еще – Стандартные настройки (Все действия – Стандартные настройки), а также могут быть использованы для программной установки настроек по умолчанию. Рис. 231. Вариант по умолчанию Подробнее о настройках компоновки данных см. здесь. 10.3.2. Работа с несколькими наборами данных Система компоновки данных позволяет использовать в одной компоновке несколько наборов данных. Для того чтобы в одной компоновке использовать несколько наборов данных, необходимо внести в схему описания наборов данных, которые предполагается использовать, и указать связи между наборами данных. Рассмотрим следующий пример. Запишем три набора данных: ПрайсЛист, Остаткии Продажи. Рис. 232. Пример нескольких наборов данных Опишем связи между наборами данных. Создадим связь между наборами данных ПрайсЛисти Остатки, а также связь между наборами данных ПрайсЛисти Продажи(см. рис. 233). Рис. 233. Связи наборов данных Дополнительно опишем ресурсы (см. рис. 234). Рис. 234. Ресурсы схемы компоновки данных Если в системе компоновки данных описывается связь между двумя наборами данных, то набор данных, к которому идет связь, будет считаться зависимым. Набор данных, от которого идет связь, будет считаться родительским по отношению к зависимому от него набору данных. Рис. 235. Зависимые наборы данных В приведенных примерах зависимыми наборами данных будут наборы данных Остаткии Продажи. А родительским по отношению к обоим этим наборам – ПрайсЛист. В схеме компоновки данных нет указания типа связи. Все связи считаются левыми внешними соединениями. То есть запись родительского набора данных будет использоваться в компоновке даже в том случае, если для нее не найдены записи в зависимом наборе. В макете компоновки данных (см. здесь) возможно указание типа связи. Тип связи генерируется компоновщиком макета в зависимости от накладываемых глобальных отборов. Если на поле набора данных, являющегося зависимым, накладывается глобальный отбор, генерируемые связи в макете компоновки данных от этого набора данных до всех его родительских наборов (вплоть до начала иерархии наборов данных) будут иметь тип Внутренняя. Это означает, что записи родительского набора данных будут участвовать в компоновке только в том случае, если будут найдены записи в зависимых наборах данных. Например, если пользователь наложит глобальный отбор на поле Склад, наборы данных ПрайсЛисти Остаткибудут связаны внутренней связью. Рис. 236. Внутренняя связь Если набор данных зависит от некоторого набора и в связи указана возможность использования списка параметров, данные из зависимого набора данных будут получаться порциями по 1000 записей. В случае, если использование списка параметров в связи не разрешено, записи будут получаться по одной. Если и зависимый, и родительский набор данных содержит поле с одинаковым именем, данное поле будет получаться из родительского набора данных. В приведенных примерах поле Номенклатуравсегда будет получаться из набора данных ПрайсЛист. Рис. 237. Общее поле Несвязанные наборы данных не могут содержать поля с одинаковыми именами, если у них нет общего родителя, в котором данное поле также присутствует. Так, наборы данных Остаткии Оборотымогут содержать поле Номенклатура, но не могли бы оба содержать поле Контрагент. В описании связи, в выражении источника, используются поля из набора данных источника (родительского набора); в выражении связи приемника используются поля набора данных приемника (зависимого набора данных). Так, при описании связи между наборами данных ПрайсЛисти Остатки выражение Номенклатурав свойстве ВыражениеИсточникиспользует поле набора данных ПрайсЛист, а выражение Номенклатурав свойстве ВыражениеПриемникиспользует поле набора данных Остатки. В одной группировке не могут быть использованы поля из не связанных друг с другом наборов данных. При этом наборы данных, имеющие общие родительские наборы данных, связанными не считаются. Исключение сделано для полей-итогов, которые могут быть использованы в любой группировке. В приведенном примере мы не сможем в одной группировке задействовать поля Склади Контрагент. Однако поля КоличествоОстатоки СуммаОборотсможем задействовать, т. к. они являются ресурсами. Данные зависимого набора данных не могут быть получены без получения данных родительского набора. То есть при получении данных из зависимого набора автоматически будут получаться и данные из родительского набора (и всех родителей родителя). В нашем примере при получении набора данных Остаткибудут получаться данные и из набора ПрайсЛист. Если в группировке используются наборы данных из нескольких наборов данных, при исполнении компоновки будет осуществляться обход по последнему зависимому набору данных. Так, если в группировке будут использоваться поля наборов ПрайсЛисти Остатки, обход будет происходить по набору Остатки. Если ни одного поля из связанного набора данных в настройках не задействовано, набор данных не будет включен в макет компоновки данных. 10.3.3. Расширение языка запросов для системы компоновки данных Расширение языка запросов для системы компоновки данных осуществляется при помощи специальных синтаксических инструкций, заключаемых в фигурные скобки и помещаемых непосредственно в текст запроса. 10.3.3.1. Синтаксические элементы расширения языка запросов системы компоновки данных ВЫБРАТЬ Описание: В этом предложении описываются поля, которые пользователь сможет выбирать для вывода. После данного ключевого слова через запятую перечисляются псевдонимы полей из основного списка выборки запроса, которые будут доступными для настройки. После псевдонима поля может находиться комбинация символов «.*», что обозначает возможность использования дочерних полей от данного поля. Например, запись Номенклатура.*обозначает возможность использования дочерних полей поля Номенклатура(например, поля Номенклатура.Код). Элемент ВЫБРАТЬможет присутствовать только в первом запросе объединения. Пример: {ВЫБРАТЬ Номенклатура, Склад} ГДЕ Описание: Описываются поля, на которые пользователь сможет накладывать отбор. В данном предложении используются поля таблиц. Использование псевдонимов полей списка выборки недопустимо. Каждая часть объединения может содержать собственный элемент ГДЕ. Если значения параметров не заданы, то предложение ГДЕв результирующий запрос не включается. Пример: {ГДЕ Номенклатура.*, Склад } {ГДЕ Документ.Дата >= &ДатаНачала, Документ.Дата <= &ДатаКонца} ХАРАКТЕРИСТИКИ Описание: Для обеспечения работы с характеристиками в расширение языка запросов для системы компоновки данных введен синтаксис описания характеристик. В примере (см. далее) описываются характеристики для полей типа Ссылкана справочник Номенклатура. В характеристиках описываются следующие свойства: ● ТИП– имя типа, для которого описываются характеристики. ● ВИДЫХАРАКТЕРИСТИК– имя таблицы или запрос для получения списка характеристик. В запросе допустимо использовать ключевое слово РАЗРЕШЕННЫЕ. В этом случае в списке характеристик будут присутствовать только те характеристики, которые допускаются для пользователя наложенными ограничениями доступа к данным. Если список характеристик указан не запросом, а именем таблицы, то в запросе получения списка характеристик, который формирует система, также используется ключевое слово РАЗРЕШЕННЫЕ. ● ПОЛЕКЛЮЧА– имя поля, содержащего идентификатор характеристики. ● ПОЛЕИМЕНИ– имя поля, содержащего имя характеристики. ● ПОЛЕТИПАЗНАЧЕНИЯ– имя поля, содержащего тип значения характеристики. Если тип значения не указан, считается, что характеристика имеет тип Булево. ● ЗНАЧЕНИЯХАРАКТЕРИСТИК– имя таблицы или запрос для получения значений характеристик. ● ПОЛЕОБЪЕКТА– имя поля, содержащего идентификатор объекта (например, ссылка номенклатуры). ● ПОЛЕВИДА– имя поля, содержащего идентификатор характеристики. ● ПОЛЕЗНАЧЕНИЯ– имя поля, содержащего значение характеристики. Если не указано, значение будет равно Истина(если такая характеристика у объекта есть), Ложь– в противном случае. Пример: {ХАРАКТЕРИСТИКИ ТИП(Справочник.Номенклатура) ВИДЫХАРАКТЕРИСТИК (ВЫБРАТЬ ВидыДопСвойств.Ссылка, ВидыДопСвойств.Наименование, ВидыДопСвойств.ТипЗначения ИЗ ПланВидовХарактеристик.ВидыДопСвойств КАК ВидыДопСвойств) ПОЛЕКЛЮЧА Ссылка ПОЛЕИМЕНИ Наименование ПОЛЕТИПАЗНАЧЕНИЯ ТипЗначения ЗНАЧЕНИЯХАРАКТЕРИСТИК РегистрСведений.ДопСвойства ПОЛЕОБЪЕКТА Номенклатура ПОЛЕВИДА ВидСвойства ПОЛЕЗНАЧЕНИЯ Свойство } Параметры Описание: Кроме основных элементов система компоновки данных принимает элементы, записанные в параметрах виртуальных таблиц. В таких случаях тип полей зависит от типа параметра, в котором располагаются элементы. Поля ДатаНачала, ДатаКонца, Номенклатураи Склад(см. пример) станут доступными в отборе, т. е. пользователь сможет применять для них фильтры. Пример: ВЫБРАТЬ УчетНоменклатурыОбороты.Номенклатура КАК Номенклатура, УчетНоменклатурыОбороты.Склад КАК Склад, УчетНоменклатурыОбороты.КоличествоПриход КАК КоличествоПриход, УчетНоменклатурыОбороты.КоличествоРасход КАК КоличествоРасход ИЗ РегистрНакопления.УчетНоменклатуры.Обороты({&ДатаНачала}, {&ДатаКонца}, , {Номенклатура.*, Склад.*}) КАК УчетНоменклатурыОбороты 10.3.3.2. Автоматическое заполнение доступных полей При автоматическом заполнении доступных полей запроса выполняются следующие действия: ● все поля списка выборки и их дочерние поля становятся доступными для выбора, упорядочивания, группировки, отбора и др.; ● параметры виртуальных таблиц становятся доступными для отбора. 10.3.4. Язык выражений системы компоновки данных Язык выражений системы компоновки данных предназначен для записи выражений, используемых в различных частях системы. Выражения используются в следующих подсистемах: ● схема компоновки данных – для описания вычисляемых полей, полей итогов, выражений связи и т. д.; ● настройки компоновки данных – для описания выражений пользовательских полей; ● макет компоновки данных – для описания выражений связи наборов данных, описания параметров макета и т. д. ПРИМЕЧАНИЕ. В языке выражений компоновки данных отсутствует возможность получения поля через точку от выражения. 10.3.4.1. Литералы В выражении могут присутствовать литералы типов, описанных далее. Строка Описание: Строковый литерал записывается в символах «"». При необходимости использования внутри строкового литерала символа «"» следует использовать два таких символа. Пример: "Литерал ""в кавычках""" Число Описание: Число записывается без пробелов, в десятичном формате. Дробная часть отделяется при помощи символа «.». Пример: 10.5 200 Дата Описание: Литерал типа Датазаписывается при помощи ключевого слова ДАТАВРЕМЯ(DATETIME). После данного ключевого слова в скобках, через запятую, перечисляются год, месяц, день, часы, минуты, секунды. Указание времени необязательно. Пример: // Шестое января 1975 года ДАТАВРЕМЯ(1975, 1, 06) // Второе декабря 2006 года, 23 часа 56 минут 57 секунд ДАТАВРЕМЯ(2006, 12, 2, 23, 56, 57) Булево Описание: Булевы значения могут быть записаны при помощи литералов Истина(True), Ложь(False). Значение Описание: Для указания литералов других типов (системных перечислений, предопределенных данных) используется ключевое слово ЗНАЧЕНИЕ, после которого в скобках идет указание имени литерала. Пример: ЗНАЧЕНИЕ(ВидСчета.Активный) Поля Описание: В выражениях могут использоваться поля наборов данных. Поле идентифицируется путем к данным. Части пути к данным отделяются друг от друга символом «.». Имя поля не является чувствительным к регистру. Если путь к данным содержит идентификатор с пробелами или специальными символами, то такие идентификаторы следует заключать в квадратные скобки. Пример: Номенклатура.Артикул Продажи.СуммаОборот Продажи.[Сумма оборот] Параметры Описание: Выражения могут использовать параметры. Для использования в выражении параметра достаточно написать его имя, которому будет предшествовать символ «&». Пример: &Контрагент &ДатаНачала Тип Описание: Формирует значение типа Тип. Тип задается при помощи ключевого слова Тип. Пример: Тип("Строка") 10.3.4.2. Операции над числами Унарный "-" Описание: Данная операция предназначена для изменения знака числа на обратный. Пример: -Продажи.Количество Унарный "+" Описание: Данная операция не выполняет над числом никаких действий. Пример: +Продажи.Количество Бинарный "-" Описание: Данная операция предназначена для вычисления разности двух чисел. Пример: ОстИОбрт.НачальныйОстаток – ОстИОбрт.КонечныйОстаток ОстИОбрт.НачальныйОстаток – 100 400 – 357 Бинарный "+" Описание: Данная операция предназначена для вычисления суммы двух чисел. Пример: ОстИОбрт.НачальныйОстаток + ОстИОбрт.Оборот ОстИОбрт.НачальныйОстаток + 100 400 + 357 Произведение "*" Описание: Данная операция предназначена для вычисления произведения двух чисел. Пример: Номенклатура.Цена * 1.2 2 * 3.14 Деление "/" Описание: Данная операция предназначена для получения результата деления одного операнда на другой. Пример: Номенклатура.Цена / 1.2 2 / 3.14 Остаток от деления "%" Описание: Данная операция предназначена для получения остатка от деления одного операнда на другой. Пример: Номенклатура.Цена % 1.2 2 % 3.14 10.3.4.3. Операции над строками Конкатенация (Бинарный "+") Описание: Данная операция предназначена для конкатенации двух строк. Пример: Номенклатура.Артикул + ": "+ Номенклатура.Наименование ПОДОБНО (LIKE) Описание: Данная операция проверяет соответствие строки переданному шаблону. Значением оператора ПОДОБНОявляется Истина, если значение выражения удовлетворяет шаблону, и Ложь– в противном случае. Следующие символы в строке шаблона имеют смысл, отличный от просто очередного символа строки: ● «%» – процент: последовательность, содержащая ноль и более произвольных символов. ● «_» – подчеркивание: один произвольный символ. ● «[...]» – один или несколько символов в квадратных скобках: один символ, любой из перечисленных внутри квадратных скобок. В перечислении могут встречаться диапазоны, например a-z, означающие произвольный символ, входящий в диапазон, включая концы диапазона. ● «[^...]» – в квадратных скобках значок отрицания, за которым следует один или несколько символов: любой символ, кроме тех, которые перечислены следом за значком отрицания. Любой другой символ означает сам себя и не несет никакой дополнительной нагрузки. Если в качестве самого себя необходимо записать один из перечисленных символов, то ему должен предшествовать спецсимвол, указанный после ключевого слова СПЕЦСИМВОЛ(ESCAPE). Например, приведенный ниже шаблон означает подстроку, состоящую из последовательности символов: ● буквы А, ● буквы Б, ● буквы В, ● одной цифры, ● одной из букв а, б, в или г, ● символа подчеркивания, ● буквы а, ● буквы б, ● буквы в. Причем эта последовательность может располагаться, начиная с произвольной позиции в строке. Пример: "%АБВ[0-9][абвг]\_абв%" СПЕЦСИМВОЛ "\" 10.3.4.4. Операции сравнения Равно (=) Описание: Данная операция предназначена для сравнения двух операндов на равенство. Пример: Продажи.Контрагент = Продажи.НоменклатураОсновнойПоставщик Не равно (<>) Описание: Данная операция предназначена для сравнения двух операндов на неравенство. Пример: Продажи.Контрагент <> Продажи.НоменклатураОсновнойПоставщик Меньше (<) Описание: Данная операция предназначена для проверки того, что первый операнд меньше второго. Пример: ПродажиТекущие.Сумма < ПродажиПрошлые.Сумма Больше (>) Описание: Данная операция предназначена для проверки того, что первый операнд больше второго. Пример: ПродажиТекущие.Сумма > ПродажиПрошлые.Сумма Меньше или равно (<=) Описание: Данная операция предназначена для проверки того, что первый операнд меньше либо равен второму. Пример: ПродажиТекущие.Сумма <= ПродажиПрошлые.Сумма Больше или равно (>=) Описание: Данная операция предназначена для проверки того, что первый операнд больше либо равен второму. Пример: ПродажиТекущие.Сумма >= ПродажиПрошлые.Сумма Операция (В/IN) Описание: Данная операция осуществляет проверку наличия значения в переданном списке значений. Результатом операции будет Истина, если значение найдено, или Ложь– в противном случае. Пример: Номенклатура В (&Товар1, &Товар2) Операция проверки наличия значения в наборе данных (В/IN) Описание: Операция осуществляет проверку наличия значения в указанном наборе данных. Набор данных для проверки должен содержать одно поле. Пример: Продажи.Контрагент В Контрагенты Операция проверки значения на NULL (ЕСТЬ NULL/IS NULL) Описание: Данная операция возвращает значение Истина, если оно является значением NULL. Пример: Продажи.Контрагент ЕСТЬ NULL Операция проверки значения на неравенство NULL (ЕСТЬ НЕ NULL/IS NOT NULL) Описание: Данная операция возвращает значение Истина, если оно не является значением NULL. Пример: Продажи.Контрагент ЕСТЬ НЕ NULL 10.3.4.5. Логические операции Логические операции принимают в качестве операндов выражения, имеющие тип Булево. Операция НЕ (NOT) Описание: Операция НЕвозвращает значение Истина, если ее операнд имеет значение Ложь, и значение Ложь, если ее операнд имеет значение Истина. Пример: НЕ Документ.Грузополучатель = Документ.Грузоотправитель Операция И (AND) Описание: Операция Ивозвращает значение Истина, если оба операнда имеют значение Истина, и значение Ложь, если один из операндов имеет значение Ложь, например: Пример: Документ.Грузополучатель = Документ.Грузоотправитель И Документ.Грузополучатель = &Контрагент Операция ИЛИ (OR) Описание: Операция ИЛИвозвращает значение Истина, если один из операндов имеет значение Истина, и Ложь, если оба операнда имеют значение Ложь. Пример: Документ.Грузополучатель = Документ.Грузоотправитель ИЛИ Документ.Грузополучатель = &Контрагент 10.3.4.6. Агрегатные функции Агрегатные функции осуществляют некоторое действие над набором данных. СУММА (SUM) Синтаксис: Сумма(Выражение) Описание: Агрегатная функция Суммарассчитывает сумму значений выражений, переданных ей в качестве аргумента для всех детальных записей. В качестве параметра можно передавать Массив. В этом случае функция будет применена к содержимому массива. Пример: СУММА(Продажи.СуммаОборот) КОЛИЧЕСТВО (COUNT) Синтаксис: Количество(Выражение) Описание: Функция Количестворассчитывает количество значений, отличных от значения NULL. В качестве параметра можно передавать Массив. В этом случае функция будет применена к содержимому массива. Пример: КОЛИЧЕСТВО(Продажи.Контрагент) КОЛИЧЕСТВО (РАЗЛИЧНЫЕ) (COUNT (DISTINCT)) Синтаксис: Количество(Различные Выражение) Описание: Эта функция рассчитывает количество различных значений. Для получения различных значений следует перед параметром метода Количествоуказать Различные(Distinct). В качестве параметра можно передавать Массив. В этом случае функция будет применена к содержимому массива. Пример: КОЛИЧЕСТВО(Различные Продажи.Контрагент) МАКСИМУМ (MAX) Синтаксис: Максимум(Выражение) Описание: Функция получает максимальное значение. В качестве параметра можно передавать Массив. В этом случае функция будет применена к содержимому массива. Пример: МАКСИМУМ(Остатки.Количество) МИНИМУМ (MIN) Синтаксис: Минимум(Выражение) Описание: Функция получает минимальное значение. В качестве параметра можно передавать Массив. В этом случае функция будет применена к содержимому массива. Пример: МИНИМУМ(Остатки.Количество) СРЕДНЕЕ (AVG) Синтаксис: Среднее(Выражение) Описание: Функция получает среднее значение для значений, отличных от NULL. В качестве параметра можно передавать Массив. В этом случае функция будет применена к содержимому массива. Пример: СРЕДНЕЕ(Остатки.Количество) МАССИВ (ARRAY) Синтаксис: Массив([Различные] Выражение) Описание: Функция формирует массив, содержащий значение выражения для каждой детальной записи. В качестве параметра можно использовать таблицу значений. При этом результатом работы функции будет массив, содержащий значения первой колонки таблицы значений, переданной в качестве параметра. Если выражение содержит функцию Массив, то считается, что данное выражение является агрегатным. Если указано ключевое слово Различные, то получаемый массив не будет содержать дублирующихся значений. Пример: ФункцииОтчетов.СтандартноеОтклонение(Массив(Сумма)) ТАБЛИЦАЗНАЧЕНИЙ (VALUETABLE) Синтаксис: ТаблицаЗначений([Различные] Выражение1 [КАК ИмяКолонки1][, Выражение2 [КАК ИмяКолонки2]],...) Описание: Функция формирует таблицу значений, содержащую столько колонок, сколько параметров у функции. Детальные записи получаются из наборов данных, которые нужны для вычисления всех выражений, указанных в параметрах функции. Если параметрами функции выступают поля-остатки, то в результирующую таблицу значений попадут значения для записей по уникальным комбинациям измерений из других периодов. При этом значения получаются только для полей-остатков, измерений, счетов, полей периодов и их реквизитов. Значения остальных полей в записях из других периодов считаются равными NULL. Если выражение содержит функцию ТаблицаЗначений, то считается, что данное выражение является агрегатным. Если указано ключевое слово Различные, то в получаемой таблице значений не будет строк, содержащих одинаковые данные. Для каждой колонки можно задать имя с помощью ключевого слова КАК, следующего после выражения, формирующего значение колонки. Пример: ФункцииОтчетов.ТаблицуЗначенийВСтроку(ТаблицаЗначений(Склад КАК Склад, КоличествоОстаток КАК Остаток)) СВЕРНУТЬ (GROUPBY) Синтаксис: Свернуть(<Выражение>, <НомераКолонок>) Описание: Функция предназначена для удаления дубликатов из массива. Параметры: <Выражение> Тип: Массивили ТаблицаЗначений. Для значения, расположенного в данном формальном параметре, выполняется удаление дубликатов. <НомераКолонок> Тип Строка. Используется, если параметр Выражениеимеет тип ТаблицаЗначений. Номера или имена (через запятую) колонок таблицы значений, среди которых нужно искать дубликаты. По умолчанию все колонки. Пример: Свернуть(ТаблицаЗначений(НомерТелефона, Адрес) ,"НомерТелефона"); ПОЛУЧИТЬЧАСТЬ (GETPART) Синтаксис: ПолучитьЧасть(<Выражение>, <НомерКолонок>) Описание: Функция получает таблицу значений, которая содержит указанные колонки исходной таблицы значений. Параметры: <Выражение> Тип: ТаблицаЗначений. Таблица значений, из которой нужно получить колонки. <НомераКолонок> Тип: Строка. Номера или имена (через запятую) колонок таблицы значений, которые нужно получить. Возвращаемое значение: Таблица значений, содержащая только те колонки, которые указаны в параметре НомераКолонок. Пример: ПолучитьЧасть(Свернуть(ТаблицаЗначений(НомерТелефона, Адрес) ,"НомерТелефона"),"НомерТелефона"); УПОРЯДОЧИТЬ (ORDER) Синтаксис: Упорядочить(<Выражение>, <НомераКолонок>) Описание: Предназначена для упорядочивания элементов массива и таблицы значений. Параметры: <Выражение> Тип: Массивили ТаблицаЗначений. Объект, который требуется упорядочить. <НомераКолонок> Используется, если параметр Выражениеимеет тип ТаблицаЗначений. Номера или имена (через запятую) колонок таблицы значений, которые требуется упорядочить. По умолчанию все колонки. После каждой колонки может содержаться направление упорядочивания или признак автоматического упорядочивания. Возвращаемое значение: Массив или таб