ФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ федеральное государственное бюджетное образовательное учреждение высшего образования «ПОВОЛЖСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ И ИНФОРМАТИКИ» Кафедра «Прикладная информатика» М.А. Богомолова ОСНОВЫ КОНФИГУРИРОВАНИЯ В СИСТЕМЕ «1С:ПРЕДПРИЯТИЕ 8.3» Лабораторный практикум Самара 2019 УДК 65.011.56(075.8) ББК 32.973-018я73 Д14 Рекомендовано к изданию методическим советом ПГУТИ, протокол № 2 от 15.10.2019 г. Рецензент: Заведующий кафедрой программного обеспечения и управления в технических системах факультета информационных систем и технологий ПГУТИ, д.т.н., профессор, Тарасов В.Н. Богомолова М.А. Основы конфигурирования в системе 1С:Предприятие 8.3: лабораторный практикум / М.А. Богомолова. – Самара: ПГУТИ, 2019. – 204 с.: ил. Ил. 243. Табл. 9 Цель лабораторного практикума – обеспечить начальное представление о работе с основными объектами и механизмами платформы «1С: Предприятие 8.3», сформировать практические навыки по основам конфигурирования в системе на примере решения «сквозного» примера. Практикум предназначен для студентов ВУЗов, обучающихся по ITнаправлениям подготовки уровней бакалавриата и магистратуры. Книга обращена в большей степени к начинающим разработчикам, делающим первые шаги в разработке прикладных решений «1С:Предприятие 8.3». Богомолова М.А., 2019 2 Содержание Содержание ................................................................................................ 3 Введение..................................................................................................... 6 Лабораторная работа №1. Новая информационная база и режимы ее запуска .................................................................................................................. 7 1.1 Режимы работы системы «1С:Предприятие» ............................... 7 1.2 Создание новой информационной базы ........................................ 8 1.3 Открытие конфигурации ................................................................. 9 1.4 Сохранение конфигурации на внешнем носителе ..................... 11 Контрольные вопросы ......................................................................... 12 Лабораторная работа №2. Проектирование пользовательского интерфейса. Первоначальная настройка ......................................................... 13 2.1 Варианты интерфейсов в «1С:Предприятие» ............................. 13 2.2 Разделы управляемого интерфейса (подсистемы) ..................... 14 2.3 Интерфейс обычного приложения ............................................... 23 Контрольные вопросы ......................................................................... 26 Лабораторная работа №3. Справочники ............................................... 27 Введение ............................................................................................... 27 3.1 Линейные справочники ................................................................. 27 3.2 Предопределенные элементы ....................................................... 30 3.3 Включение справочника в управляемый интерфейс ................. 31 3.4 Включение в интерфейс обычного приложения ........................ 34 3.5 Иерархические справочники ........................................................ 36 3.6 Нумерация элементов справочника ............................................. 40 3.7 Подчиненные справочники........................................................... 42 Контрольные вопросы ......................................................................... 46 Лабораторная работа №4. Дополнительные реквизиты, тип данных 47 4.1 Примитивные типы данных .......................................................... 49 4.2 Ссылочные типы данных .............................................................. 51 Контрольные вопросы ......................................................................... 53 Лабораторная работа №5. Документы .................................................. 54 Введение ............................................................................................... 54 3 5.1 Документ «Поступление товаров»............................................... 54 5.2 Дополнительные реквизиты документа ...................................... 56 5.3 Копирование объектов конфигурации ........................................ 58 5.4 Создание печатных форм .............................................................. 60 5.5 Журналы документов .................................................................... 64 Контрольные вопросы ......................................................................... 67 Лабораторная работа №6. Поле ввода и удобное заполнение реквизитов .......................................................................................................... 68 Введение ............................................................................................... 68 6.1 Быстрый выбор .............................................................................. 69 6.2 Создание при вводе ....................................................................... 71 6.3 Ввод по строке ............................................................................... 72 6.4 Полнотекстовый поиск.................................................................. 75 Основные возможности полнотекстового поиска: .......................... 75 6.5 История выбора.............................................................................. 80 6.6 Ввод на основании ......................................................................... 80 6.7 Критерии отбора ............................................................................ 84 Контрольные вопросы ......................................................................... 86 Лабораторная работа №7. Отчеты и запросы – первое знакомство .. 88 7.1 Язык запросов ................................................................................ 88 7.2 Первое знакомство с отчетами ..................................................... 91 7.3 Первое знакомство с механизмом компоновки .......................... 93 7.4 Пользовательские настройки отчета ......................................... 102 Контрольные вопросы ....................................................................... 109 Лабораторная работа №8. Сложные отчеты: список, таблица, диаграмма ......................................................................................................... 111 8.1 Текст запроса................................................................................ 111 8.2 Доступные поля отчета о закупках ............................................ 114 8.3 Ресурсы запроса ........................................................................... 114 8.4 Параметры компоновки .............................................................. 115 8.5 Вариант отчета «Список» ........................................................... 116 8.6 Расшифровка отчета .................................................................... 120 8.7 Связанные поля ............................................................................ 121 4 8.8 Ограничения поля ........................................................................ 123 8.9 Кросс-таблица .............................................................................. 124 8.10 Функции языка запросов........................................................... 127 8.11 Диаграмма .................................................................................. 132 8.12 Внешние отчеты......................................................................... 134 Контрольные вопросы ....................................................................... 135 Лабораторная работа №9. Регистры – первое знакомство................ 136 9.1 Что такое регистр ......................................................................... 136 9.2 Виды регистров ............................................................................ 136 9.3 Регистр сведений «Артикулы» ................................................... 137 9.4 Соединения в запросе .................................................................. 140 9.5 Периодические регистры сведений ........................................... 147 9.5 Режим записи «Подчинение регистратору» ............................. 157 9.6 Регистры накопления .................................................................. 160 Контрольные вопросы ....................................................................... 163 Лабораторная работа №10. Константы и функциональные опции .. 165 10.1 Константы ................................................................................... 165 10.2 Функциональные опции ............................................................ 167 Контрольные вопросы ....................................................................... 169 Лабораторная работа №11. Проектирование пользовательского интерфейса: экранные формы и рабочий стол ............................................. 170 11.1 Экранные формы ....................................................................... 170 11.2 Начальная страница 8.3 или Рабочий стол 8.2 ....................... 189 Контрольные вопросы ....................................................................... 191 Лабораторная работа №12. Основы администрирования ................. 192 12.1 Создание ролей и описание прав пользователей ................... 192 12.2 Ведение списка пользователей ................................................. 198 12.3 Активные пользователи ............................................................ 199 12.4 Журнал регистрации.................................................................. 200 12.5 Конфигурация базы данных ..................................................... 201 12.6 Исправление ошибок информационной базы ......................... 202 Контрольные вопросы ....................................................................... 204 5 Введение Книга представляет собой пособие, позволяющее быстро освоить основы конфигурирования в системе 1С:Предприятие 8.3. Материал рассчитан, в первую очередь, на начинающих разработчиков, не знакомых с системой. На примере создания реального прикладного решения показана структура различных объектов системы, их назначение и методика использования. Книга может быть использована и как практическое руководство, и как справочное пособие. Рассматриваемое в книге прикладное решение учитывает накопленный опыт разработки в системе «1С:Предприятие 8» и демонстрирует многие новые возможности и механизмы, предоставляемые версией 8.3. Освоение предлагаемого материала необходимо дополнить изучением документации, входящей в комплект стандартной поставки 1С:Предприятие. Изучение этих книг необходимо, так как данное пособие не заменяет, а всего лишь дополняет документацию к программе более конкретными примерами и практическими заданиями. Кроме вышеперечисленного, на сайте 1С в разделе методической поддержки (http://v8.1c.ru/metod/books) находится список литературы. В зависимости от выбранной специализации, можно выбрать именно те книги, которые окажутся наиболее актуальными. Полезным подспорьем при освоении новой платформы являются материалы, находящиеся на диске ИТС в разделе «1С. Методическая поддержка 1С:Предприятия 8». Именно в статьях диска на сегодняшний день наиболее полно освещены вопросы, касающиеся работы «1С:Предприятия 8». Автор надеется, что книга будет полезна каждому, кто хочет научиться разрабатывать прикладные решения на платформе «1С:Предприятие 8.3». 6 Лабораторная работа №1. Новая информационная база и режимы ее запуска 1.1 Режимы работы системы «1С:Предприятие» Существует 2 составляющих программного приложения в системе «1С:Предприятие»: 1) Техническая часть бизнес-приложения (технологическая платформа). 2) Описание бизнес-логики приложения (конфигурация). Технологическая платформа (или платформа) – это: с одной стороны (технической): платформа – это набор программ, использующихся для разработки, администрирования и использования бизнес-приложения; с другой стороны (функциональной): платформа – это набор готовых механизмов для ускорения процесса разработки, эффективной работы пользователей и удобного администрирования. Другими словами, платформа – это программная среда, в которой исполняется программный код конфигурации. Платформа имеет свой язык программирования, который является средством разработки прикладных конфигурации и полностью определяет их функциональные возможности. Разработкой платформы занимаются исключительно сотрудники компании 1С. Конфигурация – это прикладное решение, разработанное на технологической платформе «1С:Предприятие» для решения конкретных задач. Разработка и модификация конфигураций выполняется в конфигураторе платформы и может быть осуществлена (в отличие от платформы) любым пользователем, обладающим нужными навыками. Система «1С:Предприятие 8» (платформа) может функционировать в 2 основных режимах: 1. Конфигурирование. 2. Использование («1С:Предприятие»). Режим «Конфигурирование» предназначен для разработки прикладного решения задачи, режим «1С:Предприятие» – для исполнения написанного в конфигураторе программного кода и работы пользователя. Большую часть курса мы будем работать в конфигураторе, создавая и/или адаптируя прикладное решение (синоним: конфигурацию) для автоматизации задачи учета. Конфигуратор системы «1С: Предприятие» имеет развитые средства визуального программирования и позволяет пользователю, даже незнакомому с программированием и встроенным языком, решить многие задачи. Платформа «1С:Предприятие 8» имеет свою историю развития. Пер7 вой была выпущена платформа версии 8.0. В версии 8.1 была реализована многоплатформенность (в качестве сервера СУБД может выступать не только MS SQL, но и другие). Версия 8.2 – первая версия, которая «научилась» работать не только в локальной сети предприятия, но и через Web. Версия 8.3, оставаясь веб-ориентированной, развивает возможности удаленного доступа и предоставляет пользователю новый, ориентированный на работу с «тачскрином» интерфейс. Большая часть того, что мы будем изучать, может быть реализована, начиная с 8.1, значительная часть – с 8.0. Но мы будем использовать при обучении последний вариант платформы – версию 8.3, которая, к слову, поддерживает возможности всех предыдущих версий, в чем мы обязательно убедимся. Одновременно с этим существует 2 версии платформы: 1. «Толстый клиент» 2. «Тонкий клиент». «Толстый клиент» позволяет запускать конфигуратор и работать в пользовательском режиме с информационной базой в рамках локальной сети. «Тонкий клиент» – это отдельная программа, которая намного «легче», т.е. занимает меньше места на диске, предназначена только для работы в пользовательском режиме, и она умеет это делать через Интернет». В некоторых случаях на компьютере пользователя можно не устанавливать «1С», а вместо клиентского приложения использовать Интернет-браузер. Такой вариант подключения называется «Web-клиент» и предназначен для удаленной работы пользователей, которым нельзя (или бессмысленно) устанавливать на компьютере «1С». Для запуска конфигуратора обязательна установка «Толстого клиента»!!! 1.2 Создание новой информационной базы Запускаем платформу «1С:Предприятие» командой «Пуск / 1С:Предприятие 8 / 1С Предприятие (толстый клиент)». Чтобы создаваемые информационные базы были сгруппированы по папкам, необходимо в диалоге его настройки (кнопка «Настройка...») установить флаг «Отображать в виде дерева». Информационную базу можно добавить на верхний уровень или создать отдельную папку, куда будем помещать, например, все наши обучающие примеры. Создадим новую информационную базу: щелкнем по кнопке «Добавить», далее выберем переключатель «Создание новой информационной базы», затем переключатель «Создание информационной базы без конфигурации для разработки новой конфигурации ...» (см. рис. 1.1). 8 Рис. 1.1. Выбор шаблона конфигурации создаваемой базы В следующем окне введите название базы, в качестве которой укажите Вашу фамилию на латинице. База будет располагаться на компьютере или в локальной сети (соответствующий переключатель). На следующей странице укажите путь в пустую папку на диске (предварительно создайте папку с Вашей фамилией) и язык (русский – по умолчанию). В последнем диалоговом окне оставим все по умолчанию и нажмем «Готово». 1.3 Открытие конфигурации 1.3.1 Открываем конфигурацию В диалоге выбора информационных баз выделим новую строчку и нажмем кнопку «Конфигуратор». Используя пункт главного меню «Конфигурация / Открыть конфигурацию», откроем окно дерева объектов конфигурации (см. рис. 1.2). 9 Рис. 1.2. Дерево объектов конфигурации Каждая ветка дерева представляет собой вид объектов, которые доступны нам для визуального программирования. Каждый из них решает ту или иную задачу предметной области. Объекты конфигурации – это составные элементы, «детали», из которых складывается любое прикладное решение. Они представляют собой проблемно-ориентированные объекты, поддерживаемые на уровне технологической платформы. Задача разработчика заключается в том, чтобы собрать из этих объектов, как из конструктора, необходимую структуру прикладного решения и затем на встроенном языке описать специфические алгоритмы функционирования и взаимодействия этих объектов, отличающиеся от их типового поведения. Если Вы случайно или специально закроете окно конфигурации (по крестику вверху справа) и опять войдете в пункт меню «Конфигурация / Открыть конфигурацию», то обнаружите, что пункт меню недоступен. Конфигурация не закрылась. Закрылось лишь окно. Чтобы его опять открыть, нужно выбрать пункт меню «Конфигурация / Окно конфигурации». 1.3.2 Положения окон в конфигураторе Все окна в конфигураторе могут принимать несколько положений: прикрепленное; свободное; 10 прячущееся. Это никак не влияет на работу сделанной программы, но влияет на работу программиста. По умолчанию открытое окно конфигурации имеет положение «прикрепленное», поэтому оно всегда «висит» слева и не загораживается другими окнами. Чтобы посмотреть положение окна, нужно щелкнуть правой кнопкой мыши по заголовку окна, и в контекстном меню будет отмечено галочкой текущее положение. Так же его можно изменить. Если, например, выбрать положение «прячущееся, то окно будет «прятаться» и появляться при наведении мыши на его пиктограмму. Еще одно полезное свойство в этом контекстном меню – команда «Восстановить положение окна». Если вы изменили настройку окон до неузнаваемости или в результате этой настройки оно «залипло» и не хочет открываться, то вызов этой команды на заголовке окна или на его пиктограмме вернет «заводскую» настройку положения этого окна в конфигураторе. 1.4 Сохранение конфигурации на внешнем носителе Для того, чтобы информационную базу можно было открыть дома в более ранней версии, необходимо задать режим совместимости с этой версией: в дереве объектов щелкнем дважды по объекту «Конфигурация», в открывшемся окне свойств установим свойству «Режим совместимости» номер необходимой версии платформы. Воспользуемся 2 способами переноса созданной конфигурации на внешний носитель. Способ 1. Для целей архивирования и переноса информационной базы и конфигурации предусмотрены механизмы выгрузки и загрузки базы данных. Запускается выгрузка из меню конфигуратора «Администрирование / Выгрузить информационную базу». Данные конфигурации и информационной базы сохраняются в файл с расширением *.dt. На момент выгрузки в информационной базе не должны работать пользователи. Для загрузки информационной базы из архива на другом компьютере создадим новую пустую информационную базу (или откроем уже созданную), откроем ее в режиме конфигуратора, затем в главном меню выберем «Администрирование / Загрузить информационную базу». База, в которую загружается конфигурация, будет очищена и заменена базой из файла. Этот же механизм позволяет перенести данных с файл- на клиентсерверную версию и обратно. Способ 2. Откроем папку, в которой хранится информационная база. Если Вы забыли путь к ней: он указан в окне списка информационных баз (см. рис. 1.3). Файл информационной базы – это файл с расширением *.1CD: типо11 вое название – 1Cv8tmp.1CD. Из всей папки с созданной информационной базой достаточно сохранить на свой носитель только этот файл. Далее на другом компьютере необходимо открыть в проводнике каталог хранения информационной базы (если информационная база не была создана, предварительно создайте ее), затем удалить все файлы в этом каталоге и вставить файл информационной базы 1Cv8tmp.1CD. Рис. 1.3. Путь к каталогу хранения информационной базы Контрольные вопросы 1. В чем заключаются отличия технологической платформы от конфигурации? 2. Дайте характеристику двум основным режимам функционирования системы «1С:Предприятие». 3. В чем заключаются отличия «Толстого клиента» от «Тонкого клиента»? 4. Какой клиент должен быть установлен для запуска конфигуратора (толстый или тонкий)? 5. Как настроить отображение списка информационных баз в виде дерева? 6. Что такое «объекты конфигурации»? 7. Какие положения могут принимать окна в конфигураторе? 8. Как восстановить положение окна в конфигураторе? 9. Как создать архив информационной базы? 12 Лабораторная работа №2. Проектирование пользовательского интерфейса. Первоначальная настройка 2.1 Варианты интерфейсов в «1С:Предприятие» Начнем с того, что поработаем над интерфейсом главного окна создаваемого нами программного приложения. Создание главного окна сильно зависит от того, в каком режиме будет работать программа. Выделим 3 основных (в историческом порядке их разработки фирмой «1С») вариантов интерфейса: 1. Обычное приложение. 2. Управляемое приложение. Версия 8.2. 3. «Такси». Версия 8.3. Исторически интерфейс развивался именно так, как показано в таблице 1.1. Табл. 1.1 Поддержка вариантов интерфейсов различными версиями платформы Номер версии платформы «1С» 8.0 8.1 8.2 8.3 Да Да Да Да Интер- Обычный Управляемый Версия 8.2 фейсы Нет Нет Да Да Такси Нет Нет Нет Да Но мы большую часть времени будем работать в последнем его варианте «Такси», и иногда для сравнения переходить в более старые режимы. Чтобы определить, какой режим будет основным, и будут ли возможны переключения между разными вариантами интерфейса, двойным щелчком мыши откройте свойство корня дерева конфигурации «Конфигурация» (см. рис. 2.1). Основной режим запуска – «Управляемое приложение» означает, что по умолчанию создаваемое нами программное приложение будет работать в новом режиме. Устанавливаем свойство «Режим совместимости интерфейса» в «Такси. Разрешить Версия 8.2». Это означает, что по умолчанию будет использоваться самый новый вариант интерфейса «Такси», но можно будет переключиться и в предыдущий вариант управляемого режима, который был в версии 8.2. 13 Рис. 2.1 Свойства корня дерева «Конфигурация» 2.2 Разделы управляемого интерфейса (подсистемы) Любая книга имеет оглавление. Чем больше книга, тем больше разделов и подразделов это оглавление включает. Так же и программа в управляемом режиме делится на подсистемы, которые позволят нам сгруппировать ее функциональность в разделы, а пользователю быстро найти нужную функцию программы. 2.2.1 Создание разделов (подсистем) Задачу группировки объектов конфигурации по разделам решают «Подсистемы», расположенные в ветке «Общие». Создадим 4 подсистемы: 1. Общее – включает все общие справочники и механизмы. 2. Закупки – все, что потребуется пользователю для оформления покупки товаров. 3. Продажи – все, что потребуется пользователю для оформления продажи. 4. Сервис – служебные функции программы. Эти подсистемы образуют панель разделов главного окна программы (см. рис. 2.2). Панель разделов – это по сути оглавление программы. 14 Создадим новую подсистему «Общее»: необходимо щелкнуть правой кнопкой мыши по объекту дерева конфигурации «Подсистемы» и выбрать «Добавить», либо выделить «Подсистемы» и нажать кнопку . Свойству «Имя» устанавливаем «Общее». Свойство «Синоним» прописывается автоматически. Имя и синоним объекта конфигурации «Имя» является основным свойством любого объекта конфигурации. При создании нового объекта система автоматически присваивает ему некоторое имя. Можно использовать имя, присвоенное системой, но лучше заменить его своим, понятным именем. Имя можно задавать любое, главное, чтобы оно начиналось с буквы и не содержало некоторых специальных символов (например, пробел). Для удобства чтения конфигурации принято составлять интуитивно понятные имена и, если они состоят из нескольких слов, удалять пробелы между словами и каждое слово начинать с большой буквы. Имя объекта является уникальным и служит для обращения к свойствам и методам объекта на встроенном языке. Свойство «Синоним» также есть у любого объекта конфигурации. Оно предназначено для хранения альтернативного наименования объекта конфигурации, которое будет использовано в элементах интерфейса нашей программы, то есть будет показано пользователю. Поэтому на синоним практически нет никаких ограничений, и его можно задавать в привычном для человека виде. Рис. 2.2. Создание подсистемы «Общее» Чтобы подсистема создала кнопку на панели разделов, необходимо наличие флажка «Включать в командный интерфейс». Назначим разделу 15 «Общее» интуитивно понятную пользователю пиктограмму. Для этого скачайте подходящий рисунок пиктограммы из Интернет, создайте объект конфигурации «Общие картинки» (при нажатии на кнопку «Открыть» выберите найденный файл), затем выберите соответствующую подсистему в дереве объектов и назначьте ей в качестве свойства «Картинка» созданную общую картинку. Создайте по аналогии с подсистемой «Общее» оставшиеся перечисленные подсистемы: Закупки, Продажи, Сервис. Если специально ничего не указать, то кнопки разделов программа выстроит на панели по алфавиту, а не так, как мы это заводили в подсистемы. Чтобы это исправить, нужно вызвать правой кнопкой мыши контекстное меню, дважды щелкнув по объекту «Конфигурация», и выбрать пункт «Открыть командный интерфейс конфигурации». В окне «Командный интерфейс» мы можем выбрать нужный нам порядок и настроить видимость команд (рис. 2.3). Рис. 2.3. Командный интерфейс конфигурации Запустите программу в пользовательском режиме и посмотрите на результат. Удобнее всего сделать это в режиме отладки, выбрав пункт главное меню «Отладка / Начать отладку», или по кнопке командной панели , или клавишей F5 с клавиатуры. Согласимся на все предложения программы по сохранению конфигурации и обновлению конфигурации базы данных (рис. 2.4). 16 Рис. 2.4. Панель разделов в пользовательском режиме Платформа добавила обязательный раздел «Главное» и все наши разделы, описанные подсистемами конфигурации. Итак, мы создали оглавление для нашей программы. Позднее создадим оглавление для каждого раздела. Это будет «Панель навигации». 2.2.2 Настройка положения панелей «Такси» Однако при наличии широкоэкранного монитора или планшета расположение панели с разделами в верхней части экрана будет существенно «съедать» рабочее пространство пользователя. Изменим положения панелей по умолчанию. В конфигураторе щелкнем правой кнопкой мыши по объекту «Конфигурация», выбрав меню «Открыть интерфейс клиентского приложения». Справа видны все доступные панели инструментов, а слева их можно располагать, перетаскивая справа налево мышкой. Создадим группу (кнопка «Добавить» в левом верхнем углу), в которую в левой части экране сгруппируем панель инструментов и панель разделов. Справа от них поставим панель функций текущего раздела (оглавление второго уровня пока пустое) (см. рис. 2.5). 17 Рис. 2.5. Настройка интерфейса клиентского приложения В результате мы получим совсем другой внешний вид (см. рис. 2.6). Рис. 2.6. Панель разделов и функций в пользовательском режиме расположена слева Допустим, мы переоценили ширину экрана нашего будущего пользователя. В этом случае пользователь сам может изменить внешний вид. Для этого в пользовательском режиме в главном меню он выбирает «Вид / Настройка панелей» (см. рис. 2.7) и изменяет положение панелей по своему вкусу. Например, перенеся панель функций текущего раздела наверх экрана (см. рис. 2.8). 18 Рис. 2.7. Вызов настройки панелей в пользовательском режиме Рис. 2.8. Пользовательская настройка панелей Кроме того, пользователь может сэкономить место на экране, отказавшись от картинок (или надписей) панели разделов, убрав лишние для 19 него разделы. Сделать это он может, выбрав команду главного меню «Вид / Настройка панели разделов» (см. рис. 2.9). Рис. 2.9. Пользовательская настройка панели разделов 2.2.3 Управляемый интерфейс «Версия 8.2» В свойствах конфигурации мы установили возможность работать в двух вариантах управляемого интерфейса: «Такси» и «Версия 8.2». По умолчанию открылся «Такси», как более современный. Как посмотреть на результаты нашей работы в интерфейсе «Версия 8.2»? В пользовательском режиме в главном меню найдите пункт «Сервис / Параметры» (см. рис. 2.10). 20 Рис. 2.10. Сервис / Параметры В открывшемся диалоге (см. рис. 2.11) установите переключатель «Формы в отдельных окнах» (в закладках слишком много места на экране занимают сами закладки) и нажмите на появившуюся кнопку «Перезапустить». 21 Рис. 2.11. Настройка параметров в пользовательском режиме После перезапуска пользовательского режима Вы увидите интерфейс версии 8.2. Раздел «Главное» назывался «Рабочий стол», и положением панелей управлять было нельзя, разделы всегда были вверху (см. рис. 2.12). 22 Рис. 2.12. Интерфейс «Версия 8.2» Чтобы вернуться назад, в параметрах установите переключатель «Такси». 2.3 Интерфейс обычного приложения В свойствах нашей конфигурации установлено, что она работает в режиме «Управляемое приложение». И это правильно, так как в разработке конфигурации необходимо использовать все новейшие достижения фирмы «1С». Но может возникнуть ситуация, когда придется работать с конфигурацией на версии 8.0, функционирующей в режиме «обычного приложения». Где определялись раньше разделы конфигурации? В конфигураторе откройте меню «Сервис / Параметры». На разделе «Общее» установите переключатель «Управляемое и обычное приложение» (см. рис. 2.13). Рис. 2.13. Переключение в «старый» режим обычного приложения 23 В этом режиме нам будут доступны для настройки и новые (управляемые), и старые (обычные) механизмы. Чтобы запустить программу в режиме обычного приложения, выберите «Откладка / Начало отладки / Толстый клиент (обычное приложение): начать отладку» или соответствующую кнопку командной панели . Однако в открывшемся окне (см. рис. 2.14) будут лишь системные пункты главного меню («Файл», «Правка», «Операции», «Сервис» и др.). Если мы хотим создать главное меню по аналогии с нашими разделами, нужно создать объект «Интерфейс» в конфигураторе. Рис. 2.14. Первый запуск в старом режиме обычного приложения В ветке «Общее» конфигурации найдите подветку «Интерфейсы». Щелкните по ней правой кнопкой мыши и добавьте новый интерфейс (см. рис. 2.15). Рис. 2.15. Добавление интерфейса обычного приложения Конструктор предлагает создать разделы по названию объектов конфигурации «1С» («Справочники», «Документы»). Мы не будем этого делать, просто нажмем на кнопку «Построить». В открывшемся окне «Свойства» напишите имя «ГлавныйИнтерфейс». Далее, используя пункт «Новая», создайте наши разделы («Общее», «Закупки», «Продажи») через свойство «Текст». Раздел «Сервис» там уже присутствует. Позднее можно будет наполнить эти разделы содержанием (см. рис. 2.16). 24 Рис. 2.16. Создание главного интерфейса Чтобы этот интерфейс использовался при старте программы без указания пользователя, его нужно назначить основным. Это можно сделать в свойствах объекта «Конфигурация», установив свойство «Основной интерфейс» в «Главный интерфейс» (см. рис. 2.17). Рис. 2.17. Выбор основного интерфейса Повторный запуск программы в режиме обычного приложения (команда главного меню конфигуратора «Отладка / Начало отладки / Толстый клиент (обычное приложение): начать отладку») позволит увидеть созданные пункты главного меню (пока неактивные, потому что пустые) – см. рис. 2.18. 25 Рис. 2.18. Повторный запуск программы в режиме обычного приложения Для выполнения следующей работы вернемся к интерфейсу «Такси». Вначале запустим программу в режиме управляемого приложения (команда главного меню конфигуратора «Отладка / Начало отладки / Толстый клиент (управляемое приложение): начать отладку»), далее по аналогии с шагами на рис. 2.10 и 2.11. Контрольные вопросы 1. Перечислите 3 основных вариантов интерфейса в историческом порядке их разработки фирмой «1С». 2. В какой версии платформы доступен интерфейс «Такси»? 3. Как установить управляемое приложение в качестве основного режима запуска? 4. Как в настройках конфигурации при интерфейсе «Такси» разрешить переключение в интерфейс «Версия 8.2»? 5. В чем отличие имени и синонима объекта конфигурации? 6. Как создать кнопку на панели разделов для подсистемы? 7. Как в конфигураторе выстроить кнопки подсистем на панели разделов в необходимом порядке? 8. Как настроить положение панелей «Такси» в конфигураторе и в пользовательском режиме? 9. Как переключиться из интерфейса «Такси» в интерфейс «Версия 8.2»? 10. Как переключиться из управляемого режима в режим обычного приложения? 11. Как создать разделы главного меню в режиме обычного приложения? 26 Лабораторная работа №3. Справочники Введение Теперь, когда мы определили «оглавление», начнем наполнять нашу программу «содержанием». Любая учетная программа должна иметь механизмы для хранения списков условно-постоянной информации, электронные аналоги классификаторов. Эти списки будут исключать неоднократный и неоднозначный ввод, а также использоваться для заполнения полей документов и группировки колонок и строк отчетов. Начнем изучение объектов конфигурации, предназначенных именно для решения таких задач. Справочник предназначен для хранения списка элементов, который может изменяться и пополняться пользователем. Примером традиционного использования справочника можно считать хранение в базе данных списка контрагентов, номенклатуры товаров, сотрудников и т.п. При этом, как правило, пользователь должен иметь возможность создавать, удалять, изменять элементы справочника. Каждый элемент справочника может, кроме названия, иметь дополнительные свойства (для каждого справочника свои: для контрагента – ИНН и адрес, для товара – изготовитель и цена). Справочник может быть линейным (плоским, без групп) или иерархическим, когда каждый элемент подчинен другому элементу или группе. Начнем изучение с линейного справочника. Определяет структуру данных справочника программист в конфигураторе, а заполняет справочник данными, как правило, пользователь. При необходимости ввода «жестких» элементов справочника (тех, которые пользователь не сможет удалить) используется возможность создания предопределенных элементов (закладка справочника «Прочие»). 3.1 Линейные справочники Наше предприятие может состоять из нескольких самостоятельных юридических лиц и/или обособленных и выделенных на отдельный баланс подразделений. Список этих самостоятельных бизнес-единиц нужно где-то хранить. Создадим справочник «Организации» (см. рис. 3.1). 27 Рис. 3.1. Закладка «Основные» справочника «Организации» Обязательно заполним «Имя». Желательно заполнить «Представление объекта». Остальное – на Ваше усмотрение. Как будут отображаться свойства в диалоге пользователя? Представление объекта – название одного объекта. Используется в представлении стандартной команды создания объекта. Расширенное представление объекта – заголовок окна элемента справочника в единственном числе, который будет виден пользователю в заголовке формы при создании нового элемента. Представление списка – гиперссылка на панели навигации для открытия списка справочника (множественное число). Нежелательно начинать название со слова «Список», так как потом там будет много разных «списков», и будет сложно найти нужный. Расширенное представление списка – заголовок формы списка элементов справочника (множественное число). Пояснение – подсказка, которая будет появляться при наведении мыши на ссылку открытия списка справочника. Обратите внимание, что эта же подсказка появится и для стандартной команды создания нового элемента справочника. Закладку «Данные» (см. рис. 3.2) оставляем почти без изменений, но именно здесь мы могли бы управлять длиной стандартных реквизитов «Код» и «Наименование» и добавить новые поля (мы сделаем это позже). 28 Длина кода «9» – слишком велика. Обычно код – это порядковый номер. Вряд ли мы будем вносить в справочник количество организаций, состоящее из 9 цифр. Изменим длину кода на 3 символа, дину наименования – на 100 (см. рис. 3.2). Рис. 3.2. Закладка «Данные» справочника «Организации» Можно представить наш справочник в виде таблицы базы данных (см. табл. 3.1). Табл. 3.1 Структура справочника «Организации» Внутренний идентиКод Наименование фикатор (ссылка) ID Строка 3 символа Строка 100 символов При желании количество колонок для хранения данных можно было бы увеличить, добавив дополнительные реквизиты и табличные части для хранения табличных полей. Но код и наименование будут всегда. Внутренний идентификатор мы не видим в списке справочника. Он используется платформой, когда требуется создать уникальную ссылку на значение элемента справочника (на запись в таблице справочника). И код, и наиме29 нование могут быть изменены пользователем, идентификатор изменить невозможно. 3.2 Предопределенные элементы Обычные элементы непостоянны для конфигурации. В процессе работы пользователя они могут появиться, исчезнуть. Поэтому конфигурация хоть и может отличить их друг от друга, но рассчитывать на них в выполнении каких-либо алгоритмов она не может в силу их непостоянства. Предопределенные элементы, напротив, постоянны. В процессе работы пользователя они находятся всегда на своих местах и исчезнуть не могут, допускается только редактирование реквизитов таких элементов. То есть теоретически пользователь может их удалить, но для облегчения задачи мы не даем пользователю прав не только на интерактивное удаление предопределенных элементов, но и на интерактивное удаление объектов вообще. Поэтому конфигурация может работать с ними вполне уверенно и опираться на них при отработке различных алгоритмов. По этой причине каждый из предопределенных элементов имеет уникальное имя для того, чтобы к нему можно было обратиться средствами встроенного языка. Например, в справочнике «Организации» может иметь смысл один обязательный элемент «Основная организация», поскольку наша конфигурация предусматривает возможность учета на предприятии, где есть как минимум одна организация. Даже если наш «холдинг» состоит из одной организации, она все равно должна быть заведена в справочник – это и будет «Основная организация». Предопределенные данные вводятся по кнопке «Предопределенные» с закладки «Прочее» окна «Свойства справочника» (см. рис. 3.3). Рис. 3.3. Предопределенные элементы справочника «Организации» 30 Для предопределенного элемента обязательно назначается имя – уникальное имя объекта метаданных. Значение кода и наименования являются «рекомендуемыми», т.е. при первом открытии справочника в базу данных будет добавлен элемент именно с таким кодом и наименованием, но пользователь сможет их изменить. 3.3 Включение справочника в управляемый интерфейс Для того, чтобы ссылка для просмотра и заполнения справочника «Организации» отобразилась в разделе «Общее» главного окна разрабатываемого нами приложения, прикрепим справочник к соответствующей подсистеме (разделу главного окна программы) (см. рис. 3.4). Рис. 3.4. Закладка «Подсистемы» справочника «Организации» И у него должно быть включено использование стандартных команд – установим соответствующий флажок (см. рис. 3.5). 31 Рис. 3.5. Закладка «Команды» справочника «Организации» По умолчанию использование стандартных команд для новых объектов включено. Поэтому закладка «Команды» может понадобиться нам лишь для того, чтобы снять флаг использования стандартных команд, если мы решим не показывать объект пользователю. Наш справочник готов. Можно запустить пользовательский режим и открыть список справочника по гиперссылке на панели навигации (см. рис. 3.6). 32 Рис. 3.6. Внешний вид заполненного справочника в интерфейсе «Такси» Обратите внимание, что система отмечает различными пиктограммами обычный и предопределенный элементы справочника. Мы переименовали предопределенный элемент «Основная организация» в «Фабрику». Для создания элемента следует нажать кнопку Создать формы списка или клавишу Ins. После заполнения реквизитов для записи элемента в список следует нажать кнопку Записать и закрыть или закрыть форму кнопкой закрытия окна. Для отказа от ввода в список нового элемента следует нажать клавишу Esc. При переключении в режим интерфейса «Версия 8.2» (главное меню в пользовательском режиме Сервис / Параметры / Формы в отдельных закладках) картинка будет похожа (см. рис. 3.7). 33 Рис. 3.7. Внешний вид справочника в интерфейсе «Версия 8.2» 3.4 Включение в интерфейс обычного приложения При условии, что в параметрах конфигуратора по прежнему включен режим «Управляемое и обычное приложение», можно зайти в объект дерева конфигурации Общие / Интерфейсы / ГлавныйИнтерфейс и отредактировать свойства пункта меню «Общее» (см. рис. 3.8). Рис. 3.8. Настройка интерфейса обычного приложения 34 В результате при запуске программы в режиме обычного приложения (пункт главного меню «Отладка / Начало отладки / Толстый клиент (обычное приложение): начать отладку») пользователь увидит следующий интерфейс (см. рис. 3.9). Рис. 3.9. Внешний вид справочника в режиме обычного приложения Правда, пока без возможности добавлять или как-то редактировать элементы в списке, т.е. в режиме «Только просмотр». Создайте справочник «Валюты» для хранения списка валют. Длина кода должна быть 2 символа, длина наименования – 20 символов. Все остальные свойства оставить по умолчанию. В справочнике должен быть один предопределенный элемент – «НациональнаяВалюта», с кодом по умолчанию и наименованием «Рубль». Отнесем его к подсистеме «Общее» (см. рис. 3.10). Справочник надо отнести к подсистеме «Общее». 35 Рис. 3.10. Справочник «Валюты» 3.5 Иерархические справочники В системе «1С:Предприятие 8» справочники могут быть определенным образом структурированы. Близкие по смыслу (в том или ином понимании) элементы можно объединить в одну группу, чтобы не путать их с элементами другого содержания. Создадим справочник «Номенклатура», включим его также в подсистему «Общее». Длина кода должна быть 2 символа, длина наименования – 100 символов. На закладке «Иерархия» установим флаг «Иерархический справочник» и вид иерархии «Иерархия групп и элементов» (см. рис. 3.11). 36 Рис. 3.11. Закладка «Иерархия» справочника «Номенклатура» Платформа «1С:Предприятие» предоставляет возможность работы с иерархическими списками с неограниченным числом уровней вложенности (ограничение может задаваться на этапе конфигурирования). Иерархические списки состоят из элементов различных уровней, при этом элементы нижних уровней подчинены элементам верхних уровней. Существует 2 вида иерархии списков: иерархия групп и элементов, иерархия элементов. В списке с иерархией групп и элементов содержатся 2 вида элементов – группы и собственно элементы. Группа обозначает узел, в который входят другие (подчиненные) группы и элементы, а элемент является конкретным объектом. Например, если посмотреть структуру справочника «Номенклатура» в демонстрационной базе, то можно увидеть следующие группы номенклатуры: «Бытовая техника», «Обувь», «Продукты». Для каждой группы дополнительно могут быть созданы свои подгруппы. Так, например, в демонстрационной базе для группы «Продукты» созданы подгруппы «Бакалея», «Кондитерские изделия», «Молочные», «Соки» и т. д. Для списков с иерархией элементов любой из элементов может быть как узлом, так и отдельным объектом. Примером может служить список подразделений. Каждое подразделение может содержать в своем составе другие подразделения, но набор свойств у всех подразделений будет одинаков. Таблицу иерархического справочника можно представить так (см. табл. 3.2): 37 Табл. 3.2 Структура справочника «Номенклатура» Ссылка Это группа Код Наименование Родитель … Истина 01 Группа <Пусто> … Ложь 02 Элемент Ссылка группы В новом поле «Родитель» будет храниться ссылка на родительскую группу, которой принадлежит этот элемент. 3.5.1 Стандартные реквизиты Однако название свойства «Родитель» пользователю может быть не понятно. Чтобы его изменить, нужно на закладке «Данные» нажать кнопку «Стандартные реквизиты» и, открыв свойства стандартного реквизита «Родитель», задать для него синоним (рис. 34), например, «Группа» (см. рис. 3.12). Рис. 3.12. Назначение синонима стандартному реквизиту Справочник готов. Можно войти в пользовательский режим и посмотреть на результаты. Благодаря стандартным командам, команда открытия формы отображается на панели навигации раздела «Общее» (см. рис. 3.13). 38 Рис. 3.13. Список справочника «Номенклатура» Заполните справочник, отработав механизмы, указанные в пунктах 3.5.2–3.5.6. 3.5.2 Режимы отображения иерархического списка Иерархический список имеет следующие режимы отображения: иерархический список, список, дерево. Режимы переключаются с помощью пункта меню «Еще – Режим просмотра». Режим «Список». Если в качестве режима просмотра выбран Список, то в форме показываются все элементы списка. При этом группы и элементы показываются неупорядоченно. Режим «Иерархический список». Показываются только элементы верхнего уровня, а после перехода в некоторую группу – только элементы, подчиненные этой группе. Режим «Дерево». Если в качестве режима просмотра выбран режим Дерево, то элементы списка отображаются в виде дерева. 3.5.3 Создание группы списка Для создания новой группы в списке с иерархией групп и элементов нужно выбрать пункт меню «Еще / Создать группу» формы списка. 39 Если необходимо, чтобы новая группа, вводимая в список, сразу попала в определенную группу списка, то перед вводом следует перейти в эту группу (должен быть включен режим Иерархический список или Дерево). Система не проводит различий между кодами элементов списка и групп элементов, т.е. коды группы и элемента не могут совпадать. 3.5.4 Создание элемента списка Если необходимо, чтобы элемент, создаваемый в иерархическом списке, сразу попал в определенную группу этого списка, то перед созданием следует перейти в эту группу (должен быть включен режим Иерархический список или Дерево). Если для иерархического списка установлен режим просмотра Список, то новый элемент будет создан в корневой группе. 3.5.5 Реорганизация списка При работе с иерархическими списками может возникать необходимость реорганизации элементов списка, то есть переноса существующих элементов или групп элементов из одной группы в другую. Для переноса элемента или группы в другую группу списка нужно выполнить следующие действия: 1. В списке выбрать строку с тем элементом или группой, которую необходимо перенести в другое место списка. 2. Выбрать пункт «Все действия – Переместить в группу». 3. В открывшемся диалоге выбрать группу, куда предполагается перенести выбранный элемент. Также элементы списка можно перемещать между группами с помощью мыши. 3.5.6 Поиск в списках Чтобы начать поиск, начните набирать текст. При этом необязательно переключаться в поле поиска. В списке отобразятся результаты поиска, совпадения будут выделены цветом. 3.6 Нумерация элементов справочника Обратите внимание, что номер присваивается элементу справочника в момент записи. Благодаря свойствам справочника с закладки «Нумерация» (см. рис. 3.14) и штатному поведению платформы, номер присваивается автоматически, в диалоге пользователя поле недоступно для записи. 40 Рис. 3.14. Нумерация справочника «Номенклатура» На самом деле, если начать редактировать код, платформа даст предупреждение (см. рис. 3.15) и позволит написать тот код, который нужен. Рис. 3.15. Предупреждение при редактировании кода Создайте справочник «Контрагенты», иерархический (иерархия групп и элементов), для хранения списка контрагентов (см. рис. 3.16). Длина кода должна быть 2 символа, длина наименования – 100 символов. 41 Рис. 3.16. Справочник «Контрагенты» Не забыть: подсистема «Общее», у стандартного реквизита «Родитель» исправить синоним на «Группа». Остальные свойства оставить по умолчанию. 3.7 Подчиненные справочники При создании справочников часто возникает необходимость добавления однотипных реквизитов (полей), количество которых заранее не известно. Например, справочник «Контрагенты». У каждого контрагента надо указать контактные лица: фамилия, должность, телефон. При этом заранее трудно определить, сколько будет этих контактных лиц: может, будет только директор, или директор и главный бухгалтер, или не будет совсем. Еще один пример: справочник «Физические лица». У каждого сотрудника надо указать имена и даты рождения детей. Количество детей тоже заранее не известно. Такие примеры на практике встречаются повсеместно. Как решается эта проблема в 1С? В системе «1С:Предприятие» существует специальный механизм, который называется «Подчиненный справочник». В этом механизме всегда участвуют 2 справочника: справочник-владелец и подчиненный справочник. При этом каждый элемент подчиненного справочника принадлежит одному элементу справочника-владельца. Схематично это можно изобразить на рисунке 3.17. 42 Справочник «Физические лица» Иванов Петров Сидоров Васильев Федоров ... ... Справочник «Дети» Вася Маша Петя Федя Клава Алеша ... Рис. 3.17. Элементы справочника-владельца и подчиненного справочника На рисунке изображены основные «отношения» между элементами справочников: 1) Элемент справочника-владельца может иметь несколько элементов из подчиненного справочника (см. Иванов). 2) Элемент справочника-владельца может не иметь подчиненных элементов (см. Петров). 3) Каждый элемент подчиненного справочника может принадлежать только одному элементу справочника-владельца. Таким образом, на рисунке – ошибка: элемент «Алеша» не может одновременно принадлежать двум элементам. 4) Все элементы подчиненного справочника должны кому-нибудь принадлежать. В подчиненном справочнике не может быть элемента без владельца. Дополнение: 1) Один справочник может иметь несколько подчиненных. Например, в «1С:Бухгалтерия» справочнику «Контрагенты» подчинены справочники «Расчетные счета» и «Договоры». 2) Справочник может быть подчинен только одному справочнику. Например, справочник «Дети» нельзя одновременно подчинить справочнику «Физические лица» и «Детские сады». 3) Любой справочник в системе может быть подчинен и может иметь подчиненный справочник. Можно создать цепочку: справочник «Б» является подчиненным справочнику «А», справочник «В» подчинен справочнику «Б», справочник «Г» подчинен справочнику «В». Примеры использования подчиненных справочников: 1) Справочник «Контрагенты» и подчиненный ему справочник «Расчетные счета». 2) В программе «1С:Торговля и Склад» справочнику «Номенклатура» подчинено 6! справочников. Рассмотрим некоторые из них. Справочник «Единицы измерения» позволяет работать с одним и тем же товаром в разных единицах измерения: в штуках, упаковках, ящиках, коробках и т.д. Список единиц измерения можно продолжать бесконечно. Справочник «Цены» позволяет на каждый товар завести неограниченное количество 43 цен: закупочные, оптовые, мелко-оптовые, розничные, праздничные, с самовывозом и т.д. Справочник «Партии товарно-материальных ценностей» предназначен для ведения партионного учета в системе. Справочник «Свойства номенклатуры» позволяет задать каждому товару неограниченный список дополнительных свойств для построения различных аналитических отчетов и выборок. Создадим справочник «Физические лица». Отнесем его к подсистеме «Общее». Состав реквизитов справочника и реквизитов табличной части «Трудовая деятельность» приведен на рисунке 3.18. Не забывайте каждому реквизиту задавать соответствующее по смыслу значение свойства «Тип». Рис. 3.18. Реквизиты справочника «Физические лица» На закладке «Данные», воспользовавшись кнопкой «Стандартные реквизиты», переопределим синоним реквизита «Наименование» на «ФИО». Далее создадим подчиненный справочник «Дети», к подсистеме его не относим, так как он будет доступен из формы справочника-владельца. 44 Состав реквизитов справочника приведен на рисунке 3.19. Не забывайте каждому реквизиту задавать соответствующее по смыслу значение свойства «Тип». Рис. 3.19. Реквизиты справочника «Дети» На закладке «Владельцы» выберем справочник-владелец – «Физические лица» (см. рис). Рис. 3.20. Выбор справочника-владельца Посмотрите на результат, заполнив оба справочника. Справочник «Дети» доступен из справочника-владельца «Физические лица» (см. рис. 3.21). 45 Рис. 3.21. Форма справочника-владельца Контрольные вопросы 1. Чем линейный справочник отличается от иерархического? 2. Поясните каждый из видов Представлений на закладке «основные» свойств справочников (в конфигураторе). 3. На какой закладке свойств справочников (в конфигураторе) можно добавить реквизиты в справочник? 4. Для чего предназначены предопределенные элементы? В чем их отличие от обычных элементов? 5. Как включить созданный справочник в одну из подсистем? 6. Перечислите 2 вида иерархии в справочниках? 7. Режимы отображения иерархического списка 8. Как перенести элементы справочника в другую группу элементов? 9. Что такое подчиненный справочник? Приведите примеры использования этого механизма. 46 Лабораторная работа №4. Дополнительные реквизиты, тип данных Кроме основных стандартных реквизитов справочника «Код» и «Наименование» и служебных стандартных реквизитов, таких, как «Родитель», каждый элемент справочника может хранить дополнительные реквизиты. Состав дополнительной информации будет отличаться для каждого справочника. Так, например, для элемента справочника номенклатуры необходимо хранить цену и изготовителя. Для элемента справочника контрагентов, как минимум, – ИНН и адрес. Начнем со справочника контрагентов. Добавим на закладке «Данные» два новых реквизита. Реквизит «Адрес» будет строкой неограниченной длины (см. рис. 4.1). Такие реквизиты хранятся не в основной таблице справочника, а в дополнительной таблице. Они не доступны для выполнения группировки в запросе. Также недоступны они для индексирования, однако в полнотекстовом поиске участвовать могут. Полнотекстовый поиск позволит найти произвольный фрагмент текста (или текста, измененного специальными символами для уточнения поиска) во всех полях базы, включенных в полнотекстовый индекс, в том числе и в нашем адресе. Рис. 4.1. Свойство реквизита «Адрес» 47 И элементы, и группы справочника хранятся в одной физической таблице, но часть свойств элементов может быть бесполезна для групп (например, какой смысл от свойства «Адрес» для группы «Покупатели»?). Поэтому мы ограничиваем возможность ввода значений в это поле только элементами справочника (установите свойство «Использование» в значение «для элемента»). Второй реквизит «ИНН» будет хранить строку длиной 12 символов (см. рис. 4.2). Рис. 4.2. Свойства реквизита «ИНН» Справочник готов. В режиме использования заполним дополнительные реквизиты контрагентов (см. рис. 4.3). 48 Рис. 4.3. Дополнительные реквизиты справочника «Контрагенты» 4.1 Примитивные типы данных Создавая в справочнике реквизит типа «Ссылка» на другой справочник или на перечисление, мы, таким образом, связываем таблицы базы данных между собой. Вы уже должны были заметить, что, создавая объекты в конфигураторе, мы тем самым изменяем базу данных, создавая в ней новые таблицы и изменяя существующие. Изначально, создавая поля (реквизиты) в базе данных, мы можем назначать им только 4 примитивных типа данных: число, дата, строка, булево (истина/ложь). По мере того, как мы создаем новые объекты, в базу данных добавляются новые типы данных: ссылочные (например, ссылка на элемент из другого справочника). Добавим в справочник «Номенклатура» реквизит «Цена» типа <Число> (см. рис. 4.4). Два реквизита примитивного типы мы уже создали («ИНН» и «Адрес» у контрагента). Добавим еще один, но уже осознанно: понимая, какого типа данных это новое поле будет хранить. 49 Рис. 4.4. Дополнительный реквизит «Цена» справочника «Номенклатура» При вводе данных пользователь сможет ввести только цифры, не более 19 знаков, из которых два будет после запятой и неотрицательные (см. рис. 4.5). 50 Рис. 4.5. Заполнение цены в справочнике «Номенклатура» 4.2 Ссылочные типы данных Для каждого товара из справочника «Номенклатура» мы хотим помнить изготовителя. Изготовитель – контрагент, который выпускает этот товар или услугу. Причем многие товары из нашего справочника выпускаются одним и тем же изготовителем. Поэтому нам выгодно один раз (однократный ввод данных) ввести в справочник «Контрагенты» этого самого изготовителя и многократно и без ошибок (однозначный ввод) выбирать его в разных элементах справочника «Номенклатура». В справочнике «Номенклатура» добавим новый реквизит «Изготовитель» типа <СправочникСсылка.Контрагенты> (см. рис. 4.6). 51 Рис. 4.6. Назначение типа «СправочникСсылка» В пользовательском режиме мы сможем заполнить этот реквизит, выбрав значение из справочника «Контрагенты». На рисунке (рис. 4.7) видно, что заполнение изготовителя выполняется из справочника контрагентов (из списка), а не вводом произвольной строки. 52 Рис. 4.7. Заполнение Изготовителя в справочнике «Номенклатура» Контрольные вопросы 1. С помощью какого свойства можно запретить ввод значений в поле для групп элементов и разрешить для элементов? 2. Перечислите известные Вам примитивные типы данных. 3. Перечислите известные Вам ссылочные типы данных. 53 Лабораторная работа №5. Документы Введение В «1С:Предприятие» используется принцип учета «от документа», т.е. деятельность организации разбивается на элементарные операции. Под каждую операцию создается объект «Документ». Документами в систему вносится первичная информация о совершенной хозяйственной операции. Таким образом, документы в системе предназначены для ввода, регистрации и хранения информации о хозяйственных операциях, событиях в хозяйственной жизни организации. Такие события, как «купили», «продали», «оплатили», будут, скорее всего, регистрироваться в системе с помощью документов. Документы – это действия, которые мы производим, это «глаголы языка учета». Дата и время – наиболее важные характеристики документов, так как позволяют устанавливать строгую временную последовательность совершения операций. Начнем изучение этого класса объектов с приходной накладной. 5.1 Документ «Поступление товаров» Создадим документ «ПоступлениеТоваров», предназначенный для регистрации события покупки материальных ценностей (см. рис. 5.1). Отнесем документ к подсистеме «Закупки». 54 Рис. 5.1. Документ «ПоступлениеТоваров» Далее откроем свойства подсистемы «Закупки» (закладка «Состав») и убедимся, что документ отнесен к ней. На закладке «Основные» нажмем кнопку «Командный интерфейс»: разместим вызов команды в разделе «Важное» панели навигации и добавим команду создания документа (см. рис. 5.2). Рис. 5.2. Командный интерфейс подсистемы «Закупки» 55 5.2 Дополнительные реквизиты документа Любой документ содержит стандартные реквизиты «Номер» и «Дата». Если Вы хотите, чтобы в базе данных осталась еще какая-то информация об этом событии (покупке товаров), необходимо добавлять реквизиты и табличные части. Поэтому переходим к созданию дополнительных реквизитов. Документ будет иметь реквизиты (те, которые встречаются в документе один раз): «Организация» и «Контрагент» и табличную часть «Товары» (см. табл. 5.1 и 5.2). Табл. 5.1 Реквизит Организация Контрагент Таблица реквизитов документа Тип Проверка заполнения СправочникСсылка.Организации Да СправочникСсылка.Контрагенты Да Табл. 5.2 Таблица реквизитов табличной части документа Реквизит Тип (длина, точность) Проверка заполнения Номенклатура СправочникСсылка.Номенклатура Да Цена Число (10,2) Нет Количество Число (10,0) Нет Сумма Число (10,2) Нет Закладка «Данные» документа представлена на рис. 5.3. 56 Рис. 5.3. Закладка «Данные» документа «Поступление товаров» Можно запустить пользовательский режим и проверить работу документа (см. рис. 5.4). Рис. 5.4. Заполненный документ «Поступление товаров» 57 По умолчанию документ не проведен. Это значит, что он не будет виден в отчетах. Чтобы провести документ, нужно нажать кнопку «Провести» (кнопка в панели вверху окна документа). На данном этапе разработки работать не очень удобно: сумма автоматически не рассчитывается, над удобством заполнения остальных полей тоже можно поработать. Но при некотором желании зафиксировать в информационной базе факт покупки товаров можно. 5.3 Копирование объектов конфигурации Чем отличается документ поступления товаров от документа реализации структурно? Фактически ничем. То есть события разные, в учете поразному отражаются, а данные, которые надо хранить при нашем упрощенном учете, те же самые. И в рамках конфигурации, и между конфигурациями (с ограничениями) объекты можно копировать. Воспользуемся этой возможностью, чтобы сделать документ «РеализацияТоваров». Скопируем в буфер обмена (Ctrl+C) целиком весь объект «ПоступлениеТоваров», вставим из буфера (Ctrl+V), или выберем пункт «Скопироватъ» контекстного меню, вызванного на документе. Документ почти готов. Осталось несколько действий: 1. Изменить имя, синоним и представления на закладке «Основные», 2. Привязать к подсистеме «Продажи» в ее командном интерфейсе. разместить вызов команды в разделе «Важное» панели навигации и добавить команду создания документа Документ готов, можно посмотреть на результат (см. рис. 5.5). Рис. 5.5. Документ «Реализация товаров» 58 Задание на самостоятельное выполнение Самая популярная фраза при любом внедрении такая же, как и в любом подходе: «... А знаете, что мы забыли?». В процессе работы над конфигурацией выяснилось, что наше предприятие имеет несколько складов, про которые мы забыли. Поэтому необходимо при поступлении и продаже товаров нужно указывать склад, для этого: создадим справочник «Склады», который отнесем к подсистеме «Общее»; при покупке товаров все товары одной накладной приходуются на один склад, т.е. реквизит «Склад» должен располагаться «в шапке» документа под контрагентом (см. рис. 5.6); при продаже пользователь должен иметь возможность выбора склада и в «шапке», и в табличной части документа. Т.е. если все товары продаются с одного склада, пользователь укажет склад как в приходной накладной, а если товары в разных строках продаются с разных складов, значит, пользователь укажет склады в каждой строке документа (см. рис. 5.7). Рис. 5.6. Склад в документе «Поступление товаров» 59 Рис. 5.7. Склад в документе «Реализация товаров» Думать над взаимосвязью между складом в «шаnке» и складах в табличной мы пока не будем. 5.4 Создание печатных форм Для создания печатной формы документа «Поступление товаров» воспользуемся соответствующим конструктором, но предварительно создадим группу команд «Печать». Для этого в дереве объектов конфигурации выберем ветку «Общие», объект «Группы команд» (см. рис. 5.8). Рис. 5.8. Свойства группы команд «Печать» 60 Один из важных моментов при создании группы команд – определение категории. В окне свойств документа «Поступление товаров» на закладке «Макеты» по кнопке «Конструктор печати» откроем одноименный конструктор (см. рис. 5.9). Рис. 5.9. Вызов конструктора печати Далее выберем переключатель «Печать для форм управляемого режима». В открывшемся окне указываем, что создается новая команда. На этом же этапе можно переопределить имя создаваемой команды (см. рис. 5.10). Рис. 5.10. Создание новой команды или изменение существующей 61 На следующем этапе из реквизитов документа выбираем те, которые хотим видеть в шапке документа (см. рис. 5.11) и в табличной части (рис. 5.12). В левой части диалоговой формы приведены все доступные нам реквизиты документа, в правой – выбранные. Рис. 5.11. Выбор реквизитов для печати в шапке документа Рис. 5.12. Выбор реквизитов для печати в табличной части документа На последнем этапе указываем, что создаваемая конструктором команда входит в ранее созданную нами группу команд «Печать» (см. рис. 5.13). 62 Рис. 5.13. Выбор группы команд В результате работы конструктора у документа «Поступление товаров» была создана команда «Печать» (см. рис. 5.14). Рис. 5.14. Свойства команды «Печать» документа «Поступление товаров». Запустим программу. На панели команд формы документа появилась кнопка «Печать» (см. рис. 5.15). 63 Рис. 5.15. Кнопка «Печать» Печатная форма документа «Поступление товаров» представлена на рис. 5.16. Рис. 5.16. Печатная форма документа «Поступление товаров» 5.5 Журналы документов Основной особенностью журналов документов в «1С:Предприятие» является то, что журналы – это вторичные данные, которые не несут никакой первичной информации и представляют собой представление списка разных видов документов, например «Список складских документов». Можно создавать несколько объектов «Журнал документов». В свойствах объекта конфигурации указывается, какие виды документов будут в него входить. Каждый документ может входить в один или несколько 64 журналов или не входить ни в один журнал. Создайте журнал «СкладскиеДокументы». В нем должны регистрироваться документы «Поступление товаров» и «Продажа товаров» (см. рис. 5.17). Рис. 5.17. Регистрируемые документы Также для каждого журнала может быть описано несколько граф. При создании графы необходимо от каждого документа выбрать по реквизиту (только по одному, но можно разных типов), который будет в ней отображаться (см. рис. 5.18). Рекомендуется создавать графы для отображения в журнале только наиболее существенной информации из документов. 65 Рис. 5.18. Создание графы журнала Отнесем созданный журнал документов к подсистемам «Закупки» и «Продажи». Созданный журнал представлен на рис. 5.19. Рис. 5.19. Журнал «Складские документы» 66 Контрольные вопросы 1. Какой принцип учета используется в «1С:Предприятие»? 2. Для чего предназначены документы в системе «1С:Предприятие»? 3. Назовите 2 наиболее важных реквизита документов. 4. Для чего необходимо проведение документов? 5. Назовите способы копирования документов. 6. Для чего предназначен журнал документов? 7. Сколько объектов «Журнал документов» возможно создать в системе «1С:Предприятие»? 8. Как создать печатную форму документа? 9. В какое количество журналов документов может входить один и тот же документ? 67 Лабораторная работа №6. Поле ввода и удобное заполнение реквизитов Введение При заполнении документов требуется вводить значения реквизитов типа <Справочник.Ссылка>, т.е. основное назначение справочников – заполнение документов. Необходимо обеспечить возможность удобного и быстрого ввода. Механизмы платформы в этом направлении развивались следующим образом. Во многих программах, работавших под управлением MS DOS, было принято заполнять данные, вводя коды с клавиатуры. Так, чтобы выбрать какую-нибудь статью или подразделение в диалоге документа, пользователь должен был ввести строку с кодом в специальное поле. При переходе в многооконный интерфейс Windows и на работу с мышью от клавиатуры во многих случаях отказались, и заполнение полей типа «Ссылка» выполнялось не вводом кода ссылки, а выбором из списка (справочника). Недостаток такого подхода – низкая скорость ввода. Для ввода цифр и строк по-прежнему используется клавиатура, а для ввода ссылок – мышь, которой надо попасть сначала на кнопку выбора, потом в открывшемся списке (зачастую многотысячном) найти нужную строку, потом опять мышкой ее выбрать. Стараясь взять лучшее из каждого способа, на версиях 8.0-8.2 был реализован ввод по строке. Для полей типа «СправочникСсылка» такой ввод работал по наименованию и коду справочника. Однако было возможно, заранее подготовив любой текстовый реквизит (отметив его как «индексируемое»), научить программу искать элемент в списке по значению в этом реквизите, вводимому пользователем с клавиатуры. С развитием Интернет-технологий и их проникновением, в том числе и в учетные системы, поиск элементов списков стал еще более богатым. За то, каким образом будет заполняться пользователем поле ввода реквизита типа <СправочникСсылка.Контрагенты>, отвечает закладка «Поле ввода» свойств справочника «Контрагенты» (см. рис. 6.1). 68 Рис. 6.1. Вкладка «Поле ввода» справочника «Контрагенты» Рассмотрим основные настройки, которые могут повлиять на работу пользователя при заполнении в документах реквизитов типа <СправочникСсылка.Контрагенты>. 6.1 Быстрый выбор Флаг «Быстрый выбор» на вкладке «Поле ввода» можно считать устаревшим – он имеет смысл только для работы в режиме обычного приложения или интерфейса «Версия 8.2». Так, например, если список справочника «Организации» небольшой (несколько позиций, они все легко помещаются на одном экране), не иерархический и не может изменяться в процессе выбора (вряд ли рядовой пользователь будет изменять список юридических лиц нашей компании при оприходовании на склад товаров), можно было установить этот флаг. Если такой флаг не был установлен для справочника (пример, «Организации»), то открывшееся модальное окно выбора из справочника загораживало накладную (см. рис. 6.2). 69 Рис. 6.2. Заполнение организации в интерфейсе «Версия 8.2. В отдельных окнах» без быстрого выбора Если же флаг в свойствах справочника установить (см. рис. 6.3), то выбор становился намного комфортнее. Рис. 6.3. Установка флага «Быстрый выбор» Вместо модального окна открывается выпадающий список (см. рис. 6.4). 70 Рис. 6.4. Заполнение организации с быстрым выбором В режиме интерфейса «Такси» это не имеет смысла. 6.2 Создание при вводе «Создание при вводе» – удобная функция, которая позволяет, не открывая список, создать (добавить) новый элемент в справочник. Причем ссылка на добавленный элемент сразу же будет установлена в поле ввода. Имеет смысл для любого справочника, который нужно дополнять в процессе ввода документов. Например, при заполнении приходной накладной, выясняется, что это первый документ от контрагента ЗАО «Экран», и такого поставщика в справочнике еще нет. Первый сценарий. Пользователь нажмет на педальку выбора из справочника: ему покажут последних контрагентов, которые он выбирал при заполнении приходной накладной, предложат посмотреть весь список и создать новый (см. рис. 6.5). Рис. 6.5. Возможность добавить новый элемент при выборе Если он нажмет кнопку «Добавить» с зеленым плюсом, то откроется окно создания нового элемента справочника. 71 Второй сценарий. Пользователь начнет набирать наименование элемента (зачем он начнет набирать, будет указано в п. 6.3), ему подскажут, что такого нет, и опять-таки предложат создать новый элемент (см. рис. 6.6). Рис. 6.6. Возможность добавить новый элемент при вводе В этом случае название, которое он начал писать, сразу подставят в карточку нового элемента. 6.3 Ввод по строке Зачем же пользователь начал вводить в строке с клавиатуры название контрагента? Этот механизм пришел к нам из предыдуших версий в усовершенствованном виде. Для всех ссылочных типов (справочники и другие объекты, на которые можно ссылаться) предусмотрена возможность быстрого поиска, если пользователь начинает набирать с клавиатуры в этом поле какую-то строку. При этом платформа ищет по заранее подготовленным (проиндексированным) полям введенное пользователем значение и предлагает пользователю выбрать найденные элементы. Для справочника полями, по которым осуществляется быстрый поиск при вводе строки в поле вводе, являются наименование и код справочника. Если в справочнике есть два контрагента «ЗАО «Эпос»» и «ЗАО «Экран»», и пользователь с клавиатуры начнет вводить «ЗАО», то в поле откроется список, где будут показаны все контрагенты, наименование которых начинается со слова «ЗАО» (см. рис. 6.7). 72 Рис. 6.7. Ввод по первым символам наименования Это поведение «по умолчанию». Его можно переопределить под особенности каждого справочника. 6.3.1. Новые реквизиты для поиска по строке Наименования контрагентов часто повторяются. А ИНН является более-менее уникальным: ИНН разных структур, входящих в один холдинг (организацию), совпадает. Также может совпадать КПП, если они зарегистрированы в одной налоговой. На вкладке «Данные» отметим в свойствах реквизит «ИНН» как «Индексировать=Индексировать» (см. рис. 6.8). Рис. 6.8. Индексация реквизита ИНН Теперь платформа подготовит специальную таблицу (индекс) для 73 быстрого поиска элемента по значению этого реквизита. После этого вернемся на вкладку «Поле ввода» и изменим значение свойства «ввод по строке» (см. рис. 6.9). Рис. 6.9. Изменение свойств «Ввод по строке» Если наш пользователь чаще всего будет использовать для быстрого поиска наименование, вторым по частоте – ИНН, при этом не помнит кода контрагента, то именно такая настройка будет наиболее удобной. Ниже идут уточнения, как искать строку в реквизите. 6.3.2. Способ поиска строки Способ поиска строки: только в начале (по умолчанию и единственный вариант до 8.3) или в любой части строки (см. рис. 6.10). Рис. 6.10. Способ поиска строки Можно будет ввести «ЗАО Э» (см. рис. 6.11) или концовку ИНН 74 (начало у многих совпадает, т.к. это код налоговой инспекции). Рис. 6.11. Поиск по двум словам Ниже можно указать использование полнотекстового поиска (если индекс полнотекстового поиска обновляется) и фоновый режим поиска, что может быть актуально при большом объеме данных, среди которых осуществляется поиск. 6.4 Полнотекстовый поиск Механизм полнотекстового поиска позволяет быстро находить нужную информацию в данных информационной базы и в справочной системе. Основные возможности полнотекстового поиска: поддержка транслитерации (написание русских слов символами латиницы в соответствии с ГОСТ); поддержка замещения (написание части символов в русских словах одноклавишными латинскими символами); возможность нечеткого поиска (буквы в найденных словах могут отличаться) с указанием порога нечеткости; возможность указания области выполнения поиска по выбранным объектам конфигурации; представление результатов поиска в формате XML и HTML с выделением найденных слов; полнотекстовое индексирование названий стандартных полей («Код», «Наименование» и т.д.) на всех языках конфигурации; выполнение поиска с учетом синонимов русского, английского и украинского языков; поиск по значащим частям слов. Эта возможность реализована за счет разделения слов на значащие части во время индексирования. В результате, например, при поиске «хлеб» будет подсвечено слово «Мосхлеб», т. к. в нем «хлеб» является значащей частью; возможность добавления собственных словарей значащих частей; 75 морфологический словарь русского языка содержит ряд специфических слов, относящихся к областям деятельности, автоматизируемым с помощью системы программ «1С:Предприятие»; возможность использования дополнительных словарей полнотекстового поиска; в состав поставляемых словарей включены словарные базы и словари тезауруса и синонимов русского, украинского и английского языков, предоставленные компанией «Информатик». Механизм полнотекстового поиска в данных системы «1С:Предприятие» позволяет осуществлять поиск в базе данных с указанием поисковых операторов (И, ИЛИ, НЕ, РЯДОМ и др.). Механизм полнотекстового поиска основан на использовании трех составляющих: полнотекстового индекса, который создается для текущей базы данных и затем периодически, по мере необходимости, обновляется; журнал полнотекстового поиска; средств выполнения полнотекстового поиска (поиск можно организовать только программным способом). Система «1С:Предприятие» позволяет осуществлять выборочное включение данных прикладных объектов и их реквизитов в полнотекстовый поиск. Для включения/исключения данных объекта (наборов записей) из механизма построения индекса используется соответствующее свойство «Полнотекстовый поиск» объекта конфигурации (реквизита, реквизита табличной части) (см. рис. 6.12, 6.13). 76 Рис. 6.12. Включение полнотекстового поиска для объекта конфигурации Рис. 6.13. Включение полнотекстового поиска для стандартного реквизита Также полнотекстовый поиск можно включить для ввода информации в поля ввода (см. рис. 6.14): 77 Рис. 6.14. Включение полнотекстового поиска для ввода информации Создание и обновление полнотекстового индекса может быть выполнено интерактивно, в режиме «1С:Предприятие» или программно средствами встроенного языка. Перед использованием данного механизма необходимо удостовериться, что он включен в режиме использования. Запустим приложение и выполним эту проверку через пункт главного меню « / Все функции…» (см. рис. 6.15). 78 Рис. 6.15. Включение механизма полнотекстового поиска Ниже приведен диалог управления полнотекстовым индексированием в режиме «1С:Предприятие» (см. рис. 6.16): Рис. 6.16. Диалог управления полнотекстовым индексированием Для выполнения поиска в базе данных может использоваться, например, кнопка «Поиск» (см. рис. 6.17). 79 Рис. 6.17. Результат поиска по фразе 6.5 История выбора При установленном свойстве «История выбора при вводе = Авто» сначала открывается список ранее выбранных пользователем элементов, а затем команда «Показать все» и «Добавить» (см. рис. 6.18). Рис. 6.18. История выбора 6.6 Ввод на основании Механизм ввода на основании – это один из прикладных механизмов платформы. Он позволяет упростить работу пользователя с прикладным решением и избавить его от повторного ввода данных, которые уже хранятся в информационной базе. Рассмотрим наш пример. Документ «Поступление товаров», который фиксирует факт появления в организации некоторых позиций номенклатуры. После того, как номенклатура получена от поставщика, ее продают по80 купателю. Т.е. следует оформить документ «Реализация товаров», в котором нужно видеть: филиал нашей организации, который купил товар и будет его продавать; поставщика; склад (на который отгружен товар); номенклатуру поступившего товара; цену для покупателя, равной цене поставщика с 20%-ной наценкой; количество товара, поступившего на склад от поставщика, чтобы не продать больше; сумму, которую покупателю необходимо перечислить за поставленный товар. В такой ситуации механизм ввода на основании позволяет сформировать документ «Реализация товаров» автоматически, используя информацию, которая хранится в документе «Поступление товаров». Реализуем этот механизм с помощью конструктора ввода на основании. Он создает процедуру на встроенном языке, которая будет вызываться при создании одного объекта на основании данных, содержащихся в другом объекте. Вызовем конструктор ввода на основании из окна свойств документа «Реализация товаров» (см. рис. 6.19). Рис. 6.19. Вызов Конструктора ввода на основании 81 Конструктор позволяет вручную или автоматически заполнить выражения, которые будут записаны в поля результирующего объекта прикладного решения (см. рис. 6.20): Рис. 6.20. Конструктор ввода на основании Результатом работы конструктора является готовая процедура на встроенном языке с именем ОбработкаЗаполнения(). Эта процедура располагается в модуле результирующего объекта конфигурации и будет вызвана системой при вводе этого объекта на основании другого объекта (см. рис. 6.21). Рис. 6.21. Процедура ОбработкаЗаполнения() 82 Проверим действия механизма в пользовательском режиме. Откроем список документов «Поступление товаров». На форме появилась кнопка «Создать на основании / Реализация товаров» (см. рис. 6.22). Рис. 6.22.Вызов создания на основании После выполнения этой команды система создаст новый документ «Реализация товаров» и заполнит его реквизиты по информации, имеющейся в поступлении (см. рис. 6.23). Пользователю останется лишь изменить количество продаваемых товаров. Для автоматического изменения суммы необходимо написать процедуру на встроенном языке, но это выходит за рамки изучаемого курса. Рис. 6.23. Создание документа «Реализация товаров» на основании Таким образом, механизм ввода на основании позволяет создавать новые объекты прикладного решения (справочники, документы и т.д.) на основании информации, содержащейся в других, существующих объектах прикладного решения. 83 6.7 Критерии отбора Объект конфигурации «Критерии отбора», в отличие от большинства прикладных объектов конфигурации, не описывает каких-либо самостоятельных данных, которые будут храниться в информационной базе. Критерий отбора предназначен для того, чтобы описать условия отбора по некоторым объектам. Например, можно указать, что критерий отбора строится по типу данных СправочникСсылка.Номенклатура, и в этот критерий входят документы «ПоступлениеТоваров» и «РеализацияТоваров». Особенностью (преимуществом) критерия отбора является то, что он может строиться в том числе по реквизитам табличных частей. Таким образом, мы можем очень просто настроить отбор так, чтобы в его результат попадали лишь те документы, в табличной части которых есть интересующий нас элемент справочника «Номенклатура». Критерий отбора находится в ветке «Общие» дерева объектов конфигурации из-за того, что имеет узкоспециализированное назначение. Особенностью Критерия отбора является то, что он не входит в глобальный командный интерфейс. Рассмотрим особенности критерия отбора на примере. Создадим новый критерий отбора «НоменклатураВДокументах». Настроим закладки «Данные» и «Состав». На закладке «Данные» указывается тот тип данных, по которому будет осуществляться отбор: СправочникСсылка.Номенклатура. На закладке «Состав» мы выбираем объекты, которые будут являться результатом выполнения нашего отбора. Система предлагает нам отметить флажками интересующие нас объекты из списка, в который она включает все объекты, содержащие ссылку на справочник «Номенклатура» (см. рис. 6.24). 84 Рис. 6.24. Настройка закладки «Состав» критерия отбора Для просмотра результатов отбора необходимо настроить их видимость из справочника «Номенклатура». Для этого перейдем в свойства справочника «Номенклатура» на закладку «Формы», создадим форму элемента справочника «Номенклатура», нажав на кнопку лупы напротив соответствующего поля (см. рис. 6.25). В следующем окне нажмем «Готово». Рис. 6.25. Создание формы элемента справочника «Номенклатура» 85 Перейдем на закладку «Командный интерфейс» и поставим флаг в колонке «Видимость» напротив «НоменклатураВДокументах» (см. рис. 6.26). Рис. 6.26. Настройка видимости критерия отбора на форме элемента справочника Запустим приложение и посмотрим результат, щелкнув по любому элементу справочника «Номенклатура» (см. рис. 6.27). Рис. 6.27. Критерия отбора «Номенклатура в документах» Контрольные вопросы 1. На какой закладке свойств справочника определяется механизмы заполнения пользователем поля ввода реквизитов типа <СправочникСсылка>? 2. В каком режиме запуска платформы имеет смысл установка флага «Быстрый выбор»? 3. Дайте характеристику назначения свойства «Создание при вво86 де». 4. Для какого справочника имеет смысл установка свойства «Создание при вводе»? 5. Перечислите 2 сценария создания при вводе. 6. Дайте характеристику поведения ввода по строке «по умолчанию». 7. Как задать новые реквизиты для поиска по строке? 8. Перечислите способы поиска строки. 9. Перечислите основные возможности полнотекстового поиска. 10. На использовании каких составляющих основан механизм полнотекстового поиска? 11. Как включить объекты конфигурации и их отдельные реквизиты в полнотекстовый поиск? 12. Как обновить индекс в режиме «1С:Предприятие»? 13. Какое свойство обеспечивает открытие списка ранее выбранных пользователем элементов при вводе реквизитов типа <СправочникСсылка>? 14. Для чего необходим механизм создания на основании? 15. Как реализовать механизм создания на основании? 87 Лабораторная работа №7. Отчеты и запросы – первое знакомство Как можно получить из базы данных сгруппированную, отобранную, отсортированную информацию, введенную в нее ранее в виде справочников и документов? Для решения этой задачи предназначены отчеты. 7.1 Язык запросов Язык запросов (SQL, Structured Query Language, язык структурированных запросов) – компьютерный язык, применяемый для создания, модификации и управления данными в реляционных базах данных. В случае языка запросов системы «1С:Предприятие» общение сводится к чтению данных. С помощью этого языка мы не можем изменить значения реквизитов документов, или справочников, или констант. Зато мы можем их прочитать, отсортировать, сгруппировать, отобрать по заданным правилам и показать пользователю результат в удобном для просмотра виде, т.е. в виде отчета. 7.1.1. Источники данных и табличная модель данных База данных системы «lС:Предприятие» может быть представлена как совокупность объектов и набор таблиц. Например, наша конфигурация содержит объекты: справочник «Номенклатура», документ «Поступления товаров» и др. Когда мы создавали в конфигураторе эти объекты, почти не задумывались над тем, как программа организует хранение данных, которые мы вводим, используя эти объекты. А хранит она их в таблицах базы данных, которые сама создала, основываясь на структуре объектов. Самые простые из объектов хранят свои данные в одной таблице. К таким можно отнести, например, справочник «Организации». Более сложные объекты хранят данные в нескольких таблицах. Например, для хранения данных документа «Поступления товаров» используется две таблицы: в одной хранятся все реквизиты «шапки» (сколько документов – столько строк), во второй – все строки всех документов табличной части «Товары». Пользователю это знать ни к чему – он видит один объект «Документ». Когда пользователь открывает форму, то программа, используя запрос, сама вынимает данные из этих двух таблиц. Когда мы описывали структуру этого документа, то нам тоже не нужно было это знать. Необходимым это станет, когда мы начнем делать отчеты по данным документа и задумаемся, из какой таблицы эти данные можно получить. Описание таблиц (какой объект, как хранит свои данные) есть в документации, и может быть получено программно. Кроме того, в изучении структуры таблиц может помочь конструктор запросов, с которым мы чуть 88 позже познакомимся. Почти каждая из таких таблиц может являться источником данных для запроса и отчета. Данные из источника могут быть отобраны, отсортированы, смешаны с данными из другого источника по правилам, которые мы зададим. 7.1.2 Синтаксис языка запросов То, каким образом обратиться к источнику, как сказать программе, что мы хотим из него вынуть и что сделать, описывается с использованием языка запросов. Язык имеет русский и английский синтаксис. Английский синтаксис напоминает стандартный SQL, с которым знакомы многие программисты. Русский синтаксис – перевод английского на понятный нам русский язык. Мы, как и разработчики типовых решений, будем пользоваться русским синтаксисом. Команда на языке запроса представляет собой строку, которая обязательно начинается с ключевого слова «ВЫБРАТЬ». Команды, ключевые слова запроса принято писать заглавными буквами, хотя на работу это никак не влияет. После слова «ВЫБРАТЬ» надо перечислить, что именно (имена полей) и откуда (имя таблицы из базы данных). Сделать это можно двумя способами. Первый вариант предполагает, что мы будем для каждого поля описывать, где оно лежит. Если мы хотим вынуть список всех товаров из справочника «Номенклатура», то текст запроса будет выглядеть следующим образом (см. листинг 7.1): Листинг 7.1. Текст запроса без источника данных ВЫБРАТЬ Справочник.Номенклатура.Наименование Второй вариант используется чаще. Он предполагает описание источника в отдельном предложении (см. листинг 7.2). Листинг 7.2. Текст запроса с описанием источника данных ВЫБРАТЬ Наименование ИЗ Справочник.Номенклатура И в том, и в другом случае мы получим таблицу, в единственной колонке которой будет содержаться наименование товара, а строк будет столько, сколько элементов справочника. Например, такую (см. табл. 7.1): 89 Табл. 7.1. Результат запроса к полю «Наименование» справочника Наименование Авторучки Паркер Школьная Карандаши Цветной и т.д. При написании запроса конструктором он несколько усложнит этот текст, назначив имя (псевдоним) источнику запроса, таблице «Справочник.Номенклатура» (см. листинг 7.3). Листинг 7.3. Текст запроса с описанием псевдонима источника данных ВЫБРАТЬ Номенклатура.Наименование ИЗ Справочник.Номенклатура КАК Номенклатура Такой вариант синтаксиса в нашем упрощенном запросе ничего дополнительно не даст. Так принято писать в запросах, где выбираются данные сразу из нескольких таблиц, но конструктор пишет так всегда. И результат запроса тоже никак не изменится. Чуть более подробно остановимся на текстах запросов. Рассмотрим, что означает каждое слово в запросе. Слово «ВЫБРАТЬ» – ключевое. Это – команда программе. «Справочник.Номенклатура» – это полное название таблицы, где лежат элементы и группы справочника, который мы в конфигураторе назвали «Номенклатура». «Наименование» – это имя стандартного реквизита справочника, значение которого нас интересует. Если бы нас интересовал еще и код, и цена, т.е. мы бы хотели получить в отчете три колонки: «код», «наименование» и «цена», то в тексте запроса мы бы перечислили поля через запятую. Первый вариант синтаксиса (см. листинг 7.4). Листинг 7.4. Текст без источника данных ВЫБРАТЬ Справочник.Номенклатура.Код, Справочник.Номенклатура.Наименование, Справочник.Номенклатура.СтавкаНДС Второй вариант синтаксиса (см. листинг 7.5). 90 Листинг 7.5. Текст запроса с источником данных ВЫБРАТЬ Код, Наименование, Ставка НДС ИЗ Справочник.Номенклатура Третий вариант синтаксиса (см. листинг 7.6). Листинг 7.6. Текст запроса с псевдонимом источника данных ВЫБРАТЬ Номенклатура.Код, Номенклатура.Наименование, Номенклатура.СтавкаНДС ИЗ Справочник.Номенклатура КАК Номенклатура Во всех трех вариантах текст запроса разбит на несколько строк и оформлен «отступами» только лишь для удобства чтения. На результат (см. табл. 7.2) это никак не повлияет. Табл. 7.2 Результат запроса к трем полям справочника. Код Наименование Цена 000000001 Авторучки 000000002 Паркер 000000003 Школьная 000000004 Карандаши 000000005 Цветной ... и т.д. 20 10 8 Теперь для начала построения отчетов теории достаточно. Поговорим о том, куда этот текст надо записать, чтобы он начал работать. 7.2 Первое знакомство с отчетами Отчеты предназначены для предоставления пользователю информации из базы в удобном для просмотра виде. Сам отчет, как объект конфигурации, содержит очень немногое, можно считать, что лишь новое окно в программе, которое, как правило, включает в себя табличный документ с результатом для пользователя. 91 7.2.1 Предыстория создания механизма компоновки данных То, каким образом этот механизм выполнит текст запроса, как оформит личный документ, и какие возможности настройки предоставит пользователю, зависит от выбранного подхода. Перечислим основные подходы: 1. Объект «Запрос». Требует написания программного кода, рисования диалога для пользователя и результирующего табличного документа, все «вручную». Это очень сложно и долго. Плюсы: можно сделать абсолютно любой отчет, ограничений почти нет. 2. Построитель запроса и построитель отчета – первые попытки разработчиков платформы «1С:Предприятие» упростить создание типовых (наиболее часто встречающихся) отчетов. На основании текста запроса они сами могут нарисовать диалог и сделать несложный табличный документ. Тем не менее, это требует существенных навыков программирования. 3. Механизм компоновки данных – первый вариант, который позволяет разработать сложный, с богатыми возможностями и привлекательным внешним видом отчет без программирования (декларативно). Минусы: наиболее сложные отчеты и нетиповые отчеты не могут быть выполнены с помощью этого механизма или же все равно потребуют программирования. Тем не менее, этот вариант становится основным, и именно он и будет нами изучен. 7.2.2 Предыстория создания механизма компоновки данных Добавим в нашу конфигурацию первый отчет, который позволит распечатать список справочника «Номенклатура». На самом деле, если бы речь шла просто о печати списка справочника, специально для этого делать бы ничего не пришлось: пользователь через кнопку «Еще» с командной панели справочника может вызвать пункт «Вывести список» и получить заполненный для печати табличный документ. Но мы будем печатать не весь справочник (отбор), а с нужной сортировкой (упорядочивание). Тренироваться будем на справочнике «Номенклатура». Новый отчет будет называться «ПрайсЛист» (см. рис. 7.1). Отчет будет включен подсистему «Продажи». 92 Рис. 7.1. Отчет «Прайс-лист» Отчет – это «оболочка», которая, используя один из перечисленных выше подходов, позволит нам выполнить запрос и вывести пользователю результат. Воспользуемся механизмом компоновки данных. Единственное, что нужно этому механизму от нас, это «Схема компоновки данных», которая будет содержать описание построения нашего отчета. 7.3 Первое знакомство с механизмом компоновки По кнопке «Открыть схему компоновки данных» мы создаем новую и единственную в нашем случае схему. Схема имеет много закладок и еще больше свойств на каждой из них. Начнем изучать с самых простых. В качестве источника данных схема готова получить разное, но мы добавим набор данных «Запрос». Это означает, что нужно будет написать текст запроса, который она проанализирует и на его основе: сама нарисует диалог для пользователя, сама его поправит, если нужно, сама выполнит и красиво оформит результат. 93 7.3.1. Набор данных – запрос Итак, новый набор данных – «Запрос» (см. рис. 7.2). Рис. 7.2. Закладка «Наборы данных» Диалог изменился, внизу появилось текстовое поле для написания запроса. Если поле не появилось или, наоборот, пропала таблица, которая была вверху, значит, окно надо раскрыть шире или поискать горизонтальный разделитель и подвигать его – просто не видно. В самом низу открылся флаг «Автозаполнение», который мы оставляем включенным. Он означает, что схема будет сама анализировать текст запроса, не требуя от нас дополнительных инструкций, и на основании этого текста сама предложит список полей для отчета. 7.3.2 Конструктор запросов Текст запроса можно, конечно, написать руками (запрос к справочнику есть в предыдущей теме), но намного приятнее сделать это конструктором, который мы открываем по кнопке «Конструктор запроса» (см. рис. 7.3). Рис. 7.3. Новый набор данных «Запрос» Дальше мы работаем в конструкторе запроса. Первая страница конструктора (см. рис. 7.4) показывает нам все таблицы нашей базы данных, сгруппированные в виде дерева по классам объектов: константы, справочники, документы и т.д. 94 Рис. 7.4. Закладка «Таблицы и поля» конструктора запросов Конструктор вполне подходит для изучения нашей базы данных. Но мы оставим это на потом, а пока мы решаем конкретную задачу – прайслист. Находим в дереве слева справочник «Номенклатура» и переносим таблицу в список выбранных (среднее поле) стрелочкой или левой кнопкой мыши. Далее переносим из нее те поля (реквизиты), которые могут быть интересны нам в отчете. Мы можем сделать это «с запасом», «на вырост», потом из выбранных сейчас полей мы сможем оставить только значимые, а остальные пользователь добавит в отчет сам, если захочет (и если догадается, как). Остальные закладки конструктора нам в этот раз не нужны. Нажимаем кнопку «ОК» и смотрим на текст запроса, который получился. 7.3.3. Доступные поля отчета Получился список доступных для отчета полей (см. рис. 7.5), свойства которых можно уточнить. 95 Рис. 7.5. Текст запроса и заполненные поля Схема компоновки на основании текста запроса сама (флаг «Автозаполнение») заполнила доступные поля для отчета. Наведем красоту в доступных полях в графе «Поля». Нам, например, не нравится поле «Цена». Можно поменять заголовок на «Цена продажи» (см. рис. 7.6). Рис. 7.6. Изменение заголовка поля «Цена» Если захотим вернуть прежнее название, достаточно снять флаг – и вернется «Автозаголовок». 96 7.3.4 Варианты отчета Каждый отчет, использующий механизм компоновки данных, по своей сути является конструктором, который позволяет собрать бесчисленное множество вариантов отчетов из тех данных, которые были описаны на первой закладке «Поля». Хотя один такой вариант надо сделать сразу, чтобы пользователь, открывший отчет и нажавший кнопку «Сформировать», сразу мог увидеть готовый результат. Потом, когда освоится, он сможет добавить свои варианты в пользовательском режиме. Причем каждый пользователь сможет создать свои варианты. А пока делаем основной вариант отчета. Во-первых, разберемся с типом нашего отчета. Отчет может быть одного из трех типов: 1. Список, состоящий из группировок. Колонки такого отчета фиксированы, а количество строк зависит от условий формирования (к слову, это как раз наш прайс-лист). 2. Таблица (или кросс-таблица, «шахматка») – отчет, и строки и колонки которого выводятся динамически, а на пересечении строк и колонок выводится какое-то значение. 3. Диаграмма. Группировки отчета Нам подходит первый, самый простой вариант. Для его разработки нужно описать, какие в нем будут группировки. Добавляем новую группировку (см. рис. 7.7). Рис. 7.7. Группировка отчета Если бы мы хотели сгруппировать данные, например, по ставкам НДС и посчитать, например, количество товаров с каждой ставкой, мы бы добавили группировку «Ставка НДС». Но нам нужно просто вывести все строки (не изменяя, не группируя их), которые есть в справочнике. Поэтому мы используем «пустую группировку», которая позволит получить «Детальную выборку» запроса (см. рис. 7.8). Детальные записи и выборка по детальным записям запроса означают, что в запросе будут получены строки таблицы в том виде, в каком они лежат в базе данных. Есть и альтернативные варианты – например, они могут быть сгруппированы. 97 Рис. 7.8. Группировка «Детальные записи» Выбранные поля На странице «Выбранные поля» указываем, какие из доступных полей будут включены в этот основной вариант отчета (см. рис. 7.9). Рис. 7.9. Выбранные поля Другие настройки На закладке «Другие настройки» (см. рис. 7.10) укажем заголовок нашего отчета – «Прайс-лист». 98 Рис. 7.10. Другие настройки, заголовок отчета Обратите внимание, что все эти свойства мы указывали для отчета в целом. Об этом свидетельствует нажатая кнопка «Отчет» на панели, расположенной над закладками. Есть еще одна кнопка группировки по имени «Детальная выборка», у нее свои свойства, и мы ими пока не занимались. Свойства пользовательских настроек Осталось определить, чем в этом отчете мы разрешим управлять пользователю: сможет ли он сам исключать и добавлять новые поля; сможет ли устанавливать отбор, изменять сортировку, группировать данные. За эти возможности отвечают пользовательские настройки отчета. Настроить их можно по кнопкам , расположенным на разных страницах. Начнем настройку со структуры отчета. Обязательно обратите внимание на то, где установлен курсор – он стоит на слове «Отчет» дерева группировок (см. рис. 7.11). Если курсор передвинуть на группировку, результат будет совсем другой. Рис. 7.11. Кнопка настройки отчета в целом Какие из возможностей мы разрешим пользователю? Мы предлагаем так (см. рис. 7.12): 99 Рис. 7.12. Состав пользовательских настроек отчета Расскажем про них подробнее. Во-первых, про режим редактирования: 1. Быстрый доступ – пользователь увидит элемент управления прямо в основном окне отчета, здесь должны быть часто используемые настройки отчета. 2. Обычный доступ – ему придется нажать на кнопку «Настройка», чтобы добраться до этого свойства: туда обычно выносят то, что может пригодиться, но не часто. 3. Недоступный – увидит, но изменить ничего не сможет. Теперь о том, что означает каждое из свойств. 1. Выбранные поля – можно управлять составом полей (в нашем случае – колонок) отчета. Если мы не уверены, что пользователь догадается, что «Выбранные поля» – это «Колонки», можно указать «Представление». 2. Отбор – устанавливать фильтры (например, только товары одного изготовителя). 3. Порядок – изменять сортировку (по наименованию, по коду, по цене). 4. Условное оформление позволит выделить цветом, шрифтом ... все строки, которые удовлетворяют условию. Близкая аналогия – как мы работаем с маркером, выделяя нужные нам строки отчета. 5. Группировки – возможность сгруппировать данные: сначала все товары одного изготовителя, потом другого. Такие же настройки есть и на закладках внизу, но мы их пока не будем трогать. Теперь можно посмотреть на результат (см. рис. 7.13). 100 Рис. 7.13. Сформированный отчет «Прайс-лист» Опытный пользователь сможет, используя кнопку «Еще / Изменить вариант», создать свой вариант отчета из тех же данных. Измените отчет так, чтобы пользователь мог вывести отчет без групп (см. рис. 7.14). 101 Рис. 7.14. Готовый отчет без групп 7.4 Пользовательские настройки отчета Мы предоставили пользователю много возможностей для настройки нашего отчета. Испытаем их теперь на практике, поработав с отчетом в качестве пользователя. 7.4.1 Выбранные поля В список выбранных полей попадают все поля отчета, которые были включены в тексте запроса в предложение «ВЫБРАТЬ» и для которых не было установлено флажков ограничения в колонке «Поле» (см. рис. 7.15). Рис. 7.15. Поля отчета, колонка «Поле» группы ограничения 102 Если поле имеет ссылочный тип, то «через точку» по плюсику можно будет включить в выбранные поля и поля из связанных таблиц, если не установлено ограничение в этот раз в нижнем ряду колонки «Поле». В пользовательском режиме, щелкнув по кнопке многоточия поля «Колонки» можно будет убрать лишние или добавить необходимые колонки отчета (см. рис. 7.16). Рис. 7.16. Редактирование пользователем списка выбранных полей Чтобы исключить поле из отчета, достаточно снять флаг в правом списке или удалить это поле из правого списка. Чтобы добавить новое поле, достаточно перетащить его мышкой из левого списка доступных полей в правый список выбранных полей. Для полей ссылочного типа данных (слева от них в левом списке есть «плюсик») можно включать в отчет их реквизиты, открыв состав полей. Для этого щелкните по «плюсику» и выберите нужное поле. Результатом работы будет изменившийся состав колонок отчета (см. рис. 7.17). 103 Рис. 7.17. Новое поле «Изготовитель» в результате отчета 7.4.2. Отбор Свойство «Отбор» позволяет описать сложные отборы по любому из полей, для которых в доступных полях отчета не было установлено ограничения в колонке «Отбор». Пользователь может установить отбор по любому из этих полей, перенеся их в правый список (см. рис. 7.18). Рис. 7.18. Отбор в отчете Для каждого условия отбора устанавливается четыре свойства, соответствующие четырем колонкам таблицы отбора: 1. Использование (флажок слева, означающий, что отбор будет ис104 пользоваться отчетом). 2. Левое значение (колонка «Поле», в котором указано имя поля отчета, по которому будет устанавливаться отбор). 3. Вид сравнения (из списка возможных) для выбранного поля. 4. Правое значение (колонка «Значение»), где выбирается значение фильтра. Результатом будет отчет, где пользователь увидит только товары одного изготовителя (см. рис. 7.19). Рис. 7.19. Результат отбора в отчете 7.4.3 Сортировка Сортировка позволяет управлять порядком вывода строк в отчет. Если сортировка не задана, строки детальной выборки выводятся в порядке нахождения их в таблице базы данных, а для строк других вариантов группировок выполняется автоупорядочивание. Для сортировки нужно указать поле и направление: «по возрастанию» или «по убыванию». Вывод «по возрастанию» для строки означает, что сначала будут выведены строки, начинающиеся с пробела, потом цифры, потом – с английских букв в порядке алфавита, потом – с русских в порядке алфавита (см. рис. 7.20). 105 Рис. 7.20. Сортировка отчета Результатом будет изменившийся порядок строк в отчете (см. рис. 7.21). Рис. 7.21. Результат сортировки отчета по наименованию 7.4.4 Условное оформление Мы не стали размещать условное оформление в быстром доступе, поэтому найти его можно щелкнув по кнопке «Настройки…» диалога отчета, затем по кнопке «Еще». Условное оформление позволяет, используя богатейшие возможности платформы, выделить строки или отдельные ячейки отчета цветом, шрифтом и т.д. при достижении определенного условия. 106 Здесь указывается, как оформлять (цвет, шрифт и т.д.), при каком условии (отбор, но, в отличие от отбора отчета, поля будут включены в отчет и будут оформлены) и что оформлять (все поля строки или отдельные колонки) (см. рис. 7.22). Классический пример: на манер работы с бумажным отчетом выделить «маркером» все строки, удовлетворяющие условию, например, цена продажи > 200 (условие выделения настраивается в столбце «Условие»). Рис. 7.22. Настройка условного оформления 7.4.5 Группировка Искать ее надо там же, где и условное оформление (кнопка «Настройки…», затем кнопка «Еще»). Группировка позволит вывести отчет в виде «дерева», во многих случаях по верхним «веткам» такого дерева будут подсчитаны итоги. Рис. 7.23. Группировки отчета 107 В нашем случае (см. рис. 7.23) группировка по изготовителю позволит увидеть справочник так, как будто в нем были созданы папки, соответствующие изготовителям товаров. Для каждого элемента группировки указывается тип: с иерархией или без, который имеет смысл только для группировки типа ссылка на иерархический справочник (см. рис. 7.24). Рис. 7.24. Отчет, сгруппированный по изготовителям 7.4.6 Сохранение / восстановление настроек Мы в качестве пользователя сделали множество настроек для отчета. Можно предположить, что наши коллеги (другие пользователи этого отчета), тоже сделали свои корректировки. А что будет, если отчет закрыть? Если это сделать из конфигуратора по кнопке «Продолжить отладку», настройки будут удалены. А если завершить работу программы обычным образом (закрыть отчет, закрыть программу), то настройки будут записаны в специальные таблицы базы данных, которые хранят их для каждого варианта каждого отчета и каждого пользователя в отдельности. Хранением настроек можно управлять с помощью специального объекта и программно, но уже выходит за рамки нашего курса. Сохранить настройки принудительно можно, используя пункт «Сохранить настройки ...» меню «Еще», при этом настройке можно задать имя (см. рис. 7.25). 108 Рис. 7.25. Сохранение / восстановление настроек отчета Чтобы выбрать одну из ранее сохраненных настроек, нужно воспользоваться пунктом того же меню «Выбрать настройки...». Таким образом, каждый пользователь может на основании одного отчета сделать произвольное количество настроек, удобных и нужных именно ему. Чуть ниже есть кнопка «Установить стандартные настройки», очень полезна в условиях эксплуатации программы в коллективе креативных пользователей. Именно эта кнопка позволяет «откатиться» к заводским настройкам отчета в случае, когда с пользовательскими настройками он работать перестал – пользователь задал противоречивые отборы в настройках. Контрольные вопросы 1. Что означают слова «ВЫБРАТЬ» и «ИЗ» в тексте запроса? 2. Перечислите 3 подхода к построению отчетов. 3. Перечислите закладки конструктора запроса. 4. На какой закладке схемы компоновки данных отчета можно увидеть список доступных полей для отчета? 5. Назовите назначение флага «Автозаголовок» в схеме компоновки данных отчета? 6. Перечислите 3 типа варианта отчета при создании варианта отчета в схеме компоновки данных отчета. 7. Как в схеме компоновки данных настроить группировки отчета? 8. На какой закладке схемы компоновки данных можно указать заголовок отчета? 109 9. Перечислите основные режимы редактирования в составе пользовательских настроек отчета в схеме компоновки данных. 10. Что означают каждое из свойств в составе пользовательских настроек отчета в схеме компоновки данных? 11. Как создать свой вариант отчета в пользовательском режиме? 12. Как в пользовательском режиме можно убрать лишние или добавить необходимые колонки отчета? 13. Как в пользовательском режиме установить отбор по одному из полей? 14. Как в пользовательском режиме задать сортировку по одному из полей? 15. Как в пользовательском режиме выделить «маркером» все строки, удовлетворяющие условию? 16. Как в пользовательском режиме настроить группировки отчета? 17. Как в пользовательском режиме сохранить и восстановить настройки отчета? 110 Лабораторная работа №8. Сложные отчеты: список, таблица, диаграмма Разработаем более сложный отчет, который позволит получить данные оборота по купленным товарам за выбранный пользователем период и узнать количество и сумму купленных товаров в разрезе товаров, складов, организаций и других полей приходной накладной. Создадим новый отчет «ОтчетОЗакупках» и включим его в подсистему «Закупки». Как и предыдущий отчет, он будет делаться с помощью механизма компоновки, схему для которого мы создаем в новом отчете, добавляем новый набор данных «Запрос» и пишем новый запрос конструктором. Все наши отчеты будут «начинаться» одинаково. 8.1 Текст запроса Во-первых, разберемся, из какого объекта нашей информационной базы можно взять информацию о закупках товаров: только из приходных накладных, причем, если быть точным, из табличной части «Товары» документа «Поступление товаров». Эта таблица, которая физически содержит все строки табличных частей «Товары» всех документов «Поступление товаров», и будет источником нашего запроса (см. рис. 8.1). Рис. 8.1. Закладка «Таблицы и поля» конструктора запросов 111 Название (а правильнее сказать – «Псевдоним») таблицы источника конструктор предложит, сложив название документа и его таблицы «ПоступлениеТоваровТовары». При определенном разрешении экрана это может оказаться слишком длинно. Это название ни на что не влияет, но писать запрос неудобно. Чтобы переименовать таблицу, щелкните по ней правой кнопкой мыши и выберите пункт «Переименовать таблицу» (см. рис. 8.1). Выберем из таблицы три поля, которые могут быть интересны нашим пользователям: «Номенклатура», «Количество», «Сумма» и «Ссылка». «Цену» выбирать не будем, ведь в дальнейшем строки отчета будут сгруппированы по товарам, при этом итоги по колонкам «Количество», «Сумма» будут просуммированы. Суммировать цену вряд ли стоит, можно посчитать среднюю. 8.1.1 Неявные связи между таблицами «Ссылка» связывает строку табличной части с «шапкой» документа. Если рассматривать таблицы на физическом уровне, то они будут выглядеть так (см. табл. 8.1): Табл. 8.1 Документ в табличной модели данных Документы Строки табличной части Товары № док Дата Склад … Ссылка Ссылка № стр Товар Сумма 1 21.08 Склад 1 С1 С1 1 Товар1 10.00 2 22.08 Склад 2 С2 С1 2 Товар2 15.00 С1 3 Товар3 20.00 С2 1 Товар1 10.00 С2 2 Товар3 20.00 Одной строке в таблице «шапки» соответствует несколько строк из табличной части «Товары». Мы в качестве источника выбрали табличную часть «Товары». Но в ней есть ссылка на строку таблицы документов, в которой содержатся все реквизиты «шапки». Включив в отчет поле «Ссылка» из таблицы «Товары», мы получим возможность выполнять действия и с реквизитами «шапки» документа. 8.1.2 Отбор и параметры в запросе При наличии «Ссылки» на документ, сможет ли пользователь добраться до даты? Конечно. А условие поставить в поле «Отбор»? Тоже. Но он хочет сделать это проще. Для этого часть отборов можно прописать явно в запросе. Используют для этого предложение «ГДЕ», а для его написания закладку «Условия» конструктора запроса (см. рис. 8.2). 112 Рис. 8.2. Условия запроса Отличия отборов, которые мы делаем, используя текст запроса, от отбора в диалоге пользователя только в том, что написанные нами отборы он не сможет отключить. Было сделано два отбора. Первый из них, с флажком «Произвольный», уберет из результата запроса все документы, помеченные на удаление (раз удалили – значит, было за что). Стандартный реквизит документа «Пометка удаления» имеет тип <Булево> и не должен управляться пользователем, т.е. мы не хотим давать ему возможность отключать этот отбор. Поэтому условие может быть описано явно на равенство значению «ЛОЖЬ» (ПрихТовары.Ссылка.ПометкаУдаления=ЛОЖЬ) или как на картинке с использованием «НЕ». Второе условие отличается от первого тем, что мы хотим предоставить пользователю возможность выбрать интервал дат отчета. В таких случаях (и не только в таких) в условии используют параметры. В тексте запроса имена «Дата1» и «Дата2» будут начинаться со знака «&», и для правильной работы запроса до его выполнения этим именам обязательно нужно будет присвоить какие-то значения, пустыми они оставаться не могут. Имена параметров «Дата1» и «Дата2» мы придумали сами. Для отбора за интервал дат используется вариант сравнения «Между». Существуют и другие варианты, их можно посмотреть в выпадающем списке. Нам осталось нажать «ОК», посмотреть на текст запроса (см. листинг 8.1) и навести порядок в полях компоновки. 113 Листинг 8.1. Текст запроса о закупках товаров ВЫБРАТЬ ПрихТовары.Номенклатура, ПрихТовары.Количество, ПрихТовары.Сумма, ПрихТовары.Ссылка ИЗ Документ.ПоступлениеТоваров.Товары КАК ПрихТовары ГДЕ НЕ ПрихТовары.Ссылка.ПометкаУдаления И ПрихТовары.Ссылка.Дата МЕЖДУ &Дата1 И &Дата2 8.2 Доступные поля отчета о закупках Особое внимание уделим полю «Ссылка». Его имя мало о чем говорит пользователю. Изменим заголовок поля на «Документ» (см. рис. 8.3). Рис. 8.3. Заголовок поля «Ссылка» 8.3 Ресурсы запроса В прошлой нашей задаче отчету ничего не приходилось группировать и вычислять, он лишь показывал то, что лежит в таблице базы данных, и делал отборы. В этом отчете пользователь захочет увидеть не просто все строки всех документов, а подвести итоги: по товару, по контрагенту, по другим полям, сколько всего было куплено товаров данного вида или у данного поставщика. Запрос должен при этом, сгруппировав данные по товару (или контрагенту), просуммировать поля «Количество» и «Сумма». Все поля, над которыми нужно произвести вычисления (не обязательно суммирование, это может быть, например, расчет среднего или минимального значения), необходимо указать на закладке «Ресурсы». В общем случае туда переносятся все поля типа <Число>. При этом следует обратить внимание на колонку «Рассчитывать по ...», позволяющую задать те группировочные поля, по которым будут рассчитываться группируемые ресурсы. В нашем отчете два ресурса – «Сумма» и «Количество». С «Суммой» все более-менее понятно – все документы у нас в одной валюте учета (валюта в документе не выбирается), и по114 этому мы можем сложить все закупки и получить ответ, на какую сумму мы купили товаров, в том числе и всего за период. А «Количество»? Если представить, что товар у нас разнородный, то непонятно в какой единице измерения будет представлен итог по отчету (или по контрагенту): штуки + килограммы + метры... В штуко-килограммо-метрах... Это вряд ли нужно пользователю. Значит, подводить итог количества нужно только по товару, что мы и укажем (см. рис. 8.4). Рис. 8.4 Закладка «Ресурсы» 8.4 Параметры компоновки В параметрах компоновки отображаются все параметры запроса, которые начинаются в тексте со знака «&», т.е. кроме тех, которые были заданы явно и жестко в самом тексте (условия на примитивные типы данных). В нашем случае это интервал дат. Можно, конечно, оставить их и так, но гораздо удобнее воспользоваться механизмом стандартного выбора периода, который позволяет осуществлять выбор из списка со стандартными периодами. Чтобы добавить такую возможность в наш отчет, добавим новый параметр «Период» типа «Стандартный период» и свяжем его с параметрами запроса (см. рис. 8.5). Новый параметр создаст новый элемент управления в форме отчета, в котором можно будет удобно выбрать стандартный период из списка. 115 Рис. 8.5. Закладка «Параметры» схемы компоновки Для того, чтобы связать новый элемент управления «Период» с параметрами запроса, используются выражения (см. листинг 8.2). Листинг 8.2. Описание параметров стандартного периода &Период.ДатаНачала &Период.ДатаОкончания Обратите внимание на флажки «Ограничение...»: они управляют возможностью пользователя увидеть эти параметры в настройке отчета. Следует также упомянуть, что поле типа <Дата> в системе «1С:Предприятие» всегда содержит в себе и дату, и время. Если время не нужно, оно может быть скрыто, но этот параметр времени все равно остается, только теперь он равен «0 часов 0 минут 0 секунд» и соответствует времени начала дня. Если мы специально ничего не сделаем, то при формировании отчета за период с «01.01.2018 по 31.12.2018» пользователь получит отчет по конец «30.12.2018», а «31.12.2018» в отчет не попадет вовсе. Чтобы с этим бороться, следует воспользоваться стандартным периодом: он сам возьмет конец дня, т.е. «23:59:59» от конечной даты интервала. 8.5 Вариант отчета «Список» Настроим несколько вариантов отчета для нашего пользователя. Кстати варианты настроек отчета можно делать с помощью конструктора, который открывается на закладке «Настройки» по кнопке верхней панели . Для построения первого отчета воспользуемся конструктором настроек. 116 На первой странице (см. рис. 8.6) выбираем тип отчета – «Список». Рис. 8.6. Первая страница конструктора настроек На второй – из всех возможных полей выбираем те, которые попадут в этот вариант отчета (см. рис. 8.7). Рис. 8.7. Вторая страница конструктора настроек На третьей странице выбираем поля, по которым будет выполняться группировка данных, т.е. они будут строками отчета (см. рис. 8.8). 117 Рис. 8.8. Третья страница конструктора настроек На четвертой выбираем поле для упорядочивания строк отчета. Можем не выбирать ничего – отчет будет отсортирован по основному представлению (наименование) группировочного поля (номенклатура). Конструктор сделал, конечно, не все, но многое. Сделаем остальное вручную в схеме компоновки данных. Установим период отчета по умолчанию: используя стандартный период, выбираем «Этот год» (см. рис. 8.9). Не смотрите на то, что проставлены даты текущего года: когда отчет будет формироваться пользователем в следующем году, по умолчанию там будут стоять даты начала и конца следующего года. Рис. 8.9. Заполнение параметра «Период» На закладке «Другие настройки» установим заголовок «Ведомость закупок». Остался последний (по порядку, но не по важности) штрих – указать, какие из этих настроек будут доступны пользователю для изменения при формировании отчета. 118 Для отчета в целом (выделите мышкой в верхней панели «Отчет») укажем следующие пользовательские настройки (см. рис. 8.10). Рис. 8.10. Состав пользовательских настроек «Отчета» Кроме того, нам придется вернуться на закладку «Параметры» и с помощью кнопки в нижней правой части окна задать видимость для параметра «Период» (см. рис. 8.11). Рис. 8.11. Пользовательские настройки параметра «Период» Отчет готов, можно проверить его работу в пользовательском режиме (см. рис. 8.12). 119 Рис. 8.12. Готовый вариант «Ведомость закупок» Чтобы проверить работу отчета, мы введем несколько документов «Поступление товаров» от разных поставщиков, по разным организациям, купив в разных месяцах разные товары. По умолчанию, программа считает, что документы должны записываться в реальном времени (оперативно). И если документ, проводимый задним числом, программой допускается, то будущей датой провести документ нельзя. Документ имеет три состояния: «записан», «помечен на удаление» (пиктограмма с красным крестом), «проведен» (зеленая галочка). В реальной практике документы, не проведенные – еще до конца не оформлены и в отчеты не попадают. Для этого в запросах используется условие «Проведен=Истина», но мы поставили условие менее жесткое. Нам достаточно, чтобы не попадали удаленные документы. Поэтому нам можно вводить документы будущей датой. И не проводить их (кнопка «Провести и закрыть»), а записывать (кнопка «Записать»). Документы можно копировать с помощью меню «Еще». 8.6 Расшифровка отчета Пользователь, используя возможности настройки, которые мы ему предоставили, может перенастроить отчет. Например, он хочет детализировать отчет до первичного документа, используя «Расшифровку отчета». Чтобы вызвать расшифровку, достаточно дважды щелкнуть мышкой по цифре в отчете (см. рис. 8.13). Например, пользователю интересно, какими документами покупались ручки «Паркер». 120 Рис. 8.13. Вызов расшифровки отчета В результате выбора поля «Документ» будет открыт еще один вариант отчета (см. 8.14) с группировкой по документу. Рис. 8.14. Отчет расшифровки Разработайте аналогичный по функциональности отчет «Отчет о продажах», который будет получать данные из табличной части «Товары» документа «Реализация товаров». 8.7 Связанные поля Может ли сейчас пользователь получить отчет о закупках с отбором по одной организации? Конечно, может! Но ему нужно догадаться, как это сделать. Для этого нужно нажать на кнопку «Настройки…», перейти на закладку «Отбор», найти там «Документ», раскрыть «плюсик», найти «Организацию» и на нее поставить отбор (см. рис. 8.15). 121 Рис. 8.15. Отбор по организации из документа Поэтому есть предложение – давайте сделаем это все за пользователя, чтобы все поля, которые ему могут быть нужны, были видны на верхнем уровне списка доступных полей. Для этого в конфигураторе, в схеме компоновки данных, на первой закладке «Наборы данных» откроем конструктор запроса и изменим текст запроса. Найдем внутри таблицу, которую мы выбрали источником данных запроса, поле «Ссылка» и из него вытащим все, что может пригодиться пользователю (см. рис. 8.16). Рис. 8.16. Получение связанных полей из «Ссылки» 122 Сохраним новый текст запроса и отредактируем заголовки доступных полей (см. рис. 8.17). Рис. 8.17. Изменение заголовков доступных полей 8.8 Ограничения поля Однако теперь у пользователя есть возможность установить отбор по «Документ.Организация = Фабрика» и «Организация=Торговый дом». Какой будет результат? Правильно – никакой. Что делать? Запретить пользователю заходить внутрь «Документа/Ссылки», т.е. убрать «плюсик» слева от поля «Документ», когда пользователь работает с отбором отчета. Используем для этого галку колонки «Условие». Галка на верхнем этаже вообще запретит использовать в отборе Документ, а галка нижнего этажа запретит использовать в отборе вложенные поля (реквизиты) документа (см. рис. 8.18). Рис. 8.18. Установка запрета использования реквизитов ссылки в отборе 123 8.9 Кросс-таблица Теперь, когда у нас появились поля «Контрагент», «Организация», «Склад», которые можно использовать вместе с «Номенклатурой» для группировки, сделаем отчет типа «Таблица» (кросс-таблица, шахматка). Так как данные в отчете те же самые, то изменить нам нужно только вкладку «Настройки» схемы компоновки данных. У каждого отчета может быть несколько различных представлений одних и тех же данных. Их называют вариантами. Один такой (основной) у нас уже есть. Из чего состоит вариант отчета? Структура (группировки....), выбранные поля, настройка периода и еще много разных флажков. Чтобы сэкономить время, скопируем вариант отчета, переименуем в «Шахматку» и изменим его настройки (см. рис. 8.19). Рис. 8.19. Копирование варианта отчета Когда новый вариант появился, задайте ему имя и представление, установите (внимание!) на него курсор и измените настройки в правой части экрана. Удалите группировку «Номенклатура» и добавьте вместе нее «Таблицу» (см. рис. 8.20). Рис. 8.20. Создание новой таблицы Создадим группировку для строк «Номенклатура», для колонок – «Контрагенты» щелчком по кнопке (см. рис. 8.21). Кроме структуры отчета изменим выбранные поля (оставим только сумму), на вкладке «Другие настройки» зададим новый заголовок «Шахматка закупок». 124 Рис. 8.21. Таблица и выбранные поля отчета Для отчета в целом (курсор стоит на слове «Отчет» в корне структуры отчета в верхнем окне) снимем галочку «Группировки» (кнопка ). Она имеет смысл, в первую очередь, для отчета типа «Список» (см. рис. 8.22). Рис. 8.22. Настройки пользовательских полей отчета Потом переместим курсор на слово «Таблица» и еще раз нажмем на кнопку с зеленым плюсом верхней части окна (см. рис. 8.23). 125 Рис. 8.23. Настройки пользовательских полей отчета типа «Таблица» С помощью этих настроек пользователь сможет сам управлять группировками строк и колонок. Отчет готов, нажмите кнопку «Выбрать вариант...» (см. рис. 8.24). Рис. 8.24. Результат отчета типа «Таблица» Используя настройки строк и колонок, пользователь сам сможет изменить структуру отчета. Например, вниз – «Номенклатура», вправо – «Склады». При желании может сохранить полученную настройку как новый вариант (меню «Еще»). Этот вариант будет виден только текущему пользователю (см. рис. 8.25). 126 Рис. 8.25. Пользовательская настройка отчета Шахматка закупок Измените отчет о продажах, чтобы он тоже имел вариант в виде кросс-таблицы (строки – номенклатура, колонки – покупатели). 8.10 Функции языка запросов Решим задачу группировки нашего отчета о закупках, который мы по умолчанию формируем за один год, помесячно. Для этого нам нужно добавить в текст запроса поле, которое будет однозначно идентифицировать месяц, к которому принадлежит дата документа. Самый простой вариант – функция НАЧАЛОПЕРИОДА, которая, получив от нас дату документа и название периода «МЕСЯЦ», сможет рассчитать дату начала месяца. На вкладке «Наборы данных» откроем конструктор запроса, затем на вкладке «Таблицы и поля» в правом окне конструктора нажмем кнопку для добавления в список выбранных полей новой функции (см. рис. 8.26). 127 Рис. 8.26. Редактор функций Текст функции (см. листинг 8.3) можно написать с клавиатуры или выбирая из окон редактора функций. Листинг 8.3. Функция «НачалоПериода» НАЧАЛОПЕРИОДА(ПрихТовары.Ссылка.Дата, МЕСЯЦ) Как работает это функция? Мы ей даем дату (дату документа) и ключевое название периода (МЕСЯЦ), а она возвращает нам дату начала месяца: мы ей – 10 января, а она нам первое; мы ей – 20-е января, а она нам опять первое. А нам это и было нужно, чтобы сложить все документы за январь. Осталось только присвоить новому полю запроса псевдоним. Сделать это можно на закладке конструктора запросов «Объединения/псевдонимы» (см. рис. 8.27). Назовем его «ПериодМесяц». 128 Рис. 8.27. Псевдоним нового поля В результате в списке доступных полей появилось поле «ПериодМесяц». Угадайте, какого оно типа данных? Правильно: <Дата>. Причем, как и положено со временем, т.е. вместо «Май 2019» наш пользователь увидит в группировке отчета «01.05.2019 00:00:00», что неудобно. Для вывода примитивных типов данных (даты, времени, чисел, строки, булево) в нужном формате используется функция «Формат». Рассмотрим подробнее функцию и способ составления форматной строки. Синтаксис функции достаточно прост: Формат(<Значение>,<Форматная строка>), где Значение – форматируемое значение (в нашем случае поле «ПериодМесяц»); Форматная строка — строка, заданная определенным образом, из которой формируется правило обработки формата. Для облегчения труда разработчика фирма «1С» встроила в платформу специальный конструктор форматной строки. Для запуска конструктора в списке доступных полей компоновки выделяем поле «ПериодМесяц», затем выбираем в последней колонке нижний этаж «Параметры редактирования». В списке параметров редактирования выбираем «Формат редактирования», а дальше на закладке «Дата» ознакомимся с форматами дат, при этом в нижней панели окна можно увидеть форматную строку (см. рис. 8.28). 129 Рис. 8.28. Конструктор форматной строки Однако нужного формата (месяц прописью и год четыре символа) в списке нет. Такая форматная трока имеет вид: ДФ='ММММ гггг'. Зададим функцию Формат (см. рис. 8.29): в списке доступных полей компоновки выделяем поле «ПериодМесяц», затем выбираем в последней колонке верхний этаж «Выражение представления» и вводим функцию: Формат(ПериодМесяц, "ДФ='ММММ гггг'") Рис. 8.29. Формат представления даты в поле ПериодМесяц Так как мы разрешили настраивать группировки строк и колонок в пользовательском режиме, сделаем это (см. рис. 8.30). 130 Рис. 8.30. Результат шахматки помесячно Добавьте в отчет о закупках новую группировку поквартально (см. рис. 8.31). Для этого нужно добавить новую функцию в текст запроса: НАЧАЛОПЕРИОДА(ПрихТовары.Ссылка.Дата, КВАРТАЛ) и описать форматную строку: Формат(ПериодКвартал, "ДФ='к ""кв."" гггг'") 131 Рис. 8.31. «Шахматка» поквартально 8.11 Диаграмма Учетным работникам такой графический вариант отображения данных обычно не нужен, а работникам среднего звена – нужен (удобно показывать начальству). Создадим еще один вариант отчета – «Диаграмма». Можно скопировать его из «Шахматки» на вкладке «Настройки» схемы компоновки данных (см. рис. 8.32). 132 Рис. 8.32. Настройка варианта «Диаграмма» Основные изменения: вместо «Таблица» создаем элемент «Диаграмма». Точки – ПериодМесяц, Серии – Номенклатура. Для самой диаграммы в свойствах элементов пользовательских настроек указываем флажки «Группировки серий» и «Группировки точек», чтобы пользователь мог ими управлять. Измените заголовок отчета на «Диаграмма закупок», выбрать ее вид (гистограмма с накоплением объемная) и отображение таблицы данных. Отчет готов (см. рис. 8.33). 133 Рис. 8.33. Готовый вариант «Диаграмма» 8.12 Внешние отчеты В конфигурации имеются два объекта, которые могут существовать отдельно от конфигурации во внешнем файле. Это отчеты и обработки. Любой из разработанных нами отчетов можно по правой кнопке мыши «Сохранить как внешнюю обработку, отчет». Или с самого начала разрабатывать отчет как внешний. Тогда нам нужно было бы добавлять отчет не как новую ветку в дереве объектов конфигурации, а используя «Главное меню / Файл / Новый – «Внешний отчет». Диалог немного отличался бы от того, к которому мы привыкли, но разработанный нами отчет функционально ничем бы не отличался от встроенного. Чтобы открыть для изменения (настройки, конфигурирования) внешний отчет, мы должны открывать его из главного окна конфигурации через «Главное меню / Файл / Открыть». Если же воспользоваться главным меню в пользовательском режиме и открыть этот же файл с расширением *.erf, можно будет запустить его на выполнение. Какие плюсы дает нам разработка отчета во внешнем файле: проще отлаживать. Если допущена ошибка, нам не нужно каждый раз закрывать пользовательский режим и запускать программу за134 ново. Достаточно закрыть в пользовательском режиме окно отчета. Изменить файл в конфигураторе, сохранить его (не закрывая открытого окна пользовательского режима) и заново открыть его через «Файл/ Открыть» для проверки: проще переносить – можно взять с собой, выслать по почте. При условии, что конфигурация, в которой получатель этого отчета его откроет, такая же, он сможет им пользоваться. Из минусов можно перечислить только один – можно случайно потерять файл отчета. Поэтому обычно все отчеты разрабатываются как внешние, а потом уже по правой кнопке мыши на ветке «Отчеты» конфигуратора «Вставить внешнюю обработку, отчет...» подгружаются в конфигурацию, чтобы не потерялись. Контрольные вопросы 1. Перечислите доступные варианты отчетов. 2. Как открыть конструктор настроек вариантов отчета? 3. Какой механизм используется для детализации отчета до первичного документа? Как его вызвать? 4. Как получить отчет о закупках с отбором по одной организации? 5. Как осуществляется копирование варианта отчета? 6. Как задать состав пользовательских настроек отчета? 7. Как выбрать вариант отчета в пользовательском режиме? 8. Как работает функция НАЧАЛОПЕРИОДА на примере даты 15.04.2019? 9. Как работает функция МЕСЯЦ на примере даты 15.04.2019? 10. Опишите синтаксис функции «Формат». 11. Что такое «форматная строка»? 12. Как задать тип диаграммы? 13. Что такое внешний отчет и каковы его преимущества? 135 Лабораторная работа №9. Регистры – первое знакомство Мы продолжаем изучать объекты конфигурации, возможности запроса и компоновки данных. Эта лабораторная работа посвящена первому знакомству с объектом «Регистр». 9.1 Что такое регистр Рассматривая задачу учета, в теории можно выделить два вида учетных регистров: хронологические и систематические. Учетные регистры с хронологической записью предназначены для записи операций по мере их возникновения. Они удобны для отражения свершившихся операций, но неудобны для получения отчетов – слишком сложные запросы, которые будут долго выполняться. Аналогами хронологических учетных регистров можно считать документы. По документам можно строить отчеты (мы это делали), но на реальном объеме данных это будет неприемлемо медленно. Систематические регистры хранят информацию сгруппированно, систематизированно. Систематические учетные регистры неудобны пользователю для записи, но удобны для составления отчетов, так как хранят информацию сгруппированно по тем самым признакам, по которым она будет выводиться в отчет. Для описания систематических учетных регистров используются объекты конфигурации «Регистры». 9.2 Виды регистров В конфигурации предусмотрено несколько объектов для хранения данных, как в регистрах систематической записи. Это: регистры сведений; регистры накопления; регистры бухгалтерии; регистры расчета. Запись в эти регистры, как правило, осуществляется с помощью документа (исключение – регистры сведений, не подчиненные регистратору), а извлекается запросами в отчетах. Каждый из них предназначен для решения своей задачи, и именно эту задачу он решает оптимально. Начнем изучение регистров с регистра сведений. Регистр сведений предназначен для хранения состояний объектов, в том числе состояний, изменяющихся во времени вместе с историей этих изменений. 136 9.3 Регистр сведений «Артикулы» Контрагенты Рассмотрим задачу хранения артикулов товаров для наших покупателей. Они требуют от нас при составлении для них отчетов (а в реальной практике – при печати документов) указывать в отчете артикул товара, под которым он учитывается у них в учете. Например, у нас есть два покупателя: «Покупатель 1» и «Покупатель 2». И покупают они один и тот же товар, например, «Диван». Но в учете «Покупателя 1» «Диван» проходит под номером «123», а в учете «Покупателя 2» – под номером «456». Как можно в нашей программе это сохранить? Сделать еще один справочник «Артикулы»? Реквизиты «Номенклатура», «Контрагент» и «Артикул»? Но как отследить, чтобы пользователь не ввел случайно два элемента этого справочника с одним и тем же контрагентом и товаром? Кроме того, каждый элемент обязательно помнит «Код», «Наименование» и, главное, «Ссылку», которая используется для хранения ссылки на этот элемент в других таблицах, и нам все это совершенно не нужно. Чтобы создавать таблицы для хранения некоторых (одного или нескольких) значений для уникального сочетания других (одного или нескольких) значений, используются регистры сведений. Строка регистра сведений не имеет поля «Ссылка» (уникального идентификатора, через который можно ссылаться в полях других таблиц на запись этой таблицы) и поддерживает правило: «Измерение 1» + ... + «Измерение N» = «Ресурс 1» + ... + «Ресурс N», где сочетание измерений уникально и дает однозначный ответ о значении ресурсов для этого сочетания измерений. Наш регистр можно представить в виде системы координат (см. рис. 9.1). Артикул Номенклатура Рис. 9.1. Регистр сведений «Артикулы» Каждый регистр состоит из трех видов полей: 1. Измерения – то, в разрезе чего хранятся данные. Для регистра сведений сочетание этих полей уникально, и программа не разрешит ввести две строки с одинаковым сочетанием значений в измерени137 ях регистра. В нашем случае измерениями будут «Номенклатура» и «Контрагент». 2. Ресурсы – то, что хранится, в нашем случае «Артикул». 3. Реквизиты – дополнительные свойства строки регистра, комментарий, сделанный к записи (нам не нужны). Добавим в нашу конфигурацию новый регистр сведений «Артикулы» (см. рис. 9.2). Рис. 9.2. Регистр сведений «Артикулы» Регистр отнесем к подсистеме «Продажи». На закладке «Данные» опишем ресурсы и измерения хранения (см. рис. 9.3). Регистр будет содержать два измерения: «Номенклатура» – типа <СправочникСсылка> на справочник «Номенклатура», «Контрагент» – типа <СправочникСсылка> на справочник «Контрагенты», и один ресурс «Артикул» типа <Строка> (см. рис. 9.3). 138 Рис. 9.3. Данные регистра сведений, измерение «Номенклатура» Для обоих изменений устанавливаем флаг «Ведущее», что означает следующее: если мы введем новый товар в справочнике, для него опишем разные артикулы для разных контрагентов, а потом, так ни разу и не воспользовавшись этим товаром в документах, удалим его, то артикулы этого товара будут удалены из регистра. В пользовательском режиме заполним регистр (см. рис. 9.4). 139 Рис. 9.4. Заполненный регистр «Артикулы» Готово. Теперь для каждого товара каждого контрагента можно хранить свои свойства. 9.4 Соединения в запросе Данные в регистр (как и в любую, наверное, таблицу) мы вносим для того, чтобы потом получить их где-то в отчетах. А отчеты мы строим с помощью механизма компоновки, при этом описываем какие поля из какой таблицы получить с помощью языка запросов. Задача – распечатать табличную часть документа «Реализация товаров» таким образом, чтобы напротив каждой строки оказался артикул товара, соответствующий покупателю (контрагенту) документа. 9.4.1. Новый отчет «Печать накладной» В реальной практике никогда не используют механизм отчетов и компоновки данных для подготовки печатных форм – он избыточен. Основная задача компоновки – дать пользователю возможность самому настроить представление данных в отчете, отборы, сортировки, диаграммы. Но мы пока не умеем программировать, а без программирования работать непосредственно с объектом «Запрос» нельзя. Поэтому мы воспользуемся уже знакомым нам механизмом отчетов и компоновкой данных. Только на этот раз мы намного меньше уделим 140 внимания красоте оформления отчета и будем ставить лишь те «галочки», без которых он не работает. Добавим новый отчет «ПечатьНакладной». Включим его в подсистему «Продажи» нашей конфигурации. Откроем схему компоновки данных. Добавим в нее новый «набор данных – запрос». Откроем конструктор запроса. Первые шаги в любом отчете одинаковы. Первым источником данных выберем табличную часть «Товары» (переименовали ее в «РасхТовары») документа «РеализацияТоваров» (см. рис. 9.5). Рис. 9.5. Таблица и поля конструктора запросов Для этой таблицы поставим условие на ссылку документа, чтобы можно было распечатать отчет только по одному документу (см. рис. 9.6). 141 Рис. 9.6. Вкладка условия Теперь добавляем «недостающие» данные из регистра сведений. Для этого вернемся на вкладку «Таблицы и поля». Найдем в списке таблиц базы данных регистр сведений «Артикулы» и перенесем его в список выбранных таблиц. Нам из него нужен только «Артикул» (см. рис. 9.7). Рис. 9.7. Добавление второй таблицы А теперь – самый важный момент. Если на этом остановиться, в результате запроса количество строк будет равно количеству строк в документе, умноженному на количество строк в регистре сведений. Ко всем товарам документа запрос подберет все артикулы всех контрагентов и номенклатуры. Такой результат не нужен никому. Обратите внимание на последние две картинки конструктора. Чем они отличаются? Составом вкладок. Как только была выбрана вторая таблица, появилась вкладка «Связи» (см. рис. 9.8). Перейдем туда. 142 Рис. 9.8. Вкладка «Связи» У этой вкладки две основные задачи. Во-первых, выяснить какая таблица будет главной, т.е. попадет в результат запроса целиком (та, рядом с которой стоит галочка «все»). А во-вторых, определить, по каким полям она будет подбирать строчки в неглавной таблице, чтобы показать их рядом с главной. В нашем случае у строк должны совпадать «Номенклатура» и «Контрагент» (которого можно найти по ссылке документа). Результат работы конструктора – текст запроса (см. листинг 9.1). Листинг 9.1. Текст запроса ВЫБРАТЬ РасхТовары.НомерСтроки, РасхТовары.Номенклатура, РасхТовары.Цена, РасхТовары.Количество, РасхТовары.Сумма, Артикулы.Артикул ИЗ Документ.РеализацияТоваров.Товары КАК РасхТовары ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Артикулы КАК Артикулы ПО РасхТовары.Номенклатура = Артикулы.Номенклатура И РасхТовары.Ссылка.Контрагент = Артикулы.Контрагент ГДЕ РасхТовары.Ссылка = &Ссылка Главное, на что надо обратить внимание, – соединение таблиц. Слово «ЛЕВОЕ» означает, что та таблица, которая стоит в соединении слева (документ), будет главной и попадает в отчет целиком. А та, которая справа, попадет лишь в части записей, которые подошли по сочетанию двух правил (совпадает номенклатура и контрагент). Кроме «ЛЕВОГО» бывают и другие варианты соединений, но они выходят за границы нашего курса. Аналогичное ему «Правое соединение» позволяет включить в отчет все записи из второй таблицы и «подобранные» по условию записи из «Левой». В нашем примере останутся все строки, которые есть в регистре «Артикулы». Внешнее (полное) соединение позволит получить в результате за143 проса все записи из обеих таблиц. Те из них, которым удастся подобрать соответствующие, будут напротив друг друга. Остальные – как попало, сами по себе. Для этого нужно проставить флажки «Все» в конструкторе и слева, и справа. В нашем примере будут все строки накладной, даже те, для которых нет артикула, и все артикулы для контрагента, даже если такого товара в этой накладной нет. Внутреннее соединение позволит оставить в результате запроса только те строки, которые были получены из обоих источников по условию соединения. В нашем примере останутся все строки накладной, для которых заданы артикулы. Те строки, для которых нет артикулов, не будут включены в отчет, и артикулы для товаров, которых нет в накладной, тоже. Отчет мы делаем с помощью компоновки, поэтому далее нужно проставить необходимый минимум флажков, чтобы он заработал. Закладка «Ресурсы» – переносим «Сумму» вправо, чтобы получить итог по накладной. Закладка «Параметры» – снимаем галку «Ограничение доступности» с «Ссылки» и устанавливаем свойство «Использование=Всегда», чтобы нельзя было отключить передачу этого параметра в запрос. Можно также поставить галочку «Запрет незаполненных значений» (см. рис. 9.9). Рис. 9.9. Настройка закладки «Параметры» На вкладке «Настройки» в конструкторе настроек выбираем «Список» и задаем список полей, которые будут отражаться в отчете (см. рис. 9.10). 144 Рис. 9.10. Вкладка настройки компоновки И не забудьте на вкладке «Параметры» щелчком по кнопке справа установить «зеленый плюсик» (см. рис. 9.11). Рис. 9.11. Параметры настроек варианта отчета В пользовательском режиме внесите несколько записей о реализации товаров в раздел «Продажи / Реализации товаров» Покупателю 1 и Покупателю 2. Отчет готов (см. рис. 9.12). В зависимости от того, какой контрагент выбран в накладной, для одних и тех же товаров будут показываться разные артикулы. 145 Рис. 9.12. Готовый отчет «Печать накладной» 12.4.2. Тип данных <NULL> При всех вариантах соединения, кроме внутреннего, в результате запроса почти гарантированно получаются строки, содержащие поля типа <NULL>. Этот тип специально придуман для обозначения ситуации в запросе, когда мы что-то искали и ничего не нашли. Он означает, что это поле не просто пустое (пустой может быть, например, пустая ссылка на товар, который забыли выбрать в накладной), а совсем пустое, т.е. NULL. Единственное, что с ним можно сделать, это идентифицировать, т.е. понять, что есть NULL, и заменить его на что-то более понятное для пользователя. Для этого можно использовать или литерал запроса (листинг 9.2), Листинг 9.2. Функция запроса ECTЬNULL ЕСТЬNULL(Артикулы.Артикул, “Не задан артикул”) или оператор ВЫБОР, который позволяет выполнить сравнение и вычисление поля в запросе (листинг 9.3). Листинг 9.3. Оператор ВЫБОР с проверкой на NULL ВЫБОР КОГДА Артикулы.Артикул ЕСТЬ NULL ТОГДА “Не задан артикул” ИНАЧЕ Артикулы.Артикул КОНЕЦ ECTЬNULL – узкоспециализированный вариант. Он позволяет проверить поле запроса (первый параметр) на равенство NULL и заменить его вторым значением второго параметра. Наиболее актуально его использовать для числовых полей, так как если в ресурсе запроса вдруг среди чисел 146 в одной из строк окажется NULL, посчитать итог по колонке уже не получится (10+15+NULL...=NULL). Оператор ВЫБОР позволяет выполнить любое сравнение с любыми условиями и вычислить поле (функцию) языка запроса. Например, если нашего пользователя интересуют продажи, сделанные в выходные (т.е. в субботу и воскресенье), можно описать поле как в листинге 9.4. Листинг 9.4. Оператор ВЫБОР для вычисления продаж в выходные дни ВЫБОР КОГДА ДЕНЬНЕДЕЛИ(РасхТовары.Ссылка.Дата) > 5 ТОГДА РасхТовары.Сумма ИНАЧЕ 0 КОНЕЦ Функция «ДеньНедели» получив в качестве параметра дату документа, возвращает число – номер дня в неделе: для понедельника – 1, для вторника – 2, для пятницы – 5, а для субботы и воскресенья – 6 и 7 соответственно. В любом случае не забудьте задать псевдоним для поля на закладке «Объединения и псевдонимы» конструктора запросов, по умолчанию такие поля называются «Полеl», «Поле2» и т.д. 9.5 Периодические регистры сведений Регистры сведений мы уже активно используем при разработке конфигурации, все они хранят значения ресурсов для некоторого уникального сочетания измерений. А если это свойство изменяется во времени? Каждый день, как это делает курс валюты; каждый месяц, как база распределения косвенных расходов в производстве; или каждый год, как учетная политика организации. Для решения задач хранения истории и получения актуальных, изменяющихся во времени значений используются периодические регистры сведений. Классический пример: курсы валют. Для каждой валюты из справочника нужно сохранить значение курса на дату. Такой регистр можно представить себе в виде схемы (см. рис. 9.13): 147 Время Курсы валют Валюты Рис. 9.13. Измерения хранения курсов «Время» – это тоже измерение. И можно было создать знакомый нам регистр сведений, добавив в него два измерения – «Дата курса» и «Валюта» и один ресурс – «Курс». Задача хранения курсов для валют по датам будет решена. Что же мешает так поступить и не придумывать новых сущностей? Не будет решена задача получения данных. Как вы думаете, какая информация будет чаще необходима пользователю: покажите мне все курсы по валюте за период; покажите мне курс этой валюты, введенный на сегодня (другой день); покажите мне актуальный курс валюты на сегодня, притом, что сегодня, а может, и вчера торгов не было, курс не изменялся и в регистр не вводился. И, стало быть, нужно «поднять» курс, который был введен позавчера... Думаю, ответ очевиден. Актуальные значения ресурсов по измерениям нужны будут чаще, а получить их будет не так-то просто: придется делать довольно сложный запрос, который подберет наиболее близкий по дате курс. В некоторых случаях такие запросы оправданны, например, когда нужно получить значения актуальных курсов на диапазон дат, но чаще нужно получить данные на одну дату и хочется сделать это как можно проще. 9.5.1. Курсы валют Для решения этой задачи и была добавлена периодичность регистра сведений. Реализуем задачу хранения курсов валют. Добавим новый регистр сведений «КурсыВалют», который будет относиться к подсистеме «Общее» (см. рис. 9.14). 148 Рис. 9.14. Регистр сведений «Курсы валют» Установим для него режим записи «Независимый» и периодичность «В делах дня». Мы исходим из предположения, что курс не может изменяться несколько раз в день, поэтому не имеет смысла хранить время заведения курса, достаточно даты. Кроме варианта «В пределах дня» существуют и другие варианты (секунда, месяц, квартал, год). В любом случае, в регистр будет добавлено «предопределенное» измерение «Период», тип <Дата>. В нашем случае в него будет записываться начало дня (14.09.2019 0:00:00), при периодичности «В пределах месяца» – дата начала месяца (01.09.2019 0:00:00), а при периодичности «В пределах секунды» – дата с возможностью выбора времени (14.09.2019 15:48:20). Закладка «Данные» регистра (см. рис. 9.14) включает одно измерение – «Валюта» (тип <СправочникСсылка.Валюты>), ведущее, и один ресурс – «Курс» (<число>, четыре знака после запятой) (см. рис. 9.15). 149 Рис. 9.15. Данные регистра «Курсы валют» Готово. Можно заполнять курсы. Вопрос: если надо хранить еще и кратность? Правильно – еще один ресурс. А если у нас несколько видов курсов (курс ЦБ, курс ММВБ, внутренний курс, внутренний курс + 2% и т.д.)? Правильно – еще одно измерение регистра «Вид курса». Зайдите в справочник «Валюты» и по гиперссылке с панели функций формы (см. рис. 9.16) перейдите в регистр сведений: (при условии, что «Валюта» является ведущим измерением). Рис. 9.16. Курсы валюты При вводе данных платформа не разрешит завести два курса на одну дату по одной и той же валюте – сочетание измерений остается для регистра уникальным. Просмотр всех курсов всех валют доступен в форме списка регистра 150 из раздела «Общее», в подсистему которого мы включили этот объект. 9.5.2. Виртуальные таблицы регистра сведений Если открыть теперь конструктор запросов и посмотреть на те таблицы, которые добавились в табличную модель данных, мы обнаружим, что для одного регистра сведений добавилось три таблицы: «КурсыВалют» – таблица по имени регистра, которая позволяет распечатать курсы валют по датам, когда эти курсы были заведены; «КурсыВалют.СрезПервых» – таблица, которая ищет первый актуальный после указанной даты курс по валютам; «КурсыВалют.СрезПоследних» – таблица, которая ищет последний актуальный курс валюты на указанную дату. Таблицы «Срез первых» и «Срез последних» называют виртуальными. Они не хранятся в базе данных, фактически их нет, они появятся только тогда, когда вы задействуете их в запросе. По своей сути это не таблица, а написанный разработчиками и заботливо сохраненный для нас текст запроса, который решает наиболее часто встречающиеся задачи анализа периодических значений. Описанные виртуальные таблицы, хотя и не хранятся в базе данных, но могут использоваться в запросах и участвовать при формировании динамических списков форм. 9.5.3. Динамический список с произвольным запросом На примере регистра сведений «Курсы валют» и актуальных курсов рассмотрим механизм использования в динамическом списке формы произвольных запросов. В нашей конфигурации есть справочник «Валюты», значения которого используются как основной разрез хранения курсов валют (ведущее измерение). Пользователь совершенно не обязан знать и понимать структуру хранения данных (список валют – отдельно, курсы валют по датам – отдельно). Для него понятия «Валюта» и «Курс» неотделимы. Вполне разумно, что когда он открывает справочник «Валюты», он хочет видеть актуальные курсы валют по каждой строке. Те самые курсы, которые являются на текущую дату последними и будут использоваться при работе системы сегодня. Создадим с помощью конструктора форму списка справочника «Валюты», для этого перейдем на закладку «Формы» и нажмем копку . Форма списка обязательно должна быть управляемой – в обычных формах эту задачу можно решить только программированием (см. рис. 9.17). 151 Рис. 9.17. Конструктор формы справочника «Валюты» Форма справочника будет содержать основной реквизит формы «Список», тип <Динамический список>. Откроем окно свойств реквизита «Список» формы и установим флаг «Произвольный запрос» (см. рис. 9.18). 152 Рис. 9.18. Свойства реквизита «Список» формы справочника «Валюты» Щелчком по свойству «Настройка списка» (см. рис. 9.18) теперь будет открываться не только стандартный диалог настроек механизма компоновки данных, но и окно для ввода текста запроса. Теперь мы видим, какой запрос выполняет динамический список, чтобы показать содержимое справочника пользователю (см. рис. 9.19). Рис. 9.19. Текст запроса Воспользуемся конструктом запроса (кнопка «Конструктор запроса», 153 см. рис. 9.19), чтобы изменить запрос реквизита «Список». Перенесем в состав выбранных таблиц таблицу «КурсыВалют.СрезПоследних» (см. рис. 9.20). Рис. 9.20. Закладка «Таблицы и поля» конструктора запроса То, что таблица является виртуальной, мы видим не только из названия (ведь псевдоним можно было и изменить), но и из того, что становится доступна кнопка «Параметры виртуальной таблицы» над списком выбранных таблиц, когда активизируешь эту таблицу. Если на нее нажать, то мы получим возможность указать условия выполнения запроса, который выполнит виртуальная таблица (см. рис. 9.21). Рис. 9.21. Параметры виртуальной таблицы «Срез последних» Если параметры не заданы, как в нашем случае, будет выполнен запрос на «пустую» дату и без отбора по валюте. Это означает, что виртуальная таблица получит самые последние курсы по всем валютам. Для каждой валюты она получит значение актуального курса и период, когда этот последний курс был заведен. Вот эти поля мы добавим в список выбранных. Использование виртуальной таблицы без параметров встречается редко. Это аналогично требованию «Мне, пожалуйста, все и отовсюду». Параметры задают условия отбора данных. Общее правило: если необходимо установить отбор в виртуальной таблице, то отбор по измерениям 154 регистра описывается только в параметрах, а отбор по ресурсам – только в предложении запроса «ГДЕ». В нашем случае, если мы захотим получить курс одной валюты, мы напишем в параметре виртуальной таблицы условие: Валюта = &Валюта, а если нужно будет установить отбор по курсу, то в условии запроса «ГДЕ» Курс = &Курс. Если отбор по измерению написать в предложении «ГДЕ», скорость выполнения запроса значительно снизится. Если отбор по ресурсу написать в параметре, результат запроса будет неправильным. Источники запроса мы соединим «левым соединением», слева окажется таблица справочника, а справа – таблица регистра сведений. Или наоборот, правым соединением, где правой оказывается таблица справочника (см. рис. 9.22). В любом случае главной должна быть таблица справочника. Рис. 9.22. Таблица «Связи» конструктора запроса В результате получим следующий текст запроса (листинг 9.5). Листинг 9.5. Текст запроса списка валют с курсами ВЫБРАТЬ СправочникВалюты.Ссылка, СправочникВалюты.ПометкаУдаления, СправочникВалюты.Код, СправочникВалюты.Наименование, СправочникВалюты.Предопределенный, СправочникВалюты.ИмяПредопределенныхДанных, КурсыВалютыСрезПоследних.Курс, КурсыВалютыСрезПоследних.Период ИЗ Справочник.Валюты КАК СправочникВалюты ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалюты.СрезПоследних КАК КурсыВалютыСрезПоследних ПО КурсыВалютыСрезПоследних.Валюта = СправочникВалюты.Ссылка Существуют основные правила, которых надо придерживаться при написании таких запросов: при использовании соединений в запросе основная таблица (в нашем случае таблица справочника «Валюты») должна быть ле155 вой. Именно к ней «справа» добавляются колонки из других таблиц; запрос должен давать то же количество строк, что и отдельный запрос к основной таблице. Например, если бы мы сделали соединение с физической таблицей регистра сведений, результат был бы неправильный, так как она содержит курс на каждую дату. И как после этого будет выглядеть справочник «Валюты»? Динамически считывается только «Основная таблица» из использованных в тексте запросов. Это значит, что если виртуальная таблица большая и «долгая», то форма списка будет существенно «подтормаживать». В настройке мы оставим флаг «Динамическое считывание данных» и установленную основную таблицу списка (как на рис. 9.19) и закроем по настройку списка. Перенесем реквизиты «Курс» и «Период» из правой панели реквизитов в левую для отображения их на форме (см. рис. 9.23). Рис. 9.23. Измененная форма списка справочника «Валюта» Новая форма справочника «Валюты» готова, можно посмотреть на результат в пользовательском режиме (рис. 9.24). 156 Рис. 9.24. Справочник «Валюты» 9.5 Режим записи «Подчинение регистратору» Создадим регистры сведений «ЦеныПоставщиков» (см. рис. 9.25), Рис. 9.25. Основные свойства регистра сведений «ЦеныПоставщиков» Отнесем его к подсистеме «Закупки». Далее в дереве объектов конфигурации откроем подсистему «Закупки», на вкладке «Основные» нажмем кнопку «Командный интерфейс» и поставим соответствующий флажок (см. рис. 9.26). 157 Рис. 9.26. Командный интерфейс подсистемы «Закупки» Измерения регистра (см. рис. 9.27): Контрагент (тип <СправочникСсылка.Контрагенты>); Номенклатура (тип < СправочникСсылка.Номенклатура>). Ресурс: Цена (тип <Число>, длина – 19, точность – 2). Рис. 9.27. Измерения и ресурсы регистра сведений «ЦеныПоставщиков» Документ имеет режим записи «Подчинение регистратору», поэтому стала доступной закладка «Регистраторы». Поставим флажок «ПоступлениеТоваров» (см. рис. 9.28). 158 Рис. 9.28. Регистратор регистра сведений «ЦеныПоставщиков» Штатным режимом записи данных в такой регистр является запись при проведении документа. Воспользуемся возможностью создания этого обработчика с помощью конструктора. Откроем в конфигураторе документ «ПоступлениеТоваров». На закладке «Движения» удостоверимся, что свойство «Проведение» установлено в значение «Разрешить». Вызов конструктора осуществляется по нажатию кнопки «Конструктор движений» на этой закладке. Настройте открывшуюся форму в соответствии с рис. 9.29. Не забудьте выбрать табличную часть. Рис. 9.29. Конструктор движения регистров Запустите приложение, проведите еще раз все строки документа «Поступление товаров», посмотрите результат в регистре «Цены поставщиков». 159 9.6 Регистры накопления Регистры накопления используются в системе для накопления информации о наличии и движении средств – товарных, денежных и других. Они позволяют очень быстро получать информацию об остатках, оборотах, остатках с оборотами на интересующие даты, за указанные периоды. Различают 2 вида регистров накопления: регистры остатков; регистры оборотов. На регистрах накопления решают задачи оперативного учета. Создайте регистр накопления «ОстаткиНоменклатуры». Вид регистра – «Остатки». Отнесем его к подсистемам «Закупки» и «Продажи». Далее в дереве объектов конфигурации откроем подсистему «Закупки», на вкладке «Основные» нажмем кнопку «Командный интерфейс» и поставим соответствующий флажок. Аналогично отобразим регистр в подсистеме «Продажи». Измерения регистра (см. рис. 9.30): Номенклатура (тип < СправочникСсылка.Номенклатура>); Склад (тип <СправочникСсылка.Склады>). Ресурсы: Количество (тип <Число>, длина – 10, точность – 3); Сумма (тип <Число>, длина – 19, точность – 2). Рис. 9.30. Измерения и ресурсы регистра «ОстаткиНоменклатуры» На закладке «Регистраторы» поставим флажки «ПоступлениеТоваров» и «РеализацияТоваров». Откроем в конфигураторе документ «ПоступлениеТоваров». На закладке «Движения» в нижнем списке выберем «ОстаткиНоменклатуры» и нажмем кнопку «Конструктор движений» на этой закладке, согласимся на замещение обработки проведения. Настройте открывшуюся форму в соответствии с рис. 9.31. Не забудьте выбрать табличную часть и установить тип движения регистра «Приход». 160 Рис. 9.31. Конструктор движения регистра «Остатки номенклатуры» (приход) Далее откроем в конфигураторе документ «РеализацияТоваров». На закладке «Движения» в нижнем списке выберем «ОстаткиНоменклатуры» и нажмем кнопку «Конструктор движений» на этой закладке, согласимся на замещение обработки проведения. Настройте открывшуюся форму в соответствии с рис. 9.32. Не забудьте выбрать табличную часть и установить тип движения регистра «Расход». 161 Рис. 9.32. Конструктор движения регистра «Остатки номенклатуры» (расход) Создайте регистр накопления «Продажи». Вид регистра – «Обороты». Отнесем его к подсистеме «Продажи». Далее в дереве объектов конфигурации откроем подсистему «Продажи», на вкладке «Основные» нажмем кнопку «Командный интерфейс» и поставим соответствующий флажок. Измерения регистра (см. рис. 9.33): Контрагент (тип <СправочникСсылка.Контрагенты>); Номенклатура (тип < СправочникСсылка.Номенклатура>). Ресурсы: Количество (тип <Число>, длина – 10, точность – 3); Сумма (тип <Число>, длина – 19, точность – 2). Рис. 9.33. Измерения и ресурсы регистра «Продажи» 162 На закладке «Регистраторы» поставим флажок «РеализацияТоваров». Откроем в конфигураторе документ «РеализацияТоваров». На закладке «Движения» в нижнем списке выберем «Продажи» и нажмем кнопку «Конструктор движений» на этой закладке, согласимся на замещение обработки проведения. Настройте открывшуюся форму в соответствии с рис. 9.34. Не забудьте выбрать табличную часть. Рис. 9.34. Конструктор движения регистра «Продажи» Проверьте работу механизмов на практике. Запустите приложение, проведите еще раз все строки документов «Поступление товаров» и «Реализация товаров», откройте регистры и посмотрите результат. Контрольные вопросы 1. Назовите два вида учетных регистров. 2. Перечислите виды регистров. 3. Запись в эти регистры, как правило, осуществляется с помощью документа, а извлекается запросами в отчетах 4. Что такое «ведущее измерение»? 5. Перечислите виды соединения таблиц в запросе. 163 6. Что означает тип данных <NULL>? 7. Для чего предназначена функция запроса ECTЬNULL? 8. Перечислите виды виртуальных таблиц регистра сведений. 9. Как устанавливается отбор в виртуальной таблице? 10. Что такое «Подчинение регистратору»? 11. Для чего используются регистры накопления? 12. Перечислите 2 вида регистров накопления. 164 Лабораторная работа №10. Константы и функциональные опции Константы – это объект, предназначенный для хранения отдельных значений условно-постоянной информации, относящихся работе информационной базы в целом. Константы можно сравнить с системным справочником, элементы которого мы вводим, присваивая им имена и назначая типы, а пользователь вводит значения. Функциональные опции совершенно не обязательно работают вместе с константами, но удобно рассмотреть эти два объекта вместе. Функциональные опции позволяют определить видимость элементов диалога в зависимости от значения константы. 10.1 Константы Константы, как правило, используются для хранения информации о настройках базы данных, которая изменяется редко, или, точнее, никогда, так как константа не сохраняет историю изменений. Такой информацией может быть, например, валюта учета. При организации многовалютного учета, скорее всего, потребуется значение «валюты учета» (основной валюты, в которой ведется весь учет). В некоторых случаях значение этой валюты может отличаться от «Национальной валюты», относительно которой заносятся курсы, и которая хранится в предопределенном элементе справочника. Допустим, Вы решили продать конфигурацию предприятию, которое занимается предоставлением услуг, поэтому у него нет складов. Убрать склады сложнее, чем добавить: убрать необходимо из главного окна, из всех документов, из всех отчетов. Проще не убрать, а скрыть по флажку. Этот флажок будет храниться в константе. Добавим в ветке «Константы» новую константу «УчетПоСкладам» типа <Булево> (см. рис. 10.1). 165 Рис. 10.1. Свойства константы «Учет по складам» Чтобы пользователь увидел ее в интерфейсе, необходимо и достаточно наличие флага «Использовать стандартные команды» и принадлежность к подсистеме «Сервис». Включить в подсистему можно или в свойствах самой подсистемы на закладке «Состав», или в окне дополнительных свойств константы. Окно дополнительных свойств вызывается щелчком правой кнопкой мыши по объекту, пункт «Дополнительно» (см. рис. 10.2). Рис. 10.2. Дополнительные свойства константы Таким образом, мы создали в базе данных новую ячейку, в которой пользователь сможет сохранить нужное ему для работы значение, в нашем случае – ссылку на элемент справочника валют. Заполнить ее можно по команде с панели действий раздела «Сервис» (см. рис 10.3). 166 Рис. 10.3. Заполнение константы пользователем В дальнейшем, когда констант будет много, их можно будет добавлять в интерфейс не по одной, как сейчас, а собрать в одну форму и назвать ее, например, «Настройки программы». 10.2 Функциональные опции Механизм функциональных опций предназначен для скрытия из интерфейса пользователя сразу целого блока команд и полей, не нужных при данной настройке программы. Механизм обеспечивает опциональное (по флажку) управление видимостью. Надо сразу сделать важное замечание – этот механизм никаким образом не влияет на структуру хранения данных. Он лишь скрывает из интерфейса часть команд. А сам объект позволяет указать, какие команды скрыть и в каком случае. Этот объект позволяет разрабатывать конфигурации с некоторым запасом, включать в них всю функциональность, которая может потребоваться разным предприятиям, но при использовании на конкретном предприятии часть лишних кнопок, полей, колонок... скрыть от пользователя, так что он даже не будет догадываться, что такое в программе есть. Классический пример – учет по складам. Мы можем установить нашу конфигурацию разным предприятиям. Некоторые из них имеют несколько складов, и учет в разрезе складов им обязательно нужен. Некоторые имеют только один. Вторые из них могут, конечно, завести этот один склад и во всех документах его выбирать, а во всех отчетах его видеть, но не хотят. Именно для такого случая можно предусмотреть режим, при котором с панели навигации должна убраться ссылка открытия справочника «Склады», а из документов – поле ввода для выбора склада. В ветке «Общие» дерева конфигурации найдем ветку «Функциональные опции» и добавим новую «УчетПоСкладам». На первой закладке (см. рис. 10.4) мы указываем константу «Учет по складам» типа <Булево>, где хранится значение, от которого зависит функциональность. 167 Рис. 10.4. Закладка «Основные» функциональной опции На закладке «Состав» (см. рис. 10.5) отмечаем те объекты конфигурации, видимость которых будет зависеть от значения выбранной ранее константы. Рис. 10.5. Закладка «Состав» функциональной опции По своей сути объект является связующим звеном (см. рис. 9.6) между константой и командами других объектов, которыми нужно управлять. 168 Рис. 10.6. Место функциональной опции в управлении командным интерфейсом Если потребуется организовать зависимость функциональности программы или конкретной формы программы от значения реквизита элемента справочника (например, по одной организации складской учет ведется, а по другой – нет), это тоже можно сделать, используя связку «функциональная опция + параметры функциональных опций», но это уже выходит за рамки нашего курса. Проверьте механизм. После снятия флажка константы вся информация о складах из пользовательского интерфейса будет убрана. Обратите внимание, что гиперссылка открытия списка складов с панели навигации «не подчиняется» значению константы. Чтобы гиперссылка пропала или появилась, нужно заново запустить программу, ведь на момент установки значения константы главное окно программы уже было нарисовано. Контрольные вопросы 1. Для чего предназначены константы? 2. Для чего предназначены функциональные опции? 3. Какой флаг необходимо установить для того, чтобы константа стала видимой в пользовательском режиме? 169 Лабораторная работа №11. Проектирование пользовательского интерфейса: экранные формы и рабочий стол Теперь перейдем к рисованию. До этого момента мы задумывались только о том, как сделать красивым главное окно программы, а теперь займемся формами объектов. 11.1 Экранные формы 11.1.1 Виды форм Когда мы открываем справочник или документ, программа сама создает стандартное представление для этого объекта. При этом она анализирует довольно много условий: необходимость использования стандартных команд, вид объекта, структуру (дополнительные реквизиты и табличные части), роли (если реквизит не доступен роли пользователя «для чтения», он будет исключен из формы), функциональные опции и т.д. Тем не менее, формы получаются не такие, какими мы хотели бы их видеть. Если мы хотим открыть объект в собственном окне, его надо создать, и называться такое окно будет «Форма». Как правило, формы «привязаны» к конкретному объекту: справочник «Номенклатура», документ «Поступление товаров». Но бывают и формы сами по себе, которые могут отображать данные нескольких объектов или использоваться как-то иначе. Формы объектов открываются стандартными командами глобального командного интерфейса конфигурации, произвольные формы могут открываться программно. Формы бывают двух видов: обычные и управляемые. Обычные формы использовались во всех версиях системы «1С:Предприятие», начиная с первых версий под Windows («1С:Бухгалтерия 6.0»), и отличались тем, что для их разработки использовались художественные возможности встроенного редактора. Внешний вид обычных форм может быть сколь угодно красив и настроен с точностью до миллиметра. Редактор управляемых форм предоставляет возможность лишь декларативного описания правил их построения и имеет намного меньше инструментов «наведения красоты». Но будущее именно за такими формами: отсутствие красоты требует намного меньше «жертв»: меньшие требования к ресурсам клиентского компьютера, возможность перенести всю нагрузку на сервер, возможность работы с использованием в качестве клиента web-браузера. При работе в управляемом режиме (мы именно так сейчас и работаем) используются по умолчанию именно управляемые формы, хотя остается возможность использовать и обычные формы (это настраи170 вается в свойствах конфигурации), но только при работе в «Толстом клиенте». Взаимосвязь свойств объекта (ячеек таблицы, где хранятся данные) и элементов в форме можно представить в виде схемы (см. рис. 11.1). Форма Реквизиты формы Элемент формы 1 Объект базы данных Реквизит 1 Элемент формы 2 Реквизит 2 Основной реквизит Элемент формы 3 Реквизит 3 Элемент формы 4 Реквизит 4 Элемент формы 5 Реквизит 1 Элемент формы 6 Реквизит 2 Элемент формы N Реквизит N Реквизит N Рис. 11.1. Взаимосвязи объекта конфигурации и элементов формы Форма отображает данные объекта информационной базы, актуальные на момент открытия. Если эти данные были изменены, например, другим пользователем, их можно «перечитать». Пункт «Перечитать» доступен пользователю щелчком по кнопке «Еще» формы, документа или элемента справочника. 11.1.2 Управляемая форма документа Начнем изучать редактор управляемых форм на форме документа «Поступление товаров». Сейчас этот документ выглядит так (см. рис. 11.2). 171 Рис. 11.2. Текущая форма документа А мы хотим придать ей следующий внешний вид (см. рис. 11.3) Рис. 11.3. Новая форма документа Сначала надо создать форму. Делаем мы это на вкладке «Формы» свойств документа. Если в свойствах конфигуратора включен режим «Управляемое приложение и обычное приложение», будут видны две вкладки «Основные» и «Дополнительные», которые позволят нарисовать для одного объекта два независимых комплекта форм (управляемые и обычные). Если вкладок нет, значит, все формы будут управляемые по умолчанию (см. рис. 11.4). 172 Рис. 11.4. Вкладка «Формы» документа Здесь можно создать для одного документа неограниченное число форм, но только три из них (форма документа, форма списка, форма выбора) платформа сама знает, как использовать, когда открывать. Все остальные, которые вы создадите, придется открывать программно. Форма документа, в которой будут просматриваться и редактироваться данные одного экземпляра документа. Форма списка, для просмотра списка документов. Форма выбора, которая будет отображать список документов для выбора ссылки на документ (например, документ-основание). На вкладке «Основные» по нажатию «лупы» справа от формы документа, создаем новую форму документа. Запускается конструктор формы объекта (см. рис. 11.5). 173 Рис. 11.5. Конструктор формы Нажимаем «Далее», соглашаемся со всем, что предложит конструктор, и «Готово» (рис. 11.6). 174 Рис. 11.6. Редактор управляемой формы Рассмотрим основные инструменты редактора форм и свойства формы. Левый верхний список – «Элементы» – показывает порядок и группировку элементов управления в диалоге формы. В правом верхнем углу три закладки. Первая из них – «Реквизиты», которая показывает основной реквизит формы (он выделен жирным списком), в нашем случае ДокументОбъект, и дополнительные реквизиты формы (у нас нет). Основной реквизит формы определяет принадлежность этой формы к какому-то объекту конфигурации, именно его данными она будет управлять по умолчанию. Для начала разобьем весь документ на три части: «шапка», «таблица» и «подвал». В «шапке» должны показываться все основные реквизиты «шапки» документа. «Таблица» будет содержать табличную часть документа. А в «подвале» будет располагаться комментарий к документу. Теперь изменим заголовки. Хотелось бы чтобы «Дата» имела заголовок «от». Внизу находим нужное окошко, подсвечиваем его, редактор находит элемент формы в левом окне. Двойной щелчок по элементу формы позволяет открыть и изменить его свойства. В свойство «Заголовок» впишем «от» (см. рис. 11.7). 175 Рис. 11.7. Изменяем заголовок у даты Теперь разобьем форму на группы, с различной группировкой, чтобы добиться расположения полей «шапки» в две колонки и нужного порядка обхода. Щелчком по кнопке «Добавить» в левом окне добавляем 4 группы (см. рис. 11.8), вид элемента указываем «Группа – Обычная группа без отображения». Рис. 11.8. Диалог выбора вида элемента формы Нам потребуется 4 таких группы, чтобы добиться поставленной задачи (см. табл. 11.1). Свойству групп «Имя» задаем значение из левого столбца таблицы», свойству «Группировка» – из правого. 176 Табл. 11.1. Вид группировки групп Группа ГруппаШапка ГруппаЛевая ГруппаНомерИДата ГруппаПравая Группировка Горизонтальная Вертикальная Горизонтальная Вертикальная Кстати, обратите внимание, можно сгруппировать элементы формы иначе для получения нужного внешнего вида: можно было сделать внутри группы «Шапка» не две горизонтальные (левая и правая колонка), а три вертикальные (строка первая, вторая и третья) группы. В чем будет разница? В порядке обхода реквизитов. В нашем случае при обходе полей по клавишам «Tab» или «Enter» пользователь будет идти по группам, сначала по левой сверху вниз, потом по правой. Все группы будут похожи по свойствам, отличаться будет только группировка (горизонтальная или вертикальная). Вот так будут выглядеть свойства группы «Шапка» (см. рис. 11.9). Рис. 11.9. Свойства группы «Шапка» Используя кнопки , а также перемещая элементы и группы нажатой левой кнопкой мыши, добиваемся расположения групп как на картинке (рис. 11.10). 177 Рис. 11.10. Дерево элементов формы Лучше присваивать понятные пользователю имена группам формы, так как пользователь сможет управлять внешним видом формы, изменяя видимость и положение ее элементов и даже добавляя новые группы. Для изменения внешнего вида формы в пользовательском режиме используется диалог «Настройка формы», который вызывается из меню формы «Еще» (см. рис. 11.11). Чтобы вернуть внешний вид формы, настроенный в конфигураторе, можно воспользоваться кнопкой «Еще / Изменить форму...» настройки формы, командой «Установить стандартные настройки». 178 Рис. 11.11. Изменение формы в пользовательском режиме Обратите внимание, что мы сейчас нарисовали управляемую форму. Она может иметь несколько вариантов отображения. Как она будет показываться, в каком режиме, можно просмотреть заранее. На командной панели редактора форм есть две кнопки: «Вариант интерфейса» (см. рис. 11.12) и «Отображение» (см. рис. 11.13). Кнопка «Вариант интерфейса» позволяет переключаться между интерфейсами 8.3 и 8.2 (в нашей конфигурации эти настройки доступны пользователю). Рис. 11.12. Вариант интерфейса 179 «Отображение» может принимать два значения: «Компактное» и «Обычное» (см. рис. 11.13). Рис. 11.13. Отображение Можно просмотреть, как будет выглядеть форма, если будет включено компактное (для маленьких мониторов) отображение элементов формы. Для конкретной формы его можно включить в свойствах формы (см. рис. 11.14). Можно включить режим «Компактный» и для приложения в целом, но уже программно (свойство «ВариантМасштабаФормКлиентскогоПриложения»). Рис. 11.14. Свойства «Формы» из левого окна редактора Последние штрихи: добавить «подвал» к таблице и комментарий к документу. В свойствах элемента «Товары» устанавливаем галочку «Подвал» и для колонки «ТоварыСумма» устанавливаем свойство «ПутьКДаннымПодвала» = «ИтогСумма» (см. рис. 11.15). 180 Рис. 11.15. Значение свойства «ПутьКДаннымПодвала» суммы В результате в пользовательском режиме мы увидим итог по колонке «Сумма» в «подвале» табличной части. Чтобы добавить в диалог поле «Комментарий», из формы придется выйти. Любое изменение данных документа (тех, которые хранятся в таблицах базы данных) обязательно нужно изменить вкладку «Данные» свойств документа (см. рис. 11.16). Рис. 11.16. Новый реквизит «Комментарий» свойств документа 181 И только после этого возвращаемся в форму документа и располагаем комментарий в форме. Для этого из правого окна редактора надо перетащить комментарий, который находится внутри Объекта, в левое окно на желаемое место (см. рис. 11.17). Рис. 11.17. Расположение комментария в диалоге формы Готово. Можно посмотреть на результат. В режиме версии 8.2 эта форма будет выглядеть так (см. рис. 11.18). Рис. 11.18. Форма в режиме «Версия 8.2» Если включить компактный режим версии интерфейса «Такси», то так (см. рис. 11.19): 182 Рис. 11.19. Форма в режиме «Такси компактный» А как эта форма будет выглядеть в режиме обычного приложения? Никак! И форма «Такси», и компактный режим «Такси» и «Версия 8.2» в двух режимах (закладки и отдельные окна) – это все разные варианты отображения одного и того же. Это все управляемые формы, а обычные формы рисуются отдельно. 11.1.3 Обычная форма документа Чтобы мы могли нарисовать вторую (обычную) форму документа, нужно, чтобы в «Сервис / Параметры» (закладка «Общие») конфигуратора было установлено свойство «Управляемое приложение и обычное приложение». Теперь на вкладке «Формы» свойств документа переходим на закладку «Дополнительные» и опять нажимаем на «лупу» справа от свойства «Форма документа». Но на этот раз выбираем тип формы «Обычная» и изменяем ее название на ФормаДокументаОбычная (см. рис. 11.20). 183 Рис. 11.20. Конструктор обычной формы документа Все остальное оставляем по умолчанию. На последней вкладке нажимаем «Готово». Если представить, что поля «Комментарий» нет (потом добавим, чтобы узнать как), получится следующая картинка (см. рис. 11.21). Рис. 11.21. Обычная форма документа до настройки 184 Осталось, перетаскивая поля, изменяя заголовки и располагая недобавленные реквизиты документа (Комментарий) в диалоге, добиться того же внешнего вида. Чтобы добавить комментарий, воспользуйтесь кнопкой «Размещение данных» на панели инструментов (под главным меню). Чтобы появился итог в колонке «Сумма», вызовите окно свойств сначала для табличной части (поставьте флажок «Подвал»), затем окно свойств для «заголовка» колонки «Сумма» (поставьте флажок «ОтображатьИтогиВПодвале»). Запустим конфигурацию через меню «Отладка / Начало отладки / Толстый клиент (обычное приложение): начать отладку» (см. рис. 11.22). Рис. 11.22. Обычная форма документа после настройки В чем разница между обычными формами и управляемыми? И те, и другие можно использовать, но: 1. Обычные формы можно использовать только с «Толстым клиентом», который много весит, требует инсталляции, не умеет работать через web и всю работу по созданию и обслуживанию формы исполняет на клиентской машине. 2. Управляемые формы можно использовать с легким «Тонким клиентом», можно использовать вообще без инсталляции «1С», используя web-браузер (любой!). Можно использовать, работая с базой удаленно (через web). И в любом случае, на клиентском компьютере форма только показывается, а вся остальная работа (зачастую сложная и долгая) выполняется на сервере. 185 Имея одну форму (скажем, обычную) автоматически создать вторую нельзя. В любом случае придется потратить время на ее рисование и программирование ее логики. А вот структура данных (реквизиты) и схема компоновки данных изменений не потребуют. Измените аналогично вид документа «Реализация товаров и услуг». 11.1.4 Создание закладок на форме Откроем справочник «Физические лица». Создадим форму списка справочника, обратите внимание на тип и другие свойства основного реквизита формы. После этого создадим форму элемента справочника и приведем ее к желаемому виду. Создадим группу без отображения, разместим в ней код и наименование. Создадим обычную группу, разместим в ней элементы формы «Фамилия», «Имя» и «Отчество» (см. рис. 11.24). Рис. 11.24. Создание обычной группы Настройки группы приведены на рис. 11.25. 186 Рис. 11.25. Настройка свойств группы Также требуется, чтобы на форме было 2 закладки: на первой должны располагаться реквизиты справочника, на второй – табличная часть и командная панель этой табличной части. Добавим в форму новый элемент, тип элемента – «Страницы» (см. рис. 11.26). Рис. 11.26. Создание закладок Сделаем добавленную группу текущей и добавим 2 новых элемента управления с типом «Страница», задав им Синоним «Общие» и «Трудовая деятельность» соответственно. Остается «перетащить» элементы управле187 ния на нужные страницы (см. рис. 11.27), чтобы добиться внешнего вида формы как на рис. 11.28. Рис. 11.27. Размещение реквизитов по группам Рис. 11.28. Форма элемента справочника «Физические лица» 188 11.2 Начальная страница 8.3 или Рабочий стол 8.2 Начальная страница – это главная форма программы, которая встречает нашего пользователя. Она появляется в панели разделов сама, но чтобы она что-то содержала, ее нужно описать. Рекомендуется размещать на рабочем столе то, что должно ввести пользователя в курс дела при старте программы, так как это первое окно, которое он увидит. Это может быть список дела на сегодня, актуальные курсы и остатки денег, важные события. На рабочем столе можно размещать только те объекты, для которых нарисована форма. Формы, создаваемые платформой, размещаться на рабочем столе не могут. Область рабочего стола – одна для всех пользователей системы, но если для разных пользователей важной является разная информация, то управлять внешним видом рабочего стола можно с помощью видимости по ролям. Открыть область рабочего стола можно или щелчком правой кнопкой мыши по заголовку дерева объектов конфигурации (см. рис. 11.29), или из свойств диалога дерева. Рис. 11.29. Пункт меню для открытия области начальной страницы В любом случае откроется диалог, позволяющий установить шаблон и содержание области рабочего стола. В диалоговом окне (см. рис. 11.30) можно выбрать один из трех вариантов оформления рабочего стола. Для каждой роли можно определить формы, которые будут в нем располагаться. Рис. 11.30. Варианты оформления рабочего стола 189 Расположим на рабочей области форму списка справочника «Валюты» по той причине, что других форм списка мы не нарисовали (см. рис. 11.31). Рис. 11.31. Редактор области рабочего стола Рабочий стол готов, можно посмотреть на результат в пользовательском режиме (см. рис. 11.32). Рис. 11.32. Рабочий стол Состав форм, размещенных на рабочем столе, может быть откорректирован пользователем (см. рис. 11.33). 190 Рис. 11.33. Настройка рабочего стола в пользовательском режиме Контрольные вопросы 1. Перечислите виды форм? 2. В чем отличие формы списка от формы документа? 3. Что такое «Подвал» таблицы? 4. Как переименовать поле на форме? 5. Как поместить несколько полей в одну группу? 6. В чем отличие «обычной группы» от «обычной группы без отображения»? 7. Как изменить внешний вид формы в пользовательском режиме? 8. Как вернуть внешний вид формы, настроенный в конфигураторе? 9. С помощью какой кнопки в конфигураторе на форме можно переключаться между интерфейсами 8.3 и 8.2? 10. Какие значения принимает кнопка «Отображение» на форме документа? 11. Как отобразить итоговую сумму в подвале в управляемой форме и в обычной форме? 12. Как создать закладки на форме? 13. Что такое «начальная страница» в интерфейсе версии 8.3? 14. Как настроить начальную страницу в конфигураторе и в пользовательском режиме? 191 Лабораторная работа №12. Основы администрирования Наверное, вы уже заметили одно существенное отличие нашей программы от той, которую можно использовать в реальной жизни даже на небольшом (тем более крупном) предприятии: при входе в программу нас никто не просит представиться и ввести пароль. Нам необходим список пользователей и разграничение функциональности программы между ними. 12.1 Создание ролей и описание прав пользователей Роль – это описание набора прав, как правило, для группы пользователей. Механизм ролей конфигурации позволяет ограничить доступ пользователей к данным как на уровне объектов конфигурации (разрешить или запретить заполнять справочник или создавать документы определенного вида), так и на уровне записей (разрешить работать с документами только по одной нашей организации, а про остальные он, пользователь, вообще не должен догадываться). На пересечении подсистем, функциональных опций и ролей образуется тот интерфейс, который видит пользователь. На самом деле в рисовании пользовательского интерфейса принимает участие значительно большее число условий, но мы пока будем рассматривать только перечисленные, и сейчас очередь ролей, которые скрывают или запрещают к использованию лишнюю для пользователя функциональность программы. Чтобы понять, зачем нужна роль, зайдите в справочник «Номенклатура», создайте новый элемент справочника. Затом в документе «Поступление товаров» выберите этот товар в табличную часть, запишите документ (в смысле – купите товар). Далее вернитесь в справочник «Номенклатура» и, используя меню «Еще», удалите его (см. рис. 12.1). Рис. 12.1. Непосредственное удаление из справочника 192 У нас такое удаление разрешено (не запрещено). Результат (см. рис. 12.2) называется «битая ссылка»: идентификатор удаленного элемента остался выбранным в документе, а самого элемента в справочнике больше нет. Рис. 12.2. «Битая ссылка» в табличной части документа А как было бы правильно? Помечаем на удаление товар (рис. 12.3). Рис. 12.3. Установка пометки на удаление элемента справочника Далее через меню « / Все функции / Стандартные / Удаление помеченных объектов» (см. рис. 12.4). 193 Рис. 12.4. Удаление помеченных объектов, стр. 1 По кнопке «Удалить» программа долго ищет, можно ли удалить, если можно — удаляет, если есть ссылки и удалять нельзя — сообщает (см. рис. 12.5). Рис. 12.5. Удаление помеченных объектов, стр. 2 И на последней странице показывает, где эти ссылки, из-за которых нельзя удалить (см. рис. 12.6). Рис. 12.6. Удаление помеченных объектов, стр. 3 Это – режим правильный, его мы и оставим. 194 Находятся «Роли» в ветке «Общие» дерева конфигурации. Создадим в нашей конфигурации одну роль (для себя): «ПолныеПрава». У роли «ПолныеПрава» будут установлены все права, в том числе и права на все новые объекты (см. рис. 12.7). Рис. 12.7. Роль «ПолныеПрава» Для роли «ПолныеПрава», используя меню «Действия», устанавливаем права на все объекты. Что еще важно: мы собираемся создавать новые объекты, и у существующих со временем появятся новые реквизиты и табличные части. Поэтому имеет смысл для себя (администратора конфигурации) установить флаги «Устанавливать права для новых объектов» и «Устанавливать права для реквизитов и табличных частей по умолчанию». Мы это сделали, чтобы не вспоминать каждый раз устанавливать права на новый объект: иначе при добавлении его в конфигурацию мы не найдем его в пользовательском интерфейсе. Для начала знакомства посмотрите на права констант. Первое правило: если вы стоите в дереве слева курсором на ветке «Константы», вы раздаете права на все константы, если спускаетесь ниже — на конкретную константу, значит, устанавливаете права на эту одну (см. рис. 12.8). 195 Рис. 12.8. Права на константы Первые два права (чтение и изменение) дают пользователю права на программный доступ к константе (например, при выполнении программного модуля какого-нибудь документа или при формировании отчета), вторые два (просмотр и редактирование) дают права на визуальный просмотр и редактирование вручную (которое вполне может производиться некорректно), т.е. это не одно и то же. Даже для роли «ПолныеПрава» обязательно следует снять флажок «Интерактивное удаление» (см. рис. 12.9). 196 Рис. 12.9. Флаг «Интерактивное удаление» справочников При наличии этого права пользователь может удалить элемент справочника (документ или другой объект) из базы непосредственно без проверки ссылочной целостности базы. Сделать это можно в списке по сочетанию клавиш Shift+Del или из пункта меню «Еще» списка. Такие же флажки следует убрать с документов и со всех типов данных, на которые можно ссылаться. Теперь о том, кому эти права даются или у кого отнимаются – о пользователях. Но прежде, чем к ним переходить, надо обязательно обновить конфигурацию базы данных («Конфигурация / Обновить конфигурацию базы данных»). Назначать роль пользователю можно только в том случае, когда все сохранено. 197 12.2 Ведение списка пользователей Список пользователей ведется в меню «Администрирование / Пользователи». Добавляем туда нового пользователя «Администратор» (см. рис. 12.10). Рис. 12.10. Создание нового пользователя На закладке «Основные» окна редактирования пользователя задается имя (логин), полное имя (необязательно) и метод аутентификации (пароль 1С:Предприятия или пользователь Windows). Мы оставим свойства поумолчанию. На закладке «Прочие» выбираются доступные роли (можно несколько, тогда права складываются), язык (на каком языке будут отображаться синонимы объектов конфигурации) и режим запуска (по умолчанию из свойств конфигурации). Если в Меню «Сервис / Параметры» конфигуратора включен режим «Управляемое приложение и обычное приложение», видно окно «Основной интерфейс», используемое для режима обычного приложения. Теперь конфигуратор придется покинуть и войти заново уже под своим именем (см. рис. 12.11). Под ним же будем входить в режим отладки (пользовательский). 198 Рис. 12.11. Проверка доступа к базе данных при старте программы В типовых решениях новых пользователей рекомендуется добавлять не в конфигураторе, а в пользовательском режиме, там предусмотрена эта возможность. Для проверки можете попытаться удалить элемент непосредственно в любом нашем справочнике: это не получится. 12.3 Активные пользователи Там же, в главном меню конфигуратора «Администрирование / Активные пользователи», есть возможность просмотреть работающих сейчас пользователей информационной базы (см. рис. 12.12). Рис. 12.12. Список активных пользователей Причем попросить их выйти из базы с помощью этой функции конфигуратора нельзя. Для этого нужно или воспользоваться механизмом конфигурации (в типовых решениях такие предусмотрены), или службой администрирования серверов, которая входит в комплект поставки, инсталлируется в каталог программных файлов (1СV8 Servers.msc) и позволяет среди прочего отключать соединения с информационной базой. Основное назначение службы – не администрирование пользователей, а управление свойствами сервера «1С:Предприятие» при клиентсерверном варианте работы, но возможность «выгнать» пользователя тоже предусмотрена. 199 12.4 Журнал регистрации Журнал регистрации позволяет хранить и анализировать действия пользователей с базой данных. Будет ли этот журнал вестись и, если да, то какие события будут регистрироваться в нем, – все это настраивается в конфигураторе «Администрирование / Настройка журнала регистрации» (см. рис. 12.13). Рис. 12.13. Настройка журнала регистрации Если журнал регистрации ведется, то можно просмотреть события пользователя через меню «Администрирование / Журнал регистрации» (см. рис. 12.14). Рис. 12.14. Журнал регистрации Кнопки панели журнала позволяют устанавливать фильтры просмотра записей журнала. 200 12.5 Конфигурация базы данных Надо заметить, что каждая база может включать две конфигурации: текущую и конфигурацию базы данных. На самом деле механизм хранения конфигураций сложнее, но мы для начального знакомства его упростим до двух. Текущая конфигурация – это та, которую мы сейчас видим и изменяем в окне редактирования конфигурации. Конфигурация базы данных – та, которая будет использоваться программой при входе пользователя, именно ей соответствует структура таблиц базы данных. Если текущая конфигурация редактируется и отличается от конфигурации базы данных, в заголовке окна появляется * (см. рис. 12.15). Рис. 12.15. Текущая конфигурация изменена Если нажать на кнопку из пункта меню «Конфигурация / Сохранить конфигурацию», текущая конфигурация будет сохранена, но будет отличаться от конфигурации базы данных. Наше внимание обратят на это восклицательным знаком «!» в заголовке окна конфигурации (см. рис. 12.16). Рис. 12.16. Текущая конфигурация сохранена и отличается от конфигурации БД Чтобы измененная конфигурация была «подброшена» пользователям, нужно нажать «Конфигурация / Обновить конфигурацию базы данных». На этот момент никто в базе данных работать не должен. В случае существенных изменений в конфигурации для большой базы данных это может занять часы. Если изменение конфигурации не затрагивает структуру таблиц базы данных (не изменялся состав реквизитов, не добавлялись новые объекты), конфигурация базы данных может быть обновлена динамически – не нужно дожидаться, пока пользователи покинут программу. В этом случае при нажатии на кнопку «Обновить конфигурацию базы данных» будет выдано 201 сообщение с кнопкой «Обновить динамически». Можно или подождать, пока пользователи покинут базу данных, или согласиться на динамическое обновление. В этом случае платформа будет хранить две (три, четыре...) версии конфигурации одновременно. И каждый новый пользователь будет, входя в программу, получать последнюю из них. Но те пользователи, которые продолжают работать в программе, будут использовать конфигурацию, актуальную на момент их входа, и лишь изредка получать сообщения, что конфигурация была изменена, и было бы неплохо выйти и опять войти в программу. При первом варианте обновлении конфигурации (не динамическом) устаревшие варианты конфигураций будут удалены. Этот способ обновления особенно актуален для исправления незначительных ошибок, которые мешают работать одному пользователю. Представьте: в базе данных работают сотрудники огромного предприятия, и только один пользователь зашел туда, где вы допустили ошибку. Ему одному она мешает, а остальные о ней даже не догадываются. Не выгонять же всех? Нет. Исправить ошибку, обновить динамически и попросить его одного выйти из программы (только не свернуть, а именно закрыть) и войти заново. Когда мы нажимаем кнопку «Начать отладку», программа сохраняет конфигурацию, обновляет конфигурацию базы данных и запускает пользовательский режим одновременно, динамического обновления при этом не предлагает. 12.6 Исправление ошибок информационной базы Мы с только что допустили ошибку – удалили непосредственно элемент справочника, осталась «битая ссылка». Да мало ли чего мы (или наши пользователи) могут еще сделать с нашей базой! Как лечить? 12.6.1 Тестирование и исправление информационной базы Когда пользователей нет в информационной базе, можно выполнить тестирование и исправление информационной базы, находится в меню «Администрирование» конфигуратора: «Администрирование / Тестирование и исправление...» (см. рис. 12.17). 202 Рис. 12.17. Тестирование и исправление информационной базы Что умеет делать эта обработка? Можете установить флажки «Создавать объекта» для «битых ссылок», выполнить обработку, после этого войти в пользовательский режим и посмотреть, что изменилось в документе, где была «битая ссылка». Обработку можно запускать время от времени с целью профилактики и для уменьшения размера информационной базы. Надо только иметь в виду, что «лечение» выполняется без возможности «отката» и может занять длительное время (на этот случай внизу есть флажок, устанавливающий, через сколько часов это действие прекратить). 12.6.2 Лечение файловой базы данных Если после сбоя совсем все плохо, и вас даже не пускают в конфигуратор, и к тому же это файловая (не клиент-серверная) база данных (к слову, так плохо на клиент-серверных не бывает), можно воспользоваться специальной программой проверки физической целостности файла БД. Расположена она в каталоге программных файлов и называется chdbfl.ехе. Во многих неприятных случаях (а именно: вирус поработал, диск поврежден и т.д.) она позволяет восстановить базу данных. Если и это не помогло: остается писать письмо на [email protected] со своим регистрационным номером и тем, что осталось от базы данных, и просить о помощи. 203 Контрольные вопросы 1. Как пометить элемент на удаление? 2. Как удалить помеченные объекты? 3. Как создать роль и установить ее права? 4. Для чего предназначен флаг «Интерактивное удаление»? 5. Как просмотреть список пользователей? 6. Как просмотреть пользователей информационной базы, работающих с ней в данный момент? 7. Для чего предназначен журнал регистрации пользователей? 8. Как осуществляется тестирование и исправление информационной базы? 9. Возможно ли «лечение» информационной базы с «откатом»? 10. Как вылечить файловую базу данных, если база не открывается в конфигураторе? 204