ru )
Научно-техническая библиотека электронных книг. Первоначально задуманная
как хранилище компьютерной литературы, в настоящий момент библиотека
содержит книжные издания по различным областям знания (медицинские науки,
техника, гуманитарные науки, домашнее хозяйство, учебная литература и т.д.).
Серьезность научно-технических e-book'ов разбавляет раздел развлекательной
литературы (эротика, комиксы, задачи и головоломки).
ВНИМАНИЕ!
Данный файл представлен исключительно в ознакомительных целях!
После ознакомления с данной книгой Вы обязаны удалить ее с Вашего компьютера.
В случае несоблюдения данного обязательства, Вы нарушите закон "Об авторском праве
и смежных правах".
Все авторские права сохраняются за правообладателем. По его требованию доступ к
данному электронному документу будет перекрыт. Однако, таким образом, тысячи
потенциальных покупателей так и не узнают о, возможно, нужной и полезной книге.
Авторам и издательствам
Если Вы заинтересованы в рекламе и продвижении Ваших книг на бескрайних
сетевых просторах мы с удовольствием включим их в наш каталог.
М.Г. Радченко
1С:Предприятие 8.0
Практическое пособие
разработчика
Примеры и типовые приемы
Москва
OOO «1С-Паблишинг»
2004
012.011.56:004.42
9 P15
ОГЛАВЛЕНИЕ
о Максим Григорьевич
Предприятие 8.0. Практическое пособие разработчика.
Введение .............................................................
меры и типовые приемы, M.:, OOO «1С-Паблишинг», 2004. -
с: ил. ISBN 5-9521-0091-0 Как читать книгу ...................................................
Книга представляет собой пособие, позволяющее быстро освоить приемы
аботки и модификации прикладных решений на платформе Часть I. Быстрая разработка прикладных решен
редприятия 8.0.
На примере создания реального прикладного решения показана структура Глава 1. Первое знакомство................................................................
ичных объектов системы, их назначение и методика использования. Что я делаю? ...................................................................................
еденные процедуры на встроенном языке, в том числе с применением языка
Система 1С:Предприятие................................................................
Первое знакомство ..........................................................................
осов, снабжены подробными комментариями. Дерево конфигурации......................................................................
Материал рассчитан как на начинающих разработчиков, не знакомых с Объекты конфигурации...................................................................
емой 1С:Предприятие, так и на тех, кто уже создает или сопровождает Как работать с деревом конфигурации и как создать объект........
ожения на этой платформе. Чтонового мыузнали ......................................................................
Книга может быть использована и как практическое руководство, и как Глава2. Справочник ............................................................................
авочное пособие. Заключительные главы содержат указатель приемов Объектконфигурации Справочник.................................................
аботки, упомянутых в книге, со ссылками на соответствующие разделы. Создание справочникаКлиенты......................................................
ме этого, книга содержит перечень вопросов, которые возникают при Создание справочникаСотрудники ................................................
ении системы 1С:Предприятие 8.0 у разработчиков, имеющих опыт работы с Создание справочникаНоменклатура .............................................
ией 7.7, и ответы на них, ссылающиеся на материал книги. Создание справочника Склады ........................................................
Основная конфигурация и конфигурация базы данных .................
Рассматриваемое в книге прикладное решение учитывает накопленный опыт
Палитра свойств ................................................................................
работки в системе 1С:Предприятие 8.0 и демонстрирует многие новые
можности и механизмы, предоставляемые версией 8.0.7.
Что нового мы узнали .......................................................................
ГлаваЗ. Документ .................................................................................
ОбъектконфигурацииДокумент ......................................................
Оперативное и неоперативное проведение......................................
Право тиражирования и Типообразующиеобъекты ................................................................
распространения книги принадлежит СозданиедокументаПриходнаяНакладная......................................
фирме "1С-Паблишинг". Создание документа ОказаниеУслуги..............................................
Что нового мыузнали ........................................................................
Полное или частичное копирование Глава 4. Регистр накопления .................................................................
материалов книги без письменного Зачем нужен регистр накопления? ....................................................
разрешения фирмы "1С-Паблишинг" Объект конфигурации Регистр накопления......................................
Создание регистра накопления ОстаткиМатериалов .......................
запрещается. Создание движенийдокумента ПриходнаяНакладная.....................
%01546"021298
Создание движений документа ОказаниеУслуги .............................
Что нового мы узнали.........................................................................
© OOO " 1С-Паблишинг", 2004 Глава5. Отчет .........................................................................................
21-0091-0
Объект конфигурации Отчет .............................................................
Создание отчета Материалы ..............................................................
Что нового мы узнали .........................................................................
Главаб. Макет .................................................................................................. 103 Отчет Универсальный2 ........................
Объект конфигурации Макет ...................................................................... 104 216
Использование построителя отчета в конструкторе выходной
Создание макета документа ОказаниеУслуги ............................................ 105
Что нового мы узнали...................................................................................109 формы ...................................................................................................... 225
Глава7. Редактирование макетов и форм .......................................................110 Что нового мы узнали ................................................................................... 230
Редактирование макетадокументаОказаниеУслуги.................................. 110 Глава 6. Оптимизация процедуры проведения документа
Редактирование формы документа ОказаниеУслуги ................................. 114 ОказаниеУслуги ..........................................................................................232
Что нового мы узнали .................................................................................. 116 Особенности использования ссылочных данных ........................................233
Оптимизация документа ОказаниеУслуги...................................................238
Что нового мы узнали....................................................................................251
Часть II. Использование основных объектов Глава 7. План видов характеристик................................................................. 252
конфигурации .......................................................... 117 Постановказадачи ........................................................................................ 253
Глава 1. Периодический регистр сведений..................................................... 118 Объект конфигурац,ии План UIви
_________ дов^upanlb^nL;inK
^UU характеристик....................................................
..................................... ,....... 254
254
Зачем нужен периодический регистр сведений?........................................ 119 Логическая связь объектов ........................................................................... 257
TX^T~VHJt*f*Vnn r>nrr
12 13
трая разработка прикладных решений
Первое знакомство
А
что же я делаю?! Такой вопрос периодически возникает у
С
всех, кто сталкивался или просто интересовался истема 1С:Предприятие является универсальной системой
разработками на Ю.Предприятии. автоматизации экономической и организационной
«Пишу программу», - вот наиболее частый ответ. «На чем?» - «на деятельности предприятия. Поскольку такая деятельность
может быть довольно разнообразной, система
1С». «На чем вы работаете?» - «на 1С». «На чем это написано?» - «на
1С:Предприятие имеет возможность «приспосабливаться» к
1С». «Требуется бухгалтер со знанием 1С», «требуется программист
особенностям конкретной области деятельности, в которой она
1С на неполный рабочий день...» и т.д.
используется. Для обозначения такой способности используется
Такие фразы можно встретить постоянно, и вам они наверняка термин конфигурируемость, то есть возможность настройки системы
хорошо знакомы. Для человека непосвященного в них нет ничего на особенности конкретного предприятия и класса решаемых задач.
особенного, однако тех, кто имеет представление о разработке на Это достигается тем, что 1С:Предприятие - это не просто
Ю.Предприятии, такие вопросы зачастую могут поставить в тупик, программа, существующая в виде набора неизменяемых файлов, а
потому что в этих фразах термином «1С» обозначаются совершенно совокупность различных программных инструментов, с которыми
разные предметы, а термин «программа» и вовсе сбивает с толку... работают разработчики и пользователи. Логически всю систему можно
Для успешного освоения этой книги важно понимать основы разделить на две большие части, которые тесно взаимодействуют друг
построения системы 1С:Предприятие, и тогда на вопрос: «а чем вы с другом: конфигурацию и платформу, которая управляет работой
занимаетесь?», вы уже не ответите уныло: «учусь писать программы конфигурации.
на 1С», а с легким чувством превосходства сможете произнести: «я Для того чтобы легче понять взаимодействие этих частей системы,
изучаю методы разработки прикладных решений на основе платформы сравним ее с проигрывателем компакт-дисков. Как вы хорошо знаете,
1С:Предприятия 8.0»! проигрыватель служит для того чтобы слушать музыку. «На вкус и
Чтобы было понятно, что именно мы будем создавать с вами на цвет товарищей нет», поэтому существует множество разнообразных
протяжении этой книги, объясним сначала, что представляет собой компакт-дисков, на которых записаны музыкальные произведения на
система 1С:Предприятие вообще. любой вкус. И для того, чтобы прослушать какую либо композицию,
нужно вставить компакт-диск в проигрыватель, и проигрыватель
воспроизведет записанное на нем музыкальное произведение. Более
того, современный проигрыватель компакт-дисков даже позволит вам
записать собственную подборку музыкальных произведений, т.е.
создать новый компакт-диск.
Сам по себе проигрыватель совершенно бесполезен без компакт-
диска, точно так же, как компакт-диск не может сам по себе принести
нам никакой пользы (кроме как стать подставкой под чашку кофе ©),
если у нас нет проигрывателя.
Возвращаясь к системе 1С:Предприятие, можно сказать, что
платформа является своеобразным «проигрывателем», а конфигурация
- «компакт-диском». Платформа обеспечивает работу конфигурации и
позволяет вносить в нее изменения или создавать собственную
конфигурацию.
15
трая разработка прикладных решений Первое знакомство
Существует одна платформа (1С:Предприятие 8.0) и множество Здесь следует сказать о небольшой двойственности терминологии,
конфигураций. Для функционирования какого-либо прикладного которая будет использоваться в дальнейшем. Двойственность
решения всегда необходима платформа и какая-либо (одна) заключается в употреблении разных терминов для обозначения одного
конфигурация. и того же предмета: «конфигурация» и «прикладное решение». Оба эти
термина обозначают ту часть системы 1С:Предприятие, которая
работает под управлением платформы и которую «видят» все
пользователи (бывает, конечно, что пользователи работают и с
инструментальными средствами платформы, но это «продвинутые»
пользователи ©). Употребление одного или другого термина зависит
от контекста, в котором ведется изложение.
Если речь идет о действиях разработчика, то употребляется термин
конфигурация, поскольку это точный термин 1С:Предприятия.
Термин прикладное решение является более общепринятым и
понятным для пользователя системы 1С:Предприятие.
Итак, поскольку задачи автоматизации, как было упомянуто выше,
могут быть самыми разными, фирма «1С» и ее партнеры выпускают
прикладные решения, каждое из которых предназначено для
автоматизации одной определенной области человеческой
деятельности.
В качестве примеров существующих прикладных решений можно
привести решение «Управление торговлей», предназначенное для
Сама по себе платформа не может выполнить никаких задач автоматизации задач оперативного и управленческого учета,
автоматизации, так как она создана для обеспечения работы какой- «Управление персоналом», предназначенное для реализации кадровой
политики компании или «Управление производственным
либо конфигурации. Сама по себе конфигурация так же бесполезна,
предприятием», охватывающее основные контуры учета и управления
поскольку, чтобы она могла выполнить те задачи, для которых она на производственном предприятии.
создана, необходимо наличие платформы, которая и управляет ее
работой. Прикладное решение является, по возможности, универсальным,
чтобы удовлетворить потребности самых разных предприятий,
работающих в одной области деятельности. И это хорошо. С другой
Для тех, кто работал с версией 7.7 стороны, такая универсальность неизбежно приведет к тому, что на
Платформа теперь не делится на базовые объекты и конкретном предприятии будут использоваться далеко не все
компоненты, поставляемые отдельно (бухгалтерия, оперативный возможности прикладного решения, а каких-то возможностей в нем
учет, расчет). Все объекты конфигурации включены в стандартную будет не доставать (нельзя угодить всем :).
поставку Вот тут и выходит на передний план конфигурируемость системы,
поскольку платформа, помимо управления работы конфигурацией,
Наконец-то мы можем ответить на тот вопрос, который был задан в содержит средства, позволяющие вносить изменения в используемую
предыдущем разделе: в процессе чтения этой книги и выполнения конфигурацию. Более того, платформа позволяет создать свою
демонстрационного примера мы создадим конфигурацию. собственную конфигурацию «с нуля», если по каким-либо причинам
17
ютрая разработка прикладных решений Первое знакомство
19
18
лстрая разработка прикладных решений Первое знакомство
м
Первое знакомство Дерево конфигурации
20 21
гетрая разработка прикладных решений
Первое знакомство
К
объекты определенных видов. Но каждого вида объектов мы можем
онфигурация представляет собой описание. Она описывает создать столько, сколько нам нужно. Объекты одного вида отличаются
структуру данных, которые пользователь будет использовать в от объектов другого вида тем, что имеют разные свойства (точнее
режиме 1С:Предприятие. Кроме этого конфигурация говоря разный набор свойств). Объекты могут взаимодействовать друг
описывает всевозможные алгоритмы обработки этих данных, с другом, и мы можем описать такое взаимодействие.
конфигурация содержит информацию о том, как эти данные должны
будут выглядеть на экране и на принтере, и т.д. В чем еще сходство объектов конфигурации с деталями
конструктора? В конструкторе обычно есть блоки, которые можно
В дальнейшем платформа 1С:Предприятия, на основании этого
скрепить между собой, и есть другие детали, например колеса,
описания, создаст базу данных, которая будет иметь необходимую которые скрепить между собой нельзя, зато их можно соединить с
структуру, и предоставит пользователю возможность работать с этой осью и тогда колеса будут вращаться. Т.е. разные детали конструктора
базой данных. по-разному ведут себя.
Для того чтобы систему 1С:Предприятие можно было быстро и
Объекты конфигурации также обладают различным поведением, и
легко настраивать на нужные прикладные задачи, все описание,
это поведение зависит от вида объекта. Одни объекты могут
которое содержит конфигурация, состоит из неких логических единиц, выполнять какие-то действия, другие этих действий выполнять не
называемых объектами конфигурации. могут, зато у них есть свой собственный набор действий.
Возможно, вы уже успели заглянуть в книгу «Конфигурирование и Следующую особенность объектов конфигурации можно
администрирование 1С:Предприятия 8.0», в которой дается краткое продемонстрировать на примере автомобиля. Автомобиль состоит из
описание объекта конфигурации. большого количества деталей. Одна из деталей автомобиля это
Мы не будем дублировать это определение в настоящей книге, двигатель. Но двигатель, в свою очередь, тоже состоит из набора
поскольку наша задача заключается не в том, чтобы изложить деталей, причем в разных двигателях могут использоваться одни и те
концепцию построения системы 1С:Предприятие как структуры же детали.
метаданных, описанной в терминах классов проблемно-
Так же «сложные» объекты конфигурации состоят из более
ориентированных бизнес-сущностей, а в том чтобы научить вас «простых» объектов и одни и те же «простые» объекты могут входить
методически правильно и грамотно использовать возможности в состав сложных объектов. Такая структура позволяет упростить
1С:Предприятия. работу с объектами конфигурации, поскольку если мы знаем, как
Поэтому, что представляют собой объекты конфигурации, мы работать с каким-либо «простым» объектом, то в любом «сложном»
объясним на «бытовом» уровне, который, однако, даст вам объекте, в состав которого он входит, мы будем работать с ним все тем
возможность правильно понимать назначение объектов же образом.
применительно к тем задачам, которые мы будем решать.
И, наконец, самое важное качество объектов конфигурации - это их
С одной стороны, объекты конфигурации представляют собой прикладная направленность. Объекты конфигурации не просто некие
детали конструктора, из которого собирается конфигурация. Обычно в абстрактные конструкции, при помощи которых разработчик пытается
конструкторе существует некоторый набор деталей. Детали могут описать поставленную перед ним задачу - они представляют собой
быть разного вида: длинные, короткие, квадратные, прямоугольные и аналоги реальных объектов, которыми оперирует предприятие в ходе
т.д. Теперь представьте, что деталей каждого вида мы можем создавать своей работы.
столько, сколько нам нужно (скажем 5 длинных и 3 коротких). Мы
можем соединять детали между собой различными способами. Например, на каждом предприятии существуют различные
документы, с помощью которых оно фиксирует факты совершения
12
острая разработка прикладных решений Первое знакомство
хозяйственных операций. Точно так же в конфигурации существуют Как работать с деревом конфигурации и как
объекты вида «Документ».
Кроме этого, на каждом предприятии обязательно ведется список создать объект
П
сотрудников, справочник номенклатуры или товаров. В конфигурации режде чем мы приступим к созданию первых объектов
тоже есть специальные объекты вида «Справочник», которые конфигурации, следует объяснить некоторые приемы работы с
позволяют разработчику создавать компьютерные аналоги таких конфигуратором.
списков. Для того чтобы открыть и закрыть конфигурацию следует
использовать пункты меню:
тех, кто работал с версией 7.7 Конфигурация | Открыть конфигурацию, и
В версии 8.0 объектная модель платформы былаунифщирована и Конфигурация | Закрыть конфигурацию.
расширена. Теперь, например, элемент справочника может иметь
табличную часть. Поскольку объекты унифицированы, табличная После того, как конфигурация открыта, ее состав появляется в окне
часть справочника и табличная часть документа описывается дерева конфигурации. Это окно вы можете закрыть, как любое другое
аналогичными объектами конфигурации. Соответственно работа с окно Windows, при этом конфигурация останется открытой (т.е.
табличной частью документа аналогична работе с табличной доступной для редактирования). Чтобы снова отобразить на экране
частью справочника. окно дерева конфигурации следует воспользоваться командой меню
Конфигурация | Окно конфигурации.
Как мы уже говорили, на основе объектов конфигурации Создать новый объект конфигурации можно несколькими
платформа создает в базе данных информационные структуры, в способами, и вы всегда можете использовать тот способ, который вам
которых будут храниться данные. В литературе, как правило, объект понятнее и удобнее.
конфигурации и соответствующую ему информационную структуру Первый способ. Необходимо установить курсор на тот вид объектов
принято называть одинаково. Например, если в конфигурации конфигурации, который вас интересует, и в командной панели окна
существует объект справочник «Сотрудники», то информационную конфигурации нажать кнопку Действия | Добавить.
структуру, созданную платформой на основе этого объекта
конфигурации, также называют справочником «Сотрудники».
Мы отойдем от такого «размытого» стиля изложения и в тех
местах, где речь будет идти о конфигурации, мы будем использовать
явное уточнение - объект конфигурации Справочник «Сотрудники».
Там же, где речь пойдет о базе данных, мы будем говорить просто:
справочник «Сотрудники».
25
страя разработка прикладных решений
Первое знакомство
27
Справочник
О
бъект конфигурации Справочник является прикладным
В этой главе мы познакомимся с объектом конфигурации
объектом и предназначен для описания списков данных.
Справочник. Вы узнаете, для чего используется этот объект, какова его
Объект конфигурации Справочник используется для того,
структура и какими основными свойствами он обладает. На
чтобы на его основе платформа создала в базе данных
практических примерах вы научитесь создавать справочники, информационную структуру, в которой будет храниться, например,
описывать наиболее важные элементы их структуры и заполнять их список сотрудников, перечень товаров, список клиентов или
данными. поставщиков.
Кроме этого вы узнаете еще об одном объекте конфигурации - Характерной особенностью объекта конфигурации Справочник
Форма. является то, что пользователь в процессе работы может
В заключение, в конце главы, будет сделано небольшое самостоятельно добавлять новые элементы в справочник. Например,
отступление, касающееся механизма внесения изменений в пользователь может добавить в справочник новых сотрудников,
конфигурацию и использования одного из инструментов разработчика создать новый товар или внести нового клиента.
- палитры свойств.
Для тех,ктоработал с версией 7.7
Элементы справочника могут иметь теперь несколько табличных
частей и несколько форм (форма элемента, списка, выбора и т.д.).
Глубина иерархии справочников может быть произвольной.
Иерархия может строиться не только no принципу иерархии групп,
но и no принципу иерархии элементов (когда элемент справочника
подчинен непосредственно другому элементу).
Теперь нет понятия периодических реквизитов справочников. Для
хранения каких-либо данных (в том числе значений реквизитов
справочников),развернутых во времени, теперь следует использовать
новые объекты конфигурации - регистры сведений, поддерживающие
периодическое сохранение значений своих ресурсов.
В конфигураторе можно задать набор предопределенных
элементов справочника.
29
Справочник
рая разработка прикладных решений
31
рая разработка прикладных решений
Справочник
Т
программный объект Форма, с которым и будет работать еперь, когда мы немного познакомились с возможностями
пользователь. объекта конфигурации Справочник, создадим несколько таких
объектов, чтобы описать справочники, которые будут
использоваться в нашей базе данных.
Узнай больше!
О структуре объектов встроенного языка, предназначенных для Так как наше OOO «На все руки мастер» оказывает услуги по
ремонту бытовой техники, очевидно, что для ведения учета нам
работы со справочниками можно прочитать в главе «Справочники»
потребуется задать некоторую списочную информацию.
на странице 570.
Для начала нам понадобится список сотрудников предприятия,
которые будут оказывать услуги. Затем нам будет нужен список
клиентов, с которыми работает наше 000. После этого нам
понадобится перечень услуг, которые может оказывать наше
предприятие, и список материалов, которые могут быть
израсходованы. Кроме этого нам потребуется список складов, на
которых могут находиться материалы 000 «На все руки мастер».
Начнем с простых вещей - списка сотрудников и списка клиентов.
Откроем в конфигураторе нашу учебную конфигурацию и создадим
новый объект конфигурации Справочник.
Наша задача будет состоять в том, чтобы создать справочник, в
котором будут храниться наименования наших клиентов.
После того, как вы нажмете «Добавить», система откроет окно
редактирования объекта конфигурации.
Это средство, которое создано в помощь разработчику. Оно
создано специально для сложных объектов конфигурации и позволяет
путем выполнения последовательных действий быстро создавать такие
объекты. Для того чтобы придерживаться правильной
последовательности действий, в нижней части окна имеются кнопки
«Далее» и «Назад». Кнопка «Далее» позволяет задавать свойства
объекта в нужной последовательности (чтобы ничего не пропустить и
не проскочить вперед, где потребуются данные, которые должны были
быть введены ранее). Кнопка «Назад» позволяет вернуться на
несколько шагов назад, если вы обнаружили, что ранее ввели не все
или ошибочные данные.
33
трая разработка прикладных решений
Справочник
35
трая разработка прикладных решений Справочник
Перейдем к длине наименования. 25 символов для нас явно мало, Для большего порядка предлагается пользоваться вариантами: 25
увеличим длину наименования до 50. символов для «небольших» справочников. 50 символов для тех
справочников, которым 25 символов мало. 100 символов для тех
справочников, которым 50 символовмало.
Согласимся с длиной кода и зададим
длину наименования
Теперь давайте посмотрим, что создаст система на основе того
объекта конфигурации Справочник, который мы добавили. Выполним
пункт меню Отладка | Начать отладку. На появившийся вопрос:
Узнай больше!
Согласно стандартам фирмы «1С», длина кода, если не
определяется проектной логикой, должна быть фиксированной: 5
символов. Считается, что этого достаточно для любого справочника
любой типовой конфигурации. При наличии префиксации длина кода
увеличивается на допустимую длину префикса (на 3 символа).
Что касается длины наименования, то следует избегать Перед нами откроется окно системы, в режиме 1С:Предприятие.
завышенной длины, поскольку наименование, в большинстве случаев, Поскольку мы не создавали никаких интерфейсов пользователей, для
является основным представлением, и не должно занимать слишком просмотра результатов нашей работы следует воспользоваться меню,
много места в диалоговых формах. которое создает система по умолчанию.
37
фая разработка прикладных решений Справочник
Выполним пункт меню Операции | Справочники... и выберем Пока наш справочник «Клиенты» пуст, поэтому добавим в него
справочник «Клиенты». несколько элементов (добавить новый элемент в справочник можно
при помощи пункта меню Действия I Добавить, соответствующей
иконки или клавишей «Insert»).
Выполним Операции I Справочники... и
выберем справочник «Клиенты»
Добавим новые элементы в справочник
при помощи меню или иконки
Система откроет одну из основных форм справочника - основную Теперь мы можем перейти к созданию второго справочника,
форму списка. который будет использоваться в нашей конфигурации - справочника
«Сотрудники».
39
грая разработка прикладных решений Справочник
С
правочник «Сотрудники» будет устроен несколько сложнее, чем • «Организация» - тип Строка, длина 100,
справочник «Клиенты». Дело в том, что в нем мы будем хранить • «НачалоРаботы» - тип Дата, состав даты - «Дата»,
не только фамилию, имя и отчество сотрудника, но и • «ОкончаниеРаботы» - тип Дата состав даты - «Дата»,
информацию о его прошлой трудовой деятельности. Эта • «Должность» - тип Строка, длина 100:
информация однородна по своей структуре (организация, начало,
окончание работы, занимаемая должность), но количество
предыдущих мест работы у разных сотрудников может быть Создадим реквизиты табличной части справочника...
различным. Поэтому для хранения такой информации мы будем
использовать табличную часть справочника.
Вернемся в конфигуратор и создадим новый объект конфигурации
Справочник. Назовем его «Сотрудники».
Наша задача будет состоять в том, чтобы создать справочник,
имеющий табличную часть.
На закладке «Данные» зададим длину наименования справочника
равной 50 символам и добавим в справочник новую табличную часть с
именем «ТрудоваяДеятельность»:
Добавим в справочник «Сотрудники» новую табличную часть и зададим ее имя...
41
трая разработка прикладных решений Справочник
Реквизиты «курс» - длина 10, точность 4. Создание справочника «Сотрудники» завершено - теперь можно
Реквизиты «процент» -длина 5, точность 2. запустить 1С:Предприятие в режиме отладки и заполнить справочник.
Выполните пункт меню Отладка | Продолжить отладку, на
Строковый тип: вопрос системы:
Допустимая длина должна быть в большинстве случаев
переменной.
Неограниченная длина должна назначаться, если реквизит часто
может быть не заполнен, или количество символов больше 100 (т. к.
строки неограниченной длины хранятся порциями, а пустые строки
совсем не занимают места).
43
фая разработка прикладных решений Справочник
С
правочник «Номенклатура» будет содержать информацию об
Можно управлять порядком расположения строк услугах, которые оказывает OOO «На все руки мастер», и о тех
табличной части... материалах, которые при этом могут быть использованы.
Этот справочник не будет сложным, единственная
особенность, которой он будет обладать - это наличие иерархической
структуры. Для того чтобы справочником было удобно пользоваться,
мы сгруппируем услуги в одну группу, а материалы - в другую.
Кроме этого, поскольку OOO «На все руки мастер» оказывает самые
разные услуги, они также будут логически собраны в несколько групп.
To же самое можно сказать и про материалы.
Наша задача будет состоять в создании иерархического
справочника. Создадим новый объект конфигурации Справочник и
назовем его «Номенклатура». Перейдем на закладку «Иерархия» и
установим флаг «Иерархический справочник».
45
:трая разработка прикладных решений Справочник
• «Строчный трансформатор Samsung», Теперь разнесем услуги по двум смысловым группам: услуги по
• «Строчный трансформатор GoldStar», ремонту телевизоров и услуги по установке стиральных машин. Для
• «Транзистор Philips 2N2369», этого в группе «Услуги» создадим еще две группы: «Телевизоры» и
• «Шланг резиновый», «Стиральные машины»:
• «Кабель электрический»:
• «Диагностика»,
• «Ремонт отечественного телевизора»,
47
:трая разработка прикладных решений
Справочник
В
переместить, и выполним команду
Действия | Переместить в группу. В открывшемся окне выберем заключение мы создадим справочник «Склады», который
новую группу: будет содержать информацию о складах, используемых OOO
«На все руки мастер». Этот справочник будет содержать один
предопределенный элемент - склад «Основной», на который будут
Переместим услугу Диагностика в группу Телевизоры... поступать все материалы.
Наша задача будет состоять в том, чтобы создать справочник,
содержащий предопределенные элементы. Откроем конфигуратор и
создадим новый объект конфигурации Справочник с именем
«Склады». Перейдем на закладку «Прочее» и нажмем кнопку
«Предопределенные». Система откроет список предопределенных
элементов справочника. Сейчас он пуст, поэтому выполним команду
Действия | Добавить и создадим предопределенный элемент с
именем «Основной»:
49
трая разработка прикладных решений Справочник
Запустим 1С:Предприятие в режиме отладки и откроем справочник рассчитывать на них в выполнении каких либо алгоритмов она не
«Склады». Добавим в справочник еще один склад, который назовем может, в силу их «непостоянства».
«Розничный»: Предопределенные элементы напротив, «постоянны». В процессе
работы пользователя они находятся всегда на своих местах, и
исчезнуть не могут. Поэтому с ними конфигурация может работать
вполне уверенно и опираться на них, при отработке различных
алгоритмов. По этой причине каждый из предопределенных элементов
имеет уникальное имя для того, чтобы к ним можно было обратиться
средствами встроенного языка.
На этом мы завершим подготовительную работу по созданию
справочников и сделаем небольшое отступление, касательно тех
Обратите внимание, что система отмечает различными вопросов, которые постоянно появляются у вас на экране при запуске
пиктограммами простой и предопределенный элементы справочника. и продолжении отладки.
Несмотря на то, что можно изменить код или наименование у обоих
элементов, пометка на удаление (или удаление) возможна только для
простых элементов справочника. При попытке пометить на удаление
предопределенный элемент, система выдаст предупреждение:
51
:трая разработка прикладных решений Справочник
Д
конфигурацию базы данных, может вернуться к исходному состоянию
о сих пор мы не углублялись в структуру системы
основной конфигурации, используя конфигурацию базы данных (если,
1С:Предприятие 8.0, но теперь пришло время сказать об этом например, совсем запутался в своих изменениях ©).
несколько слов.
Таким образом, взаимодействие двух конфигураций можно
Вспомните, с точки зрения пользователя, программа 1С представить следующим образом:
состоит из платформы и конфигурации. Мы говорили, что в каждом
конкретном случае используется одна из множества возможных
конфигураций. Настало время сказать, что это не совсем так. Сравнение, объединение
Почему не так? Потому что в каждой информационной базе
существуют, как минимум, две конфигурации.
Почему не совсем так? Потому что пользователь действительно
работает всегда только с одной конфигурацией. Вторая конфигурация
предназначена для разработчика или человека, который должен
вносить изменения в конфигурацию (например, администратора базы
данных). Для пользователя она «не видна».
Конфигурация, предназначенная для разработчика, называется
Основная конфигурация (или просто Конфигурация - та, которую мы
редактировали в Конфигураторе). Конфигурация, с которой работают
пользователи, называется Конфигурация базы данных.
53
[страя разработка прикладных решений
Справочник
Если сохраненный вариант основной конфигурации отличается от Отсюда следует немаловажный факт (о котором говорилось в
конфигурации базы данных, в заголовке окна дерева конфигурации предыдущем разделе), что если простые элементы справочника
появляется знак отличия конфигураций (<!>): «безразличны» для конфигурации, то предопределенные элементы
важны для нее, поскольку на них могут быть «завязаны» алгоритмы
работы конфигурации.
55
[страя разработка прикладных решений Справочник
Е ще один инструмент разработчика, который мы использовали по с правой (по умолчанию) стороны экрана:
ходу изложения, но на описании которого не заостряли
внимание, - это палитра свойств.
Если помните, мы использовали палитру свойств, когда
создавали табличную часть и реквизиты табличной части объекта
конфигурации Справочник «Номенклатура».
Палитра свойств это специальное служебное окно, которое
позволяет редактировать все существующие свойства объекта
конфигурации. Поскольку разные объекты конфигурации имеют А при наведении курсора мыши на символ свернутой палитры
самые разные свойства, содержимое этого окна будет меняться в свойств, она будет открываться.
зависимости от того, какой объект является текущим (на каком
Подобным поведением (возможностью быть прикрепленным,
объекте конфигурации установлен курсор).
прячущимся и т.д.) обладает не только окно палитры свойств, но и
При некоторых действиях разработчика (например, создание другие окна конфигуратора (например, окно дерева конфигурации).
табличной части), палитра свойств открывается автоматически. Но
разработчик всегда может открыть палитру свойств объекта
конфигурации самостоятельно, воспользовавшись пунктом
«Свойства» контекстного меню правой кнопки мыши.
В этом случае палитра свойств откроется и будет закреплена на
рабочей области конфигуратора. Однако есть удобная возможность
«открепить» палитру свойств (используя символ кнопки в заголовке
окна палитры свойств):
О
бъект конфигурации Документ является прикладным
В этой главе мы познакомимся с объектом конфигурации объектом и предназначен для описания информации о
Документ. Вы узнаете, для чего используется этот объект, какова его совершенных хозяйственных операциях или о событиях,
структура и какие основными свойствами обладает документ. Затем произошедших в жизни организации вообще. На основе объекта
мы создадим несколько документов и покажем, каким образом конфигурации Документ платформа создает в базе данных
разработчик может задавать собственные алгоритмы выполнения тех информационную структуру, в которой будут храниться, например,
или иных действий, связанных с работой документа. такие документы как приходные накладные, или приказы о приеме на
Кроме этого, вы узнаете, как создать форму объекта базы работу, или платежные поручения, или счета и т.д.
конфигурации, познакомитесь с некоторыми конструкциями Характерной особенностью объекта конфигурации Документ
встроенного языка и узнаете, что такое типообразующие объекты является то, что в процессе работы пользователь может
конфигурации. самостоятельно создавать новые объекты этой структуры - новые
документы.
Поведение документа отличается от поведения всех остальных
объектов базы данных. Документ обладает способностью проведения.
Факт проведения документа означает, что событие, которое он
отражает, повлияло на состояние учета. До тех пор, пока документ не
проведен, состояние учета неизменно и документ - не более чем
черновик, заготовка. Как только документ будет проведен -
изменения, вносимые документом в учет, могут вступить в силу и
состояние учета может быть изменено.
Поскольку документ вносит изменения в состояние учета, он всегда
«привязан» к конкретному моменту времени. Это позволяет отражать
в базе данных фактическую последовательность событий.
Следующим важным фактом, вытекающим из двух предыдущих,
является то, что система 1С:Предприятие имеет механизмы,
позволяющие отслеживать правильность состояния учета.
Предположим, что мы изменили один из проведенных ранее
документов и снова провели его «задним числом». В этом случае
система 1С:Предприятие способна отследить, повлияют ли внесенные
нами изменения на последующие проведенные документы, и если это
так, система способна перепровести необходимые документы.
61
60
Быстрая разработка прикладных решений Документ
У последовательностей могут быть измерения, за счет чего при Для «визуализации>: документа существует несколько основных
восстановлении последовательностей будут перепроводиться только форм:
me документы, которые изменили состояние регистров no данному
значению измерения. Конфигуратор База данных
Объект конфигурации Документ Документ
Основная форма Форма документа
Основная форма списка Форма списка документов одного вида
Основная форма для выбора Форма для выбора из списка документов одного
Узнай больше! вида
0 том, какая существует разница в названии справочников и
документов можно прочитать в главе «Справочники и документы»
на странице 539. Узнай больше!
О структуре объектов встроенного языка, предназначенных для
Каждый документ, как правило, содержит информацию, которая работы с документами можно прочитать в главе «Документы» на
более подробно описывает этот документ. Например, каждый странице 577.
документ «ПриходнаяНакладная» может содержать информацию о
поставщике товаров, складе, на который приходуется товар и т.д.
Набор такой информации является одинаковым для всех документов
одного, вида и для описания такого набора используются реквизиты
объекта конфигурации Документ, являющиеся подчиненными
объектами конфигурации. Большинство реквизитов объекта
конфигурации Документ разработчик создает самостоятельно, однако
у каждого объекта конфигурации Документ существуют два поля «по
умолчанию»: дата и номер документа. Поскольку тип данных дата
содержит дату и время с точностью до секунды, то этот реквизит и
определяет, в основном, положение документа на оси времени.
Узнай больше!
О том, что такое МоментВремени можно прочитать в главе
«Понятие момента времени» на странице 540.
63
Быстрая разработка прикладных решений Документ
65
Быстрая разработка прикладных решений Документ
П П
режде чем мы приступим к практическому созданию осле того, как мы познакомились с объектом конфигурации
документов, необходимо сделать отступление о том, какие Документ, создадим несколько таких объектов, чтобы иметь
типы данных могут использоваться в системе возможность фиксировать события, происходящие в нашем
1С: Предприятие. OOO «На все руки мастер».
В предыдущей главе, когда мы создавали реквизиты справочников Одними из самых популярных услуг нашего предприятия является
или табличных частей, мы всегда указывали тип значения, которое ремонт телевизоров и установка стиральных машин. И в том, и в
может принимать этот реквизит. Это были примитивные типы данных другом случае требуются некоторые материалы, которые расходуются
- Число, Строка, Дата и Булево. Примитивные типы данных в процессе оказания этих услуг. Поэтому двумя важнейшими
изначально определены в системе и их набор ограничен. событиями в хозяйственной жизни нашей организации будут являться
поступление материалов и оказание услуг.
Наряду с такими изначально определенными в любой
конфигурации типами, могут существовать типы данных, Для отражения этих событий в базе данных мы создадим два
определяемые только конкретной конфигурацией. Такие типы документа: «Приходная накладная» и «Оказание услуги». Документ
образуют сами объекты конфигурации в момент их создания в «Приходная накладная» будет фиксировать факт поступления в нашу
конфигураторе. организацию необходимых материалов, а документ «Оказание услуги»
будет фиксировать оказание услуг и расход материалов, которые
Например, после того, как мы создали объект конфигурации
используются при оказании этих услуг.
Справочник «Склады», сразу же появилось несколько новых типов
данных, связанных с этим справочником. Среди них, например, Создадим новый объект конфигурации Документ. Зададим имя
СправочникСсылка.Склады. И если теперь мы укажем какому-либо документа - «ПриходнаяНакладная». Нажмем «Далее».
реквизиту этот тип данных, то сможем хранить в нем ссылку на Создадим реквизит документа с именем «Склад» и типом
конкретный объект справочника «Склады». СправочникСсылка.Склады:
Такие объекты конфигурации, которые могут образовывать новые
типы данных, называются типообразующими.
Это небольшое отступление было необходимо потому, что уже при
создании первого документа мы столкнемся с использованием типа
данных, доступного благодаря объекту конфигурации Справочник
«Склады».
66 67
Быстрая разработка прикладных решений
Документ
После этого добавим табличную часть с именем «Материалы» и Пока в нашей базе данных нет ни одного документа «Приходная
создадим у нее четыре реквизита: накладная», поэтому создадим новый документ (создать новый
документ можно при помощи пункта меню Действия | Добавить,
• «Материал» с типом СправочникСсылка.Номенклатура,
соответствующей иконки или клавишей «Insert»).
• «Количество» с типом Число, длиной 15, точностью 3,
неотрицательное,
• «Цена» с типом Число, длиной 15, точностью 2, Добавим новый документ при помощи
неотрицательное, меню или иконки
• «Сумма» с типом Число, длиной 15, точностью 2,
неотрицательное.
68
69
Быстрая разработка прикладных решений Документ
70 71
Быстрая разработка прикладных решений
Документ
Система вызовет еще один полезный инструмент разработчика - Обратите внимание, что в дереве объектов конфигурации у объекта
конструктор форм. Этот инструмент также построен по принципу конфигурации Документ «ПриходнаяНакладная» появилась форма
«мастеров» - ввод данных в определенной последовательности и «ФормаДокумента», а на экране открылось окно редактора форм,
передвижение кнопками «Далее» и «Назад». содержащее эту форму:
Сразу нажмем кнопку «Готово», согласившись тем самым со всем, Как видите, форма документа «ПриходнаяНакладная» содержит
что нам предложила система. большое количество всевозможных полей. Эти поля называются
элементами управления. Они имеют разное назначение и разное
поведение, которое соответствует их назначению. Однако все они
служат для того, чтобы отображать информацию, хранящуюся в базе
данных и организовывать интерактивную работу с этой информацией.
72
73
Быстрая разработка прикладных решений Документ
Сейчас мы обратим свое внимание только на те элементы Среди событий, связанных с полем ввода, найдите событие «При
управления, которые нас интересуют - это три поля ввода, изменении». Это событие возникает после изменения значения поля
ввода.
расположенные в колонках «Количество», «Цена» и «Сумма»:
Щелкните по кнопке с лупой в конце поля ввода, и система создаст
заготовку процедуры обработчика этого события в модуле нашей
Интересующие нас элементы управления. формы.
В модуль формы добавим следующий текст: некотором «общедоступном» месте, чтобы разные документы,
имеющие аналогичные реквизиты табличной части, могли
ПроцедураМатериалыКоличествоПриИзменении(Элемент) использовать этот алгоритм.
СтрокаТабличнойЧасти = ЭлементыФормы.Материалы Для описания таких «общедоступных» мест служат объекты
.ТекущиеДанные; СтрокаТабличнойЧасти.Сумма =
конфигурации Общий модуль, расположенные в ветке
СтрокаТабличнойЧасти.Количество
* СтрокаТабличнойЧасти.Цена; Общие | Общие модули. Процедуры и функции, содержащиеся в
КонецПроцедуры _____________________________________________ этих модулях, могут быть доступны для любых объектов
конфигурации.
Объясним назначение этих строк.
В первой строке мы обращаемся к программному объекту
Создание процедуры обработки события в общем
ЭлементыФормы. Этот объект является коллекцией значений, модуле
Д
содержащей все элементы управления, расположенные на нашей ля того чтобы алгоритм, выполняемый при обработке события,
форме. Каждый элемент управления формы можно получить, указав был доступен для разных документов, мы создадим общий
его имя в качестве свойства объекта ЭлементыФормы. В данном модуль и перенесем в него нашу процедуру расчета суммы. А в
случае мы обращаемся к элементу управления с именем «Материалы» документе просто оставим вызовы этой процедуры из общего
(ЭлементыФормы.Материалы). модуля.
Этот элемент управления отображает строки табличной части Создадим объект конфигурации Общий модуль в ветке
нашего документа. Получить ту строку, в которой в настоящее время Общие | Общие модули и назовем его «РаботаСДокументами». Он
осуществляется редактирование, можно при помощи свойства будет содержать следующий текст:
программного объекта ТабличноеПоле - ТекущиеДанные. Таким
образом, в результате выполнения первой строки переменная Процедура РассчитатьСумлц^СтрокаТабличнойЧасти) Экспорт
СтрокаТабличнойЧасти будет содержать объект СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество
* СтрокаТабличнойЧасти.Цена;
ДокументТабличнаяЧастьСтрока.ПриходнаяНакладная.Матери КонецПроцедуры
алы, в котором находятся редактируемые данные.
Во второй строке вычисляется сумма как произведение количества Ключевое слово Экспорт в конце оператора «Процедура» как раз
и цены. Объект ДокументТабличнаяЧастьСтрока.<имя> позволяет указывает на то, что эта процедура может быть доступна из других
обратиться к данным конкретной колонки, указав имя колонки в программных модулей.
качестве свойства объекта (например, Затем в модуле нашей формы изменим текст нашего обработчика:
СтрокаТабличнойЧасти.Количество).
Теперь посмотрим, как это работает. В окне программы откроем Процедура МатериалыКоличествоПриИзменении(Элемент)
список документов «ПриходнаяНакладная» и откроем любой из двух СтрокаТабличнойЧасти = ЭлементыФормы.Материалы
.ТекущиеДанные;
созданных нами документов. Если теперь вы поменяете количество в РассчитатьСумму(СтрокаТабличнойЧасти);
любой строке документа, то сумма в строке будет пересчитана КонецПроцедуры
автоматически.
Замечательно. Но теперь хотелось бы и для поля «Цена» сделать то Таким образом, теперь вместо непосредственного расчета суммы
же самое. А если заглянуть вперед, то мы увидим, что подобное мы будем вызывать процедуру из общего модуля, и передавать ей в
автоматическое заполнение поля «Сумма» может нам понадобиться и качестве параметра нужную нам строку табличной части.
в других документах. Поэтому лучше будет поместить расчет суммы в
77
Быстрая разработка прикладных решений Документ
т
Теперь осталось и для поля «Цена» установить такой же
Создание документа ОказаниеУслуги
обработчик. Так как однажды мы уже написали в модуле формы еперь мы аналогичным образом создадим второй документ,
нужную нам процедуру, то мы просто могли бы сопоставить ее также необходимый нам - «ОказаниеУслуги». Для этого потребуется
и другому событию другого элемента управления, расположенного в выполнить следующие действия:
форме. Однако стандарты разработки конфигураций фирмы «1С» не
допускают такого решения.
создать новый объект конфигурации Документ
«ОказаниеУслуги» с реквизитами:
«" Узнай больше!
Согласно стандартам разработки фирмы «1С», у каждого
события должен быть свой обработчик. Если одинаковые действия • «Склад», тип СправочникСсылка.Склады,
должны выполняться при изменении разных элементов управления • «Клиент», тип СправочникСсылка.Клиенты,
(например, при нажатии нескольких кнопок), то в этом случае • «Мастер», тип СправочникСсылка.Сотрудники,
следует поступать следующим образом:
- создается отдельная процедура (функция), выполняющая создать табличную часть этого документа
«ПереченьНоменклатуры» с реквизитами:
необходимые действия;
- для каждого элемента управления создается отдельный
• «Номенклатура», тип
обработчик с именем, назначаемым no умолчанию;
СправочникСсылка.Номенклатура,
- из каждого обработчика вызывается требуемая процедура • «Количество», тип Число, длина 15, точность 3,
(функция). неотрицательное,
• «Цена», тип Число, длина 15, точность 2,
Поэтому мы создадим обработчик события «При изменении» для неотрицательное,
поля ввода, которое расположено в колонке «Цена» и повторим в нем
• «Сумма», тип Число, длина 15, точность 2,
вызов процедуры «РассчитатьСумму» из общего модуля: неотрицательное,
ПроцедураМатериалыЦенаПриИзменении(Элемент)
• создать основную форму документа,
СтрокаТабличнойЧасти = ЭлементыФормы.Материалы
.ТекущиеДанные; • для полей ввода колонок «Количество» и «Цена» создать
РассчитатьСумму(СтрокаТабличнойЧасти); обработчик события «ПриИзменении», в котором вызывать
КоненПроцедуры процедуру «РассчитатьСумму» из общего модуля
«РаботаСДокументами».
Запустим 1С:Предприятие в режиме отладки и убедимся, что
теперь сумма в строках табличной части документов
«ПриходнаяНакладная» пересчитывается как при изменении
количества, так и при изменении цены.
78 79
Быстрая разработка прикладных решений
Документ
80
Регистр накопления
И
В этой главе мы познакомимся с объектом конфигурации Регистр так, мы с вами подошли к одному из главных моментов
накопления. Вы узнаете, для чего используется этот объект, какой разработки любой конфигурации - созданию механизма учета
структурой он обладает и каковы его отличительные особенности. накопления данных.
В заключение главы мы создадим с вами один из регистров Казалось бы, что все необходимое мы с вами уже
накопления, который будет использоваться в нашей конфигурации. создали: у нас есть что расходовать и приходовать (справочники) и у
нас есть чем расходовать и приходовать (документы). Осталось
только построить несколько отчетов и автоматизация OOO «На все
руки мастер» будет закончена.
Однако это не так.
Во-первых, путем анализа документов можно, конечно, получить
требуемые нам выходные данные, но представьте, что завтра OOO «На
все руки мастер» решит немного изменить свои бизнес-процессы и нам
потребуется ввести в конфигурацию еще один документ (или
несколько документов!).
Например, сейчас мы полагаем, что товары поступают в OOO и
затем расходуются. Руководство захотело усилить материальный
контроль и решило приходовать товары на основной склад
организации и затем выдавать их материально ответственным лицам.
В этом случае нам придется добавить в конфигурацию еще один
документ, который будет фиксировать перемещение материалов
между основным складом и материально ответственными лицами. И
очевидно, нам придется переработать все отчеты, которые были нами
созданы к этому моменту, с тем, чтобы они учитывали изменения,
вносимые новым документом. А представьте, если в нашей
конфигурации не два, а двадцать документов?!
Во-вторых, отчеты, анализирующие документы, будут работать
довольно медленно, что будет вызывать раздражение пользователей и
недовольство руководителей.
Поэтому в системе 1С:Предприятие есть несколько объектов
конфигурации, которые позволяют создавать в базе данных структуры,
предназначенные для накопления информации в удобном для
последующего анализа виде.
82 83
Быстрая разработка прикладных решений Регистр накопления
О
документами (или другими объектами базы данных), а с другой бъект конфигурации Регистр накопления является
стороны легко создавать нужные нам отчеты или использовать эти прикладным объектом и предназначен для описания
данные в алгоритмах работы конфигурации. структуры накопления данных. На основе объекта
конфигурации Регистр накопления платформа создает в базе данных
информационную структуру, в которой будут накапливаться данные,
«поставляемые» различными объектами базы данных. Эти данные
будут храниться в регистре в виде отдельных записей, каждая из
которых имеет одинаковую, заданную в конфигураторе, структуру.
Отличительной особенностью регистра накопления является то, что
он не предназначен для интерактивного редактирования
пользователем. Разработчик может, при необходимости, предоставить
пользователю возможность редактировать регистр накопления, но
предназначение регистра накопления заключается в том, чтобы его
модификация производилась на основе алгоритмов работы других
объектов базы данных (не обязательно документов, как в версии 7.7), а
не в результате непосредственных действий пользователя.
84 85
Быстрая разработка прикладных решений Регистр накопления
Т
называется движениями регистра накопления. Каждому движению еперь, когда мы знаем, для чего предназначены регистры
регистра накопления всегда должен соответствовать регистратор. накопления, посмотрим, как можно их использовать в нашем
Кроме того, регистр накопления может хранить дополнительную примере.
информацию, описывающую каждое движение. Набор такой Прежде всего, нас интересует информация о том,
дополнительной информации задается разработчиком при помощи сколько и каких материалов есть у нас на складах. Для накопления
реквизитов объекта конфигурации Регистр накопления. такой информации мы создадим регистр «ОстаткиМатериалов».
Откроем в конфигураторе нашу учебную конфигурацию и
<*" Узнай больше! создадим новый объект конфигурации Регистр накопления. Зададим
О структуре объектов встроенного языка, предназначенных для имя регистра - «ОстаткиМатериалов». Нажмем «Далее» и перейдем к
работы с регистрами накопления можно прочитать в главе созданию структуры регистра.
«Регистры накопления» на странице 599. Создадим измерения регистра:
«Материал», с типом
СправочникСсылка.Номенклатура,
«Склад», с типом СправочникСсылка.Склады.
Затем создадим ресурс «Количество» с длиной 15 и точностью 3.
В результате этих действий регистр «ОстаткиМатериалов» должен
иметь следующий вид:
86 87
Регистр накопления
Быстрая разработка прикладных решений
подтверждает тот факт, что назначение регистра накопления в том, Создание движений документа
чтобыаккумулировать данные, поставляемые различными
документами.
ПриходнаяНакладная
89
Быстрая разработка прикладных решений Регистр накопления
должны быть заданы формулы, по которым будут вычисляться В нижнем окне сформируется соответствие полей и выражений.
значения измерений и реквизитов регистра при записи движений.
90 91
Быстрая разработка прикладных решений Регистр накопления
92 93
Быстрая разработка прикладных решений Регистр накопления
94 95
Отчет
О
В этой главе мы познакомимся с вами с объектом конфигурации бъект конфигурации Отчет является прикладным объектом и
Отчет. Вы узнаете, для чего он используется, и создадите отчет, предназначен для описания средств и алгоритмов, при
который будет показывать движения и остатки материалов на нашем помощи которых пользователь сможет получать
предприятии. необходимые ему выходные данные. Алгоритм
формирования выходных данных описывается при помощи
визуальных средств или с использованием встроенного языка В
реальной жизни объектам конфигурации Отчет соответствуют
всевозможные таблицы выходных данных, сводных данных
диаграммы и пр.
96
Быстрая разработка прикладных решений Отчет
Т еперь у нас все готово для того, чтобы можно было получать
выходные данные. Поэтому приступим к созданию отчета,
который будет показывать нам приход, расход и остатки
материалов. Данная глава преследует цель лишь
Кроме таблицы регистра ОстаткиМатериалов
присутствуют еще несколько виртуальных
таблиц...
проиллюстрировать механизм создания отчетов. Более глубоко работа
с конструктором выходной формы будет рассмотрена в главе
«Создание отчетов» на странице 162.
Создадим новый объект конфигурации Отчет и назовем его
«Материалы». Перейдем на закладку «Макеты» и воспользуемся
конструктором выходной формы для того, чтобы полностью создать
наш отчет.
Воспользуемся конструктором выходной формы... Поскольку мы хотим видеть как остатки материалов, так и
информацию об их поступлении и расходовании, нас будет
интересовать виртуальная таблица
«ОстаткиМатериалов.ОстаткиИОбороты». Раскроем ее.
98
Быстрая разработка прикладных решений
Отчет
Начнем выбирать поля таблицы в нужном нам порядке двойным Как видите, наш отчет вполне «презентабелен» и полностью
щелчком мыши. Сначала выберем «Склад» и «Материал». Затем отражает движение материалов, произошедшее в нашей организации:
выберем «КоличествоНачальныйОстаток», «КоличествоПриход»,
«КоличествоРасход» и в заключение «КоличествоКонечныйОстаток».
В результате окно «Поля» должно быть заполнено следующим
образом:
100
101
Быстрая разработка прикладных решений
Глава 6. Макет
В этой главе вы познакомитесь с очередным новым объектом
конфигурации - Макет. Вы узнаете о его назначении и создадите макет
документа, на основе которого будет формироваться печатная форма
документа.
102 103
Быстрая разработка прикладных решений Макет
О
ОказаниеУслуги
о
бъект конфигурации Макет предназначен для хранения
различных форм представления данных, которые могут 1 ткроем в конфигураторе окно редактирования объекта
потребоваться каким либо объектам конфигурации или всему конфигурации Документ «ОказаниеУслуги». Перейдем на
прикладному решению в целом. Макет может содержать закладку «Макеты» и запустим конструктор печати:
табличный или текстовый документ, двоичные данные, HTML-
документ или Active Document. Макеты могут существовать как сами
по себе (общие макеты), так и быть подчинены какому либо объекту Запустим конструктор печати...
конфигурации.
Одно из предназначений макета, подчиненного объекту 1
конфигурации и содержащего табличный документ - создание
печатной формы этого объекта.
Создание печатной формы заключается в конструировании ее
составных частей - именованных областей, из которых затем
«собирается» готовая печатная форма. Порядок заполнения областей
данными и порядок вывода их в итоговую форму описывается при
помощи встроенного языка.
Печатная форма может включать в себя различные графические
объекты: картинки, OLE-объекты, диаграммы и т.д.
Помимо создания макета «вручную», конфигуратор предоставляет
разработчику возможность воспользоваться специальным
инструментом - конструктором печати, который берет на себя
большинство рутинной работы по созданию макета.
104
Быстрая разработка прикладных решений Макет
указывать (подвал в данном случае использовать не будем), и Проверим макет в работе. Запустим 1С:Предприятие в режиме
перейдем к пятому шагу. отладки и откроем документ ОказаниеУслуги №1. Обратите внимание,
ч то в правом нижнем углу документа появилась новая кнопка
Здесь укажем, что конструктор должен вставить новую кнопку в
«Печать».
форму документа для вызова процедуры формирования печатной
формы, и нажмем «ОК».
В конфигураторе откроется форма документа и его макет: Появилась новая кнопка «Печать»...
106 107
Редактирование макетов и форм
форм
Укажем, что в ячейке будет находиться не текст, а
параметр...
Редактирование макета документа
ОказаниеУслуги
О
ткроем конфигуратор, раскроем дерево документа
«ОказаниеУслуги» и дважды щелкнем на макете «Печать». Как
видите, макет документа состоит из именованных областей,
которые в определенном порядке выводятся на печать.
Добавим новую область для вывода итоговой суммы документа.
Выделим мышью две пустые строки и выполним команду
Таблица | Имена | Назначить имя...
110 111
Быстрая разработка прикладных решений Редактирование макетов и форм
Теперь откроем модуль формы документа «ОказаниеУслуги» - параметру «ВсегоПоДокументу», находящемуся в этой области, мы
«ФормаДокумента». Найдем в нем процедуру «Печать» и после цикла присваиваем значение суммы табличной части документа по колонке
добавим в нее следующие строки (новые строки выделены жирным «Сумма» (обращение к табличной части документа выполняется по
шрифтом): имени - «ПереченьНоменклатуры»). В заключение мы выводим
область в итоговый табличный документ, который будет показан на
Процедура Печать(Элемент)
экране и распечатан пользователем.
// {{_KOHCTPyKTOP_ПЕЧАТИ_ЭЛEMEHT(печать) // Подобным образом, используя свойства ячеек макета и управляя
Данный фрагмент построен конструктором. // При порядком их вывода, разработчик имеет возможность создать
повторном использовании конструктора, //внесенные
вручную изменения будут утеряны!!! ТабДок = Новый печатную форму любого дизайна.
ТабличныйДокумент; А теперь, для того, чтобы наш документ «ОказаниеУслуги»,
Макет = Документы.ОказаниеУслуги.ПолучитьМакет("Печать"); //
Заголовок выглядел вполне законченным, добавим итоговую сумму по
Область = Макет.ПолучитьОбласть("Заголовок"); документу и на экранную форму, чтобы пользователь мог видеть ее в
ТабДок.Вывести(Область); // Шапка процессе заполнения табличной части документа.
Область = Макет.ПолучитьОбласть("Шапка");
Область.Параметры.Номер = Номер;
Область.Параметры.Дата = Дата;
Область.Параметры.Клиент = Клиент;
Область.Параметры.Мастер = Мастер;
ТабДок.Вывести(Область); // тчНоменклатура
Область = Макет.ПолучитьОбласть("тчНоменклатураШапка");
ТабДок.Вывести(Область);
Для Каждого ТекСтрокатчНоменклатура Из тчНоменклатура Цикл
Область = Макет.ПолучитьОбласть("тчНоменклатура");
Область.Параметры.УслугаМатериал = ТекСтрокатчНоменклатура.Номенклатура;
Область.Параметры.Количество = ТекСтрокатчНоменклатура.Количество;
Область.Параметры.Цена = ТекСтрокатчНоменклатура.Цена;
Область.Параметры.Сумма = ТекСтрокатчНоменклатура.Сумма;
ТабДок.Вывести(Область); КонецЦикла;
Область = Макет.ПолучитьОбласть("Всего");
Область.Параметры.ВсегоПоДокументу = ПереченьНоменклатуры
.Итог("Сумма");
ТабДок.Вывести(Область); ТабДок.ОтображатьСетку =
Ложь; ТабДок.Защита = Ложь; ТабДок.ТолькоПросмотр =
Ложь; ТабДок.ОтображатьЗаголовки = Ложь;
ТабДок.Показать();
//} }_КОНСТРУКТОР_ПЕЧАТИ_ЭЛЕМЕНТ
КонецПроцедуры
112
113
Быстрая разработка прикладных решений Редактирование макетов и форм
О
ткроем в конфигураторе форму документа «ОказаниеУслуги»
- «ФормаДокумента». Откроем палитру свойств для Запустим 1С:Предприятие в режиме отладки и посмотрим, как
табличного поля, расположенного в форме, и установим теперь выглядит форма документа Оказание услуги № 1:
свойство «Подвал», которое определяет наличие подвала у элемента
управления табличное поле.
114
115
Быстрая разработка прикладных решений
116 117
Периодический регистр сведений
Н
В этой главе мы с вами познакомимся с объектом конфигурации ачнем мы с того, что обратим ваше внимание на документ
Регистр сведений, а точнее с одним из его видов - периодическим «ОказаниеУслуги». Как вы помните, в этом документе мы
регистром сведений. Вы узнаете, для чего предназначен этот объект выбираем услугу, которая оказывается, и затем указываем
цену.
конфигурации, и какова его структура.
Мы создадим с вами один периодический регистр сведений, Очевидно, что в OOO «На все руки мастер» существует перечень
который будет использоваться в нашей конфигурации, и покажем, услуг, который определяет стоимость каждой услуги. Казалось бы, что
каким образом можно использовать его данные средствами стоимость услуги является неотъемлемым свойством самой услуги и
поэтому стоимость услуги следует добавить в качестве реквизита
встроенного языка.
справочника «Номенклатура».
Однако стоимость услуг имеет особенность меняться со временем,
и может сложиться такая ситуация, что когда нам потребуется внести
изменения или уточнения в один из ранее проведенных документов
«ОказаниеУслуги», мы не сможем получить правильную стоимость
услуги, поскольку в реквизите справочника будет храниться последнее
введенное значение.
Кроме того, не исключена ситуация, что руководство 000 «На все
руки мастер» пожелает видеть, как зависит прибыль предприятия от
изменения стоимости оказываемых услуг. В этом случае просто
необходимо будет иметь возможность анализировать изменение
стоимости услуг во времени.
Поэтому для хранения стоимости услуг мы используем новый пока
еще для нас объект - регистр сведений.
118 119
Использование основных объектов конфигурации Периодический регистр сведений
О
бъект конфигурации Регистр сведений является прикладным уникальным идентификатором записи является регистратор и номер
объектом и предназначен для описания структуры хранения строки, то для регистра сведений применяется другой принцип
данных в разрезе нескольких измерений. На основе объекта формирования ключевого значения.
конфигурации Регистр сведений платформа создает в базе данных Ключом записи, однозначно идентифицирующим запись, является
информационную структуру, в которой может храниться в данном случае совокупность значений измерений регистра и периода
произвольная информация «привязанная» к набору измерений. (в случае, если регистр сведений периодический). Регистр сведений не
Принципиальным отличием регистра сведений от регистра может содержать несколько записей с одинаковыми ключами.
накопления является то, что каждое движение регистра сведений Если продолжать сравнение с регистром накопления, то можно
устанавливает новое значение ресурса, в то время как движение сказать, что регистр сведений предоставляет больше свободы в
регистра накопления изменяет существующее значение ресурса. По редактировании хранимых данных. Наряду с тем, что регистр сведений
этой причине регистр сведений может хранить любые данные (а не может использоваться в режиме подчинения регистратору (когда
только числовые, как регистр накопления). записи регистра сведений «привязаны» к документу-регистратору),
Следующей важной особенностью регистра сведений является его регистр сведений может использоваться и в независимом режиме, в
способность (при необходимости) хранить данные с привязкой ко котором пользователю предоставляется полная свобода интерактивной
времени. Благодаря этому регистр сведений может хранить не только работы с данными регистра. Регистр сведений, не использующий
актуальные значения данных, но и историю их изменения во времени. подчинение регистратору, называют независимым регистром
Регистр сведений, использующий привязку ко времени называют сведений.
обычно периодическимрегистром сведений.
Периодичность регистра сведений можно определить одним из Узнай больше!
следующих значений: О структуре объектов встроенного языка, предназначенных для
работы с регистрами сведений можно прочитать в главе «Регистры
• в пределах секунды, сведений» на странице 593.
• в пределах дня,
• в пределах месяца,
• в пределах квартала,
• в пределах года.
• в пределах регистратора (если установлен режим записи -
«Подчинение регистратору»)
Периодический регистр сведений всегда содержит служебное поле
«Период», добавляемое системой автоматически. Оно имеет тип Дата,
и служит для указания факта принадлежности записи к какому-либо
периоду. При записи данных в регистр, платформа всегда приводит
значение этого поля к началу того периода, в который он попадает.
Например, если в регистр сведений с периодичностью в пределах
месяца записать данные, в которых период указан как 08.04.2004, то
регистр сохранит эти данные со значением периода равным 01.04.2004.
120
121
Использование основных объектов конфигурации Периодический регистр сведений
П риступим к созданию периодического регистра сведений, который значению выбранного элемента справочника.
будет хранить развернутые во времени розничные цены материалов и После этого создадим новый ресурс «Цена», тип Число, длина 15,
стоимости услуг, оказываемых нашим OOO «На все руки мастер». точность 2, неотрицательное.
Откроем конфигуратор и создадим новый объект конфигурации Теперь запустим 1С:Предприятие в режиме отладки и посмотрим,
Регистр сведений. Назовем его «Цены». Установим периодичность как работает наш периодический регистр сведений Цены.
этого регистра в пределах секунды. Зададим стоимость услуг нашего 000 «На все руки мастер»
Перейдем на закладку «Данные» и создадим измерение регистра следующим образом:
«Номенклатура» с типом СправочникСсылка.Номенклатура.
Укажем, что это измерение будет ведущим.
122 123
Использование основных объектов конфигурации
Периодический регистр сведен
С начала мы создадим функцию, которая будет возвращать нам просто указав имя нужного нам ресурса регистра через точку
у
(ЗначенияРесурсов.Цена).
актуальную розничную цену номенклатуры. Откроем
конфигуратор, в ветке Общие | Общие модули создадим Теперь проверим, как работает эта функция.
новый объект конфигурации Модуль и назовем его
«РаботаСоСправочниками».
Разместим в нем следующий текст:
124
Использование основных объектов конфигурации Периодический регистр сведений
И так, задача, которая перед нами стоит, заключается в Проверим, как теперь работает наш документ. Запустим
следующем. При создании документа «ОказаниеУслуги» нам 1С:Предприятие в режиме отладки и откроем регистр сведений
«Цены». Для транзистора Philips добавим следующим числом новую
необходимо обеспечить автоматическое заполнение поля
цену:
«Цена» после того, как пользователь выберет услугу. Причем цена
услуги должна определяться исходя из даты создаваемого
документа.
Найдем в конфигураторе документ «ОказаниеУслуги» и откроем
его форму «ФормаДокумента». Откроем свойства поля ввода,
расположенного в колонке «Номенклатура» и внизу списка найдем
событие «При изменении». Нажмем на кнопку с лупой и в
открывшейся заготовке обработчика события напишем следующий
текст:
Теперь откроем документ ОказаниеУслуги №1. Как вы помните,
ПроцедураПереченьНоменклагурыНоменклатураПриИзменении(Элемент)
этим документом мы как раз «израсходовали» один такой транзистор.
//получить текущую строку табличной части Установим дату документа равной той дате, когда было задано
СтрокаТабличнойЧасти = ЭлементыФормы.ПереченьНоменклатуры.ТекущиеДанные; первое значение цены транзистора, и повторим выбор транзистора в
колонке «Номенклатура» табличной части документа. Автоматически
//установить цену установится первое значение цены:
СтрокаТабличнойЧасти.Цена = РозничнаяЦенаДата, Элемент.Значение);
126
127
Использование основных объектов конфигурации Периодический регистр сведений
128
129
Перечисление
О
бъект конфигурации Перечисление является прикладным
До сих пор мы с вами не обращали внимания на то, что у нас нет объектом и предназначен для описания структуры хранения
никакого признака, по которому мы могли бы сказать, чем является постоянных наборов значений, не изменяемых в процессе
конкретный элемент справочника «Номенклатура»: материалом или работы конфигурации. На основе объекта конфигурации
услугой. To, что все элементы справочника разложены у нас по Перечисление платформа создает в базе данных информационную
некоторым группам, не может являться надежным критерием оценки: структуру, в которой может храниться набор некоторых постоянных
группы можно удалить, переименовать, сгруппировать элементы по значений.
другим принципам...
В реальной жизни этому объекту может соответствовать, например,
Поэтому нам требуется некоторый признак, позволяющий перечисление вариантов указания цены («включая НДС», «без НДС»).
однозначно определять принадлежность элемента справочника к Набор всех возможных значений, которые содержит перечисление,
материалам или услугам, независимо от изменения иерархической задается при конфигурировании системы, и пользователь не может
структуры справочника. изменять их, удалять или добавлять новые.
В этой главе мы создадим у справочника «Номенклатура» Из этого следует важная особенность перечисления: значения
специальный реквизит, тип значения которого образуется новым пока перечисления не «обезличены» для конфигурации, на них могут
еще для нас объектом конфигурации Перечисление. Это поможет нам опираться алгоритмы работы программы.
в дальнейшем легко определять, чем является элемент справочника
«Номенклатура»: услугой или материалом. Кроме этого, мы
тех, ктоработал с версией 7.7
скорректируем процедуру проведения документа ОказаниеУслуги и Перечисления могут теперь иметь формы (в том числе основную
покажем, как работать с перечислением средствами встроенного форму списка и выбора), а также макеты.
языка.
130 131
Использование основных объектов конфигурации Перечисление
Затем добавим в
справочник «Номенклатура» новый реквизит
«ВидНоменклатуры» с типом
ПеречислениеСсылка.ВидыНоменклатуры:
132
133
Использование основных объектов конфигурации Перечисление
Движение.Количество = ТекСтрокаПереченьНоменклатуры.Количество;
Изменение процедуры проведения КонецЦикла;
// записываем движения регистров
документа ОказаниеУслуги Движения.ОстаткиМатериалов.Записать()-
Е
//} }_КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
сли вы помните, в первой части книги, когда создавались КонецПроцедуры
движения документа «ОказаниеУслуги» по регистру
накопления «ОстаткиМатериалов», мы сказали, что они не
Добавленный текст исключает из выполнения операторов цикла те
совсем правильные, поскольку в регистр будут попадать не только строки документа, в которых номенклатура не является материалом. К
записи об израсходованных материалах, но и записи об значению перечисления «Материал» мы обращаемся, используя
оказанных услугах. менеджер перечисления «ВидыНоменклатуры»
Теперь мы займемся тем, что доработаем документ таким образом, (Перечисления.ВидыНоменклатуры), указывая в качестве его
чтобы в регистре появлялись только записи, относящиеся к расходу свойства имя нужного нам значения перечисления.
материалов. Эта доработка будет не совсем эффективна с точки зрения Запустим 1С:Предприятие в режиме отладки и проверим работу
производительности, зато позволит нам получить нужные данные в процедуры проведения документа «ОказаниеУслуги».
регистре «ОстаткиМатериалов». Откроем документ Оказание услуги №1 и внесем в него следующие
Более эффективный вариант обработки проведения этого изменения (обратите внимание, что изменен не только состав
документа мы рассмотрим после изучения главы, рассказывающей о номенклатуры в табличной части, но и время документа):
механизме запросов 1С:Предприятия 8.0.
Скорректируем движения документа, исключив из обработки те
строки табличной части, в которых находятся услуги. Для этого в
обработчик события «ОбработкаПроведения», расположенный в
модуле документа «ОказаниеУслуги», добавим следующий текст
(добавленный текст выделен жирным шрифтом):
134 135
Использование основных объектов конфигурации
Перечисление
136
137
Проведение документа по нескольким регистрам
138 139
Использование основных объектов конфигурации Проведение документа по нескольким регистрам
О
ткроем в конфигураторе окно редактирования объекта
конфигурации Документ «ПриходнаяНакладная» и перейдем на
закладку «Движения». В списке регистров отметим, что
«Стоимость» с длиной 15 и точностью 2. документ будет создавать теперь движения и по регистру
После создания, регистр «СтоимостьМатериалов» «СтоимостьМатериалов». Запустим конструктор движений, и
должен выглядеть в дереве конфигурации следующим образом: согласимся с тем, что существующая процедура
«ОбработкаПроведения» будет замещена.
Перед нами откроется окно конструктора движений, которое будет
содержать созданные нами ранее движения документа по регистру
«ОстаткиМатериалов». Добавим в список регистров, по которым
формируются движения, еще один регистр - «СтоимостьМатериалов».
Выберем для него ту же табличную часть «Материалы» и заполним
выражения.
Для ресурса «Стоимость» выберем значения реквизита табличной
части «Сумма»:
140 141
Использование основных объектов конфигурации Проведение документа по нескольким регистрам
142 143
Использование основных объектов конфигурации
И
в заключение этой главы мы внесем изменения в процедуру
обработки проведения документа «ОказаниеУслуги». На
данном этапе мы будем исходить из пожелания,
высказанного руководством OOO «На все руки мастер». Суть
его заключается в том, что на первом этапе, при списании материалов,
израсходованных в процессе оказания услуги, должна быть
возможность указывать различную стоимость для одного и того же
материала, которая рассчитана руководством исходя из текущих
конъюнктурных соображений.
Поскольку в документе «ОказаниеУслуги» у нас отражена только
цена номенклатуры, нам понадобится добавить в табличную часть
документа еще одно поле, в котором будет указываться стоимость
номенклатуры.
Откроем в конфигураторе окно редактирования объекта
конфигурации Документ «ОказаниеУслуги», перейдем на закладку
«Данные» и создадим новый реквизит табличной части документа с
именем «Стоимость», типом Число, длиной 15 и точностью 2:
144
Использование основных объектов конфигурации Проведение документа по нескольким регистрам
После этого откроем форму «ФормаДокумента» документа Запустим конструктор движений документа, и добавим в список
«ОказаниеУслуги» и добавим в табличное поле колонку, регистров регистр «СтоимостьМатериалов». Опишем движения
отображающую новый реквизит «Стоимость», расположив ее после документа следующим образом (обратите внимание, что стоимость
колонки «Номенклатура»: вычисляется как произведение стоимости и количества, указанных в
табличной части):
146
Использование основных объектов конфигурации Проведение документа по нескольким регистрам
148 149
Использование основных объектов конфигурации
Проведение документа по нескольким регистрам
150
151
Оборотный регистр накопления
Глава 4. Оборотный регистр накопления Зачем нужно создавать еще один регистр
П
В этой главе мы с вами познакомимся с еще одним видом регистра родолжим рассматривать работу нашего документа
«Оказание Услуги». До сих пор мы создавали в регистрах
накопления - оборотным регистром накопления.
накопления движения только для строк документа, которые
Вы узнаете о некоторых важных принципах выбора измерений и содержат материалы. Услуги, содержащиеся в документе, мы
реквизитов регистров накопления. Мы с вами создадим оборотный никак не учитывали.
регистр накопления и добавим в один из наших документов движения
Дело в том, что при учете услуг важны совершенно другие
еще и по этому регистру.
критерии, нежели при учете материалов. Прежде всего, бессмысленно
говорить о том, сколько услуг было и сколько их осталось, важна
только сумма и количество услуг, которые были оказаны за
определенный промежуток времени. Кроме этого интересны
следующие моменты:
152 153
Использование основных объектов конфигурации Оборотный регистр накопления
154 155
Использование основных объектов конфигурации Оборотный регистр накопления
Н
• «Выручка»,тип Число, длина 15, точность 2,
а этот раз мы не будем использовать конструктор движений
• «Стоимость», тип Число, длина 15, точность 2. документа, а внесем необходимые дополнения прямо в
Откроем окно редактирования объекта конфигурации Документ обработчик события «ОбработкаПроведения» документа
«ОказаниеУслуги» и на закладке «Движения» укажем, что этот «ОказаниеУслуги».
документ будет создавать движения по регистру «Продажи». Откроем в конфигураторе модуль объекта конфигурации документ
Запустим 1С:Предприятие в режиме отладки и откроем формы «ОказаниеУслуги» и найдем в нем процедуру обработчика события
списка регистров накопления «Продажи» и «ОстаткиМатериалов». «ОбработкаПроведения».
Обратите внимание, что формы практически одинаковы, за Создадим еще один цикл обхода табличной части и команду записи
исключением состава измерений и ресурсов. движений регистра (добавления выделены жирным шрифтом):
157
156
Использование основных объектов конфигурации Оборотный регистр накопления
Процедура ОбработкаПроведения(Отказ, Режим) Все добавленные конструкции вам уже хорошо известны, обратите
//{{_КОНСТРУКТОРЛВИЖЕНИЙ_РЕГИСТРОВ // внимание лишь на то, что у оборотного регистра отсутствует свойство
Данный фрагмент построен конструктором. // При
повторном использовании конструктора, // внесенные
«ВидДвижения», поскольку отражение вида движения (приход или
вручную изменения будут утеряны!!! расход) имеет смысл лишь при учете остатков. В случае регистра
Для Каждого ТекСтрокаПереченьНоменклатуры Из ПереченьНоменклатуры Цикл Если оборотов нас интересует только значение, на которое должно быть
ТекСтрокаПереченьНоменклатуры.Номенклатура.ВидНоменклатуры <> записано в ресурс регистра.
Перечислеиия.ВидыНоменклатуры.МатериалТогда
Продолжить; Запустим 1С:Предприятие в режиме отладки и перепроведем все
КонецЕсли; документы «Оказание услуги». Движения этих документов по
регистру «Продажи» должны иметь следующий вид:
// регистр ОстаткиМатериалов Расход
Движение = Движения.ОстаткиМатериалов.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата; Движения документа Оказание услуги №1
Движение.Материал = ТекСтрокаПереченьНоменклатуры.Номенклатура;
Движение.Склад = Склад;
Движение.Количество = ТекСтрокаПереченьНоменклатуры.Количество;
//КонецЦикла;
//Для Каждого ТекСтрокаПереченьНоменклатуры Из ПереченьНоменклатуры Цикл
// регистр СтоимостьМатериалов Расход Движение =
Движения.СтоимостьМатериалов.Добавшъ(); Движение.ВидДвижения =
ВидДвиженияНакопления.Расход; Движение.Период = Дата;
Движение.Материал = ТекСтрокаПереченьНоменклатуры.Номенклатура;
Движение.Стоимостъ = ТекСтрокаПереченьНоменклатуры.Стоимость *
ТекСтрокаПереченьНоменклатуры.Количество;
КонецЦикла;
Для Каждого ТекСтрокаПереченьНоменклатуры Из ПереченьНоменклатуры Цикл
// регистр Продажи
Движение = Движения.Продажи.Добавить();
Движение.Период = Дата;
Движение.Номенклатура = ТекСтрокаПеречеиьНоменклатуры.Номенклатура;
158 159
Использование основных объектов конфигурации Оборотный регистр накопления
160 161
Создание отчетов
И
объясним основные возможности конструктора выходной формы.
сходную информацию запрос получает из набора таблиц. Эти
В основе конструктора выходной формы лежит использование таблицы представляют данные реальных таблиц базы данных в
механизма запросов, реализованного в платформе 1С:Предприятие. удобном для анализа виде. Их можно разделить на две большие
Поскольку каждый отчет, как правило, подразумевает получение группы: реальные и виртуальные.
сложной выборки данных, сгруппированных и отсортированных
Реальные таблицы, в свою очередь, могут быть объектными
определенным образом, очевидно, что для этих целей лучше всего (ссылочными) или не объектными (не ссылочными):
использовать запрос к информации базы данных. Поэтому при вызове
конструктора выходной формы в него «встраивается» конструктор
запроса, позволяющий визуальными средствами описать запрос,
лежащий в основе отчета. Кроме создания текста запроса конструктор
выходной формы помогает также создать форму и макет отчета.
Примечательной возможностью конструктора выходной формы
является то, что он может создавать отчет, используя два различных
объекта встроенного языка.
Во-первых, отчет может быть построен с использованием объекта
встроенного языка Запрос. Такой вариант отчета является довольно
простым и не предоставляет больших возможностей для настройки
параметров созданного отчета.
Во-вторых, отчет может быть построен с использованием объекта Отличительной особенностью реальных таблиц является то, что
встроенного языка ПостроительОтчета. В этом случае пользователь они содержат данные какой-либо одной реальной таблицы,
получает большие возможности по интерактивной настройке самого хранящейся в базе данных. Например, реальными таблицами являются
запроса, на основе которого строится отчет (например, он может таблица «Справочник.Клиенты», соответствующая справочнику
определять состав выбранных полей и задавать условия отбора). «Клиенты» или таблица «РегистрНакопления.ОстаткиМатериалов»,
Мы начнем рассматривать примеры создания отчетов в более соответствующая регистру накопления «ОстаткиМатериалов».
простом варианте - без использования объекта встроенного языка Виртуальные таблицы формируются, в основном, из данных
ПостроительОтчета, а после того, как будем обладать достаточными нескольких таблиц базы данных. Например, виртуальной таблицей
знаниями - рассмотрим несколько примеров, в которых буде1 является таблица
использован ПостроительОтчета. «РегистрНакопления.ОстаткиМатериалов.ОстаткиИОбороты»,
формируемая из нескольких таблиц регистра накопления
«ОстаткиМатериалов». Иногда виртуальные таблицы могут
162 163
Использование основных объектов конфигурации Создание отчетов
формироваться и из одной реальной таблицы (например, виртуальная Объединение запросов определяет, как будут объединены
таблица «Цены.СрезПоследних» формируется на основе таблицы результаты выполнения нескольких запросов.
регистра сведений «Цены»). Однако общим для всех виртуальных Упорядочивание результатов определяет условия упорядочивания
таблиц является то, что им можно задать ряд параметров, которые строк результата запроса.
будут определять, какие данные будут включены в эти виртуальные АВТОУПОРЯДОЧИВАНИЕ позволяет включить режим
таблицы. Набор таких параметров может быть различным для разных автоматического упорядочивания строк результата запроса.
виртуальных таблиц, и определяется данными, хранящимися в Описание итогов определяет, какие итоги необходимо
исходных таблицах базы данных. рассчитывать в запросе и каким образом группировать результат.
Реальные таблицы подразделяются на объектные (ссылочные) и не Применение различных синтаксических конструкций языка
объектные (не ссылочные). запросов подробно описано в книге «1С:Предприятие 8.0 Описание
В объектных (ссылочных) таблицах представлена информация встроенного языка», поэтому мы перейдем прямо к созданию отчетов,
ссылочных типов данных (справочники, документы, планы видов и по пути будем комментировать создаваемый текст запросов.
характеристик и т.д.). А в не объектных (не ссылочных) - всех
остальных типов данных (константы, регистры и т.д.).
Отличительной особенностью объектных (ссылочных) таблиц
является то, что они содержат поле «Ссылка», содержащее ссылку на
текущую запись. Кроме этого для таких таблиц возможно получение
пользовательского представления объекта, эти таблицы могут быть
иерархическими и поля таких таблиц могут содержать вложенные
таблицы (табличные части).
Язык запросов
А
лгоритм, по которому данные будут выбраны из исходных
таблиц запроса, описывается в тексте запроса на
специальном языке - языке запросов. Текст запроса состоит из
нескольких частей:
• описание запроса,
• объединение запросов,
• упорядочивание результатов,
• АВТОУПОРЯДОЧИВАНИЕ
• описание итогов.
Обязательной частью запроса является только первая - описание
запроса. Все остальные присутствуют по необходимости.
Описание запроса определяет источники данных, поля выборкИ,
группировки и т.д.
164 165
Использование основных объектов конфигурации Создание отчетов
П ервым отчетом, на основе которого мы начнем знакомиться с представления ссылочных полей, в расчете на то, что именно они и
языком запросов, будет отчет будут использованы для вывода в документ.
«РеестрДокументовОказаниеУслуги». Этот отчет просто После этого перейдем на закладку «Порядок» и укажем, что
будет выводить список существующих в базе данных результат запроса должен быть сначала упорядочен по значению поля
документов «ОказаниеУслуги» в порядке их дат и номеров. «Дата», а затем - по значению поля «ОказаниеУслуги.Ссылка»:
Создадим в конфигураторе новый объект конфигурации Отчет
«РеестрДокументовОказаниеУслуги». Перейдем на закладку «Макет»
и запустим конструктор выходной формы.
В качестве источника данных для запроса выберем объектную
(ссылочную) таблицу документов «ОказаниеУслуги». Из этой таблицы
выберем следующие поля: Перейдем на закладку «Отчет» и сбросим флаг «Использовать
построитель отчета»:
• «Дата»,
• «Номер»,
Сбросим флаг «Использовать построитель отчета»...
• «Склад»,
• «Мастер»,
• «Клиент»:
166 167
Использование основных объектов конфигурации
Создание or ieTOB
формируется текст запроса, который будет использован для получения После ключевого слова ИЗ указываются источники данных -
интересующих нас данных: исходные таблицы запроса, содержимое которых обрабатывается в
запросе. В данном случае это объектная (ссылочная) таблица
«Документ.ОказаниеУслуги». После ключевого слова КАК
Запрос.Текст = указывается псевдоним источника данных. В нашем случае это
"ВЫБРАТЬ «ОказаниеУслуги». В дальнейшем к этому источнику данных можно
| ОказаниеУслуги.Дата КАК Дата,
| ОказаниеУслуги.Номер КАК Номер,
будет обращаться в тексте запроса, используя псевдоним.
| ОказаниеУслуги.Склад, Такое обращение мы видим в описании полей выборки:
| ОказаниеУслуги.Склад.Представление,
| ОказаниеУслуги.Мастер,
| ОказаниеУслуги.Мастер.Представление,
"ВЫБРАТЬ
| ОказаниеУслуги.Клиент,
| ОказаниеУслуги.Дата КАК Дата,
| ОказаниеУслуги.Клиент.Представление
| ОказаниеУслуги.Номер КАК Номер,
| ИЗ
| ОказаниеУслуги.Склад,
| Документ.ОказаниеУслуги КАК ОказаниеУслуги
| ОказаниеУслуги.Склад.Представление,
|
| ОказаниеУслуги.Мастер,
|УПОРЯДОЧИТЬ ПО
| Дата, | ОказаниеУслуги.Мастер.Представление,
| Номер"; | ОказаниеУслуги.Клиент,
| ОказаниеУслуги.Клиент.Представление
168
169
Использование основных объектов конфигурации Создание отчетов
Теперь обратим внимание на то, как выводится результат запроса в В начале процедуры мы получаем макет отчета, из которого затем
табличный документ. получаем существующие в нем области в соответствующие
переменные:
Процедура РеестрДокументовОказаниеУслуги(ТабДок) Экспорт
//{{КОНСТРУКТОР_ВЫХОДНЬК_ФОРМ(РеестрДокументовОказаниеУслугн)
// Данный фрагмент построен конструктором. // При повторном использовании ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
конструктора, // внесенные вручную изменения будут утеряны!!! ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
Макет = ПолучитьМакет("РеестрДокументовОказаниеУслуги"); ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы"');
Запрос = Новый Запрос; ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
/Л}КОНСТРУКТОР_ВЬКОДНЫХ_ФОРМ
КонецПроцедуры
Результат = Запрос.Выполнить();
170 171
Использование основных объектов конфигурации Создание отчетов
О
выборки результата запроса и выводим эту область в табличный тчет «Рейтинг услуг» будет содержать информацию о том,
документ. выполнение каких услуг принесло OOO «На все руки мастер»
В заключение процедуры, мы выводим в табличный документ наибольшую прибыль в указанном периоде. На примере
отчета «Рейтинг услуг» мы проиллюстрируем, как отбирать данные
завершающие области макета: в некотором периоде, как задавать параметры запроса и как
использовать в запросе данные из нескольких таблиц и включать в
результат запроса все данные одного из источников.
ТабДок.ЗакончитьАвтогруппировкуСтрок();
ТабДок.Вывести(ОбластьПодвалТаблицы); Создадим новый объект конфигурации Отчет «РейтингУслуг».
ТабДок.Вывести(ОбластьПодвал); Перейдем на закладку «Макеты» и вызовем конструктор выходной
формы.
Выберем объектную (ссылочную) таблицу справочника
Теперь запустим 1С:Предприятие в режиме отладки и посмотрим «Номенклатура» и виртуальную таблицу регистра накопления
на результат работы нашего отчета: «Продажи.Обороты». Для того чтобы исключить неоднозначность
имен в запросе, переименуем таблицу «Номенклатура» в
«СпрНоменклатура» (контекстное меню правой кнопки мыши).
Затем установим курсор на таблицу «ПродажиОбороты» и вызовем
диалог ввода параметров виртуальной таблицы:
172 173
Использование основных объектов конфигурации Создание отчетов
Укажем, что начало и конец периода будут переданы в Единственное, что нам останется сделать, это сбросить флаг «Все»
соответствующих параметрах «ДатаНачала» и «ДатаОкончания» у таблицы регистра и установить его у таблицы справочника.
(символ «&» перед именем указывает, что это параметр запроса):
Будем выбирать все элементы из справочника
«Номенклатура»
174 175
Использование основных объектов конфигурации Создание отчетов
В дальнейшем, перед выполнением запроса, мы передадим в В этой процедуре, в той части, где выполняется установка
параметр «ВидНоменклатуры» - соответствующее значение параметров запроса, определим значение параметра
перечисления. «ВидНоменклатуры» (исправления выделены жирным шрифтом):
Перейдем на закладку «Объединения/Псевдонимы» и укажем, что
представление элемента справочника будет иметь псевдоним
Запрос.Текст =
«Услуга», а поле регистра будет иметь псевдоним «Выручка»: "ВЫБРАТЬ
| СпрНоменклатура.Ссылка КАК Услуга,
| СпрНоменклатура.Представление КАК Представление,
| ПродажиОбороты.ВыручкаОборот КАК Выручка
|И3
| Справочник.Номенклатура КАК СпрНоменклатура
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи,Обороты(&ДатаНачала,
| &ДатаОкончания,,)
Перейдем на закладку «Порядок» и укажем, что результат запроса | КАК ПродажиОбороты
должен быть отсортирован по убыванию значения поля «Выручка». | ПО ПродажиОбороты.Номенклатура = СпрНоменклатура.Ссылка
На закладке «Итоги» определим, что нужно выводить общие итоги, ГДЕ
и они должны представлять собой сумму значений поля «Выручка»: | (СпрНоменклатура.ЭтоГруппа = Ложь) И
| СпрНоменклатура.ВидНоменклатуры = &ВидНоменклатуры
|УПОРЯДОЧИТЬ ПО |
ВыручкаУБЫВ
|ИТОГИ СУММА(Выручка) ПО
| ОБЩИЕ";
Запрос.Текст =
"ВЫБРАТЬ
| СпрНоменклатура.Ссылка КАК Услуга,
| СпрНоменклатура.Представление КАК Представление,
|ПродажиОбороты.ВыручкаОборот КАК Выручка
| Справочник.Номенклатура КАК СпрНоменклатура
Нажмем «ОК». Платформа сформирует макет и форму отчета ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты(&ДатаНачала,
Откроем модуль формы и найдем в нем процедуру «РейтингУслуг».
176 177
Использование основных объектов конфигурации Создание отчетов
| КАК ПродажиОбороты В описании первого источника и условия соединения нет для нас
| ПО ПродажиОбороты.Номенклатура = СпрНоменклатура.Ссылка ничего нового, а вот при описании второго источника, используется
| возможность задания параметров виртуальной таблицы запроса:
|ГДЕ
| (СпрНоменклатура.ЭтоГруппа = Ложь) И
| СпрНоменклатура.ВидНоменклатуры = &ВидНоменклатуры
| | РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаОкончания,,)
|УПОРЯДОЧИТЬ ПО
| ВыручкаУБЫВ
|
|ИТОГИ СУММА(Выручка) ПО Первым параметром передается начало периода расчета итогов,
| ОБЩИЕ"; вторым - конец периода. В результате исходная таблица будет
содержать только обороты, рассчитанные в переданном периоде. Здесь
всегда следует помнить, что если мы передаем в качестве этих
Сначала, как обычно, идет часть описания запроса и в ней есть параметров дату (а в нашем случае так и будет), то дата содержит и
новые для нас конструкции. время с точностью до секунды.
При описании источников запроса (после ключевого слова ИЗ), Если заранее известно, что пользователя не будут интересовать
использована возможность определения нескольких источников результаты работы отчета в периодах, указанных с точностью до
запроса: секунд, то следует учесть следующую особенность: по умолчанию
время в дате установлено в 00:00:00. Поэтому, если не предпринять
специальных мер, получится, что когда пользователь задаст период
|из отчета с 01.03.2004 по 31.03.2004, итоги регистра будут рассчитаны с
| Справочник.Номенклатура КАК СпрНоменклатура начала дня 01.03.2004 00:00:00 по начало дня 31.03.2004 00:00:00.
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты(&ДатаНачала, Таким образом, данные за 31 число, отличные от начала дня, в расчет
| &ДатаОкончания,,)
| КАК ПродажиОбороты не войдут, что сильно удивит пользователя.
| ПО ПродажиОбороты.Номенклатура = СпрНоменклатура.Ссылка
Для того чтобы исключить эту ситуацию, следует сделать две вещи.
Во-первых, в форме отчета ограничить пользователя в
В данном случае выбираются записи из двух источников: возможностях ввода даты начала и даты окончания, установив для
«СпрНоменклатура» и «ПродажиОбороты», причем ключевым соответствующих полей ввода состав даты как «Дата»:
предложением ЛЕВОЕ СОЕДИНЕНИЕ... ПО описан способ,
которым будут скомбинированы между собой записи этих двух
Определим состав даты...
источников.
ЛЕВОЕ СОЕДИНЕНИЕ означает, что в результат запроса надо
включить комбинации записей из обоих источников, которые
соответствуют указанному после ключевого слова ПО условию. Кроме
этого, в результат запроса надо включить еще и записи из первого
(указанного слева от слова СОЕДИНЕНИЕ) источника, для которых
не найдено соответствующих условию записей из второго источника.
178 179
Использование основных объектов конфигурации Создание отчетов
Во-вторых, при передаче параметров использовать встроенную Далее в запросе следует часть упорядочивания результатов, а за ней
функцию КонецДня(). Для этого вернемся в модуль формы отчета и - новая для нас часть, которая не встречалась ранее - описание итогов:
внесем необходимые изменения (добавления выделены жирным
шрифтом):
|ИТОГИ СУММА(Выручка) ПО
| ОБЩИЕ";
ПроцедураДействияФормыРейтингУслугСформировать(Кнопка)
//{{КОНСТРУКТОР_ВЫХОДНЫХ_ФОРМ_ПРОЦЕДУРА_ВЫЗОВА(РейтингУслуг)
//Данный фрагмент построен конструктором. // При повторном использовании
конструктора, // внесенные вручную изменения будут утеряны!!! Она всегда начинается с ключевого слова ИТОГИ, за которым
ТабДок = ЭлементыФормы.ТабличноеПоле; следует описание того, какие итоги будут присутствовать в результате
РейтингУслуг(ТабДок, Неопределено, ДатаНачала, КонецДня(ДатаОкончания)); запроса. Сразу после слова ИТОГИ описываются агрегатные функции,
которые необходимо рассчитывать в итогах. В нашем случае будет
//}}КОНСТРУКТОР_ВЫХОДНЫХ_ФОРМ_ПРОЦЕДУРА_ВЫЗОВА
КонецПроцедуры ___________________________________________________________
рассчитываться сумма по полю «Выручка». Затем следует ключевое
слово ПО, после которого описываются группировки, в которых
Продолжим рассматривать текст запроса. В части описания запроса должны быть рассчитаны итоги. В нашем случае они отсутствуют, и
есть еще одна новая для нас конструкция - задание условий отбора используется только ключевое слово ОБЩИЕ, которое указывает на
то, что итоги будут рассчитаны по всей таблице в целом.
данных из исходных таблиц:
Теперь, когда мы закончили знакомиться с текстом запроса,
запустим 1С:Предприятие в режиме отладки и посмотрим, как
работает наш отчет.
"ВЫБРАТЬ
| СпрНоменклатура.Ссылка КАК Услуга, Зададим период отчета с 01.03.2004 по 30.04.2004. Результат будет
| СпрНоменклатура.Представление КАК Представление, выглядеть следующим образом:
| ПродажиОбороты.ВыручкаОборот КАК Выручка
|ИЗ
| Справочник.Номенклатура КАК СпрНоменклатура
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты(&ДатаНачала,
| &ДатаОкончания,
| КАК ПродажиОбороты
| ПО ПродажиОбороты.Номенклатура = СпрНоменклатура.Ссьшка
|ГДЕ
| СпрНоменклатура.ЭтоГруппа = Ложь И
| СпрНоменклатура.ВидНоменклатуры = &ВидНоменклатуры
|
180 181
Использование основных объектов конфигурации Создание отчетов
О
тчет «Выручка мастеров» будет содержать информацию о
том, какая выручка была получена OOO «На все руки
мастер» благодаря работе каждого из мастеров, с
детализацией по всем дням в выбранном периоде и
разворотом по клиентам, обслуженным в каждый из дней. На примере
этого отчета мы проиллюстрируем, как строить многоуровневые
группировки в запросе, как обходить все даты в выбранном периоде и
как управлять состоянием группировок в табличном документе.
Создадим новый объект конфигурации Отчет «ВыручкаМастеров».
Перейдем на закладку «Макет» и запустим конструктор выходной
формы.
Выберем виртуальную таблицу регистра накопления
«Продажи.Обороты». Зададим для нее значения параметров
«НачалоПериода», «КонецПериода» и «Периодичность»:
Таким образом, на примере этого отчета мы продемонстрировали,
как отбирать данные в некотором периоде, как задавать параметры
запроса и как использовать в запросе данные из нескольких таблиц и
включать в результат запроса все данные одного из источников.
182 183
Использование основных объектов конфигурации Создание отчетов
После этого выберем из таблицы следующие поля: На закладке «Отчет» сбросим флаг «Использовать построитель
отчета».
• «ПродажиОбороты.Мастер»,
На закладке «Выходная форма» отметим, что тип параметров
• «ПродажиОбороты.Период»,
«ДатаНачала» и «ДатаОкончания» будет Дата. Нажмем «ОК».
• «ПродажиОбороты.Клиент»,
• «ПродажиОбороты.ВыручкаОборот»: Сразу, как и в предыдущем отчете, определим состав даты для
полей ввода, расположенных в форме, и затем в вызове процедуры
«ВыручкаМастеров» уточним передачу последнего параметра при
помощи функции КонецДня():
ПродедураДействияФормыВыручкаМастеровСформировать(Кнопка)
//{{КОНСТРУКТОР_ВЫХОДНЬК_ФОРМ_ПРОЦЕДУРА_ВЫЗОВА
//(ВыручкаМастеров)
// Данный фрагмент построен конструктором. // При
повторном использовании конструктора, // внесенные
Теперь перейдем на закладку «Объединения/Псевдонимы» и вручную изменения будут утеряны!!!
зададим псевдоним «Выручка» для поля ТабДок = ЭлементыФормы.ТабличноеПоле; ВыручкаМастеров(ТабДок,
«ПродажиОбороты.ВыручкаОборот»: ДатаНачала, КонецДня(ДатаОкончанил));
//}}КОНСТРУКТОР_ВЬГХОДНЫХ_ФОРМ_ПРОЦЕДУРА_ВЫЗОВА
КонецПроцедуры
|УПОРЯДОЧИТЬ ПО
| Период
|
184 185
Использование основных объектов конфигурации Создание отчетов
|из
| РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаОкончания, День,)
| КАК ПродажиОбороты ,
Запрос.Текст =
"ВЫБРАТЬ
|ПродажиОбороты.Мастер КАК Мастер,
|ПродажиОбороты.Мастер.Представление,
|ПродажиОбороты.ПериодКАКПериод,
|ПродажиОбороты.Клиент,
|ПродажиОбороты.Клиент.Представление,
|ПродажиОбороты.ВыручкаОборот КАК Выручка
186 187
Использование основных объектов конфигурации Создание отчетов
ВыборкаПериод = ВыборкаМастер
.Bыбрать(ОбходРезультата3anpoca.ПоГруппировкам,
ВыборкаМастер = ВыборкаОбщийИтог
"Период", "Bce");
.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаПериод.Следующий() Цикл
Пока ВыборкаМастер.Следующий() Цикл ОбластьПериод.Параметры.Заполнить(ВыборкаПериод);
ОбластьМастер.Параметры.Заполнить(ВыборкаМастер);
ТабДок.Вывести(ОбластьПериод, ВыборкаПериод.Уровень(),, Ложь);
ТабДок.Вывести(ОбластьМастер, ВыборкаМастер.Уровень());
ВыборкаДетали = ВыборкаПериод.Выбрать();
ВыборкаПериод = ВыборкаМастер Пока ВыборкаДетали.Следующий() Цикл
.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетали);
"Пернод","Все"); ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетали.Уровень(),,Ложь);
КонецЦикла; КонецЦикла; КонецЦикла;
Пока ВыборкаПериод.Следующий() Цикл
ОбластьПериод.Параметры.Заполнить(ВыборкаПериод);
ТабДок.Вьщесп(ОбластьПериодВыборкаПериод.Уровень());
Смысл внесенных нами изменений заключается в том, что при
ВыборкаДетали = ВыборкаПериод.Выбрать();
выводе областей детальных записей и периода, мы сворачиваем
Пока ВыборкаДетали.Следующий() Цикл
ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетали);
группировки, которые по умолчанию выводятся развернутыми.
ТабДок.Вьтести(ОбластьДетальныхЗаписей,ВыборкаДетали.Уровень()); Запустим 1С:Предприятие в режиме отладки и снова выполним
КонецЦикла; КонецЦикла; КонецЦикла; отчет «ВыручкаМастеров» за период с 20.03.2004 по 20.04.2004.
188 189
Использование основных объектов конфигурации Создание отчетов
О
тчет «Перечень услуг» будет содержать информацию о том,
какие услуги и по какой цене оказывает OOO «На все руки
мастер». На его примере мы познакомимся с возможностью
получения последних значений из периодического регистра сведений и
вывода иерархических справочников.
Создадим новый объект конфигурации Отчет «ПереченьУслуг».
Перейдем на закладку «Макеты» и вызовем конструктов выходной
формы.
Выберем объектную (ссылочную) таблицу справочника
«Номенклатура» и виртуальную таблицу регистра сведений
«Цены.СрезПоследних». Для того чтобы исключить неоднозначность
имен в запросе, переименуем таблицу «Номенклатура» в
«СпрНоменклатура».
Итак, на примере этого отчета мы продемонстрировали, как
Вызовем диалог ввода параметров виртуальной таблицы
строить многоуровневые группировки в запросе, как обходить все
«ЦеныСрезПоследних» и укажем, что период будет передан в
даты в выбранном периоде и как управлять состоянием группировок в
параметре «ДатаОтчета». Затем выберем из таблиц следующие поля:
табличном документе.
• «СпрНоменклатура.Родитель»,
• «СпрНоменклатура.Ссылка»,
• «ЦеныСрезПоследних.Цена»:
190 191
Использование основных объектов конфигурации Создание отчете
На закладке «Условия» зададим условие выбора элементов Откроем модуль формы и в процедуре «ПереченьУслуг»
справочника «Номенклатура» - выбираемые элементы должны определим значение параметра запроса:
соответствовать виду номенклатуры переданному в параметре запроса
«ВидНоменклатуры»:
Запрос.УстановитьПараметрС'ВидНоменклатуры",
Перечисления.ВидыНоменклатуры.Услуга)
Запрос.УстановитьПараметр("ДатаОтчета".ДатаОтчета);
192 193
Использование основных объектов конфигурации Создание отчетов
Добавим в него еще одно значение для услуги «Диагностика» Еще раз выполним отчет, но теперь уже на другую дату
FJ д у
новая цена услуги на 01.04.2002 (это позволит нам протестировать 01.04.2004:
отчет): i
194
195
Использование основных объектов конфигурации Создание отчетов
О
- характеристики, значения которых нас интересуют.
тчет «Рейтинг клиентов» будет показывать, каков доход от
Например, диаграмма продаж видов номенклатуры по месяцам
оказания услуг каждому из клиентов за все время работы
будет состоять из точек - месяцев, серий - видов номенклатуры и
OOO «На все руки мастер». На его примере мы значений - оборотов продаж.
продемонстрируем возможность использования диаграммы для
отображения результата запроса. Диаграмма, как объект встроенного языка, имеет три области,
Здесь стоит сделать оговорку о том что, используя построитель которые позволяют управлять оформлением диаграммы - это область
построения, область заголовка и область легенды:
отчета, можно вывести данные в диаграмму исключительно с
помощью конструктора выходной формы, что мы и покажем в конце
главы. Однако для того, чтобы понимать, как устроена диаграмма, и Область
Область построения
каким образом можно заполнить ее данными, мы рассмотрим сначала заголовка
более подробный вариант.
Диаграмма
Значение серии в
точке
Область
легенды
Серия
196 197
Использование основных объектов конфигурации Создание отчетов
имена точек и серий. В случае с областью табличного документа Затем разместим под ним диаграмму с именем «Диаграмма».
имена точек и серий будут браться из верхней строки и левого столбца Изменим размеры областей диаграммы, и зададим текст области
области; в случае с таблицей значений - из заголовков колонок и заголовка - «Рейтинг клиентов»:
первой колонки.
Во-вторых, диаграмма может быть заполнена данными «вручную».
Для этого нужно создать в диаграмме несколько серий и точек, а
затем, используя метод УстановитьЗначение(), задать нужные
значения для каждой пары серия - точка.
Следует отметить, что эти два способа заполнения диаграммы не
могут комбинироваться.
В следующем примере мы будем использовать диаграмму,
расположенную в форме и заполнять ее данными «вручную»,
используя метод УстановитьЗначение().
С
оздадим в конфигураторе новый объект конфигурации Отчет
«РейтингКлиентов». Затем создадим основную форму отчета и
расположим на ней поле выбора с именем «ПолеВыбора»,
подписью «Тип диаграммы:» и подсказкой «Выбор типа диаграммы» В модуле формы создадим процедуру «Сформировать» с
(Форма | Вставить элемент управления...): заготовкой для текста запроса:
Процедура Сформировать()
Запрос = Новый Запрос;
Запрос.Текст =
КонецПроцедуры
198 199
Использование основных объектов конфигурации
Создание отчетов
Затем добавим новое поле (иконка «Добавить» в командной панели На закладке «Порядок» укажем, что строки результата нужно
над списком полей) и при помощи построителя выражений определим упорядочивать по убыванию значения поля «Доход». Нажмем «ОК» и
его как разность между выручкой и стоимостью: посмотрим, какой текст сформировал конструктор запроса:
Процедура Сформировать()
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ПродажиОбороты.Клиент.Представление КАК Клиент, |
ПродажиОбороты.ВыручкаОборот - ПродажиОбороты.СтоимостьОборот |
КАК Доход |ИЗ| РегистрНакопления.Продажи.Обороты КАК
ПродажиОбороты
|УПОРЯДОЧИТЬ ПО
| ДоходУБЫВ";
КонецПроцедуры
Процедура Сформировать()
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ПродажиОбороты.Клиент.Представление КАК Клиент, |
ПродажиОбороты.ВыручкаОборот — ПродажиОбороты.СтоимостьОборот |
КАК Доход |ИЗ
| РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты
200
201
Создание отчетов
Использование основных объектов конфигурации
203
202
Использование основных объектов конфигурации Создание отчетов
В теле модуля формы опишем заполнение списка выбора для поля Запустим 1С:Предприятие в режиме отладки и откроем отчет
«РейтингКлиентов». Обратите внимание, что при наведении курсора
выбора: на столбец гистограммы появляется подсказка:
СписокВыбора = ЭлементыФормы.ПолеВыбора.СписокВыбора;
СписокВыбора.Добавить(ТипДиаграммы.График, "График");
СписокВыбора.Добавить(ТипДиаграммы.Гистограмма, "Гистограмма");
СписокВыбора.Добавить(ТипДиаграммы.ГистограммаОбъемная, "Гистограмма 3D");
СписокВыбора.Добавитъ(ТипДиаграммы.ГистограммаГоризонтальная,
"Гистограмма горизонтальная");
СписокВыбора.Добавить(ТипДиаграммы.ГистограммаГоризонтальнаяОбъемная,
"Гистограмма горизонтальная 3D");
СписокВыбора.Добавить(ТипДиаграммы.Круговая, "Круговая");
СписокВыбора.Добавить(ТипДиаграммы.КруговаяОбъемная,"Круговая объемная");
СписокВыбора.Добавить(ТипДиаграммы.Изометрическая," Изометрическая");
СгшсокВыбора.Добавить(ТипДиаграммы.ИзометрическаяНепрерывная,
"Изометрическая непрерывная");
СписокВыбора.ДобавитьСГипДиаграммы.ИзометрическаяЛента,
"Изометрическая лента");
СписокВыбора.Добавить(ТипДиаграммы.ИзометрическаяПирамида,
"Изометрическая пирамида");
Теперь изменим тип диаграммы на «Круговая объемная>:
ПроцедураПолеВыбораПриИзмененииЭлемент)
ЭлементыФормы.Диаграмма.ТипДиаграммы = ПолеВыбора;
КонецПроцедуры ______________________________________
204 205
Использование основных объектов конфигурации
т Создание отчетов
Диаграмма = ЭлементыФормы.Диаграмма;
//запретить автотранспонирование диаграммы
Диаграмма.АвтоТранспонирование = Ложь;
ЭлементыФормы.Диаграмма.ИсточникДанных = Запрос,Выполнить().Выгрузить();
206
207
Использование основных объектов конфигурации Создание отчетов
н
Исходными данными для построителя отчета является текст
Универсальный отчет запроса. На его основании построитель отчета определяет, какие
а примере создания универсального отчета мы познакомимся с параметры будут доступны для настройки и каким образом возможна
объектом встроенного языка ПостроительОтчета и настройка состава и порядка итоговых данных. Затем происходит
узнаем как работать со сводной таблицей. программное или интерактивное формирование этих настроек и вывод
результатов в табличный документ, диаграмму, сводную таблицу или
Построитель отчета сводную диаграмму.
остроитель отчета является объектом встроенного языка,
позволяющим выполнять различные настройки запроса в
ходе выполнения программы. Такие настройки могут
выполняться как средствами встроенного языка (в результате
некоторого алгоритма работы программы), так и
работы
интерактивно, непосредственно пользователем.
208
209
Использование основных объектов конфигурации Создание отчетов
М
метода ЗаполнитьНастройки() следующим образом:
ы с вами рассмотрим один из вариантов использования
• полями, доступными для выбора в качестве полей отбора, построителя отчета, в котором результаты отчета будут
порядка или вывода в отчет (свойство «ДоступныеПоля»), выводиться в сводную таблицу.
становятся все поля из списка выборки и все их подчиненные Создадим в конфигураторе новый объект
конфигурации Отчет «Универсальный». Этот отчет будет иметь
поля,
реквизит «ПостроительОтчета», с типом ПостроительОтчета.
• в список полей, выбранных для вывода в отчет (свойство
«ВыбранныеПоля»), добавляются все поля из списка выборки, В модуле отчета создадим текст запроса для построителя отчета.
Для этого вставим в модуль следующие строки:
• полями, доступными для выбора в качестве измерений,
становятся все поля из предложения ИТОГИ ПО и все их
ПостроительОтчета.Текст =
подчиненные поля, ;
• в список измерений по строкам (свойство
«ИзмеренияСтроки») добавляются все поля из предложения
ИТОГИПО, Установим курсор перед символом точки с запятой и вызовем
• в доступные отборы (свойство «Отбор») добавляются конструктор запросов (Текст | Конструктор запроса...).
параметры виртуальных таблиц. В качестве таблицы выберем виртуальную таблицу регистра
накопления «Продажи.Обороты». Из этой таблицы выберем все поля:
Вторым способом формирования параметров настроек построителя
отчета является выделение их в тексте запроса. Для этого
используются фигурные скобки «{}». Фигурными скобками могут
быть выделены параметры построителя отчета, а также некоторые
синтаксические конструкции:
• ВЫБРАТЬ ... - описывает поля, которые пользователь сможет
выбирать для вывода,
• ГДЕ ... - описывает поля, на которые пользователь может
накладывать ограничения,
• УПОРЯДОЧИТЬПО ... - описывает поля для обозначения Ha закладке «Итоги» укажем получение общих итогов и выберем
все ресурсы регистра:
порядка,
• ИТОГИ ПО ... - описывает поля, по которым будут
выводиться итоговые значения.
После того, как значения параметров указаны, вывод результатов
запроса возможен как принудительно (используя методы Выполнить()
и Вывести()), либо автоматически, если результаты выводятся в
сводную таблицу.
210 211
Использование основных объектов конфигурации Создание отчетов
Нажмем «OK». B модуле отчета появится текст сформированного Теперь создадим форму отчета и расположим на ней поле
запроса: табличного документа (Форма | Вставить элемент управления I
Поле табличного документа) с именем
ПостроительОтчета.Текст =
«ПолеТабличногоДокумента»:
"ВЫБРАТЬ
| ПродажиОбороты.Номенклатура,
| ПродажиОбороты.Номенклатура.Представление, Расположим в форме поле табличного документа
| ПродажиОбороты.Клиент,
| ПродажиОбороты.Клиент.Представление,
| ПродажиОбороты.Мастер,
| ПродажиОбороты.Мастер.Представление,
| ПродажиОбороты.КоличествоОборот КАК КоличествоОборот,
| ПродажиОбороты.ВыручкаОборот КАК ВыручкаОборот,
| ПродажиОбороты.СтоимостьОборот КАК СтоимостьОборот
|ИЗ
| РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты
|
|ИТОГИ СУММАСКоличествоОборот), СУММА(ВыручкаОборот),
| СУММА(СтоимостьОборот)
| ПООБЩИЕ";
ПостроительОтчета.Текст =
"ВЫБРАТЬ
| ПродажиОбороты.Номенклатура,
| ПродажиОбороты.Номенклатура.Представление,
| ПродажиОбороты.Клиент,
| ПродажиОбороты.Клиент.Представление, Затем установим курсор в верхнюю левую ячейку поля табличного
| ПродажиОбороты.Мастер, документа и выполним
| ПродажиОбороты.Мастер.Представление,
| ПродажиОбороты.КоличествоОборот КАК КоличествоОборот,
Таблица | Встроенные таблицы | Вставить сводную таблицу.
| ПродажиОбороты.ВыручкаОборот КАК ВыручкаОборот, После этого создадим обработчик события формы отчета «При
| ПродажиОбороты.СтоимостьОборот КАК СтоимостьОборот открытии», и добавим в него следующий текст:
|ИЗ
| РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты
Процедура ПриОткрытии() СводнаяТаблица =
|{ИТОГИ ПО Номенклатура, Клиент, Мастер} ЭлементыФормы.ПолеТабличногоДокумеита
■ВстроенныеТаблицы.СводнаяТаблица1,'
|ИТОГИ СУММАСКоличествоОборот), СУММА(ВыручкаОборот), СводнаяТаблица.ИсточникДанных = ПостроительОтчета;
| СУММА(СтоимостьОборот) КонецПроцедуры
| ПООБЩИЕ";
Этим текстом мы устанавливаем сводной таблице в качестве
источника данных построитель отчета.
212 213
Использование основных объектов конфигурации Создание отчетов
Запустим 1С:Предприятие в режиме отладки и откроем отчет Теперь в окне выбора полей сводной таблицы раскроем группу
«Универсальный». На экране появится форма отчета, и окно выбора «Номенклатура» и добавим значение «(Без иерархии)» в строки, а
полей сводной таблицы: измерение «Клиент» добавим в колонки. Отчет изменит свой вид:
214 215
Использование основных объектов конфигурации Создание отчетов
216 217
Использование основных объектов конфигурации Создание отчетов
После этого для командной панели «КоманднаяПанельПоля» Табличному полю «ТабличноеПолеПорядок» укажем источник
установим флаг «Автозаполнение» и в качестве источника действий данных ОтчетОбъект.ПостроительОтчета.Порядок, и у командной
укажем ТабличноеПолеПоля: панели «КоманднаяПанельПорядок» поднимем флаг
«Автозаполнение» и укажем в качестве источника действий
ТабличноеПолеПорядок:
218 219
Использование основных объектов конфигурации Создание отчетов
Теперь в нижней части формы разместим еще одну надпись с | РегистрНакопления.Продажи КАК Продажи
именем «Оформление» и заголовком «Оформление:», а под ним поле |
|{УПОРЯДОЧИТЬ ПО Номенклатура.*, Клиент.*, Мастер.*}
выбора с именем «ПолеВыбораОформление»: |
|ИТОГИ СУММА(Количество),
| Сумма(Выручка),
| Сумма(Стоимость)
| ПО ОБЩИЕ";
220 221
Использование основных объектов конфигурации Создание отчетов
222 223
Использование основных объектов конфигурации Создание отчетов
в
конструкторе выходной формы
заключение этой главы мы рассмотрим некоторые из
созданных нами только что отчетов, но построенные уже с
использованием построителя отчета в конструкторе выходной
формы.
Отчет УниверсальныйЗ
224 225
Использование основных объектов конфигурации Создание отчето!
представления (например, для табличного документа - размещение Запустим 1С:Предприятие в режиме отладки, откроем отчет
группировок, реквизитов, итогов, наличие группировок и т.д.). «УниверсальныйЗ», нажмем кнопку «Настройка...» и установим
В нашем случае согласимся с параметрами, которые конструктор параметры выбранных полей и порядка такими же, как в последнем
предложил по умолчанию, единственное, что мы изменим - вариант примере с отчетом «Универсальный2»:
стандартного оформления установим «Асфальт».
Перейдем на закладку «Выходная форма» и откроем закладку: • выбранные поля: «Клиент», «Номенклатура»
«ВыручкаОборот»,
«Форма настройки построителя отчета»: • порядок: «Клиент» по возрастанию:
T
В нашем случае мы снова согласимся с тем, что конструктор
еперь, мы создадим отчет, аналогичный
предлагает по умолчанию, и нажмем «ОК».
отчету
Конструктор сформирует форму отчета и форму настроек отчета. «ВыручкаМастеров», который будет выводить результат в
сводную диаграмму.
Откроем конфигуратор и создадим новый объект
226 227
Использование основных объектов конфигурации Создание отчетов
конфигурации Отчет с именем «ВыручкаМастеров2». Запустим Теперь зададим условие отбора таким, что значение поля
конструктор выходной формы, и выберем поля «Мастер», «Клиент», «Номенклатура.ВидНоменклатуры» должно быть равно «Материал»
«ВыручкаОборот» и «СтоимостьОборот» из виртуальной таблицы (для ввода условия отбора можно использовать клавишу «Insert»). И в
регистра накопления «Продажи». На закладке «Итоги» укажем заключение, после того как диаграмма будет заново сформирована,
группировочные поля «Мастер» и «Клиент» и суммируемые поля раскроем группу серий «ВыручкаОборот»:
«ВыручкаОборот» и «СтоимостьОборот». В заключение на закладке
«Отчет» отметим, что результат должен быть выведен только в
сводную диаграмму. Нажмем «ОК».
Запустим 1С:Предприятие в режиме отладки и откроем отчет
«ВыручкаМастеров2». На закладке «Настройка» укажем, что порядок
вывода должен быть по убыванию значения поля «ВыручкаОборот».
После этого двойным щелчком мыши по полю сводной диаграммы
откроем окно выбора параметров диаграммы и в точки диаграммы
поместим поле «Мастер», в серии - поле «Клиент», а поля
«ВыручкаОборот» и «СтоимостьОборот» поместим в данные:
228 229
Оптимизация процедуры проведения документа ОказаниеУслз
такой указатель в полях других таблиц базы данных, выбирать его в приводит к тому, что мы просто читаем данные, хранящиеся в
оперативной памяти:
поле ввода, указывать в параметрах запроса при поиске по ссылке и
т.д. Во всех этих случаях как раз и будет использоваться объект
встроенного языка вида Ссылка. Фактически этот объект хранит
Ссылка на Номенклатуру? Ссылка
только внутренний идентификатор, находящийся в поле «Ссылка».
Например, если взять наш документ «ОказаниеУслуги», то в поле,
хранящем реквизит табличной части «Номенклатура» на самом деле
находится внутренний идентификатор, указывающий на элемент
справочника «Номенклатура»:
Если ТекСтрокаПереченьНоменклатуры.Номенклатура.ВидНоменклатуры о
Когда в обработчике события «ОбработкаПроведения» документа ________________________
«ОказаниеУслуги» мы присваиваем з^начение реквизита ________________________
«Номенклатура» табличной части какой-либо переменной, мы имеем ________________________ Перечисления.ВидыНоменклатуры.Материал
дело с объектом ДокументОбъект.ОказаниеУслуги. Этот объект Toгда
содержит в себе значения всех реквизитов документа и реквизитов его
табличных частей. Поэтому обращение:
Движение.Материал = ТекСтрокаПереченьНоменклатуры.Номенклатура;
234 235
Оптимизация процедуры проведения документа ОказаниеУслуги
Использование основных объектов конфигурации
*■ Узнай больше!
Более подробно об устройстве кэша объектов можно прочитать
в главе «Кэш объектов» на странице 554.
237
236
Использование основных объектов конфигурации Оптимизация процедуры проведения документа ОказаниеУслуги
П
ервое, что мы сделаем для оптимизации документа понадобится нам для анализа того, чем является номенклатура,
«ОказаниеУслуги» - удалим реквизит табличной части указанная в документе: материалом или услугой:
«Стоимость», который нам не понадобится в будущем.
Также следует удалить соответствующую колонку из
табличного поля, расположенного в форме.
После этого можно полностью удалить содержимое обработчика
события «ОбработкаПроведения» в модуле документа и создать в нем
заготовку процедуры проведения. Текст запроса, выполняемого в
режиме оперативного проведения, будет отличаться от запроса, Теперь задумаемся о том, что для указания значений ресурса
выполняемого при неоперативном проведении, поэтому формирование «Стоимость» регистров «СтоимостьМатериалов» и «Продажи» нам
текста запроса мы включим в условие Если ... Иначе ... КонецЕсли: понадобится рассчитать текущую стоимость номенклатуры как
частное стоимости остатка этого материала и его оставшегося
Процедура ОбработкаПроведения(Отказ, Режим)
количества.
Запрос = Новый Запрос; Поэтому добавим к списку выбранных таблиц еще две таблицы:
Если Режим = РежимПроведенияДокумента.Оперативный Тогда
Запрос.Текст = • «РегистрНакопления.СтоимостьМатериалов.Остатки»,
Иначе Запрос.Текст • «РегистрНакопления.ОстаткиМатериалов.Остатки»:
=
КонецЕсли;
КонедПроцедуры
238 239
Использование основных объектов конфигурации Оптимизация процедуры проведения документа ОказаниеУслуги
Условие получения данных указывает, что остатки должны быть Кроме того, что подобный вариант снижает производительность
получены только по тем позициям номенклатуры, которые содержатся конфигурации, могут возникать ситуации, когда результаты,
в проводимом документе (перед выполнением запроса мы передадим в полученные одним и другим способом, будут различны. Такое,
параметр «СписокНоменклатурыДокумента» список всех позиций например, вполне возможно при использовании виртуальной таблицы
номенклатуры, содержащихся в проводимом документе): регистра сведений «СрезПоследних». Более подробно можно
прочитать об этом на диске ИТС (информационно
технологического сопровождения) в статье «Использование отборов
в запросах с виртуальными таблицами».
f Узнай больше!
Следует внимательно подходить к использованию виртуальных
таблиц запросов. В частности, необходимо уделять особое внимание
максимально возможному использованию параметров этих таблиц.
Например, в нашем случае можно было бы и не использовать
параметр «Условие», а ограничить выбранные поля уже в самом
запросе, указав вусловии ПОравенство номенклатуры из документа и Теперь вспомним о том, что документы «ОказаниеУслуги» могут
материала из таблицы остатков. В результате мы получили бы тот быть проведены как в оперативном, так и в неоперативном режиме.
же самый результат, однако no производительности этот способ
сильно отличался бы от того, который мы используем. *" Узнай больше!
В самом деле, в нашем варианте виртуальная таблица О концепции оперативного и неоперативного проведения
предоставит нам ровно столько записей, сколько различных документов можно прочитать в главе «Концепция оперативного и
элементов номенклатуры содержится в проводимом документе. Если неоперативного проведения документов» на странице 541.
же не указывать условие, виртуальная таблица предоставит нам
записи no абсолютно всем элементам номенклатуры, информация о Поскольку в оперативном режиме нам понадобится контролировать
которых есть в регистре накопления. И уже в самом нашем запросе остатки списываемой номенклатуры на складе, выберем еще раз
мы будем отбирать из этой огромной массы записей лишь несколько, виртуальную таблицу регистра накопления «ОстаткиМатериалов» и
которые нам действительно нужны. переименуем ее в «ОстаткиМатериаловОстаткиНаСкладе»:
Очевидно, что второй вариант будет работать дольше, и время
выполнения такого запроса будет зависеть в основном не от
количества данных, содержащихся в документе (т.е. реального
количества обрабатываемой информации), а от размера регистра
накопления.
240 241
Использование основных объектов конфигурации Оптимизация процедуры проведения документа ОказаниеУслуги
Для этой виртуальной таблицы мы также укажем тп Теперь перейдем на закладку «Дополнительно» и установим флаг
«МоментВремени», а в условии напишем, что материал должен «Для изменения». Предложение ДЛЯ ИЗМЕНЕНИЯ позволяет
находиться в списке номенклатуры и склад должен быть равен складу заблаговременно заблокировать чтение указанных данных (которые
указанному в документе: мОгут читаться транзакцией другого соединения) уже при считывании,
чтобы исключить взаимные блокировки при записи. Это предложение
дает возможность указать в запросе таблицы, считываемые данные
которых предполагается изменять.
242 243
Использование основных объектов конфигурации Оптимизация процедуры проведения документа ОказаниеУслуги
Процедура ОбработкаПроведения(Отказ, Режим) Запрос = Новый Как видите, в запросе нет ничего сложного за исключением, быть
Запрос; Если Режим = РежимПроведенияДокумента.Оперативный может, трех левых соединений с таблицей табличной части документа
Тогда
Запрос.Текст =
и использования ключевого предложения ДЛЯ ИЗМЕНЕНИЯ,
"ВЫБРАТЬ значение которого было объяснено выше.
| ОказаниеУслугиПереченьНоменклатуры.Номенклатура,
| ОказаниеУслугиПереченьНоменклатуры.Количество,
Текст запроса для случая неоперативного проведения документа
| ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры будет практически таким же, за исключением того, что в нем будет
| КАК ВидНоменклатуры. отсутствовать третье левое соединение и, соответственно, поле
I ОказаниеУслугиПереченьНоменклатуры.Сумма, «КоличествоОстатокНаСкладе», т.к. проверку остатков в этом случае
I ОстаткиМатериаловОстатки.КоличествоОстаток, мы выполнять не будем:
I СтоимостьМатериаловОстатки.СтоимостьОстаток,
I ОстаткиМатериаловОстаткиНаСкладе.КоличествоОстаток
I КАК КоличествоОстатокНаСкладе
«ИЗ Иначе
I Документ.ОказаниеУслуги.ПереченьНоменклатуры Запрос.Текст =
1 КАК ОказаниеУслугиПереченьНоменклатуры "ВЫБРАТЬ
I ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьМатериалов.Остатки(
| ОказаниеУслугиПереченьНоменклатуры.Номенклатура, |
I &МоментВремени,
ОказаниеУслугиПереченьНоменклатуры.Количеотво, |
I Материал В (&СписокНоменклатурыДокумента))
ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры |
I КАК СтоимостьМатериаловОстатки
КАК ВидНоменклатуры, | ОказаниеУслугиПереченьНоменклатуры.Сумма, |
1 ПО ОказаниеУслугиПереченьНоменклатуры.Номенклатура =
ОстаткиМатериаловОстатки.КоличествоОстаток, |
t СтоимостъМатериаловОстатки.Материал
СтоимостьМатериаловОстатки.СтоимостьОстаток |ИЗ
I ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.Остатки(
| Документ.ОказаниеУслуги.ПереченьНоменклатуры | КАК
1 &МоментВремени,
I Материал В (&СписокНоменклатурыДокумента)) ОказаниеУслугиПереченьНоменклатуры | ЛЕВОЕ СОЕДИНЕНИЕ
РегистрНакопления.СтоимостьМатериалов.Остатки(
I КАК ОстаткиМатериаловОстатки
I ПО ОказаниеУслугиПереченьНоменклатуры.Номенклатура = &МоментВремени,
I ОстаткиМатериаловОстатки.Материал Материал В (&СписокНоменклатурыДокумента))
I ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.Остатки( I КАК СтоимостьМатериаловОстатки
I &МоментВремени, I ПО ОказаниеУслугиПереченьНоменклатуры.Номенклатура =
I Материал В (&СписокНоменклатурыДокумента) И I СтоимостьМатериаловОстатки .Материал
I Склад = &СкладВДокументе) I ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.Остатки(
I КАК ОстаткиМатериаловОстаткиНаСкладе I &МоментВремени,
I ПО ОказаниеУслутиПереченьНоменклатуры.Номенклатура = Материал В (&СписокНоменклатурыДокумента))
I ОстаткиМатериаловОстаткиНаСкладе.Материал I КАК ОстаткиМатериаловОстатки I ПО
ОказаниеУслугиПереченьНоменклатуры.Номенклатура =
1ГДЕ __
244 245
Использование основных объектов конфигурации Оптимизация процедуры проведения документа ОказаниеУслуги
ВыборкаРезультатаЗапроса = Запрос.Выполнить().Выбрать();
| РегистрНакопления.ОстаткиМатериалов.Остатки";
КонецЕсли;
Теперь, прежде чем начать формирование движений по регистрам,
Запрос.УстановитьПараметрС'МоментВремени", МоментВремени()); нам нужно проверить наличие на складе достаточного количества
Запрос.УстановитьПараметрО'СписокНоменклатурыДокумента", номенклатуры:
ПереченьНоменклатуры.ВыгрузитьКолонку("Номенклатура"));
Запрое.УстановитьПараметр("Ссылка",Ссылка);
КонецЕсли;
Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
Обратите внимание, что для формирования списка номенклатуры Запрос.УстановитьПараметр("СписокНоменклатурыДокумента",
документа мы используем метод ВыгрузитьКолонку() объекта ПереченьНоменклатуры.ВыгрузитьКолонкуС'Номенклатура"));
ДокументТабличнаяЧасть.ОказаниеУслуги.ПереченьНоменклат Запрос.УстановитьПараметр("Ссылка",Ссылка);
УРЫ. ВыборкаРезультатаЗапроса =
Запрос.Выполнить().Выбрать(); Пока
ВыборкаРезультатаЗапроса.Следующий() Цикл
246 247
Оптимизация процедуры проведения документа ОказаниеУслуги
Использование основных объектов конфигурации
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
КонедЕсли;
Движение.Период = Дата;
КонецЦикла;
Движение.Материал = ВыборкаРезультатаЗапроса.Номенклатура;
КонецПроцедуры
//расчитать стоимость материала
СтоимостьМатериала =
И в заключение добавим формирование движений по регистрам ?(ВыборкаРезультатаЗапроса.КоличествоОстаток = Null, 0,
накопления: ВыборкаРезультатаЗапроса.СтоимостьОстаток /
ВыборкаРезультатаЗапроса.КоличествоОстаток); Движение.Стоимость =
СтоимостьМатериала *
ВыборкаРезультатаЗапроса.Количество;
КонецЕсли; КонецЕсли;
Запрос.УстановитьПараметр(" МоментВремени", МоментВремени());
Запрос.УстановитьПараметр(" СписокНоменклатурыДокумента", // регистр Продажи
ПереченьНоменклатуры.ВыгрузитьКолонкуС'Номенклатура")); Движение = Движения.Продажи.Добавить();
Запрос.УстановнтьПараметр(" Ссылка" ,Ссылка); Движение.Период = Дата;
Движение.Номенклатура = ВыборкаРезультатаЗанроса.Номенклатура;
ВыборкаРезультатаЗапроса = Запрос.Вьшолнить().Выбрать(); Движение.Клиент = Клиент;
Движение.Мастер = Мастер;
Пока ВыборкаРезультатаЗапроса.Следующий() Цикл Движение.Количество = ВыборкаРезультатаЗапроса.Количество;
Движение.Выручка = ВыборкаРезультатаЗапроса.Сумма;
//Провернть остаток при оперативном проведении Если Режим — Если ВыборкаРезультатаЗапроса.ВидНоменклатуры =
РежимПроведенияДокумента.Оперативный Тогда Если Перечисления.ВидыНоменклатуры.Материал Тогда
ВыборкаРезультатаЗапроса.ВидНоменклатуры = Движение.Стоимость = СтоимостьМатериала *
Перечисления.ВидыНоменклатуры.МатериалТогда ВыборкаРезультатаЗапроса.Количество;
Остаток = ?(ВыборкаРезультатаЗапроса.КоличествоОстатокНаСкладе = Null, Иначе
0, ВыборкаРезультатаЗапроса.КоличествоОстатокНаСкладе); Движение.Стоимость = 0;
Если Остаток < ВыборкаРезультатаЗапроса.Количество Тогда КонецЕсли; КонецЦикла;
Сообщить("Материала" +
СокрЛП(ВыборкаРезультатаЗапроса.Номенклатура) + " имеется только // записать движения регистров
" + Остаток); Отказ = Истина; Возврат; КонецЕсли; КонецЕсли; Движения.ОстаткиМатериалов.Записать();
КонецЕсли; Движения.СтоимостьМатериалов.Записан,();
Движения.Продажи.Записать();
//Сформировать движения КонецПроцедуры
Если ВыборкаРезультатаЗапроса.ВидНоменклатуры =
Перечисления.ВидыНоменклатуры.Материал Тогда
// регистр ОстаткиМатериалов Расход Запустим 1С:Предприятие в режиме отладки и проверим работу
Движение = Движения.ОстаткиМатериалов.Добавить(); нового обработчика события «ОбработкаПроведения», перепроведя
Движение.ВидДвижения = ВидДвиженияНакопления.Расход; все документы «ОказаниеУслуги».
Движение.Период = Дата;
Движение.Материал = ВыборкаРезулыатаЗапроса.Ноченклатура; В заключение следует сделать небольшое отступление, которое
Движение.Склад = Склад; касается задания параметров виртуальных таблиц, использовавшихся в
Движение.Количество = ВыборкаРезультатаЗапроса.Количество; наших запросах.
// регистр СтоимостьМатериалов Расход
Движение = Движения.СтоимостьМатериалов.Добавить();
248
249
Использование основных объектов конфигурации Оптимизация процедуры проведения документа ОказаниеУслуги
250 251
План видов характеристик
З
адача, которую мы перед собой поставим, будет заключаться в
В этой главе мы познакомимся с новым объектом конфигурации - следующем: мы создадим механизм, который позволит
План видов характеристик - и узнаем, каким образом можно пользователю произвольным образом описывать материалы, и,
использовать этот объект для расширения возможностей нашей что самое главное, вести учет в разрезе всех тех описаний, которые
конфигурации. могут быть заданы пользователем.
Описывать материалы пользователь сможет следующим образом:
для каждого материала будет возможность создать некоторые
(произвольные) характеристики этого материала (например, цвет,
производитель и пр.). Затем, при поступлении материалов можно
будет задать конкретные значения интересующих характеристик
(например, при поступлении электрических кабелей можно будет
указать, что они белого цвета и их сечение равно 2,5 мм2, а при
поступлении резиновых шлангов указать, что они черного цвета и
произведены на фирме «Fagumit Sp. z о.о.»).
В дальнейшем всегда можно будет получить информацию о том,
сколько и каких материалов есть у нас, скажем, белого цвета, или
сколько было израсходовано черных резиновых шлангов.
Поскольку заранее не известно, какими именно характеристиками
пользователь захочет описать тот или иной материал, мы должны
предоставить ему некоторый механизм, позволяющий создавать
любые характеристики и, что самое важное, указывать, какой тип
значения должен быть у этих характеристик. Тогда при задании
значений определенной характеристики пользователь сможет
выбирать значения строго в соответствии с указанным типом.
Такую возможность описания характеристик как раз и
обеспечивает объект конфигурации План видов характеристик, с
которым мы сейчас познакомимся.
253
252
Использование основных объектов конфигурации План видов характеристик
О
бъект конфигурации План видов характеристик является
прикладным объектом и предназначен для описания %Для тех, ктоработал с версией 7.7.
структуры хранения информации о характеристиках, В версии 7.7 нет прямого соответствия прикладному объекту
создаваемых пользователем. На основе объекта конфигурации план видов характеристик. Точнее всего будет сказать,
конфигурации План видов характеристик платформа создает в базе что один план видов характеристик включает в себя me
данных информационную структуру, в которой может храниться функциональные возможности, которыми в версии 7.7 обладали все
информация о том, какие существуют виды характеристик и какой тип объекты конфигурации вида «Вид субконто». Таким образом, в
должно иметь значение характеристики каждого вида. терминах 7.7, планы видов характеристик позволяют создавать
В сущности, план видов характеристик очень напоминает несколько «наборов» объектов «Вид субконто».
справочник. Однако план видов характеристик имеет более узкую Однако описание механизма ведения аналитического учета на
«специализацию»: он хранит, по сути, информацию только о том, счетах не является теперь основной задачей для плана видов
какими видами характеристик может описываться какой-либо объект характеристик. Использование подобного механизма было обобщено в
базы данных. Эта информация состоит из названия вида виде возможности задания переменного количества свойств, которые
характеристики и ее типа. Разработчик и, что самое важное, могут описывать объект конфигурации. Причем возможность
пользователь могут задать в нем любое необходимое им количество задания свойств существует как в режиме Конфигуратора, так и в
видов характеристик. режимеработы пользователя «1С:Предприятие».
Для того чтобы разработчик мог задать некий «набор» возможных Работа с планом счетов рассматривается теперь не как основное
типов значений, которые могут принимать виды характеристик, у предназначение плана видов характеристик, а как частный случай,
объекта конфигурации План видов характеристик существует свойство вытекающий из его возможностей. Конечно, как мы увидим далее,
Тип значения характеристик. Это свойство определяет составной тип взаимодействие плана видов характеристик с планом счетов
данных, в который входят все типы, которые могут понадобиться при максимально автоматизировано средствами платформы (no
указании типа значения характеристики. сравнению с взаимодействием с другими объектами конфигурации).
Кроме этого может случиться так, что пользователю станет Однако основной акцент делается на универсальность механизма,
недостаточно тех типов данных, которые существуют в конкретной предоставляемого планом видов характеристик. В частности это
системе (например, он захочет вести учет в разрезе цвета товаров, а видно и из названия объекта, где вместо слова субконто (разрез
справочник Цвет в конфигурации отсутствует). В этом случае он аналитического учета) теперь используется слово характеристика,
сможет воспользоваться неким вспомогательным справочником, обозначающее свойство объекта конфигурации, описанное вне его
который разработчик создаст заблаговременно и укажет в качестве самого (в другом объекте конфигурации).
свойства объекта конфигурации План видов характеристик -
дополнительные значения характеристик.
Тогда пользователь, создав новый вид характеристики «Цвет»,
сможет создать необходимые значения этого вида характеристики в
справочнике дополнительных значений характеристик.
Примечательно, что этот справочник является подчиненным плану
видов характеристик. Таким образом, если затем пользователь
254 255
Использование основных объектов конфигурации План видов характеристик
256 257
Использование основных объектов конфигурации План видов характеристик
К
ак мы уже говорили, нам понадобится создать несколько
новых объектов конфигурации. Создадим объект
конфигурации Справочник с именем
«ВариантыНоменклатуры» и укажем, что он будет подчинен
справочнику «Номенклатура».
Затем создадим еще один объект конфигурации Справочник с
именем «ДополнительныеСвойстваНоменклатуры».
После этого создадим объект конфигурации План видов
характеристик с именем «СвойстваНоменклатуры». Тип значения
характеристик установим следующим:
258 259
Использование основных объектов конфигурации План видов характеристик
Справочнику «ДополнительныеСвойстваНоменклатуры» укажем определение представляет собой составной тип данных, как он задан в
владельца - план видов характеристик «СвойстваНоменклатуры» типе значения соответствующего плана видов характеристик. To есть
После этого определим, что дополнительные значения характеристик ресурс регистра может иметь значение любого типа из тех, которые
плана видов характеристик будут располагаться в справочнике описаны в типе значения плана видов характеристик.
«ДополнительныеСвойстваНоменклатуры»:
Доработка справочника Номенклатура
П
режде всего, в справочнике «Номенклатура» нам нужно
обеспечить возможность редактирования варианта
материала. Для этого укажем, что справочник
«Номенклатура» будет редактироваться теперь обоими
способами, в списке и в диалоге, и создадим основную форму
элемента при помощи конструктора. Немного раздвинем форму по
ширине и высоте и добавим в нее панель
(Форма | Вставить элемент управления | Панель):
260 261
т План видов характеристик
263
262
Использование основных объектов конфигурации План видов характеристик
После этого выделим все элементы управления, расположенные Под этой надписью расположим табличное поле с командной
панели, и выполним команду панелью с именем «Варианты» и типом
Форма | Центрирование | Центрировать по вертикали: СправочникСписок.ВариантыНоменклатуры. Из табличного поля
удалим колонку «Код». Для этого табличного поля установим
свойство «Связь по владельцу» - СправочникОбъект.Ссылка:
264 265
План видов характеристик
Использование основных объектов конфигурации
267
266
Использование основных объектов конфигурации План видов характеристик
Чтобы избежать такой ситуации, нам нужно будет при смене Доработка справочника ВариантыНоменклатуры
Т
значения в поле «Вид свойства» привести значение поля «Значение» к
еперь нам следует доработать
типу характеристики, выбранной в поле «Вид свойства». справочник
Поэтому для поля ввода в колонке «Вид свойства» создадим «ВариантыНоменклатуры» таким образом, чтобы
обработчик события «При изменении»: пользователь имел возможность создавать новые свойства
материалов не только при редактировании самого материала, но и в
Процедура СвойстваВидСвойстваПриИзмененииЭлемент) ДанныеВидСвойства процессе ввода документов, когда в табличную часть подбирается
= ЭлементыФормы.Свойства.ТекущиеДанные.ВидСвойства; набор свойств.
ЭлементыФормы.Свойства.ТекущиеДанные.Значение =
ДанныеВидСвойства.ТипЗначения Поэтому для справочника «ВариантыНоменклатуры» укажем, что
.ПривестиЗначение(ЭлементыФормы.Свойства.ТекущиеДанные.Значение); он будет редактироваться обоими способами (как в списке, так и в
КоиецПроцедуры _________________________________________________________ диалоге) и создадим с помощью конструктора основную форму
элемента.
Теперь нам нужно сделать так, чтобы в табличном поле «Свойства»
Доработка формы элемента справочника
отображались записи регистра сведений, относящиеся только к «ВариантыНоменклатуры» будет сводиться, по большому счету, к тем
выбранному в верхнем табличном поле элементу справочника же действиям, которые мы выполнили с формой справочника
«ВариантыНоменклатуры». «Номенклатура». В форме нам нужно будет расположить табличное
Поэтому для табличного поля «Варианты» создадим обработчик поле, которое должно отображать существующие в регистре сведений
события «При активизации строки»: записи о значениях свойств для этого элемента справочника.
Откроем основную форму элемента справочника
ПроцедураВариантыПриАктивизацииСтрокиСЭлемент) «ВариантыНоменклатуры» и раздвинем форму вниз. На
ЭлементыФормы.Свойства.Значение.Отбор.НаборСвойств освободившемся пространстве поместим табличное поле с именем
.Установить(Элемент.ТекущиеДанные.Ссылка, Истина);
«Свойства», типом
КонедПроцедуры
РегистрСведенийСписок.ЗначенияСвойствНоменклатуры и
командной панелью. Для колонки «НаборСвойств» снимем флаг
Кроме этого, чтобы не отображать весь регистр при открытии видимости:
формы, создадим обработчик события формы «ПриОткрытии»,
содержащий следующий текст:
Процедура ПриОткрытии()
ЭлементыФормы.Свойства.Значение.Отбор.НаборСвойств.Установить(,Истина);
КонедПроцедуры
268 269
Использование основных объектов конфигурации План видов характеристик
Затем для поля ввода, расположенного в колонке «Значение» И в заключение нужно предусмотреть возможность того, что
зададим связь по типу пользователь может начать задавать новые значения свойств, не
ЭлементыФормы.Свойства.ТекущиеДанные.ВидСвойства. записав еще сам элемент справочника «НаборыСвойств».
Для поля ввода, расположенного в колонке «ВидСвойства» Поэтому создадим обработчик события табличного поля
создадим обработчик события «ПриИзменении»: «ПередНачаломДобавления»:
Теперь необходимо сделать так, чтобы при открытии формы Доработка регистра ОстаткиМатериалов
Д
устанавливался нужный нам отбор, а также, в случае, если мы ля того чтобы обеспечить учет материалов по значениям
добавляем новый элемент справочника, чтобы отбор устанавливался и характеристик нам нужно будет изменить структуру регистра
после того, как элемент будет записан. Для этого мы воспользуемся накопления «ОстаткиМатериалов» и добавить в него новое
возможностью назначения обработчика события изменения данных, измерение «НаборСвойств» с
который будет отслеживать изменения ссылки на редактируемый типом
элемент справочника. СправочникСсылка.ВариантыНоменклатуры:
Узнай больше!
О событиях, связанных с формой, можно прочитать в главе
«События, связанные с формой» на странице 547.
Процедура ПриИзмененииСсылки(ПутьКДанным)
Cвойства.Отбор.Ha6opCвойств.Установить(Cсылка,"Истина");
КонецПроцедуры
Затем в тело модуля формы добавим вызов этого обработчика: Доработка документа ПриходнаяНакладная
ПодключитьОбработчикИзмененияДанныхССправочникОбъект.Ссылка",
"ПриИзмененииСсылкн"); П оследнее, что нам осталось - доработать документ
«ПриходнаяНакладная». Для того чтобы при приходовании
товаров пользователь мог указывать набор свойств для
каждого приходуемого материала, добавим в табличную
270 271
Использование основных объектов конфигурации План видов характеристик
часть документа новый реквизит «НаборСвойств» с типом элементов справочника «ВариантыНоменклатуры», подчиненных
СправочникСсылка.ВариантыНоменклатуры: материалу, выбранному в колонке «Материал».
В заключение откроем процедуру обработки проведения в модуле
документа и добавим к формируемым движениям присвоение
значения измерению «НаборСвойств»:
О
Для поля ввода, расположенного в колонке «НаборСвойств» снова ткроем элемент справочника «Номенклатура» - «Кабель
воспользуемся свойством «Связь по владельцу» электрический». Перейдем на закладку «Свойства» и
ЭлементыФормы.Материалы.ТекущиеДанные.Материал. Теперь создадим набор свойств этого элемента под названием
при выборе в этом поле ввода будет всегда открываться список «Белый».
272 273
Использование основных объектов конфигурации План видов характеристик
Он будет состоять их следующих характеристик: Этот набор свойств будет называться «Польша» и состоять из
следующих характеристик:
• «Цвет» - «Белый»,
• «Сечение, мм2» - 2,5: • «Цвет» - «Черный»,
• «Производитель» - «Fagumit»:
Затем создадим набор свойств для элемента справочника Теперь откроем документ ПриходнаяНакладная №2 и укажем, что
«Номенклатура» - «Шланг резиновый». был закуплен белый электрический кабель в количестве 2 шт. и
польский резиновый шланг.
274 275
Использование основных объектов конфигурации План видов характеристик
Затем скопируем первую строку документа и укажем, что был Кроме этого посмотрим на записи, которые содержатся в регистре
закуплен еще и черный электрический кабель в количестве 3 шт. (в сведений «ЗначенияСвойствНоменклатуры»:
процессе ввода нам придется создать еще один набор свойств для
электрического кабеля - «черный», у которого «Цвет» - «Черный» и
«Сечение» - 2,5):
Отчет ОстаткиМатериаловПоСвойствам
276 277
Использование основных объектов конфигурации План видов характеристик
278 279
Использование основных объектов конфигурации План видов характеристик
Результат = Запрос.Выполнить();
ПроцедураДействияФормыОстаткиМатериаловПоСвойствамСформировать(Кнопка)
//{{КОНСТРУКТОР_ВЫХОДНЫХ_ФОРМ_ПРОЦЕДУРА_ВЫЗОВА(
//ОстаткиМатериаловПоСвойствам) // Данный фрагмент построен конструктором. //
При повторном использовании конструктора, // внесенные вручную изменения Теперь мы можем перейти к созданию вложенного запроса,
будут утеряны!!! который будет передаваться в условие, заданное в параметре
виртуальной таблицы.
ТабДок = ЭлементыФормы.ПолеТабличногоДокумента;
ОстаткиМатериаловПоСвойствам(ТабДок); Обладая достаточными навыками написания запросов, мы могли
бы вручную, вместо «&СписокСвойств» написать текст вложенного
//}}КОНСТРУКТОР_ВЫХОДНИЫХ ФОРМ_ПРОЦЕДУРА_ВЫЗОВА запроса. Но, поскольку мы только осваиваем язык запросов,
КонецПроцедуры
воспользуемся более комфортным способом: создадим текст
вложенного запроса при помощи конструктора, а затем просто
После этого в процедуре «ОстаткиМатериаловПоСвойствам» скопируем его в нужное нам место модуля. Для этого выполним
соответствующим образом изменим строку объявления процедуры и команду Текст | Конструктор запроса...
затем удалим строку, устанавливающую параметр запроса:
В качестве исходных данных вложенного запроса выберем таблицу
регистра сведений «ЗначенияСвойствНоменклатуры». Из нее выберем
Процедура ОстаткиМатериаловПоСвойствам(ТабДок) Экспорт
//{{КОНСТРУКТОР_ВЫХОДНЫХ_ФОРМ(ОстаткиМатериаловПоСвойствам)
единственное поле - «ЗначенияСвойствМатериалов.НаборСвойств».
//Данный фрагмент построен конструктором. // При повторном использовании Зададим условия выборки. Прежде всего, владелец набора свойств
конструктора, // внесенные вручную изменения будут утеряны!!! должен быть равен переданному в параметре «Материал» материалу:
Макет = ОтчетОбъект.ПолучитьМакет("ОстаткиМатериаловПоСвойствам"); Запрос
= Новый Запрос; Запрос.Текст * "ВЫБРАТЬ ЗначенияСвойствНоменклатуры.НаборСвойств.Владелед = &Материал
|ОстаткиМатериаловОстаткиИОбороты.Материал,
|ОстаткиМатериаловОстаткиИОбороты.Материал.Представление,
|ОстаткиМатериаловОстаткиИОбороты. НаборСвойств,
|ОстаткиМатериаловОстаткиИОбороты.НаборСвойств.Представление, Затем укажем, что вид свойства должен быть равен переданному в
|ОстаткиМатериаловОстаткиИОбороты.КоличествоНачальныйОстаток параметре «ВидСвойства» значению:
|КАК НачальныйОстаток,
|ОстаткиМатериаловОстаткиИОбороты.КоличествоПриход
|КАК Приход, ЗначенияСвойствНоменклатуры.ВидСвойства = &ВидСвойства
|ОстаткиМатериаловОстаткиИОбороты.КоличествоРасход
|КАК Расход,
|ОстаткиМатериаловОстаткиИОбороты.КоличествоКонечныйОстаток
|КАК КонечныйОстаток |ИЗ
|РегистрНакопления.ОстаткиМатериалов.ОстаткиИОбороты(,,,,
|НаборСвойств В (&СписокСвойств))
|КАК ОстаткиМатериаловОстаткиИОбороты"; ^ _______
280 281
Использование основных объектов конфигурации План видов характеристик
Результат = Запрос.Выполнить();
Вложенный запрос готов. Теперь нажмем кнопку «Запрос», Маленькая доработка, которую нам останется сделать, будет
расположенную в нижней части окна конструктора запроса, выделим и заключаться в том, чтобы предусмотреть динамическое формирование
скопируем текст запроса в буфер обмена Windows. Закроем окно с текста запроса в зависимости от того, выбрано пользователем значение
текстом запроса и нажмем «Отмена» в конструкторе запроса. Теперь материала, или нет:
вставим текст из буфера обмена вместо параметра в созданный нами
ранее запрос: Процедура ОетаткиМатериаловПоСвойствамСТабДок) Экспорт
//{{КОНСТРУКТОР_ВЬКОДНЫХ_ФОРМ(ОстаткиМатериаяовПоСвойствам) //
Данный фрагмент построен конструктором. // При повторном использовании
Процедура ОстаткиМатериаловПоСвойствам(ТабДок) Экспорт конструктора, // внесенные вручную изменения будут утеряны!!!
//{{КОНСТРУКТОРЗЬПГОДНЬГХ^ЮРМСОстаткиМатериаловПоСвойствам) //
Данный фрагмент построен конструктором. // При повторном использовании Макет = ОтчетОбъект.ПолучитьМакетС'ОстаткиМатериаловПоСвойствам");
конструктора, // внесенные вручную изменения будут утеряны!!! Запрос = Новый Запрос;
Запрос.Текст =
Макет = ОтчетОбъект.ПолучитьМакетС'ОстаткиМатериаловПоСвойствам"); "ВЫБРАТЬ
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ОстаткиМатериаловОстаткиИОбороты.Материал,
| ОстаткиМатериаловОстаткиИОбороты.Материал, | | ОстаткиМатериаловОстаткиИОбороты.Материал.Представление,
ОстаткиМатериажовОстаткиИОбороты.Материал.Представление, | | ОстаткиМатериаловОстаткиИОбороты.НаборСвойств,
ОстаткиМатериаловОстаткиИОбороты.НаборСвойств, | | ОстаткиМатериаловОстаткиИОбороты.НаборСвойств.Представление,
ОстаткиМатериаловОстаткиИОбороты.НаборСвойств.Представление, | | ОстаткиМатериаловОстаткиИОбороты, КоличествоНачальныйОстаток
ОстаткиМатериаловОстаткиИОбороты.КоличествоНачальныйОстаток | | КАК НачальныйОстаток,
КАК НачальныйОстаток, | ОстаткиМатериаловОстаткиИОбороты.КоличествоПриход
| ОстаткиМатериаловОстаткиИОбороты.КоличествоПриход | | КАК Приход,
КАК Приход, | ОстаткиМатериаловОстаткиИОбороты.КоличествоРасход
| ОстаткиМатериаловОстаткиИОбороты.КоличествоРасход | | КАК Расход,
КАК Расход, | ОстаткиМатериаловОстаткиИОбороты.КоличествоКонечныйОстаток
| ОстаткиМатериаловОстаткиИОбороты.КоличествоКонечныйОстаток | КАК КонечныйОстаток
| КАК КонечныйОстаток |ИЗ |И3
| РегистрНакопления.ОстаткиМатериалов.ОстаткиИОбороты(,,,, | | РегистрНакопления.ОстаткиМатериалов.ОстаткиИОбороты(,,,,
НаборСвойств В (ВЫБРАТЬ | НаборСвойствВ (ВЫБРАТЬ
|ЗначенияСвойствНоменклатуры.НаборСвойств | ЗначенияСвойствНоменклатуры.НаборСвойств
| ИЗ
| РегистрСведений.ЗначенияСвойствНоменклатуры
| КАК ЗначенияСвойствНоменклатуры
282 283
Использование основных объектов конфигурации План видов характеристик
I ГДЕ
l"; Если Не Материал.Пустая() тогда
Запрос.Текст = Запрос.Текст +
Если Не Материал.ПустаяО тогда "ЗначенияСвойствНоменклатуры.НаборСвойств.Владелец = &Материал И
Запрос.Текст = Запрос.Текст +
"ЗначенияСвойствНоменклатуры.НаборСвойств.Владелец = Материал И КонецЕсли;
|";
КонецЕсли; Запрос.Текст = Запрос.Текст +
" ЗначенияСвойствНоменклатуры.ВидСвойства = &ВидСвойства И
Запрос.Текст = Запрос.Текст + | ЗначенияСвойствНоменклатуры.Значение = &Значение))
ЗначенияСвойствНоменклатуры.ВидСвойства = &ВидСвойства И | КАК ОстаткиМатериаловОстаткийОбороты";
I ЗначенияСвойствНоменклатуры.Значение = &Значение))
I КАК ОстаткиМатериаловОстаткиИОбороты"; Если Не Материал.Пустая() тогда
Результат = Запрос.Выполнить(); Запрос.УстановитьПараметр('' Материал", Материал);
КонецЕсли;
Запрос.УстановитьПараметр("ВидСвойства", ВидСвойства);
После этого добавим в текст модуля установку параметров запроса: Запрос.УстановитьПараметр('Значение", Значение);
Результат = Запрос.Выполнить();
Процедура ОстаткиМатериаловПоСвойетвам(ТабДок) Экспорт
//{{КОНСТРУКТОР_ВЫХОДНИЫХ ФОРМ) // Данный фрагмент построен
конструктором. // При повторном использовании конструктора, // внесенные
вручную изменения будут утеряны!!! Теперь последнее, что нам осталось сделать - это разместить в
форме поля для ввода параметров запроса.
Макет = ОтчетОбъект.ПолучитьМакет("ОстаткиМатериаловПоСвойствам");
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЪ
|ОстаткиМатериаловОстаткиИОбороты.Материал,
|ОстаткиМатериаловОстаткиИОбороты.Материал.Представление,
|ОстаткиМатериаловОстаткиИОбороты.НаборСвойств,
|ОстаткиМатериаловОстаткиИОбороты.НаборСвойств.Представление,
|ОстаткиМатериаловОстаткиИОбороты.КоличествоНачальныйОстаток
|КАК НачальныйОстаток,
|ОстаткиМатериаловОстаткиИОбороты.КоличествоПриход
|КАК Приход,
|ОстаткиМатериаловОстаткиИОбороты.КояичествоРасход
|КАК Расход,
|ОстаткиМатериаловОстаткиИОбороты.КоличествоКонечныйОстаток
|КАК КонечныйОстаток
|ИЗ
|РегистрНакопления.ОстаткиМатериалов.ОстаткиИОбороты(,,,,
|НаборСвойств В (ВЫБРАТЬ
|ЗначенияСвойствНоменклатуры.НаборСвойств |ИЗ
|РегистрСведений.ЗначенияСвойствНоменклатуры
|КАК ЗначенияСвойствНоменклатуры
|ГДЕ
284
285
Использование основных объектов конфигурации План видов характеристик
Откроем форму отчета и разместим на ней три поля ввода: На этом создание отчета завершено. Запустим 1С:Предприятие в
режиме отладки и посмотрим, какие результаты можно получить с
• «Материал» с типом СправочникСсылка.Номенклатура, помощью нашего отчета.
• «ВидСвойства» с типом Сначала посмотрим, какие у нас есть материалы с сечением 2,5
ПланВидовХарактеристикСсылка.СвойстваНоменклатур мм2:
ы,
• «Значение» с типом
Характеристика.СвойстваНоменклатуры:
Процедура ВидСвойстваПриИзменении(Элемеит)
Значение = ВидСвойства.ТипЗначения.ПривестиЗначение(Значение);
КонецПроцедуры
286 287
Использование основных объектов конфигурации План видов характеристик
288 289
Бухгалтерский учет
О
ведения бухгалтерского учета средствами 1С:Предприятия. Для этого бъект конфигурации План видов характеристик был
мы используем уже знакомый нам план видов характеристик и два подробно рассмотрен нами в предыдущей главе (см. «Объект
новых объекта конфигурации - план счетов и регистр бухгалтерии. конфигурации План видов характеристик» на странице 254),
Регистр бухгалтерии будет использоваться нами для накопления поэтому сейчас мы проиллюстрируем только то, как используется этот
данных о совершенных хозяйственных операциях. С помощью плана объект в контексте бухгалтерского учета.
счетов мы будем описывать счета, в разрезе которых ведется учет, а Бухгалтерский учет, как правило, подразумевает ведение
план видов характеристик будет служить для описания объектов аналитического учета на большинстве из счетов. Для обозначения
аналитического учета, в разрезе которых должен вестись учет на объектов аналитического учета мы будем использовать термин
счетах. субконто.
Сразу оговоримся, что план счетов, который мы будем Так вот, частным случаем использования плана видов
использовать в нашей учебной конфигурации, очень сильно упрощен. характеристик является использование его для описания субконто, т.е.
Он содержит всего несколько условных счетов, которые, однако, все объекты аналитического учета, в разрезе которых должен вестись
позволят нам познакомиться с основными методами организации учет на тех или иных счетах, описываются в соответствующем плане
бухгалтерского учета средствами 1С:Предприятия. видов характеристик и там же задаются типы значений, которые могут
принимать те или иные субконто.
П
риступим к созданию плана видов характеристик, который
будет содержать описания объектов аналитического учета -
субконто.
Откроем конфигуратор и создадим новый
объект конфигурации План видов характеристик. Зададим его имя -
«ВидыСубконто».
Поскольку нам понадобится некий вспомогательный справочник, в
котором пользователи будут осуществлять «свободное творчество» по
созданию значений новых объектов аналитического учета - создадим
объект конфигурации Справочник и назовем его «Субконто».
290 291
Использование основных объектов конфигурации Бухгалтерский учет
Затем на закладке «Владельцы» укажем, что этот справочник Зададим тип значения характеристик. Для этого нажмем на кнопку
подчинен плану видов характеристик «ВидыСубконто»: с многоточием и создадим составной тип данных, в который будут
входить типы:
• СправочникСсылка.Клиенты,
• СправочникСсылка.Номенклатура,
• СправочникСсылка.Субконто:
292 293
Использование основных объектов конфигурации Бухгалтерский учет
О
бъект конфигурации План счетов является прикладным
объектом и предназначен для описания структуры хранения
информации о совокупности синтетических счетов
предприятия, которые предназначены для группировки данных
о его хозяйственной деятельности. На основе объекта
конфигурации План счетов платформа создает в базе данных
структуры, в которых может храниться информация о том, какие счета
и каким образом будет использовать предприятие. Это может быть
система бухгалтерских счетов, установленная государством, план
На этом создание видов субконто завершено, и мы можем перейти управленческих счетов или произвольный набор счетов, используемых
к знакомству со следующим объектом конфигурации, который будет для анализа тех или иных видов деятельности предприятия.
использован нами, - планом счетов. План счетов в системе 1С:Предприятие поддерживает иерархию
субсчетов: к каждому счету первого уровня может быть открыто
несколько субсчетов, которые в свою очередь могут иметь свои
субсчета - и так далее.
По любому счету или субсчету может вестись аналитический учет
в разрезе субконто, описанных в плане видов характеристик. Связь
между планом счетов и планов видов характеристик задается
разработчиком на этапе конфигурирования. Для описания
используемых субконто система создает в плане счетов специальную
табличную часть ВидыСубконто, которая не видна в конфигураторе
(но доступна средствами встроенного языка).
Для каждого счета есть возможность задать несколько видов учета
(например, количественный и валютный). Виды учета задаются при
помощи подчиненных объектов конфигурации «Признак учета».
Также существует возможность определить несколько видов учета
субконто (например, суммовой, валютный или количественный). Виды
учета субконто задаются при помощи подчиненных объектов
конфигурации «Признак учета субконто».
Помимо всего вышеперечисленного, каждый счет может иметь
набор свойств, которые задаются в качестве реквизитов объекта
конфигурации План счетов. Они позволяют определять уникальные
свойства элементов плана счетов (например, реквизит
«ЗапретитьИспользоватьВПроводках»).
294 295
Использование основных объектов конфигурации
Бухгалтерский учет
296
297
Использование основных объектов конфигурации Бухгалтерский учет
В результате план счетов нашего OOO «На все руки мастер» будет
«Дебиторская задолженность», код 62, активно/пассивный, с выглядеть следующим образом:
учетом в разрезе клиентов:
298 299
Использование основных объектов конфигурации ____________________ Бухгалтерский учет
------------- ■ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------"
----------------------------------------------------------------------------------~ ^
' ^
О
тогда, когда с точки зрения пользователя нужноупорядочивать план бъект конфигурации Регистр бухгалтерии является
счетов no коду с учетом разделителей кода счета. Например, если прикладным объектом и предназначен для описания
счета «10.11» и «10.2» упорядочивать no коду счета, то счета будут структуры накопления данных, учет которых ведется исходя из
располагаться так: некоторого плана счетов. На основе объекта конфигурации Регистр
«10.11» бухгалтерии платформа создает в базе данных
«10.2» информационную структуру, в которой будут накапливаться данные о
Это правильно с точки зрения сортировки строк, но не хозяйственных операциях, отображаемых в бухгалтерском учете.
соответствует логическому смыслу кодов. По своему виду регистр бухгалтерии напоминает регистр
Но если заданы значения поля Порядок «10.11» и «10. 2» и накопления - он также имеет ресурсы, может иметь измерения и
установлено свойство «Автопорядок no коду», то при выборе реквизиты. Измерения позволяют разделять ведение учета (например,
упорядочивания no коду пользователь будет, фактически, получать используя измерение «Организация», можно вести учет в разрезе
порядок, учитывающий разделители: нескольких юридических лиц). Реквизиты служат признаком, по
«10.2» которому одни записи регистра можно отделить от других (например,
«10.11». в качестве реквизита может использоваться номер журнала, что
Если свойство не устанавливать, то нужно будет в явном виде позволит отбирать проводки, имеющие одинаковый смысл).
выбирать упорядочивание no полю Порядок. ________________^___ Значительное отличие от регистра накопления заключается в том,
что регистр бухгалтерии имеет жесткую связь с используемым планом
счетов. Поэтому каждая запись регистра бухгалтерии содержит
дополнительные поля, определяемые настройкой используемого плана
счетов. Например, запись регистра может содержать дополнительные
поля для указания корреспондирующих счетов, сумм, объектов
аналитического учета (субконто), количества, вида валюты и т.д.
Кроме этого, отличительной чертой регистра бухгалтерии является
возможность поддержки механизма двойной записи, при которой
каждая запись регистра содержит обязательные поля для указания
счета дебета и счета кредита.
Узнай больше!
О структуре объектов встроенного языка, предназначенных для
работы с регистрами бухгалтерии можно прочитать в главе
«Регистры бухгалтерии» на странице 603.
300 301
Использование основных объектов конфигурации Бухгалтерский учет
О Н
ткроем конфигуратор и создадим новый объект
конфигурации Регистр бухгалтерии. Зададим его имя _ астало время познакомиться с тем, каким образом
«Управленческий». Укажем, что с ним будет связан план используется созданный нами регистр бухгалтерии
счетов «Основной». Установим флаг «Корреспонденция». Этот «Управленческий». В этой главе мы, сначала, доработаем оба
флаг будет говорить о том, что создаваемый нами регистр наши документа - «ПриходнаяНакладная» и
поддерживает корреспонденции. Это означает, что каждая запись «ОказаниеУслуги» - так, чтобы они «поставляли» данные не только
регистра имеет дебетовую и кредитовую часть, что позволит нам для регистров накопления, но и для регистра бухгалтерии. Затем мы
создадим бухгалтерский отчет «Оборотно-сальдовая ведомость»,
получать информацию не только об остатках и оборотах по счетам , но
который будет показывать нам состояние товародвижения в нашем
и о корреспонденциях между счетами.
OOO «На все руки мастер», основываясь на данных регистра
Регистры, не поддерживающие корреспонденцию, используются бухгалтерии.
тогда, когда не нужно использовать принцип двойной записи,
регламентированный в бухгалтерском учете, и, соответственно, Создание движений документа ПриходнаяНакладная
Н
контролировать баланс хозяйственных средств и их источников.
ачнем с простого: доработаем движения документа
Теперь перейдем на закладку «Данные» и создадим два ресурса:
«ПриходнаяНакладная». Для этого нам достаточно будет
• «Сумма», длина 15, точность 2, балансовый, воспользоваться конструктором движений документа и
заменить старые движения документа на новые, по трем
• «Количество», длина 15, точность 3, небалансовый, признак
регистрам.
учета - количественный, признак учета субконто -
количественный. Откроем конфигуратор. В окне редактирования объекта
конфигурации Документ «ПриходнаяНакладная», на закладке
На этом создание нашего регистра бухгалтерии завершено. Теперь «Движения» запустим конструктор движений документа.
откроем окна редактирования документов «ПриходнаяНакладная» и
В список регистров добавим регистр
«ОказаниеУслуги» и отметим, что эти документы будут создавать
«РегистрБухгалтерии.Управленческий». В качестве источника данных
движения и по регистру бухгалтерии «Управленческий» (закладка
выберем табличную часть документа «ПриходнаяНакладная» -
«Движения»).
«Материалы». Счет дебета установим равным
Запустим 1С:Предприятие в режиме отладки и откроем регистр «ПланыСчетов.Основной.Товары» (41), а счет кредита -
бухгалтерии «Управленческий». Как видите, платформа (при создании «ПланыСчетов.Основной.РасчетыСПоставщиками» (60).
структуры хранения данных) добавила к созданным нами реквизитам
регистра еще ряд полей, которые явились следствием использования
плана счетов «Основной». Прежде всего, это поля «СчетДт»,
«СубконтоДт1», «СчетКт» и «СубконтоКт1>. Кроме этого, если
прокрутить окно вправо до конца, то вы обнаружите две колонки
«Количество». Это «КоличествоДт» и «КоличествоКт». Для измерений
и ресурсов регистра, связанных с признаками учета, платформа
создает пару полей для хранения значения ресурса отдельно по дебету
и отдельно по кредиту проводки.
302 303
Использование основных объектов конфигурации Бухгалтерский учет
304 305
Использование основных объектов конфигурации Бухгалтерский учет
равносильна записи:
Д ля того чтобы добавить движения по регистру Управленческий в
документ «ОказаниеУслуги», нам уже не удастся
воспользоваться конструктором движений. Если вы помните,
движения этого документа мы создавали самостоятельно, без
использования конструктора.
В отличие от документа «ПриходнаяНакладная», который создавал
Движение.СубконтоДт.Материалы . всего одну бухгалтерскую проводку, документ «ОказаниеУслуги»
будет создавать уже две проводки:
306 307
Использование основных объектов конфигурации Бухгалтерский учет
308 309
Использование основных объектов конфигурации Бухгалтерский учет
310 311
Использование основных объектов конфигурации Бухгалтерский учет
312 313
Использование основных объектов конфигурации
314
315
Использование основных объектов конфигурации
316 317
Использование основных объектов конфигурации План видов расчета, регистр расчета
В
этой главе мы рассмотрим возможности системы В качестве примера рассмотрим начисление премии за апрель.
1С:Предприятие, которые она предоставляет д Ля автоматизации Премия должна начисляться в размере 10% от суммы, начисленной в
сложных периодических расчетов. качестве оплаты по окладу. Следовательно, необходимо
Такие расчеты используются, прежде всего, при расчете проанализировать все записи о начислениях оплаты по окладу,
заработной платы. Поэтому дальнейшее рассмотрение этих которые попадают в интересующий нас базовый период, а именно
возможностей мы будем строить на примере расчета заработной платы апрель. Допустим, общая сумма таких начислений составила 8000
сотрудников, которые работают в нашем OOO «На все руки мастер». рублей - в этом случае премия должна быть начислена в размере 800
В общем случае, сумма заработной платы сотрудника складывается рублей:
из множества частей (например, оплата по окладу, премии, штрафы,
оплаты по больничному листу, разовые выплаты и т.д.). Каждая из
этих частей рассчитывается по некоторому алгоритму, присущему Зависимость премии от оклада по базовому периоду
только этой части. Например, сумма штрафа может определяться
Базовый период
просто фиксированной суммой, сумма премии может рассчитываться
как процент от оклада, а сумма оплаты по окладу рассчитывается
исходя из количества рабочих дней в месяце и количества дней,
отработанных сотрудником. Поэтому для обозначения каждой такой
части мы будем использовать термин вид расчета.
Алгоритм каждого вида расчета опирается в общем случае на две
категории параметров: период, за который нужно получить конечные
данные и набор некоторых исходных данных, используемых при
расчете.
Как правило, в реальной жизни различные виды расчета
существуют не сами по себе, а оказывают некоторое влияние на другие
виды расчета. Исходя из того, что вид расчета опирается на две
различные категории параметров, такое влияние тоже имеет
двойственный характер. Во-вторых, это влияние может быть не на исходные данные, а на
Во-первых, это может быть влияние на исходные данные, сам период, за который производится расчет. В качестве примера
используемые при расчете. В качестве примера можно привести можно привести расчет оплаты по окладу и невыход на работу.
начисление премии в виде процента от оплаты по окладу. При Предположим, что мы начислили сотруднику оплату по окладу за март
изменении оплаты по окладу размер премии тоже должен быть месяц. В этом случае период действия такого расчета будет с
пересчитан, исходя из новой суммы начисленного оклада. Другими 01.03.2004 по 31.03.2004. После этого мы получили информацию от
словами, сумма начисленного оклада является базой для расчета руководителя отдела, что, оказывается, сотрудник отсутствовал на
премии. Причем, поскольку оклад рассчитывается за некоторый работе с 1 по 10 марта по неизвестной причине. В этом случае нам
период, то при расчете премии нам интересно знать не значение нужно будет произвести расчет «Невыход» (в котором можно
рассчитать какие-то удержания с сотрудника). Но кроме этого, нам
318 319
Использование основных объектов конфигурации План видов расчета, регистр расчета
нужно будет пересчитать и оклад сотрудника, исходя из того, ЧТо Базовый период - это период, в котором мы анализируем
фактический период действия расчета «Оклад» стал теперь с результаты других расчетов, которые влияют на наш по базовому
11.03.2004 по 31.03.2004. Такое влияние мы будем называть периоду.
вытеснением no периоду действия. В результате, если за полный Как видите, взаимное влияние между видами расчетов может быть
месяц работы сотруднику должно было быть начислено 9300 рублей довольно разнообразным и, что самое сложное, это влияние может
то теперь, за фактический период работы начисление составит 6300 быть многоуровневым. To есть один вид расчета может влиять на
рублей: другой, который, в свою очередь, влияет на третий и т.д.
Очевидно, что в этой ситуации требуется некий универсальный
механизм, позволяющий описать каждый из видов расчетов (его
алгоритм, влияние на другие виды расчетов, зависимость от других
видов расчетов), обеспечить хранение данных, полученных в
результате этих расчетов и контроль необходимости перерасчета
результатов зависимых расчетов в случае изменения результатов
«первичных» расчетов.
В системе 1С:Предприятие такой универсальный механизм
реализован при помощи планов видов расчета и регистров расчета. И
первым объектом конфигурации, с которым мы начнем знакомиться в
этой главе, будет План видов расчета.
320 321
Использование основных объектов конфигурации План видов расчета, регистр расчета
О
бъект конфигурации План видов расчета является
• Базовые - это те виды расчета, результаты которых должны
прикладным объектом и предназначен для описания
быть использованы при перерасчете этого вида расчета.
структуры хранения информации о возможных видах
• Вытесняющие - это те виды расчета, которые вытесняют этот
расчетов. На основе объекта конфигурации План видов расчета
вид расчета по периоду действия.
платформа создает в базе данных информационную структуру5 в которой
может храниться информация о том, какие существуют виды расчета, и • Ведущие - это те виды расчета, изменение результатов
каковы взаимосвязи между ними. которых должно приводить к необходимости перерасчета
этого вида расчета.
Отличительной особенностью плана видов расчета является то, что
пользователь в процессе работы может добавлять в план видов расчета Здравый смысл подсказывает, что все базовые виды расчета
новые виды расчета. Такая возможность делает механизм должны быть включены и в категорию ведущих. Кроме того, ведущие
периодических расчетов более гибким и позволяет пользователю виды расчета могут содержать и некоторые другие виды расчета,
создавать собственные виды расчета, помимо тех, которые заданы косвенно влияющие на данный вид расчета. Например, мы имеем три
разработчиком как предопределенные. вида расчета: невыход, оклад и премия. Невыход вытесняет оклад по
Объект конфигурации План видов расчета имеет свойство периоду действия, а премия зависит от оклада по базовому периоду.
«Использует период действия». С помощью этого свойства В этом случае для премии следует указать базовым видом расчета
определяется, будут ли в этом плане находиться виды расчета, которые оклад, а ведущими - оклад и невыход, поскольку изменение результата
могут быть вытеснены по периоду действия. Если это свойство расчета невыхода приведет к изменению результата оклада, что в свою
установлено, то разработчик получает возможность указать для очередь должно привести к изменению результата премии.
каждого вида расчета те виды расчета, которые вытесняют его по
периоду действия.
Следующим важным свойством объекта конфигурации План видов
расчета является свойство «Зависимость от базы». Оно определяет,
будут ли в этом плане находиться зависимые по базовому периоду
виды расчета. Если это свойство установлено, появляется возможность
указать, в каком плане видов расчета будут находиться базовые виды
расчета и, кроме этого указать, как будет определяться эта
зависимость.
Существует возможность указать один из двух видов зависимости
от базы: «Зависимость по периоду действия» и «Зависимость по
периоду регистрации». Оба вида этой зависимости подробно
объяснены в разделе «Объект конфигурации Регистр расчета» на
странице 327.
Еще одной важной особенностью плана видов расчета является
возможность создания предопределенных видов расчета и описания их
взаимного влияния. При этом в общем случае, разработчик имеет
322 323
Использование основных объектов конфигурации
План видов расчета, регистр расчета
П
работы с планом видов расчета можно прочитать в главе «Планы
видов расчета» на странице 590. риступим теперь к созданию плана видов расчета
«ОсновныеНачисления», который будет использоваться в
нашей конфигурации.
Откроем конфигуратор и создадим новый
объект конфигурации План видов расчета. Зададим его имя -
«ОсновныеНачисления».
Сразу перейдем на закладку «Расчет» и укажем, что он будет
использовать период действия и зависеть от базы по периоду действия.
В качестве базового плана видов расчета укажем его самого,
поскольку все наши виды расчетов будут храниться в единственном
плане видов расчета.
325
324
Использование основных объектов конфигурации T План видов расчета, регистр расчета
О
бъект конфигурации Регистр расчета является прикладным
• Невыход - с именем и наименованием «Невыход» и кодом объектом и предназначен для описания структуры
«Невыход», накопления данных, являющихся результатами расчетов. На
• Оклад - с именем, кодом и наименованием «Оклад» и основе объекта конфигурации Регистр расчета платформа создает
вытесняющим его видом расчета «Невыход», в базе данных информационную структуру, в которой будут
• Премия - с именем, кодом и наименованием «Премия», с накапливаться данные, формируемые различными объектами базы
базовым видом расчета «Оклад» и ведущими видами расчета данных.
«Невыход» и «Оклад». Отличительной особенностью регистра расчета является то, что он
не предназначен для интерактивного редактирования пользователем.
Разработчик может, при необходимости, предоставить пользователю
возможность редактировать регистр расчета, но предназначение
регистра расчета заключается в том, чтобы его модификация
производилась на основе алгоритмов работы объектов базы данных, а
не в результате непосредственных действий пользователя.
Как и другие регистры, регистр расчета имеет ресурсы, в которых
хранит числовые данные, имеет измерения, в разрезе которых можно
получать значения ресурсов регистра, имеет реквизиты, которые
характеризуют каждую запись регистра расчета.
Теперь мы перейдем к рассмотрению второго объекта,
используемого при реализации механизмов сложных периодических Отличительными же особенностями регистра расчета является его
периодичность, возможность использования механизмов вытеснения
расчетов - регистра расчета.
по периоду действия и зависимости по базовому периоду, и связь с
планом видов расчета. Рассмотрим все эти особенности по порядку.
Периодичность регистра расчета может быть определена одним из
следующих значений:
• День,
• Месяц,
• Квартал,
• Год.
Периодичность регистра расчета определяет промежуток времени,
к которому будет относиться каждая запись регистра. Если указана
периодичность «День», то каждая запись регистра будет относиться к
какому либо дню, если периодичность «Месяц» - то к какому либо
месяцу и т.д. Для указания факта принадлежности записи к какому
либо периоду, регистр имеет служебный реквизит
326 327
Использование основных объектов конфигурации План видов расчета, регистр расчета
«ПериодРегистрации» типа Дата. При записи данных в регистр Если в этой же ситуации периодичность регистра будет год,
платформа всегда приводит значение этого реквизита к началу того сохраненное значение периода регистрации будет 01.01.2004:
периода, в который он попадает.
Например, если в регистр расчета с периодичностью месяц
записать данные, где «ПериодРегистрации» задан как 08.04.2004, то
регистр сохранит эти данные со значением поля «ПериодРегистрации»
01.04.2004:
Документ
328 329
Использование основных объектов конфигурации
331
330
Использование основных объектов конфигурации План видов расчета, регистр расчета
Например, в начале апреля производится расчет зарплаты за март. перекрывающийся, с указанным базовым периодом, участок. При этом
Премия за март должна быть начислена исходя из оплаты по окладу за будут использованы данные графика, связанного с записью.
март. В этом случае, как правило, используется зависимость по Зависимость по периоду регистрации означает, что при анализе
периоду действия: базовых записей, будут выбираться те записи, которые попадают в
указанный базовый период значением своего поля «Период
регистрации».
Таблица регистра расчета
В качестве примера можно привести расчет штрафов при
начислении зарплаты за март. В качестве базы для расчета суммы
штрафов должны браться записи о прогулах, зарегистрированные в
марте месяце (это могут быть как записи о мартовских прогулах, так и
записи о прогулах в феврале). В этом случае, как правило,
используется зависимость по периоду регистрации:
332 333
Использование основныхобъектов конфигурации План видов расчета, регистр расчета
П
том, какие записи регистра подлежат перерасчету. Таблицы режде, чем мы начнем создавать объект конфигурации
перерасчета заполняются автоматически как на основании записей Регистр расчета «Начисления», нам потребуется создать два
регистров расчета, затронутых ведущими видами расчета, так и на дополнительных объекта конфигурации - регистр сведений
основании записей регистра расчета, для которых изменился «ГрафикиРаботы» и справочник «ВидыГрафиковРаботы».
фактический период действия. Исходя из этой информации Справочник понадобится нам для того, чтобы хранить информацию о
разработчик может принимать решение о необходимости перерасчета
том, какие графики работы существуют в OOO «На все руки мастер», а
записей регистра.
регистр сведений - для указания того, какие дни в месяце являются
Последним замечанием, которое следует сделать, говоря о регистре рабочими, поскольку сумма оплаты по окладу будет рассчитываться
расчета, является возможность установки связи регистра расчета с исходя из того, сколько дней отработал сотрудник в расчетном месяце.
графиком времени. Такой график времени должен представлять собой Откроем конфигуратор и создадим новый объект конфигурации
регистр сведений (непериодический, с обязательным измерением типа Справочник с именем «ВидыГрафиковРаботы».
Дата и ресурсом типа Число), в котором содержится временная схема
исходных данных, участвующих в расчетах. Измерениями этого В этом справочнике у нас будет два предопределенных графика
графика могут быть, например, график работы (ссылка на справочник) работы - «ГрафикАдминистрации» и «ГрафикМастеров».
и дата, а ресурсом - количество рабочих часов в этой дате. В этом
случае можно будет связать запись регистра расчета с каким-либо
конкретным графиком работы (указав в качестве реквизита записи
ссылку на справочник график работы) и в дальнейшем, средствами
встроенного языка получать информацию о количестве рабочих часов
в периоде действия, фактическом периоде действия или периоде
регистрации этой записи.
334 335
Использование основных объектов конфигурации План видов расчета, регистр расчета
копированием (Действия | Скопировать). Не забудьте, что 8 марта Укажем, что регистр расчета будет использовать базовый период, и
выходной день, и у вас должно получиться 22 рабочих дня в марте. периодичность регистра будет «Месяц».
• измерение «Сотрудник»,
тип СправочникСсылка.Сотрудники, базовое,
• ресурс «Результат», тип Число, длина 15, точность 2,
• реквизит «ГрафикРаботы»,
Теперь все готово для создания регистра расчета. тип СправочникСсылка.ВидыГрафиковРаботы, связь с
графиком по измерению «ГрафикРаботы»,
Создадим новый объект конфигурации Регистр расчета с именем • реквизит «ИсходныеДанные», тип Число, длина 15, точность
«Начисления». В качестве плана видов расчета, используемого 2.
регистром, выберем план видов расчетов «ОсновныеНачисления».
Установим, что регистр будет использовать период действия, график Реквизит «ГрафикРаботы» мы будем использовать для того, чтобы
будет задаваться в регистре сведений «ГрафикиРаботы», значение связать запись регистра с используемым графиком работы, а реквизит
графика будет находиться в ресурсе «Значение», а дата графика - в «ИсходныеДанные» - чтобы хранить в нем данные, которые могут
измерении «Дата». понадобиться при расчете или перерасчете (в нашем примере это будет
расчет оклада).
336 337
Использование основных объектов конфигурации План видов расчета, регистр расчета
338 339
Использование регистра расчета
340 341
Использование основных объектов конфигурации Использование регистра расчета
В окне конструктора выберем табличную часть «Начисления» Движение.Сторно = Ложь; Движение.ПериодРегистрации = Дата;
нажмем «ЗаполнитьВыражения». Для реквизитов Движение.ВидРасчета = ТекСтрокаНачисления.ВидРасчета;
Движение.ПериодДействияНачало = ТекСтрокаНачисления.ДатаНачала;
«ПериодДействияКонец» и «БазовыйПериодКонец» укажем Движение.ПериодДействияКонец =
выражение «КонецДня(ТекСтрокаНачисления.ДатаОкончания)» КонецДня(ТекСтрокаНачисления.ДатаОкончания);
Реквизиту «ИсходныеДанные» поставим в соответствие реквизит Движение.БазовыйПериодНачало = ТекСтрокаНачисления.ДатаНачала;
Движение.БазовыйПериодКонец =
табличной части «Результат», а для реквизита «Результат» наоборот
КонеиДня(ТекСтрокаНачисления.ДатаОкончания);
удалим выражение, присвоенное ему конструктором: Движение.Сотрудник = ТекСтрокаНачисления.Сотрудник; Движение.ГрафикРаботы =
ТекСтрокаНачисления.ГрафикРаботы; Движение.йсходныеДанные =
ТекСтрокаНачисления.Результат; КонецЦтота;
// записываем движения регистров
Движения.Начисления.Записать(); //}
}_КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры
342 343
Использование основных объектов конфигурации Использование регистра расчета
с
зависимости от базы
оздадим новый объект конфигурации Отчет. Назовем его
«Перерасчет». На закладке «Макеты» откроем конструктор
выходной формы, и выберем следующие поля из виртуальной
таблицы перерасчета «Начисления.Перерасчет»:
344 345
Использование основных объектов конфигурации Использование регистра расчета
Этим документом мы зафиксируем тот факт, что сотрудникам На этом примере мы с вами познакомились с тем, как работает
Гусакову и Деловому нужно начислить премию по итогам работы за механизм поддержки зависимости по базовому периоду у регистра
март. Поскольку размер премии нам неизвестен (он буде т расчета.
рассчитываться по некоторому алгоритму), поля «Результат» мц Теперь посмотрим, как работает механизм вытеснения по периоду
оставляем пустыми. Нажмем «ОК». действия. Для этого нам понадобится создать третий документ
Теперь снова откроем документ Начисление Сотрудникам №i и НачисленияСотрудникам №3:
изменим оклад Гусакова с 10 000 на 7 000. Нажмем «ОК»
Сформируем отчет «Перерасчет»:
346 347
Использование регистра расчета
Использование основных объектов конфигурации
349
348
Использование основных объектов конфигурации Использование регистра расчета
РасчитатьНачисления(Двюкения.Начисления,
ПлапыВидовРасчета.ОсновныеНачисления.Оклад, Алгоритм расчета начислений будет различным при расчете
СписокСотрудников); первичных и вторичных записей, и каждая из его частей будет
Движения.Начисления.Записать(,Истнна); находиться в своей ветке условия Если...
РасчитатьНачиеления(Движении.Начисления, При расчете первичных записей нам понадобятся данные графика
ПланыВидовРасчета.ОсновныеНачисления.Премия, из регистра расчета, поэтому добавим в первую ветку условия запрос
СписокСотрудииков); по виртуальной таблице регистра расчета
Движения.НачисленияЛаписать(,Истина); «РегистрРасчета.Начисления.ДанныеГрафика»:
//} }_КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры
ПроцедураРасчитатьНачисления(НаборЗаписейРегистра,ТребуемыйВидРасчета,
Обратите внимание, что при проведении документа мы сначала СписокСотрудников) Экспорт /Рассчитать первичные
записываем движения, сформированные документом, в регистр, а записи Если ТребуемыйВидРасчета e ПланыВидовРасчета.ОсновныеНачисления.Оклад
тогда
затем передаем этот набор записей регистра в процедуру расчета.
Сначала для расчета первичных записей («Оклад»), а затем для расчета Запрос = Новый Запрос;
Запрос.Текст =
вторичных («Премия»). Процедура расчета, на основе описанных в ней
"ВЫБРАТЬ
алгоритмов и данных, содержащихся в записях регистра, должна |НачисленияДанныеГрафика.ЗначениеПериодДействия КАК Норма,
сформировать значения ресурсов регистра. После того, как ресурсы |НачисленияДанныеГрафика.ЗначениеФактическийПериодДействия
будут рассчитаны, мы перезаписываем набор записей регистра без |КАК Факт,
формирования записей перерасчета (второй параметр в методе |НачисленияДанныеГрафика.НомерСтроки КАК НомерСтроки
|ИЗ
Записать() - Истина. |РегистрРасчета.Начисления.ДанныеГрафика(
Перед вызовом процедуры из общего модуля мы формируем |Регистратор = &Регистратор И |ВидРасчета = &ВидРасчета И |Сотрудник В
список сотрудников, содержащихся в документе, чтобы передать его в (&СписокСотрудников)) |КАК НачисленияДанныеГрафика";
вызываемую процедуру. Запрос.УстановитьПараметр("Регистратор",
________________________ НаборЗаписейРегистра.Отбор.Регистратор.Значеяие);
350 351
Использование основных объектов конфигурации Использование регистра расчета
352
353
Использование основных объектов конфигурации Использование регистра расчета
ПроцедураРасчитатьНачисления{НаборЗаписейРегистра, ТребуемыйВидРасчета,
СписокСотрудников) Экспорт Сумму начисленной премии мы рассчитываем как 10% от
/Л>ассчитать первичные записи рассчитанной оплаты по окладу.
Если ТребуемыйВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Оклад тогд»
354 355
Использование основных объектов конфигурации Использование регистра расчета
Т
Отменим проведение документа Начисление сотрудникам №з и еперь мы посмотрим, каким образом можно использовать
перепроведем документы Начисление сотрудникам №1 и №2. Регистр данные, хранящиеся в регистре расчета, для получения в
расчета Начисления должен выглядеть следующим образом: отчете итоговой информации о начислениях сотрудникам.
Создадим в конфигураторе новый объект конфигурации
Отчет. Назовем его «НачисленияСотрудникам».
Запустим конструктор выходной формы. Выберем следующие поля
таблицы регистра расчета «Начисления»:
J
В результате невыхода Гусакова на работу, сумма его оплаты по
окладу будет уменьшена и соответствующим образом уменьшится
начисленная ему премия.
356 357
Использование основных объектов конфигурации Использование регистра расчета
И
так, в нашем алгоритме работы с данными расчета осталось
одно «узкое» место - контроль актуальности данных,
содержащихся в регистре расчета. До сих пор мы с вами
использовали служебный отчет «Перерасчет» для того,
чтобы определить, являются ли данные в регистре расчета
актуальными или же они требуют перерасчета.
Теперь мы с вами создадим специальную процедуру, которая будет
определять, требуется ли перерасчет данных регистра расчета и, если
такая необходимость есть - выполнять перерасчет.
Поскольку единственным способом получения итоговой
информации о начислениях сотрудникам в нашей конфигурации
В заключение на закладке «Отчет» сбросим флаг «Использовать является отчет «НачисленияСотрудникам», для вызова этой
построитель отчета». Нажмем «ОК» и запустим 1С:Предприятие в процедуры мы добавим кнопку «Перерасчитать» в командную панель
режиме отладки. «ДействияФормы»:
В результате работы отчета мы получим следующую таблицу:
ПроцедураДействияФормыПерерасчитать(Кнопка)
ПерерасчитатьНачисления(ПланыВидовРасчета.ОсновныеНачисления.Оклад);
ПерерасчитатьНачисления01лаиыВидовРасчета.ОсновныеНачисления.Премия);
КонецПроцедуры
358 359
Использование основных объектов конфигурации Использование регистра расчета
//записи документа2 для сотрудников из списка, В самом начале процедуры мы выбираем запросом данные о
//и т.д. записях перерасчетов, содержащие переданный вид расчета и
Запрос = новый Запрос( сгруппированные по объекту перерасчета. Далее, при обходе
"ВЫБРАТЬ результата запроса, мы формируем для каждого объекта перерасчета
| НачисленияПерерасчет.ОбъектПерерасчета,
| НачисленияПерерасчет.Сотрудник