Часть I. Быстрая разработка прикладных решений
Первая часть нашей книги посвящена основам разработки в системе 1С:Предприятие и включает в себя знакомство с системой и создание самой простой конфигурации, использующей несколько основных объектов.
В процессе изучения первой части вы научитесь работать в конфигураторе, создавать объекты конфигурации и описывать их свойства. Вы познакомитесь с некоторыми наиболее часто используемыми объектами и сможете увидеть их «в действии».
К концу главы мы создадим с вами конфигурацию, которая может вести учет материалов, отслеживая их поступление и расход. Эта конфигурация сможет также предоставлять некоторые итоговые данные о движениях и остатках материалов, а также выводить на печать бумажные аналоги электронных документов.
Вы познакомитесь с некоторыми конструкциями встроенного языка, а также узнаете о новых возможностях, которые имеют объекты конфигурации по сравнению с предыдущей версией системы. [12]
Что я делаю?
А что же я делаю?! Такой вопрос периодически возникает у всех, кто сталкивался или просто интересовался разработками на 1С.Предприятии.
"Пишу программу", – вот наиболее частый ответ. "На чем?" – "на 1С". "На чем вы работаете?" – "на 1С". "На чем это написано?" – "на 1С". "Требуется бухгалтер со знанием 1С", "требуется программист 1С на неполный рабочий день..." и т.д.
Такие фразы можно встретить постоянно, и вам они наверняка хорошо знакомы. Для человека непосвященного в них нет ничего особенного, однако тех, кто имеет представление о разработке на 1С.Предприятии, такие вопросы зачастую могут поставить в тупик, потому что в этих фразах термином "1С" обозначаются совершенно разные предметы, а термин "программа" и вовсе сбивает с толку...
Для успешного освоения этой книги важно понимать основы построения системы 1С:Предприятие, и тогда на вопрос: "а чем вы занимаетесь?", вы уже не ответите уныло: "учусь писать программы на 1С", а с легким чувством превосходства сможете произнести: "я изучаю методы разработки прикладных решений на основе платформы 1С:Предприятия 8.0"!
Чтобы было понятно, что именно мы будем создавать с вами на протяжении этой книги, объясним сначала, что представляет собой система 1С:Предприятие вообще. [14]
Что нового мы узнали
что такое конфигурируемость системы 1С:Предприятие |
из каких основных частей состоит система |
что такое платформа и что такое конфигурация |
когда следует использовать термин конфигурация, а когда – прикладное решение |
для чего используются разные режимы запуска системы 1С:Предприятие |
что такое дерево конфигурации |
что такое объекты конфигурации |
что создает система на основе объектов конфигурации |
какими способами можно создать объект конфигурации [27] |
Что нового мы узнали
для чего предназначен объект конфигурации Справочник |
каковы характерные особенности справочника |
для чего используются реквизиты и табличные части справочника |
зачем нужны иерархические справочники и что такое родитель |
зачем нужны подчиненные справочники и что такое владелец |
какие основные формы существуют у справочника |
что такое предопределенные элементы |
чем, с точки зрения конфигурации, отличаются обычные элементы справочника от предопределенных элементов |
что такое окно редактирования объекта конфигурации |
как создать объект конфигурации справочник и описать его структуру |
когда следует использовать редактирование справочника в списке, а когда – в диалоге |
как добавить новые элементы в справочник |
как создать группу справочника |
как пользователь может отличить обычные элементы справочника от предопределенных элементов |
как переместить элементы из одной группы справочника в другую [58] |
как запустить 1С:Предприятие в режиме отладки |
зачем нужна основная конфигурация и конфигурация базы данных |
как изменить конфигурацию базы данных |
как связаны объекты конфигурации и объекты базы данных |
зачем нужна палитра свойств |
что такое подчиненные объекты конфигурации [59] |
Что нового мы узнали
для чего предназначен объект конфигурации Документ |
какими характерными особенностями обладает документ |
для чего предназначены реквизиты и табличные части документа |
какие существуют основные формы документа |
что такое проведение документа |
чем отличается оперативное проведение документа от неоперативного |
что такое оперативная отметка времени |
как создать объект конфигурации Документ и описать его основную структуру |
как создать новый документ и заполнить его данными |
как создать собственную форму документа |
что такое конструктор форм |
что такое элементы управления |
что такое события и с чем они связаны |
что такое обработчик события и как его создать |
что такое модуль и для чего он нужен |
зачем нужны общие модули |
как сделать процедуру доступной в разных модулях |
как назначить обработчик события |
что такое типообразующие объекты [81] |
Что нового мы узнали
для чего предназначен объект конфигурации Регистр накопления |
почему следует использовать регистры, хотя необходимая информация содержится в других объектах |
для чего нужны измерения регистра, ресурсы и реквизиты |
что такое движения регистра и что такое регистратор |
как создать новый регистр накопления и описать его структуру |
как создать движения документа с помощью конструктора движений |
как средствами встроенного языка обойти табличную часть документа и обратиться к ее данным |
как средствами встроенного языка сформировать и записать движения документа в регистр накопления [95] |
Что нового мы узнали
для чего предназначен объект конфигурации Отчет |
как создать отчет с помощью конструктора выходных форм [102] |
Что нового мы узнали
для чего предназначен объект конфигурации Макет |
что такое конструктор печати |
как создать макет с помощью конструктора печати [109] |
Что нового мы узнали
как изменить табличный документ |
какая разница в заполнении ячейки табличного документа текстом, параметром и шаблоном |
как с помощью встроенного языка вывести в табличный документ новую область |
как изменить внешний вид и поведение элемента управления, расположенного в форме |
как отобразить сумму по колонке табличного поля [116] |
Дерево конфигурации
Можно сказать, что дерево конфигурации – основной инструмент, с которым работает разработчик. Дерево конфигурации содержит в себе практически всю информацию о том, из чего состоит конфигурация:
Наверняка у вас уже возник вопрос: почему в дереве что-то есть, если мы пока еще ничего не создавали? Дело в том, что для облегчения работы разработчика "все, из чего состоит конфигурация" собрано в несколько отдельных групп, и сейчас дерево и показывает вам эти группы.
Если вы походите по дереву и понажимаете на
, то увидите, что ни в одной группе ничего нет. Исключение составит лишь группа ОбщиеЯзыки, в которой вы обнаружите "нечто" под названием "Русский". Этот "русский" платформа создала для вас сама, поскольку в данном случае конфигуратор использует русскоязычный интерфейс.Хотелось бы уже начать что-нибудь делать, но прежде следует определиться с терминами. Вы наверняка уже заметили, что, говоря о содержимом конфигурации, мы сознательно избегали использования каких либо терминов. Но теперь настало время, когда можно определиться с терминологией и рассказать про... [21]
Первое знакомство
Первая глава нашей книги будет посвящена знакомству с системой 1С:Предприятие 8.0 и главным инструментом разработчика – конфигуратором. Вы узнаете, что обозначается терминами платформа, конфигурация и прикладное решение. Познакомитесь с различными режимами запуска системы 1С:Предприятие 8.0, узнаете, что такое объект конфигурации и как можно создать новый объект. [13]
Справочник
В этой главе мы познакомимся с объектом конфигурации Справочник. Вы узнаете, для чего используется этот объект, какова его структура и какими основными свойствами он обладает. На практических примерах вы научитесь создавать справочники, описывать наиболее важные элементы их структуры и заполнять их данными.
Кроме этого вы узнаете еще об одном объекте конфигурации – Форма.
В заключение, в конце главы, будет сделано небольшое отступление, касающееся механизма внесения изменений в конфигурацию и использования одного из инструментов разработчика – палитры свойств. [28]
Документ
В этой главе мы познакомимся с объектом конфигурации Документ. Вы узнаете, для чего используется этот объект, какова его структура и какие основными свойствами обладает документ. Затем мы создадим несколько документов и покажем, каким образом разработчик может задавать собственные алгоритмы выполнения тех или иных действий, связанных с работой документа.
Кроме этого, вы узнаете, как создать форму объекта базы конфигурации, познакомитесь с некоторыми конструкциями встроенного языка и узнаете, что такое типообразующие объекты конфигурации. [60]
Регистр накопления
В этой главе мы познакомимся с объектом конфигурации Регистр накопления. Вы узнаете, для чего используется этот объект, какой структурой он обладает и каковы его отличительные особенности.
В заключение главы мы создадим с вами один из регистров накопления, который будет использоваться в нашей конфигурации. [82]
Отчет
В этой главе мы познакомимся с вами с объектом конфигурации Отчет. Вы узнаете, для чего он используется, и создадите отчет, который будет показывать движения и остатки материалов на нашем предприятии. [96]
Макет
В этой главе вы познакомитесь с очередным новым объектом конфигурации – Макет. Вы узнаете о его назначении и создадите макет документа, на основе которого будет формироваться печатная форма документа. [103]
Как работать с деревом конфигурации и как создать объект
Прежде чем мы приступим к созданию первых объектов конфигурации, следует объяснить некоторые приемы работы с конфигуратором.
Для того чтобы открыть и закрыть конфигурацию следует использовать пункты меню:
Конфигурация
Открыть конфигурацию, иКонфигурация
Закрыть конфигурацию.После того, как конфигурация открыта, ее состав появляется в окне дерева конфигурации. Это окно вы можете закрыть, как любое другое окно Windows, при этом конфигурация останется открытой (т.е. доступной для редактирования). Чтобы снова отобразить на экране окно дерева конфигурации следует воспользоваться командой меню Конфигурация
Окно конфигурации.Создать новый объект конфигурации можно несколькими способами, и вы всегда можете использовать тот способ, который вам понятнее и удобнее.
Первый способ. Необходимо установить курсор на тот вид объектов конфигурации, который вас интересует, и в командной панели окна конфигурации нажать кнопку Действия
Добавить. [25]Второй способ. Вы можете воспользоваться контекстным меню, которое вызывается при нажатии на правую клавишу мыши.
Установите курсор на интересующий вас вид объектов конфигурации и нажмите правую клавишу мыши. В появившемся меню выберите пункт Добавить.
Теперь, взглянув на список кратких итогов главы, проверьте, насколько хорошо вы поняли изложенный материал.
После этого мы сможем с вами приступить к созданию первых объектов конфигурации. [26]
Объект конфигурации Документ
Объект конфигурации Документ является прикладным объектом и предназначен для описания информации о совершенных хозяйственных операциях или о событиях, произошедших в жизни организации вообще. На основе объекта конфигурации Документ платформа создает в базе данных информационную структуру, в которой будут храниться, например, такие документы как приходные накладные, или приказы о приеме на работу, или платежные поручения, или счета и т.д.
Характерной особенностью объекта конфигурации Документ является то, что в процессе работы пользователь может самостоятельно создавать новые объекты этой структуры – новые документы.
Поведение документа отличается от поведения всех остальных объектов базы данных. Документ обладает способностью проведения. Факт проведения документа означает, что событие, которое он отражает, повлияло на состояние учета. До тех пор, пока документ не проведен, состояние учета неизменно и документ – не более чем черновик, заготовка. Как только документ будет проведен – изменения, вносимые документом в учет, могут вступить в силу и состояние учета может быть изменено.
Поскольку документ вносит изменения в состояние учета, он всегда "привязан" к конкретному моменту времени. Это позволяет отражать в базе данных фактическую последовательность событий.
Следующим важным фактом, вытекающим из двух предыдущих, является то, что система 1С:Предприятие имеет механизмы, позволяющие отслеживать правильность состояния учета. Предположим, что мы изменили один из проведенных ранее документов и снова провели его "задним числом". В этом случае система 1С:Предприятие способна отследить, повлияют ли внесенные нами изменения на последующие проведенные документы, и если это так, система способна перепровести необходимые документы.
Для тех, кто работал с версией 7.7
Движения документов no регистрам могут быть теперь с разными датами.
Документ может иметь несколько табличных частей. [61]
У последовательностей могут быть измерения, за счет чего при восстановлении последовательностей будут перепроводиться только те документы, которые изменили состояние регистров no данному значению измерения.
О том, какая существует разница в названии справочников и документов можно прочитать в главе "Справочники и документы" на странице 539.
О том, что такое МоментВремени можно прочитать в главе "Понятие момента времени" на странице 540.
Для "визуализации" документа существует несколько основных форм
О структуре объектов встроенного языка, предназначенных для работы с документами можно прочитать в главе "Документы" на странице 577. [63]
Объект конфигурации Макет
Объект конфигурации Макет предназначен для хранения различных форм представления данных, которые могут потребоваться каким либо объектам конфигурации или всему прикладному решению в целом. Макет может содержать табличный или текстовый документ, двоичные данные, HTML-документ или Active Document. Макеты могут существовать как сами по себе (общие макеты), так и быть подчинены какому либо объекту конфигурации.
Одно из предназначений макета, подчиненного объекту конфигурации и содержащего табличный документ – создание печатной формы этого объекта.
Создание печатной формы заключается в конструировании ее составных частей – именованных областей, из которых затем "собирается" готовая печатная форма. Порядок заполнения областей данными и порядок вывода их в итоговую форму описывается при помощи встроенного языка.
Печатная форма может включать в себя различные графические объекты: картинки, OLE-объекты, диаграммы и т.д.
Помимо создания макета "вручную", конфигуратор предоставляет разработчику возможность воспользоваться специальным инструментом – конструктором печати, который берет на себя большинство рутинной работы по созданию макета. [104]
Объект конфигурации Отчет
Объект конфигурации Отчет является прикладным объектом и предназначен для описания средств и алгоритмов, при помощи которых пользователь сможет получать необходимые ему выходные данные. Алгоритм формирования выходных данных описывается при помощи визуальных средств или с использованием встроенного языка В реальной жизни объектам конфигурации Отчет соответствуют всевозможные таблицы выходных данных, сводных данных диаграммы и пр.
Для тех, кто работал с версией 7.7
Отчеты могут иметь теперь несколько реквизитов, табличных частей, форм и несколько макетов (печатных форм). Теперь доступен программный объект "Построитель отчета", позволяющий формировать отчеты автоматически. Таблица отчета может иметь вертикальные и горизонтальные группировки. [97]
Объект конфигурации Регистр накопления
Объект конфигурации Регистр накопления является прикладным объектом и предназначен для описания структуры накопления данных. На основе объекта конфигурации Регистр накопления платформа создает в базе данных информационную структуру, в которой будут накапливаться данные, "поставляемые" различными объектами базы данных. Эти данные будут храниться в регистре в виде отдельных записей, каждая из которых имеет одинаковую, заданную в конфигураторе, структуру.
Отличительной особенностью регистра накопления является то, что он не предназначен для интерактивного редактирования пользователем. Разработчик может, при необходимости, предоставить пользователю возможность редактировать регистр накопления, но предназначение регистра накопления заключается в том, чтобы его модификация производилась на основе алгоритмов работы других объектов базы данных (не обязательно документов, как в версии 7.7), а не в результате непосредственных действий пользователя.
Для тех, кто работал с версией 7.7
Движения документа no регистру накопления могут быть теперь с разными датами. Например, документ "План продаж" может внести в регистр накопления записи о предполагаемых продажах компании несколькими разными датами.
Основным назначением регистра накопления является накопление числовой информации в разрезе нескольких измерений, которые описываются разработчиком в соответствующем объекте конфигурации Регистр накопления и являются подчиненными объектами конфигурации.
Виды числовой информации, накапливаемой регистром накопления, называются ресурсами и также являются подчиненными объектами и описываются в конфигураторе.
Например, регистр накопления может накапливать информацию о количестве и сумме товаров на складах. В этом случае он будет иметь измерения "Товар" и "Склад", и ресурсы "Количество" и "Сумма".
Изменение состояния регистра накопления происходит, как правило, при проведении документа, и заключается в том, что в [85] регистр добавляется некоторое количество записей. Каждая запись содержит значения измерений, значения приращений ресурсов, ссылку на документ, который вызвал эти изменения (регистратор) и "направление" приращения (приход или расход). Такой набор записей называется движениями регистра накопления. Каждому движению регистра накопления всегда должен соответствовать регистратор.
Кроме того, регистр накопления может хранить дополнительную информацию, описывающую каждое движение. Набор такой дополнительной информации задается разработчиком при помощи реквизитов объекта конфигурации Регистр накопления.
О структуре объектов встроенного языка, предназначенных для работы с регистрами накопления можно прочитать в главе "Регистры накопления" на странице 599. [86]
Объект конфигурации Справочник
Объект конфигурации Справочник является прикладным объектом и предназначен для описания списков данных. Объект конфигурации Справочник используется для того, чтобы на его основе платформа создала в базе данных информационную структуру, в которой будет храниться, например, список сотрудников, перечень товаров, список клиентов или поставщиков.
Характерной особенностью объекта конфигурации Справочник является то, что пользователь в процессе работы может самостоятельно добавлять новые элементы в справочник. Например, пользователь может добавить в справочник новых сотрудников, создать новый товар или внести нового клиента.
Для тех, кто работал с версией 7.7
Элементы справочника могут иметь теперь несколько табличных частей и несколько форм (форма элемента, списка, выбора и т.д.).
Глубина иерархии справочников может быть произвольной. Иерархия может строиться не только no принципу иерархии групп, но и no принципу иерархии элементов (когда элемент справочника подчинен непосредственно другому элементу).
Теперь нет понятия периодических реквизитов справочников. Для хранения каких-либо данных (в том числе значений реквизитов справочников), развернутых во времени, теперь следует использовать новые объекты конфигурации – регистры сведений, поддерживающие периодическое сохранение значений своих ресурсов.
В конфигураторе можно задать набор предопределенных элементов справочника.
Каждый элемент справочника, как правило, содержит некоторую дополнительную информацию, которая более подробно описывает этот элемент. Например, каждый элемент справочника "Товары" может содержать дополнительную информацию о производителе, сроке годности и др. Набор такой информации является одинаковым для всех элементов справочника, и для описания такого набора используются реквизиты объекта конфигурации Справочник, которые также, в свою очередь, являются объектами конфигурации. Поскольку [29] эти объекты логически связаны с объектом Справочник, они называются подчиненными. Большинство реквизитов объекта конфигурации Справочник разработчик создает самостоятельно, однако у каждого объекта конфигурации Справочник существуют два поля "по умолчанию": код и наименование.
Кроме этого, каждый элемент справочника может содержать некоторый набор информации, которая одинакова по своей структуре, но различна по количеству, для разных элементов справочника. Так, например, каждый элемент справочника Сотрудники может содержать информацию о составе семьи сотрудника. Для одного сотрудника это будет только супруга, а у другого семья может состоять из супруги, сына и дочери. Для описания подобной информации могут быть использованы табличные части объекта конфигурации Справочник, являющиеся подчиненными объектами конфигурации.
Для удобства использования элементы справочника могут быть сгруппированы пользователем по какому-либо принципу. Например, в справочнике "Бытовая техника" могут быть созданы группы: "Холодильники", "Телевизоры", "Стиральные машины" и т.д. Возможность создания таких групп в справочнике задается свойством "Иерархический" объекта конфигурации Справочник. В этом случае элемент справочника, представляющий собой группу, будет являться родителем для всех элементов и групп, входящих в эту группу. Такой вид иерархии называется иерархией групп и элементов.
Возможен и другой вид иерархии – иерархия элементов. В этом случае в качестве родителя выступает не группа элементов справочника, а непосредственно один из элементов справочника. Например, такой вид иерархии можно использовать при создании справочника "Подразделения", когда одно подразделение является родителем для нескольких других подразделений, входящих в его состав.
Элементы одного справочника могут быть подчинены элементам или группам другого справочника. Например, справочник "ЕдиницыИзмерения" может быть подчинен справочнику "Товары". Тогда для каждого элемента справочника "Товары" мы сможем указать единицы измерения, в которых этот товар поступает на склад. В системе 1С:Предприятие это достигается путем того, что для каждого объекта конфигурации Справочник можно указать список владельцев справочника. [30]
Порой встречаются ситуации, когда необходимо, чтобы в справочнике некоторые элементы существовали всегда, независимо от действий пользователя. Допустим логика бизнес-процессов на предприятии такова, что все товары сначала поступают на основной склад, а затем по мере надобности перемещаются на другие склады. В этом случае в справочнике "Склады" всегда должен существовать склад "Основной", иначе приходование товаров будет выполнено неправильно. Объект конфигурации Справочник позволяет описать любое количество таких элементов справочника. Они называются предопределенными элементами справочника.
В зависимости от того, какие действия мы хотим выполнять со справочником, нам требуется изображать справочник в "разном виде". Например, для того, чтобы выбрать некоторый элемент справочника, удобнее представить справочник в виде списка, а для того, чтобы изменить какой-то элемент справочника, удобнее представить все реквизиты этого элемента справочника на одной форме. Поэтому объект конфигурации Справочник может иметь произвольное количество форм, часть из которых можно назначить в качестве основных форм справочника.
Следующая таблица поясняет названия этих форм, заданные в конфигураторе:
Любая форма может быть описана в конфигураторе. Для создания такого описания существует подчиненный объект конфигурации Форма. Как правило, он подчинен одному из прикладных объектов, но [31] может существовать и самостоятельно. На основании описания, содержащегося в объекте конфигурации Форма в нужный момент работы пользователя платформа 1С:Предприятие создаст программный объект Форма, с которым и будет работать пользователь.
Объекты конфигурации
Конфигурация представляет собой описание. Она описывает структуру данных, которые пользователь будет использовать в режиме 1С:Предприятие. Кроме этого конфигурация описывает всевозможные алгоритмы обработки этих данных, конфигурация содержит информацию о том, как эти данные должны будут выглядеть на экране и на принтере, и т.д.
В дальнейшем платформа 1С:Предприятия, на основании этого описания, создаст базу данных, которая будет иметь необходимую структуру, и предоставит пользователю возможность работать с этой базой данных.
Для того чтобы систему 1С:Предприятие можно было быстро и легко настраивать на нужные прикладные задачи, все описание, которое содержит конфигурация, состоит из неких логических единиц, называемых объектами конфигурации.
Возможно, вы уже успели заглянуть в книгу "Конфигурирование и администрирование 1С:Предприятия 8.0", в которой дается краткое описание объекта конфигурации.
Мы не будем дублировать это определение в настоящей книге, поскольку наша задача заключается не в том, чтобы изложить концепцию построения системы 1С:Предприятие как структуры метаданных, описанной в терминах классов проблемно-ориентированных бизнес-сущностей, а в том чтобы научить вас методически правильно и грамотно использовать возможности 1С:Предприятия.
Поэтому, что представляют собой объекты конфигурации, мы объясним на "бытовом" уровне, который, однако, даст вам возможность правильно понимать назначение объектов применительно к тем задачам, которые мы будем решать.
С одной стороны, объекты конфигурации представляют собой детали конструктора, из которого собирается конфигурация. Обычно в конструкторе существует некоторый набор деталей. Детали могут быть разного вида: длинные, короткие, квадратные, прямоугольные и т.д. Теперь представьте, что деталей каждого вида мы можем создавать столько, сколько нам нужно (скажем 5 длинных и 3 коротких). Мы можем соединять детали между собой различными способами. [22]
To же и с объектами конфигурации. Мы можем создавать только объекты определенных видов. Но каждого вида объектов мы можем создать столько, сколько нам нужно. Объекты одного вида отличаются от объектов другого вида тем, что имеют разные свойства (точнее говоря разный набор свойств). Объекты могут взаимодействовать друг с другом, и мы можем описать такое взаимодействие.
В чем еще сходство объектов конфигурации с деталями конструктора? В конструкторе обычно есть блоки, которые можно скрепить между собой, и есть другие детали, например колеса, которые скрепить между собой нельзя, зато их можно соединить с осью и тогда колеса будут вращаться. Т.е. разные детали конструктора по-разному ведут себя.
Объекты конфигурации также обладают различным поведением, и это поведение зависит от вида объекта. Одни объекты могут выполнять какие-то действия, другие этих действий выполнять не могут, зато у них есть свой собственный набор действий.
Следующую особенность объектов конфигурации можно продемонстрировать на примере автомобиля. Автомобиль состоит из большого количества деталей. Одна из деталей автомобиля это двигатель. Но двигатель, в свою очередь, тоже состоит из набора деталей, причем в разных двигателях могут использоваться одни и те же детали.
Так же "сложные" объекты конфигурации состоят из более "простых" объектов и одни и те же "простые" объекты могут входить в состав сложных объектов. Такая структура позволяет упростить работу с объектами конфигурации, поскольку если мы знаем, как работать с каким-либо "простым" объектом, то в любом "сложном" объекте, в состав которого он входит, мы будем работать с ним все тем же образом.
И, наконец, самое важное качество объектов конфигурации – это их прикладная направленность. Объекты конфигурации не просто некие абстрактные конструкции, при помощи которых разработчик пытается описать поставленную перед ним задачу – они представляют собой аналоги реальных объектов, которыми оперирует предприятие в ходе своей работы.
Например, на каждом предприятии существуют различные документы, с помощью которых оно фиксирует факты совершения [23] хозяйственных операций. Точно так же в конфигурации существуют объекты вида "Документ".
Кроме этого, на каждом предприятии обязательно ведется список сотрудников, справочник номенклатуры или товаров. В конфигурации тоже есть специальные объекты вида "Справочник", которые позволяют разработчику создавать компьютерные аналоги таких списков.
В версии 8.0 объектная модель платформы была унифщирована и расширена. Теперь, например, элемент справочника может иметь табличную часть. Поскольку объекты унифицированы, табличная часть справочника и табличная часть документа описывается аналогичными объектами конфигурации. Соответственно работа с табличной частью документа аналогична работе с табличной частью справочника.
Мы отойдем от такого "размытого" стиля изложения и в тех местах, где речь будет идти о конфигурации, мы будем использовать явное уточнение – объект конфигурации Справочник "Сотрудники". Там же, где речь пойдет о базе данных, мы будем говорить просто: справочник "Сотрудники". [24]
Оперативное и неоперативное проведение
Факт проведения документа и необходимость поддержания актуальной последовательности документов на оси событий порождают два различных способа проведения документов: оперативное и неоперативное проведение.
С оперативным проведением документов связано понятие оперативной отметки времени.
Оперативная отметка времени представляет собой значение типа Дата, которое формирует система. Оперативная отметка времени создается системой каждый раз при оперативном проведении документа. Ее значение формируется исходя из текущего времени и последней созданной оперативной отметки.
Если последняя оперативная отметка меньше текущего времени, в качестве новой оперативной отметки принимается текущее время.
Если последняя оперативная отметка равна или больше текущего времени, в качестве новой оперативной отметки принимается значение, на одну секунду большее, чем старая оперативная отметка времени.
Таким образом, если у объекта конфигурации Документ установлено свойство оперативного проведения, последовательность действий системы будет следующей: при создании нового документа система будет устанавливать ему текущую дату и "нулевое" время.
При проведении такого документа (с текущей датой), система установит в качестве даты документа оперативную отметку времени. Если отменить проведение документа и затем провести его снова (не изменяя даты), система установит документу новую оперативную отметку времени.
Если же попытаться перепровести документ, то будет выдан запрос о виде проведения (оперативное или нет).
В случае оперативного проведения система установит новую оперативную отметку времени, а при неоперативном проведении время документа будет сохранено прежним.
При попытке проведения (или перепроведения) оперативно проводимого документа с датой, отличающейся от текущей, будет выдано сообщение о том, что оперативное проведение невозможно и [64] предложено провести документ неоперативно (т.е. с сохранением существующей даты и времени документа).
В 1С:Предприятии 8. 0 нет понятия точки актуальности, связанной с расчетом регистров и проведением документов. Теперь регистры актуальны на последнюю дату, которой в них внесены записи.
Средствами встроенного языка возможно определение текущего режима проведения документа (система передает его одним из параметров в обработчик события ОбработкаПроведения()). В зависимости от этого могут существовать различные алгоритмы проведения документа в том или ином режиме. [65]
Основная конфигурация и конфигурация базы данных
До сих пор мы не углублялись в структуру системы 1С:Предприятие 8.0, но теперь пришло время сказать об этом несколько слов.
Вспомните, с точки зрения пользователя, программа 1С состоит из платформы и конфигурации. Мы говорили, что в каждом конкретном случае используется одна из множества возможных конфигураций. Настало время сказать, что это не совсем так.
Почему не так? Потому что в каждой информационной базе существуют, как минимум, две конфигурации.
Почему не совсем так? Потому что пользователь действительно работает всегда только с одной конфигурацией. Вторая конфигурация предназначена для разработчика или человека, который должен вносить изменения в конфигурацию (например, администратора базы данных). Для пользователя она "не видна".
Конфигурация, предназначенная для разработчика, называется Основная конфигурация (или просто Конфигурация – та, которую мы редактировали в Конфигураторе). Конфигурация, с которой работают пользователи, называется Конфигурация базы данных.
Узнай больше!
О том, сколько и каких конфигураций существует в информационной базе можно прочитать в главе "Немного о конфигурациях" на странице 535.
Основную конфигурацию можно редактировать, конфигурацию базы данных редактировать нельзя, можно только произвести обновление конфигурации базы данных на основе основной конфигурации.
Такое внутреннее устройство позволяет вносить изменения в конфигурацию, не прерывая работы пользователей (поскольку изменения вносятся в основную конфигурацию). Затем, когда разработчик будет уверен в том, что все изменения, которые он внес, верны, можно будет быстро произвести обновление конфигурации [52] базы данных, используя основную конфигурацию. Но для этого придется завершить работу всех пользователей.
Разработчик всегда может сравнить основную конфигурацию и конфигурацию базы данных, может вернуться к исходному состоянию основной конфигурации, используя конфигурацию базы данных (если, например, совсем запутался в своих изменениях
).Таким образом, взаимодействие двух конфигураций можно представить следующим образом:
Когда разработчик работает с основной конфигурацией, система всегда подсказывает ему, отличается ли его вариант основной конфигурации от того, который сохранен, и отличается ли сохраненный вариант основной конфигурации от конфигурации базы данных.
Если разработчик редактирует основную конфигурацию и редактируемый вариант основной конфигурации отличается от того, который сохранен, в заголовке окна дерева конфигурации появляется признак модифицированности конфигурации (*):
[53]
Если сохраненный вариант основной конфигурации отличается от конфигурации базы данных, в заголовке окна дерева конфигурации появляется знак отличия конфигураций (<!>):
Для сохранения основной конфигурации следует воспользоваться командой
КонфигурацияСохранить конфигурацию,
а для обновления конфигурации базы данных необходимо выполнить команду
КонфигурацияОбновить конфигурацию базы данных.
При выполнении команды ОтладкаНачать отладку, система сама сначала сохраняет основную конфигурацию, и затем производит ее сравнение с конфигурацией базы данных. В случае если конфигурации отличаются, выдается запрос на обновление конфигурации базы данных, который вы видели в предыдущих примерах.
При выполнении команды ОтладкаПродолжить, система, после описанных выше действий, предлагает еще и перезапустить приложение, чтобы прекратить текущую отладочную сессию.
Таким образом, система старается облегчить жизнь разработчика и автоматизировать часто выполняемые операции.
Важным фактом является то, что именно в момент обновления конфигурации базы данных, система создает (модифицирует) в базе данных те структуры хранения данных, которые мы описали в виде объектов конфигурации.
Таким образом, обычные элементы справочника пользователь добавляет в ту структуру базы данных, которую создала система на основе объекта конфигурации Справочник, а предопределенные элементы этого справочника система добавляет в эту структуру сама, на основе все того же описания этой структуры, которым является объект конфигурации Справочник. [54]
Отсюда следует немаловажный факт (о котором говорилось в предыдущем разделе), что если простые элементы справочника "безразличны" для конфигурации, то предопределенные элементы важны для нее, поскольку на них могут быть "завязаны" алгоритмы работы конфигурации. [55]
Палитра свойств
Еще один инструмент разработчика, который мы использовали по ходу изложения, но на описании которого не заостряли внимание, – это палитра свойств.
Если помните, мы использовали палитру свойств, когда создавали табличную часть и реквизиты табличной части объекта конфигурации Справочник "Номенклатура".
Палитра свойств это специальное служебное окно, которое позволяет редактировать все существующие свойства объекта конфигурации. Поскольку разные объекты конфигурации имеют самые разные свойства, содержимое этого окна будет меняться в зависимости от того, какой объект является текущим (на каком объекте конфигурации установлен курсор).
При некоторых действиях разработчика (например, создание табличной части), палитра свойств открывается автоматически. Но разработчик всегда может открыть палитру свойств объекта конфигурации самостоятельно, воспользовавшись пунктом "Свойства" контекстного меню правой кнопки мыши.
В этом случае палитра свойств откроется и будет закреплена на рабочей области конфигуратора. Однако есть удобная возможность "открепить" палитру свойств (используя символ кнопки в заголовке окна палитры свойств):
"Открепим" палитру свойств.
[56]
В этом состоянии, при наведении курсора мыши на любое другое окно, палитра свойств будет сворачиваться на дополнительную панель с правой (по умолчанию) стороны экрана:
А при наведении курсора мыши на символ свернутой палитры свойств, она будет открываться.
Подобным поведением (возможностью быть прикрепленным, прячущимся и т.д.) обладает не только окно палитры свойств, но и другие окна конфигуратора (например, окно дерева конфигурации). [57]
Первое знакомство
Итак, запустим 1С:Предприятие в режиме конфигуратора. Перед вами окно конфигуратора. Именно с помощью этого инструмента мы будем создавать нашу конфигурацию.
Большое количество незнакомых иконок на панели инструментов часто смущает начинающего разработчика. Не следует этого бояться – со временем вы сможете свободно ориентироваться среди них. Сначала пользуйтесь пунктами меню – и постепенно ваша работа сама собой переместится на панель инструментов.
Выполним первую команду, с которой начинается работа с любой конфигурацией – Конфигурация
Открыть конфигурацию. На экране откроется... [20]Редактирование формы документа ОказаниеУслуги
Откроем в конфигураторе форму документа "ОказаниеУслуги" – "ФормаДокумента". Откроем палитру свойств для табличного поля, расположенного в форме, и установим свойство "Подвал", которое определяет наличие подвала у элемента управления табличное поле.
Добавим подвал к табличному полю...
Затем откроем свойства колонки "Цена" и установим текст подвала – "Всего:", горизонтальное положение в подвале – "Прижать вправо" и в шрифте подвала изменим начертание на "Жирный". [114]
После этого откроем свойства колонки "Сумма", установим горизонтальное положение в подвале – "Прижать вправо", установим флаг "Показывать итог в подвале" и в шрифте подвала тоже изменим начертание на "Жирный".
Запустим 1С:Предприятие в режиме отладки и посмотрим, как теперь выглядит форма документа Оказание услуги № 1:
Подобным образом, используя свойства элементов управления и задавая их значения, разработчик имеет возможность создать экранную форму любого дизайна и поведения. [115]
Редактирование макета документа ОказаниеУслуги
Откроем конфигуратор, раскроем дерево документа "ОказаниеУслуги" и дважды щелкнем на макете "Печать". Как видите, макет документа состоит из именованных областей, которые в определенном порядке выводятся на печать.
Добавим новую область для вывода итоговой суммы документа. Выделим мышью две пустые строки и выполним команду Таблица
ИменаНазначить имя...Выделим мышью две строки и зададим имя области
Назовем область "Всего". В созданной области, в колонке "Цена", напишем "Всего", а в колонке "Сумма" напишем "ВсегоПоДокументу". [110]
Вызвав палитру свойств для последней заполненной нами ячейки, укажем, что в этой ячейке будет находиться не текст, а параметр:
Укажем, что в ячейке будет находиться не текст, а параметр...
Здесь следует сказать о том, что каждая ячейка редактируемого нами табличного документа может содержать либо текст, либо некоторый параметр, либо шаблон.
Текст, содержащийся в ячейке, будет показан на экране.
Параметр будет заменен некоторым значением, которое может быть присвоено ему средствами встроенного языка. Текст, содержащийся в ячейке, является именем этого параметра.
Шаблон представляет собой текстовую строку, в определенные места которой будут вставлены значения параметров.
Поэтому, указав для ячейки в качестве заполнения "Параметр", мы определили параметр области с именем "ВсегоПоДокументу", которому присвоим нужное нам значение при формировании печатной формы. [111]
Теперь откроем модуль формы документа "ОказаниеУслуги" – "ФормаДокумента". Найдем в нем процедуру "Печать" и после цикла добавим в нее следующие строки (новые строки выделены жирным шрифтом):
Процедура Печать(Элемент)
//{{_КОНСТРУКТОР_ПЕЧАТИ_ЭЛЕМЕНТ(Печать)
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
ТабДок = Новый ТабличныйДокумент;
Макет = Документы.ОказаниеУслуги.ПолучитьМакет("Печать");
// Заголовок
Область = Макет.ПолучитьОбласть("Заголовок");
ТабДок.Вывести(Область);
// Шапка
Область = Макет.ПолучитьОбласть("Шапка");
Область.Параметры.Номер = Номер;
Область.Параметры.Дата = Дата;
Область.Параметры.Склад = Склад;
Область.Параметры.Клиент = Клиент;
Область.Параметры.Мастер = Мастер;
ТабДок.Вывести(Область);
// тчНоменклатура
Область = Макет.ПолучитьОбласть("тчНоменклатураШапка");
ТабДок.Вывести(Область);
Для Каждого ТекСтрокаПереченьНоменклатуры Из ПереченьНоменклатуры Цикл
Область = Макет.ПолучитьОбласть("тчНоменклатура");
Область.Параметры.Номенклатура = ТекСтрокаПереченьНоменклатуры.Номенклатура;
Область.Параметры.Количество = ТекСтрокаПереченьНоменклатуры.Количество;
Область.Параметры.Цена = ТекСтрокаПереченьНоменклатуры.Цена;
Область.Параметры.Сумма = ТекСтрокаПереченьНоменклатуры.Сумма;
ТабДок.Вывести(Область);
КонецЦикла;
Область = Макет.ПолучитьОбласть("Всего");
Область.Параметры.ВсегоПоДокументу = ПереченьНоменклатуры.Итог("Сумма");
ТабДок.Вывести(Область);
ТабДок.ОтображатьСетку = Ложь;
ТабДок.Защита = Ложь;
ТабДок.ТолькоПросмотр = Ложь;
ТабДок.ОтображатьЗаголовки = Ложь;
ТабДок.Показать();
//}}_КОНСТРУКТОР_ПЕЧАТИ_ЭЛЕМЕНТ
КонецПроцедуры
Подобным образом, используя свойства ячеек макета и управляя порядком их вывода, разработчик имеет возможность создать печатную форму любого дизайна.
А теперь, для того, чтобы наш документ "ОказаниеУслуги", выглядел вполне законченным, добавим итоговую сумму по документу и на экранную форму, чтобы пользователь мог видеть ее в процессе заполнения табличной части документа. [113]
Система 1С:Предприятие
Система 1С:Предприятие является универсальной системой автоматизации экономической и организационной деятельности предприятия. Поскольку такая деятельность может быть довольно разнообразной, система 1С:Предприятие имеет возможность "приспосабливаться" к особенностям конкретной области деятельности, в которой она используется. Для обозначения такой способности используется термин конфигурируемость, то есть возможность настройки системы на особенности конкретного предприятия и класса решаемых задач.
Это достигается тем, что 1С:Предприятие – это не просто программа, существующая в виде набора неизменяемых файлов, а совокупность различных программных инструментов, с которыми работают разработчики и пользователи. Логически всю систему можно разделить на две большие части, которые тесно взаимодействуют друг с другом: конфигурацию и платформу, которая управляет работой конфигурации.
Для того чтобы легче понять взаимодействие этих частей системы, сравним ее с проигрывателем компакт-дисков. Как вы хорошо знаете, проигрыватель служит для того чтобы слушать музыку. "На вкус и цвет товарищей нет", поэтому существует множество разнообразных компакт-дисков, на которых записаны музыкальные произведения на любой вкус. И для того, чтобы прослушать какую либо композицию, нужно вставить компакт-диск в проигрыватель, и проигрыватель воспроизведет записанное на нем музыкальное произведение. Более того, современный проигрыватель компакт-дисков даже позволит вам записать собственную подборку музыкальных произведений, т.е. создать новый компакт-диск.
Сам по себе проигрыватель совершенно бесполезен без компакт-диска, точно так же, как компакт-диск не может сам по себе принести нам никакой пользы (кроме как стать подставкой под чашку кофе), если у нас нет проигрывателя.
Возвращаясь к системе 1С:Предприятие, можно сказать, что платформа является своеобразным "проигрывателем", а конфигурация – "компакт-диском". Платформа обеспечивает работу конфигурации и позволяет вносить в нее изменения или создавать собственную конфигурацию. [15]
Существует одна платформа (1С:Предприятие 8.0) и множество конфигураций. Для функционирования какого-либо прикладного решения всегда необходима платформа и какая-либо (одна) конфигурация.
Сама по себе платформа не может выполнить никаких задач автоматизации, так как она создана для обеспечения работы какой-либо конфигурации. Сама по себе конфигурация так же бесполезна, поскольку, чтобы она могла выполнить те задачи, для которых она создана, необходимо наличие платформы, которая и управляет ее работой.
Платформа теперь не делится на базовые объекты и компоненты, поставляемые отдельно (бухгалтерия, оперативный учет, расчет). Все объекты конфигурации включены в стандартную поставку.
Здесь следует сказать о небольшой двойственности терминологии, которая будет использоваться в дальнейшем. Двойственность заключается в употреблении разных терминов для обозначения одного и того же предмета: "конфигурация" и "прикладное решение". Оба эти термина обозначают ту часть системы 1С:Предприятие, которая работает под управлением платформы и которую "видят" все пользователи (бывает, конечно, что пользователи работают и с инструментальными средствами платформы, но это "продвинутые" пользователи ). Употребление одного или другого термина зависит от контекста, в котором ведется изложение.
Если речь идет о действиях разработчика, то употребляется термин конфигурация, поскольку это точный термин 1С:Предприятия.
Термин прикладное решение является более общепринятым и понятным для пользователя системы 1С:Предприятие.
Итак, поскольку задачи автоматизации, как было упомянуто выше, могут быть самыми разными, фирма "1С" и ее партнеры выпускают прикладные решения, каждое из которых предназначено для автоматизации одной определенной области человеческой деятельности.
В качестве примеров существующих прикладных решений можно привести решение "Управление торговлей", предназначенное для автоматизации задач оперативного и управленческого учета, "Управление персоналом", предназначенное для реализации кадровой политики компании или "Управление производственным предприятием", охватывающее основные контуры учета и управления на производственном предприятии.
Прикладное решение является, по возможности, универсальным, чтобы удовлетворить потребности самых разных предприятий, работающих в одной области деятельности. И это хорошо. С другой стороны, такая универсальность неизбежно приведет к тому, что на конкретном предприятии будут использоваться далеко не все возможности прикладного решения, а каких-то возможностей в нем будет не доставать (нельзя угодить всем ).
Вот тут и выходит на передний план конфигурируемость системы, поскольку платформа, помимо управления работы конфигурацией, содержит средства, позволяющие вносить изменения в используемую конфигурацию. Более того, платформа позволяет создать свою собственную конфигурацию "с нуля", если по каким-либо причинам [17] использование типовой конфигурации представляется нецелесообразным.
Обратите внимание, как мы в одном абзаце перешли от "прикладного решения" к "конфигурации". Ничего не поделаешь – для пользователя понятнее так, а для разработчика – по-другому.
Таким образом, если вернуться к сравнению с проигрывателем компакт-дисков, мы можем изменять по своему вкусу мелодии, которые были ранее записаны на компакт-диске, и даже создавать диски со своими собственными музыкальными произведениями, причем нам не потребуются какие-либо музыкальные инструменты, все необходимое для создания мелодий есть в нашем проигрывателе компакт-дисков.
Для того чтобы обеспечить такие возможности, система 1С:Предприятие имеет различные режимы работы: 1С:Предприятие и Конфигуратор.
Режим 1С:Предприятие является основным и служит для работы пользователей системы. В этом режиме пользователи вносят данные, обрабатывают их и получают выходные результаты.
Режим конфигуратора используется разработчиками и администраторами баз данных. Именно этот режим и предоставляет инструменты, необходимые для модификации существующей или создания новой конфигурации.
Поскольку задача нашей книги состоит в том, чтобы научить вас создавать собственные конфигурации и изменять существующие, дальнейшее повествование будет, в основном, посвящено работе с системой в режиме конфигуратора. И лишь иногда, чтобы проверить результаты нашей работы, мы будем запускать систему в режиме 1С:Предприятие. Изучение этой книги предполагает, что у вас уже установлена на компьютере система 1С:Предприятие 8.0. Если это не так, то сейчас самое время это сделать, так как дальнейшее изложение будет непосредственно описывать последовательность работы с программой.
При установке системы 1С:Предприятие у вас не должно возникнуть никаких трудностей. Процесс установки подробно описан в брошюре "Руководство по установке и запуску", входящей в комплект документации системы 1С:Предприятие 8.0. [18]
Также у вас не должно возникнуть трудностей при запуске системы и создании пустой информационной базы.
Будьте внимательны! Для выполнения примера, содержащегося в книге, нам потребуется информационная база с ПУСТОЙ конфигурацией, а не база, созданная из шаблона:
Создадим информационную базу с пустой конфигурацией
При запуске 1С:Предприятия 8.0 вы не увидите привычного выбора 1С:Предприятие Конфигуратор Отладчик Монитор. Отладчик и монитор пользователей теперь включены в состав конфигуратора. [19]
Создание документа ОказаниеУслуги
Теперь мы аналогичным образом создадим второй документ, необходимый нам – "ОказаниеУслуги". Для этого потребуется выполнить следующие действия:
создать новый объект конфигурации Документ "ОказаниеУслуги" с реквизитами:
· | "Склад", тип СправочникСсылка.Склады, |
· | "Клиент", тип СправочникСсылка.Клиенты, |
· | "Мастер", тип СправочникСсылка.Сотрудники, |
создать табличную часть этого документа "ПереченьНоменклатуры" с реквизитами:
· | "Номенклатура", тип СправочникСсылка.Номенклатура, |
· | "Количество", тип Число, длина 15, точность 3, неотрицательное, |
· | "Цена", тип Число, длина 15, точность 2, неотрицательное, |
· | "Сумма", тип Число, длина 15, точность 2, неотрицательное, |
· | создать основную форму документа, |
· | для полей ввода колонок "Количество" и "Цена" создать обработчик события "ПриИзменении", в котором вызывать процедуру "РассчитатьСумму" из общего модуля "РаботаСДокументами". [79] |
В результате документ "ОказаниеУслуги" будет выглядеть следующим образом:
После того, как эти действия будут выполнены, запустим 1С:Предприятие в режиме отладки и убедимся, что при вводе цены и количества в табличную часть документа "ОказаниеУслуги" сумма пересчитывается по нашему алгоритму. [80]
Создание документа ПриходнаяНакладная
После того, как мы познакомились с объектом конфигурации Документ, создадим несколько таких объектов, чтобы иметь возможность фиксировать события, происходящие в нашем OOO "На все руки мастер".
Одними из самых популярных услуг нашего предприятия является ремонт телевизоров и установка стиральных машин. И в том, и в другом случае требуются некоторые материалы, которые расходуются в процессе оказания этих услуг. Поэтому двумя важнейшими событиями в хозяйственной жизни нашей организации будут являться поступление материалов и оказание услуг.
Для отражения этих событий в базе данных мы создадим два документа: "Приходная накладная" и "Оказание услуги". Документ "Приходная накладная" будет фиксировать факт поступления в нашу организацию необходимых материалов, а документ "Оказание услуги" будет фиксировать оказание услуг и расход материалов, которые используются при оказании этих услуг.
Создадим новый объект конфигурации Документ. Зададим имя документа – "ПриходнаяНакладная". Нажмем "Далее".
Создадим реквизит документа с именем "Склад" и типом СправочникСсылка.Склады:
Создадим реквизит документа "Склад".
[67]
После этого добавим табличную часть с именем "Материалы" и создадим у нее четыре реквизита:
· | "Материал" с типом СправочникСсылка.Номенклатура, |
· | "Количество" с типом Число, длиной 15, точностью 3, неотрицательное, |
· | "Цена" с типом Число, длиной 15, точностью 2, неотрицательное, |
· | "Сумма" с типом Число, длиной 15, точностью 2, неотрицательное. |
Создадим табличную часть и опишем ее реквизиты.
Запустим 1С: Предприятие в режиме отладки и протестируем получившийся результат. В открывшемся окне программы выполним команду Операции
Документы..., выберем документ "Приходная накладная". Система откроет одну из основных форм документа – основную форму списка. [68]Пока в нашей базе данных нет ни одного документа "Приходная накладная", поэтому создадим новый документ (создать новый документ можно при помощи пункта меню Действия
Добавить, соответствующей иконки или клавишей "Insert").Добавим новый документ при помощи меню или иконки
Система автоматически присвоит номер новому документу и нам останется только заполнить табличную часть. Заполним ее материалами для ремонта телевизоров так, как показано на рисунке:
Нажмем "ОК". [69]
Аналогичным образом мы создадим второй документ, который будет приходовать следующие материалы для установки стиральных машин:
Наверняка вы обратили внимание на то, что при заполнении документа приходится вводить сумму в каждой строке. Это неудобно, и возникает естественное желание автоматизировать работу документа так, чтобы сумма вычислялась автоматически каждый раз при изменении цены или количества материалов в строке.
Это совсем не сложно и для этого нам потребуется сначала создать собственную форму документа, а затем воспользоваться возможностями встроенного языка.
Создание движений документа ОказаниеУслуги
Теперь мы аналогичным образом создадим движения документа "ОказаниеУслуги". При использовании конструктора будем внимательны и обратим внимание на то, что документ "ОказаниеУслуги" должен расходовать материалы. Поэтому перед тем, как нажать "ОК" убедимся, что выбран правильный тип движения регистров (нам нужен "Расход").
Запустим отладку и создадим документ оказания услуги, который будет расходовать один транзистор Philips за 3 рубля.
Проведем документ оказания услуги и убедимся, что в регистре накопления он создал верные движения.
Сформированные таким образом движения этого документа будут не совсем правильны. Дело в том, что в документе "ОказаниеУслуги", в отличие от документа "ПриходнаяНакладная" могут содержаться не только расходуемые материалы, но и услуги. Поэтому в регистр "ОстаткиМатериалов" будут попадать записи и о расходуемых услугах, что не правильно.
Пока мы ничего не будем делать с движениями, которые сформировал конструктор, но как только познакомимся с перечислениями, мы внесем в обработчик проведения необходимые изменения. [94]
Создание движений документа ПриходнаяНакладная
Движения документа – это записи в регистрах, которые создаются в процессе проведения документа и отражают изменения, производимые документом. Откроем окно редактирования объекта конфигурации Документ "ПриходнаяНакладная".
Перейдем на закладку "Движения" и в списке регистров конфигурации отметим регистр накопления "ОстаткиМатериалов":
Отметим регистр накопления и воспользуемся конструктором движений...
Обратите внимание, что сразу после отметки выбранного регистра становится доступной кнопка "Конструктор движений". Этим конструктором мы и воспользуемся.
Конструктор устроен просто. В списке "Регистры" перечислены регистры, в которых документ может создавать движения. В нашем случае там пока один регистр "ОстаткиМатериалов".
В списке "Реквизиты документа" должны находиться исходные данные для создания движений. А в таблице "Поле – Выражение" [89] должны быть заданы формулы, по которым будут вычисляться значения измерений и реквизитов регистра при записи движений.
Регистр, для которого конструируем движения
(приход или расход)
Что записываем в измерения и
откуда берем данные
ресурсы регистра
Обратите внимание, что по умолчанию конструктор предлагает нам создавать движения прихода (символ "+" рядом с названием регистра) по регистру "ОстаткиМатериалов". Это нас вполне устраивает, ведь документ "ПриходнаяНакладная" и должен приходовать материалы.
В поле выбора "Табличная часть" выберем табличную часть нашего документа – "Материалы". Список реквизитов документа автоматически заполнится реквизитами нашей табличной части. Теперь нажмем "Заполнить выражения". [90]
В нижнем окне сформируется соответствие полей и выражений.
Выберем табличную часть и нажмем "Заполнить выражения"...
Как видите, конструктор движений установил соответствия подходящим образом: в качестве материала в регистр будет записан материал из табличной части документа, в качестве склада – склад, указанный в шапке документа, а в качестве количества – количество из табличной части документа.
Нажмем "ОК" и посмотрим, какой текст сформировал конструктор в модуле объекта:
//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
Для Каждого ТекСтрокаМатериалы Из Материалы Цикл
// регистр ОстаткиМатериалов Приход
Движение = Движения.ОстаткиМатериалов.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход; [91]
Движение.Период = Дата;
Движение.Материал = ТекСтрокаМатериалы.Материал;
Движение.Склад = Склад;
Движение.Количество = ТекСтрокаМатериалы.Количество;
КонецЦикла;
// записываем движения регистров
Движения.ОстаткиМатериалов.Записать();
//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры
Внутри обработчика расположен цикл, который предназначен для перебора строк табличной части нашего документа. В цикле обращение к табличной части документа происходит по имени ("Материалы"), а строки табличной части документа представляют собой коллекцию значений, для перебора которой можно использовать конструкцию Для каждого ... из ... цикл.
Объект встроенного языка ДокументОбъект имеет свойство "Движения". Оно возвращает коллекцию наборов записей регистров, которые принадлежат этому документу. К набору записей документа, принадлежащему конкретному регистру, можно обратиться, указав через точку имя этого регистра.
Таким образом, в первой строке тела цикла мы добавляем к набору записей, который создает наш документ в регистре, новую запись и сохраняем ее в переменной "Движение".
Затем мы присваиваем нужные значения всем полям этой записи и после перебора всех строк документа (после завершения циклов) "одним махом" записываем в регистр "ОстаткиМатериалов" весь набор записей движений документа.
Посмотрим, как это работает. Запустим 1С:Предприятие в режиме отладки и откроем одновременно два окна: список документов "ПриходнаяНакладная" и список регистра накопления "ОстаткиМатериалов". [92]
Откроем Приходную накладную №1 и нажмем "ОК". Обратите внимание, что при проведении приходной накладной появляются соответствующие записи в регистрах накопления:
Аналогичные действия проделаем и с документом Приходная накладная №2. [93]
Создание формы документа
Прежде всего, следует заметить, что до сих пор мы использовали предопределенные формы объектов, которые система 1С:Предприятие создавала для нас сама "по умолчанию".
Теперь же у нас возникла необходимость слегка изменить логику работы формы документа, а значит, нам придется создать свою собственную форму документа "ПриходнаяНакладная" для того, чтобы в ней мы могли описать тот алгоритм, который нам нужен. [70]
Узнай больше!
О том, для чего предназначены основные формы объектов конфигурации, можно прочитать в главе "Механизм основных форм" на странице 542.
Вернемся в конфигуратор и откроем окно редактирования объекта конфигурации "ПриходнаяНакладная". В этом окне нас интересует закладка "Формы". Как мы видим, ни одна из основных форм документа пока не задана.
Для того чтобы создать форму документа, нажмем на символ лупы в поле ввода:
Создадим форму документа...
[71]
Система вызовет еще один полезный инструмент разработчика – конструктор форм. Этот инструмент также построен по принципу "мастеров" – ввод данных в определенной последовательности и передвижение кнопками "Далее" и "Назад".
Сразу нажмем кнопку "Готово", согласившись тем самым со всем, что нам предложила система. [72]
Обратите внимание, что в дереве объектов конфигурации у объекта конфигурации Документ "ПриходнаяНакладная" появилась форма "ФормаДокумента", а на экране открылось окно редактора форм, содержащее эту форму:
Новая форма документа и окно редактора форм
Как видите, форма документа "ПриходнаяНакладная" содержит большое количество всевозможных полей. Эти поля называются элементами управления. Они имеют разное назначение и разное поведение, которое соответствует их назначению. Однако все они служат для того, чтобы отображать информацию, хранящуюся в базе данных и организовывать интерактивную работу с этой информацией. [73]
Сейчас мы обратим свое внимание только на те элементы управления, которые нас интересуют – это три поля ввода, расположенные в колонках "Количество", "Цена" и "Сумма":
Интересующие нас элементы управления.
Мы хотим, чтобы каждый раз, когда меняется значение в поле "Количество" или в поле "Цена", в поле "Сумма" автоматически устанавливалось значение равное Количество*Цена. Очевидно, что для этого нужно написать на встроенном языке команду похожую на Сумма = Количество*Цена, которая будет выполняться при изменении значения поля "Количество" или "Цена". Но как "поймать" эти моменты изменения?
Создание макета документа ОказаниеУслуги
Откроем в конфигураторе окно редактирования объекта конфигурации Документ "ОказаниеУслуги". Перейдем на закладку "Макеты" и запустим конструктор печати:
Запустим конструктор печати...
На первом шаге укажем, что новая процедура, которая будет создана конструктором для формирования печатной формы документа, будет располагаться в модуле формы.
На втором шаге нажатием двойной стрелки определим, что все реквизиты нашего документа будут отображены в шапке печатной формы.
На третьем шаге точно также определим, что все реквизиты табличной части документа будут отображены в печатной форме.
На четвертом шаге конструктор предложит сформировать нам подвал (нижнюю часть) печатной формы. Мы не станем ничего [105] указывать (подвал в данном случае использовать не будем), и перейдем к пятому шагу.
Здесь укажем, что конструктор должен вставить новую кнопку в форму документа для вызова процедуры формирования печатной формы, и нажмем "ОК".
В конфигураторе откроется форма документа и его макет:
[106]
Проверим макет в работе. Запустим 1С:Предприятие в режиме отладки и откроем документ ОказаниеУслуги №1. Обратите внимание, что в правом нижнем углу документа появилась новая кнопка "Печать".
Появилась новая кнопка "Печать"...
Эта та кнопка, которую добавил конструктор. Нажмем на нее и увидим печатную форму нашего документа.
Как видите, конструктор сформировал вполне подходящую печатную форму для нашего документа. Единственное, чего не хватает в данной форме – это итоговой суммы документа. [107]
В следующей главе мы познакомимся с тем, как можно редактировать макеты и формы объектов конфигурации и добавим итоговую сумму к форме и макету документа "ОказаниеУслуги". [108]
Создание отчета Материалы
Теперь у нас все готово для того, чтобы можно было получать выходные данные. Поэтому приступим к созданию отчета, который будет показывать нам приход, расход и остатки материалов. Данная глава преследует цель лишь проиллюстрировать механизм создания отчетов. Более глубоко работа с конструктором выходной формы будет рассмотрена в главе "Создание отчетов" на странице 162.
Создадим новый объект конфигурации Отчет и назовем его "Материалы". Перейдем на закладку "Макеты" и воспользуемся конструктором выходной формы для того, чтобы полностью создать наш отчет.
Воспользуемся конструктором выходной формы...
После выбора имени формы конструктор предложит нам начать создание отчета. Конструктор обладает большим количеством возможностей для визуального проектирования отчетов, но мы сейчас воспользуемся только самыми простыми его возможностями и просто определим те данные, которые хотим видеть в результате работы нашего отчета.
В списке "База данных" представлен состав объектов базы данных; на основе их данных мы имеем возможность построить отчет. Если раскрыть ветку "РегистрыНакопления" то мы увидим, что кроме [98] таблицы регистра "ОстаткиМатериалов" в этой ветке присутствуют еще несколько виртуальных таблиц, которые формирует система.
Кроме таблицы регистра ОстаткиМатериалов
присутствуют еще несколько виртуальных таблиц...
Поскольку мы хотим видеть как остатки материалов, так и информацию об их поступлении и расходовании, нас будет интересовать виртуальная таблица "ОстаткиМатериалов.ОстаткиИОбороты". Раскроем ее.
Как вы видите, эта таблица содержит материал, склад и кроме этого начальные и конечные остатки, а также значения прихода, расхода и оборотов для всех ресурсов регистра "ОстаткиМатериалов". [99]
Начнем выбирать поля таблицы в нужном нам порядке двойным щелчком мыши. Сначала выберем "Склад" и "Материал". Затем выберем "КоличествоНачальныйОстаток", "КоличествоПриход", "КоличествоРасход" и в заключение "КоличествоКонечныйОстаток".
В результате окно "Поля" должно быть заполнено следующим образом:
После этого на закладке "Итоги" укажем группировочное поле "Склад":
Нажмем "ОК". Система автоматически сформирует формы и откроет их на экране.
Запустим 1С:Предприятие в режиме отладки и посмотрим, как работает отчет. Выполним ОперацииОтчет...Материалы и нажмем "Сформировать". [100]
Как видите, наш отчет вполне "презентабелен" и полностью отражает движение материалов, произошедшее в нашей организации:
[101]
Создание процедуры обработки события в модуле формы
Щелкните правой кнопкой мыши на поле ввода в колонке "Количество" и откройте для него палитру свойств (пункт контекстного меню Свойства). Прокрутите список до конца, и вы обнаружите перечень событий, которые могут быть связаны с этим полем ввода.
С большинством элементов управления связаны различные события, и именно с их помощью разработчик может влиять на ход работы программы.
Узнай больше!
Подробнее об обработчиках событий можно прочитать в главе "Обработчики событий" на странице 546. [74]
Среди событий, связанных с полем ввода, найдите событие "При изменении". Это событие возникает после изменения значения поля ввода.
Щелкните по кнопке с лупой в конце поля ввода, и система создаст заготовку процедуры обработчика этого события в модуле нашей формы.
Модуль – это "хранилище" для текста программы на встроенном языке. В конфигурации существует большое количество модулей, которые расположены в различных ее точках. Они могут принадлежать некоторым объектам конфигурации (например, формам), а могут существовать сами по себе (принадлежать всей конфигурации в целом). Текст программы, содержащийся в модулях, будет использоваться платформой в заранее известные моменты работы системы 1С:Предприятие.
Выберем событие "При изменении" и система создаст заготовку процедуры в модуле формы.
[75]
В модуль формы добавим следующий текст:
Процедура МатериалыКоличествоПриИзменении(Элемент)
СтрокаТабличнойЧасти = ЭлементыФормы.Материалы.ТекущиеДанные;
СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество * СтрокаТабличнойЧасти.Цена;
КонецПроцедуры
Объясним назначение этих строк.
В первой строке мы обращаемся к программному объекту ЭлементыФормы. Этот объект является коллекцией значений, содержащей все элементы управления, расположенные на нашей форме. Каждый элемент управления формы можно получить, указав его имя в качестве свойства объекта ЭлементыФормы. В данном случае мы обращаемся к элементу управления с именем "Материалы" (ЭлементыФормы.Материалы).
Этот элемент управления отображает строки табличной части нашего документа. Получить ту строку, в которой в настоящее время осуществляется редактирование, можно при помощи свойства программного объекта ТабличноеПоле – ТекущиеДанные. Таким образом, в результате выполнения первой строки переменная СтрокаТабличнойЧасти будет содержать объект ДокументТабличнаяЧастьСтрока.ПриходнаяНакладная.Материалы, в котором находятся редактируемые данные.
Во второй строке вычисляется сумма как произведение количества и цены. Объект ДокументТабличнаяЧастьСтрока.<имя> позволяет обратиться к данным конкретной колонки, указав имя колонки в качестве свойства объекта (например, СтрокаТабличнойЧасти.Количество).
Теперь посмотрим, как это работает. В окне программы откроем список документов "ПриходнаяНакладная" и откроем любой из двух созданных нами документов. Если теперь вы поменяете количество в любой строке документа, то сумма в строке будет пересчитана автоматически.
Замечательно. Но теперь хотелось бы и для поля "Цена" сделать то же самое. А если заглянуть вперед, то мы увидим, что подобное автоматическое заполнение поля "Сумма" может нам понадобиться и в других документах. Поэтому лучше будет поместить расчет суммы в [76] некотором "общедоступном" месте, чтобы разные документы, имеющие аналогичные реквизиты табличной части, могли использовать этот алгоритм.
Для описания таких "общедоступных" мест служат объекты конфигурации Общий модуль, расположенные в ветке ОбщиеОбщие модули. Процедуры и функции, содержащиеся в этих модулях, могут быть доступны для любых объектов конфигурации.
Создание процедуры обработки события в общем модуле
Для того, чтобы алгоритм, выполняемый при обработке события, был доступен для разных документов, мы создадим общий модуль и перенесем в него нашу процедуру расчета суммы. А в документе просто оставим вызовы этой процедуры из общего модуля.
Создадим объект конфигурации Общий модуль в ветке Общие
Общие модули и назовем его "РаботаСДокументами". Он будет содержать следующий текст:Процедура РассчитатьСумму(СтрокаТабличнойЧасти) Экспорт
СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество * СтрокаТабличнойЧасти.Цена;
КонецПроцедуры
Ключевое слово Экспорт в конце оператора "Процедура" как раз указывает на то, что эта процедура может быть доступна из других программных модулей.
Затем в модуле нашей формы изменим текст нашего обработчика:
Процедура МатериалыКоличествоПриИзменении(Элемент)
СтрокаТабличнойЧасти = ЭлементыФормы.Материалы.ТекущиеДанные;
РассчитатьСумму(СтрокаТабличнойЧасти);
КонецПроцедуры
Таким образом, теперь вместо непосредственного расчета суммы мы будем вызывать процедуру из общего модуля, и передавать ей в качестве параметра нужную нам строку табличной части. [77]
Проверим, как это работает, и убедимся, что ничего не изменилось.
Теперь осталось и для поля "Цена" установить такой же обработчик. Так как однажды мы уже написали в модуле формы нужную нам процедуру, то мы просто могли бы сопоставить ее также и другому событию другого элемента управления, расположенного в форме. Однако стандарты разработки конфигураций фирмы "1С" не допускают такого решения.
Узнай больше!
Согласно стандартам разработки фирмы "1С", у каждого события должен быть свой обработчик. Если одинаковые действия должны выполняться при изменении разных элементов управления (например, при нажатии нескольких кнопок), то в этом случае следует поступать следующим образом:
· | создается отдельная процедура (функция), выполняющая необходимые действия; |
· | для каждого элемента управления создается отдельный обработчик с именем, назначаемым no умолчанию; |
· | из каждого обработчика вызывается требуемая процедура (функция). |
СтрокаТабличнойЧасти = ЭлементыФормы.Материалы.ТекущиеДанные;
РассчитатьСумму(СтрокаТабличнойЧасти);
КонецПроцедуры
Создание регистра накопления ОстаткиМатериалов
Теперь, когда мы знаем, для чего предназначены регистры накопления, посмотрим, как можно их использовать в нашем примере.
Прежде всего, нас интересует информация о том, сколько и каких материалов есть у нас на складах. Для накопления такой информации мы создадим регистр "ОстаткиМатериалов".
Откроем в конфигураторе нашу учебную конфигурацию и создадим новый объект конфигурации Регистр накопления. Зададим имя регистра – "ОстаткиМатериалов". Нажмем "Далее" и перейдем к созданию структуры регистра.
Создадим измерения регистра:
"Материал", с типом СправочникСсылка.Номенклатура,
"Склад", с типом СправочникСсылка.Склады.
Затем создадим ресурс "Количество" с длиной 15 и точностью 3.
В результате этих действий регистр "ОстаткиМатериалов" должен иметь следующий вид:
Если вы сейчас попытаетесь запустить 1С:Предприятие в режиме отладки, то система выдаст сообщение об ошибке: "РегистрНакопления.ОстаткиМатериалов: Ни один из документов не является регистратором для регистра". Это сообщение еще раз [87] подтверждает тот факт, что назначение регистра накопления в том, чтобы аккумулировать данные, поставляемые различными документами. [88]
Создание справочника Клиенты
Теперь, когда мы немного познакомились с возможностями объекта конфигурации Справочник, создадим несколько таких объектов, чтобы описать справочники, которые будут использоваться в нашей базе данных.
Так как наше OOO "На все руки мастер" оказывает услуги по ремонту бытовой техники, очевидно, что для ведения учета нам потребуется задать некоторую списочную информацию.
Для начала нам понадобится список сотрудников предприятия, которые будут оказывать услуги. Затем нам будет нужен список клиентов, с которыми работает наше ООО. После этого нам понадобится перечень услуг, которые может оказывать наше предприятие, и список материалов, которые могут быть израсходованы. Кроме этого нам потребуется список складов, на которых могут находиться материалы ООО "На все руки мастер".
Начнем с простых вещей – списка сотрудников и списка клиентов. Откроем в конфигураторе нашу учебную конфигурацию и создадим новый объект конфигурации Справочник.
Наша задача будет состоять в том, чтобы создать справочник, в котором будут храниться наименования наших клиентов.
После того, как вы нажмете "Добавить", система откроет окно редактирования объекта конфигурации.
Это средство, которое создано в помощь разработчику. Оно создано специально для сложных объектов конфигурации и позволяет путем выполнения последовательных действий быстро создавать такие объекты. Для того чтобы придерживаться правильной последовательности действий, в нижней части окна имеются кнопки "Далее" и "Назад". Кнопка "Далее" позволяет задавать свойства объекта в нужной последовательности (чтобы ничего не пропустить и не проскочить вперед, где потребуются данные, которые должны были быть введены ранее). Кнопка "Назад" позволяет вернуться на несколько шагов назад, если вы обнаружили, что ранее ввели не все или ошибочные данные. [33]
Узнай больше!
Про особенности использования окна редактирования объекта конфигурации и палитры свойств можно прочитать в главе "Окно редактирования объекта конфигурации и палитра свойств" на странице 544.
О правилах именования объектов конфигурации можно прочитать в главе "Стандарты именования переменных, процедур и объектов конфигурации" на странице 530.
Поэтому на синоним практически нет никаких ограничений, и его можно задавать в привычном для человека виде.
Зададим имя и синоним справочника
Все подряд свойства объекта конфигурации Справочник мы пока настраивать не будем, нас вполне удовлетворят те значения, которые система предлагает для них по умолчанию. Поэтому три раза нажмем "Далее" и окажемся на закладке "Данные".
Здесь для нас представляют интерес длина кода и длина наименования. Длина кода – важное свойство справочника. Как правило, код справочника используется для идентификации элементов справочника и содержит уникальные для каждого элемента справочника значения. Платформа может сама контролировать уникальность кодов и поддерживать автоматическую нумерацию элементов справочника.
Уникальность кодов платформа может отслеживать сама, поэтому от длины кода будет зависеть количество элементов, которые могут содержаться в справочнике. Длина кода 5 символов – это от 0 до 99999, то есть сто тысяч элементов. Для нашего небольшого OOO "На все руки мастер" этого вполне достаточно. [35]
Перейдем к длине наименования. 25 символов для нас явно мало, увеличим длину наименования до 50.
Согласимся с длиной кода и зададим длину наименования
Все остальные свойства объекта конфигурации Справочник мы оставим такими, как их предлагает система по умолчанию, и нажмем "Закрыть".
Согласно стандартам фирмы "1С", длина кода, если не определяется проектной логикой, должна быть фиксированной: 5 символов. Считается, что этого достаточно для любого справочника любой типовой конфигурации. При наличии префиксации длина кода увеличивается на допустимую длину префикса (на 3 символа).
Что касается длины наименования, то следует избегать завышенной длины, поскольку наименование, в большинстве случаев, является основным представлением, и не должно занимать слишком много места в диалоговых формах. [36]
Для большего порядка предлагается пользоваться вариантами: 25 символов для "небольших" справочников. 50 символов для тех справочников, которым 25 символов мало. 100 символов для тех справочников, которым 50 символов мало.
ответим "Да" и в следующем окне нажмем "Принять":
Перед нами откроется окно системы, в режиме 1С:Предприятие. Поскольку мы не создавали никаких интерфейсов пользователей, для просмотра результатов нашей работы следует воспользоваться меню, которое создает система по умолчанию. [37]
Выполним пункт меню ОперацииСправочники... и выберем справочник "Клиенты".
Система откроет одну из основных форм справочника – основную форму списка. [38]
Пока наш справочник "Клиенты" пуст, поэтому добавим в него несколько элементов (добавить новый элемент в справочник можно при помощи пункта меню Действия Добавить, соответствующей иконки или клавишей "Insert").
Добавим новые элементы в справочник при помощи меню или иконки
После добавления элементов, справочник будет выглядеть следующим образом.
Теперь мы можем перейти к созданию второго справочника, который будет использоваться в нашей конфигурации – справочника "Сотрудники". [39]
Создание справочника Номенклатура
Справочник "Номенклатура" будет содержать информацию об услугах, которые оказывает OOO "На все руки мастер", и о тех материалах, которые при этом могут быть использованы.
Этот справочник не будет сложным, единственная особенность, которой он будет обладать – это наличие иерархической структуры. Для того чтобы справочником было удобно пользоваться, мы сгруппируем услуги в одну группу, а материалы – в другую. Кроме этого, поскольку OOO "На все руки мастер" оказывает самые разные услуги, они также будут логически собраны в несколько групп. To же самое можно сказать и про материалы.
Наша задача будет состоять в создании иерархического справочника. Создадим новый объект конфигурации Справочник и назовем его "Номенклатура". Перейдем на закладку "Иерархия" и установим флаг "Иерархический справочник".
Сделаем справочник иерархическим...
На закладке "Данные" зададим длину наименования справочника равной 100 символам. [45]
Теперь запустим 1С:Предприятие в режиме отладки и заполним справочник "Номенклатура". В процессе заполнения справочника мы покажем, как создавать группы справочника и переносить элементы из одной группы в другую.
Создадим две группы в корне справочника: "Материалы" и "Услуги" (меню Действия
Новая группа):
В группе "Материалы" создадим пять элементов:
· | "Строчный трансформатор Samsung", |
· | "Строчный трансформатор GoldStar", |
· | "Транзистор Philips 2N2369", |
· | "Шланг резиновый", |
· | "Кабель электрический": |
В группе "Услуги" тоже создадим несколько элементов – услуги по ремонту телевизоров:
· | "Диагностика", |
· | "Ремонт отечественного телевизора", [46] |
· | "Ремонт импортного телевизора", и услуги по установке стиральных машин: |
· | "Подключение воды", |
· | "Подключение электричества": |
Теперь разнесем услуги по двум смысловым группам: услуги по ремонту телевизоров и услуги по установке стиральных машин. Для этого в группе "Услуги" создадим еще две группы: "Телевизоры" и "Стиральные машины":
[47]
Для того чтобы переместить услуги в соответствующие группы, в окне списка установим курсор на ту услугу, которую мы хотим переместить, и выполним команду Действия Переместить в группу. В открывшемся окне выберем новую группу:
Переместим услугу Диагностика в группу Телевизоры...
Аналогичным образом переместите в группу "Телевизоры" услуги "Ремонт отечественного телевизора" и "Ремонт импортного телевизора". Услуги "Подключение воды" и "Подключение электричества" переместите в группу "Стиральные машины".
Затем в группе материалы создайте две группы: "Радиодетали" и "Прочее". В группу "Прочее" поместите "Кабель электрический" и "Шланг резиновый". Остальные материалы переместите в группу "Радиодетали". [48]
Создание справочника Склады
В заключение мы создадим справочник "Склады", который будет содержать информацию о складах, используемых OOO "На все руки мастер". Этот справочник будет содержать один предопределенный элемент – склад "Основной", на который будут поступать все материалы.
Наша задача будет состоять в том, чтобы создать справочник, содержащий предопределенные элементы. Откроем конфигуратор и создадим новый объект конфигурации Справочник с именем "Склады". Перейдем на закладку "Прочее" и нажмем кнопку "Предопределенные". Система откроет список предопределенных элементов справочника. Сейчас он пуст, поэтому выполним команду Действия
Добавить и создадим предопределенный элемент с именем "Основной":
Обратите внимание на то, что помимо наименования мы задали еще и имя предопределенного элемента справочника. В дальнейшем, когда мы будем использовать средства встроенного языка, мы сможем обратиться к этому элементу справочника, используя имя, которое присвоили ему в конфигураторе. [49]
Запустим 1С:Предприятие в режиме отладки и откроем справочник "Склады". Добавим в справочник еще один склад, который назовем "Розничный":
Обратите внимание, что система отмечает различными пиктограммами простой и предопределенный элементы справочника. Несмотря на то, что можно изменить код или наименование у обоих элементов, пометка на удаление (или удаление) возможна только для простых элементов справочника. При попытке пометить на удаление предопределенный элемент, система выдаст предупреждение:
Таким образом, теперь мы можем обозначить две характерные особенности предопределенных элементов:
· | на предопределенные элементы могут опираться алгоритмы работы конфигурации (т.к. возможно обращение к ним из встроенного языка по имени), |
· | предопределенные элементы являются объектами базы данных, которые нельзя удалить в режиме 1С:Предприятия. |
Из этого видно, в чем заключается принципиальная, с точки зрения конфигурации, разница между обычными и предопределенными элементами справочника.
Обычные элементы "непостоянны" для конфигурации. В процессе работы пользователя они могут появиться, исчезнуть. Поэтому конфигурация хоть и может отличить их друг от друга, но [50] рассчитывать на них в выполнении каких либо алгоритмов она не может, в силу их "непостоянства".
Предопределенные элементы напротив, "постоянны". В процессе работы пользователя они находятся всегда на своих местах, и исчезнуть не могут. Поэтому с ними конфигурация может работать вполне уверенно и опираться на них, при отработке различных алгоритмов. По этой причине каждый из предопределенных элементов имеет уникальное имя для того, чтобы к ним можно было обратиться средствами встроенного языка.
На этом мы завершим подготовительную работу по созданию справочников и сделаем небольшое отступление, касательно тех вопросов, которые постоянно появляются у вас на экране при запуске и продолжении отладки. [51]
Создание справочника Сотрудники
Справочник "Сотрудники" будет устроен несколько сложнее, чем справочник "Клиенты". Дело в том, что в нем мы будем хранить не только фамилию, имя и отчество сотрудника, но и информацию о его прошлой трудовой деятельности. Эта информация однородна по своей структуре (организация, начало, окончание работы, занимаемая должность), но количество предыдущих мест работы у разных сотрудников может быть различным. Поэтому для хранения такой информации мы будем использовать табличную часть справочника.
Вернемся в конфигуратор и создадим новый объект конфигурации Справочник. Назовем его "Сотрудники".
Наша задача будет состоять в том, чтобы создать справочник, имеющий табличную часть.
На закладке "Данные" зададим длину наименования справочника равной 50 символам и добавим в справочник новую табличную часть с именем "ТрудоваяДеятельность":
Добавим в справочник "Сотрудники" новую табличную часть и зададим ее имя...
[40]
Создадим реквизиты табличной части "ТрудоваяДеятельность":
· | "Организация" – тип Строка, длина 100, |
· | "НачалоРаботы" – тип Дата, состав даты – "Дата", |
· | "ОкончаниеРаботы" – тип Дата состав даты – "Дата", |
· | "Должность" – тип Строка, длина 100: |
Создадим реквизиты табличной части справочника...
Для реквизитов "НачалоРаботы" и "ОкончаниеРаботы" мы выбрали состав даты – "Дата", поскольку в системе 1С:Предприятие 8.0 значения типа Дата содержат как дату, так и время. В данном случае время начала и окончания работы нам безразлично.
Узнай больше!
Согласно стандартам фирмы "1С" рекомендуется использовать следующие значения для реквизитов объектов конфигурации:
Числовой тип:
Реквизиты "флаг" – тип данных Булево.
Реквизиты "сумма" – длина 15, точность 2.
Реквизиты "количество" – длина 15, точность 3.
Реквизиты "коэффициент" – длина 10, точность 3. [41]
Реквизиты "курс" – длина 10, точность 4.
Реквизиты "процент" – длина 5, точность 2.
Строковый тип:
Допустимая длина должна быть в большинстве случаев переменной.
Неограниченная длина должна назначаться, если реквизит часто может быть не заполнен, или количество символов больше 100 (т. к. строки неограниченной длины хранятся порциями, а пустые строки совсем не занимают места).
Поэтому в справочнике "Сотрудники" мы выберем вариант редактирования справочника обоими способами – как в списке, так и в диалоге. Для этого перейдем на закладку "Формы" и установим соответствующий переключатель:
Зададим вариант редактирования справочника .
[42]
Создание справочника "Сотрудники" завершено – теперь можно запустить 1С:Предприятие в режиме отладки и заполнить справочник.
Выполните пункт меню Отладка Продолжить отладку, на вопрос системы:
ответьте "Да", на последующие вопросы ответьте так же, как и ранее.
В появившемся окне программы откройте справочник "Сотрудники" и убедитесь, что установлен режим редактирования справочника в диалоге (меню Действия Редактировать в диалоге или аналогичная иконка в командной панели).
Создайте сотрудников Гусакова Николая Дмитриевича, Делового Ивана Сергеевича и Симонова Валерия Михайловича, как показано на рисунках. Обратите внимание, что строки табличной части справочника можно сортировать по содержимому любой из колонок, или располагать в произвольном порядке, используя иконки командной панели:
[43]
Можно управлять порядком расположения строк табличной части...
Теперь мы можем приступить к созданию следующего справочника "Номенклатура". [44]
Типообразующие объекты
Прежде чем мы приступим к практическому созданию документов, необходимо сделать отступление о том, какие типы данных могут использоваться в системе 1С: Предприятие.
В предыдущей главе, когда мы создавали реквизиты справочников или табличных частей, мы всегда указывали тип значения, которое может принимать этот реквизит. Это были примитивные типы данных – Число, Строка, Дата и Булево. Примитивные типы данных изначально определены в системе и их набор ограничен.
Наряду с такими изначально определенными в любой конфигурации типами, могут существовать типы данных, определяемые только конкретной конфигурацией. Такие типы образуют сами объекты конфигурации в момент их создания в конфигураторе.
Например, после того, как мы создали объект конфигурации Справочник "Склады", сразу же появилось несколько новых типов данных, связанных с этим справочником. Среди них, например, СправочникСсылка.Склады. И если теперь мы укажем какому-либо реквизиту этот тип данных, то сможем хранить в нем ссылку на конкретный объект справочника "Склады".
Такие объекты конфигурации, которые могут образовывать новые типы данных, называются типообразующими.
Это небольшое отступление было необходимо потому, что уже при создании первого документа мы столкнемся с использованием типа данных, доступного благодаря объекту конфигурации Справочник "Склады". [66]
Зачем нужен регистр накопления?
Итак, мы с вами подошли к одному из главных моментов разработки любой конфигурации – созданию механизма учета накопления данных.
Казалось бы, что все необходимое мы с вами уже создали: у нас есть что расходовать и приходовать (справочники) и у нас есть чем расходовать и приходовать (документы). Осталось только построить несколько отчетов и автоматизация OOO "На все руки мастер" будет закончена.
Однако это не так.
Во-первых, путем анализа документов можно, конечно, получить требуемые нам выходные данные, но представьте, что завтра OOO "На все руки мастер" решит немного изменить свои бизнес-процессы и нам потребуется ввести в конфигурацию еще один документ (или несколько документов!).
Например, сейчас мы полагаем, что товары поступают в OOO и затем расходуются. Руководство захотело усилить материальный контроль и решило приходовать товары на основной склад организации и затем выдавать их материально ответственным лицам. В этом случае нам придется добавить в конфигурацию еще один документ, который будет фиксировать перемещение материалов между основным складом и материально ответственными лицами. И очевидно, нам придется переработать все отчеты, которые были нами созданы к этому моменту, с тем, чтобы они учитывали изменения, вносимые новым документом. А представьте, если в нашей конфигурации не два, а двадцать документов?!
Во-вторых, отчеты, анализирующие документы, будут работать довольно медленно, что будет вызывать раздражение пользователей и недовольство руководителей.
Поэтому в системе 1С:Предприятие есть несколько объектов конфигурации, которые позволяют создавать в базе данных структуры, предназначенные для накопления информации в удобном для последующего анализа виде. [83]
Использование таких "хранилищ" данных позволяет нам с одной стороны накапливать в них данные, поставляемые различными документами (или другими объектами базы данных), а с другой стороны легко создавать нужные нам отчеты или использовать эти данные в алгоритмах работы конфигурации.
В конфигурации существует несколько объектов, называемых регистрами, для описания подобных "хранилищ". Сейчас мы рассмотрим один из них. [84]