Загрузка данных
ЗАНЯТИЕ 2
Подсистемы
На этом занятии мы познакомимся с объектом конфигурации
Подсистема как основой декларативного описания интерфейса
«1С:Предприятия».
Мы создадим несколько подсистем, определяющих логическую
структуру прикладного решения, настроим их внешний вид и порядок
их следования в интерфейсе прикладного решения.
Что такое подсистема
Подсистемы – это основные элементы для построения интерфейса
«1С:Предприятия». Поэтому первое, с чего следует начинать разра-
ботку конфигурации, – это проектирование состава подсистем.
При этом перед разработчиком стоит важная и ответственная задача –
тщательно продумать состав подсистем и затем аккуратно и осмыс-
ленно привязать к подсистемам те объекты конфигурации, которые он
будет создавать.
В простых прикладных решениях можно не использовать подси-
стемы, но мы рассмотрим общий случай, когда подсистемы исполь-
зуются.
Объекты конфигурации Подсистема позволяют выделить в конфи-
гурации функциональные части, на которые логически разбивается
создаваемое прикладное решение.
Эти объекты располагаются в ветке объектов Общие и позволяют
строить древовидную структуру, состоящую из подсистем и подчи-
ненных им подсистем (рис. 2.1).
Подсистемы верхнего уровня являются основными элементами
интер-фейса, так как образуют разделы прикладного решения (рис.
2.2).
Каждый объект конфигурации может быть включен в одну или сразу
несколько подсистем, в составе которых он будет отображаться.
Рис. 2.1. Структура подсистем конфигурации
Рис. 2.2. Разделы прикладного решения
Забегая вперед, скажем, что с помощью подсистем, используя
видимость по ролям, можно предоставить пользователю удобный и
функциональный интерфейс, не содержащий лишних элементов.
Например, кладовщик должен иметь возможность принять и выдать
товар, и ему совсем не нужно видеть все, что относится к области
бухгалтерского учета и оказанию услуг.
Таким образом, наличие подсистем определяет структуру приклад-
ного решения, организует весь пользовательский интерфейс,
позволяет рассортировать различные документы, справочники
и отчеты по логически связанным с ними разделам, в которых поль-
зователю будет проще их найти и удобнее с ними работать. При этом
каждому конкретному пользователю будут видны лишь те разделы, то
есть та функциональность прикладного решения, которые ему нужны
в процессе работы.
Даже в такой небольшой конфигурации, как наша, можно выделить
несколько функциональных частей, представляющих собой
отдельные предметные области.
Так, можно выделить в отдельную подсистему все, что имеет
отношение к бухгалтерскому учету.
Кроме этого, отдельной предметной областью является расчет
зарплаты сотрудников предприятия.
Всю производственную деятельность нашей фирмы ООО «На все
руки мастер» можно разделить на учет материалов и оказание услуг.
А кроме этого, для выполнения специальных административных
функций с базой данных нам нужно иметь отдельную подсистему, в
которую будет иметь доступ только администратор.
Поэтому сейчас мы создадим в нашей конфигурации пять новых
объектов конфигурации Подсистема, которые будут иметь имена:
Бухгалтерия, РасчетЗарплаты, УчетМатериалов, ОказаниеУслуг
и Предприятие. Чтобы это сделать, выполним следующие действия.
Добавление подсистемы В
режиме «Конфигуратор»
Закроем приложение и вернемся в конфигуратор. Чтобы создать новые
подсистемы, раскроем ветвь Общие в дереве объектов конфи-гурации,
нажав на + слева от нее.
Затем выделим ветвь Подсистемы , вызовем ее контекстное меню и
выберем пункт Добавить или нажмем соответствующую кнопку в
командной панели окна конфигурации (рис. 2.3).
После этого система откроет окно редактирования объекта конфигу-
рации.
Рис. 2.3. Добавление новой подсистемы в дерево объектов конфигурации
Оно предназначено специально для сложных объектов конфигурации
и позволяет путем выполнения последовательных действий быстро
создавать такие объекты.
Для того чтобы придерживаться правильной последовательности
действий, в нижней части окна имеются кнопки Далее и Назад.
Кнопка Далее позволяет задавать свойства объекта в нужной после-
довательности, чтобы ничего не пропустить и не проскочить вперед,
где потребуются данные, которые должны были быть введены ранее.
Кнопка Назад позволяет вернуться на несколько шагов назад, если вы
обнаружили, что ранее ввели не все или ошибочные данные.
Впоследствии вы сможете задавать свойства объектов, сразу выделяя
нужную вам закладку, например, Данные . При открытии окна
редактирования объекта конфигурации мы попадаем на закладку
Основные.
ПРИМЕЧАНИЕ
Чтобы изменить свойства объекта в процессе разработки, часто бывает
нужно повторно открыть окно редактирования объекта конфигурации.
Для этого следует выделить нужный элемент в дереве объектов конфи-
гурации и нажать в командной панели окна конфигурации кнопку
Изменить текущий элемент (F2) или дважды щелкнуть мышью по выде-
ленному элементу.
Зададим имя подсистемы – Бухгалтерия. На основании имени
платформа автоматически создаст синоним – Бухгалтерия (рис. 2.4).
Рис. 2.4. Установка имени и синонима подсистемы
Имя и синоним объекта конфигурации
Имя является основным свойством любого объекта конфигурации.
При создании нового объекта система автоматически присваивает ему
некоторое имя.
Можно использовать имя, присвоенное системой, но лучше заменить
его своим, понятным именем. Имя можно задавать любое, главное
чтобы оно начиналось с буквы и не содержало некоторых специ-
альных символов (например, пробел).
Для удобства чтения конфигурации принято составлять интуи-тивно
понятные имена и, если они состоят из нескольких слов, удалять
пробелы между словами и каждое слово начинать с большой буквы.
Имя объекта является уникальным и служит для обращения к
свойствам и методам объекта на встроенном языке.
Свойство Синоним также есть у любого объекта конфигурации. Оно
предназначено для хранения альтернативного наименования объекта
конфигурации, которое будет использовано в элементах интерфейса
нашей программы, то есть будет показано пользователю. Поэтому на
синоним практически нет никаких ограничений, и его можно задавать
в привычном для человека виде.
Картинка подсистемы
В целях усовершенствования интерфейса приложения мы можем
также задать картинку для отображения подсистемы.
Можно использовать готовые картинки, которые находятся в допол-
нительных материалах к этой книге (см. раздел «Что содержится в
дополнительных материалах»).
Нажмем кнопку выбора
в поле Картинка (см. рис. 2.4). В окне
выбора картинки добавим картинку в список на закладке Из конфигу-
рации. Для этого нажмем кнопку Добавить (рис. 2.5).
Рис. 2.5. Выбор картинки для представления подсистемы
Система создаст объект конфигурации Общая картинка и откроет
окно редактирования его свойств.
Дадим картинке имя Бухгалтерия. Чтобы задать саму картинку,
нажмем кнопку Выбрать из файла (рис. 2.6).
Далее выберем нужный файл с изображением.
Для просмотра изображений установим флажок Просмотр.
Рис. 2.6. Окно редактирования объекта конфигурации «ОбщаяКартинка»
Отметим файл Бухгалтерия и нажмем кнопку Открыть (рис. 2.7).
Рис. 2.7. Выбор картинки для представления подсистемы
Выбранная нами картинка появится в окне редактирования общей
картинки.
Закроем окно редактирования объекта конфигурации Общая картинка
и вернемся в окно выбора картинки для подсистемы Бухгалтерия.
Мы видим, что в списке картинок на закладке Из конфигурации
появилась добавленная нами картинка. Нажмем ОК (рис. 2.8).
Рис. 2.8. Выбор картинки для представления подсистемы
После наших действий в дереве объектов конфигурации в ветке Общие
картинки появилась картинка Бухгалтерия, которую мы можем
редактировать и использовать в дальнейшем в нашей конфигурации
(рис. 2.9).
Рис. 2.9. Общие картинки в дереве объектов конфигурации
Итак, мы вернулись в окно редактирования объекта конфигурации
Подсистема Бухгалтерия. Мы видим, что выбранная нами одно-
именная картинка установилась в качестве картинки для подсистемы
(рис. 2.10).
Рис. 2.10. Общие картинки в дереве объектов конфигурации
Таким образом, в интерфейсе «1С:Предприятия» в качестве названия
раздела будет показан синоним подсистемы, и рядом с ним будет
выводиться указанная картинка.
Отсутствие картинки у подсистемы не препятствует отображению
раздела в интерфейсе. В этом случае рядом с названием раздела
отображается стандартная картинка по умолчанию.
Снова выделим ветвь Подсистемы , нажмем кнопку Добавить в дереве
объектов конфигурации и создадим подсистемы с именами УчетМа-
териалов и ОказаниеУслуг . Установим для них в качестве картинок
соответственно общие картинки Материалы и Услуги, добавив их из
файлов Материалы и Услуги так же, как мы это делали для под-
системы Бухгалтерия.
Теперь воспользуемся другим способом для добавления подсистем.
Вызовем контекстное меню одной из созданных подсистем. Выберем
в нем пункт Добавить. Он разбивается на два подпункта. Выбор
подпункта Подсистема позволяет добавить подсистему того же уровня
иерархии, что и выделенная. Выбор подпункта Подчиненная
Подсистема позволяет добавить подсистему, подчиненную выде-
ленной (рис. 2.11).
Рис. 2.11. Добавление новой подсистемы в дерево объектов конфигурации
Поскольку в нашей конфигурации не планируется сложной много-
уровневой структуры, выберем первый вариант и добавим под-
систему РасчетЗарплаты . Установим для нее в качестве картинки
общую картинку Зарплата, добавив ее из файла Зарплата.
В заключение добавим подсистему Предприятие с соответствующей
картинкой для доступа к административным и сервисным функциям.
Панель разделов прикладного решения В
режиме «1С:Предприятие»
Запустим «1С:Предприятие» в режиме отладки и увидим результат
наших изменений. Вид разрабатываемого нами приложения
изменился (рис. 2.12).
Сразу под заголовком приложения с названием нашей конфигурации
и областью системных команд располагается панель разделов прило-
жения, где и отражены созданные нами подсистемы. Причем все
разделы выводятся с выбранными в их свойствах картинками.
Рис. 2.12. «1С:Предприятие»
Разделы представлены в форме гиперссылок, нажав на которые поль-
зователь может открыть связанные с ними документы, справочники,
отчеты и т.п. Сейчас состав разделов пуст, так как мы еще не создали
наполняющих их объектов конфигурации.
ПРИМЕЧАНИЕ
Обратите внимание, что раздел Главное формируется платформой по
умолчанию. Этот раздел всегда располагается первым в панели
разделов. Он предназначен для размещения наиболее часто исполь-
зуемых пользователем документов, отчетов и т.п.
Порядок разделов
В режиме «Конфигуратор»
Однако порядок расположения подсистем нас не совсем устраивает.
Изменим его.
Закроем приложение и вернемся в конфигуратор. Выделим корень
дерева объектов конфигурации ПособиеДляНачинающих, нажатием
правой кнопки мыши вызовем контекстное меню и выберем пункт
Открыть командный интерфейс конфигурации (рис. 2.13).
Рис. 2.13. Вызов окна настройки командного интерфейса конфигурации
В открывшемся окне Командный интерфейс вы увидите список
созданных вами подсистем (разделов приложения). С помощью
кнопок Вверх, Вниз изменим порядок расположения разделов в этом
списке.
Расположим сначала подсистемы, отражающие производственную
деятельность нашей фирмы: Учет материалов и Оказание услуг, затем
бухгалтерскую деятельность и расчет зарплаты сотрудников: Бухгал-
терия и Расчет зарплаты, а затем подсистему Предприятие (рис. 2.14).
Рис. 2.14. Окно настройки подсистем
В режиме «1С:Предприятие»
Запустим «1С:Предприятие» в режиме отладки и увидим, что порядок
расположения подсистем в панели разделов приложения изменился
так, как мы его задали (рис. 2.15).
Рис. 2.15. «1С:Предприятие»
ПРИМЕЧАНИЕ
Настройку порядка следования подсистем в панели разделов
прикладного решения можно выполнить также в режиме
1С:Предприятие по команде главного меню Настройки > Настройка панели
разделов... При этом необходимо иметь в виду, что настройка панели
разделов в конфигураторе будет актуальна для всех пользователей
прикладного решения. В то время как настройка панели разделов в
режиме 1С:Предприятие будет доступна только тому пользователю,
который ее выполнил.
Заметьте, что если список подсистем не помещается на панель
разделов, то появляется возможность прокрутки этой панели.
Закроем приложение и вернемся в конфигуратор. На следующем
занятии мы начнем создавать первые объекты конфигурации,
привязывать их к различным подсистемам и продемонстрируем их
конкретное применение в интерфейсе «1С:Предприятия».
ВНИМАНИЕ!
После успешного завершения каждого занятия мы рекомендуем
сохранять конфигурацию, выполнив команду главного меню Админи-
стрирование > Выгрузить информационную базу... Это полезно на случай,
если вы запутаетесь в своих действиях и захотите вернуться к работа-
ющему варианту. Это можно сделать, выполнив команду Администриро-
вание > Загрузить информационную базу...
Теория: окно редактирования объекта
конфигурации и палитра свойств
На первый взгляд окно редактирования объекта и палитра свойств
дублируют друг друга. В самом деле в палитре свойств отображены
все свойства объекта конфигурации. Зачем было создавать еще и окно
редактирования объекта? И если существует окно редактирования
объекта, то зачем тогда палитра свойств, которая содержит все то же
самое, только в другом виде?
Окно редактирования объекта конфигурации предназначено в первую
очередь для быстрого создания новых объектов. Быстрое создание
подразумевает ввод исчерпывающей информации об объекте. Значит,
нужно очень хорошо знать структуру объекта, а на это требуется
время... Выходит, быстро создать объект не получится?
Получится! Окно редактирования объекта имеет в своей основе
механизм «мастеров»: разработчику в нужной последовательности
предлагается ввести необходимые данные. Последовательность ввода
данных разработана таким образом, чтобы предыдущие данные могли
служить основой для ввода последующих. Движение управля-ется
кнопками Далее и Назад. На каждом шаге предлагается ввести группу
логически связанных между собой данных.
Но, предположим, вы уже освоились со структурой объектов, или вам
просто нужно изменить несколько свойств объекта. Чтобы при этом
опять не «прокручивать» все с самого начала, окно редактирования
объекта содержит закладки, позволяющие вам перейти непосред-
ственно к тому шагу, на котором вводятся интересующие вас данные.
Таким образом, окно редактирования объекта помогает быстро создать
незнакомый объект конфигурации и в то же время обеспечи-вает
удобный доступ к нужным свойствам при редактировании суще-
ствующих объектов.
Что же касается палитры свойств, то она предоставляет одну абсолютно незаменимую возможность.
Дело в том, что она не привязана по своей структуре к какому-то конкретному виду объектов
конфигурации. Ее содержимое меняется в зависимости от того, какой объект является текущим. За
счет этого она может запоминать, какое свойство объекта в ней выбрано, и при переходе в дереве к
другому объекту будет подсвечивать у себя все то же свойство, но уже другого объекта.
Такая способность палитры свойств абсолютно незаменима, когда, например, среди трех десятков
справочников конфигурации вам нужно быстро найти подчиненные какому-нибудь другому. В этом
случае вы выбираете мышью в палитре свойств свойство Владелец любого справочника, затем
переходите в дерево объектов конфигу-рации и просто пробегаете его при помощи стрелок ↑ или ↓.
ЗАНЯТИЕ 3
Справочники
На этом занятии мы познакомимся с объектом конфигурации Спра-
вочник. Вы узнаете, для чего используется этот объект, какова его
структура и какими основными свойствами он обладает.
На практических примерах вы научитесь создавать справочники,
описывать наиболее важные элементы их структуры и заполнять их
данными.
Кроме этого, вы узнаете еще об одном объекте конфигурации – Форма.
Узнаете, какие виды форм существуют у объекта конфигу-рации
Справочник и в каких ситуациях они используются.
В заключение в конце занятия будет сделано теоретическое отсту-
пление, касающееся механизма внесения изменений в конфигурацию.
Что такое справочник
Объект конфигурации Справочник предназначен для работы
со списками данных. Как правило, в работе любой фирмы исполь-
зуются списки сотрудников, списки товаров, списки клиентов,
поставщиков и т.д. Свойства и структура этих списков описываются в
объектах конфигурации Справочник, на основе которых платформа
создает в базе данных таблицы для хранения информации из этих
справочников.
Справочник состоит из элементов. Например, для справочника
сотрудников элементом является сотрудник, для справочника
товаров – товар и т.д. Пользователь в процессе работы может само-
стоятельно добавлять новые элементы в справочник: например,
добавить новых сотрудников, создать новый товар или внести нового
клиента.
В базе данных каждый элемент справочника представляет собой
отдельную запись в основной таблице, хранящей информацию из
этого справочника (рис. 3.1).
Каждый элемент справочника, как правило, содержит некоторую
дополнительную информацию, которая подробнее описывает
этот элемент. Например, все элементы справочника Товары могут
содержать дополнительную информацию о производителе, сроке
годности и др. Набор такой информации является одинаковым для
всех элементов справочника, и для описания такого набора использу-
ются реквизиты объекта конфигурации Справочник, которые также, в
свою очередь, являются объектами конфигурации (рис. 3.2).
Рис. 3.1. Справочник «Товары» в режиме «Конфигуратор»,
в режиме «1С:Предприятие» и в базе данных
Рис. 3.2. Стандартные реквизиты справочника и реквизиты,
созданные разработчиком
Поскольку эти объекты конфигурации логически связаны с объектом
Справочник, они называются подчиненными этому объекту.
Большинство реквизитов разработчик создает
самостоятельно, однако у каждого объекта конфигурации Справочник
по умолчанию
существует набор стандартных реквизитов: Код и Наименование и пр.
(см. рис. 3.2). Причем доступность стандартных реквизитов зависит от
свойств справочника.
Например, если справочник иерархический, у него будет доступен
стандартный реквизит Родитель. Если справочник подчинен другому
объекту конфигурации, у него будет доступен реквизит Владелец.
Если установить длину стандартного реквизита Код равной нулю, то у
справочника будет недоступен этот реквизит. То же самое относится к
реквизиту Наименование . Однако как минимум либо Код, либо
Наименование должны присутствовать в реквизитах справочника,
иначе такой справочник не имеет смысла.
Таким образом, в базе данных справочник хранится в виде таблицы, в
строках которой расположены элементы списка, а каждому реквизиту
(стандартному или созданному разработчиком) в этой таблице
соответствует отдельный столбец. Соответственно, в ячейках этой
таблицы хранится значение конкретного реквизита для конкрет-ного
элемента справочника (рис. 3.3).
Рис. 3.3. Справочник «Товары» в режиме «Конфигуратор»,
в режиме «1С:Предприятие» и в базе данных
Кроме этого, каждый элемент справочника может содержать
некоторый набор информации, которая одинакова по своей структуре,
но различна по количеству и предназначена для разных элементов
справочника.
Так, например, каждый элемент справочника Сотрудники может
содержать информацию о составе семьи сотрудника. Для одного
сотрудника это будет только супруга, а у другого семья может
состоять из супруги, сына и дочери.
Для описания подобной информации могут быть использованы
табличные части объекта конфигурации Справочник, являющиеся
подчиненными ему объектами конфигурации. В этом случае в базе
данных будут созданы дополнительные таблицы для хранения
табличных частей, подчиненных конкретному элементу справочника
(рис. 3.4).
Причем система скрывает от разработчика всю «техническую» часть,
связанную с хранением данных: в базе данных для справочника
создаются несколько таблиц, эти таблицы связываются по уникаль-
ному полю (Ссылка), поля таблиц имеют определенные типы и т.д. Все
это система делает сама. Нам лишь нужно добавить в объект
конфигурации Справочник подчиненный ему объект ТабличнаяЧасть.
Для удобства использования элементы справочника могут быть
сгруп-пированы пользователем по какому-либо принципу.
Рис. 3.4. Справочник «Сотрудники» в режиме «Конфигуратор», в
режиме «1С:Предприятие» и в базе данных
Например, в справочнике Бытовая техника могут быть созданы
следующие группы: Холодильники, Телевизоры, Стиральные машины
и т.д. Возможность создания таких групп в справочнике задается
свойством Иерархический объекта конфигурации Справочник. В этом
случае элемент справочника, представляющий собой группу, будет
являться родителем для всех элементов и групп, входящих в эту
группу. Такой вид иерархии называется иерархией групп и элементов
(рис. 3.5).
Рис. 3.5. Иерархический справочник с иерархией групп и элементов
Возможен и другой вид иерархии – иерархия элементов. В этом случае
в качестве родителя выступает не группа элементов справоч-ника, а
непосредственно один из его элементов. Например, такой вид
иерархии можно использовать при создании справочника Подразде-
ления, когда одно подразделение является родителем для нескольких
других, входящих в его состав (рис. 3.6).
Рис. 3.6. Иерархический справочник с иерархией элементов
Элементы одного справочника могут быть подчинены элементам или
группам другого справочника. Например, справочник Контак-
тныеЛица может быть подчинен справочнику Партнеры. Тогда для
каждого партнера мы сможем указать его сотрудников, с которыми
нужно контактировать.
В системе «1С:Предприятие» это достигается путем указания списка
владельцев справочника для каждого объекта конфигурации Спра-
вочник. В данном случае справочник Партнеры будет владельцем
справочника КонтактныеЛица (рис. 3.7).
Рис. 3.7. Справочник «Партнеры» –
владелец справочника «Контактные лица»
Порой возникают ситуации, когда необходимо, чтобы в справочнике
некоторые элементы существовали всегда, независимо от действий
пользователя. Допустим, логика бизнес-процессов на предприятии
такова, что все товары сначала поступают на основной склад, а затем
по мере надобности перемещаются на другие склады. В этом случае в
справочнике Склады всегда должен существовать склад Основной,
иначе приходование товаров будет выполнено неправильно. Объект
конфигурации Справочник позволяет описать любое количество таких
элементов справочника. Они называются предопределенными элемен-
тами справочника (рис. 3.8).
Рис. 3.8. Справочник «Склады»
с предопределенным элементом «Основной»
Предопределенные элементы отличаются от обычных тем, что они
создаются в конфигураторе и что к ним можно обращаться из встро-
енного языка. В интерфейсе предопределенные элементы справоч-
ника помечены специальной пиктограммой (см. рис. 3.8).
Формы справочника
В зависимости от того, какие действия мы хотим выполнять со спра-
вочником, нам требуется изображать справочник в «разном виде».
Например, для того чтобы выбрать некоторый элемент справочника,
удобнее представить справочник в виде списка, а для того чтобы
изменить какой-то элемент справочника, удобнее представить все
реквизиты этого элемента справочника в одной форме (рис. 3.9).
Система может самостоятельно сгенерировать все формы, которые
нужны для представления данных, содержащихся в справочнике.
Причем система знает, какие именно формы нужно использовать в
каких ситуациях.
Вообще говоря, для отображения справочника в различных ситуациях
требуется максимум пять форм для справочника.
Рис. 3.9. Форма списка и форма редактирования элемента
справочника «Сотрудники»
Обратите внимание, что в различных местах конфигуратора одни и те
же формы называются немного по-разному (табл. 3.1). Следующая
таблица представляет различные названия форм:
в контекстном меню справочника (Открыть основную форму...), в
дереве конфигурации и в палитре свойств справочника;
в конструкторе форм;
на закладке Формы окна редактирования справочника.
Таблица 3.1. Формы справочника
В контекстном меню
и в палитре свойств
(рис. 3.12)
Основная форма объекта
Основная форма группы
Основная форма списка
Основная форма выбора
Основная форма выбора
группы
В конструкторе форм
(рис. 3.11)
Форма элемента справочника
Форма группы справочника
Форма списка справочника
Форма выбора справочника
Форма выбора группы спра-
вочника
На закладке
«Формы»
(рис. 3.10)
Элемента
Группы
Списка
Выбора
Выбора группы
Дело в том, что в контекстном меню и палитре свойств отобра-жаются
свойства объектов конфигурации. Они одинаковые для всех объектов
конфигурации. А в конструкторе форм и на закладке Формы
отображаются представления этих свойств в виде, более понятном
разработчику. Они разные для разных объектов конфигу-рации.
Различные наименования форм справочника представлены на рис.
3.10, 3.11, 3.12.
Рис. 3.10. Названия форм справочника на закладке «Формы»
Рис. 3.11. Названия форм справочника в конструкторе форм
Рис. 3.12. Названия форм справочника в палитре свойств
Форма элемента используется для редактирования или создания
элемента справочника.
Форма группы используется для редактирования или создания группы
справочника. Группа, как правило, содержит гораздо меньше
информации, чем сам элемент справочника. Поэтому для нее нужна
отдельная форма, отличная от формы элемента (рис. 3.13).
Рис. 3.13. Форма группы и форма элемента справочника
Форма списка используется для отображения списка элементов спра-
вочника.
Форма выбора используется для того, чтобы в поле некоторой формы
выбрать один из элементов справочника. При этом форма выбора
проще, чем форма списка, так как в форме списка может показываться
много реквизитов. А при выборе элемента (в документе, например)
нам нужно знать только наименование. Поэтому можно для выбора
использовать отдельную более простую форму (рис. 3.14).
Рис. 3.14. Форма выбора и форма списка справочника
Форма выбора группы используется, когда в поле некоторой формы
нужно выбрать не просто элемент справочника, а одну из его групп.
При этом форма выбора группы проще, чем форма выбора элемента,
так как группа, как правило, содержит гораздо меньше информации,
чем сам элемент справочника.
При этом для всех ссылочных объектов конфигурации (справоч-ников,
документов и т.д.) будет использоваться форма объекта, но нужно
понимать, что под объектом здесь понимается объект инфор-
мационной базы, то есть «элемент» того, что хранит этот объект
конфигурации. Для справочника это будет элемент справочника, для
документа – документ, для плана счетов – счет и т.д.
Любая форма может быть описана в конфигураторе. Для создания
такого описания существует подчиненный объект конфигурации
Форма (рис. 3.15).
Рис. 3.15. Форма элемента справочника в конфигураторе
Как правило, объект конфигурации Форма подчинен одному из
прикладных объектов, но может существовать и самостоятельно.
На основании описания, содержащегося в объекте конфигурации
Форма , в нужный момент работы платформа «1С:Предприятие»
создаст программный объект Форма, с которым и будет работать
пользователь.
Таким образом, форма служит для визуализации данных, находя-
щихся в базе данных. Она представляет эти данные в удобном для
пользователя виде и позволяет описать алгоритмы, которые будут
сопровождать работу пользователя с данными, показанными в форме.
УЗНАЙ БОЛЬШЕ!
О структуре объектов встроенного языка, предназначенных для
работы со справочниками, можно прочитать в разделе «Краткий
справочник разработчика. Справочники».
Простой справочник
Теперь, когда мы немного познакомились с возможностями объекта
конфигурации Справочник , создадим несколько таких объектов, чтобы
описать справочники, которые будут использоваться в нашей базе
данных.
Так как наше ООО «На все руки мастер» оказывает услуги по ремонту
бытовой техники, очевидно, что для ведения учета нам потребуется
хранить некоторую списочную информацию.
Для начала нам понадобится список сотрудников предприятия,
которые будут оказывать услуги.
Затем нам будет нужен список клиентов, с которыми работает наше
ООО «На все руки мастер».
После этого нам понадобится перечень услуг, которые может
оказывать наше предприятие, и список материалов, которые могут
быть израсходованы. Кроме этого, нам потребуется список складов, на
которых могут находиться материалы ООО «На все руки мастер».
Начнем с простых вещей – списка сотрудников и списка клиентов.
Сначала создадим справочник, в котором будут храниться наимено-
вания наших клиентов.
В режиме «Конфигуратор»
Откроем в конфигураторе нашу учебную конфигурацию, выделим в
дереве объектов конфигурации ветвь Справочники и нажмем кнопку
Добавить в командной панели окна конфигурации (рис. 3.16).
В открывшемся окне редактирования объекта конфигурации зададим
имя справочника – Клиенты. На основании имени платформа авто-
матически создаст синоним – Клиенты. Напомним, что свойство
Синоним служит для представления объекта в интерфейсе нашей
программы.
Также у разработчика есть возможность установки дополнительных
свойств, определяющих пользовательское представление объектов.
Эти свойства задавать не обязательно. Если они не заданы, то для
представления объекта в интерфейсе «1С:Предприятия» использу-ется
синоним объекта конфигурации Справочник. Но, как мы увидим
дальше, это не всегда хорошо.
Рис. 3.16. Создание нового объекта конфигурации «Справочник»
Представления объекта конфигурации
Представление объекта определяет название объекта в единственном
числе и используется в названии стандартной команды, например,
команды создания объекта – Клиент: создать. Представление объекта
нужно задавать тогда, когда синоним объекта конфигурации задан во
множественном числе или когда он описывает множество объектов,
потому что в интерфейсе автоматически формируются команды
открытия списка справочника и команды создания нового элемента
справочника.
Если синоним задан во множественном числе, то для команды
открытия списка это вполне подходит – Клиенты, то есть посмотреть
всех клиентов. Но для команды создания элемента справочника –
одного клиента – это неудачный вариант.
Для этой команды нужно задать представление в единственном числе
– Клиент. Представление объекта как раз и использу-ется для того,
чтобы описать, как будет выглядеть в интерфейсе команда добавления
нового клиента. Также оно будет использовано в заголовке формы
клиента (если не указано расширенное представ-ление объекта) и в
представлении ссылки на клиента.
Расширенное представление объекта определяет заголовок формы
объекта, например формы для создания нового элемента справочника.
Если это свойство не задано, то вместо него используется свойство
Представление объекта.
Представление списка определяет название списка объектов
и используется в названии стандартной команды, например, команды
открытия списка объектов – Клиенты. Представление списка нужно
задавать тогда, когда синоним задан в единственном числе.
Например, это часто бывает у документов (Приходная накладная).
Тогда в представлении списка нужно указывать название объекта
конфигурации во множественном числе (Приходные накладные).
Расширенное представление списка определяет заголовок формы
списка, например формы списка справочника. Если это свойство не
задано, то вместо него используется свойство Представление списка.
Зададим два свойства Представление объекта – Клиент и Представ-
ление списка – Клиенты. Последнее можно было и не задавать, так как
синоним справочника совпадает со свойством Представление списка
(рис. 3.17).
В представлении списка вроде бы подразумевается название Список
клиентов, но идущие подряд строки Список сотрудников, Список
клиентов, Список складов не очень хорошо смотрятся в интерфейсе
приложения.
Рис. 3.17. Установка основных свойств справочника
Принадлежность объекта к подсистемам
Нажмем кнопку Далее и перейдем на закладку Подсистемы окна
редактирования объекта конфигурации Справочник. На этой закладке
определяется, в каких подсистемах будет отображаться данный спра-
вочник.
В списке подсистем мы видим подсистемы, созданные нами ранее при
определении структуры приложения. Логично предположить, что
список клиентов должен быть доступен в разделе Оказание услуг, так
как оказываемые услуги относятся к определенному клиенту. Бухгал-
терская отчетность, формируемая в разделе Бухгалтерия, также может
быть представлена в разрезе клиентов.
Поэтому отметим в списке подсистемы Бухгалтерия и ОказаниеУслуг
(рис. 3.18).
Рис. 3.18. Определение списка подсистем,
в которых отображается справочник
Теперь откроем окно редактирования одной из отмеченных
подсистем, например Бухгалтерия, и перейдем на закладку Состав. Мы
видим, что в составе объектов этой подсистемы появился новый
объект конфигурации Справочник Клиенты (рис. 3.19).
Обратите внимание, что на закладке Состав также можно изменять
список объектов, входящих в подсистему.
Рис. 3.19. Состав объектов, входящих в подсистему
Код и наименование справочника
Теперь вернемся к окну редактирования объекта конфигурации Спра-
вочник и нажмем на закладку Данные .
Здесь для нас представляют интерес длина кода и длина наимено-
вания.
Длина кода – важное свойство справочника. Как правило, код спра-
вочника используется для идентификации элементов справочника и
содержит уникальные для каждого элемента справочника значения.
Платформа может сама контролировать уникальность кодов и поддер-
живать автоматическую нумерацию элементов справочника. Поэтому
от длины кода будет зависеть количество элементов, содержащихся в
справочнике.
Длина кода – 9 символов. В результате мы сможем использовать коды
от 1 до 999999999 – этого вполне достаточно для нашего небольшого
ООО «На все руки мастер».
Перейдем к длине наименования. 25 символов для нас явно мало,
увеличим длину наименования до 50 (рис. 3.20).
Рис. 3.20. Установка длины кода и наименования справочника
Кроме того, хотелось бы чтобы вместо обозначения стандартного
реквизита справочника Наименование в интерфейсе приложения
выводилось бы более соответствующее обозначение для клиентов. Так
как Наименование более подходит для неодушевленных предметов, а
тут мы имеем дело с людьми.
Поскольку в интерфейсе приложения отображаются синонимы
объектов, то изменим свойство Синоним стандартного реквизита
Наименование нашего справочника.
Для этого нажмем внизу окна кнопку Стандартные реквизиты.
Выделим в списке реквизит Наименование, вызовем его контекстное
меню и выберем пункт Свойства (рис. 3.21).
В палитре свойств стандартного реквизита Наименование установим
свойство Синоним как Ф. И. О. (рис. 3.22).
Обратите внимание, что мы изменили синоним реквизита объекта
конфигурации, а не реквизита формы. В данном случае форма
элемента справочника Клиенты вообще сгенерирована системой авто-
матически.
Рис. 3.21. Состав стандартных реквизитов справочника
Рис. 3.22. Палитра свойств стандартного реквизита «Наименование»
Теперь во всех видах форм данный реквизит будет иметь установ-
ленный синоним, если, конечно, разработчик не захочет его изменить
при создании своей собственной формы.
Заодно обратите внимание, что свойство Проверка заполнения по
умолчанию установлено в значение Выдавать ошибку. Это означает,
что если реквизит Наименование не заполнен, то будет выведено
сообщение об ошибке (см. рис. 3.29).
Команда добавления нового элемента
Прежде чем запускать «1С:Предприятие», настроим интерфейс
приложения, чтобы нам было удобнее вводить новые элементы спра-
вочника.
Дело в том, что для размещения стандартных команд открытия
списков и создания новых объектов конфигурации в интерфейсе
«1С:Предприятия» существует общий стандартный алгоритм,
который мы сейчас объясним на примере справочников. Но это спра-
ведливо и для документов, планов счетов и т.п.
Команда для открытия списка справочника, как и команда для
создания его новых элементов, автоматически добавляется
в интерфейс тех разделов (подсистем), в которых будет отображаться
справочник. Но команда создания новых элементов по умолчанию
невидима в интерфейсе приложения.
Это объясняется тем, что возможность просматривать списки спра-
вочника нужна, как правило, всегда. А возможность создания новых
элементов справочника используется не так часто. Поэтому соот-
ветствующую команду следует включать только для тех справоч-
ников (объектов конфигурации), создание новых элементов которых
является основной деятельностью для пользователей в данном разделе
прикладного решения.
Сделаем доступной в панели функций раздела Оказание услуг стан-
дартную команду для создания новых клиентов.
Для этого откроем окно редактирования объекта конфигурации
Подсистема ОказаниеУслуг и нажмем кнопку Командный интерфейс
(рис. 3.23).
В открывшемся окне Командный интерфейс отразятся все команды
этой подсистемы.
При создании справочника в группу Панель навигации.Обычное доба-
вилась команда Клиенты для открытия этого списка. Она включена по
умолчанию. В группу Панель действий.Создать добавилась команда
Клиент: создать для создания нового элемента справочника, но она
невидима по умолчанию.
Рис. 3.23. Вызов настройки командного интерфейса подсистемы
Включим видимость у этой команды (рис. 3.24).
Рис. 3.24. Окно настройки командного интерфейса подсистемы
Для подсистемы Бухгалтерия команд для создания новых элементов
справочника добавлять не будем, так как это определяется прикладной
логикой работы.
В данном случае мы предполагаем, что основную ежедневную работу
с клиентами ведет менеджер, занимающийся оказанием услуг. В том
числе он создает в базе новых клиентов, если они появляются. А
бухгалтерия просто обрабатывает имеющиеся в базе данные для
получения регламентированной отчетности.
Именно поэтому команду создания нового клиента мы отражаем в
разделе Оказание услуг , где работает менеджер, а для бухгалтерии она
невидима, так как не предполагается, что бухгалтеры будут вводить
новых клиентов.
Однако это не лишает бухгалтера такой возможности – он может
создать нового клиента, используя список клиентов (открыть список
клиентов и добавить нового клиента). Наличие команды создания
нового элемента без использования списка элементов – это вопрос
удобства работы, а не ограничения прав пользователя, и мы предо-
ставляем эту удобную возможность менеджеру, а не бухгалтеру.
Закроем окно редактирования справочника Клиенты и запустим
«1С:Предприятие» в режиме отладки. Ответим утвердительно на
запрос конфигуратора об обновлении конфигурации и увидим окно,
содержащее список изменений в структуре конфигурации,
автоматически сгенерированный платформой. В данном случае мы
добавили справочник Клиенты.
Нажмем кнопку Принять (рис. 3.25).
Рис. 3.25. Список изменений в структуре конфигурации
В режиме «1С:Предприятие»
Панель функций текущего раздела
Перед нами откроется окно системы в режиме 1С:Предприятие . Мы
видим, что если перейти в раздел Оказание услуг или Бухгал-терия, то
под панелью разделов появится панель функций текущего раздела
(рис. 3.26).
Панель функций текущего раздела содержит команды, соответству-
ющие выделенному разделу. В начале панели расположены команды,
позволяющие открыть какие-либо списки, а затем команды, позволя-
ющие создать новые элементы данных, сформировать какой-нибудь
отчет или выполнить обработку.
Рис. 3.26. Окно «1С:Предприятия»
В окне настройки командного интерфейса подсистемы Оказание-Услуг
(см. рис. 3.24) в группе команд Панель навигации.Обычное мы
оставили без изменения видимость команды для открытия справоч-
ника Клиенты. Также эта команда по умолчанию доступна и в подси-
стеме Бухгалтерия. Поэтому при выборе соответствующих разделов
прикладного решения в панели функций этих разделов мы видим
команду для открытия нашего первого списка – Клиенты.
Обратите внимание, что название команды Клиенты определяется
свойством Представление списка, которое мы задали для этого спра-
вочника. Если это свойство не задано, то для представления списка
используется значение синонима объекта конфигурации Справочник.
Команды, с помощью которых можно выполнить какие-то другие
действия (кроме открытия списков) в данном разделе, объединены в
стандартные группы, представленные в виде подменю: Создать,
Отчеты, Сервис и группы, созданные разработчиком. Подменю
Создать включает в себя команды создания новых объектов базы
данных, например, документов или элементов справочников.
Мы видим, что в разделе Оказание услуг рядом с командой Клиенты
появилось подменю Создать (см. рис. 3.26). В этом подменю содер-
жится команда для создания элементов нашего первого справочника
Клиенты, которую мы сделали видимой в интерфейсе этого раздела
(в группе команд Панель действий.Создать, см. рис. 3.24). Этой
командой мы и воспользуемся для создания новых элементов спра-
вочника, не открывая при этом списка клиентов.
Обратите внимание, что название стандартной команды создания
нового элемента Клиент определяется свойством Представление
объекта, которое мы задали для этого справочника. Если бы мы это
свойство не задали, то в названии команды использовался бы синоним
объекта конфигурации Справочник Клиенты – Клиенты. Это неудобно,
так как ничем не отличается от команды открытия списка, и не совсем
верно, ведь при создании элемента справочника мы создаем только
одного нового клиента.
Заметьте, что у других разделов прикладного решения панель функций
пуста, так как для этих подсистем мы не устанавливали возможность
отображения справочника Клиенты.
Создание элементов справочника
Пока наш справочник пуст, поэтому добавим в него несколько
элементов. Для этого в панели функций раздела Оказание услуг
раскроем подменю Создать и выполним команду Клиент.
Перед нами откроется форма для создания элемента справочника
(рис. 3.27).
Внесем Ф. И. О. нового клиента Иванов Михаил Юрьевич. Код
вносить не будем, так как он генерируется автоматически.
Нажмем Записать и закрыть.
Рис. 3.27. Создание нового элемента справочника
При этом в правом нижнем углу экрана появится информаци-онное
сообщение о том, какой элемент был создан либо изменен. Это
позволяет не пользоваться списком для того, чтобы убедиться, что
нужный элемент записан.
Добавим еще одного клиента с Ф. И. О. Роман .
Последнего клиента с Ф. И. О. Спиридонова Галина добавим,
пользуясь формой списка клиентов.
Для этого выполним команду Клиенты , расположенную в панели
функций раздела Оказание услуг. После этого откроется форма списка
клиентов (рис. 3.28).
Рис. 3.28. Основная форма списка клиентов
Добавить новый элемент в справочник можно при помощи кнопки
Создать в командной панели формы или клавишей Insert.
Нажмем кнопку Создать.
Обратите внимание, что поле Ф. И. О. при вводе нового клиента
подсвечено красным пунктиром. Это значит, что для этого поля по
умолчанию выполняется проверка заполнения. Если это поле оставить
пустым и попытаться записать клиента, то будет получено сообщение
об ошибке (рис. 3.29).
Так происходит потому, что система автоматически устанавливает
проверку заполнения у некоторых стандартных реквизитов объектов,
например у наименования справочника (если основное представление
справочника в виде наименования).
Рис. 3.29. Сообщение об ошибке при вводе нового элемента справочника
Внесем Ф. И. О. клиента – Спиридонова Галина.
После добавления элементов справочник будет выглядеть следующим
образом (рис. 3.30).
Рис. 3.30. Список клиентов
Чтобы открыть существующий элемент справочника для редактиро-
вания, нужно дважды щелкнуть на нем мышью.
Для быстрого доступа к недавно открытым, созданным или отре-
дактированным объектам базы данных (документам, элементам
справочников и др.) можно воспользоваться историей работы пользо-
вателя, которую сохраняет «1С:Предприятие». Команда для открытия
панели истории находится в заголовке приложения и вызывается при
нажатии кнопки (рис. 3.31).
Рис. 3.31. Форма истории работы пользователя
Из панели истории можно быстро открыть недавно созданный объект
базы данных (например, элемент справочника) или выполнить
команду прикладного решения. Если список истории достаточно
большой, то можно воспользоваться строкой поиска, находящейся
вверху формы.
Однако для начинающих разработчиков может быть удобнее, чтобы
панель истории была всегда открыта.
Настройка отображения панелей
прикладного решения
По умолчанию панель истории не отображается в интерфейсе прило-
жения. Пользователь может самостоятельно включить отображение
этой панели в режиме 1С:Предприятие ( Главное меню > Настройки >
Настройка панелей...). Или это может сделать разработчик в конфигу-
раторе. Воспользуемся для примера второй возможностью.
В режиме «Конфигуратор»
Закроем приложение и вернемся в конфигуратор. Выделим корень
дерева объектов конфигурации ПособиеДляНачинающих, нажатием
правой кнопки мыши вызовем контекстное меню и выберем пункт
Открыть интерфейс клиентского приложения (рис. 3.32).
Рис. 3.32. Вызов настройки расположения панелей прикладного решения
В появившемся окне Интерфейс клиентского приложения справа
находится список всех стандартных панелей прикладного решения.
Перетащим элемент Панель истории в левую часть окна, в группу Низ
(рис. 3.33).
Рис. 3.33. Настройка расположения панелей прикладного решения
Соответственно, если какая-то панель не должна отображаться в
прикладном решении по замыслу разработчика, достаточно пере-
тащить ее из левого списка направо или нажать кнопку Удалить в
командной панели окна. Перетаскиванием мышью в различные
группы (Лево, Право и т.п.) левого списка можно поменять располо-
жение видимых панелей в окне прикладного решения.
В режиме «1С:Предприятие»
Запустим «1С:Предприятие» в режиме отладки и увидим, что в
нижней части окна приложения отображается панель истории работы
пользователя. Нажав на ссылку в этой панели, мы можем открыть для
редактирования один из последних измененных элементов
справочника (рис. 3.34).
Рис. 3.34. Вызов клиентов из панели истории работы пользователя
Теперь уберем отображение этой панели в режиме 1С:Предприятие,
так как постоянно панель истории на экране нам не нужна, она только
будет занимать лишнее место. Для этого выполним команду главного
меню приложения Настройки > Настройка панелей... (рис. 3.35).
В открывшемся окне Редактор панелей перетащим мышью панель
истории в невидимую область, выделенную серым цветом, внизу окна
(рис. 3.36).
Рис. 3.35. Вызов настройки расположения панелей прикладного решения
Рис. 3.36. Настройка расположения панелей прикладного решения
Нажмем ОК. В результате панель станет невидимой в окне приклад-
ного решения, но она всегда может быть открыта в виде отдельной
формы при нажатии кнопки в заголовке приложения.
Путем перетаскивания мышью можно не только изменить видимость
любой панели, но и поменять ее расположение в окне прикладного
решения.
Таким образом, на примере панели истории мы показали возможность
настройки отображения панелей прикладного решения в режимах
Конфигуратор и 1С:Предприятие. При этом необходимо иметь в виду,
что настройка панелей в конфигураторе будет актуальна для всех
пользователей прикладного решения, в то время как настройка
панелей в режиме 1С:Предприятие будет доступна только тому поль-
зователю, который ее выполнил.
Справочник с табличной частью
Теперь мы можем перейти к созданию второго справочника, который
будет использоваться в нашей конфигурации, – справочника Сотруд-
ники.
Этот справочник будет устроен несколько сложнее, чем справочник
Клиенты. Дело в том, что в нем мы будем хранить не только фамилию,
имя и отчество сотрудника, но и информацию о его прошлой трудовой
деятельности.
Эта информация однородна по своей структуре (организация, начало,
окончание работы, занимаемая должность), но количество преды-
дущих мест работы у разных сотрудников может быть различным.
Поэтому для хранения такой информации мы будем использовать
табличную часть справочника.
В режиме «Конфигуратор»
Добавим новый объект конфигурации Справочник . Назовем его
Сотрудники.
На основании имени платформа автоматически заполнит его
синоним. Зададим Представление объекта как Сотрудник.
Представление списка устанавливать не будем, а Расширенное пред-
ставление списка зададим как Список сотрудников (рис. 3.37).
Нажмем кнопку Далее и перейдем на закладку Подсистемы.
По логике нашей конфигурации список сотрудников должен быть
доступен в разделах Оказание услуг и Расчет зарплаты. Действи-
тельно, при оказании услуг должен быть указан сотрудник, оказавший
эти услуги, и по результатам этой работы мы будем начислять
зарплату каждому сотруднику.
Рис. 3.37. Установка основных свойств справочника
Поэтому отметим в списке подсистемы ОказаниеУслуг и РасчетЗар-
платы (рис. 3.38).
Рис. 3.38. Определение списка подсистем,
в которых отображается справочник
Перейдем на закладку Данные. Оставим по умолчанию длину и тип
кода, длину наименования справочника зададим равной 50 символам.
Здесь, также как и для предыдущего справочника, изменим свойство
Синоним стандартного реквизита Наименование , так как речь идет о
сотрудниках.
Для этого нажмем внизу окна кнопку Стандартные реквизиты .
Выделим в списке реквизит Наименование и двойным щелчком мыши
откроем его палитру свойств. Установим свойство Синоним как Ф. И.
О. (рис. 3.39).
Рис. 3.39. Установка синонима стандартного реквизита «Наименование»
Табличная часть
Наша задача – создать справочник, имеющий табличную часть.
Поэтому добавим в справочник новую табличную часть с именем
ТрудоваяДеятельность.
Для этого нажмем кнопку Добавить табличную часть над списком
табличных частей справочника (рис. 3.40).
Зададим имя табличной части – ТрудоваяДеятельность (рис. 3.41).
Рис. 3.40. Добавление новой табличной части справочника
Рис. 3.41. Добавление новой табличной части справочника
Создадим реквизиты табличной части ТрудоваяДеятельность.
Для этого нажмем кнопку Добавить реквизит над списком табличных
частей справочника (рис. 3.42).
Добавим следующие реквизиты:
Организация – тип Строка, длина 100;
НачалоРаботы – тип Дата, состав даты – Дата;
ОкончаниеРаботы – тип Дата, состав даты – Дата;
Должность – тип Строка, длина 100.
Рис. 3.42. Добавление нового реквизита в табличную часть справочника
Для реквизитов НачалоРаботы и ОкончаниеРаботы мы выбрали
состав даты – Дата (рис. 3.43), поскольку в системе «1С:Предприятие»
значения типа Дата содержат как дату, так и время. В данном случае
время начала и окончания работы нам безразлично.
Рис. 3.43. Свойства реквизита табличной части справочника
В заключение отредактируем командный интерфейс раздела Расчет
зарплаты, чтобы нам было удобнее вводить новые элементы спра-
вочника. Сделаем видимой стандартную команду для создания новых
сотрудников.
Для этого откроем окно редактирования объекта конфигурации
Подсистема РасчетЗарплаты и нажмем кнопку Командный интерфейс.
В открывшемся окне Командный интерфейс отразятся все команды
этой подсистемы.
В группе Панель действий.Создать включим видимость у команды
Сотрудник: создать.
Также мы видим, что в группу Панель навигации.Обычное добави-
лась команда Сотрудники для открытия этого списка. Она включена по
умолчанию (рис. 3.44).
Рис. 3.44. Окно настройки командного интерфейса подсистемы
Для подсистемы ОказаниеУслуг никаких команд добавлять не будем,
так как вряд ли понадобится пополнять список сотрудников, находясь
в этом разделе.
На этом создание справочника Сотрудники завершено.
Закроем окно редактирования справочника Сотрудники и запустим
«1С:Предприятие» в режиме отладки.
Ответим утвердительно на запрос конфигуратора об обновлении
конфигурации и увидим окно, содержащее список изменений в
структуре конфигурации, автоматически сгенерированный плат-
формой.
В данном случае мы добавили справочник Сотрудники. Нажмем
кнопку Принять (рис. 3.45).
Рис. 3.45. Список изменений в структуре конфигурации
В режиме «1С:Предприятие»
В открывшемся окне «1С:Предприятия» мы видим, что в панелях
функций разделов Оказание услуг и Расчет зарплаты появилась
команда Сотрудники для открытия списка сотрудников (рис. 3.46).
Рис. 3.46. Раздел «Расчет зарплаты»
Название этой команды определяется синонимом объекта, так как
Представление списка мы для этого справочника не задавали.
Кроме того, в панели функций раздела Расчет зарплаты появилось
подменю Создать, содержащее команду Сотрудник, для создания
новых сотрудников (см. рис. 3.46). Название этой команды определя-
ется свойством Представление объекта , которое мы задали для этого
справочника.
Этой командой мы и воспользуемся для создания новых элементов
справочника, не открывая при этом списка сотрудников.
Заполнение табличной части
Выполним команду Сотрудник.
Перед нами откроется форма для создания элемента справочника.
Заголовок этой формы определяется свойством Представление
объекта.
Эта форма содержит табличную часть с реквизитами, которые мы
описали в конфигураторе для этого справочника.
Создадим следующих сотрудников (рис. 3.47, 3.48, 3.49):
Гусаков Николай Дмитриевич.
Трудовая деятельность:
□ Организация – ЗАО «НТЦ»,
□ Начало работы – 01.02.2009,
□ Окончание работы – 16.04.2012,
□ Должность – Ведущий специалист.
Деловой Иван Сергеевич.
Трудовая деятельность:
□ 1:
□ Организация – ООО «Автоматизация»,
□ Начало работы – 22.01.2006,
□ Окончание работы – 31.12.2012,
□ Должность – Инженер.
□ 2:
□ Организация – ЗАО «НПО СпецСвязь»,
□ Начало работы – 20.06.1996,
□ Окончание работы – 21.01.2005,
□ Должность – Начальник производства.
Симонов Валерий Михайлович.
Трудовая деятельность:
□ Организация – ООО «СтройМастер»,
□ Начало работы – 06.02.2009,
□ Окончание работы – 03.04.2012,
□ Должность – Прораб.
Строки табличной части справочника можноДобавить, Insert или просто перемещением курсорастроки таблицы (рис. 3.47).
добавлятьвниз из последней
кнопкой
Рис. 3.47. Заполнение элемента справочника «Сотрудники»
Если табличная часть состоит из нескольких строк, то расположить их
в произвольном порядке можно путем перетаскивания мышью в
нужное место или с помощью команд Переместить вверх, Пере-
местить вниз из подменю Еще, находящегося в командной панели
таблицы. Для того чтобы удалить только что созданную пустую строку
табличной части, достаточно просто установить курсор на другую,
заполненную строку таблицы.
Рис. 3.48. Заполнение элемента справочника «Сотрудники»
Рис. 3.49. Заполнение элемента справочника «Сотрудники»
Чтобы просмотреть список добавленных сотрудников, выполним
команду Сотрудники.
Откроется форма списка сотрудников.
Обратите внимание, что заголовок этой формы определяется
свойством Расширенное представление списка , которое мы задали для
этого справочника (рис. 3.50).
Рис. 3.50. Список сотрудников
Теперь мы можем приступить к созданию следующего справочника –
Номенклатура.
Иерархический справочник
Справочник Номенклатура будет содержать информацию об услугах,
которые оказывает ООО «На все руки мастер», и о тех материалах,
которые при этом могут быть использованы.
Этот справочник не будет сложным. Единственная особенность,
которой он будет обладать, – наличие иерархической структуры. Для
того чтобы справочником было удобно пользоваться, мы сгруп-
пируем услуги в одну группу, а материалы – в другую.
Кроме этого, поскольку ООО «На все руки мастер» оказывает самые
разные услуги, они также будут логически собраны в несколько групп.
То же самое можно сказать и про материалы.
В режиме «Конфигуратор»
Создадим новый объект конфигурации Справочник и назовем его
Номенклатура. На основании имени платформа автоматически
заполнит его синоним.
Поскольку понятие Номенклатура не имеет единственного числа,
больше никаких свойств, определяющих представление объекта в
интерфейсе приложения, задавать не будем. Вместо Представления
объекта и Представления списка будет использоваться Синоним
объекта – Номенклатура.
Перейдем на закладку Подсистемы.
По логике нашей конфигурации список номенклатуры должен быть
доступен в разделах Учет материалов, Оказание услуг и Бухгал-терия.
Действительно, к первым двум разделам этот справочник имеет
прямое отношение, а для бухгалтерского анализа всегда может
понадобиться список материалов и услуг. Поэтому отметим в списке
подсистем эти подсистемы (рис. 3.51).
Наша задача состоит в создании иерархического справочника.
Перейдем на закладку Иерархия и установим флажок Иерархический
справочник (рис. 3.52).
Рис. 3.51. Определение списка подсистем,
в которых отображается справочник
Рис. 3.52. Установка признака иерархического справочника
На закладке Данные оставим по умолчанию длину и тип кода, длину
наименования справочника зададим равной 100 символам.
Здесь же изменим Синоним стандартного реквизита Родитель нашего
справочника на более понятное обозначение. Для этого нажмем внизу
окна кнопку Стандартные реквизиты. Выделим в списке реквизит
Родитель и двойным щелчком мыши откроем его палитру свойств.
Установим свойство Синоним как Группа номенклатуры (рис. 3.53).
Рис. 3.53. Установка синонима стандартного реквизита «Родитель»
Прежде чем запускать «1С:Предприятие», настроим интерфейс
приложения, чтобы нам было удобнее вводить новые элементы спра-
вочника. Сделаем доступной в панели функций разделов Учет мате-
риалов и Оказание услуг стандартную команду для создания новых
элементов списка номенклатуры.
Для этого в дереве объектов конфигурации выделим ветвь
Подсистемы, вызовем ее контекстное меню и выберем пункт Все
подсистемы (рис. 3.54).
В открывшемся окне слева в списке Подсистемы выделим подсистему
УчетМатериалов.
Справа в списке Командный интерфейс отразятся все команды
выбранной подсистемы.
Рис. 3.54. Вызов окна настройки подсистем
В группе Панель действий.Создать включим видимость у команды
Номенклатура: создать.
Также мы видим, что в группу Панель навигации.Обычное добави-
лась команда Номенклатура для открытия этого списка. Она включена
по умолчанию (рис. 3.55).
Рис. 3.55. Окно настройки подсистем
Выделив в списке подсистем ОказаниеУслуг, проделаем те же
действия.
А для подсистемы Бухгалтерия никаких команд добавлять в панель
действий не будем, так как вряд ли понадобится пополнять список
номенклатуры, находясь в этом разделе.
ПРИМЕЧАНИЕ
Вызвать и настроить фрагмент командного интерфейса для конкретной
подсистемы можно также из окна редактирования этой подсистемы,
нажав кнопку Командный интерфейс. Но в случае, когда нужно настроить
командный интерфейс сразу для нескольких подсистем, удобнее поль-
зоваться редактором Все подсистемы .
Теперь заполним справочник Номенклатура. В процессе заполнения
мы покажем, как создавать группы и переносить элементы из одной
группы в другую.
Закроем окно редактирования справочника Номенклатура и запустим
«1С:Предприятие» в режиме отладки.
Ответим утвердительно на запрос конфигуратора об обновлении
конфигурации и увидим окно, содержащее список изменений в
структуре конфигурации, автоматически сгенерированный плат-
формой. В данном случае мы добавили справочник Номенклатура .
Нажмем кнопку Принять (рис. 3.56).
Рис. 3.56. Список изменений в структуре конфигурации
В режиме «1С:Предприятие»
В открывшемся окне «1С:Предприятия» мы видим, что в панелях
функций разделов Учет материалов, Оказание услуг и Бухгалтерия
появилась команда Номенклатура для открытия списка номенклатуры
(рис. 3.57).
Название этой команды определяется синонимом объекта, так как
других представлений мы для этого справочника не задавали.
Выполним команду Номенклатура в разделе Учет материалов .
Откроется форма списка номенклатуры.
Создание элементов в иерархическом справочнике
Создадим две группы в корне справочника: Материалы и Услуги.
Для этого нажмем кнопку Создать группу в командной панели формы
списка (рис. 3.57).
Рис. 3.57. Создание групп справочника «Номенклатура»
Зададим наименование групп: Материалы , Услуги. Поля Группа
номенклатуры и Код заполнять не будем.
Затем двойным щелчком мыши раскроем группу Материалы и
создадим в ней пять элементов:
Строчный трансформатор Samsung,
Строчный трансформатор GoldStar ,
Транзистор Philips 2N2369,
Шланг резиновый,
Кабель электрический.
Для добавления элемента в открытую группу справочника нажмем
кнопку Создать в командной панели формы списка справочника.
Перед нами откроется форма для создания элемента справоч-ника.
Причем если новый элемент добавляется из формы списка в
некоторую открытую группу, то система автоматически подставляет в
качестве группы номенклатуры текущую группу (рис. 3.58).
Рис. 3.58. Создание элементов в группе «Материалы»
Для создания нового элемента справочника можно также воспользо-
ваться командой Номенклатура, которая появилась в разделах Учет
материалов и Оказание услуг в подменю Создать.
В этом случае, если элемент добавляется командой из панели функций
текущего раздела, она никак не связана со списком номенкла-туры.
Поэтому система не знает, в какую группу добавлять элемент, и группу
номенклатуры нужно указывать вручную (рис. 3.59).
Рис. 3.59. Создание элементов в группе «Материалы»
Причем при выборе значения в поле Группа номенклатуры можно
воспользоваться удобной возможностью поиска по строке нужного
значения из справочника. Достаточно ввести первые несколько букв
искомого наименования, и подходящее значение будет предложено
для выбора.
При создании новых материалов или услуг список номенклатуры
открывать необязательно. Факт добавления элемента в справочник
отражается в сообщении в нижнем углу экрана.
Затем раскроем группу Услуги и тоже создадим в ней несколько
элементов – услуги по ремонту телевизоров (рис. 3.60).
Диагностика,
Ремонт отечественного
телевизора, Ремонт импортного
телевизора.
И услуги по установке стиральных машин:
Подключение воды,
Подключение электричества.
Рис. 3.60. Создание элементов в группе «Услуги»
Перенос элементов в другие группы
Теперь разнесем услуги по двум смысловым группам: услуги по
ремонту телевизоров и услуги по установке стиральных машин.
Для этого в группе Услуги создадим еще две группы: Телевизоры и
Стиральные машины (рис. 3.61).
Рис. 3.61. Создание новых групп в группе «Услуги»
Для того чтобы переместить услуги в соответствующие группы,
можно мышью перетащить выделенный элемент справочника в
нужную группу или выполнить команду Переместить в группу из
подменю Еще, находящегося в командной панели формы списка.
Можно также открыть для редактирования выделенный элемент спра-
вочника и изменить поле Группа номенклатуры (рис. 3.62).
Рис. 3.62. Перенос элемента справочника в другую группу
Переместим в группу Телевизоры услуги Диагностика, Ремонт отече-
ственного телевизора и Ремонт импортного телевизора.
Услуги Подключение воды и Подключение электричества переместим
в группу Стиральные машины.
Затем в группе Материалы создадим две группы: Радиодетали и
Прочее. В группу Прочее поместим Кабель электрический и Шланг
резиновый. Остальные материалы переместим в группу Радиодетали.
На этом примере покажем, как создавать недостающие элементы
справочников во время их выбора в других полях.
Откроем элемент Кабель электрический из группы Материалы. Нам
нужно заменить значение в поле Группа номенклатуры на Прочее.
Если такой группы еще нет в справочнике, то вовсе не обязательно
создавать ее заранее. В окне выбора значения нажмем кнопку Создать
со знаком +. Таким образом, платформа «понимает», что мы хотим
добавить новую группу, и открывает форму для создания группы
справочника (рис. 3.63).
Введем в этой форме наименование группы Прочее, выберем в
качестве поля Группа номенклатуры для новой группы уже
имеющеюся группу Материалы и нажмем Записать и закрыть. После
этого внутри группы Материалы будет создана группа Прочее, и
ссылка на нее будет подставлена в поле Группа номенклатуры для
элемента номенклатуры Кабель электрический.
Рис. 3.63. Создание группы номенклатуры при выборе в
поле «Группа номенклатуры»
Представим теперь список номенклатуры в виде дерева. Для этого из
подменю Еще в командной панели формы списка номенклатуры
вызовем пункт Режим просмотра и выберем режим Дерево. В резуль-
тате список номенклатуры будет выглядеть следующим образом (рис.
3.64).
Рис. 3.64. Список номенклатуры в виде дерева
Справочник с предопределенными
элементами
В заключение мы создадим справочник Склады, который будет
содержать информацию о складах, используемых ООО «На все руки
мастер».
Этот справочник будет включать в себя один предопределенный
элемент – склад Основной, на который будут поступать все
материалы.
Наша задача – создать справочник, содержащий предопределенные
элементы.
В режиме «Конфигуратор»
Откроем конфигуратор и создадим новый объект конфигурации Спра-
вочник с именем Склады. На основании имени платформа автомати-
чески заполнит его синоним.
Зададим Представление объекта как Склад. Вместо свойства Пред-
ставления списка будет использоваться Синоним объекта – Склады
(рис. 3.65).
Рис. 3.65. Установка основных свойств справочника
Перейдем на закладку Подсистемы.
По логике нашей конфигурации список складов должен быть доступен
в разделах Оказание услуг и Учет материалов, так как поступление
материалов и оказание услуг, как правило, учитываются в разрезе
складов. Поэтому отметим в списке подсистем эти подси-стемы (рис.
3.66).
Рис. 3.66. Определение списка подсистем,
в которых отображается справочник
Свойство «Быстрый выбор»
Заполним еще одно свойство справочника Склады – Быстрый выбор.
Для этого перейдем на закладку Поле ввода и установим соответству-
ющий флажок (рис. 3.67).
Рис. 3.67. Установка свойства «Быстрый выбор»
Дело в том, что по умолчанию при нажатии кнопки выбора
в поле,
содержащем ссылку на элемент справочника, открывается форма
выбора элемента справочника. Она может быть не всегда удобна,
особенно в том случае, когда справочник неиерархический и заведомо
содержит небольшое количество элементов.
Свойство Быстрый выбор как раз позволяет выбирать элементы не из
отдельной формы, а из небольшого выпадающего списка, запол-
ненного элементами этого справочника (рис. 3.68).
Рис. 3.68. Выбор склада из выпадающего списка
Этот вариант наиболее удобен для списка складов, так как их,
вероятно, будет немного.
Для остальных справочников свойство Быстрый выбор мы не уста-
навливали, так как Номенклатура – иерархический справочник, и,
следовательно, быстрый выбор для него не имеет смысла. А список
сотрудников и, особенно, список клиентов может быть очень
большим, и выпадающий список в этом случае будет неудобно
прокручивать.
Предопределенные элементы
Перейдем на закладку Прочее и нажмем кнопку Предопределенные.
Система откроет список предопределенных элементов справочника.
Сейчас он пуст, поэтому нажмем кнопку Добавить и создадим предо-
пределенный элемент с именем Основной (рис. 3.69).
Обратите внимание на то, что помимо наименования мы задали еще и
имя предопределенного элемента справочника.
В дальнейшем, когда мы будем использовать встроенный язык, мы
сможем обратиться к этому элементу справочника, используя имя,
присвоенное ему в конфигураторе. Дело в том, что наимено-вание
предопределенного элемента справочника пользователь может
изменить, а имя пользователь не видит и изменить не может.
Рис. 3.69. Заполнение предопределенного элемента справочника
Прежде чем запускать «1С:Предприятие», настроим интерфейс
приложения, чтобы нам было удобнее вводить новые элементы спра-
вочника. В разделе Учет материалов сделаем доступной стандартную
команду для создания новых складов.
Для этого откроем окно редактирования объекта конфигу-
рации Подсистема УчетМатериалов и нажмем кнопку Командный
интерфейс. В открывшемся окне Командный интерфейс отразятся все
команды этой подсистемы.
В группе Панель действий.Создать включим видимость у команды
Склад: создать.
Также мы видим, что в группу Панель навигации.Обычное доба-вилась
команда Склады для открытия этого списка. Она включена по
умолчанию (рис. 3.70).
Закроем окно редактирования справочника Склады и запустим
«1С:Предприятие» в режиме отладки.
Рис. 3.70. Окно настройки командного интерфейса подсистемы
Ответим утвердительно на запрос конфигуратора об обновлении
конфигурации и увидим окно, содержащее список изменений в
структуре конфигурации, автоматически сгенерированный плат-
формой. В данном случае мы добавили справочник Склады.
Нажмем кнопку Принять (рис. 3.71).
Рис. 3.71. Список изменений в структуре конфигурации
В режиме «1С:Предприятие»
В открывшемся окне «1С:Предприятия» мы видим, что в разделе Учет
материалов в подменю Создать добавилась команда Склад для
создания новых складов (рис. 3.72).
Название этой команды определяется свойством Представление
объекта, которое мы задали для этого справочника.
Кроме того, в разделах Оказание услуг и Учет материалов появилась
команда Склады для открытия списка складов (см. рис. 3.72). Название
этой команды определяется синонимом объекта конфи-гурации, так
как Представление списка мы для этого справочника не задавали.
Рис. 3.72. Раздел «Учет материалов»
Выполним команду Склады в разделе Учет материалов. Откроется
форма списка складов.
В списке складов уже есть один элемент с наименованием Основной.
Это предопределенный элемент, который мы создали в конфигура-
торе.
Выполнив команду Склад из подменю Создать, добавим в
справочник еще один склад, который назовем Розничный (рис. 3.73).
Рис. 3.73. Элементы справочника «Склады»
На этом мы завершим подготовительную работу по созданию
справочников и сделаем теоретическое отступление, касающееся
предопределенных элементов и тех вопросов, которые постоянно
появляются у вас на экране при запуске и продолжении отладки.
Теория
Предопределенные элементы
Обратите внимание, что система отмечает различными пиктограм-
мами обычный и предопределенный элементы справочника (см. рис.
3.73).
Несмотря на то, что можно изменить код или наименование у обоих
элементов, имя предопределенного элемента, которое мы задали в
конфигураторе (Основной), остается неизменным, и в дальнейшем мы
сможем обратиться к предопределенному элементу справочника по
этому имени из встроенного языка.
Таким образом, на предопределенные элементы могут опираться
алгоритмы работы конфигурации.
Из этого видно, в чем заключается принципиальная с точки зрения
конфигурации разница между обычными и предопределенными
элементами справочника.
Обычные элементы непостоянны для конфигурации. В процессе
работы пользователя они могут появиться, исчезнуть. Поэтому
конфигурация хоть и может отличить их друг от друга, но рассчиты-
вать на них в выполнении каких-либо алгоритмов она не может в силу
их непостоянства.
Предопределенные элементы, напротив, постоянны. В процессе
работы пользователя они находятся всегда на своих местах и
исчезнуть не могут.
То есть теоретически пользователь может их удалить, но для облег-
чения задачи мы не даем пользователю прав не только на интерак-
тивное удаление предопределенных элементов, но и на интерактивное
удаление объектов вообще (см. занятие 22 «Список пользователей и
их роли»).
Поэтому конфигурация может работать с ними вполне уверенно и
опираться на них при отработке различных алгоритмов. По этой
причине каждый из предопределенных элементов имеет уникальное
имя для того, чтобы к нему можно было обратиться средствами встро-
енного языка.
Основная конфигурация
и конфигурация базы данных
До сих пор мы не углублялись в структуру системы «1С:Пред-
приятие», но теперь пришло время сказать об этом несколько слов.
Вспомните, с точки зрения пользователя, «программа 1С» состоит из
платформы и конфигурации. Мы говорили, что в каждом конкретном
случае используется одна из множества возможных конфигураций.
Настало время сказать, что это не совсем так.
Почему не так? Потому что в каждой информационной базе суще-
ствуют как минимум две конфигурации.
Почему не совсем так? Потому что пользователь действительно
работает всегда только с одной конфигурацией. Вторая конфигу-рация
предназначена для разработчика или человека, который должен
вносить изменения в конфигурацию (например, администратора базы
данных). Для пользователя она «не видна».
Конфигурация, предназначенная для разработчика, называется
Основная конфигурация (или просто Конфигурация – та, которую мы
редактировали в конфигураторе).
Конфигурация, с которой работают пользователи, называется Конфи-
гурация базы данных.
Основную конфигурацию можно редактировать. Конфигурацию базы
данных редактировать нельзя, можно только произвести обновление
конфигурации базы данных на основе основной конфигурации.
Однако у вас может возникнуть естественный вопрос: если у нас есть
две конфигурации – одна, которую можно редактировать, и другая, с
которой работают пользователи, то почему же тогда основной назы-
вается редактируемая конфигурация? Ведь с точки зрения конечного
продукта основной является именно конфигурация, с которой
работают пользователи!
Дело в том, что в данном случае название «основная» дано с точки
зрения разработчика, и это имеет глубокий практический смысл.
В общем случае информационная база «1С:Предприятия» может
хранить более двух конфигураций: основную конфигурацию, конфи-
гурацию базы данных и несколько конфигураций поставщиков.
Кроме этого, вне информационной базы может существовать
хранилище. В нем находится конфигурация, предназначенная для
групповой разработки.
Вне информационной базы может существовать также некоторое
количество файлов конфигураций, в том числе файлы новой поставки
(рис. 3.74).
Рис. 3.74. Структура конфигурации
Конфигурация поставщика, находящаяся в информационной базе,
содержит предыдущее состояние поставки. Возможна ситуация, когда
конфигурация находится на поддержке одновременно у нескольких
поставщиков, каждый из которых поддерживает только свою часть в
виде отдельной конфигурации. В этом случае информационная база
будет хранить несколько конфигураций поставщиков (состояние
предыдущей поставки для каждого поставщика отдельно).
Файлы новой поставки могут существовать в виде файлов конфи-
гураций (полная поставка) и файлов обновлений (поставка обнов-
лений).
Хранилище конфигурации содержит конфигурацию, предназначенную
для групповой разработки. Она хранится не в виде единой конфигу-
рации, а в виде отдельных объектов в разрезе версий конфигурации.
Таким образом, мы можем получить из хранилища конфигурацию
любой версии – для этого она «собирается» из объектов нужной
версии.
Теперь представьте, что между всеми этими видами конфигураций
существует возможность сравнения и обновления. В этом случае очень
легко запутаться, и название Основная конфигурация как нельзя лучше
отражает конечную цель всех изменений.
Теперь, возвращаясь к основной конфигурации и конфигурации базы
данных, нужно заметить, что внутреннее разделение на две конфи-
гурации позволяет вносить изменения, не прерывая работы пользо-
вателей, потому что изменения вносятся в основную конфигурацию, с
которой пользователи не работают.
Затем, когда разработчик будет уверен в том, что все изменения,
которые он внес, верны, можно будет быстро произвести обновление
конфигурации базы данных, используя основную конфигурацию.
Если эти изменения не затрагивают структуру базы данных (например,
если не нужно изменять таблицы, если поменялся только
программный код в каком-то модуле), то обновить конфигурацию
базы данных можно не прерывая работы пользователей. Это так назы-
ваемое динамическое обновление.
Пользователи увидят изменения только после того, как перезапустят
свое приложение. Используя метод встроенного языка Конфигурация-
БазыДанныхИзмененаДинамически() , можно определить программно,
нужно ли перезапускать приложение.
Но если изменения касаются структуры базы данных, например,
добавился новый реквизит у справочника или изменился тип суще-
ствующего реквизита, то тогда требуется реструктуризация базы
данных и нужно завершить работу всех пользователей.
Разработчик всегда может сравнить основную конфигурацию и
конфигурацию базы данных, может вернуться к исходному состоянию
основной конфигурации, используя конфигурацию базы данных (если,
например, совсем запутался в своих изменениях).
Таким образом, взаимодействие двух конфигураций можно предста-
вить следующим образом (рис. 3.75).
Рис. 3.75. Взаимодействие двух конфигураций
Когда разработчик работает с основной конфигурацией, система
всегда подсказывает ему, отличается ли его вариант основной конфи-
гурации от того, который сохранен, и отличается ли сохраненный
вариант основной конфигурации от конфигурации базы данных.
Если разработчик редактирует основную конфигурацию и редакти-
руемый вариант основной конфигурации отличается от того, который
сохранен, в заголовке окна дерева конфигурации появляется признак
модифицированности конфигурации (*), рис. 3.76.
Рис. 3.76. Заголовок окна дерева конфигурации
Если сохраненный вариант основной конфигурации отличается от
конфигурации базы данных, в заголовке окна дерева конфигурации
появляется знак отличия конфигураций (<!>), рис. 3.77.
Рис. 3.77. Заголовок окна дерева конфигурации
Для сохранения основной конфигурации следует использовать
команду Конфигурация > Сохранить конфигурацию, а для обновления
конфигурации базы данных – команду Конфигурация > Обновить
конфигурацию базы данных.
При выполнении команды Отладка > Начать отладку система сама
сначала сохраняет основную конфигурацию, а затем производит ее
сравнение с конфигурацией базы данных. Если конфигурации отли-
чаются, выдается запрос на обновление конфигурации базы данных,
который вы видели в предыдущих примерах.
При выполнении команды Отладка > Продолжить система после
описанных выше действий предлагает еще и перезапустить прило-
жение, чтобы прекратить текущий сеанс, запущенный в режиме отладки.
Таким образом, система старается облегчить жизнь разработчика и автоматизировать часто
выполняемые операции.
Важным фактом является то, что именно в момент обновления конфи-гурации базы данных система
создает (модифицирует) в базе данных те структуры хранения данных, которые мы описали в виде
объектов конфигурации.
Таким образом, обычные элементы справочника пользователь добавляет в ту структуру базы
данных, которую создала система на основе объекта конфигурации Справочник.
Предопределенные элементы этого справочника система добавляет в эту структуру сама, на основе
того описания, которое содержится в объекте конфигурации Справочник.
Отсюда следует немаловажный факт (о котором говорилось в преды-дущем разделе), что если простые
элементы справочника «безраз-личны» для конфигурации, то предопределенные элементы важны для
нее, поскольку на них могут быть завязаны алгоритмы работы конфигурации.ЗАНЯТИЕ 4
Документы
На этом занятии мы познакомимся с объектом конфигурации
Документ. Вы узнаете, для чего он нужен, какова его структура и
какими основными свойствами он обладает.
Затем мы создадим несколько документов и покажем, каким образом
разработчик может задавать собственные алгоритмы выполнения тех
или иных действий, связанных с работой документа.
Кроме этого, вы узнаете, как создать форму документа, познакоми-
тесь с некоторыми конструкциями встроенного языка и узнаете, что
такое типообразующие объекты конфигурации.
Что такое документ
Объект конфигурации Документ предназначен для описания инфор-
мации о совершенных хозяйственных операциях или о событиях,
произошедших в жизни организации вообще. Как правило, в работе
любой фирмы используются такие документы, как приходные
накладные, приказы о приеме на работу, платежные поручения, счета
и т.д. Свойства и структура этих документов описываются в объектах
конфигурации Документ, на основе которых платформа создает в базе
данных таблицы для хранения информации из этих документов.
Логика работы документов отличается от логики работы других
объектов конфигурации. Документ обладает способностью прове-
дения. Факт проведения документа означает, что событие, которое он
отражает, повлияло на состояние учета.
До тех пор, пока документ не проведен, состояние учета неизменно, и
документ не более чем черновик, заготовка. Как только документ
будет проведен, изменения, вносимые документом в учет, вступят в
силу и состояние учета будет изменено.
Поскольку документ вносит изменения в состояние учета, он всегда
«привязан» к конкретному моменту времени. Это позволяет отражать
в базе данных фактическую последовательность событий.
Следующим важным фактом, вытекающим из двух предыдущих,
является то, что система «1С:Предприятие» имеет механизмы, позво-
ляющие отслеживать правильность состояния учета. Предположим,
что мы изменили один из проведенных ранее документов и снова
провели его задним числом. В этом случае система «1С:Предприятие»
способна отследить, повлияют ли внесенные нами изменения
на последующие проведенные документы, и, если это так, система
способна перепровести необходимые документы.
В процессе работы пользователь может самостоятельно создавать
новые документы – приходные и расходные накладные, счета и т.п.
В базе данных каждый документ представляет собой отдельную
запись в основной таблице, хранящей информацию об этом виде
документов (рис. 4.1).
Рис. 4.1. Стандартные реквизиты документа «Приходная накладная»
в режиме «Конфигуратор», в режиме «1С:Предприятие» и в базе данных
Каждый документ, как правило, содержит информацию, которая
подробнее описывает этот документ. Например, каждый документ
Приходная накладная может содержать информацию о поставщике
товаров, складе, на который приходуется товар, и т.д.
Набор такой информации является одинаковым для всех доку-ментов
одного вида, и для описания такого набора используются реквизиты
объекта конфигурации Документ, являющиеся подчи-ненными
объектами конфигурации. Большинство реквизитов
разработчик создает самостоятельно, однако у каждого объекта
конфи-гурации Документ по умолчанию существуют стандартные
реквизиты.
Два наиболее важных из них – это Дата и Номер. Поскольку тип
данных Дата содержит дату и время с точностью до секунды, этот
реквизит и определяет в основном положение документа на оси
времени (рис. 4.2).
Рис. 4.2. Реквизит «Поставщик» документа «Приходная накладная»
в режиме «Конфигуратор», в режиме «1С:Предприятие» и в базе данных
Кроме этого, каждый документ содержит, как правило, некоторый
набор информации, которая одинакова по своей структуре, но
различна по количеству и предназначена для разных документов. Так,
например, каждый документ Приходная накладная может содержать
список приходуемых товаров.
Для описания подобной информации служат табличные части объекта
конфигурации Документ. В этом случае в базе данных будут созданы
дополнительные таблицы для хранения табличных частей, подчи-
ненных конкретному документу (рис. 4.3).
Рис. 4.3. Табличная часть «Список товаров» документа
«Приходная накладная» в режиме «Конфигуратор», в
режиме «1С:Предприятие» и в базе данных
Формы документа
Для визуализации документа существует несколько основных форм,
которые, как мы уже говорили, имеют несколько вариантов названий
(табл. 4.1).
Таблица 4.1. Основные формы документа
В контекстном меню
В конструкторе форм
и в палитре свойств
Форма объекта
Форма документа Форма
Форма списка
списка документа
Форма выбора
Форма выбора документа
На закладке формы
Документа
Списка
Выбора
УЗНАЙ БОЛЬШЕ!
О структуре объектов встроенного языка, предназначенных для
работы с документами, можно прочитать в разделе «Краткий спра-
вочник разработчика. Документы».
Теория: типы данных, типообразующие
объекты конфигурации
Прежде чем мы приступим к практическому созданию документов,
необходимо сделать отступление о том, какие типы данных могут
использоваться в системе «1С:Предприятие».
На предыдущем занятии, когда мы создавали реквизиты справоч-
ников или табличных частей, мы всегда указывали тип значения,
которое может принимать этот реквизит. Это были примитивные типы
данных: Число, Строка , Дата и Булево. Примитивные типы данных
изначально определены в системе, и их набор ограничен.
Наряду с такими изначально определенными в любой конфигурации
типами могут существовать типы данных, определяемые только
конкретной конфигурацией. То есть такие типы, которые не присутст-
вуют в конфигурации постоянно, а появляются в результате того, что
добавлены некоторые объекты конфигурации.
Например, после того как мы создали объект конфигурации
Справочник Склады, сразу же появилось несколько новых типов
данных, связанных с этим справочником. Среди них, например,
СправочникСсылка.Склады. И если теперь мы укажем какому-
либо реквизиту этот тип данных, то сможем хранить в нем ссылку на
конкретный объект справочника Склады.
Объекты конфигурации, которые могут образовывать новые типы
данных, называются типообразующими.
Например, после создания нового справочника Номенклатура стано-
вятся доступны следующие типы данных:
СправочникМенеджер.Номенклатура,
СправочникСсылка.Номенклатура,
СправочникОбъект.Номенклатура,
СправочникВыборка.Номенклатура .
Следует еще раз отметить, что эти типы данных не поддержива-ются
платформой изначально и существуют только в конкретном
прикладном решении.
Это небольшое отступление было необходимо потому, что уже при
создании первого документа мы столкнемся с использованием типов
данных СправочникСсылка.Склады и СправочникСсылка.Номенкла-тура,
которые появились в нашей конфигурации в результате создания
объектов конфигурации Справочник Склады и Номенклатура.
Документ «Приходная накладная»
После того как мы познакомились с объектом конфигурации Документ,
создадим несколько таких объектов, чтобы иметь возмож-ность
фиксировать события, происходящие в нашем ООО «На все руки
мастер».
Одними из самых популярных услуг нашего предприятия является
ремонт телевизоров и установка стиральных машин. И в том, и в
другом случае требуются некоторые материалы, которые расхо-
дуются в процессе оказания этих услуг. Поэтому двумя важнейшими
событиями в хозяйственной жизни нашей организации будут являться
поступление материалов и оказание услуг.
Для отражения этих событий в базе данных мы создадим два
документа: Приходная накладная и Оказание услуги.
Документ Приходная накладная будет фиксировать факт поступления
в нашу организацию необходимых материалов, а документ Оказание
услуги – фиксировать оказание услуг и расход материалов, которые
используются при оказании этих услуг.
В режиме «Конфигуратор»
Добавление документа
Откроем конфигуратор и добавим новый объект конфигурации
Документ . На закладке Основные зададим имя документа – Приход-
наяНакладная. На основании имени платформа автоматически
заполнит его синоним.
Здесь же определим, как будет представлен документ в интерфейсе
«1С:Предприятия». Представление объекта задавать не будем, вместо
него будет использоваться Синоним объекта. Это нам вполне
подходит, так как мы задали его имя в единственном числе.
Представление списка, наоборот, зададим во множественном числе
как Приходные накладные (рис. 4.4).
Рис. 4.4. Установка основных свойств документа
Нажмем Далее и перейдем на закладку Подсистемы.
По логике нашей конфигурации список приходных накладных должен
быть доступен в разделах Учет материалов и Бухгалтерия. Действи-
тельно, к первому разделу этот документ имеет прямое отношение, а
для бухгалтерского анализа всегда может понадобиться список
документов, отражающих поступление материалов.
Поэтому отметим в списке подсистем эти подсистемы (рис. 4.5).
Рис. 4.5. Определение списка подсистем,
в которых будет отражаться документ
Перейдем на закладку Данные и создадим реквизит документа с
именем Склад. Для этого нажмем кнопку Добавить над списком
реквизитов документа (рис. 4.6).
Рис. 4.6. Создание реквизита документа
Реквизиты ссылочного типа
Выберем для реквизита ссылочный тип данных СправочникСсыл-
ка.Склады. Этот тип стал доступен в конфигурации после создания
объекта конфигурации Справочник Склады (рис. 4.7).
Рис. 4.7. Свойства реквизита документа
Свойство «Значение заполнения»
реквизита объекта конфигурации
Теперь покажем, как можно облегчить жизнь пользователя при
приходовании материалов. Работа в автоматизируемой нами фирме
построена таким образом, что, как правило, все поступающие товары
приходуются на основной склад.
Поэтому в палитре свойств для созданного нами реквизита Склад
документа найдем свойство Значение заполнения.
В качестве значения этого свойства выберем предопределенный
элемент справочника Склады – Основной.
Таким образом, при создании нового документа склад будет сразу
заполняться значением Основной, и пользователю не придется делать
это вручную (рис. 4.8).
Рис. 4.8. Выбор значения заполнения по умолчанию для реквизита «Склад»
После этого добавим в документ табличную часть с именем
Материалы. Для этого нажмем кнопку Добавить табличную часть над
списком табличных частей документа (рис. 4.9).
Рис. 4.9. Создание новой табличной части документа
Проверка заполнения табличной части
Кроме имени табличной части установим свойство Проверка запол-
нения в значение Выдавать ошибку. Тем самым мы задаем условие, что
документ Приходная накладная обязательно должен содержать
табличную часть, то есть список приходуемых материалов. Иначе
будет выдано сообщение об ошибке, и документ не будет сохранен.
Создадим реквизиты табличной части Материалы. Для этого нажмем
кнопку Добавить реквизит в разделе описания табличных частей
документа (рис. 4.10):
Материал, тип СправочникСсылка.Номенклатура;
Количество, тип Число, длина 15 , точность 3, неотрицательное;
Цена, тип Число, длина 15, точность 2, неотрицательное;
Сумма, тип Число, длина 15, точность 2, неотрицательное.
Для каждого реквизита табличной части также установим свойство
Проверка заполнения в значение Выдавать ошибку. Тем самым при
записи документа будет проверяться на заполнение не только
табличная часть в целом, но и ее отдельные реквизиты.
Рис. 4.10. Создание реквизитов табличной части документа
Перейдем на закладку Нумерация и убедимся, что свойство Авто-
нумерация включено. Это обеспечит автоматическую генерацию
уникальных номеров для создаваемых нами документов.
В заключение отредактируем командный интерфейс, чтобы в разделе
Учет материалов была доступна команда создания новых документов.
Для этого откроем окно редактирования объекта конфигу-
рации Подсистема УчетМатериалов и нажмем кнопку Командный
интерфейс. В открывшемся окне Командный интерфейс отразятся все
команды этой подсистемы.
В группе Панель действий.Создать включим видимость у команды
Приходная накладная: создать (рис. 4.11).
Рис. 4.11. Окно настройки командного интерфейса подсистемы
В режиме «1С:Предприятие»
Запустим «1С:Предприятие» в режиме отладки и протестируем полу-
чившийся документ.
В открывшемся окне «1С:Предприятия» мы видим, что в разделах
Бухгалтерия и Учет материалов появилась команда Приходные
накладные для открытия списка приходных накладных (рис. 4.12).
Рис. 4.12. Раздел «Учет материалов»
Название этой команды определяется свойством Представление
списка , которое мы задали для этого документа.
Кроме того, в разделе Учет материалов в подменю Создать добави-
лась команда Приходная накладная для создания новых документов
этого вида. Название этой команды определяется синонимом, так как
Представление объекта мы для этого документа не задавали (см. рис.
4.12).
Добавление приходных накладных
Пока в нашей базе данных нет ни одного документа Приходная
накладная , поэтому выполним команду Приходная накладная из
подменю Создать в разделе Учет материалов и создадим новую
приходную накладную.
Откроется форма документа. Заголовок этой формы Приходная
накладная совпадает с синонимом документа.
Система автоматически подставит текущую дату создания документа
и нулевое время, так как документ еще не проведен. В качестве
времени документа при оперативном проведении ему присваивается
оперативная отметка времени.
Поле Номер не заполнено, но система сама сгенерирует для нового
документа уникальный номер, так как свойство Автонумерация для
документа включено по умолчанию. Новый номер будет сохранен в
момент записи документа.
Обратите внимание, что склад уже заполнен значением Основной , как
мы и задали в свойствах этого реквизита.
Нам осталось только заполнить табличную часть приходной
накладной материалами для ремонта телевизоров так, как показано на
рисунке (рис. 4.13).
Рис. 4.13. Создание нового документа «Приходная накладная No 1»
Обратите внимание, что при переходе к еще незаполненной колонке
Материал (в табличной части документа) автоматически открывается
окно выбора значения из справочника Номенклатура, так как этот
реквизит имеет ссылочный тип данных и ссылается на справочник
Номенклатура (см. рис. 4.13).
Как только мы начнем вводить название материала в это поле,
платформа автоматически найдет материалы, наименование которых
начинается с введенных нами символов, и предложит их нам для
выбора. А также при нажатии кнопки Показать все открывается форма
для выбора элементов этого справочника.
Нажмем Провести и закрыть.
Документ будет сохранен и проведен, ему будет присвоен автомати-
чески сгенерированный системой номер и текущее время проведения
документа.
Аналогичным образом мы создадим второй документ, который будет
приходовать на Основной склад материалы для установки стиральных
машин (рис. 4.14).
Рис. 4.14. Создание нового документа «Приходная накладная No 2»
Нажмем Провести и закрыть.
Документ будет сохранен и проведен, ему будет присвоен автомати-
чески сгенерированный системой номер и текущее время проведения
документа.
Обратите внимание, что при вводе нового документа табличная часть
в целом и каждая ее колонка подсвечены красным пунктиром. Это
значит, что для них выполняется проверка заполнения. Если не ввести
ни одной строки в табличную часть документа или оставить незапол-
ненной какую-либо колонку табличной части и попытаться провести
документ, то будет получено сообщение об ошибке (рис. 4.15).
Рис. 4.15. Сообщение об ошибке при вводе нового элемента документа
Чтобы просмотреть список созданных документов, выполним
команду Приходные накладные.
В форме списка мы видим два созданных нами документа, отме-
ченных пиктограммой, указывающей на то, что документы проведены
(зеленая галочка в пиктограмме документа, рис. 4.16).
Рис. 4.16. Список приходных накладных
Теория: справочники и документы
Интересно обратить внимание на разницу в употреблении единствен-
ного и множественного числа при именовании объектов вида Спра-
вочник и Документ.
Если вы откроете дерево типовой конфигурации, то увидите, что все
объекты, расположенные в ветке Справочники, как правило,
именованы во множественном числе. В ветке же Документы, как
правило, в единственном числе.
Может сложиться впечатление, что, создавая объект конфигурации
Справочник , мы делаем хранилище для элементов этого справочника,
а создавая объект конфигурации Документ, – некий шаблон одного
конкретного документа. На самом деле это не так.
Создавая в конфигураторе объект вида Справочник, мы даем ему
наименование во множественном числе (Товары). При этом подраз-
умевается, что в базе данных этот объект будет состоять из элементов,
описывающих конкретные товары (в единственном числе).
Создавая в конфигураторе объект вида Документ, мы даем ему наиме-
нование в единственном числе (ПриходнаяНакладная ), однако на
самом деле мы создаем такое же хранилище, как и в случае со спра-
вочником. Каждая запись этого хранилища будет описывать один
документ, одну приходную накладную (в единственном числе).
Поэтому концептуально правильно было бы в конфигураторе задавать
наименование объекта вида Документ во множественном числе,
подчеркивая тем самым описание набора документов этого вида
(например, ПриходныеНакладные ).
Однако психология человека такова, что, открывая ветку Документы,
он ожидает увидеть перечисление их в единственном числе, а никак не
во множественном. Так происходит потому, что в реальной жизни
трудно найти подходящий термин для описания совокупности доку-
ментов одного вида (совокупность записей одного вида обозначить
гораздо проще – справочник, план и т.д.). Поэтому соответствующая
ветка объектов конфигурации имеет название Документы, а объекты
конфигурации, создаваемые в этой ветке, именуются в единственном
числе, хотя, по сути, сама ветка содержит описания хранилищ доку-
ментов разных видов, а каждый элемент в этой ветке описывает набор
всех документов одного вида.
Автоматический пересчет суммы в
строках документа
Наверняка вы обратили внимание на то, что при заполнении документа
приходится вводить сумму в каждой строке. Это неудобно, и
возникает естественное желание автоматизировать работу
документа так, чтобы сумма вычислялась автоматически каждый раз
при изменении цены или количества материалов в строке.
Это совсем не сложно, и для этого нам потребуется сначала создать
собственную форму документа, а затем воспользоваться возможно-
стями встроенного языка.
Дело в том, что до сих пор мы использовали предопределенные формы
объектов, которые система «1С:Предприятие» по умолчанию
создавала для нас сама. Теперь же у нас возникла необходимость
слегка изменить логику работы формы документа, поэтому нам нужно
создать свою собственную форму документа ПриходнаяНа-кладная
для того, чтобы в ней с помощью встроенного языка описать тот
алгоритм, который нам нужен. И система будет использовать нашу
форму вместо формы по умолчанию.
В режиме «Конфигуратор»
Форма документа
Вернемся в конфигуратор и откроем окно редактирования объекта
конфигурации Документ ПриходнаяНакладная.
В этом окне нас интересует закладка Формы.
Как мы видим, ни одна из основных форм документа пока не задана.
Для того чтобы создать форму документа, нажмем кнопку открытия
со значком лупы в поле ввода или кнопку Добавить над списком
форм (рис. 4.17).
Система вызовет еще один полезный инструмент разработчика –
конструктор формы (рис. 4.18).
Этот инструмент также построен по принципу «мастеров»: ввод
данных в определенной последовательности и передвижение
кнопками Далее и Назад .
Рис. 4.17. Создание формы документа
Рис. 4.18. Конструктор форм
Выберем тип формы Форма документа и нажмем кнопку Готово,
согласившись тем самым со всем, что нам предложила система (см.
рис. 4.18).
Обратите внимание, что в дереве объектов конфигурации у объекта
конфигурации Документ
ПриходнаяНакладная появилась форма
ФормаДокумента (рис. 4.19), а на экране открылось окно редактора
форм, содержащее эту форму (рис. 4.20).
Рис. 4.19. Новая форма документа в конфигураторе
Рис. 4.20. Окно редактора форм
Редактор форм объединяет несколько окон взаимосвязанных между
собой редакторов. Мы не будем здесь разбирать подробно работу с
редактором форм, а коснемся только тех моментов, которые нужны
для выполнения простейших действий, связанных с нашей задачей.
ПОДРОБНЕЕ
За более подробной информацией о работе с редактором форм следует
обратиться к документации «1С:Предприятие 8.3.22 Руководство
разработчика», раздел 31.1 «Редактор формы».
Пока мы рассмотрим только окно формы документа в режиме
просмотра, расположенное внизу, и окно редактора элементов формы,
расположенное слева в верхней части окна редактора форм.
Прежде всего, необходимо понимать, что при разработке форм
объектов конфигурации разработчик не имеет возможности нари-
совать форму. Он может только указать, из каких элементов будет
состоять форма, а система уже сама самостоятельно расположит эти
элементы в форме.
Элементы формы в верхнем левом окне редактора форм образуют
иерархическую структуру, из которой следует, что чем выше в списке
находится элемент, тем выше и левее на форме он будет распола-
гаться.
Эта структура редактируется на закладке Элементы и позволяет
управлять отображением и редактированием данных в форме.
Мы видим, что на основе описания в конфигурации документа
ПриходнаяНакладная система создала структуру элементов, которая
определяет, как будет выглядеть форма.
Эти элементы имеют разное назначение и разное поведение. Однако
все они служат для того, чтобы отображать информацию, храня-
щуюся в базе данных, и организовывать интерактивную работу с этой
информацией.
Вы можете попробовать перетащить мышью поля в дереве элементов
и поменять местами, например, реквизиты табличной части. Результат
изменений сразу отразится в форме документа в нижней части
редактора форм. При этом разработчику не нужно задумываться над
вопросами конкретного (до пикселя) расположения того или иного
элемента формы, его размеров и привязки к другим элементам. Эту
работу берет на себя система.
Но разработчик может через палитру свойств изменить свойства
элемента, которые повлияют на его отображение в форме. Он может
также изменить структуру элементов формы – создать новое поле,
группу полей, добавить табличную часть, связав эти элементы с
данными формы.
Но пока нам ничего этого не нужно делать. Нас интересуют три
элемента табличной части: МатериалыКоличество, МатериалыЦена и
МатериалыСумма (см. рис. 4.20).
Мы хотим, чтобы каждый раз, когда меняется значение в поле Количе-
ство или в поле Цена , в поле Сумма автоматически устанавливалось
значение, равное произведению значений полей Количество и Цена.
Очевидно, что для этого нужно написать на встроенном языке
команду, похожую на Сумма = Количество*Цена, которая будет
выполняться при изменении значения поля Количество или Цена. Но
как «поймать» эти моменты изменения?
Обработчик события
Как мы уже видели, система сама умеет работать с теми объектами,
которые описаны в дереве конфигурации: показывать их данные,
добавлять новые элементы и пр. То есть у нее есть некие «стан-
дартные представления» о том, как это все должно работать.
Но, как правило, разработчиков эти «стандартные представления»
устраивают только в самых простых случаях. Реальные задачи гораздо
разнообразнее. Поэтому у системы существуют события, которые
связаны с самыми различными моментами ее «стандартного»
функционирования. В том числе события, связанные с функциониро-
ванием форм и элементов, расположенных в этих формах.
Используя встроенный язык, разработчик может «вклиниться» в эти
события и описать собственный алгоритм того, что должно происхо-
дить при наступлении этого события. Что мы сейчас и сделаем.
Дважды щелкнем на элементе формы МатериалыКоличество или
правой кнопкой мыши откроем для него палитру свойств (пункт
контекстного меню Свойства).
Прокрутив список до конца, мы увидим перечень событий, которые
могут быть связаны с этим полем.
Очевидно, что нам нужно событие ПриИзменении, которое возникает
после изменения значения поля. Найдем его в списке событий
и нажмем кнопку открытия
4.21).
со значком лупы в поле ввода (рис.
Рис. 4.21. Создание обработчика события «ПриИзменении»
поля табличной части «Количество»
Система предложит окно для выбора типа обработчика события,
который мы хотим создать (рис. 4.22).
Рис. 4.22. Окно для выбора типа создаваемого обработчика события
Оставим без изменения вариант Создать на клиенте, предложенный по
умолчанию. Пока мы не будем более подробно рассматривать этот
момент. Вернемся к этому вопросу позднее в разделе «Директивы
компиляции».
После этого система создаст шаблон процедуры обработчика этого
события в модуле нашей формы и откроет закладку Модуль редактора
формы (рис. 4.23).
Рис. 4.23. Шаблон обработчика события «ПриИзменении»
поля табличной части «Количество»
Модуль – это «хранилище» для текста программы на встроенном
языке. Модулей существует несколько, и каждый из них предназначен
для описания алгоритмов, относящихся к тому или иному моменту
работы программы. В данном случае это модуль формы, так как
обработчики всех интерактивных событий, связанных с элементами
формы, помещаются именно в модуль формы.
В модуль формы, в процедуру МатериалыКоличествоПриИзменении()
мы и добавим следующий текст (листинг 4.1).
Листинг 4.1. Процедура «МатериалыКоличествоПриИзменении()»
СтрокаТабличнойЧасти = Элементы.Материалы.ТекущиеДанные;
СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество * СтрокаТабличнойЧасти.Цена;
Объясним назначение этих строк.
В первой строке мы сначала создаем переменную СтрокаТабличной-
Части, в которую будет помещен объект, содержащий данные, нахо-
дящиеся в строке табличной части, которую нам нужно пересчитать.
Мягкая типизация данных встроенного языка позволяет сделать это,
не объявляя переменную и ее тип заранее. Мы создаем переменную
прямо по ходу работы, и ее тип определяется типом значения, которое
она содержит.
Поскольку мы находимся в модуле формы, то в нем доступны все
свойства и методы объекта встроенного языка УправляемаяФорма .
Поэтому мы можем обращаться к ним напрямую. В данном случае
после знака равенства мы обращаемся к коллекции элементов формы,
используя одно из свойств объекта УправляемаяФорма – свойство
Элементы.
Коллекция элементов формы является объектом встроенного языка
ВсеЭлементыФормы, содержащим все элементы формы. То есть это
программный аналог корня дерева элементов формы.
Каждый элемент формы можно получить, указав его имя в качестве
свойства этого объекта, то есть через точку от него. В данном случае
мы обращаемся к табличной части документа Материалы
(Элементы.Материалы ).
Табличная часть документа представляет собой объект встроенного
языка ТаблицаФормы. Получить ту строку, в которой в настоящее
время осуществляется редактирование, можно при помощи
свойства программного объекта ТаблицаФормы – ТекущиеДанные
(Элементы.Материалы.ТекущиеДанные ).
Таким образом, в результате выполнения первой строки процедуры
обработчика переменная СтрокаТабличнойЧасти будет содержать
объект ДанныеФормыСтруктура. Этот объект содержит данные,
находящиеся в текущей строке табличной части документа
(Элементы.Материалы.ТекущиеДанные ).
Получив этот объект, мы можем обратиться к данным конкретной
колонки табличной части, указав имя колонки в качестве свойства
объекта. Например, используя обращение СтрокаТабличнойЧас-
ти.Количество, мы получаем число, которое находится в редактиру-
емой строке в колонке Количество.
Таким образом, во второй строке процедуры обработчика вычисля-
ется значение колонки Сумма как произведение значений колонок
Количество и Цена.
В режиме «1С:Предприятие»
Теперь посмотрим, как это работает. Запустим «1С:Предприятие» в
режиме отладки, откроем список документов Приходные накладные и
откроем любой из двух созданных нами документов. Если теперь вы
поменяете количество в любой строке документа, то сумма в строке
будет пересчитана автоматически.
Одна процедура
для обработки нескольких событий
Итак, мы убедились, что при изменении количества в любой строке
документа Приходная накладная сумма в этой строке пересчитыва-
ется автоматически.
Замечательно. Но теперь хотелось бы и для поля Цена сделать то же
самое. А если заглянуть вперед, то мы увидим, что подобное автома-
тическое заполнение поля Сумма может нам понадобиться и в других
документах.
Поэтому лучше будет поместить расчет суммы в некоторое «обще-
доступное» место, чтобы разные документы, имеющие аналогичные
реквизиты табличной части, могли использовать этот алгоритм.
Для описания таких «общедоступных» мест служат объекты конфи-
гурации Общий модуль, расположенные в ветке Общие > Общие
модули. Процедуры и функции, содержащиеся в этих модулях, могут
быть доступны для любых объектов конфигурации.
Поэтому создадим общий модуль и перенесем в него нашу процедуру
расчета суммы. А в документе просто оставим вызовы этой процедуры
из общего модуля.
В режиме «Конфигуратор»
Общий модуль
Добавим объект конфигурации Общий модуль.
Для этого раскроем ветвь Общие в дереве объектов конфигу-рации,
нажав на + слева от нее. Затем выделим ветвь Общие модули и нажмем
кнопку Добавить в командной панели окна конфигурации (рис. 4.24).
Откроется окно для ввода текста модуля и окно палитры его свойств.
Дадим имя модулю – РаботаСДокументами и установим в его
свойствах флажок Клиент (управляемое приложение) , а флажок
Сервер снимем. Это означает, что экземпляры этого модуля будут
скомпилированы в контексте тонкого клиента и в контексте веб-
клиента (рис. 4.25).
Рис. 4.24. Создание общего модуля в дереве объектов конфигурации
Рис. 4.25. Свойства общего модуля
Внесем в модуль следующий текст (листинг 4.2).
Листинг 4.2. Процедура «РассчитатьСумму()»
Процедура РассчитатьСумму(СтрокаТабличнойЧасти) Экспорт
СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество
* СтрокаТабличнойЧасти.Цена;
КонецПроцедуры
Прокомментируем этот код. В процедуру РассчитатьСумму()
мы передаем переменную СтрокаТабличнойЧасти, которую мы опре-
делили в обработчике события ПриИзменении поля Количество. Она
содержит данные редактируемой строки табличной части документа
ПриходнаяНакладная.
Теперь, используя эту переменную, мы можем получить доступ к
данным колонок табличной части и рассчитать сумму как произве-
дение цены на количество.
Ключевое слово Экспорт в заголовке процедуры указывает на то, что
эта процедура может быть доступна из других программных модулей.
Теперь в модуле нашей формы изменим текст обработчика Материа-
лыКоличествоПриИзменении (листинг 4.3).
Листинг 4.3. Процедура «МатериалыКоличествоПриИзменении()»
&НаКлиенте
Процедура МатериалыКоличествоПриИзменении(Элемент)
СтрокаТабличнойЧасти = Элементы.Материалы.ТекущиеДанные;
РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);
КонецПроцедуры
Мы видим, что первая строка процедуры осталась без изменений. А во
второй строке вместо непосредственного расчета суммы мы вызываем
процедуру РассчитатьСумму() из общего модуля Рабо-таСДокументами
и передаем ей в качестве параметра текущую строку табличной части.
Проверим, как это работает, и убедимся, что ничего не изменилось.
Теперь осталось и для поля Цена установить такой же обработчик. Так
как однажды мы уже написали в модуле формы нужную нам
процедуру, то мы просто могли бы сопоставить ее также и другому
событию другого элемента управления, расположенного в форме.
Однако стандарты разработки конфигураций фирмы «1С» не
допускают такого решения.
УЗНАЙ БОЛЬШЕ!
Согласно стандартам разработки фирмы «1С» у каждого события
должен быть свой обработчик. Если одинаковые действия должны
выполняться при изменении разных элементов управления (например,
при нажатии нескольких кнопок), то в этом случае следует
поступать следующим образом:
○ создается отдельная процедура (функция), выполняющая необхо-
димые действия;
○ для каждого элемента управления создается отдельный обра-
ботчик с именем, назначаемым по умолчанию;
○ из каждого обработчика вызывается требуемая процедура
(функция).
Поэтому мы создадим обработчик события ПриИзменении для поля
табличной части МатериалыЦена так же, как мы делали это для поля
МатериалыКоличество, и повторим в нем вызов процедуры Рассчи-
татьСумму из общего модуля (листинг 4.4).
Листинг 4.4. Процедура «МатериалыЦенаПриИзменении()»
&НаКлиенте
Процедура МатериалыЦенаПриИзменении(Элемент)
СтрокаТабличнойЧасти = Элементы.Материалы.ТекущиеДанные;
РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);
КонецПроцедуры
В режиме «1С:Предприятие»
Запустим «1С:Предприятие» в режиме отладки и убедимся, что теперь
сумма в строках табличной части документов ПриходнаяНа-кладная
пересчитывается как при изменении количества, так и при изменении
цены.
Документ «Оказание услуги»
Теперь мы аналогичным образом создадим второй документ, необ-
ходимый нам, – Оказание услуги. Для этого потребуется выполнить
уже знакомые нам действия, которые мы выполняли по созданию
документа «Приходная накладная».
В режиме «Конфигуратор»
Добавим новый объект конфигурации Документ и назовем его Оказа-
ниеУслуги.
На закладке Основные определим, как будет представлен документ в
интерфейсе «1С:Предприятия».
Представление объекта задавать не будем, вместо него будет исполь-
зоваться Синоним объекта.
Представление списка зададим как Оказание услуг. На закладке
Подсистемы отметим, что документ будет доступен в подсистемах
Оказание услуг и Бухгалтерия. На закладке Данные создадим
реквизиты документа:
Склад, тип СправочникСсылка.Склады . Выберем для свойства
Значение заполнения предопределенный элемент Основной спра-
вочника Склады;
Клиент, тип СправочникСсылка.Клиенты. Установим свойство
Проверка заполнения в значение Выдавать ошибку;
Мастер, тип СправочникСсылка.Сотрудники. Установим свойство
Проверка заполнения в значение Выдавать ошибку.
Создадим табличную часть этого документа ПереченьНоменклатуры
с реквизитами:
Номенклатура, тип СправочникСсылка.Номенклатура;
Количество, тип Число, длина 15, точность 3, неотрицательное;
Цена, тип Число, длина 15, точность 2, неотрицательное;
Сумма, тип Число, длина 15, точность 2, неотрицательное.
Установим для табличной части в целом и для каждого ее реквизита
свойство Проверка заполнения в значение Выдавать ошибку.
На закладке Формы создадим основную форму документа.
Для поля ПереченьНоменклатурыКоличество создадим обработчик
события ПриИзменении (выполняющийся на клиенте), в котором
будем вызывать процедуру РассчитатьСумму из общего модуля Рабо-
таСДокументами.
При этом откроется модуль формы с шаблоном обработчика события
ПереченьНоменклатурыКоличествоПриИзменении, который мы пока
заполнять не будем, а перейдем в окно элементов формы на закладку
Форма и аналогичным образом создадим обработчик события Пере-
ченьНоменклатурыЦенаПриИзменении для поля ПереченьНоменклату-
рыЦена.
Далее модуль формы документа ОказаниеУслуги нужно заполнить
следующим образом (листинг 4.5).
Листинг 4.5. Модуль формы документа «ОказаниеУслуги»
&НаКлиенте
Процедура ПереченьНоменклатурыКоличествоПриИзменении(Элемент)
СтрокаТабличнойЧасти = Элементы.ПереченьНоменклатуры.ТекущиеДанные;
РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);
КонецПроцедуры
&НаКлиенте
Процедура ПереченьНоменклатурыЦенаПриИзменении(Элемент)
СтрокаТабличнойЧасти = Элементы.ПереченьНоменклатуры.ТекущиеДанные;
РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);
КонецПроцедуры
В заключение отредактируем командный интерфейс, чтобы в разделе
Оказание услуг была доступна команда создания новых документов.
Для этого откроем окно редактирования объекта конфигурации
Подсистема ОказаниеУслуг и нажмем кнопку Командный интерфейс. В
открывшемся окне отразятся все команды данной подсистемы.
В группе Панель действий.Создать включим видимость у команды
Оказание услуги: создать (рис. 4.26).
Рис. 4.26. Настройка командного интерфейса подсистемы
В результате наших действий в дереве объектов конфигурации
документ ОказаниеУслуги будет выглядеть следующим образом (рис.
4.27).
Рис. 4.27. Документ «ОказаниеУслуги» в дереве объектов конфигурации
В режиме «1С:Предприятие»
Запустим «1С:Предприятие» в режиме отладки.
В разделе Оказание услуг выполним команду создания документа
Оказание услуги из подменю Создать и заполним его следующим
образом (рис. 4.28).
Рис. 4.28. Создание документа «Оказание услуги No 1»
Обратите внимание, что склад
Основной
подставляется по умолчанию, а для полей Мастер и
Клиент выполняется проверка заполнения. А также при вводе цены и количества в табличную часть документа
Оказание услуги сумма пересчитывается по нашему алгоритму.
Нажмем Провести и закрыть.ЗАНЯТИЕ5
Регистрынакопления
На этом занятии мы познакомимся с объектом конфигурации Регистр
накопления. Вы узнаете, для чего используется этот объект, какой
структурой он обладает и каковы его отличительные особенности.
Затем мы создадим с вами один из регистров накопления, который
будет использоваться в нашей конфигурации и отражать изменение
данных в процессе работы ранее созданных нами документов.
Зачем нужен регистр накопления
Итак, мы с вами подошли к одному из главных моментов разра-ботки
любой конфигурации – созданию механизма учета накопления
данных.
Казалось бы, все необходимое мы с вами уже создали: у нас есть что
расходовать и приходовать (справочники), и у нас есть чем расхо-
довать и приходовать (документы). Осталось только построить
несколько отчетов, и автоматизация ООО «На все руки мастер» будет
закончена.
Однако это не так.
Во-первых, путем анализа документов можно, конечно, получить
требуемые нам выходные данные. Но представьте, что завтра ООО
«На все руки мастер» решит немного изменить свои бизнес-процессы,
и нам потребуется ввести в конфигурацию еще один документ (или
несколько документов).
Например, сейчас мы полагаем, что товары поступают в ООО «На все
руки мастер» и затем расходуются. Руководство захотело усилить
материальный контроль и решило приходовать товары на основной
склад организации и затем выдавать их материально ответ-ственным
лицам. В этом случае нам придется добавить в конфигу-рацию еще
один документ, который будет фиксировать перемещение материалов
между основным складом и материально ответственными лицами. И
очевидно, нам придется переработать все отчеты, которые были нами
созданы к этому моменту, с тем, чтобы они учитывали изменения,
вносимые новым документом. А представьте, если в нашей
конфигурации не два, а двадцать документов?!
Во-вторых, отчеты, анализирующие документы, будут работать
довольно медленно, что будет вызывать раздражение пользователей и
недовольство руководителей.
Поэтому в системе «1С:Предприятие» есть несколько объектов
конфигурации, которые позволяют создавать в базе данных
структуры, предназначенные для накопления информации в удобном
для последующего анализа виде. Использование таких хранилищ
данных позволяет нам, с одной стороны, накапливать в них данные,
поставляемые различными документами (или другими объектами
базы данных), а с другой стороны, легко создавать нужные нам отчеты
или использовать эти данные в алгоритмах работы конфигу-рации
(рис. 6.1).
Рис. 6.1. Алгоритм работы конфигурации
В конфигурации существует несколько объектов, называемых
регистрами, для описания подобных хранилищ. Сейчас мы рассмо-
трим один из них.
Что такое регистр накопления
Объект конфигурации Регистр накопления предназначен для
описания структуры накопления данных. На основе объекта конфигу-
рации Регистр накопления платформа создает в базе данных таблицы, в
которых будут накапливаться данные, поставляемые различными
объектами базы данных.
Эти данные будут храниться в таблицах в виде отдельных записей,
каждая из которых имеет одинаковую заданную в конфигураторе
структуру (рис. 6.2).
На основании таблицы движений регистра накопления система
рассчитывает таблицу итогов регистра, которая хранит в базе данных
итоги на момент времени последнего движения (актуальные итоги).
Рис. 6.2. Регистр накопления «Остатки товаров»
в конфигураторе и в базе данных
Отличительной особенностью регистра накопления является то, что он
не предназначен для интерактивного редактирования пользова-телем.
Разработчик может при необходимости предоставить пользователю
возможность редактировать регистр накопления. Но предназначение
регистра накопления заключается в том, чтобы его модификация
производилась на основе алгоритмов работы других объектов базы
данных, а не в результате непосредственных действий пользователя.
Основным назначением регистра накопления является накопление
числовой информации в разрезе нескольких измерений, которые
описываются разработчиком в соответствующем объекте конфи-
гурации Регистр накопления и являются подчиненными объектами
конфигурации.
Виды числовой информации, накапливаемой регистром накопления,
называются ресурсами, также являются подчиненными объектами и
описываются в конфигураторе.
Например, регистр накопления может накапливать информацию о
количестве и сумме товаров на складах. В этом случае он будет иметь
измерения Товар и Склад и ресурсы Количество и Сумма (см. рис. 6.2).
Изменение состояния регистра накопления происходит, как правило,
при проведении документа и заключается в том, что в регистр добав-
ляется некоторое количество записей. Каждая запись содержит
значения измерений, значения приращений ресурсов, ссылку
на документ, который вызвал эти изменения (регистратор), и «направ-
ление» приращения (приход или расход). Такой набор записей называ-
ется движениями регистра накопления. Каждому движению регистра
накопления всегда должен соответствовать регистратор – объект
информационной базы (как правило, документ), который произвел эти
движения.
Кроме этого, регистр накопления может хранить дополнительную
информацию, описывающую каждое движение. Набор такой допол-
нительной информации задается разработчиком при помощи рекви-
зитов объекта конфигурации Регистр накопления.
УЗНАЙ БОЛЬШЕ!
О структуре объектов встроенного языка, предназначенных для
работы с регистрами накопления, можно прочитать в разделе
«Краткий справочник разработчика. Регистры накопления».
Добавление регистра накопления
Теперь, когда мы знаем, для чего предназначены регистры нако-
пления, посмотрим, как можно их использовать в нашем примере.
Прежде всего, нас интересует информация о том, сколько и каких
материалов есть у нас на складах. Для накопления такой информации
мы создадим регистр ОстаткиМатериалов .
В режиме «Конфигуратор»
Откроем в конфигураторе нашу учебную конфигурацию и добавим
новый объект конфигурации Регистр накопления.
Для этого выделим в дереве объектов конфигурации ветвь Регистры
накопления и нажмем кнопку Добавить в командной панели окна
конфигурации.
В открывшемся окне редактирования объекта конфигурации
на закладке Основные зададим имя регистра – ОстаткиМатериалов.
Также зададим и Расширенное представление списка как Движения по
регистру Остатки материалов. Этот заголовок будет отображаться в
окне списка записей регистра.
Нажмем Далее и перейдем на закладку Подсистемы.
По логике нашей конфигурации данный регистр должен быть
доступен в разделах Учет материалов, Оказание услуг и Бухгалтерия.
Поэтому отметим в списке подсистем эти подсистемы (рис. 6.3).
Рис. 6.3. Определение списка подсистем,
в которых будет отражаться регистр
Выделим закладку Данные и перейдем к созданию структуры
регистра. Создадим измерения регистра:
Материал, тип СправочникСсылка.Номенклатура;
Склад, тип СправочникСсылка.Склады.
Для этого выделим ветвь Измерения и нажмем кнопку Добавить в
командной панели окна (рис. 6.4).
Затем создадим ресурс Количество с длиной 15 и точностью 3. Для
этого выделим ветвь Ресурсы и нажмем кнопку Добавить в командной
панели окна (рис. 6.5).
Рис. 6.4. Создание измерений регистра
Рис. 6.5. Создание ресурсов регистра
В результате этих действий регистр ОстаткиМатериалов должен
иметь следующий вид (рис. 6.6).
Рис. 6.6. Регистр «ОстаткиМатериалов»
Если вы сейчас попытаетесь запустить «1С:Предприятие» в режиме
отладки, то система выдаст сообщение об ошибке: «РегистрНако-
пления.ОстаткиМатериалов: Ни один из документов не является реги-
стратором для регистра». Это сообщение еще раз подтверждает тот
факт, что назначение регистра накопления в том, чтобы аккумулиро-
вать данные, поставляемые различными документами.
Поэтому мы сформируем движения регистра накопления ОстаткиМа-
териалов в процессе проведения двух созданных нами документов
ПриходнаяНакладная и ОказаниеУслуг.
Движения документа
Движения документа – это записи в регистрах, которые создаются в
процессе проведения документа и отражают изменения, произво-
димые документом.
Откроем окно редактирования объекта конфигурации Документ
ПриходнаяНакладная. Перейдем на закладку Движения, раскроем
список Регистры накопления и отметим регистр накопления Остат-
киМатериалов (рис. 6.7).
Рис. 6.7. Создание движений документа «ПриходнаяНакладная» в
регистре «ОстаткиМатериалов»
Обратите внимание, что сразу после отметки выбранного регистра
становится доступной кнопка Конструктор движений. Нажмем ее и
воспользуемся этим конструктором.
Конструктор устроен просто. В списке Регистры перечислены
регистры, в которых документ может создавать движения. В нашем
случае там пока один регистр ОстаткиМатериалов.
В списке Реквизиты документа должны находиться исходные данные
для создания движений – реквизиты документа ПриходнаяНакладная .
А в таблице Поле – Выражение должны быть заданы формулы, по
которым будут вычисляться значения измерений и ресурсов регистра
при записи движений (рис. 6.8).
Обратите внимание, что по умолчанию конструктор предлагает нам
создавать движения прихода (Тип движения регистра – Приход , символ
+ рядом с названием регистра) по регистру ОстаткиМате-риалов. Это
нас вполне устраивает, ведь документ ПриходнаяНа-кладная и должен
приходовать материалы.
Рис. 6.8. Конструктор движений
В поле выбора Табличная часть выберем табличную часть нашего
документа – Материалы.
Список реквизитов документа, который уже заполнен реквизитами
шапки документа, автоматически дополнится реквизитами нашей
табличной части.
Теперь нажмем кнопку Заполнить выражения.
В нижнем окне сформируется соответствие полей (измерений и
ресурсов) регистра и выражений для их расчета (рис. 6.9).
Как видите, конструктор движений установил соответствия подхо-
дящим образом: в качестве материала в регистр будет записан
материал из табличной части документа, в качестве склада – склад,
указанный в шапке документа, а в качестве количества – количество
из табличной части документа.
Рис. 6.9. Выбор табличной части документа и заполнение выражений
для расчета движений регистра
Нажмем кнопку OK и посмотрим, какой текст сформировал
конструктор в модуле документа ПриходнаяНакладная (листинг 6.1).
Листинг 6.1. Процедура «ОбработкаПроведения()»
Процедура ОбработкаПроведения(Отказ, Режим)
//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ //
Данный фрагмент построен конструктором.
// При повторном использовании конструктора внесенные вручную изменения будут утеряны!!!
// регистр ОстаткиМатериалов Приход
Движения.ОстаткиМатериалов.Записывать = Истина; Для
Каждого ТекСтрокаМатериалы Из Материалы Цикл
Движение = Движения.ОстаткиМатериалов.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Материал = ТекСтрокаМатериалы.Материал;
Движение.Склад = Склад;
Движение.Количество = ТекСтрокаМатериалы.Количество;
КонецЦикла;
//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры
Конструктор создал обработчик события ОбработкаПроведения
объекта конфигурации Документ ПриходнаяНакладная , поместил его в
модуль объекта и открыл текст модуля.
Событие ОбработкаПроведения
является одним из важнейших
событий, связанных с документом. Это событие возникает при
проведении документа. Основное назначение обработчика данного
события – генерация движений по документу. Выполнение различных
операций с данными в процедуре обработчика влияет на состояние
учета. Таким образом, именно в эту процедуру разработчик должен
поместить собственные алгоритмы преобразования данных, выполня-
емые в момент проведения документа.
Поясним текст процедуры обработчика.
Объект встроенного языка ДокументОбъект имеет свойство Движения.
Оно возвращает объект КоллекцияДвижений, содержащий коллекцию
наборов записей регистров, по которым этот документ может форми-
ровать движения.
К конкретному набору записей этой коллекции можно обратиться,
указав через точку имя регистра, которому принадлежит этот набор
записей. Например, Движения.ОстаткиМатериалов.
Затем через точку можно использовать различные методы набора
записей регистра, например, Движения.ОстаткиМатериалов.До-
бавить(). Метод Добавить() добавляет новую запись в набор записей.
В первой строке процедуры мы устанавливаем свойство Записывать
набора записей регистра в значение Истина. То есть в явном виде
указываем, что после завершения обработки проведения платформа
должна будет записать этот набор записей в базу данных.
Внутри обработчика расположен цикл Для Каждого ... Из ... Цикл. Он
предназначен для перебора строк табличной части нашего документа.
В цикле обращение к табличной части документа происходит по
имени (Материалы). Переменная ТекСтрокаМатериалы содержит
объект с данными текущей строки табличной части документа. Эта
переменная создается в начале цикла и меняется по мере его
прохождения.
В первой строке тела цикла, используя метод Добавить(), мы добавляем
к набору записей, который создает наш документ в регистре, новую
запись. Тем самым мы создаем объект РегистрНа-копленияЗапись и
сохраняем его в переменной Движение.
Используя этот объект, мы можем обратиться к полям этой записи,
указав имя поля через точку от этой переменной (например,
Движение.Количество).
Причем Движение.Материал, Движение.Склад
– это измерения
регистра, Движение.Количество – это ресурс регистра, а Движе-
ние.ВидДвижения и Движение.Период – стандартные реквизиты
регистра, которые создаются автоматически.
Чтобы присвоить полям новой записи регистра соответствующие
значения полей документа, мы обращаемся к полям табличной части,
указав имя поля через точку от переменной ТекСтрокаМатериалы
(например, ТекСтрокаМатериалы.Материал).
Заметим, что Склад – это реквизит шапки документа, а Дата – стан-
дартный реквизит документа, который создается автоматически.
Причем в цикле меняются только значения полей табличной части
документа – ТекСтрокаМатериалы.Материал и ТекСтрокаМате-
риалы.Количество. Остальные поля не меняются, так как относятся к
документу в целом и не зависят от текущей строки табличной части
документа.
ВидДвиженияНакопления.Приход – это значение системного пере-
числения, которое определяет вид движения регистра накопления как
Приход.
Таким образом, мы присваиваем нужные значения всем полям новой
записи. После перебора всех строк документа (после завершения
цикла) в этом наборе записей (Движения.ОстаткиМатериалов) будет
содержаться столько записей, сколько строк в табличной части прово-
димого документа.
Если мы теперь откроем окно редактирования объекта конфигурации
Регистр накопления ОстаткиМатериалов и перейдем на закладку
Регистраторы, то в списке документов, созданных в конфигурации, мы
увидим отмеченный документ ПриходнаяНакладная, так как мы
задали в модуле этого документа формирование движений в регистре
ОстаткиМатериалов (рис. 6.10).
В заключение отредактируем командный интерфейс, чтобы в разделах
Бухгалтерия, Оказание услуг и Учет материалов была доступна ссылка
для просмотра записей нашего регистра накопления.
Дело в том, что команды открытия регистров также добавляются в
панель функций разделов, но по умолчанию они невидимы, в отличие
от команд открытия списков справочников и документов.
Рис. 6.10. Регистраторы регистра «ОстаткиМатериалов»
В дереве объектов конфигурации выделим ветвь Подсистемы, вызовем
ее контекстное меню и выберем пункт Все подсистемы. В
открывшемся окне слева в списке Подсистемы выделим подсистему
УчетМатериалов. Справа в списке Командный интерфейс отразятся все
команды выбранной подсистемы.
В группе Панель навигации.Обычное включим видимость у команды
Остатки материалов и мышью перетащим ее в группу Панель
навигации.См.также (рис. 6.11).
Рис. 6.11. Настройка командного интерфейса подсистем
Тем самым мы переносим команды открытия списка регистров нако-
пления в конец списка подобных команд раздела, так как эти команды
не так часто используются и их приоритет невысок.
Аналогично, выделив подсистемы ОказаниеУслуг и Бухгалтерия, в
группе Панель навигации.Обычное включим видимость у команды
Остатки материалов и перенесем ее в группу Панель навигации
См.также.
В режиме «1С:Предприятие»
Запустим «1С:Предприятие» в режиме отладки и протестируем
внесенные нами изменения.
В открывшемся окне «1С:Предприятия» мы видим, что в панели
функций разделов Бухгалтерия, Оказание услуг и Учет материалов в
конце списка команд для открытия различных списков, перед
подменю Создать, Отчеты (если они есть) появилась команда для
открытия списка регистра Остатки материалов (рис. 6.12).
Рис. 6.12. Список регистра накопления «ОстаткиМатериалов»
Чтобы проследить связь между проведением документа и накопле-
нием информации в регистре, откроем список приходных накладных,
выполнив команду Приходные накладные в разделе Учет материалов.
Откроем Приходную накладную No 1 и нажмем Провести и закрыть, то
есть перепроведем ее. То же самое сделаем для Приходной накладной
No 2.
Перепровести документы можно и не открывая документов. Для этого
следует выделить нужный документ в списке (или выделить мышью
группу документов, удерживая клавишу Ctrl), раскрыть подменю
Еще в командной панели формы списка и выбрать пункт Провести
(рис. 6.13).
Рис. 6.13. Проведение документа
Теперь выполним команду Остатки материалов и откроем список
нашего регистра накопления (рис. 6.14).
Рис. 6.14. Список регистра накопления «ОстаткиМатериалов»
Мы видим, что при проведении приходных накладных появляются
соответствующие записи в регистре накопления Остатки материалов.
Обратите внимание, что добавилось пять записей – первые три после
проведения первого документа, что соответствует количеству строк в
его табличной части, и последние две после проведения второго
документа.
Все поля регистра заполнились данными документов так, как мы
задали в обработчике проведения документа ПриходнаяНакладная.
Пиктограмма со знаком + слева от каждой записи указывает на тип
движения – Приход.
Как мы видим, заголовок формы списка записей регистра соот-
ветствует заданному нами в свойстве Расширенное представление
списка для этого регистра.
Команда перехода к движениям в
форме документа
В режиме «Конфигуратор»
При реальной работе записей в регистре ОстаткиМатериалов будет
много, и будет трудно понять, какие записи относятся к определен-
ному документу.
Поэтому наряду с общим списком регистра хотелось бы иметь
возможность вызывать из формы документа список регистра, в
котором показаны движения, произведенные только этим доку-
ментом.
Чтобы реализовать такую возможность, вернемся в конфигуратор и
откроем форму документа ПриходнаяНакладная .
В левом верхнем окне перейдем на закладку Командный интерфейс .
В разделе Панель навигации раскроем группу Перейти и увидим
команду для открытия списка регистра накопления Остатки мате-
риалов. Эта команда была автоматически помещена в панель
навигации формы документа, так как он является регистратором, то
есть создает движения в нашем регистре.
Установим свойство Видимость для этой команды (рис. 6.15).
Рис. 6.15. Настройка командного интерфейса формы документа
В режиме «1С:Предприятие»
Запустим «1С:Предприятие» в режиме отладки и откроем Приходную
накладную No 2 (рис. 6.16).
Рис. 6.16. Панель навигации формы документа «Приходная накладная»
Под заголовком формы документа появилась панель навигации, в
которой мы можем переходить к списку записей регистра Остатки
Материалов , связанному с документом (рис. 6.17), и обратно к содер-
жимому документа (ссылка Основное).
Рис. 6.17. Переход к регистру накопления из формы документа
Обратите внимание, что до этого панель навигации в форме приходной
накладной была не видна, так как в ней не было отобра-жено ни одной
команды.
Движения документа «Оказание услуги»
Теперь мы аналогичным образом создадим движения документа
ОказаниеУслуги. Для этого потребуется выполнить уже знакомые нам
действия.
В режиме «Конфигуратор»
Откроем окно редактирования объекта конфигурации Документ
ОказаниеУслуги.
Перейдем на закладку Движения и в списке регистров конфигурации
отметим регистр накопления ОстаткиМатериалов.
Нажмем кнопку Конструктор движений.
В открывшемся окне конструктора изменим тип движения регистра на
Расход, так как документ ОказаниеУслуги должен расходовать
материалы. Пиктограмма слева от названия регистра изменится на
знак –. В поле выбора Табличная часть выберем табличную часть
нашего документа – ПереченьНоменклатуры.
Список реквизитов документа, который уже заполнен реквизитами
шапки документа, автоматически дополнится реквизитами нашей
табличной части.
Теперь нажмем кнопку Заполнить выражения.
В нижнем окне сформируется соответствие полей (измерений и
ресурсов) регистра и выражений для их расчета. Однако при авто-
матическом заполнении поле Материал не заполнится.
Так происходит потому, что имя поля табличной части Номенкла-тура
не совпадает с именем измерения регистра – Материал. Если мы
оставим это так, как есть, то в регистре накопления в строках с типом
Движение регистра – расход номенклатура фиксироваться не будет.
Чтобы избежать этого, нужно выделить поле регистра Материал и в
окне Реквизиты документа дважды щелкнуть по строке ТекСтро-
каПереченьНоменклатуры.Номенклатура .
Таким образом, номенклатура для движений регистра накопления
будет выбираться из табличной части документа (рис. 6.18).
Рис. 6.18. Выбор табличной части документа и заполнение выражений
для расчета движений регистра
Нажмем кнопку OK.
Конструктор создал обработчик события ОбработкаПроведения
объекта конфигурации Документ ОказаниеУслуги и поместил его в
модуль объекта (листинг 6.2).
Листинг 6.2. Процедура «ОбработкаПроведения()»
Процедура ОбработкаПроведения(Отказ, Режим)
//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ //
Данный фрагмент построен конструктором.
// При повторном использовании конструктора внесенные вручную
//
изменения будут утеряны!!!
// регистр ОстаткиМатериалов Расход
Движения.ОстаткиМатериалов.Записывать = Истина;
Для Каждого ТекСтрокаПереченьНоменклатуры Из ПереченьНоменклатуры
Движение = Движения.ОстаткиМатериалов.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Материал = ТекСтрокаПереченьНоменклатуры.Номенклатура;
Движение.Склад = Склад;
Движение.Количество = ТекСтрокаПереченьНоменклатуры.Количество;
КонецЦикла;
//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры
Цикл
Обратите внимание, что строка Движение.ВидДвижения = ВидДви-
женияНакопления.Расход определяет вид движения регистра нако-
пления, производимый этим документом как Расход, а в остальном
процедура обработчика ОбработкаПроведения документа Оказа-
ниеУслуги идентична обработчику документа ПриходнаяНакладная
(см. листинг 6.1), подробно разобранному нами ранее.
В заключение отредактируем командный интерфейс формы
документа, чтобы в панели навигации формы иметь возможность
переходить к списку записей регистра Остатки Материалов, связан-
ному с документом.
Для этого откроем форму документа ОказаниеУслуги. В левом
верхнем окне перейдем на закладку Командный интерфейс.
В разделе Панель навигации раскроем группу Перейти и установим
видимость для команды открытия регистра накопления Остатки мате-
риалов.
В режиме «1С:Предприятие»
Запустим «1С:Предприятие» в режиме отладки. В разделе Оказание
услуг откроем документ Оказание услуги No 1 и нажмем Провести и
закрыть, то есть перепроведем его.
Теперь выполним команду Остатки материалов и откроем список
нашего регистра накопления (рис. 6.19).
Рис. 6.19. Список регистра накопления «ОстаткиМатериалов»
Мы видим, что в регистре накопления Остатки материалов появилась
еще одна запись, что соответствует количеству строк в табличной
части проведенного документа.
Все поля регистра заполнились данными документа так, как мы
задали в обработчике проведения документа Оказание услуги.
Пиктограмма со знаком минус слева от записи указывает на тип
движения – Расход (см. рис. 6.19).
Сейчас мы видим весь список движений регистра. Открыв этот список
из формы документа, мы можем отфильтровать движения по
документу-регистратору.
Для этого откроем еще раз документ Оказание услуги No 1.
В форме документа появилась панель навигации, в которой мы можем
переходить к списку записей регистра Остатки материалов, связан-
ному с документом, и обратно к содержимому документа (рис. 6.20).
Рис. 6.20. Переход к регистру накопления из формы документа
Однако сформированные таким образом движения этого документа
будут не совсем правильны.
Дело в том, что в документе Оказание услуги, в отличие от документа
Приходная накладная, могут содержаться не только расходуемые
материалы, но и услуги. Поэтому в регистр Остатки материалов будут
попадать записи и о расходуемых услугах, что неправильно.
Пока мы ничего не будем делать с движениями, которые сформировал
конструктор, но как только познакомимся с перечислениями, мы
внесем в обработчик проведения необходимые изменения.
Теория: способы работы с коллекцией
В процессе формирования движений документов, когда в цикле
обходили табличные части документов ПриходнаяНакладная и Оказа-
ниеУслуги, мы столкнулись с одним из объектов встроенного языка,
который является коллекцией.
Многие объекты встроенного языка являются коллекциями.
Коллекция представляет собой совокупность объектов. Существуют
общие принципы работы с любой коллекцией.
Во-первых, доступ к каждому объекту коллекции возможен путем
перебора элементов коллекции в цикле. Для этого используется
конструкция языка Для Каждого Из ... Цикл ... (листинг 6.3).
Листинг 6.3. Перебор элементов коллекции в цикле
Для Каждого СтрокаТабличнойЧасти Из ТабличнаяЧасть Цикл
Сообщить(СтрокаТабличнойЧасти.Услуга);
КонецЦикла;
В этом примере ТабличнаяЧасть – это коллекция строк табличной части
объекта конфигурации. При каждом проходе цикла в пере-менной
СтрокаТабличнойЧасти будет содержаться очередная строка из этой
коллекции.
Во-вторых, существует доступ напрямую к элементу коллекции, без
перебора коллекции в цикле. Здесь возможны различные комбинации
двух обращений.
1. Во
встроенном языке бывают именованные коллекции.
То есть коллекции, в которых каждый элемент имеет некоторое
уникальное имя. В этом случае обращение к элементу коллекции
возможно по этому имени (листинг 6.4).
Листинг 6.4. Обращение к элементу коллекции
Справочники.Сотрудники;
Справочники[“Сотрудники”];
В этом примере Справочники – это коллекция менеджеров всех
справочников, содержащихся в конфигурации. Так как каждый
справочник конфигурации имеет свое уникальное имя, то к
конкретному элементу этой коллекции (к менеджеру конкрет-ного
справочника) можно обратиться, указав имя этого справоч-ника:
Справочники[«Сотрудники»].
2. Если нет смысла в «персонификации» элементов коллекции
(коллекция неименованная), тогда обращение к элементу
коллекции возможно по индексу (индекс первого элемента
коллекции – ноль), листинг 6.5.
Листинг 6.5. Обращение к элементу коллекции по индексу
ТабличнаяЧасть[0];
В этом примере ТабличнаяЧасть – это коллекция строк табличной части объекта конфигурации. И мы
обращаемся к первому элементу этой коллекции, указывая его индекс – 0.
Следует отметить, что существуют коллекции, сочетающие оба вида обращений. Например, к
коллекции колонок таблицы значений можно обращаться как по именам колонок, так и по индексу.ЗАНЯТИЕ 6
Простой отчет
На этом занятии мы познакомимся с вами с объектом конфигурации
Отчет. Вы узнаете, для чего он используется, и создадите отчет,
который будет показывать движения и остатки материалов на нашем
предприятии.
Данное занятие преследует цель лишь проиллюстрировать
на простом примере механизм создания отчетов. Поэтому здесь мы не
будем углубляться в систему компоновки данных, с помощью которой
строится любой отчет. Более подробно этот вопрос будет рассмотрен
в занятии «Отчеты».
Что такое отчет
Объект конфигурации Отчет предназначен для описания алгоритмов,
при помощи которых пользователь сможет получать необходимые ему
выходные данные. Алгоритм формирования выходных данных
описывается при помощи визуальных средств или с использованием
встроенного языка. В реальной жизни объектам конфигурации Отчет
соответствуют всевозможные таблицы выходных данных, сводных
данных, диаграммы и пр.
Добавление отчета
В режиме «Конфигуратор»
Теперь у нас все готово для того, чтобы можно было получать
выходные данные. Поэтому приступим к созданию отчета, который
будет показывать нам приход, расход и остатки материалов (рис. 7.1).
Рис. 7.1. Результат отчета
На этом примере мы покажем, как быстро и легко разработать отчет с
использованием только визуальных средств разработки «без единой
строчки кода».
Откроем в конфигураторе нашу учебную конфигурацию и добавим
новый объект конфигурации Отчет.
Для этого выделим в дереве объектов конфигурации ветвь Отчеты и
нажмем кнопку Добавить в командной панели окна конфигурации
(рис. 7.2).
Рис. 7.2. Создание нового объекта конфигурации «Отчет»
В открывшемся окне редактирования объекта конфигурации
на закладке Основные зададим имя отчета – Материалы.
Больше никаких свойств, определяющих представление объекта в
интерфейсе приложения, задавать не будем. Вместо них будет
использоваться Синоним объекта, который создается автоматически
на основании имени объекта.
Создадим основу для построения любого отчета – схему компоновки
данных. Для этого нажмем кнопку Открыть схему компоновки данных
или кнопку открытия со значком лупы (рис. 7.3).
Рис. 7.3. Создание схемы компоновки данных отчета
Макет
Так как у отчета, который мы создаем, еще не существует схемы
компоновки данных, платформа предложит создать новую схему.
Схема компоновки данных с точки зрения конфигурации является
макетом, поэтому будет открыт конструктор макета, предлагающий
выбрать единственный тип макета – Схема компоновки данных (рис.
7.4).
Рис. 7.4. Создание схемы компоновки данных отчета
Нажмем кнопку Готово.
Схема компоновки данных
Платформа создаст новый макет, содержащий схему компоновки
данных, и сразу же откроет конструктор схемы компоновки данных.
Конструктор обладает большим количеством возможностей для
визуального проектирования отчетов, но мы сейчас воспользуемся
только самыми простыми его возможностями и определим те данные,
которые хотим видеть в результате работы нашего отчета.
Набор данных
Добавим новый набор данных – запрос . Для этого нажмем кнопку
Добавить или вызовем контекстное меню ветки Наборы данных (рис.
7.5).
Рис. 7.5. Добавление набора данных в конструкторе схемы компоновки
Текст запроса
Для того чтобы создать текст запроса, запустим конструктор запроса
– нажмем кнопку Конструктор запроса (рис. 7.6).
Рис. 7.6. Вызов конструктора запроса
Конструктор запроса – инструмент, созданный для помощи разработ-
чику, позволяющий визуально конструировать запрос. Даже пользова-
тель, не знакомый с языком запросов, может с помощью конструктора
создать синтаксически правильный запрос.
В окне конструктора запроса, в списке База данных представлены
таблицы для создания запроса. На основе их данных мы имеем
возможность построить отчет.
Если раскрыть ветку РегистрыНакопления, то мы увидим, что кроме
таблицы регистра ОстаткиМатериалов в этой ветке присутствуют еще
несколько виртуальных таблиц, которые формирует система (рис.
7.7).
Рис. 7.7. Таблицы для создания запроса
Эти виртуальные таблицы, создаваемые платформой для регистров, и
используются в основном для построения различных отчетов.
Поскольку мы хотим видеть как остатки материалов, так и инфор-
мацию об их поступлении и расходовании, нас будет интересо-вать
виртуальная
таблица
ОстаткиМатериалов.ОстаткиИОбороты.
Перетащим мышью эту таблицу в список Таблицы и раскроем ее
структуру (рис. 7.8).
Рис. 7.8. Таблица «ОстаткиМатериалов.ОстаткиИОбороты»
Как вы видите, эта таблица содержит измерения регистра Остат-
киМатериалов – Материал , Склад и кроме этого начальные и конечные
остатки, а также значения прихода, расхода и оборотов для всех
ресурсов регистра ОстаткиМатериалов.
Начнем выбирать поля таблицы в нужном нам порядке двойным
щелчком мыши.
Сначала выберем Склад и Материал. Затем выберем КоличествоНа-
чальныйОстаток, КоличествоПриход, КоличествоРасход. В заклю-
чение выберем КоличествоКонечныйОстаток.
ПРИМЕЧАНИЕ
Выделенные элементы можно перенести из одного списка в другой
перетаскиванием мышью или двойным щелчком на них. Либо можно
использовать кнопки , , , .
В результате окно Поля должно быть заполнено следующим образом
(рис. 7.9).
Рис. 7.9. Выбранные поля
Нажмем OK и вернемся в конструктор схемы компоновки данных
(рис. 7.10).
Текст запроса, который был создан с помощью конструктора,
платформа поместит в поле Запрос.
Это поле представляет собой текстовый редактор, в котором можно
вручную отредактировать существующий запрос. Кроме того, можно
снова вызвать конструктор запроса и отредактировать запрос при
помощи него.
Рис. 7.10. Конструктор схемы компоновки данных
Для упрощения восприятия материала мы не будем здесь приводить
листинг запроса и разбирать его. Более подробно этот вопрос будет
рассмотрен в разделе о языке запросов на занятии «Отчеты». В данном
случае, как и для многих других отчетов, можно не анали-зировать и
не редактировать текст запроса.
Обратите внимание на список полей системы компоновки данных,
который платформа заполнила в верхней части конструктора. В нем
отображаются поля, которые доступны у текущего набора данных. В
нашем случае система «1С:Предприятие» заполнила данный список
автоматически, из текста запроса, и нет необходимости в его ручной
настройке.
Итак, мы описали, каким образом будут извлекаться данные для
отчета. Но пока мы не создадим стандартных настроек нашего отчета,
мы ничего не увидим в результате. Поэтому создадим самые простые
настройки отчета для отображения обычных детальных записей
информационной базы.
В нашем случае это будут записи виртуальной таблицы регистра
накопления ОстаткиМатериалов, выбранные в линейном порядке по
мере попадания их в эту таблицу.
Настройки отчета
Перейдем на закладку Настройки. В верхнем правом окне будет нахо-
диться иерархическая структура нашего отчета.
Для добавления нового элемента выделим в дереве структуры отчета
корневой элемент Отчет и вызовем его контекстное меню. Можно
также нажать кнопку Добавить в командной панели окна или нажать
клавишу Ins.
Добавим в отчет группировку (контекстное меню – Новая группи-
ровка). При этом не станем указывать поле группировки, а просто
нажмем OK.
Тем самым мы определили, что в отчет будут выводиться детальные
записи из информационной базы – записи, получаемые в результате
выполнения запроса без итогов (рис. 7.11).
Рис. 7.11. Добавление новой группировки в отчет
В структуре отчета появится группировка Детальные записи.
Теперь настроим поля, которые будут выводиться в результат отчета.
Для этого перейдем в нижнем окне настроек на закладку Выбранные
поля и перенесем мышью из списка доступных полей:
Склад,
Материал,
КоличествоНачальныйОстаток,
КоличествоПриход,
КоличествоРасход,
КоличествоКонечныйОстаток .
ПРИМЕЧАНИЕ
Добавление доступных полей в список выбранных полей можно осуще-
ствить перетаскиванием мышью, двойным щелчком на доступных
полях либо нажатием кнопки Добавить справа от списка выбранных
полей. Порядок выбранных полей можно изменить позже кнопками
Вверх, Вниз или перетаскиванием мышью.
В результате окно настроек отчета должно иметь вид (рис. 7.12).
Рис. 7.12. Окно настроек отчета
Затем перейдем на закладку Параметры и укажем, что параметры
отчета Дата начала и Дата окончания будут включены в состав поль-
зовательских настроек, и эти настройки будут находиться непосред-
ственно в форме отчета, то есть будут быстрыми настройками.
Сначала укажем, что оба эти параметра будут использоваться в отчете
– установим флажки в первой колонке.
Затем выделим каждый из параметров, нажмем кнопку Свойства
элемента пользовательских настроек и установим флажок Включать в
пользовательские настройки (рис. 7.13).
Таким образом, перед формированием отчета пользователь сможет
задать отчетный период. Более подробно о параметрах и пользо-
вательских настройках отчета будет рассказано позже на занятии
«Отчеты».
Рис. 7.13. Окно настроек отчета
В заключение определим, в каких подсистемах будет отображаться
наш отчет.
Закроем конструктор схемы компоновки данных и в окне редактиро-
вания объекта конфигурации Отчет Материалы перейдем на закладку
Подсистемы.
Отметим в списке подсистем конфигурации ветви Учет материалов,
Оказание услуг и Бухгалтерия.
Таким образом, ссылка на наш отчет автоматически попадет в панель
функций этих разделов, в подменю Отчеты (рис. 7.14).
Рис. 7.14. Определение списка подсистем, в которых будет отражаться отчет
В режиме «1С:Предприятие»
Запустим «1С:Предприятие» в режиме отладки и посмотрим, как работает отчет.
В открывшемся окне «1С:Предприятия» мы видим, что в разделах Бухгалтерия, Оказание услуг и
Учет материалов появилось новое подменю Отчеты, содержащее команды для выполнения отчетов,
и в нем команда для формирования отчета Материалы (рис. 7.15).
Рис. 7.15. Команда для формирования отчета «Материалы»
Выполним ее. Откроется автоматически сформированная системой форма отчета.
Зададим даты начала и окончания отчетного периода и нажмем кнопку Сформировать (рис. 7.16).
Рис. 7.16. Отчет «Материалы»
Как видите, наш отчет вполне презентабелен и полностью отражает движение материалов,
произошедшее в нашей организации.ЗАНЯТИЕ 8
Периодические
регистры сведений
На этом занятии мы с вами познакомимся с объектом конфигурации
Регистр сведений, а точнее с одним из его видов – периодическим
регистром сведений. Вы узнаете, для чего предназначен этот объект
конфигурации и какова его структура.
Мы создадим с вами один периодический регистр сведений, который
будет использоваться в нашей конфигурации, и покажем, каким
образом можно использовать его данные средствами встроенного
языка.
Зачем нужен периодический
регистр сведений
Начнем мы с того, что обратим ваше внимание на документ Оказание
услуги. Как вы помните, в этом документе мы выбираем услугу,
которая оказывается, и затем указываем цену.
Очевидно, что в ООО «На все руки мастер» существует перечень
услуг, который определяет стоимость каждой услуги. Казалось бы,
стоимость услуги является неотъемлемым свойством самой услуги, и
поэтому ее следует добавить в качестве реквизита справочника
Номенклатура.
Однако стоимость услуг имеет особенность меняться со временем. И
может сложиться такая ситуация, когда нам потребуется внести
изменения или уточнения в один из ранее проведенных документов
Оказание услуги. В этом случае мы не сможем получить правильную
стоимость услуги, поскольку в реквизите справочника будет
храниться последнее введенное значение.
Кроме этого, не исключено, что руководство ООО «На все руки
мастер» пожелает видеть зависимость прибыли предприятия
от изменения стоимости оказываемых услуг. И тогда просто необхо-
димо будет иметь возможность анализировать изменение стоимости
услуг во времени.
Поэтому для хранения стоимости услуг мы используем новый пока
еще для нас объект – Регистр сведений.
Что такое регистр сведений
Объект конфигурации Регистр cведений предназначен для описания
структуры хранения данных в разрезе нескольких измерений. На
основе объекта конфигурации Регистр сведений платформа создает в
базе данных таблицу, в которой может храниться произвольная
информация, «привязанная» к набору измерений (рис. 9.1).
Рис. 9.1. Независимый периодический регистр сведений «Цены» в
конфигураторе и в базе данных
Принципиальное отличие регистра сведений от регистра накопления
заключается в том, что каждое движение регистра сведений устанав-
ливает новое значение ресурса, в то время как движение регистра
накопления изменяет существующее значение ресурса. По этой
причине регистр сведений может хранить любые данные (а не только
числовые, как регистр накопления).
Следующей важной особенностью регистра сведений является его
способность (при необходимости) хранить данные с привязкой ко
времени. Благодаря этому регистр сведений может хранить не только
актуальные значения данных, но и историю их изменения во времени.
Регистр сведений, использующий привязку ко времени, называют
периодическим регистром сведений.
Периодичность регистра сведений можно определить одним
из следующих значений:
в пределах секунды;
в пределах дня;
в пределах месяца;
в пределах квартала;
в пределах года;
в пределах регистратора (если установлен режим записи Подчине-
ние регистратору).
Периодический регистр сведений всегда содержит служебное поле
Период, добавляемое системой автоматически. Оно имеет тип Дата и
служит для указания факта принадлежности записи к какому-либо
периоду. При записи данных в регистр платформа всегда приводит
значение этого поля к началу того периода, в который он попадает.
Например, если в регистр сведений с периодичностью в пределах
месяца записать данные, в которых период указан как 08.04.2013, то
регистр сохранит эти данные со значением периода, равным
01.04.2013.
Как и для других регистров, система контролирует уникальность
записей для регистра сведений. Однако если для прочих регистров
уникальным идентификатором записи является регистратор и номер
строки, то для регистра сведений применяется другой принцип
формирования ключевого значения.
Ключом записи, однозначно идентифицирующим запись, является в
данном случае совокупность значений измерений регистра
и периода (в случае, если регистр сведений периодический).
Например, для периодического регистра сведений с измерением Товар
и ресурсом Цена (см. рис. 9.1) ключом записи будет набор значений
полей Период и Товар. Регистр сведений не может содержать
несколько записей с одинаковыми ключами.
Если продолжать сравнение с регистром накопления, то можно
сказать, что регистр сведений предоставляет больше свободы в
редактировании хранимых данных. Наряду с возможностью исполь-
зования в режиме подчинения регистратору (когда записи регистра
сведений «привязаны» к документу-регистратору) регистр сведений
может применяться и в независимом режиме, в котором пользователю
предоставляется полная свобода интерактивной работы с данными
регистра. Регистр сведений, не использующий подчинение регистра-
тору, называют независимым регистром сведений.
УЗНАЙ БОЛЬШЕ!
О структуре объектов встроенного языка, предназначенных для
работы с регистрами сведений, можно прочитать в разделе
«Краткий справочник разработчика. Регистры сведений».
Добавление периодического
регистра сведений
Приступим к созданию периодического регистра сведений, который
будет хранить развернутые во времени розничные цены материалов и
стоимости услуг, оказываемых нашим ООО «На все руки мастер».
В режиме «Конфигуратор»
Откроем в конфигураторе нашу учебную конфигурацию и добавим
новый объект конфигурации Регистр сведений.
Для этого выделим в дереве объектов конфигурации ветвь Регистры
сведений и нажмем кнопку Добавить в командной панели окна
конфигурации.
В открывшемся окне редактирования объекта конфигурации
на закладке Основные зададим имя регистра – Цены.
Установим свойство Периодичность этого регистра – В пределах
секунды.
Такую периодичность мы выбрали для того, чтобы иметь возмож-
ность отслеживать цены несколько раз в течение дня. Если же так
часто не предполагается изменять цены, то можно выбрать, вообще
говоря, в пределах дня.*
Здесь же определим представление объекта в интерфейсе прило-
жения.
Зададим свойства Представление записи как Цена, а Представление
списка как Цены на номенклатуру (рис. 9.2).
Рис. 9.2. Основные свойства регистра сведений «Цены»
Обратите внимание на свойство Режим записи. По умолчанию оно
имеет значение – Независимый, то есть мы создаем независимый
регистр сведений и сможем в дальнейшем вводить в него данные без
использования регистратора, вручную.
Нажмем Далее и перейдем на закладку Подсистемы.
По логике нашей конфигурации данный регистр должен быть
доступен в разделах Учет материалов, Оказание услуг и Бухгалтерия.
Поэтому отметим в списке подсистем эти подсистемы (рис. 9.3).
Рис. 9.3. Определение списка подсистем,
в которых будет отражаться регистр
Измерения и ресурсы
Перейдем на закладку Данные и создадим измерение Номенклатура с
типом СправочникСсылка.Номенклатура .
Для этого выделим ветвь Измерения и нажмем кнопку Добавить в
командной панели окна.
Укажем, что это измерение будет ведущим (рис. 9.4).
Свойство Ведущее имеет смысл использовать лишь тогда, когда
измерение имеет тип ссылки на объект базы данных. Установка
свойства Ведущее будет говорить о том, что запись регистра сведений
представляет интерес, пока существует тот объект, ссылка на который
выбрана в качестве значения этого измерения в этой записи. При
удалении объекта все записи регистра сведений по этому объекту тоже
будут автоматически удалены.
Также в результате того, что это измерение регистра мы сделали
ведущим, в панели навигации формы элемента справочника Номен-
клатура появится ссылка. По ней возможен переход к записям этого
регистра, которые содержат в измерении Номенклатура ссылку на этот
элемент справочника.
Затем создадим ресурс Цена, тип Число, длина 15, точность 2, неот-
рицательное.
Для этого выделим ветвь Ресурсы и нажмем кнопку Добавить в
командной панели окна (рис. 9.5).
Рис. 9.4. Создание ведущего измерения регистра сведений
Рис. 9.5. Создание ресурса регистра сведений
В режиме «1С:Предприятие»
Теперь запустим «1С:Предприятие» в режиме отладки и посмотрим,
как работает наш периодический регистр сведений Цены.
В открывшемся окне «1С:Предприятия» мы видим, что в разделах
Бухгалтерия, Оказание услуг и Учет материалов появилась команда
для открытия списка регистра Цены на номенклатуру (рис. 9.6).
Рис. 9.6. Команда для открытия периодического регистра сведений «Цены»
Команда для открытия регистра сведений по умолчанию доступна в
интерфейсе разделов, в которых отображается регистр, так как в
отличие от регистров накопления предполагается изменение данных
регистра пользователем. Если она не видна, значит, команда находится
в подменю Еще вместе с другими командами, которые не помещаются
на панели функций текущего раздела окна прило-жения.
Создание записей в регистре сведений
Выполним команду для открытия списка регистра Цены на номен-
клатуру. Чтобы добавить новую запись в регистр сведений, нажмем
кнопку Создать.
Зададим стоимость услуг ООО «На все руки мастер» следующим
образом (рис. 9.7).
При этом период зададим задним числом, так как он должен быть
меньше или равен дате создания документа об оказании услуг, в нашем
случае 12.10.2022.
Рис. 9.7. Цены на услуги в регистре сведений «Цены»
После этого зададим розничные цены на материалы (рис. 9.8).
Рис. 9.8. Цены на материалы в регистре сведений «Цены»
Итак, мы с вами имеем очень полезную возможность в нашей
программе – установка цен на услуги и материалы. Поскольку цены
хранятся с привязкой к дате, мы можем заранее установить новые
цены и быть уверены в том, что новые цены вступят в действие не
раньше указанного для них времени.
Автоматическая подстановка цены
в документ при выборе номенклатуры
Наша задача заключается в следующем. Цена номенклатуры у нас
теперь хранится в отдельном регистре сведений. Когда мы создаем или
изменяем документ ОказаниеУслуги и добавляем в табличную часть
какую-либо номенклатуру, нам хочется, чтобы одновременно с этим в
документ подставлялась бы сразу и актуальная цена этой
номенклатуры, полученная из регистра сведений и соответствующая
дате документа.
Для этого нам нужно сделать две вещи.
Сначала написать некую функцию, которая будет возвращать нам
актуальную цену номенклатуры, а затем вызвать эту функцию в тот
момент, когда в документ добавляется номенклатура, и подставить в
документ цену номенклатуры, которую вернет эта функция.
Поскольку такой сервис понадобится нам, скорее всего, не только в
этом, но и в других документах, которые содержат в табличной части
номенклатуру, мы поместим функцию в некоторое общедо-ступное
место – в общий модуль.
В режиме «Конфигуратор»
Функция, возвращающая цену номенклатуры
Сначала мы создадим функцию РозничнаяЦена(), которая будет
возвращать нам актуальную розничную цену номенклатуры,
и поместим ее в общий модуль конфигурации.
Откроем конфигуратор, в ветке Общие > Общие модули добавим
новый объект конфигурации Общий модуль и назовем его Рабо-
таСоСправочниками.
В палитре этого свойств модуля мы видим, что у модуля по умолчанию
установлен флажок Сервер. Это означает, что экзем-пляры этого
модуля будут скомпилированы только на стороне сервера.
Кроме этого, установим флажок Вызов сервера для того, чтобы
экспортные процедуры и функции этого модуля можно было вызывать
с клиента (рис. 9.9).
Рис. 9.9. Свойства общего модуля
Поместим в него следующий текст (листинг 9.1).
Листинг 9.1. Функция «РозничнаяЦена()»
Функция РозничнаяЦена(АктуальнаяДата, ЭлементНоменклатуры) Экспорт //
Создать вспомогательный объект "Отбор".
Отбор = Новый Структура("Номенклатура", ЭлементНоменклатуры);
// Получить актуальные значения ресурсов регистра.
ЗначенияРесурсов = РегистрыСведений.Цены.ПолучитьПоследнее(АктуальнаяДата, Отбор);
Возврат ЗначенияРесурсов.Цена;
КонецФункции
Поясним эту функцию.
Для получения розничной цены мы будем передавать в функцию два
параметра:
АктуальнаяДата – параметр типа Дата, определяет точку на оси
времени, в которой нас интересует значение розничной цены;
ЭлементНоменклатуры – ссылка на элемент справочника Номен-
клатура, для которого мы хотим получить розничную цену.
В теле функции мы сначала создаем вспомогательный объект Отбор.
Это структура, содержащая отбор по измерениям регистра. С его
помощью определяем, что нас будут интересовать записи регистра, в
которых измерение регистра Номенклатура равно переданной в
функцию ссылке на элемент справочника.
Имя ключа структуры («Номенклатура») должно совпадать с именем
измерения регистра, заданного в конфигураторе, а значение элемента
структуры (ЭлементНоменклатуры) задает отбираемое по данному
измерению значение.
Во второй строке мы обращаемся к менеджеру регистра сведений
Цены (РегистрыСведений.Цены) и выполняем метод ПолучитьПос-
леднее(), который возвращает нам значения ресурсов самой поздней
записи регистра, соответствующей передаваемой в функцию дате
(АктуальнаяДата ) и значениям измерений регистра (Отбор).
Метод ПолучитьПоследнее возвращает структуру, содержащую
значения ресурсов, которая сохраняется в переменной ЗначенияРе-
сурсов. Вообще говоря, у регистра может быть несколько ресурсов. В
нашем регистре ресурс один, но все равно будет возвращена
структура, содержащая единственный элемент.
Поэтому в следующей строке мы получаем искомую нами розничную
цену, просто указав имя нужного нам ресурса регистра через точку
(ЗначенияРесурсов.Цена), и возвращаем ее при выполнении функции.
Теперь эту функцию нужно вызвать в некоторый момент работы
документа.
Вызов функции при выборе номенклатуры и
заполнение цены в документе
Итак, задача, которая перед нами стоит, заключается в следующем.
При редактировании документа ОказаниеУслуги нам необходимо
обеспечить автоматическое заполнение поля Цена после того, как
пользователь выберет услугу. Причем цена услуги должна опреде-
ляться исходя из даты создаваемого документа.
Найдем в конфигураторе документ ОказаниеУслуги и откроем его
форму ФормаДокумента.
Дважды щелкнем на элементе формы ПереченьНоменклатурыНомен-
клатура или правой кнопкой мыши откроем для него палитру свойств
(пункт контекстного меню Свойства). Прокрутив список до конца,
найдем событие ПриИзменении, которое возникает после изменения
значения поля.
Нажмем кнопку открытия со значком лупы в поле ввода.
На вопрос конфигуратора о типе обработчика события, создаваемого
в форме, оставим без изменения предложенное значение Создать на
клиенте, так как мы хотим создать клиентский обработчик события,
являющегося результатом интерактивных действий пользо-вателя
(рис. 9.10).
Рис. 9.10. Выбор типа обработчика события, создаваемого в форме
Система создаст шаблон процедуры обработчика этого события в
модуле нашей формы и откроет закладку Модуль редактора формы.
Внесем в него следующий текст (листинг 9.2).
Листинг 9.2. Процедура «ПереченьНоменклатурыНоменклатураПриИзме-
нении()»
// Получить текущую строку табличной части.
СтрокаТабличнойЧасти = Элементы.ПереченьНоменклатуры.ТекущиеДанные;
// Установить цену.
СтрокаТабличнойЧасти.Цена = РаботаСоСправочниками.РозничнаяЦена(
Объект.Дата, СтрокаТабличнойЧасти.Номенклатура);
// Пересчитать сумму строки
РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);
Прокомментируем содержимое обработчика.
Первая строка обработчика вам уже знакома по процедурам Пере-
ченьНоменклатурыКоличествоПриИзменении и ПереченьНоменкла-
турыЦенаПриИзменении . Сначала мы получаем текущую строку
табличной части документа, так как она нам понадобится в даль-
нейшем, и сохраняем ее в переменной СтрокаТабличнойЧасти .
Затем мы вызываем нашу функцию РозничнаяЦена() из общего
модуля РаботаСоСправочниками .
Первым параметром мы передаем в эту функцию дату документа, на
которую необходимо получить цену. Дату документа мы получаем из
основного реквизита формы – Объект.Дата.
Вторым параметром мы передаем ссылку на элемент справочника
Номенклатура, который содержится в текущей строке табличной части
документа (СтрокаТабличнойЧасти.Номенклатура ).
Функция возвращает последнее значение цены, и это значение мы
присваиваем полю Цена в текущей строке табличной части документа
(СтрокаТабличнойЧасти.Цена).
Затем мы вызываем процедуру РассчитатьСумму из общего модуля
РаботаСДокументами. Эту процедуру мы создали с вами на преды-
дущих занятиях для того, чтобы при изменении цены или количества
в документе пересчитывать сумму в строке документа.
Заметьте, что сама процедура ПереченьНоменклатурыНоменклату-
раПриИзменении() начинает работать в модуле формы на стороне
клиента, так как это обработчик интерактивного события формы.
Создавая заготовку этой процедуры, платформа автоматически
поместила перед описанием процедуры директиву компиляции
&НаКлиенте.
Затем вызывается функция РозничнаяЦена() . Поскольку эта функция
не будет найдена на стороне клиента, то исполнение будет передано в
общий модуль РаботаСоСправочниками , который выполняется на
сервере. После завершения функции программный код продолжит
исполняться на клиенте.
Почему в данном случае использована такая хитрость? Зачем нужно
было передавать исполнение кода на сервер?
Дело в том, что любая работа с базой данных (чтение данных, запись)
возможна только на сервере. В данном случае нам необходимо было
прочитать последние данные из регистра сведений для некоторой
номенклатуры.
Такие действия можно выполнить только на сервере, и если посмо-
треть в синтакс-помощнике описание метода ПолучитьПоследнее()
регистра сведений, то можно заметить, что этот метод доступен только
на сервере, в толстом клиенте и во внешнем соединении.
Толстый клиент и внешнее соединение – это клиентские приложения
прежней версии платформы, которые существуют для совместимости
с прежними прикладными решениями.
Мы же с вами разрабатываем совершенно новое прикладное решение,
которое работает в тонком клиенте или в веб-клиенте. Поэтому в
нашем случае для получения каких-либо данных из базы данных
нужно передать исполнение кода на сервер, там получить нужные
данные и вернуть эти данные на клиента. Что мы и сделали.
В режиме «1С:Предприятие»
Проверим, как теперь работает наш документ.
Запустим «1С:Предприятие» в режиме отладки и откроем регистр
сведений Цены.
Для материала Транзистор Philips добавим другим числом новую цену
(рис. 9.11).
Рис. 9.11. Регистр сведений «Цены»
Теперь откроем документ Оказание услуги No 1. Как вы помните, этим
документом мы как раз «израсходовали» один такой транзистор.
Оставим дату документа без изменения и повторим выбор транзи-
стора в колонке Номенклатура табличной части документа. Автома-
тически установится значение цены транзистора от 10.10.2022. Это
последнее значение цены на дату документа (рис. 9.12).
Рис. 9.12. Заполнение документа «Оказание услуги»
Теперь изменим дату документа на 14.10.2022 и снова повторим выбор
транзистора. Будет установлено новое значение цены, последнее на
эту дату (рис. 9.13).
Рис. 9.13. Заполнение документа «Оказание услуги»
Таким образом, в документе появляется актуальная на момент создания документа цена услуги.ЗАНЯТИЕ 9
Перечисления
До сих пор мы с вами не обращали внимания на то, что у нас нет
никакого признака, по которому мы могли бы сказать, чем является
конкретный элемент справочника Номенклатура: материалом или
услугой. То, что все элементы справочника разложены у нас по
некоторым группам, не может являться надежным критерием: группы
можно удалить, переименовать, сгруппировать элементы по другим
принципам...
Поэтому нам требуется некоторый признак, позволяющий однозначно
определять принадлежность элемента справочника к материалам или
услугам, независимо от изменения иерархической структуры спра-
вочника.
На этом занятии мы создадим у справочника Номенклатура специ-
альный реквизит, тип значения которого образуется новым пока еще
для нас объектом конфигурации Перечисление. Это поможет нам в
дальнейшем легко определять, чем является элемент справочника
Номенклатура: услугой или материалом.
Кроме этого, мы скорректируем процедуру проведения документа
Оказание услуги и покажем, как работать с перечислением средствами
встроенного языка.
Что такое перечисление
Объект конфигурации Перечисление предназначен для описания
структуры хранения постоянных наборов значений, не изменяемых в
процессе работы конфигурации. На основе объекта конфигурации
Перечисление платформа создает в базе данных таблицу, в которой
может храниться набор некоторых постоянных значений.
В реальной жизни этому объекту может соответствовать, например,
перечисление вариантов указания цены («включая НДС», «без НДС»).
Набор всех возможных значений, которые содержит перечисление,
задается при конфигурировании системы, и пользователь не может
изменять их, удалять или добавлять новые.
Из этого следует важная особенность перечисления: значения пере-
числения не «обезличены» для конфигурации, на них могут опираться
алгоритмы работы программы.
УЗНАЙ БОЛЬШЕ!
О структуре объектов встроенного языка, предназначенных для
работы с перечислениями, можно прочитать в разделе «Краткий
справочник разработчика. Перечисления».
Добавление перечисления В
режиме «Конфигуратор»
Откроем конфигуратор и создадим сначала новый объект конфигу-
рации Перечисление с именем ВидыНоменклатуры.
На закладке Данные добавим два значения перечисления: Материал и
Услуга.
Для этого нажмем кнопку Добавить над списком значений перечис-
ления (рис. 10.1).
Рис. 10.1. Данные перечисления «ВидыНоменклатуры»
Привязка номенклатуры к значениям
перечисления «ВидНоменклатуры»
Чтобы привязать номенклатуру к значениям перечисления, мы
сделаем следующее:
в режиме Конфигуратор создадим у справочника Номенклатура
реквизит, который будет хранить значение перечисления;
в режиме 1С:Предприятие проставим нужные значения этого рек-
визита для всех элементов справочника Номенклатура.
В режиме «Конфигуратор»
Добавим в справочник Номенклатура новый реквизит ВидНоменкла-
туры с типом ПеречислениеСсылка.ВидыНоменклатуры.
Для этого откроем окно редактирования объекта конфигурации Спра-
вочник Номенклатура и на закладке Данные нажмем кнопку Добавить
над списком реквизитов справочника (рис. 10.2).
Рис. 10.2. Данные справочника «Номенклатура»
В режиме «1С:Предприятие»
После этого запустим «1С:Предприятие» в режиме отладки.
В режиме 1С:Предприятие зададим для каждого элемента справоч-
ника Номенклатура соответствующее значение реквизита Вид номен-
клатуры (рис. 10.3).
Рис. 10.3. Данные справочника «Номенклатура»
Теперь посмотрим, как можно применить новые данные, полученные
благодаря использованию перечисления ВидыНоменклатуры.
Произвольноеноменклатуры
представление
Теперь, используя реквизит Вид номенклатуры , зададим произвольное
представление номенклатуры в интерфейсе «1С:Предприятия».
Представление номенклатуры используется везде, где отображаются
поля, ссылающиеся на элементы справочника Номенклатура. Такие
поля мы видим в табличной части наших документов, в регистре
сведений, регистре накопления и т.д.
Стандартное представление номенклатуры (как и любого другого
элемента справочника) определяется свойством справочника
Основное представление. По умолчанию это свойство установлено в
значение В виде наименования (рис. 10.4).
Рис. 10.4. Свойство справочника «Основное представление»
Поэтому, например, в табличной части документов в колонке Номен-
клатура мы видим не ссылку на номенклатуру, а ее наименование (рис.
10.5).
Рис. 10.5. Документ «Оказание услуги»
Было бы удобно, чтобы при отображении ссылок на номенклатуру в
интерфейсе «1С:Предприятия» рядом с наименованием номенкла-
туры показывался бы и ее вид (материал или услуга). Выполним это
изменение.
В режиме «Конфигуратор»
Механизм формирования представления объекта конфигурации
состоит из двух этапов: определение реквизитов, участвующих в
формировании представления, и собственно формирование пред-
ставления. Для этого используются обработчики событий Обра-
боткаПолученияПолейПредставления и ОбработкаПолученияПред-
ставления менеджера соответствующего объекта.
Вернемся в конфигуратор, выделим в дереве объектов конфигурации
справочник Номенклатура, вызовем контекстное меню и выберем
пункт Открыть модуль менеджера.
Открывшийся модуль менеджера справочника заполним следующим
образом (листинги 10.1, 10.2).
Листинг 10.1. Модуль менеджера справочника «Номенклатура»
Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Поля.Добавить("Наименование");
Поля.Добавить("ВидНоменклатуры");
КонецПроцедуры
Листинг 10.2. Модуль менеджера справочника «Номенклатура»
Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если ЗначениеЗаполнено(Данные.ВидНоменклатуры) Тогда
Представление = Данные.Наименование + " (" +
НРег(Строка(Данные.ВидНоменклатуры)) + ")";
Иначе
Представление = Данные.Наименование;
КонецЕсли;
КонецПроцедуры
Прокомментируем этот код.
В обработчике события ОбработкаПолученияПолейПредставления мы
описываем, какие реквизиты будут участвовать в формировании пред-
ставления документа. Для этого сначала мы устанавливаем параметр
СтандартнаяОбработка в значение Ложь, а затем добавляем в массив
Поля нужные реквизиты справочника. Если параметр Стандартная-
Обработка в обработчике не установлен в значение Ложь, то массив
Поля будет заполнен реквизитами, используемыми для формирования
стандартного представления данного объекта (в нашем случае – это
Наименование).
В обработчике события ОбработкаПолученияПредставления
мы
описываем алгоритм получения параметра Представление из массива
полей, заданных нами в предыдущем обработчике. Данные, необхо-
димые для формирования представления, передаются с помощью
параметра Данные типа Структура . Для этого сначала мы устанав-
ливаем параметр СтандартнаяОбработка в значение Ложь, а затем
получаем представление номенклатуры путем добавления к ее наиме-
нованию вида номенклатуры, заключенного в скобки. Если параметр
СтандартнаяОбработка в обработчике не установлен в значение Ложь,
то система попытается сформировать стандартное представление
объекта, исходя из переданных данных.
В режиме «1С:Предприятие»
Запустим «1С:Предприятие» в режиме отладки.
В результате при открытии документа Оказание услуги в табличной
части мы видим заданное нами представление номенклатуры (рис.
10.6).
По аналогии с рассмотренным примером произвольные представ-
ления объектов конфигурации можно задавать не только для спра-
вочников, но и для документов, планов видов характеристик, планов
счетов и т.п.
Рис. 10.6. Документ «Оказание услуги»
Регистрация расхода только той номенклатуры,
которая является материалом
Если вы помните, на шестом занятии, когда создавались движения
документа ОказаниеУслуги по регистру накопления ОстаткиМатери-
алов, мы сказали, что они не совсем правильные, поскольку в регистр
будут попадать не только записи об израсходованных материалах, но
и записи об оказанных услугах (листинг 10.3).
Листинг 10.3. Процедура «ОбработкаПроведения()»
документа «ОказаниеУслуги»
Процедура ОбработкаПроведения(Отказ, Режим)
//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ //
Данный фрагмент построен конструктором.
// При повторном использовании конструктора внесенные вручную
изменения будут утеряны!!!
// регистр ОстаткиМатериалов Расход
Движения.ОстаткиМатериалов.Записывать = Истина;
Для Каждого ТекСтрокаПереченьНоменклатуры Из ПереченьНоменклатуры
Движение = Движения.ОстаткиМатериалов.Добавить();
Цикл
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Материал = ТекСтрокаПереченьНоменклатуры.Номенклатура;
Движение.Склад = Склад;
Движение.Количество = ТекСтрокаПереченьНоменклатуры.Количество;
КонецЦикла;
//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры
Теперь мы доработаем документ таким образом, чтобы в регистре
появлялись только записи, относящиеся к расходу материалов.
Для этого мы сначала в режиме Конфигуратор изменим процедуру
проведения документа так, чтобы в регистр попадали записи только о
той номенклатуре, которая является материалом, а потом в режиме
1С:Предприятие заново проведем (перепроведем) все документы
Оказание услуги, чтобы данные в регистре изменились в соответствии
с новым алгоритмом проведения документа.
Эта доработка будет не совсем эффективна с точки зрения произво-
дительности, зато позволит нам получить нужные данные в регистре
ОстаткиМатериалов.
ПРИМЕЧАНИЕ
Более эффективный вариант обработки проведения этого документа
мы рассмотрим после изучения занятия No 14, рассказывающего о
механизме запросов «1С:Предприятия».
В режиме «Конфигуратор»
Скорректируем движения документа, исключив из обработки те
строки табличной части, в которых находятся услуги.
Для этого откроем в конфигураторе модуль документа Оказание-
Услуги (контекстное меню документа – Открыть модуль объекта) и
добавим в обработчик события ОбработкаПроведения это условие.
Текст следует добавить в начало цикла обхода табличной части
документа после строки Для Каждого ТекСтрокаПереченьНоменкла-
туры Из ПереченьНоменклатуры Цикл.
В результате процедура ОбработкаПроведения должна выглядеть
следующим образом (листинг 10.4).
Листинг 10.4. Движения документа «ОказаниеУслуги»
Процедура ОбработкаПроведения(Отказ, Режим)
//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ //
Данный фрагмент построен конструктором.
// При повторном использовании конструктора внесенные вручную
изменения будут утеряны!!!
// регистр ОстаткиМатериалов Расход
Движения.ОстаткиМатериалов.Записывать = Истина;
Для Каждого ТекСтрокаПереченьНоменклатуры Из ПереченьНоменклатуры
Цикл
Если ТекСтрокаПереченьНоменклатуры.Номенклатура.ВидНоменклатуры =
Перечисления.ВидыНоменклатуры.Материал Тогда
Движение = Движения.ОстаткиМатериалов.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Материал =
ТекСтрокаПереченьНоменклатуры.Номенклатура;
Движение.Склад = Склад;
Движение.Количество = ТекСтрокаПереченьНоменклатуры.Количество;
КонецЕсли;
КонецЦикла;
//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры
Добавленный текст исключает выполнение операторов цикла для тех
строк табличной части документа, в которых номенклатура не
является материалом. Поясним это условие.
В переменной ТекСтрокаПереченьНоменклатуры
содержатся на
каждом шаге цикла данные текущей строки табличной части Пере-
ченьНоменклатуры.
Указывая через точку имя колонки Номенклатура (ТекСтрокаПе-
реченьНоменклатуры.Номенклатура ), мы обращаемся к ссылке
на элемент номенклатуры, которая содержится в этой строке
табличной части.
Затем, указывая через точку ВидНоменклатуры (ТекСтрокаПере-
ченьНоменклатуры.Номенклатура.ВидНоменклатуры), мы обращаемся к
реквизиту ВидНоменклатуры этого элемента справочника Номен-
клатура .
Полученное значение с помощью оператора сравнения (=) мы срав-
ниваем со значением Материал перечисления ВидыНоменклатуры
(Перечисления.ВидыНоменклатуры.Материал).
Если значения совпадают, операторы цикла выполняются. Если нет,
мы переходим к следующей итерации цикла, к следующей строке
табличной части.
В режиме «1С:Предприятие»
Запустим «1С:Предприятие» в режиме отладки и проверим работу
процедуры проведения документа Оказание услуги.
Откроем список документов, выполнив команду Оказание услуг в
разделе Оказание услуг.
Откроем документ Оказание услуги No 1 и внесем в него следующие
изменения:
удалим из табличной части строку, содержащую Транзистор
Philips;
добавим услугу – Подключение воды;
добавим материал – Шланг резиновый (рис. 10.7).
Рис. 10.7. Измененный документ «Оказание услуги No 1»
Обратите внимание, что
цены
подставляются
автоматически
из регистра сведений Цены.
Нажмем кнопку Провести в командной панели формы документа.
Затем выполним команду Остатки материалов в панели навигации
формы, чтобы перейти к записям регистра Остатки материалов,
связанным с данным документом (рис. 10.8).
Рис. 10.8. Записи регистра «Остатки материалов»
Как мы видим, в движения по регистру Остатки материалов вклю-
чаются только строки, содержащие материалы. Запись про услугу
Подключение воды в движения не попала.
Это особенно заметно, так как теперь в поле Материал регистра
Остатки материалов представление номенклатуры включает также и
вид номенклатуры, как мы задали в предыдущем разделе.