1С Предприятие 8.0. Практическое пособие разработчика
1С Предприятие 8.0. Практическое пособие разработчика
1С Предприятие 8.0. Практическое пособие разработчика
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 для сотрудников из списка, В самом начале процедуры мы выбираем запросом данные о
//и т.д. записях перерасчетов, содержащие переданный вид расчета и
Запрос = новый Запрос( сгруппированные по объекту перерасчета. Далее, при обходе
"ВЫБРАТЬ результата запроса, мы формируем для каждого объекта перерасчета
| НачисленияПерерасчет.ОбъектПерерасчета,
| НачисленияПерерасчет.Сотрудник список сотрудников, читаем соответствующие записи регистра расчета
|ИЗ и вызываем процедуру «РасчитатьНачисления», которая
| РегистрРасчета.Начисления.Перерасчет использовалась нами при расчете записей документа
| КАК НачисленияПерерасчет «НачисленияСотрудникам». После того, как расчет записей выполнен,
| мы записываем набор записей без формирования записей перерасчета
|ГДЕ и очищаем записи перерасчета по тому объекту перерасчета, который
| НачисленияПерерасчет.ВидРасчета = &ТребуемыйВидРасчета
|
только что обработали.
|ИТОГИ ПО Запустим 1С:Предприятие и проверим, как выполняется перерасчет
I НачисленияПерерасчет.ОбъектПерерасчета"); записей регистра расчета.
Запрос.УстановитьПараметрСТребуемыйВидРасчета'.ТребуемыйВидРасчета);
СписокСотрудников = Новый СписокЗначений; Отменим проведение всех документов «Начисления сотрудникам»
и проведем документ Начисления сотрудникам №1 и затем №2.
//перебрать группировку по регистратору
ВыборкаПоРегистратору = Запрос.Выполнить() Сформируем отчет «Начисления сотрудникам» (здесь и далее колонки
.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); отчета с 4 по 6 скрыты, в целях экономии места):
Пока ВыборкаПоРегистратору.Следующий() цикл Регистратор =
ВыборкаПоРегистратору.ОбъектПерерасчета;
360 361
Использование основных объектов конфигурации Использование регистра расчета
«НачисленияСотрудникам» нажмем кнопку «Перерасчитать». Будет А данные отчета будут содержать актуальные значения начисления
выполнен перерасчет начисления премии Гусакову и Деловому: оклада и премии:
362 363
Использование основных объектов конфигурации Использование регистра расчета
В конце этой главы мы совместим приятное с полезным и расчета, имеющих место для этого сотрудника.
создадим с вами отчет, который в графическом виде буд ет
показывать нам фактический период действия записей
расчета Помимо наглядной демонстрации работы механизма
вытеснения записей по периоду действия этот отчет позволит нам
познакомиться с элементом управления, позволяющим создавать
диаграммы Ганта.
Диаграмма Ганта
365
364
Использование регистра расчета
Использование основных объектов конфигурации
С
• «НачисленияФактическийПериодДействия.Результат»,
оздадим новый объект конфигурации Отчет и назовем его
• «НачисленияФактическийПериодДействия.Регистратор»,
«ДиаграммаНачислений». Создадим основную форму отчета и
• «НачисленияФактическийПериодДействия.Регистратор.Предс
разместим на ней элемент управления диаграмма Ганта с именем тавление»:
«ДиаграммаГанта»:
ПроцедураКнопкаСформироватьНажатие(Элемент)
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ
| НачисленияФактическийПериодДействия.Сотрудник, |
НачисленияФактическийПериодЦействия.ВидРасчета, |
НачисленияФактическийПериодДействия.ПериодДействияНачало, |
НачисленияФактическийПериодЦействия.ПериодДействияКонец, |
Откроем модуль формы отчета и в обработчик события «Нажатие» НачисленияФактическийПериодДействия.Результат, |
кнопки сформировать вставим заготовку запроса: НачисленияФактическийПериодЦействия.Регистратор, |
НачисленияФактическийПериодДействия.Регистратор.Представление
ПроцедураКнопкаСформироватьНажатие(Элемент)
367
366
Использование основных объектов конфигурации Использование регистра расчета
368 369
Использование основных объектов конфигурации Использование регистра расчета
370 371
Подсистема
373
372
Использование основных объектов конфигурации Подсистема
Создание подсистем
374 375
Использование основных объектов конфигурации
Подсистема
376 377
Интерфейс, роль, список пользователей
П
Кроме этого, должна существовать возможность ограничить ри создании ролей исходят, как правило, из того, какие
пользователей в выполнении тех или иных действий с объектами базы полномочия требуются различным группам пользователей на
данных. Например, кладовщик может создавать и изменять приходные доступ к информации. Для этого ролей мы воспользуемся
накладные, поскольку он отвечает за учет материалов на предприятии. подсистемами, которые значительно облегчат нашу задачу. Первая
Мастеру может понадобиться просматривать приходные накладные роль, которую мы создадим, будет роль «Администратор». Она
для того, чтобы знать, какие материалы и когда были получены. должна включать в себя полные права на работу с данными
Однако мастер не должен иметь возможности вносить какие-либо информационной базы.
изменения в приходные накладные.
378 379
Использование основных объектов конфигурации т Интерфейс, роль, список пользовате
Создадим новый объект конфигурации Роль с именем создано ни одного объекта. Для таких видов объектов конфигурации
«Администратор». Откроется окно редактирования прав: останутся установлены полные права.
Теперь нам останется лишь пройти по видам объектов
конфигурации и установить для них права «Чтение», «Просмотр» и
«Использование». Вторая роль нашей конфигурации готова.
Следующая роль, которую мы создадим, будет роль «Мастер».
Снова создадим новый объект конфигурации Роль с именем «Мастер»
и снимем все права в окне редактирования прав. После этого,
Выполним команду Действия | Установить по подсистемам и
выберем подсистему «УчетМатериаловИУслуг». В результате будут
установлены все права на объекты конфигурации, относящиеся к
данной подсистеме.
380
381
Использование основных объектов конфигурации Интерфейс, роль, список пользователей
Если теперь установить фильтр объектов по подсистем В заключение нам с вами осталось создать две роли: «Бухгалтер» и
«УчетМатериаловИУслуг», то можно, при необходимости, внести «Расчетчик». Мы разделим права по расчету зарплаты и по ведению
уточнения в установленные права: бухгалтерского учета. Дело в том, что в OOO «На все руки мастер»
есть бухгалтер и помощник бухгалтера. Помощник бухгалтера занят, в
основном, расчетом зарплаты, но иногда это делает и главный
Установим фильтр по подсистеме...
бухгалтер. Поэтому ему необходимо будет назначить обе роли, в то
время как помощнику - только роль «Расчетчик».
Создадим новый объект конфигурации Роль с именем «Расчетчик».
В окне редактирования прав снимем все права и затем установим их по
подсистеме «РасчетЗарплаты» (и не забудем запретить интерактивное
удаление).
В заключение создадим объект конфигурации Роль с именем
«Бухгалтер». В окне редактирования прав снимем все права и затем
установим их по подсистеме «Бухгалтерия». После этого отфильтруем
список объектов по этой подсистеме и для справочника
«Номенклатура» запретим добавление, изменение и удаление. Также
запретим интерактивное удаление для всех объектов.
Список прав для каждой роли можно получить, выполнив в окне
редактирования прав команду Действия | Вывести список.
Теперь мы можем перейти к созданию интерфейсов.
382
383
Использование основных объектов конфигурации Интерфейс, роль, список пользователей
Д ля того, чтобы понять, какие интерфейсы нужно создать в выделенного подменю. В этих списках перечислены те пункты
подменю и те команды в них, которые предлагается создать по
нашей конфигурации, следует определиться с тем, какие
умолчанию. Разработчик может вручную отметить или снять отметку с
группы пользователей собираются работать с нашим
тех или иных подменю и команд или воспользоваться возможностью
прикладным решением.
построения интерфейса на основе подсистем, существующих в
Скорее всего, это будут руководители, мастера и бухгалтеры. В конфигурации.
соответствии с этим мы создадим три различных интерфейса:
«Руководитель», «Мастер» и «Бухгалтер». Кроме этого, следует не По умолчанию предлагается сформировать списки подменю и
забыть про то, что у каждой базы данных, как правило, есть команд по всем подсистемам конфигурации, но, нажав кнопку «По
администратор - специально выделенный человек, отвечающий за подсистемам», можно указать только некоторые подсистемы. Тогда
непрерывное функционирование базы, сохранность и достоверность конструктор построит меню, основываясь на тех объектах
данных. Поскольку администратору нужно предоставить возможность конфигурации, которые относятся к указанным подсистемам.
осуществлять обслуживание базы данных - для него мы тоже Мы так и поступим. Первый интерфейс, который мы будем
создадим отдельный интерфейс - «Администратор». создавать, будет интерфейс «Бухгалтер». Поэтому выберем
подсистемы «Бухгалтерия» и «РасчетЗарплаты» и нажмем
«Установить». В конструкторе меню обновится список команд и
используемых подменю. Нажмем «Построить» и зададим имя
интерфейса - «Бухгалтер». Укажем, что этот интерфейс будет
относиться к подсистемам «Бухгалтерия» и «РасчетЗарплаты».
384 385
Интерфейс, роль, список пользователей
Использование основных объектов конфигурации
Вместе с палитрой свойств на экране открылось окно редактст- В данном случае нас все устраивает, за исключением пункта
«Прочие», в котором для команды «Основной» мы дадим более
интерфейса - остановимся на нем подробнее: понягный текст - «План счетов Основной»:
387
386
Использование основных объектов конфигурации
Интерфейс, роль, список пользоват<
Д
Разработчик, по своему усмотрению может добавлять, изменять и
ля того, чтобы иметь возможность отличать друг от друга
удалять пункты меню. Эти действия просты и не требуют специальных
пользователей, работающих с информационной базой, в
описаний. И поскольку создание удобного и эргономичного меню ~ системе 1С:Предприятие существует режим ведения списка
задача творческая - мы лишь показали возможность быстрого пользователей.
создания некоей заготовки, которую разработчик может впоследствии
самостоятельно доработать под нужды конкретной группы В этом режиме администратор базы имеет возможность создавать и
пользователей. удалять пользователей системы, назначать им интерфейсы и роли и
т.д.
Прежде чем мы приступим к созданию списка пользователей,
необходимо выполнить обновление конфигурации базы данных,
поскольку пользователю можно поставить в соответствие только тот
интерфейс, и те роли, которые существуют в конфигурации базы
данных.
После того, как обновление произведено, выполним команду
Администрирование | Пользователи. Откроется список
пользователей системы.
Пока что он пуст, поэтому добавим нового пользователя (Действия
| Добавить):
388
389
Использование основных объектов конфигурации Интерфейс, роль, список пользователей
Полное имя - строка, которая может быть использована внутри Отметим роль «Администратор», основным интерфейсом укажем
конфигурации при выводе различной справочной информации «Администратор» и язык конфигурации выберем «Русский».
Хорошим стилем администрирования считается указание в качестве После этого создадим остальных пользователей системы. Для всех
полного имени - фамилии, имени и отчества пользователя (без них мы будем использовать аутентификацию Windows и русский язык:
сокращений).
Следующие две области окна посвящены способам
аутентификации пользователя.
Аутентификация средствами 1С:Предприятия подразумевает,
что после запуска системы пользователю будет предложено выбрать
имя одного из пользователей системы и ввести пароль. Если
введенный пароль соответствует тому, который сохранен в системе
для этого идентификатора пользователя, система открывается с
правами и интерфейсом, которые указаны для этого пользователя.
Аутентификация Windows подразумевает, что при запуске системы
1С:Предприятие от пользователя не требуется никакой Обратите внимание, что главному бухгалтеру Назаровой
дополнительной информации. Система 1С:Предприятие определяет поставлены в соответствие две роли: «Расчетчик» и «Бухгалтер»,
под каким пользователем запущена операционная система Windows поскольку она должна иметь возможность не только вести
(имеет смысл использовать для NT-подобных операционных систем: бухгалтерский учет, но и рассчитывать зарплату.
NT, 2000, XP), и затем обращается к своему списку пользователей. Список пользователей, зарегистрированных в системе, можно
Если она находит в нем пользователя, которому поставлен в получить, выполнив команду Действия | Вывести список.
соответствие текущий пользователь Windows, система открывается с Теперь вы можете зайти в нашу информационную базу под
правами и интерфейсом, которые указаны для этого пользователя. различными пользователями и посмотреть, чем отличаются внешний
Зададим имя пользователя «Администратор», полное имя тоже вид интерфейса и возможности различных пользователей.
«Администратор». Перейдем на закладку «Прочие».
390 391
Использование основных объектов конфигурации
393
392
Использование основных объектов конфигурации Обмен данными
С
редства обмена данными, которые содержит система XML-сериализация позволяет преобразовать объект
1С:Предприятие 8.0 позволяют организовывать обмен 1С:Предприятия в последовательность данных, представленных в
информацией, хранимой в базе данных, с другими формате XML. Кроме этого, XML-сериализация выполняет и обратное
программными системами. В качестве таких систем могут преобразование - преобразует последовательность данных формата
выступать как другие информационные базы 1С:Предприятия 8.0 XML в объект 1С:Предприятия, при условии, что имеется
(имеющие аналогичную или отличающуюся конфигурацию), так и соответствующий тип 1С:Предприятия.
программные системы, не основанные на 1С:Предприятии 8.0. Запись и чтение документов XML обеспечивают запись/чтение
Такая гибкость обмена данными достигается тем, что средства документов формата XML из встроенного языка.
обмена данными 1С:Предприятия 8.0 могут использоваться в При реализации алгоритма обмена данными перечисленные
различных комбинациях, и кроме этого, формат обмена данными механизмы могут быть использованы как все вместе, так и в различной
основан на языке XML, являющимся на сегодняшний день комбинации. В каждом конкретном случае разработчик решает эту
общепринятым средством представления данных. задачу самостоятельно.
К механизмам обмена данными могут быть отнесены: В примере, приведенном в этой книге, мы используем все три
механизма обмена данными, поэтому прежде чем перейти
• Планы обмена,
непосредственно к написанию кода, познакомимся с каждым из них
• XML-сериализация, более подробно.
• Средства чтения и записи документов XML.
В общем случае схема взаимодействия этих трех составляющих Объект конфигурации ПланОбмена
Д
может быть представлена следующим образом: ля того, чтобы существовала возможность обмена какими-либо
данными с кем-либо, необходимо некоторым образом
идентифицировать тех, с кем мы будем обмениваться и для
каждого из них описать перечень того, чем мы будем с ним
обмениваться.
Обе эти задачи позволяет решать прикладной объект конфигурации
План обмена.
Подобно тому, как элементами данных справочника являются
элементы справочника, элементами данных плана обмена являются
узлы плана обмена. Каждый узел идентифицирует участника обмена
данными по данному плану обмена. Кроме этого, в каждом плане
обмена всегда существует один предопределенный узел,
При помощи планов обмена мы получаем информацию о том, какие идентифицирующий данную информационную базу.
элементы данных были изменены, и в какой узел обмена их В одной конфигурации может существовать несколько планов
необходимо передать. Это возможно благодаря тому, что планы обмена. Каждый план обмена определяет набор данных, которым
обмена содержат механизм регистрации изменений. Информация об будет производиться обмен в рамках данного плана и сам механизм
этого обмена. Наличие нескольких планов обмена может
394 395
Использование основных объектов конфигурации Обмен данными
потребоваться в случае, если с разными узлами ведется обмен разным в конечном итоге, к записи или удалению объекта обмена. Механизм
составом данных, или когда схема организации обмена с одними регистрации изменений анализирует события записи и удаления
узлами отличается от схемы организации обмена с другими узлами. объектов обмена и на основании параметров обмена данными,
В состав данных, которыми может производиться обмен, входят содержащихся в каждом из объектов обмена, формирует записи
элементы информационных структур базы данных, которые регистрации изменений. Следует отметить, что свойство
описываются следующими объектами встроенного языка: «ОбменДанными» не хранится в базе данных, а используется только во
время записи объекта обмена.
• Константа.МенеджерЗначения<имя>, Так вот, признак «Авторегистрация», устанавливаемый при
• СправочникОбъект.<имя>, указании состава данных плана обмена, позволяет указать, что
• ДокументОбъект.<имя>, параметры обмена данными будут формироваться каждый раз самим
• ПоследовательностьНаборЗаписей<имя>, механизмом регистрации изменений на основании информации,
• ПланВидовХарактеристикОбъект<имя>, содержащейся в плане обмена. После автоматического заполнения
• ПланСчетовОбъект.<имя>, параметров обмена, разработчик все же имеет возможность внести
• ПланВидовРасчетаОбъект<имя>, изменения в сформированные таким образом параметры. Для этого
• РегистрСведенийНаборЗаписей.<имя>, следует использовать обработчики событий объектов, участвующих в
• РегистрНакопленияНаборЗаписей<имя>, обмене - «ПередЗаписью» и «ПередУдалением», в которых можно
• РегистрБухгалтерииНаборЗаписей.<имя>, модифицировать список узлов-получателей (т.е. тех узлов, для
• РегистрРасчетаНаборЗаписей.<имя>, которых регистрируются изменения). Кроме этого, существует
• ПерерасчетНаборЗаписей.<имя>, возможность отключить авторегистрацию изменений, и тогда
• БизнесПроцессОбъект.<имя>, параметры обмена данными нужно будет формировать полностью
средствами встроенного языка. Гипотетически делать это можно в
• ЗадачаОбъект.<имя>,
любом фрагменте кода, но для того, чтобы конфигурация была легко
• УдалениеОбъекта.
читаема, рекомендуется использовать для этих целей все те же
Для упрощения изложения, в дальнейшем будем называть эти обработчики событий «ПередЗаписью» и «ПередУдалением». В этом
элементы информационных структур объектами обмена. случае код формирования параметров обмена данными будет
Разработчик имеет возможность определить состав каждого плана сосредоточен в логически понятных точках, а не разбросан по всей
обмена, указав, объекты конфигурации, данные которых должны конфигурации.
участвовать в обмене по данному плану. Итак, как мы теперь знаем, при записи и удалении объектов обмена
При описании состава данных плана обмена разработчик имеет план обмена формирует записи регистрации изменений. Записи
возможность указать для каждого типа объектов признак регистрации изменений хранятся в таблицах регистрации изменений,
«Авторегистрация». Этот признак определяет, каким образом план причем для каждого объекта обмена ведется своя отдельная таблица
обмена будет отслеживать изменения этих данных. регистрации изменений. При изменении объекта обмена в таблице
Возможность отслеживать изменения данных реализована в плане регистрации изменений создается столько записей, сколько узлов-
обмена за счет использования механизма регистрации изменений. получателей указано в параметрах обмена данными у объекта обмена.
Работа этого механизма базируется на том, что каждый из объектов Каждая запись при этом будет хранить ссылку на свой узел-
обмена имеет свойство «ОбменДанными», с помощью которого можно получатель. Таблицы регистрации изменений создаются лишь в том
указать, для каких узлов необходимо производить регистрацию случае, если соответствующий объект метаданных указан в составе
изменений этого объекта. Любые изменения объекта обмена сводятся, хотя бы одного плана обмена.
396 397
Обмен данными
Использование основных объектов конфигурации
В
обмена, помимо службы регистрации изменений, является
отличие от XML-сериализации, механизмы записи/чтения
инфраструктура сообщений. Поскольку сообщения передаются в
документов XML позволяют работать с данными формата
рамках плана обмена от одного узла к другому, каждое сообщение
XML на «базовом» уровне, без привязки к объектам
точно ассоциировано с планом обмена, имеет уникальный номер и
1С:Предприятия. В частности они позволяют открывать файлы
имеет одного отправителя и одного получателя. За нумерацию
XML для чтения, читать данные из файлов, создавать новые файлы
сообщений отвечает инфраструктура сообщений, и благодаря этому
XML и записывать в них данные.
записи регистрации изменений и имеют возможность хранить номера
сообщений, в которых эти изменения были переданы первый раз.
Инфраструктура сообщений позволяет, также, получать
подтверждения от узла-получателя о приеме сообщений. Такое
подтверждение содержится в каждом сообщении, приходящем от узла-
получателя в виде номера последнего принятого сообщения.
Впоследствии, проанализировав номер последнего принятого
сообщения и номера сообщений, содержащиеся в записях регистрации
изменений, разработчик может удалить записи регистрации
изменений, прием которых подтвержден получателем.
XML-сериализация
399
398
Использование основных объектов конфигурации Обмен данными
если номера новых документов в двух базах совпадут, они все равно
Универсальный механизм обмена данными будут отличаться префиксом и конфликта не возникнет.
Для хранения префикса номеров мы используем объект
Постановка задачи конфигурации, с которым до сих пор еще не работали - это объект
И так, наше OOO «На все руки мастер» открыло свой филиал в Константа.
городе Урюпинск и установило в нем такую ясе
конфигурацию для учета работы филиала. В результате Создание константы ПрефиксНомеров
О
возникла необходимость наладить обмен данными между этими бъект конфигурации Константа является прикладным
двумя базами таким образом, чтобы каждая из баз отражала объектом и предназначен для создания в базе данных
полную информацию о материалах и услугах, в то время как структур, в которых будет храниться информация, которая не
бухгалтерский учет и расчет зарплаты велся бы в каждоЙ базе изменяется во времени или изменяется очень редко. Каждый объект
отдельно. конфигурации Константа описывает структуру для хранения одного
Для этого мы создадим план обмена, опишем состав данных, значения.
которые будут включены в обмен и создадим несколько процедур, Теперь приступим к созданию константы, в которой мы будем
которые будут позволять нам формировать на жестком диске файлы хранить значение префикса номеров. Откроем конфигуратор и
обмена и соответственно загружать полученные файлы обмена с создадим новый объект конфигурации Константа с именем
жесткого диска. Для упрощения примера мы не будем «ПрефиксНумерации». Определим тип значения константы - Строка,
программировать какой-либо автоматический обмен файлами между с фиксированной длиной 2 символа.
двумя базами, и запуск процедуры обмена будем осуществлять
вручную. Доработка объектов конфигурации, участвующих в
Прежде чем мы начнем непосредственно программировать обмене
П
алгоритм обмена, следует сказать о некоторых доработках, которые
нам придется предварительно внести в нашу базу. ервое, что нам следует сделать - внести изменения в модули
всех объектов, участвующих в обмене (в нашем случае это
Эти доработки будут связаны с тем, что до сих пор мы работали будут документы, справочники и планы видов
только в одной базе и использовали уникальность номеров кодов характеристик). Эти изменения будут заключаться в том, что теперь
справочников и номеров документов. Теперь, когда создание новых при формировании номера документа и кода справочника или плана
элементов справочников и новых документов будет происходить в видов характеристик будет использоваться значение константы
двух базах одновременно и независимо друг от друга, нам снова «ПрефиксНумерации» для обеспечения уникальности номеров и кодов
необходимо обеспечить уникальность номеров кодов элементов в каждой из наших баз.
справочников и номеров документов теперь уже «в пространстве»
двух баз. Если мы этого не сделаем, то не исключена ситуация, когда Функцию формирования префикса номера мы вынесем в общий
в каждой из баз будут созданы, например, новые документы с модуль, поскольку не исключена возможность того, что в будущем
одинаковыми номерами и при обмене данными возникнет конфликт, алгоритм формирования префикса документов может быть изменен.
поскольку система будет пытаться записать в базу документ с
номером, который уже используется другим документом.
Для исключения подобных ситуаций в каждой базе к номерам
документов и кодам справочников мы будем добавлять уникальный
префикс, однозначно идентифицирующий базу данных. Тогда, даже
400 401
Использование основных объектов конфигурации Обмен данными
Функцию мы разместим в общем модуле «ОбменДанными», Такие же обработчики нужно будет добавить во все документы,
выглядеть она будет следующим образом: участвующие в обмене. После этого для всех них нужно изменить тип
номера на Строка и увеличить длину номера до 7 символов.
Функция ПопучитьПрефиксНомера() Экспорт На этом подготовительная работа с существующими объектами
ВозвратКонсташы.ПрефиксНумерации.Получить(); конфигурации завершена, и мы можем перейти к созданию процедур
КонецФункции
обмена данными.
Как вы видите, эта функция просто возвращает значение константы
Создание плана обмена Филиалы
Т
«ПрефиксНумерации».
Теперь доработаем справочник «Клиенты». В модуль объекта еперь займемся созданием «центра» любого алгоритма обмена
добавим следующий обработчик события данными, вокруг которого группируются прочие механизмы -плана
«ПриУстановкеНовогоКода»: обмена. Откроем конфигуратор и создадим новый объект
конфигурации ПланОбмена с именем «Филиалы». На закладке
«Данные» создадим реквизит плана обмена «Главный», имеющий тип
Процедура ПриУстановкеНовогоКодаССтандартнаяОбработка, Префикс)
Булево.
Префикс = ПолучитьПрефиксНомера();
КонецПроцедуры _______________________________________________ Этот реквизит понадобится нам для того, чтобы разрешать
коллизии при обмене данными. Под коллизией понимается ситуация,
Событие «При установке нового кода» возникает в момент, когда когда один и тот же объект обмена данными был изменен
выполняется установка нового кода элемента справочника. Вторым одновременно в двух узлах. В этом случае мы будем анализировать
параметром вызова обработчика передается префикс, который будет значение реквизита «Главный» и принимать изменения только в том
использоваться системой для генерации кода. В обработчике события случае, если они сделаны в главном узле. В случае коллизии,
мы устанавливаем его равным значению константы изменения, произведенные не в главном узле, мы будем отвергать.
«ПрефиксНумерации». Теперь перейдем на закладку «Прочее» и определим состав
Такие же обработчики нужно будет добавить во все справочники и объектов обмена данными (кнопка «Состав»).
планы видов характеристик, участвующие в обмене. После этого у Установим отбор по подсистеме «УчетУслугИМатериалов» и
всех справочников и планов видов характеристик, участвующих в включим в обмен все объекты, относящиеся к этой подсистеме.
обмене, нужно будет изменить тип кода на Строка и увеличить длину Проверьте, что константа «ПрефиксНумерации» не участвует в
кода до 7 символов. обмене, поскольку ее значение должно быть уникальным для каждой
Теперь займемся доработкой документов. В модуль документа базы, участвующей в обмене.
«ПриходнаяНакладная» добавим обработчик события
«ПриУстановкеНовогоНомера»:
ПроцедураПриУстановкеНовогоНомераССтандартнаяОбработка,
Префикс)
Префикс = ПолучитьПрефиксНомера();
КонецПроцедуры___________________________________
402 403
Использование основных объектов конфигурации Обмен данными
Состав данных обмена должен выглядеть следующим образом: Этот обработчик и будет устанавливать значение нашей служебной
переменной в Истина, в случае записи нового узла плана обмена.
После этого создадим обработчик события формы «ПриЗаписи»:
Процедура ПередЗаписью(Отказ)
РегистрацияВНовыйУзел = ЭтоНовый();
КонецПроцедуры
404 405
Использование основных объектов конфигурации Обмен данными
О
КонедПроцедуры
ткроем конфигуратор и создадим новый объект
конфигурации Обработка с именем «ОбменДанными». Перейдем
на закладку «Прочее» и откроем модуль объекта. Создадим в нем Создание процедуры записи данных
С
процедуру «ОбменСФилиалами»: ами процедуры записи и чтения данных обмена мы разместим в
модуле объекта План обмена «ОбменСФилиалами». Сначала
Процедура ОбменСФилналами() Экспорт создадим процедуру, которая используется нами при обмене
ВыборкаУзлов = ПланыОбмена.Филиалы.Выбрать(); данными - «ЗаписатьСообщениеСИзменениями». Порядок создания
Пока ВыборкаУзлов.Следующий() Цикл
этой процедуры будет следующим: сначала мы сформируем имя
файла, который будет содержать данные для обмена:
// Произвести обмен данными со всеми узлами,
// кроме текущего (ЭтотУзел)
Если ВыборкаУзлов.Ссылка о ПланыОбмена Процедура ЗаписатьСообщениеСИзменениями() Экспорт
.Филиалы Сообщить(" ------- Выгрузка в узел" + Строка(ЭтотОбъект) + " ------------ ");
.ЭтотУзел() Тогда УзелОбъект = Каталог = КаталогВременныхФайлов();
ВыборкаУзлов.ПолучитьОбъект(); // Сформировать имя временного файла
ИмяФайла = Каталог +?(Прав(Каталог, 1) = "\","", "\") +
// Получить сообщение "Message" + СокрЛЩПланыОбмена.Филиалы.ЭтотУзел().Код) + "_" +
СокрЛП(Ссылка.Код) + ".xml";
УзелОбъект.ПрочитатьСообщениеСИзменениями();
Сообщить(" ------- Конец выгрузки ------------ ");
// Сформировать сообщение КонецПроцедуры
УзелОбъект.ЗаписатьСообщениеСИзменениямиО;
406 407
Использование основных объектов конфигурации Обмен данными
408 409
Использование основных объектов конфигурации Обмен данными
//*** инфраструктура сообщений Сначала мы формируем имя файла, которое надеемся найти в этом
ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения(); каталоге, а затем, создав новый объект Файл с таким именем,
ЗаписьСообщения.НачатьЗапись(ЗаписьXML,Ссылка); проверяем, существует ли он. Если такого файла нет, мы завершаем
Сообщить(" Номер сообщения:" + ЗаписьСообщения.НомерСообщения);
работу процедуры. Если же такой файл найден, нужно будет удить его
// Получить выборку измененных данных после того, как все данные, содержащиеся в нем, будут обработаны.
//*** механизм регистрации изменений
ВыборкаИзменений = ПланыОбмена
Теперь добавим в процедуру команды чтения найденного файла с
.ВыбратьИзменения(ЗаписьСообщения.Получатель, данными обмена:
ЗаписьСообщения.НомерСообщения);
Пока ВыборкаИзмеиений.Следующий() Цикл Процедура ПрочитатьСообщениеСИзменениями() Экспорт
// Записать данные в сообщение Каталог = КаталогВременныхФайлов();
//***XML-сериализация
ЗаписатьХМЦЗаписьХМЬ,ВыборкаИзменешш.Получить()); // Сформировать имя файла
КонецЦикла; ИмяФайла = Каталог +?(Прав(Каталог, 1) = "\","", "\") + "Message" +
СокрЛП(Ссылка.Код) + "_* +
ЗаписьСообщения.ЗакончитьЗапись();
СокрЛП(ПланыОбмена.Филиалы.ЭтотУзел()-Код) + ".xml"; Файл =
ЗаписьXML.Закрыть();
Новый Файл(ИмяФайла); Если Не Файл.Существует() Тогда
Сообщить(" --------Конец выгрузки------------ ");
Возврат;
КонецПроцедуры
КонецЕсли;
П
Исключение
орядок создания процедуры чтения данных обмена будет таким Сообщить("Невозможно открыть файл обмена данными.");
же, как и ранее: сначала мы сформируем имя файла,
содержащего данные обмена:
410 411
Использование основных объектов конфигурации Обмен данными
412 413
Использование основных объектов конфигурации Обмен данными
которого мы в данном вызове этой процедуры производим обмен // Удаляем регистрацию изменений
данными. // для узла отправителя сообщения
//*** служба регистрации изменений
Если все в порядке, то перед тем, как начать чтение данных следует
ПланыОбмена.УдалитьРегистрациюИзменений(ЧтениеСообщения.Отправитель,
удалить все записи регистрации изменений, которые были сделаны для ЧтениеСообщения.НомерПринятого);
этого узла и соответствовали номерам сообщений меньше или равным ЧтениеСообщения.ЗакончитьЧтение(); ЧтениеXML.Закрыть();
тому, который указан в обрабатываемом нами сообщении как номер УдалитьФайлы(ИмяФайла);
Сообщить(" ------- Конец загрузки------------ ");
принятого. Это делается затем, чтобы исключить повторную посылку КонецПроцедуры
данных, которые уже были ранее посланы этому узлу и им
обработаны:
Обратите внимание, что здесь мы обращаемся к службе
Процедура ПрочитатьСообщениеСИзменениями() Экспорт регистрации изменений и используем метод
Каталог = КаталогВременныхФайлов(); УдалитьРегистрациюИзменений() для выполнения описанных
действий.
// Сформировать имя файла
ИмяФайла = Каталог +?(Прав(Каталог, 1) = "\","", "\") + "Message" + Теперь, наконец, мы можем приступить к чтению непосредственно
СокрЛП(Ссылка.Код) + "_" + самих данных, содержащихся в сообщении:
СокрЛП(ПланыОбмена.Филиалы.ЭтотУзел().Код) + ".xml"
Файл = Новый Файл(ИмяФайла);
Если Не Файл.Существует() Тогда Процедура ПрочитатьСообщениеСИзменениями() Экспорт
Возврат; Каталог = КаталогВременныхФайлов();
КонецЕсли;
// Сформировать имя файла
//*** Чтение документов XML // ИмяФайла = Каталог +?(Прав(Каталог, 1) = "\","", "\")+
Попытаться открыть файл _ "Message" + СокрЛП(Ссылка.Код) + "_" +
414 415
Использование основных объектов конфигурации Обмен данными
416 417
Использование основных объектов конфигурации Обмен данными
418 419
Использование основных объектов конфигурации
Обмен данными
420
421
Обмен данными
Использование основных объектов конфигурации
П
филиала, присвоим ему код «Фил» и наименование «Филиал»:
режде всего создадим новый каталог, в котором будет
размещаться база нашего филиала и сохраним в этот каталог
нашу конфигурацию
(Конфигурация | Сохранить конфигурацию в файл...).
Запустим 1С:Предприятие в режиме отладки и установим
необходимые значения в нашей центральной базе. Прежде всего
зададим значение константы «ПрефиксНомеров» - «ЦБ»:
423
d?.7
Использование основных объектов конфигурации Обмен данными
Первым делом зададим значение константы «ПрефиксНомеров» Теперь, для большей наглядности откроем список справочника
«Клиенты». Сейчас в этом справочнике нет ни одного элемента.
«ФЛ»:
Запустим обработку «ОбменДанными» и нажмем «Выполнить».
Справочник будет заполнен элементами, а в окне сообщений
появится текст:
424 425
Обмен данными
Использование основных объектов конфигурации
К
информационных баз ак мы уже говорили выше, распределенная информационная
М еханизм распределенных информационных баз является база должна иметь четко определенную древовидную
развитием универсального обмена данными. Он реализует структуру. Количество уровней в такой структуре не
привычную, по версии 7.7, модель распределенной ограничено, главное - между двумя связанными узлами всегда
информационной базы, которая подразумевает наличие должно быть определено отношение «главный - подчиненный»:
идентичных конфигураций во всех узлах, имеет древовидную
структуру и позволяет выполнять обмен как измененными данными
так и изменениями, внесенными в конфигурацию.
Механизм распределенных информационных баз реализуется
планами обмена. Для этого объект конфигурации План обмена
содержит свойство «Распределенная информационная база». Если это
свойство установлено, для данного плана обмена включается механизм
распределенных информационных баз и разработчик получает
возможность создать распределенную базу исключительно
интерактивными средствами, без написания кода. Такая возможность
не исключает программное управление обменом, которое также
доступно при работе с распределенными информационными базами и
в ходе создания примера мы рассмотрим оба варианта организации
обмена в распределенных информационных базах.
Таким образом, любой узел этой структуры может иметь
произвольное количество подчиненных узлов (в том числе и ни
одного). Кроме этого все узлы, кроме одного, должны иметь по
одному главному узлу, и один узел не будет иметь главного узла - это
корневой узел.
Такое жесткое задание структуры узлов необходимо для
определения порядка миграции изменений данных и изменений
конфигурации.
Конфигурация может быть изменена только в узле, не имеющем
главного узла (то есть в корневом узле). Изменения данных могут
выполняться в любом узле.
Изменения конфигурации будут передаваться от главного к
подчиненным узлам. Изменения данных могут передаваться между
любыми связанными узлами.
427
426
Использование основных объектов конфигурации Обмен данными
Д
данными будут приняты только изменения главного узла, а изменения
ля построения распределенной информационной базы нам
подчиненного отвергнуты.
понадобится создать еще один объект конфигурации План
Для любого подчиненного узла возможно создание начального обмена, который мы назовем «Отделения».
образа - информационной базы, созданной на основании
конфигурации и данных главного узла, в соответствии с правилами Для этого плана обмена мы установим свойство
«Распределенная информационная база»:
определяемыми планом обмена. Процедура создания начального
образа узла может выполняться неоднократно, при этом удаляются все
записи изменений в базе главного узла для подчиненного узла. Сразу
Установим свойство
после создания начальный образ готов к обмену с главным узлом. «Распределенная информационная база»...
Создание начального образа является рекомендуемым способом
создания подчиненного узла в распределенной информационной базе.
Постановка задачи
428 429
Обмен данными
Использование основных объектов конфигурации
431
430
Использование основных объектов конфигурации
Обмен данными
Запустим базу отделения в режиме отладки и откроем план обмена После этого закроем конфигуратор информационной базы
«Отделения»: отделения, и выполним чтение изменений в базе подчиненного узла.
По окончании чтения система выдаст следующее сообщение:
В
се описанные выше действия по обмену данными в
распределенной информационной базе можно выполнить
программно.
Мы создадим обработку, которая будет
программно выполнять для выбранного узла все те действия,
которые были рассмотрены в предыдущем разделе.
432
433
Использование основных объектов конфигурации
т Обмен данными
Для этого в конфигураторе центральной базы создадим новь,й Начнем с создания обработчика нажатия кнопки «Создать
объект конфигурации Обработка с именем «ОбменСОтделениями». начальный образ». Текст обработчика будет выглядеть следующим
Создадим основную форму обработки и расположим на неи поле ввода образом:
с именем «ПолеВводаОтделение», подписью «Отделение:» и типом
ПланОбменаСсылка.Отделения: ПроиедураКнопкаСоздатьНачальныйОбразНажатие(Элемент)
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);
Диалог.Заголовок = "Укажите каталог информационной базы:"; Если Диалог.Выбрать()
Тогда ПланыОбмена.СоздатьНачальныйОбраз(ПолеВводаОтделение,
"Filе="+Диалог.Каталог);
Предупреждение("Создание начального образа узла завершено.");
КонецЕсли; КонецПроцедуры
434 435
Использование основных объектов конфигурации Обмен данными
ЗаписьХМL.Закрыть();
И последним мы создадим обработчик нажатия кнопки «Прочитать
изменения»:
Предупреждение("Запись изменений завершена.");
КонецЕсли; КонецПроцедуры
ПроцедураКнопкаПрочитатьИзмененияНажатие(Элемент)
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
В начале процедуры мы вызываем диалог ввода имени файла, в Диалог.Заголовок = "Укажите файл обмена:"; Если Диалог.Выбрать() Тогда
который будут записаны изменения. После этого мы создаем объект
3arwcbXML для работы с этим файлом. Затем создаем объект // Создать я проинициализаровать объект ЧтениеХМL
ЗаписьСообщенияОбмена, с помощью которого будем создавать ЧтениеХМL = Новый ЧтениеХМL;
ЧтениеХМL.ОткрытьФайл(Диалог.ПолноеИмяФайла);
сообщение обмена. В методе НачатьЗапись(), во втором параметре,
мы указываем, для какого узла обмена будет создаваться это // Создать объект ЧтениеСообшенияОбмена //
сообщение. После этого мы выполняем метод ЗаписатьИзменения() и начать чтение сообщения
ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения();
объекта ПланыОбменаМенеджер, который и записывает изменения, ЧтениеСообщения.НачатьЧтение(ЧтениеХМL);
предназначенные для передачи в выбранный узел, в указанное
сообщение обмена. В заключение мы как обычно заканчиваем запись // Прочитать содержимое тела сообщения
ПланыОбмена.ПрочитатьИзмененияЧтениеСообщения);
сообщения обмена и закрываем файл.
// Закончить чтение сообщения и чтение XML
ЧтениеСообщения.ЗакончитьЧтение();
<*■ Узнай больше! ЧтениеХМL. Закрыть();
Следует отметить, что метод ЗаписатьИзменения() позволяет
Предупреждение("Чтение изменений завершено.");
задать максимальное число элементов данных, которые помещаются КонецЕсли; КонецПроцедуры
в сообщение в рамках одной транзакции базы данных. По умолчанию
все данные помещаются в сообщение в рамках одной транзакции.
В начале процедуры мы снова вызываем диалог ввода имени файла,
Такой режим является рекомендуемым, так как гарантирует
который будет прочитан, и создаем объект ЧтениеХМЬ для работы с
согласованность данных, помещаемых в сообщение.
этим файлом. Затем создаем объект ЧтениеСообщенияОбмена для
Но при создании сообщения в многопользовательском режиме чтения сообщения, содержащегося в указанном файле. Затем методом
могут быть конфликты блокировок между транзакцией, в которой ПрочитатьИзменения() объекта ПланыОбменаМенеджер мы
данные помещаются в сообщение, и транзакциями, выполняемыми читаем полученное сообщение. В заключение процедуры мы
другими пользователями. Для снижения вероятности возникновения завершаем чтение сообщения обмена и закрываем файл.
таких конфликтов можно задать значение этого параметра, Проверить работу нашей обработки можно на примере,
отличное от значения no умолчанию. Чем меньше значение аналогичном приведенному в разделе универсального обмена
параметра, тем меньше вероятность конфликта блокировок, но Данными.
выше вероятность помещения в сообщение несогласованных данных.
Учитывая все вышесказанное, идеальным вариантом являегпсЯ
выполнения обмена данными в монопольном режиме. Однако такой
вариант не всегда приемлем, в силу специфики организации работы
конкретных информационных баз.
436 437
Использование основных объектов конфигурации Обмен данными
Следует лишь сделать несколько заключительных замечаний. Параметр «ОтправкаЭлемента» позволяет управлять тем, какая
При использовании механизма распределенных информационных информация будет помещена в сообщение. Он может принимать три
баз становятся доступными четыре события объект значения:
ПланОбменаОбъект, которые позволяют управлять отправкой \
приемом данных на уровне отдельных элементов данных: • ОтправкаЭлементаДанных.Авто - значение по умолчанию
- указывает на то, что элемент данных будет помещен в
• ПриОтправкеДанныхГлавному(), сообщение,
• ПриОтправкеДанныхПодчиненному(), • ОтправкаЭлементаДанных.Удалить - в сообщение будет
• ПриПолученииДанныхОтГлавного(), помещено значение, предназначенное для удаления этого
• ПриПолученииДанныхОтПодчиненного(). элемента данных,
Эти события будут вызываться для каждого элемента данных • ОтправкаЭлементаДанных.Игнорировать - в сообщение
включаемого в сообщение. Работу этих событий можно увидеть не будет помещено ничего, связанного с этим элементом
добавив в модуль объекта План обмена следующий текст: данных.
Параметр «ПолучениеЭлемента» позволяет указать, будет ли
ПроцедураПриОтправкеДанныхГлавному(ЭлементДанных, ОтправкаЭлемента)
прочитанный элемент данных записан в базу данных, или нет.
Сообщить("ПриОтправкеДанныхГлавному "+ЭлементДанных);
Параметр также может принимать три значения:
КонецПроцедуры
ПроцедураПриОтправкеДанныхПодчиненному(ЭлементДанньгх, ОтправкаЭлемента) • ПолучениеЭлементаДанных.Авто - значение по
Сообщить(" ПриОтправкеДанныхПодчиненному"+ЭлементДанных); умолчанию. Если элемент данных получен от главного узла -
КонецПроцедуры он будет записан всегда. Если элемент данных получен от
ПроцедураПриПолученииДаннькОтГлавного(ЭлементДанных,ПолучениеЭлемента, подчиненного узла, он будет записан только в случае, если не
ОтправкаНазад) зарегистрированы изменения для этого элемента данных,
Сообщить("ПриПолученииДанныхОтГлавного "+ЭлементДанных); • ПолучениеЭлементаДанных.Принять - полученный
КонецПроцедуры элемент данных будет записан всегда,
ПроцедураПриПолученииДанныхОтПодчиненного(ЭлементДанньк, • ПолучениеЭлементаДанных.Игнорировать
ПолучениеЭлемента, ОтправкаНазад) проигнорировать получение элемента данных и ничего не
Сообщить("ПриПолученииДанныхОтПодчиненного "+ЭлементДанных); записывать.
Также в событиях получения данных существует третий параметр -
В первом параметре всех перечисленных событий находится тот «ОтправкаНазад», имеющий тип Булево. Этот параметр позволяет
элемент данных, для которого вызвано это событие. выполнять принудительную регистрацию изменений для полученного
элемента данных в базе-получателе. Такая необходимость может
возникнуть, например, в случае, когда при приеме данных от узла-
отправителя обнаружено, что полученные данные противоречивы
(например, в узле-отправителе была допущена ошибка при изменении
Данных). Тогда мы можем проигнорировать присланные изменения и,
подняв флаг «ОтправкаНазад», вызвать принудительную регистрацию
изменений полученного элемента данных в нашей базе для узла-
отправителя. В результате последующего обмена состояние этого
438 439
Использование основных объектов конфигурации Обмен данными
элемента данных в узле-отправителе будет установлено таким же, как // В информационной базе Узла1
и в нашей базе. ПланыОбменаМенеджер.УстановитьГлавныйУзел(Узел2);
440 441
Использование основных объектов конфигурации Обмен данными
442 443
Анализ и прогнозирование данных
Следует заметить, что наше изложение будет касаться лищь Прогнозирование позволяет, на основе проведенного анализа
непосредственно тех механизмов, которые реализованы в платформе данных, предсказать последующие события или значения некоторых
1С:Предприятия 8.0. Для получения базовой теоретической характеристик для новых исходных данных.
информации по методам анализа данных, соответствующим Таким образом, результаты анализа являются основой, на которой
реализованным моделям, следует обратиться к специальной строятся последующие прогнозы.
литературе. Мы полагаем, что разработчик, приступающий к анализу Например, в нашей базе имеются данные о том, какие товары и
данных, уже владеет необходимыми теоретическими знаниями. когда приобретались нашими клиентами. Было замечено, что если
Поскольку анализ данных подразумевает наличие большого объема клиент приобретал, скажем, диван «Сказка», то через некоторое время
исходной информации, для всех примеров, рассматриваемых далее, мы он, зачастую, приобретал и кресло «Сказка», из того же набора мягкой
будем использовать не информационную базу нашего OOO «На все мебели.
руки мастер», а некую абстрактную базу данных, которая позволит Мы хотим проанализировать данные нашей базы в следующем
проиллюстрировать работу анализа и прогнозирования данных. виде: какие существуют наиболее вероятные последовательности
На диске информационно - технологического сопровождения, в покупок товаров одним и тем же клиентом? Иначе говоря - «как
составе демонстрационной конфигурации «Анализ данных», вы обстоят дела сейчас, если взять текущие данные и попробовать
можете найти универсальную обработку «Консоль анализа данных», определить, какие существуют последовательности покупаемых
которая позволит вам работать с анализом данных в любом товаров»?
прикладном решении без какого-либо программирования.
444 445
Использование основных объектов конфигурации Анализ и прогнозирование данных
В терминах 1С:Предприятия 8.0 такой процесс анализа данньп • поиск ассоциаций предназначен для поиска часто
можно представить следующей схемой: встречаемых групп характеристик объектов и создания правил
ассоциации «Если ... To ...» (например, такой анализ может
быть использован для поиска групп товаров, часто
покупаемых вместе),
• поиск последовательностей - применяется для выявления
цепочек событий часто наблюдаемых в источнике данных
(например, это может быть цепочка товаров или услуг,
которые часто последовательно приобретают клиенты),
• дерево решений - предназначен для выявления
закономерностей того, что объект относится к тому или иному
классу (например, при помощи дерева решения можно
проанализировать какие характеристики клиента влияют на то,
что он перейдет к другому поставщику),
• кластерный анализ - при помощи кластерного анализа можно
объединить объекты в группы (кластеры), в которых будут
находиться объекты, наиболее схожие по ряду характеристик.
Например, можно сгруппировать клиентов по их
характеристикам и деятельности, чтобы в дальнейшем
проанализировав полученные кластеры принять решение о
стратегии работы с клиентами определенных групп.
Анализ данных - объект встроенного языка (АнализДанных),
непосредственно выполняющий анализ данных. Объекту
устанавливается источник данных, задаются параметры,
Источник данных - представляет исходные данные для анализа. В настраиваются колонки анализа данных. Результатом работы данного
качестве источника данных может выступать результат запроса, объекта является результат анализа данных, тип которого зависит от
область ячеек табличного документа или таблица значений. типа анализа. Каждому типу анализа соответствует свой тип
Тип анализа - определяет вид результата, к которому должны быть результата анализа.
сведены исходные данные. Система поддерживает пять различных Результат анализа - объект встроенного языка, содержащий
типов анализа: информацию о результате анализа. Для каждого типа анализа
• общая статистика - позволяет получить общу ю предусмотрен свой тип результата. Например, результатом анализа
статистическую информацию об источнике данных для его данных типа АнализДанныхДеревоРешений будет объект типа
предварительного исследования (количество значений и РезультатАнализаДанныхДеревоРешений.
количество уникальных значений, минимальное, В дальнейшем результат может быть выведен в табличный
максимальное и среднее значение, размах, стандартное Документ при помощи построителя отчета анализа данных (о нем
отклонение, медиана, мода, частота появления каждого будет рассказано далее), может быть выведен посредством
значения в источнике), программного доступа к его содержимому, может быть использован
446 447
Использование основных объектов конфигурации Анализ и прогнозирование даннь IX
для создания модели прогноза. Любой результат анализа данны Источник данных - таблица значений, результат запроса или
может быть сохранен для последующего использования. область табличного документа, содержащая информацию, по которой
необходимо построить прогноз. Например, для модели прогноза
Теперь рассмотрим, как выглядит прогнозирование данных МодельПрогнозаПоискАссоциаций, выборка может содержать
Прогнозирование является попыткой предсказать новый результат, на перечень товаров документа продажи. Результат же работы модели
основе некоторой совокупности новых данных и определенной ранее может рекомендовать, какие товары можно еще предложить
модели. Иными словами, прогнозирование позволяет ответить на покупателю.
вопрос: «как будут обстоять дела, если мы будем иметь такие данные
при такой модели их взаимосвязи»? Модель прогноза - специальный объект, позволяющий выполнять
прогноз на основании входных данных. Тип модели зависит от типа
Возвращаясь к нашему примеру - «какой товар, с большой долей
анализа данных. Например, модель, созданная для анализа данных
вероятности, клиент приобретет в следующий раз, если до этого он АнализДанныхПоискАссоциаций будет иметь тип
совершал вот такие покупки, и текущие последовательности покупок МодельПрогнозаПоискАссоциаций. Такая модель сможет выдавать
товаров выглядят следующим образом»? прогнозы типа: «т.к. данный покупатель купил заданный набор
В терминах 1С:Предприятия 8.0 этот процесс прогнозирования товаров, то с определенной вероятностью он должен купить и другой
данных можно представить следующей схемой: набор товаров». На вход модели прогноза передается источник данных
для прогноза. Результатом является таблица значений, содержащая
прогнозируемые значения.
Таблица значений - таблица значений, состоящая из колонок,
согласно настройкам результирующих колонок модели прогноза,
содержащая прогнозируемые данные. Конкретное содержание
таблицы определяется типом анализа данных.
448 449
Использование основных объектов конфигурации Анализ и прогнозирование Цанщ
О
бъект анализ данных имеет возможность настройки колонок
источника данных и указания параметров анализа. Каждый
тип анализа подразумевает свою структуру исходных данных
и свой набор параметров анализа.
Общая статистика
Т
ип анализа АнилизДанныхОбщаяСтатистика позволяет
получать общестатистические показатели выборки, которую
представляют исходные данные.
Колонки исходных данных для
общестатистического анализа могут быть двух видов: содержащие
непрерывные данные, либо содержащие дискретные данные.
Если анализируемые значения являются числовыми, или имеют тип
Дата, то для такой колонки следует указывать вид данных
«Непрерывные». Во всех остальных случаях (в том числе при анализе
значений объектного типа), следует указывать вид данных
«Дискретные».
Для указания того или иного вида исходных данных используется
свойство объекта АнализДанных - НастройкаКолонок. Это
Как вы видите, на этой схеме появились новые прямоугольники. свойство содержит коллекцию значений, элементами которой
Мы рассмотрим их назначение в следующем разделе. являются объекты КолонкаАнализаДанных. Каждый такой объект
описывает одну колонку исходных данных. Для указания вида данных,
содержащихся в колонке, нужно использовать свойство объекта
КолонкаАнализаДанных - ВидДанных.
Для непрерывных и дискретных данных рассчитываются
различные статистические показатели.
Для непрерывных данных рассчитывается:
450 451
Использование основных объектов конфигурации Анализ и прогнозирование данных
• среднее значение - среднее арифметическое значений При выводе отчета при помощи построителя отчета анализа
данных, будет создана круговая диаграмма по относительной частоте
выборки,
значений в выборке.
• размах - разность между максимальным и минимальным
Типы колонок источника данных:
значением выборки,
• стандартное отклонение - среднее квадратичное отклонение
• Не используется - колонка не участвует в анализе,
равное корню квадратному из дисперсии выборки,
• Входная - содержит исходные данные для анализа.
• медиана - значение, лежащее в середине выборки
упорядоченной по возрастанию или убыванию. Другими Параметры анализа данных при общестатистическом анализе не
словами медиана делит выборку пополам; одна половина задаются.
выборки имеет значения меньше медианы, другая - больше. В
случае четного числа значений выборки, медиана Пример
В
рассчитывается как среднее арифметическое двух значений качестве примера общестатистического анализа рассмотрим
ближайших к центру выборки. анализ данных, содержащихся в регистре накопления
«Продажи». Для анализа выберем все записи регистра, в
Для дискретных данных рассчитывается:
которых нас будут интересовать значение ресурсов «Сумма»,
• количество значений - общее количество значений, «Количество» и значение измерения «Контрагент».
присутствующих в исходной выборке, Допустим, мы будем иметь следующие исходные данные для
• количество уникальных значений - количество уникальных анализа:
значений, присутствующих в исходной выборке,
• мода - значение, наиболее часто встречающееся в исходной
выборке. В выборке могут быть два или более значения, с
максимальной частотой (би- или мультимодальная выборка).
В этом случае в качестве моды будет взято первое найденное
значение с максимальной частотой.
Кроме того, для дискретных значений рассчитывается таблица
частот, содержащая следующие показатели:
• частота - количество вхождений уникального значения в
выборку,
• относительная частота - частота, выраженная в процентах
от общего количества значений выборки,
• накопленная частота - сумма частоты значения и частот всех
предыдущих значений выборки,
• накопленная относительная частота - сумма относительной
частоты и относительных частот всех предыдущих значении
выборки.
452 453
Использование основных объектов конфигурации Анализ и прогнозирование данных
Общая статистика
Информация о данных
Т ип анализа АнализДанныхПоискАссоциаций предназначен
для поиска часто встречаемых вместе групп объектов или
значений характеристик, а также выполняет поиск правил
ассоциаций. Этот тип анализа может использоваться для определения
часто приобретаемых вместе товаров или услуг.
Количествообьектов: 20
Типы колонок источника данных:
Непрерывные поля
• Не используется - колонка не используется в анализе.
• Объект - колонка содержит объект, например документ
«Оказание услуги».
Дискретные поля
• Элемент - колонка содержит элемент, например
Контрагент номенклатуру из документа «Оказание услуги».
Количество значений: 20
Количествоуникальных значений;
Мода: Федоров Д.Е.
6 Параметры:
454 455
Использование основных объектов конфигурации Анализ и прогнозирование данных
В
документа «Оказание услуги». качестве примера возьмем данные регистра «Продажи»: поле
ИспользованиеЧисловыхЗначений ~ (как булево, как число) «Регистратор» и измерение «Номенклатура»:
как интерпретировать числовые значения. Можно
интерпретировать числовые значения как числа или как
логические значения, т.е. рассматривать ноль как Ложь, а все
остальные ненулевые значения как Истина.
ИгнорироватьНезаполненныеЗначения ~ (Булево) - Как
использовать незаполненные значения. Т.е. игнорировать их
или нет.
Порядок - (по достоверности, по значимости, по количеству
случаев) - определяет порядок отображения данных в
результате анализа.
456 457
Использование основных объектов конфигурации Анализ и прогнозирование данных
Т
ип анализа АнализДанныхПоискПоследовательностей
предназначен для выявления в источнике данных
Поиск ассоциативных правил последовательных цепочек событий. Например, это может
быть цепочка услуг, которые часто последовательно
Параметры анализа заказывают клиенты.
Минимальный процент случаев:
Минимальнаядостоверность: 60 Поддерживается поиск по иерархии, что позволяет отслеживать не
Минимальная значимость:
Отсечениеправил:
0
Избыточные
только последовательности конкретных событий, но и
последовательности родительских групп.
Колонки источника данных
Входные колонки
Набор параметров анализа позволяет ограничивать временные
расстояния между элементами искомых последовательностей, а также
регулировать точность получаемых результатов.
Информация о данньк Типы колонок источника данных:
Количество элементов: 12
Количество обьектов: 11
Средиее количество элементов в объекте: 1,82 • Не используется - колонка не используется в анализе.
Результат анализа
• Элемент - колонка содержит исследуемый элемент.
Найдено часто встречаемых групп: 4
Например, в случае исследования продаж, это может быть
Найдено ассоциативных правил: 5
колонка, содержащая товар.
Часто встречаемые группы • Последовательность - колонка содержащая
последовательности. Например, это может быть контрагент.
• Время - время события.
Параметры:
459
458
Использование основных объектов конфигурации Анализ и прогнозирование данных
В
минимального интервала качестве примера снова возьмем данные регистра «Продажи»:
МаксималъныйИнтервал - (Булево) - признак того, что измерения «Номенклатура», «Контрагент» и поле «Период»:
установлен максимальный интервал между наблюдаемыми
событиями. Установка максимального интервала означает, что
для того, чтобы элементы попали в искомую
последовательность необходимо, чтобы временной интервал
между элементами был не более установленного.
ЕдиницаМаксималъногоИнтервала - единица максимального
интервала
КратностъМаксималъногоИнтервала - (Число) - кратность
максимального интервала
ИнтервапЭквивалентностиВремени - (Булево) - признак
того, что установлен интервал эквивалентности времени
между наблюдаемыми событиями. Если установлен интервал
эквивалентности времени, то события, временной интервал
между которыми меньше интервала эквивалентности времени
считаются произошедшими в одно время.
ЕдиницаИнтервалаЭквталентностиВремени — единица
интервала эквивалентности времени
КратностьИнтервалаЭквталентностиВремени - (Число) -
кратность интервала эквивалентности времени
Минимальная длина - (Число) - минимальная длина
последовательности.
Порядок - (по длине, по количеству случаев) - определяет
порядок отображения данных в результате анализа.
461
460
Использование основных объектов конфигурации
Анализ и прогнозирование данных
Результат анализа будет выглядеть следующим образом: какому классу следует отнести некий новый объект, необходимо
отвечая на вопросы в узлах пройти цепочку от корня до листа дерева,
переходя к дочерним узлам в случае утвердительного ответа и к
Поиск последовательностей соседнему узлу в случае отрицательного.
Набор параметров анализа позволяет регулировать точность
Параметры анализа полученного дерева.
Минимальный процент случаев: 10
Минимальный интервал: Типы колонок источника данных:
Максимальный интервал:
Интервал эквивалентности времени:
Минимальная длина последовательности: 2 • Неиспользуемая - колонка не используется в анализе,
Информация о данных • Входная - колонка будет использоваться как атрибут для
Количество элементов: 12
создания узлов дерева, содержит характеристику
Количество последовательностей: 6 исследуемого объекта.
Результат анализа • Прогнозируемая - колонка, содержащая классификацию.
Найдено последовательностей: 2 Например - признак того, что контрагент перешел к другому
поставщику.
Последовательности
Параметры:
Т
дерево решений.
ип анализа АнализДанныхДеревоРешении дерево решений
позволяет построить иерархическую структуру
классифицирующих правил, представленную в виде дерева.
Для построения дерева решений необходимо выбрать
целевой атрибут, по которому будет строиться классификатор и ряд
входных атрибутов, которые будут использоваться для создания
правил. Целевой атрибут может содержать, например информацию о
том, перешел ли клиент к другому поставщику услуг, удачна ли была
сделка, качественно ли была выполнена работа и т.д. Входными
атрибутами, для примера, могут выступать возраст сотрудника, стаж
его работы, материальное состояние клиента, количество сотрудников
в компании и т.п.
Результат работы анализа представляется в виде дерева, каждый
узел которого содержит некоторое условие. Для принятия решения к
462
463
Использование основных объектов конфигурации Анализ и прогнозирование данных
Н
а этот раз мы проанализируем данные справочника
«Контрагенты». В качестве входных колонок мы используем
поля реквизитов сп
равочника Дерево решений
«КоличествоРозничныхТочек», «КоличествоАвтомобилей»
«ВремяРаботыОрганизации» и «ВремяЗаключенияДоговора»' Параметры анализа
Прогнозируемой колонкой будет поле реквизита справочника Минимальноеколичествоэлементов вузле:
Максимальная глубина дерева:
0
1 000
«Контрагенты» - «ПрекращениеОтношений». Тип упрощения дерева решений: Упрошать
Прогнозируемые колонки
Имя колонки Тип данных
ПрекрашениеОтношений Дискретный
Информация о данных
Количество объектов ч3
Количество классов:
Результат анализа
32
Глубина дерева решений: 3
Количество внутренних узлов: 11,11
Количество листьев' Ошибка,
%:
Дерево решений
464 465
Использование основных объектов конфигурации Анализ и прогнозирование данных
д
При помощи параметров кластерного анализа аналитик может
настроить алгоритм, по которому будет производиться разбиение, а ля анализа мы возьмем те же поля справочника
также может динамически изменять состав характеристик, «Контрагенты», что и в предыдущем примере:
учитываемых при анализе, настраивать для них весовые «КоличествоРозничныхТочек», «КоличествоАвтомобилей»,
коэффициенты.
Результат кластеризации может быть выведен в дендрограмму
специальный объект, предназначенный для отображения
последовательных связей между объектами.
466 467
Использование основных объектов конфигурации Анализ и прогнозирование данных
«ВремяРаботыОрганизации» «ВремяЗаключенияДоговора» и
«ПрекращениеОтношений». В качестве ключа мы используем Центры кластеров
значение поля «Ссылка»:
Кластерный анализ
Денрограмма связей
Параметры анализа
Количество искомых кластеров: 3
Стандартизация: Стандартизировать
Мера расстояния: Евклидова метрика в квадрате
Метод кластеризации: Метод центра тяжести
Информация о данных
Количествообъектов: 9
Результат анализа
Найденокластеров: 3
468 469
Использование основных объектов конфигурации Анализ и прогнозирование данных
О
бъект модель прогноза представляет собой специальный необходимо выполнить метод Выполнить().
объект, который создается из результата анализа данных, и Используя соответствующие свойства модели прогноза можно
позволяет в дальнейшем строить прогнозы для новых настраивать для нее входные колонки, колонки самой модели и
данных. колонки результата.
Например, модель прогноза поиска ассоциаций, созданная при Кроме этого каждая из моделей прогноза содержит
анализе покупок клиентов, может быть использована при работе с дополнительные свойства, определяемые типом анализа, к которому
осуществляющим покупку клиентом, для того, чтобы предложить ему относится модель прогноза.
товары, которые он с определенной степенью вероятности приобретет
вместе с теми товарами, которые он уже выбрал. Пример
В
Объект Модель прогноза можно получить из соответствующих качестве примера мы рассмотрим использование модели
объектов результат анализа путем выполнения метода прогноза данных при оформлении покупки, выполняемой
СоздатьМодельПрогноза(). контрагентом.
В дальнейшем для модели прогноза можно задать некоторый набор Предположим, что периодически проводится анализ
исходных данных и получить результат прогноза в виде таблицы данных базы типа поиск ассоциаций, и сохраняется актуальная модель
значений. прогноза.
Тогда, при формировании расходной накладной контрагента, мы
можем использовать эту модель прогноза для того, чтобы исходя из
состава расходной накладной, предложить контрагенту
дополнительные товары, которые он, с большой долей вероятности,
может приобрести.
Предположим, контрагент оформляет следующую покупку:
470 471
Анализ и прогнозирование данных
Использование основных объектов конфигурации
Тогда менеджер, нажав на кнопку «Предложение», может откры Построитель отчета анализа данных
список товаров, которые, с большой долей вероятности, также имеет
О
смысл предложить этому клиенту: бъект ПостроительОтчетаАнализаДанных позволяет
представить данные анализа в виде табличного документа.
Структура такого табличного документа определяется типом
анализа, для каждого из типов анализа документ будет содержать
определенный набор областей.
Объект ПостроительОтчетаАнализаДанных может
использоваться для выполнения трех различных задач.
Во-первых, для визуального отображения существующего
результата анализа данных.
Во-вторых, для интерактивной настройки параметров анализа
данных, выполнения анализа и отображения полученного результата.
В-третьих, для настройки параметров модели прогноза.
О
бъект ПостроительОтчетаАнализаДанных может быть
использован для отображения результата анализа данных,
который был получен ранее. Для этого можно с помощью
стандартного конструктора создать новый объект
ПостроительОтчетаАнализаДанных и в методе Вывести()
передать ему существующий результат анализа:
Результат анализа
473
472
Использование основных объектов конфигурации
Анализ и прогнозирование данны>
О
бъект ПостроительОтчетаАнализаДанных может бы Ть
Настройка параметров модели прогноза
О
использован для выполнения анализа с интерактивной бъект ПостроительОтчетаАнализаДанных может быть
настройкой параметров и последующего отображения использован для интерактивной настройки параметров
результата. модели прогноза (через табличные поля). Для этого следует
использовать его свойство МодельПрогноза, в которое
Исходные данные для анализа задаются свойством
передается настраиваемая модель. После того, как настройка модели
ИсточникДанных. Свойства НастройкаКолонок и Параметры
выполнена, результат прогноза может быть получен методом модели
позволяют интерактивно настраивать колонки анализа (через
прогноза Выполнить():
табличные поля), и задавать параметры для выбранного типа анализа
который задается свойством ТипАнализа. Кроме того, построитель
отчета анализа данных допускает переопределение стандартного
макета отчета путем использования свойства Макет.
В дальнейшем методом Выполнить() можно получить результат
анализа данных, который будет доступен через свойство построителя
Результат. Таким образом, при необходимости, его можно сохранить
в базе данных. Если же сохранения результата не требуется, можно
выполнить метод Вывести(), который выведет данные результата
анализа, полученного методом Выполнить().
Кроме всего перечисленного,
ПостроительОтчетаАнализаДанных позволяет получить объект
АнализДанных, соответствующий всем интерактивным настройкам,
выполненным в построителе, методом ПолучитьАнализ():
474
475
Использование основных объектов конфигурации
476 477
Использование основных объектов конфигурации Создание документа ввода начальных остатков
Раздвинем форму вниз и разместим в ней табличное поле Удалим из табличного поля колонки «Регистратор» и «Активность»
командной панелью. Зададим имя табличного поля (они нам не понадобятся), и изменим размеры формы и расположение
элементов управления:
«ОстаткиМатериалов» и тип значения
«РегистрНакопленияНаборЗаписей.ОстаткиМатериалов»:
479
478
Использование основных объектов конфигурации Создание документа ввода начальных остатков
Нажмем «Записать», и из формы списка документа откроем Снова запустим 1С:Предприятие в режиме отладки, откроем наш
движения нашего документа в регистре «ОстаткиМатериалов» (кнопка документ и нажмем «Записать». Открыв движения документа в
«Перейти»). регистре «ОстаткиМатериалов» увидим, что значение поля «Период» у
Вы видите, что записи регистра накопления в точности всех записей стало равно дате документа:
соответствуют тем, которые мы создали в документе:
480 481
Использование основных объектов конфигурации Создание документа ввода начальных остатков
Событие «Перед записью», в случае интерактивной запи Поясним содержание обработчика. Если записывается новый
документа, сначала будет вызвано у формы документа, а затем документ или были изменены его движения - следует обновить дату
объекта документ (смотри схему событий в раздел движений. В противном случае мы считываем запросом дату
«Последовательность событий при записи документа из форм документа из базы данных и сравниваем ее с датой, установленной у
документа» на странице 581). Поэтому вернемся в конфигуратоп записываемого объекта. Если даты разные - также следует обновить
удалим из модуля формы добавленный нами текст и создадим дату движений.
обработчик события «Перед записью» в модуле объекта документ: Перед установкой даты мы проверяем, был ли прочитан набор
записей в свойстве «Движения» объекта и изменялся ли он. Если оба
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведення) этих условия ложны - это значит, что набор записей в свойстве
//Определить нужно ли обновлять дату в движениях «Движения» объекта пуст, и это состояние не связано с его
ОбновитьДатуДвижений = ЭтоНовый() Или
Движения.ОстаткиМатериалов.Модифицированность();
изменением. В этом случае, чтобы предотвратить ошибочное удаление
Если Не ОбновитьДатуДвижений Тогда // Проверить, что дата изменилась записей в регистре (перезапись пустым набором записей), мы
Запрос = Новый Запрос; предварительно читаем движения из регистра в набор записей в
Запрос.УстановитьПараметр("ТекущийДокумент", Ссылка); свойстве «Движения». Затем, как и в предыдущем случае,
Запрос.Текст = устанавливаем нужную дату для всех записей этого набора. При
"ВЫБРАТЬ
| Дата
выполнении записи объекта Документ, этот набор будет записан в
|ИЗ регистр накопления.
| Документ.ВводНачальныхОстатковНоменклатуры
|ГДЕ Ссылка = &ТекущийДокумент";
Запустим 1С:Предприятие в режиме отладки и убедимся, что
указав новую дату для нашего документа и записав его, мы получим
Выборка = Запрос.Выполнить().Выбрать(); движения в регистре накопления с новой датой.
Выборка.СледующийО;
В процессе записи нашего документа можно управлять не только
ОбновитьДатуДвижений = Выборка.Дата о Дата;
периодом записей регистра накопления, но и значениями других полей
КонецЕсли;
регистра.
//Установить всем новую дату, если нужно Например, по аналогичному принципу может быть создан
Если ОбновитьДатуДвижений Тогда Если Не
Движения.ОстаткиМатериалов.Выбран() И документ «Операция», позволяющий вводить ручные операции в
Не Движения.ОстаткиМатериалов.Модифицированность() Тогда регистр бухгалтерии. При этом, вероятно, кроме управления периодом
Движения.ОстаткиМатериалов.Прочитать(); КонецЕсли; Для Каждого записей регистра, вам потребуется управлять значением поля
ЗаписьРегистра Из Движения.ОстаткиМатериалов Цикл
«Активность» («включать» и «выключать» проводки документа) и т.д.
ЗаписьРегистра.Период = Дата;
КонецЦикла; КонецЕсли; В заключение следует сказать, что выбор обработчика, в котором
будет размещен текст процедуры, зависит от логики работы
создаваемого объекта. Если конфигурация не предусматривает
Как вы видите, в этом случае обработчик содержит больше кода за программной записи объекта - можно выбрать обработчик модуля
счет дополнительных проверок, которые выполняются в результат формы. Если предполагается и программная модификация объекта -
того, что возможна как интерактивная, так и программная запис следует выбирать обработчик модуля объекта.
объекта. Заметьте, что оба эти способа не исключают модификацию записей
регистра через объект Регистр<...>НаборЗаписей.<имя регистра>.
Поэтому, если логика конфигурации подразумевает возможность
программной модификации объекта набор записей, код обработки
482 483
следует размешать в обработчике события набора записей. Все
Глава 16. Легким движением брюки
попытки изменить данные регистра будут сведены, в конечном счете, к
записи именно набора записей. превращаются...
Вот мы и создали с вами небольшое прикладное решение, которое
позволило автоматизировать работу нашей ремонтной фирмы OOO
«На все руки мастер». Теперь настало время для одного чудесного
превращения.
Дело в том, что наше прикладное решение настолько понравилось
сотрудникам OOO «На все руки мастер», что они рассказали о нем
своим соседям - косметическому салону «Королева красоты».
Сотрудники салона посмотрели, как работает наше прикладное
решение, и обратились к нам с просьбой автоматизировать и их салон
тоже.
И мы, конечно же, с радостью согласились, по одной простой
причине: мы с вами создали универсальную конфигурацию,
подходящую для автоматизации практически любой деятельности,
связанной с оказанием услуг.
Все, что нам осталось теперь сделать, чтобы наша конфигурация
смогла работать в косметическом салоне, - просто создать новую
информационную базу с нашей конфигурацией, и заполнить ее
новыми данными, - сотрудниками и новой номенклатурой. Все
механизмы учета, которые мы с вами создавали, не были привязаны к
какой-либо специфике конкретного предприятия, а потому могут с
успехом использоваться на любом другом предприятии, имеющем
аналогичную область деятельности.
Таким образом, даже если в косметическом салоне пожелают иметь
дополнительную функциональность, нам потребуется всего лишь
дописать несколько модулей к нашей конфигурации, что гораздо
эффективнее, чем создавать заново индивидуальное решение только
для данного предприятия.
485
484
Часть III. Специальные приемы Глава 1. Общие приемы
разработки Существует ряд приемов использования объектов конфигурации,
которые нельзя отнести только к какому-то одному виду объектов.
Такие приемы мы собрали в этой главе.
Третья часть нашей книги будет посвящена некоторым конкретным
приемам использования тех или иных объектов конфигурации
которые могут потребоваться разработчику в процессе создания и
модификации конфигурации.
486 487
Специальные приемы разработки Общие приемы
з
Организация подборов
адача организации подбора заключается, как правило, |
заполнении табличной части информацией, которую выбирает
пользователь в списке какого-либо объекта.
Создадим основную форму выбора справочника «Номенклатура».
Затем добавим в состав командной панели табличного поля документа
«ПриходнаяНакладная» кнопку «Подбор».
488 489
Специальные приемы разработки Общие приемы
Запустите 1С:Предприятие в режиме отладки и проверьте работу В форме документа «ПриходнаяНакладная» внесем в обработчик
события нажатия кнопки «Подбор» следующие изменения:
одиночного подбора.
П
ФормаПодбора = Справочники.Номенклатура
ри множественном подборе форма справочника будех .ПолучитьФормуСписка(, ЭлементыФормы.Материалы);
открыта до тех пор, пока пользователь не закроет ее ФормаПодбора.РежимВыбора = Истина;
//ФормаПодбора.ЗакрыватьПриВыборе = Ложь;
интерактивно или пока не будет вызван метод формы ФормаПодбора.МножественныйВыбор = Истина;
Закрыть(). ФормаПодбора.Открыть();
Для разнообразия создадим форму списка справочника КонецПроцедуры
«Номенклатура» и затем в форме документа «ПриходнаяНакладная», в
обработчик события нажатия кнопки «Подбор» внесем следующие В обработчик события «Обработка выбора» добавим обход массива
изменения: переданных элементов:
Свойство «ЗакрыватьПриВыборе» как раз и будет задавать режим Запустите 1С:Предприятие в режиме отладки и проверьте работу
множественного выбора. Установка же свойства «РежимВыбора» множественного подбора (множественный выбор в табличном поле
понадобилась нам, так как в этом примере для получения подчиненной выполняется при нажатой кнопке «Control»).
формы мы используем метод ПолучитьФормуСписка(). Полученная Теперь, если вы удалите комментарий в обработчике события
этим методом форма будет иметь свойство «РежимВыбора» нажатия кнопки «Подбор», то получите вариант «множественного
установленным в Ложь (в отличие от получения формы методом подбора с использованием множественного выбора».
ПолучитьФормуВыбора(), когда «РежимВыбора» устанавливается в
Истина). Использование метода ОповеститьОВыборе()
М
Запустите 1С:Предприятие в режиме отладки и проверьте работу етод формы ОповеститьОВыборе() используется в тех
множественного подбора. случаях, когда алгоритм формирования данных подбора
сложен, и кроме собственно выбора элемента справочника от
Подбор с использованием множественного выбора пользователя требуется указание некоторой
Это
свойства
свойство разрешает
множественный выбор в табличных полях формы. В этом случае
дополнительной информации. В этом случае метод
ОповеститьОВыборе() вызывается тогда, когда вся необходимая
информация подбора сформирована.
Также метод ОповеститьОВыборе() может использоваться в тех
случаях, когда требуется передать в форму документа не только
в форму документа будет возвращен не элемент справочника, а массив
элементов, выбранных в табличном поле формы справочника.
491
490
О6
Щие приемы
М
произвольную структуру данных.
еханизм ввода на основании может быть использован для
ввода новых объектов различного типа (документы,
справочники, планы видов характеристик и т.д.). Мы
рассмотрим этот механизм на примере ввода новых
документов, как наиболее распространенном.
Для каждого объекта конфигурации Документ можно разрешить
его ввод на основании других объектов базы данных и возможность
являться основанием для других объектов. Действия по заполнению
реквизитов при вводе на основании должны быть описаны в модуле
объекта Документ, в обработчике события «Обработка заполнения».
Есть возможность использовать конструктор ввода на основании,
который позволяет визуальными средствами конструировать текст
обработчика.
Рассмотрим пример, когда документ «ОказаниеУслуги» будет
вводиться на основании элемента справочника «Клиенты».
Откроем окно редактирования объекта конфигурации Документ
«ОказаниеУслуги» и добавим новый реквизит документа -
«ОбъектОснование» с типом СправочникСсылка.Клиенты.
Создание такого реквизита не является обязательной частью
механизма ввода на основании и понадобится нам только для того,
чтобы в последствии построить цепочку зависимых документов.
493
492
Специальные приемы разработки Общие приемы
Перейдем на закладку «Ввод на основании» и определим состав Затем вызовем конструктор ввода на основании и зададим значения
документов, на основании которых может вводиться документ реквизитов документа, создаваемого на основании. Для этого
«ОказаниеУслуги», и основанием для которых он может являться: воспользуемся кнопкой «Заполнить выражения»:
ПроцедураОбработкаЗаполненш(Основание)
//{{_КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ
// Данный фрагмент построен конструктором. II При
повторном использовании конструктора, // внесенные
вручную изменения будут утеряны!!!
494 495
Специальные приемы разработки Общие приемы
Н
Клиент = Основание.Ссылка;
ОбъектОснование = Основание.Ссылка; аряду с тем, что платформа содержит механизмы,
КонецЕсли; позволяющие создавать одни объекты на основании других,
//} }_KOHCTPyKTOP_BBOД HA_OCHOBAHИИ каких-либо специальных механизмов для анализа цепочек
КонецПроцедуры связанных объектов платформа не содержит.
Для решения подобной задачи, мы дадим некоторые рекомендации,
Как видите, для каждого типа объекта-основания формируется своя которые могут быть положены в основу конкретного решения.
ветка условия Если..., в которой происходит заполнение реквизитов
Для построения цепочек связанных объектов необходимо у
нового документа. каждого объекта, который будет вводиться на основании, создать
Запустите 1С:Предприятие в режиме отладки и проверьте работу служебный реквизит для хранения ссылки на объект-основание. Затем
ввода на основании. Обратите внимание, что в командной панели следует создать объект конфигурации КритерийОтбора, который
формы списка справочника «Клиенты» появилась кнопка «Ввести на будет использоваться для установки отбора по требуемому значению
основании»: служебного реквизита. В дальнейшем, для получения всех объектов,
введенных на основании, достаточно будет установить нужное
значение отбора в критерии отбора.
О
бъект конфигурации Критерий отбора предназначен для
задания правил, по которым может выполняться отбор
объектов.
Этот объект используется в случае поиска
различной информации, когда, например, требуется отобрать все
документы, в которых используется (в реквизитах и в табличных
частях) определенный контрагент, при этом можно учитывать также и
другие условия отбора информации (например, поиск ведется только
среди проведенных документов или в определенном интервале дат).
П
оскольку задача получения всех объектов, введенных на
основании какого-либо другого объекта чаще всего
возникает при анализе документов, мы рассмотрим
применение описанной выше методики на примере
получения списка документов, введенных на основании элемента
справочника «Клиенты».
496 497
Специальные приемы разработки Общие приемы
Создадим новый объект конфигурации «КритерийОтбора» с Запустите 1С:Предприятие в режиме отладки и проверьте работу
именем «ОказаниеУслуги». На закладке «Данные» выберем тип критерия отбора:
используемого критерия - СправочникСсылка.Клиенты.
На закладке «Состав» в качестве объектов, входящих в критерий,
Кнопка «Перейти» открывает форму списка критерия отбора...
выберем реквизит «Основание» документа «ОказаниеУслуги»:
ПроцедураДействияФормыДокументыКяиента(Кнопка) ФормаКритерия =
КритерииОтбора.ОказаниеУслуги.ПолучитьФорму();
ФормаКритерия.Откршъ();
СписокКритерияОтбора = ФормаКритерия.ЭлементыФормы.Список.Значение;
СписокКритерияОтбора.Отбор.ЗначениеОтбора.Значение =
ЭлементыФормы.СправочникСписок.ТекущаяСтрока;
КонецПроцедуры
499
498
циальные приемы разработки
шальные приемы разработки
ссылке На
КритерийОтбораСписок.ОказаниеУслуги равным Глава 2. Формы
элемент справочника. В этой главе мы собрали приемы работы, которые имеют
Запустите 1С:Предприятие в режиме отладки и проверьте работу отношение к формам объектов. Кроме этого в начале главы дается
нового пункта меню. краткое пояснение того, каким образом в системе 1С:Предприятие
Получение всех ссылок на все связанные документы дд я данные отображаются в формах.
дальнейшего их анализа программными средствами возможно при
помощи метода менеджера критерия отбора - Найти()
Проиллюстрируем это на примере.
Добавьте в обработчик события «При открытии» формы документа
«ОказаниеУслуги» следующие строки:
ПроцедураДействияФормыДокументыКлиента(Кнопка) ФормаКритерия =
КритерииОтбора.ОказаниеУслуги.ПолучитьФорму();
ФормаКритерия.Открыть();
СписокКритерияОтбора = ФормаКритерия.ЭлементыФормы.Список.Значение;
СписокКритерияОтбора.Отбор.ЗначениеОтбора.Значение =
ЭлементыФормы.СправочникСписок.ТекущаяСтрока;
МассивСсылок = КритерииОтбора.ОказаниеУслуги
.Найти(ЭлементыФормы.СправочникСписок.ТекущаяСтрока);
Для Каждого НужнаяСсылка из МассивСсылок цикл
СообщитьдаужнаяСсылка);
КонецЦикла;
КонецПроцедуры
500 501
Специальные приемы разработки Формы
В ажной особенностью платформы 1С:Предприятие gQ различным, если в качестве источника данных этого поля указать
является механизм представления данных в формах реквизит формы с типом значения
Ключевым моментом здесь является то, что принадлежность СправочникСписок.Номенклатура или
формы к тому или иному объекту конфигурации никоим образом РегистрНакопленияСписок.ОстаткиКомплектующих. To же самое
не определяет состав данных, которые форма будет справедливо и для элемента управления командная панель. При
отображать. Например, можно создать общую форму, которая не будет установленном свойстве командной панели «Автозаполнение», смена
подчинена ни одному из объектов конфигурации, но которая, в источника данных (а точнее говоря, источника действий) будет
приводить к изменению состава команд, которые отображает
зависимости от содержимого, будет либо отображать список
командная панель.
справочника, либо позволять редактировать документ. Однако такую
форму уже нельзя будет назначить основной для выполнения Возможность связать форму и элементы управления с различными
определенных действий. данными является причиной того, что у формы и у элементов
Форма сама по себе и ее элементы управления обособлены от управления существует несколько расширений. Расширение
объектов конфигурации. Для того чтобы форма отображала какие-либо представляет собой набор дополнительных свойств, методов и
данные, необходимо задать связь самой формы и большинства из ее событий, появляющихся у объекта. Наличие того или иного
элементов управления с данными. При использовании конструктора расширения определяется либо типом данных, которые отображает
форм, конфигуратор создает такие связи автоматически. Если объект, либо расположением его в других объектах.
разработчик создает форму вручную - он может определить эти связи Рассмотрим этот механизм на примере элемента управления Поле
путем задания свойств формы и элементов управления. В любом ввода, расположенного в колонке «Вид номенклатуры» формы списка
случае, эти связи могут быть изменены средствами встроенного языка справочника «Номенклатура»:
в процессе выполнения программы.
Связь формы и элементов управления с данными осуществляется
при помощи реквизитов формы. Список существующих реквизитов
формы доступен на закладке «Реквизиты» окна редактирования
формы.
Среди всех реквизитов формы, как правило, существует один
основной реквизит (он выделен жирным шрифтом). Основной реквизит
определяет источник данных для формы в целом. От типа значения
основного реквизита формы зависит не только то, какие данные будУт
отображены в элементах управления формы, но и поведение самой
формы. Например, если основному реквизиту формы указать тип
значения ДокументОбъект.ПриходнаяНакладная, то при закрытии
формы программа будет запрашивать подтверждение записи '
проведения документа. Если же основному реквизиту формы указать
тип значения СправочникСписок.Номенклатура, то подобного
подтверждения при закрытии формы возникать не будет.
Поскольку форма отображает данные объекта
СправочникСписок.Номенклатура, к свойствам, методам и
502 503
Специальные приемы разработки Формы
событиям объекта Форма добавляется расширение формы списка Затем, поскольку данными, отображаемыми в табличном поле,
будет список справочника «Номенклатура», к свойствам, методам и
справочника: событиям табличного поля добавляется расширение табличного поля
списка справочника. Но, поскольку это табличное поле расположено в
форме, к его свойствам, методам и событиям добавляется также и
расширение элементов управления, расположенных в форме:
505
504
Специальные приемы разработки
506
507
Специальные приемы разработки Формы
Если на этой же форме разместить поле ввода, то его свойство Таким образом свойство Данные позволяет связать элемент
Данные может иметь значение управления с теми данными, которые он должен отображать.
СправочникСписок.Отбор.Ссылка.Значение. Следует заметить, что при определении свойства Данные в
конфигураторе, предоставляется возможность выбрать только из тех
реквизитов, которые имеют подходящий тип для отображения в
конкретном элементе управления.
Следующим важным свойством, которым обладают элементы
управления расположенные в форме, является свойство
«ТипЗначения». Это свойство содержит тип реквизита, данные
которого отображает элемент управления. При выборе в
конфигураторе значения свойства Данные, свойство Тип значения
заполняется автоматически, на основании типа выбранных данных.
При установленной связи с данными свойство Тип значения
становится недоступным для изменения. Однако, если связь с данными
не задана, можно изменять свойство Тип значения. Такой способ
используется иногда для связи элемента управления не с самими
данными, а с некоторым типом данных. Причем, если указать тип,
допускающий однозначный выбор данных (например,
СправочникСписок.Номенклатура), то эти данные даже будут
отображены в элементе управления.
В качестве примера можно создать форму, не имеющую ни одного
реквизита, разместить в ней табличное поле и указать, что его тип
значения будет равен СправочникСписок.Номенклатура. При
открытии этой формы в режиме 1С:Предприятия мы увидим, что
табличное поле содержит данные элементов справочника
«Номенклатура».
Говоря о связи элементов управления и данных, следует отдельно
упомянуть поле ввода, поскольку это элемент управления имеет одну
особенность - свойство ОграничениеТипа.
Использование этого свойства позволяет ограничить пользователя в
выборе возможных типов данных значений, вводимых в поле ввода.
Например, если реквизит формы имеет составной тип данных:
• Число,
• Строка,
• Дата,
• СправочникСсылка.Клиенты,
• СправочникСсылка.Сотрудники,
508 509
Специальные приемы разработки Формы
510 511
[ециальные приемы разработки Формы
П
связь таким образом, чтобы при изменении выбранного элемента в
ри создании прикладных решений часто возникает
верхнем списке, содержимое нижнего списка менялось
необходимость разместить на одной форме несколько соответствующим образом.
списков, информация в которых должна быть логически
связана между собой. Для этого откроем палитру свойств добавленного нами табличного
поля и воспользуемся свойством «Связь по регистратору». Связь по
Одним из распространенных примеров является необходимость
регистратору мы будем устанавливать с обработчиком события «При
отобразить в форме списка документов движения, которые имеются в активизации строки» верхнего поля «ДокументСписок»:
каком-либо регистре. В этом случае требуется в одном списке
отобразить перечень документов, а в другом - движения того
документа, который выбран в первом списке. Установим связь по регистратору...
Рассмотрим вариант создания такой связи между списками на
\
примере списка документа «ПриходнаяНакладная», в котором будут
отображаться движения документа по регистру «ОстаткиМатериалов».
Откроем конфигуратор и создадим основную форму списка
документа «ПриходнаяНакладная». Уменьшим высоту табличного
поля списка документа и на освободившемся пространстве
расположим табличное поле с именем «ТабличноеПоле» и типом
РегистрНакопленияСписок.ОстаткиМатериалов:
512 513
Специальные приемы разработки
Фс
Теперь запустим 1С:Предприятие в режиме отладки и проверим Чтобы выполнить этот пример, уберем для нижнего табличного
работу связанных списков: поля связь по регистратору, а для верхнего создадим обработчик
события «При активизации строки»:
ПроцедураДокументСписокПриАктивизацииСтроки(Элемент)
ЭлементыФормы.ТабличноеПоле.Значение.Отбор.Регистратор
.Установить(Элемент.ТекущаяСтрока, Истина);
КонецПроцедуры
514 515
Специальные приемы разработки Формы
516 517
Специальные приемы разработки
Процедура ПриОткрытии()
ОстаткиМатериалов = "Остатки";
КонецПроцедуры;
его тип
Укажем
РегистрНакопленияСписок.СтоимостьМатериалов.
В заключение создадим процедуру обработки события «При
изменении» для кнопки «Остатки материалов»:
ПроцедураОстаткиМатериаловПриИзменении(Элемент)
Если ОстаткиМатериалов = "Остатки" Тогда
ЭлементыФормы.ТабличноеПоле.Данные = "ТабличноеПоле";
иначе ЭлементыФормы.ТабличноеПоле.Данные = "РегистрСписок";
КонецЕсли;
ЭлементыФормы.ТабличноеПоле.СоздатьКолонки();
ДокументСписокПриАктивизацииСтроки(ЭлементыФормы.ДокументСписок);
КонецПроцедуры
519
518
Специальные приемы разработки
Формы
Процедура ПриОткрытии()
ОстаткиМатериалов = "Остатки";
Массив = Новый Массив;
Массив.Добавить(Тип("РегистрНакопленияСписок.ОстаткиМатериалов"));
НашеОписание = Новый ОписаниеТипов(Массив); ТабПоле =
ЭлементыФормы.ТабличноеПоле; ТабПоле.ТипЗначения = НашеОписание;
ТабПоле.СоздатьКолонки();
ТабПоле.Значение.Отбор.Регистратор.Установить(, Истина);
КонецПроцедуры
Зададим следующие выбираемые значения переключателей:
520 521
Специальные приемы разработки Формы
ТабПоле = ЭлементыФормы.ТабличноеПоле;
ТабПоле.ТипЗначения = НашеОписание;
ТабПоле.СоздатьКолонки();
НашОтбор = ТабПоле.Значение.Отбор;
ЗначениеОтбора = ЭлементыФормы.ДокументСписок.ТекущаяСтрока;
НашОтбор.Регистратор.УстановитьСЗначениеОтбора, Истина);
КонецПроцедуры
523
522
Формы
Специальные приемы разработки
ОформлениеСтроки.Ячейки.Цена.ОтображатьТекст = Истина;
АктуальнаяЦена = РегистрыСведений.Цены
Вычисляемые колонки в списках .ПолучитьПоследнее(, ОтборНоменклатуры.Цена;
Н
ОформлениеСтроки.Ячейки.Цена.Текст = АктуальнаяЦена;
еобходимость вывода произвольных данных в колонках
списка возникает, когда вместе с элементом списка нужно //низкие цены выделим другим цветом
отобразить некоторую вычисляемую информацию. Если АктуальнаяЦена<500 тогда
ОформлениеСтроки.Ячейки.Цена.ЦветТекста = WEBЦвета.Васильковый;
Мы рассмотрим эту ситуацию на примере отображения КонецЕсли; КонецЕсли; КонецПроцедуры
актуальной цены в списке справочника «Номенклатура».
Откроем в конфигураторе форму списка справочника Обработчик события табличного поля «При выводе строки»
«Номенклатура» (или, если ее нет, создадим основную форму списка). передает три параметра: «Элемент» - само табличное поле, для
Воспользуемся контекстным меню правой кнопки мыши и добавим в которого было вызвано это событие, «ОформлениеСтроки» - объект,
табличное поле колонку с именем и текстом шапки «Цена»: содержащий оформление выводимой строки табличного поля и
«ДанныеСтроки» - элемент выборки справочника «Номенклатура»,
отображаемый в выводимой строке.
В табличное поле списка справочника Номенклатура добавим колонку Цена... Первое, что мы делаем в этом обработчике - проверяем, что
выводимый элемент справочника не является группой. В этом случае
мы создаем вспомогательную структуру для описания отбора
(«ОтборНоменклатуры») и помещаем в ячейку «Цена» актуальное
значение цены, полученной из периодического регистра сведений
«Цены».
Затем мы анализируем значение выведенной цены и если оно
находится в нижнем ценовом диапазоне (менее 500 рублей), выделяем
это значение васильковым цветом. Для указания цвета мы используем
системный набор значений WEBL4BeTa.
Запустим 1С:Предприятие в режиме отладки и посмотрим, какой
внешний вид примет теперь справочник «Номенклатура»:
525
524
^^v
О
обращения к данным, которые не содержатся в параметре дним из полезных свойств элемента управления «Табличное
«ДанныеСтроки». поле» является возможность настройки оформления его
Дело в том, что обработчик этого события вызывается каждый раз строк программным способом.
при возникновении необходимости перерисовки видимой области Для иллюстрации этой возможности мы снова воспользуемся
табличного поля и отрабатывает столько раз, сколько строк содержит формой справочника «Номенклатура» и придадим ей «нестандартный»
видимая область. Необходимость перерисовки видимой области вид.
табличного поля возникает в результате многих событий, связанных
как с самим табличным полем, так и с формой. Если проанализировать Откроем в конфигураторе форму списка справочника
работу обработчиков событий формы и табличного поля, можно «Номенклатура» и создадим обработчик события формы «При
увидеть, что простое добавление новой строки в табличное поле открытии» со следующим текстом:
вызовет, скорее всего, не одну, а несколько перерисовок табличного
поля. Процедура ПриОткрытии()
СписокСправочника = ЭлементыФормы.СправочникСписок;
Поэтому обращение в этом обработчике не к данным строки, а к
данным, содержащимся в базе данных (получение значений через //задать режим чередования цветов строк
точку, обращение к итогам регистров и т.д.), может сильно замедлить СписокСправочника.ЦветФонаЧередованияСтрок = WЕВЦвета.Бежевый;
вывод формы на экран. Возможно, в некоторых случаях следует СписокСправочника.ЧередованиеЦветовСтрок = Истина;
отказаться от создания вычисляемых колонок в списках, и выводить //скрыть линии сетки
вычисляемые данные только для текущей строки списка в СписокСправочника.ВертикальныеЛинии = Ложь;
дополнительные поля, расположенные на форме. СписокСправочника.ГоризонтальныеЛинии = Ложь;
КонецПроцедуры
Процедура СправочиикСписокПриВыводеСтроки(Элемент,ОформлениеСтрокн,
ДанныеСтроки)
//для элементов отобразить цену и...
Если Не ДанныеСтроки.ЭтоГруппа тогда
ОтборНоменклатуры = Новый Структура;
ОтборНоменклатуры.Вставить("Номенклатура\ДанныеСтроки.Ссьшка);
ОфорилениеСтроки.Ячейки.Цена.ОтображатьТекст = Истина;
АктуальнаяЦена = РегистрыСведений.Цены
_ ______________ .ПолучитьПоследнее(, ОтборНоменклатурыЩена; ___________
526 527
Специальные приемы разработки
ОформлениеСтроки.Ячейки.Цена.Текст = АктуальнаяЦена;
//... раздвинуть строку если длинное наименование Заключительная часть нашей книги содержит набор кратких
Если СтрДлина(СокрЛП(ДанныеСтроки.Наименование))>30 Тогда справочных статей и описаний групп обьектов встроенного языка
ОформлениеСтроки.Ячейки.Наименование.АвтоВысотаЯчейки = Истина; используемых для работы с теми или иными данными базы данных '
ОформлениеСтроки.Ячейки.Наименование.ВысотаЯчейки = 3; КонецЕсли;
КонецЕсли; КонецПроцедуры
528
529
Стандарты именования переменных, процедур и объектов конфигура
Именование переменных-флагов
Стандарты именования переменных,
В
процедурах периодически используются переменные,
которые содержат в себе некий флаг. Такие переменные
процедур и объектов конфигурации
Ф
следует называть так, как называется истинное значение
ирма «1С» использует ряд стандартов, регламентирующих этого флага.
порядок разработки типовых конфигураций на платформе
Например, если нужна переменная, в которой хранится признак
«1С:Предприятие 8.0». В этой главе мы дадим некоторые
наличия ошибок в процедуре, то такая переменная должна называться
выдержки из этих стандартов, которые касаются
«ЕстьОшибки». Или если есть признак того, что товар относится к
формирования имен объектов конфигурации, переменных, процедур,
возвратной таре, то такой признак должен называться «ЭтоТара».
функций, элементов управления и т. д.
И И
мена переменных (параметров) следует образовывать от мена процедур в общем случае, следует образовывать от
терминов предметной области. При именовании переменных глаголов неопределенного вида, например:
следует использовать только термины, используемые в
документации к 1С:Предприятию 8.0 или в методических материалах правильно ПроверитьДублиСтрок(),
фирмы «1С» по 1С:Предприятию 8.0.
неправильно ПроверкаДублейСтрок();
Из имени переменной должно быть понятно ее назначение. Имена
следует образовывать путем «склеивания» слов - удаления пробелов
между словами. Каждое отдельное слово в «склеенном» имени правильно ЗагрузитьКонтрагента(),
пишется с прописной буквы. Предлоги и местоимения из одной буквы неправильно ЗагрузкаКонтрагента().
также пишутся прописными буквами.
Имена процедур и функции должны давать представление о
Например: характере выполняемых процедурой (функцией) действий.
531
530
Краткий справочник разработчика ^Стандарты именования переменных, процедур и объектов конфигуряни,,
Ф
используется префикс «КоманднаяПанель»+ИмяТабличнойЧасти,
ункции, которые предназначены для проверки чего-либо, и например, «КоманднаяПанельСпецификация».
возвращают в качестве результата проверки булево
значение, следует именовать так, как называется результат Элементы управления, связанные с данными, называются так же,
как данные.
проверки, имеющий тип Истина.
Например, если функция должна проверить наличие дублей строк в
Общие требования к имени объекта конфигурации
И
табличной части документа, то она должна называться
«ЕстьДублиСтрок». Или если функция должна проверить мя объекта надо стремиться строить на основе синонима
принадлежность документа к накладным, то она должна называться объекта так, как это делает система автоматически: пробелы и
«ЭтоНакладная». пр. недопустимые символы удаляются, первые буквы слов
делаются заглавными. Сокращения слов (относительно
Однако, если функция (или процедура) «ЕстьДублиСтрок» и синонима) допускаются только в крайних случаях, при этом
проверяет наличие дублей строк, и выполняет объединение необходимо, чтобы по сокращению можно было восстановить слово
дублирующих строк, при этом не возвращает значения, ее следует обратно. В случае длинных синонимов последние слова могут быть
именовать «СвернутьДублиСтрок». опущены, ели это не искажает смысла.
Имена обработчиков событий Для реквизитов объектов допускается переставлять слова из
И
синонима местами, например: синоним «Полное наименование», имя
спользуются имена процедур - обработчиков событий, «НаименованиеПолное».
формируемые системой автоматически:
Для ведущих объектов подобное не допускается.
<имя элемента управления> + <название события>
Общие требования к синониму объекта конфигурации
С
Имена по умолчанию формируются при нажатии «лупы» около иноним объекта должен быть определен так, чтобы
события в окне свойств реквизита диалога. осмысленно описывать объект. Сокращения допускаются
По таким же правилам следует образовывать имена обработчиков только общепринятые, например, «ОКЕИ», «ИНН». Следует
избегать излишне длинных синонимов, но и укорачивать их с потерей
самостоятельно. смысла тоже плохо. Синоним начинается с большой буквы, точки
Правила образования имен элементов управления ставятся только после сокращений.
Имена надписей образуются по следующим правилам: Для ведущих объектов метаданных необходимо стремиться к тому,
чтобы название объекта в меню, подпись в диалоговых формах
• - если надпись относится к элементу управления, имя совпадали с синонимом или, как минимум, начинались с него.
составляет как «Надпись»+ ИмяЭлементаУправления; Для реквизитов объектов подписи в диалогах могут отличаться «в
• - в остальных случаях им составляется как силу обстоятельств» - синоним надо подбирать так, чтобы он
«Надпись»+ИмяНадписи. осмысленно описывал реквизит в возможных универсальных формах.
Для форм синоним должен начинаться со слов, генерируемых
Для именрамок используется префикс «Рамка». Для командной
конструктором при создании формы («Форма списка...», «Форма
панели формы используется префикс «КоманднаяПанель». элемента...» и т. д.), далее, в случае наличия нескольких форм одного
532 533
Краткий справочник разработчика
П
Для макетов унифицированных форм синоним должен состоять из
ри первом знакомстве с системой 1С:Предприятие может
названия формы, например: «ТОРГ-12».
возникнуть естественный вопрос: если у нас есть две
конфигурации: одна, которую можно редактировать, и
Общие требования к комментарию объекта
другая, с которой работают пользователи, то почему же
конфигурации тогда основной называется редактируемая конфигурация? Ведь с
К омментарий задается только в тех случаях, когда необходимы точки зрения конечного продукта, основной является именно
какие-либо пояснения. Комментарий начинается с большой конфигурация, с которой работают пользователи!
буквы, точки ставятся только после сокращений. Если в Дело в том, что в данном случае название «основная» дано с точки
синониме использовано сокращение, в комментарии зрения разработчика и это имеет глубокий практический смысл.
необходимо его расшифровать, например: «Общероссийский В общем случае информационная база 1С:Предприятия хранит три
классификатор единиц измерения». конфигурации: основную конфигурацию, конфигурацию базы данных и
Для реквизитов объектов в комментариях в необходимых случаях несколько конфигураций поставщиков. Кроме этого вне
должно содержаться уточнение, например: «Сумма со всеми информационной базы может существовать хранилище, в котором
налогами». находится конфигурация, предназначенная для групповой разработки,
и вне информационной базы может существовать некоторое
количество файлов конфигураций, в том числе файлы новой поставки.
534 535
Краткий справочник разработчика
Ч
конфигурация находится на поддержке одновременно у нескольких то такое объект, применительно к 1С? Этот вопрос зачастую
поставщиков, каждый из которых поддерживает только свою часть в ставит в тупик не только начинающих разработчиков, но и
виде отдельной конфигурации. В этом случае информационная база людей, имеющих определенный опыт разработки на
будет хранить несколько конфигураций поставщиков (состояние платформе 1С.
предыдущей поставки для каждого поставщика отдельно). Основная трудность заключается в том, что всегда нужно ясно
Файлы новой поставки могут существовать в виде файлов представлять себе, в каком контексте употребляется этот термин.
конфигураций (полная поставка) и файлов обновлений (поставка Как правило, термин объект употребляется в одном из трех
обновлений). контекстов:
Хранилище конфигурации содержит конфигурацию,
предназначенную для групповой разработки. Эта конфигурация • конфигурация,
хранится не в виде единой конфигурации, а в виде отдельных объектов • база данных,
в разрезе версий конфигурации. Таким образом, мы можем получить • встроенный язык,
из хранилища конфигурацию любой версии - для этого она
Говоря о конфигурации, термином объект конфигурации мы
«собирается» из объектов нужной версии.
обозначаем некоторую совокупность описания данных и алгоритмов
Теперь представьте, что между всеми этими видами конфигураций работы с этими данными. Например, в конфигурации может
существует возможность сравнения и обновления конфигураций. В существовать объект справочник «Сотрудники».
этом случае очень легко запутаться и название Основная конфигурация
На основании каждого объекта конфигурации в базе данных
как нельзя лучше отражает конечную цель всех изменений.
создается информационная структура, в которой будут храниться
данные.
Так вот, когда мы говорим о базе данных, термином объект мы
обозначаем всего лишь некий элемент такой информационной
структуры. Характерной особенностью такого элемента является то,
что на него (как на совокупность данных) существует ссылка, которая
может являться значением какого либо поля другой информационной
структуры.
Например, в базе данных существует справочник «Сотрудники» в
котором есть сотрудник Иванов. В этом случае элемент справочника,
содержащий информацию о сотруднике Иванов, будет являться
объектом базы данных. И если в документе «ПриходнаяНакладная»
будет существовать реквизит «ОтветственноеЛицо», то тип значения
этого реквизита будет ссылка на объект базы данных, т.е. на элемент
справочника, содержащий информацию об Иванове.
Если же мы начинаем говорить о встроенном языке и о том, каким
образом средствами встроенного языка работать со справочниками, то
537
536
Краткий справочник разработчика
И
Существует целый ряд объектов встроенного языка, позволяющих
нтересно обратить внимание на разницу в употреблении
работать со справочниками (СправочникиМенеджер
единственного и множественного числа при именовании
СправочникМенеджер^имя>, СправочникСсылка.<имя> и т.д.)'
объектов вида «Справочник» и объектов вида «Документ».
Среди них есть один объект, который предоставляет доступ к объекту
Если вы откроете дерево типовой конфигурации, то увидите, что все
справочника в базе данных - СправочникОбъект.<имя>.
объекты, расположенные в ветке «Справочники», как правило,
именованы во множественном числе. В ветке же «Документы» все
объекты, как правило, именованы в единственном числе. Может
сложиться впечатление что, создавая объект «Справочник», мы
создаем «хранилище» для записей этого справочника, а, создавая
«Документ», мы создаем некий шаблон этого документа. На самом
деле это не так.
Создавая в конфигураторе объект вида «Справочник» мы даем ему
наименование во множественном числе («Товары»), подразумевая тем
самым, что в базе данных этот объект будет состоять из записей,
каждая из которых описывает один товар (в единственном числе).
Создавая в конфигураторе объект вида «Документ» мы даем ему
наименование в единственном числе («Приходная накладная»), однако
на самом деле мы создаем такое же «хранилище», как и в случае со
справочником. Каждая запись этого «хранилища» будет описывать
одну приходную накладную (в единственном числе). Поэтому
концептуально правильно было бы в конфигураторе задавать
наименование объекта вида «Документ» во множественном числе,
подчеркивая тем самым описание набора документов этого вида
(например, «Приходные накладные»).
Однако, психология человека такова, что, открывая ветку
«Документы», он ожидает увидеть перечисление их в единственном
числе, а никак не во множественном. Так происходит потому, что в
реальной жизни трудно найти подходящий термин для описания
совокупности документов одного вида (совокупность записей одного
вида обозначить гораздо проще - справочник, план и т.д.). Поэтому
соответствующая ветка объектов конфигурации имеет название
«Документы», а объекты, создаваемые в этой ветке, именуются в
единственном числе, хотя, по сути, сама ветка содержит описания
«хранилищ» документов разных видов, а каждый элемент в этой ветке
описывает набор всех документов одного вида.
538 539
Понятие момента времени Концепция оперативного и неоперативного
проведения документов
Д ля определения положения документа на оси времени
П
используется реквизит документа «Дата». Дата содержит время с ри разработке конфигураций на платформе 1С:Предприятие 8.0
точностью до секунды. Это позволяет контролировать принято использовать концепцию оперативного и
последовательность записи документов. Однако при большом объеме неоперативного проведения документов.
создаваемых документов вероятна ситуация, когда несколько Эта концепция подразумевает, что работа пользователей
документов будут иметь одинаковое значение даты (т.е. будут созданы может происходить в двух принципиально разных, по своей сути,
в течение одной секунды). Как в этом случае определить режимах.
последовательность созданных документов?
Оперативное проведение документов пользователями выполняется
Для обработки подобных ситуаций было введено понятие момент
в режиме «реального времени», т.е. отображает изменения, факты,
времени. Момент времени представляет собой совокупность даты, свершающиеся в настоящее время. Оперативное проведение особенно
времени и ссылки на объект базы данных. Момент времени позволяет актуально при многопользовательской работе. Поэтому при
однозначно идентифицировать любой объект ссылочного типа базы оперативном проведении документов следует осуществлять максимум
данных на оси событий, но имеет смысл, в основном, только для проверок, способных исключить ошибки при вводе данных
документов. Кроме того, момент времени позволяет пользователями. Например, при оперативном проведении следует
идентифицировать и не объектные данные, например, записи выполнять контроль остатков на складе списываемой номенклатуры с
регистров, подчиненных регистратору. тем, чтобы исключить одновременную продажу одного товара
Понятие момента времени реализовано во встроенном языке при несколькими продавцами.
помощи универсального объекта МоментВремени. Этот объект имеет Неоперативное проведение документов подразумевает отражение в
свойства «Дата» и «Ссылка», которые позволяют получить базе данных фактов, которые свершились в прошлом, или которые
«составляющие» момента времени, и один метод - Сравнить(), при точно будут совершены в будущем. Поэтому задача неоперативного
помощи которого возможно сравнение двух моментов времени между проведения документов заключается в том, чтобы просто отразить в
собой. Кроме этого объект МоментВремени имеет конструктор и информационной базе данные о совершенных операциях.
может быть создан в явном виде для любого объекта базы данных
При неоперативном проведении документов не производится ряд
ссылочного типа. проверок, в частности контроль остатков. Подразумевается, что если в
Для нескольких документов, имеющих одинаковую дату и время, процессе неоперативного проведения документов были допущены
последовательность их на оси событий определяется системой исходя ошибки (например, списано такое количество номенклатуры, которого
из ссылок на эти документы, может не совпадать с нет на складе), то анализ полученного состояния базы данных является
последовательностью создания документов, и не доступна для отдельной задачей, не относящейся к неоперативному проведению и
изменения пользователем. выполняющейся отдельно от него.
Таким образом, оперативное проведение служит для того, чтобы в
реальном режиме многопользовательской работы определить
возможность или невозможность выполнения той или иной операции
(и выполнить ее, если возможно), а неоперативное проведение служит
для безусловного отражения в базе операций, которые уже были
совершены (или точно будут совершены).
541
540
Механизмосновныхф»гм
У
определив ее в качестве основной формы регистра. Но для логики
всех прикладных объектов конфигурации существует
работы системы это не будет иметь принципиального значения
некоторое количество основных форм. Они служат для
отображения данных объекта в том или ином виде. Если
разработчик не назначит в качестве основных форм объекта свои
собственные, система будет генерировать необходимые формы
объекта самостоятельно, в те моменты, когда к ним происходит
обращение. Наличие такого механизма позволяет разработчику не
тратить время на создание форм для тестирования своей разработки, а
воспользоваться тем, что платформа создаст по умолчанию.
Создание этих форм происходит динамически, в процессе работы
системы. Форма создается в тот момент, когда к ней происходит
обращение. Причем не важно, интерактивное это обращение или
программное. Так для констант форма будет создана как при
интерактивном выборе в меню Операции | Константы, так и при
программном вызове метода ПолучитьФорму() объекта
КонстантыМенеджер:
Константы.ПолучитьФорму();
542 543
Окно редактирования объекта конфигурации и палитпя CBOJ
Н а первый взгляд окно редактирования объекта и палитра Такая способность палитры свойств абсолютно незаменима, когда,
свойств дублируют друг друга. В самом деле, в палитре например, среди трех десятков справочников конфигурации вам нужно
быстро найти те, которые подчинены какому-нибудь другому
свойств отображены все свойства объекта конфигурации.
справочнику. В этом случае вы выбираете мышью в палитре свойств
Зачем было создавать еще и окно редактирования объекта? Ц если
свойство «Владелец» любого справочника, затем переходите в дерево
существует окно редактирования объекта, то зачем тогда палитра
объектов конфигурации и просто пробегаете его при помощи стрелок
свойств, которая содержит все то же самое, только в другом виде? ф или Ф .
Окно редактирования объекта конфигурации предназначено в
первую очередь для быстрого создания новых объектов. Быстрое
создание подразумевает ввод исчерпывающей информации об объекте.
Значит нужно очень хорошо знать структуру объекта, а на это
требуется время.... Выходит, что быстро создать объект не получится?
Получится! Окно редактирования объекта имеет в своей основе
механизм «мастеров»: разработчику в нужной последовательности
предлагается ввести необходимые данные. Последовательность ввода
данных разработана таким образом, чтобы предыдущие данные могли
служить основой для ввода последующих данных. Движение
управляется кнопками «Далее» и «Назад». На каждом шаге
предлагается ввести группу логически связанных между собой
данных.
Но, предположим, что вы уже освоились со структурой объектов
или вам просто нужно изменить несколько свойств объекта. Чтобы при
этом не нужно было опять «прокручивать» все с самого начала, окно
редактирования объекта содержит закладки, которые позволяют вам
перейти непосредственно к тому шагу, на котором вводятся
интересующие вас данные.
Таким образом окно редактирования объекта помогает быстро
создать незнакомый объект конфигурации и в то же время
обеспечивает удобный доступ к нужным свойствам при
редактировании существующих объектов.
Что же касается палитры свойств, то она предоставляет одну
абсолютно незаменимую возможность. Дело в том, что она не
привязана по своей структуре к какому-то конкретному виду объектов
конфигурации, просто ее содержимое меняется в зависимости от того,
какой объект является текущим. За счет этого она может
544 545
Обработчики событий События, связанные с формой
ПодключитьОбработчикИзмененияДанных(
"СправочнжОбъект. Ссылка",
"ПриИзмененииСсылки", Ложь);
546 547
Краткий справочник разработчика События, связанные с фор»
Сам же обработчик «ПриИзмененииСсылки()» будет выглядеть В заключение следует отметить одну интересную особенность в
следующим образом: обработке события модуля приложения
ОбработкаВнешнегоСобытия(). Это событие возникает при посылке
ПроцедураПриИзмененииСсылки(Путъ) внешним приложением сообщения, сформированного в специальном
СписокКурсов. Отбор.Валюта. Установить{Ссылка); формате. Так вот, внешнее событие сначала будет предложено
КонецПроцедуры. обработать всем открытым формам (по событию
ВнешнееСобытие()), а затем уже это внешнее событие может быть
Также для объекта Форма существует возможность указать обработано обработчиком модуля приложения.
обработчик ожидания, который будет вызываться в период ожидания
системы каждый раз по истечению указанного интервала времени. Для
этого используется метод ПодключитьОбработчикОжидания()
(соответственно обратный метод
ОтключитьОбработчикОжидания()). В параметрах этого метода
передается имя обработчика и интервал, с которым он будет
вызываться.
Кроме этого существует ряд событий, позволяющих формам
взаимодействовать друг с другом.
Прежде всего это события, связанные с подчиненностью одной
формы другой.
Во-первых, форма может обрабатывать событие
ОбработкаАктивизацииОбъекта(), которое возникает при
изменении активного объекта в одной из подчиненных форм или при
вызове в одной из подчиненных форм метода
ОповеститьОбАктивизацииОбъекта().
Во-вторых, форма может обрабатывать событие
ОбработкаВыбора(), которое возникает при выборе объекта в одной
из подчиненных форм или при вызове в одной из подчиненных форм
методаОповеститьОВыбореОбъекта().
В-третьих, форма может обрабатывать событие
ОбработкаЗаписиНовогоОбъекта(), которое возникает при записи
объекта в одной из подчиненных форм или при вызове в одной из
подчиненных форм метода ОповеститьОЗаписиНовогоОбъекта().
Но кроме этих трех событий существует еще одно событие объекта
Форма, которое позволяет взаимодействовать не только подчиненным,
но вообще любым открытым формам. Это событие
ОбработкаОповещения(), которое возникает при оповещении всех
открытых форм методом глобального контекста Оповестить().
548 549
Способы работы с коллекцией Виды объектов встроенного языка,
М ногие объекты встроенного языка являются коллекциями предназначенные для работы с данными
Коллекция представляет собой совокупность объектов. прикладных объектов конфигурации
Д
Существуют общие принципы работы с любой коллекцией. Во-
ля обеспечения доступа к информационным структурам базы
первых, доступ к каждому объекту коллекции возможен путем данных встроенный язык содержит набор унифицированных
перебора элементов коллекции в цикле. Для этого используется объектов. Их можно разделить на несколько видов, в
конструкция языка Для Каждого из... Цикл ...: зависимости от их назначения.
Менеджер информационных структур одного вида - этот вид
Для Каждого СтрокаТабличнойЧасти из ТабличнаяЧасть Цикл объектов является коллекцией значений, содержащей менеджеры всех
Сообпшть(СтрокаТабличнойЧасти.Услуга,);
информационных структур этого вида, существующих в базе данных
КонецЦикла;
(например, менеджер справочников - СправочникиМенеджер -
коллекция значений, содержащая объекты
Во-вторых, возможен доступ напрямую к элементу коллекции, без
СправочникМенеджер.<имя>). Предназначен для доступа к
перебора коллекции в цикле. Здесь возможны различные комбинации отдельным менеджерам информационных структур.
двух обращений: Менеджер конкретной информационной структуры - этот вид
1. Если каждому элементу коллекции можно сопоставить объектов предоставляет средства для работы с конкретной
уникальное имя, тогда обращение к элементу коллекции, как правило, информационной структурой (например, менеджер документа
возможно по этому имени: Приходная накладная -
ДокументМенеджер.ПриходнаяНакладная).
Справочники.Сотрудники; Объект - с помощью объектов этого вида возможна манипуляция
Справочники [«Сотрудники»]; данными информационной структуры. Предоставляют доступ к
объекту информационной структуры и позволяют изменять
2. Если нет смысла в «персонификации» элементов коллекции, информацию в базе данных. Применяются для тех информационных
тогда обращение к элементу коллекции, как правило, возможно по структур, на объекты которых могут существовать ссылки
индексу (индекс первого элемента коллекции - ноль): (справочники - СправочникОбъект.<имя>, документы
ДокументОбъект.<имя> и т.д.).
ТабличнаяЧасть[0]; Набор записей - с помощью объектов этого вида также возможна
манипуляция данными информационной структуры. Предоставляют
Следует отметить, что существуют коллекции, сочетающие оба доступ к объекту информационной структуры и позволяют изменять
вида обращений. Например, к коллекции колонок таблицы значений информацию в базе данных. Применяются для тех информационных
можно обращаться как по именам колонок, так и по индексу- структур, ссылки на объекты которых в принципе не могут
использоваться в базе данных (регистры -
РегистрНакопленияНаборЗаписей.<имя>, перерасчеты
ПерерасчетНаборЗаписей.<имя> и т.д.).
Ссылка - объекты этого вида служат для указания ссылки на
объект базы данных, и кроме этого предоставляют некоторую
550
551
Краткий справочник разработчика
с
ДокументСсылка<имя>). Способы доступа к данным
Выборка - объекты этого вида представляют собой набор данных
содержащий данные объектов одной информационной структуры истема 1С:Предприятие 8.0 поддерживает два способа
доступа к данным, хранящимся в базе данных:
отобранных по определенному критерию. Обход выборки выполняется
методом Следующий() и считывание данных из базы данных
происходит динамически, по мере продвижения по выборке. • объектный (для чтения и записи),
Получение ссылки на объект возможно при помощи свойства Ссылка, • табличный (для чтения).
а получение объекта - методом ПолучитьОбъект() (справочник - Объектный способ доступа к данным реализован посредством
СправочникВыборка^имя>). использования объектов встроенного языка. При этом обращение к
Список - объекты этого вида предназначены для управления какому-либо объекту встроенного языка, является обращением к
списком объекта, отображаемым в табличном поле (перечисление - некоторой совокупности данных, как к единому целому.
ПеречислениеСписок.<имя>). Использовать эти объекты имеет Например, объект ДокументОбъект.ОказаниеУслуги будет
смыл только при выводе информации в табличное поле. содержать значения всех реквизитов документа «Оказание услуги» и
всех его табличных частей.
Объектная техника обеспечивает сохранение целостности
объектов, кэширование объектов, вызов соответствующих
обработчиков событий и т.д.
Табличный доступ к данным реализован посредством
использования запросов к базе данных. В этой технике разработчик
получает возможность оперировать отдельными полями таблиц базы
данных, в которых хранятся те или иные данные.
Табличная техника предназначена для получения информации из
базы данных по некоторым условиям (отбор, группировка, сортировка,
объединение нескольких выборок, расчет итогов и т.д.). Табличная
техника оптимизирована для обработки больших объемов
информации, расположенной в базе данных, и получения данных,
отвечающих заданным критериям.
552
553
Кэш объ ек
С
Таким образом, если мы обратимся к кэшу для получения
истема 1С:Предприятие 8.0 использует механизм представления объекта, и в кэше есть информация для нашей ссылки,
кэширования данных объектов, считанных из базы данных данные будут взяты из кэша (если в кэше весь объект, нужное
при использовании объектной техники. Таким образом, для представление будет получено из данных объекта). Если в кэше нет
получения реквизитов какого-либо объекта через ссылку, информации для нашей ссылки - из базы данных в кэш будут считаны
выполняется обращение к кэшу объектов, расположенному в только поля, необходимые для формирования представления объекта.
оперативной памяти.
Если мы обратимся к кэшу для получения реквизита объекта, и в
Кэш объектов состоит из двух частей: транзакционного кэша и кэше есть информация для нашей ссылки, дальнейшие действия будут
обычного кэша. В зависимости от того, происходит ли обращение в зависеть от того, что находится в кэше. Если в кэше весь объект -
рамках транзакции или нет, в действие вступает тот или иной кэш: значение реквизита будет получено из кэша. Если в кэше
представление объекта - оно будет удалено из кэша и в кэш будут
считаны все данные объекта. Если же при получении реквизита
А = СправочникНоменклатура.ВидНоменклатуры; I
объекта в кэше нет информации для нашей ссылки - из базы данных
будут считаны все поля объекта.
Считанные данные будут находиться в кэше до тех пор, пока не
наступит одно из трех событий:
Е
поступления данных в кэш, данные считаются верными (валидными).
сли при обращении к обычному кэшу требуемых данных в нем
Если интервал превысил 20 секунд, будет выполняться проверка на то,
нет, то выполняется чтение данных объекта из базЫ данных и
что версия данных, хранящихся в кэше, соответствует версии данных,
сохранение их в кэше. Уникальным идентификатором для
находящихся в базе данных. В случае если окажется, что версии
кэша, в данном случае, будет являться ссылка на объект базы данных.
данных не совпадают (т.е. произошло изменение данных в базе
Поэтому данные каждого считанного
данных), данные, находящиеся в кэше будут удалены из него и
555
554
Краткий справочник разработчика
выполнено повторное считывание данных из базы данных. Начиная с Если транзакция завершена успешно (Commit), данные всех
этого момента начнется отсчет следующего 20-ти секундного объектов, содержащиеся в транзакционном кэше, переносятся в
интервала валидности этих данных. обычный кэш, а транзакционный кэш очищается.
Кроме всех вышеперечисленных событий, считанные данные будут
удалены из кэша по истечении 20 минут после их последнего
считывания из базы данных. Commit
Таким образом при последовательном выполнении двух операторов
(где «Номенклатура» - это ссылка на объект справочника):
А = Номенклатура.Наименование; В =
Номенклатура.ВидНоменклатуры;
Транзакционный кэш
556 557
Краткий справочник разработчика
К
управления, для отображения его на экране всегда ак вы теперь знаете, при создании запроса система
используется представление объекта (например, элемент предоставляет нам в качестве источников данных некоторое
справочника может иметь представление в виде количество виртуальных таблиц. Название «виртуальные»
наименования или в виде кода). Поскольку объект вида Ссылка полностью соответствует их сути, поскольку эти таблицы, в свою
содержит только внутренний идентификатор, выполняется обращение очередь, также являются результатом запроса, который система
к кэшу объектов за получением представления ссылочного объекта. формирует в момент выполнения соответствующего участка кода.
Если в кэше есть валидное представление - берется оно. Если в кэше По большому счету разработчик может самостоятельно получить
есть валидные данные объекта - представление получается из них. те же самые данные, которые система предоставляет ему в качестве
В остальных случаях выполняется чтение в кэш полей объекта, виртуальных таблиц, однако алгоритм получения этих данных не
будет оптимизирован в силу следующих двух причин.
необходимых для формирования представления.
Во-первых, все виртуальные таблицы параметризованы, т.е.
Аналогичный механизм используется при вызове функции:
разработчику предоставляется возможность задать некоторые
параметры, которые система будет использовать при формировании
А = Строка(СсылкаНаЭлементСправочникаНоменклатура); запроса создания виртуальной таблицы. Примечательным здесь
является то, что задание параметров виртуальной таблицы не всегда
а также при неявном преобразовании ссылочной переменной к типу приводит к простой подстановке указанных разработчиком значений в
Строка. текст запроса. В зависимости от того, какие параметры виртуальной
Теперь, если вспомнить нашу работу с конструктором выходной таблицы указаны разработчиком, система может формировать
формы, лишний раз становится понятно, почему конструктор, при РАЗЛИЧНЫЕ запросы для получения одной и той же виртуальной
выборе ссылочного поля, всегда добавляет к списку выбранных полей таблицы, причем эти запросы будут оптимизированы с точки зрения
представление этого поля. Именно для того, чтобы не выводить в переданных параметров.
ячейку табличного поля ссылку и не вызывать тем самым Во-вторых, не всегда разработчик имеет возможность получить
преобразования ссылочной переменной к типу Строка со всеми доступ к тем данным, к которым имеет доступ система. Например, при
вытекающими отсюда действиями. использовании виртуальных таблиц регистров сведений, разработчику
доступна, по большому счету, вся та же информация о данных
регистров, которую использует система при формировании запроса
виртуальной таблицы. Совсем иная картина с виртуальными
таблицами регистров накопления, где система динамически формирует
запрос в зависимости не только от переданных параметров, но и от
периода рассчитанных итогов регистра, причем в запросе она
использует данные рассчитанных итогов, которые просто не доступны
для разработчика при создании запроса.
Конечно, разработчик может самостоятельно перебрать все записи
регистра накопления и в итоге получить те же самые данные, которые
система предоставляет в виде виртуальной таблицы, однако очевидно,
558 559
что такой запрос будет менее эффективным и потребует от
разработчика гораздо больше трудозатрат.
Манипулирование данными объектов
Н
есмотря на большое разнообразие объектов встроенного
языка, предназначенных для работы с информационными
структурами, создаваемыми на основе объектов
конфигурации, лишь некоторые из объектов встроенного языка
позволяют изменять данные, хранящиеся в этих
информационных структурах. Такие объекты мы назовем объектами
манипулирования данными.
Каждый тип объектов манипулирования данными имеет в
конфигураторе соответствующий модуль, который называется либо
модулем объекта, либо модулем набора записей, в зависимости от
принадлежности к тому или иному объекту конфигурации. Для
констант этот модуль называется модулем менеджера значений.
Так вот, модуль объекта манипулирования данными будет всегда
выполняться при создании объекта манипулирования данными. Кроме
этого, он будет всегда выполняться и при интерактивном обращении
пользователя к самой структуре манипулирования данными, поскольку
такое обращение будет вызывать создание соответствующего объекта
манипулирования данными. Например, при открытии формы элемента
справочника будет создаваться объект СправочникОбъект.<имя>.
В модуле объекта манипулирования данными, кроме всего прочего,
могут быть описаны процедуры с ключевым словом Экспорт, что
подразумевает вызов этих процедур как методов соответствующего
объекта манипулирования данными. Здесь важно не путать объект
манипулирования данными с другими объектами, позволяющими
получить доступ к данным этой информационной структуры.
Например, если мы, для объекта конфигурации Справочник
«Клиенты» опишем в модуле объекта процедуру:
КонецПроцедуры;
561
560
Краткий справочник разработчика Манипулирование данными объек!
то в дальнейшем сможем вызывать ее как метод объекта Однако существует возможность манипулирования записями
СправочникОбъект.Клиенты: регистра сведений и при помощи объекта
РегистрСведенийМенеджерЗаписи.<имя>. Но объект
Клиент = Справочники.Клиенты.НайтиПоКоду(1)ПолучитьОбъект();
РегистрСведенийМенеджерЗаписи.<имя> работает с данными
Клиент.Проверка(); регистра не напрямую, а через объект
РегистрСведенийНаборЗаписей.<имя>. Таким образом, модуль
Однако следующий код будет приводить к ошибке, т.к. объект набора записей, а также обработчики событий ПередЗаписью() и
СправочникСсылка.Клиенты не имеет метода «Проверка»: ПриЗаписи() набора записей, будут отрабатывать и при
манипулировании объектом
РегистрСведенийМенеджерЗаписи.<имя>. Однако процедуры и
Клиент = Справочники.Клиенты.НайтиПоКоду(1); функции, описанные в модуле набора записей с ключевым словом
Клиент.Проверка();
Экспорт, не будут доступны как методы объекта
РегистрСведенийМенеджерЗаписи.<имя>.
В следующей таблице представлен перечень объектов,
позволяющих манипулировать данными. Как всегда, не бывает правил
без исключений, и существует два таких исключения.
Во-первых, для констант указаны три объекта манипулирования
данными КонстантаМенеджерЗначения.<имя>,
КонстантаМенеджер.<имя> и КонстантыНабор. На самом деле
манипулирование данными константы осуществляется при помощи
объектаКонстантаМенеджерЗначения.<имя>.
Два других объекта - КонстантаМенеджер.<имя> и
КонстантыНабор - также позволяют изменять значения констант,
хранящиеся в базе данных, однако они, при выполнении своих
методов Установить() и Записать() вызывают создание объекта
КонстантаМенеджер.<имя>, который и выполняет
непосредственное изменение данных.
При выполнении метода Установить() объекта
КонстантаМенеджер.<имя>, будет вызван модуль менеджера
значения и обработчики событий ПриЗаписи() и ПередЗаписью()
для изменяемой константы. При выполнении метода Записать()
объекта НаборКонстант, модуль менеджера значения и
соответствующие обработчики будут вызваны для каждой константы,
входящей в набор.
Во-вторых, для регистра сведений указаны два объекта
манипулирования данными. «В чистом виде» манипулирование
данными регистра сведений осуществляется при помощи объекта
РегистрСведенийНаборЗаписей.<имя>.
562 563
Константы
Объекты встроенного языка для работы с
константами:
Узнай больше!
Про основные виды объектов встроенного языка можно
прочитать в главе «Виды объектов встроенного языка,
предназначенные для работы с данными прикладных объектов
конфигурации» на странице 551.
565
Краткий справочник разработчика
Константы
Использование объектов:
СоздатьМенеджерЗначения()
// СоздатьНабор()
566
567
Краткий справочник разработчика Константы
568 569
Справочники
Использование объектов:
Справочники
Объекты встроенного языка для работы со II Справочники
справочниками //Пример: Вывести все типы ссылок на элементы справочников, существующие
//в конфигурации
Массив = Справочники.ТипВсеСсылки().Типы();
Для Каждого ОчереднойТип из Массив Цикл
Сообщить(ОчереднойТип);
КонецЦикла;
570 571
Краткий справочник разработчика Справочники
// Выбрать()
// НайтиПоКоду()
// ВыбратьИерархически()
// НайтиПоНаименованик>()
// НайтиПоРеквизитуО //Пример: Вывести список элементов, расположенных в корне справочника
// ПустаяСсылка() Выборка = Справочники.Номенклатура
// ПолучнтьСсылку()
.Выбрать(Справочники.Номенклатура.ПустаяСсылкаО); Пока
// .<имя предопределенного элемента справочника>
Выборка.Следующий() Цикл Если Не Выборка.ЭтоГрутша тогда
Сообщить(Выборка);
//Пример: Проверить, помечен лн на удаление элемент справочника Номенклатура
КонецЕсли; КонецЦикла;
//c кодом 13
Если Справочники.Номенклатура.НайтиПоКоду(13).ПометкаУдаления тогда //Пример: Удалить все элементы иерархического справочника
Сообщить("Элемент с кодом 13 помечен на удаление"); Выборка = Справочники.Номенклатура.ВыбратьИерархически(); Пока
КонецЕсли; Выборка.Следующий() Цикл
Выборка.Удалить();
/ЛТример: Является ли элемент справочника Номенклатура с наименованием КонецЦикла;
//«Услуги» группой
Если Справочники.Номенклатура
.НайтиПоНаименованию"Услуги", Истина).ЭтоГруппа тогда
Сообщить("Элемент Услуги является группой"); КонецЕсли;
572 573
Краткий справочник разработчика Справочники
// Ссылка
//
Владелец //Пример: Заполнить табличную часть документа ПриходнаяНакладная всеми
// //элементами из указанной группы справочника Номенклатура
Родитель // Выборка = Справочники.Номенклатура.ВыбратьИерархическиСПолеВвода!);
Ссылка Пока Выборка.Следующий() Цикл
СсылкаНаНоменклатуру = Выборка.Ссылка; Если
// Пример: запретить изменение подчиненных элементов, если у владельца СсылкаНаНоменклатуру.ЭтоГруппа тогда
// установлено соответствующее свойство «ИзмененияЗапрещены» // в Продолжить;
модуле формы элемента справочника КонецЕсли;
Процедура ПередЗаписью(Отказ) НоваяСтрока = Материалы.Добавить();
Если Владелец.ИзмененияЗапрещены Тогда НоваяСтрока.Материал = СсылкаНаНоменклатуру;
Отказ = Истина; КонецЦикла;
КонецЕсли;
КонецПроцедуры
//
// ПолучитьОбъект()
ПолучитьОбъект() //
Скопировать()
// Пример: Изменить наименование элемента справочника //Пример: пометить все элементы неиерархического справочника на удаление
Элемент = Справочники.Номенклатура.НайтиПоКоду(10).ПолучитьОбъект(); Выборка = Справочники.Клиенты.Выбрать();
Элемент.Наименование = "Мое новое наименование"; Элемент.Записать(); Пока Выборка.Следующий() Цикл
Выборка.ПолучитьОбъект().УстановитьПометкуУдаления(Истина);
// Пример: Заполнить справочник тестовыми данными КонецЦикла;
Элемент = Справочвики.Номенклатура.СоздатьЭлемент();
Элемент.Наименование = "Тестовый элемент";
Элемент.ЗаписатьО; Для ш = 1 по 1000 Цикл
НовыйЭлемент = Элемент.СкопнроватьО;
НовыйЭлемент.Записать();
КонецЦикла;
574 575
Краткий справочник разработчика
элемента
Последовательность событий при записи элемента справочник
справочника из формы элемента а
Модуль
формы Запись элемента Модуль
справочника объекта
Объекты встроенного языка для работы с
Документы документами:
576 577
Краткий справочник разработчика Документы
// СоздатьДокумент()
578 579
Краткий справочник разработчика Дою менты
// ПолучитьОбъект()
II ПолучитьОбъект() //
Скопировать()
// Ссылка
580
581
Краткий справочник разработчика Документы
583
582
Краткий справочник разработчика
Перечислени
Перечисления //
//
.<имя перечисления>
[<имя перечисления >]
// Для Каждого ... Из ... Цикл ... КонецЦикла;
Объекты встроенного языка для работы с
//Пример: Открыть форму выбора перечисления
перечислениями: Форма = Перечисления.ВидыНоменклатуры.ПолучитьФормуВыбора();
Форма.Открыть();
ПустаяСсылкаПеречисления= Перечисления.ВидыНоменклатуры.ПустаяСсылка();
Если ТекущаяНоменклатура.ВидНоменклатуры = ПустаяСсылкаПеречисления тогда
//предложить заполнение вида номенклатуры
...
КонецЕсли;
Узнай больше!
Про основные виды объектов встроенного языка можно
прочитать в главе «Виды объектов встроенного языка,
предназначенные для работы с данными прикладных объектов
конфигурации» на странице 551.
Использование объектов:
// Перечисления
584 585
Планы видов характеристик
■ Узнай больше!
Про основные виды объектов встроенного языка можно
прочитать в главе «Виды объектов встроенного языка,
предназначенные для работы с данными прикладных объектов
конфигурации» на странице 551.
586 587
Планы счетов
ПланСчетовМенеджер.<имя>
ПланСчетовСсылка.<имя> И ПланСчетовОбъект.ошя>
ПланСчетовВыборка.<имя>
ПланСчетовВидыСубконто.<имя>
ПланСчетовВидыСубконтоСтрока.^ашя>
589
Планы видов расчета
ВытесняющиеВидыРасчета.<имя>. Предопределенная
табличная часть вида расчета - список вытесняющих видов расчета.
Такая табличная часть определена только для планов видов расчета с
признаком ИспользуетПериодДействия. Имеет единственную
колонку- ВидРасчета типа ПланВидовРасчетаСсылка.<имя>.
ВытесняющиеВидыРасчетаСтрока^имя>. Строка
предопределенной таблицы вытесняющих видов расчета.
ВедущиеВидыРасчета.<имя>. Предопределенная табличная
часть вида расчета - список ведущих видов расчета. Имеет
единственную колонку - ВидРасчета типа
ПланВидовРасчетаСсылка.<имя>.
ВедущиеВидыРасчетаСтрока.<имя>. Строка предопределенной
таблицы ведущих видов расчета.
БазовыеВидыРасчета.<имя>. Предопределенная табличная
часть вида расчета - список ведущих видов расчета. Такая табличная
часть (свойство БазовыеВидыРасчета) определена только для
планов видов расчета со свойством ЗависимостьОтБазы не равным
значению «Не зависит». Имеет единственную колонку - ВидРасчета
типа ПланВидовРасчетаСсылка^имя>.
БазовыеВидыРасчетаСтрока.<имя>. Строка предопределенной
таблицы базовых видов расчета.
Свойства и методы взаимодействия перечисленных объектов в
большинстве своем аналогичны свойствам и методам объектов,
предназначенных для работы со справочниками (см. раздел «Объекты
встроенного языка для работы со справочниками» на странице 570).
ВытесняющиеВидыРасчетаСтрока.<имя>
590 591
Последовательность событий при записи вида Регистры сведений
расчета из формы
Объекты встроенного языка для работы с регистрами
сведений
593
592
Краткий справочник разработчика Регистры сведе ни
Использование объектов: //Пример: Показать номенклатуру, цена на которую была установлена в заданную
//дату и время
Набор = РегистрыСведений.Цены.СоздатьНаборЗаписей();
Набор.Отбор.Период.Установить(ЗаданнаяДата, Истина);
// РегистрыСведений Набор.Прочитать();
Для Каждого ОчереднаяЗапись Из Набор Цикл
//Прнмер: Получить текущую цену из периодического регистра сведений Цены Сообщить("Номенклатура = "+ОчереднаяЗапись.Номенклатура+
Элемент = Справочники.Номенклатура.НайтиПоКоду(4); ", цена = "+ОчереднаяЗапись.Цена);
Отбор = Новый Структурв("Номенклатура",Элемент); КонецЦикла;
ЗначенияРесуроов = РегистрыСведений.Цены
.ПолучитьПоследнее(ТекущаяДата(), Отбор);
// СоздатьМенеджерЗаписи()
II .<имя регистра сведений> // [<имя регистра /Шример: Добавить новое значение цены в регистр Цены
сведений >] // Для Каждого ... Из ... Цикл ... Запись = РегистрыСведений.Цены.СоздатьМенеджерЗаписи();
КонецЦикла; Запись.Период = ТекущаяДата();
Запись.Номенклатура = Справочники.Номенклатура.НайтиПоКоду("0000005");
//Пример: Открыть форму списка регистра сведений Цены Запись.Цена = 568;
ИмяРегистра= "Цены"; Запись .Записать();
Форма = РегистрыСведений[ИмяРегистра].ПолучитьФормуСписка();
Форма.Открыть();
594 595
Краткий справочник разработчика Регистры сведений
Последовательность событий
// [<индекс элемента коллекции >]
// Для Каждого ... Из ... Цикл ... КонецЦикла;
При записи из формы записи регистра сведений из формы
/Шример: Показать номенклатуру, цена на которую была установлена в заданную записи
//дату и время
Набор = РегистрыСведений.Цены.СоздатьНаборЗаписей();
Набор.Отбор.Период,Установить(ЗаданнаяДата,Истина);
Набор.Прочитать();
Для Каждого ОчереднаяЗапись Из Набор Цикл
Сообщить("Номенклатура = "+ОчереднаяЗапись.Номенклатура+
", цена = "+ОчереднаяЗапись.Цена);
КонецЦикла; __________________________________________________________
// ПолучитьМенеджерЗаписи()
// Выбрать()
// ВыбратьПоРегистратору()
596 597
Краткий справочник разработчика
Узнай больше!
Про основные виды объектов встроенного языка можно
прочитать в главе «Виды объектов встроенного языка,
предназначенные для работы с данными прикладных объектов
конфигурации» на странице 551.
598 599
Краткий справочник разработчика
Регистры накопле
// РегистрыНакопления
600
601
Последовательность событий при записи набора Регистры бухгалтерии
записей регистра накопления из формы набора Объекты встроенного языка для работы с регистрами
записей бухгалтерии
Узнай больше!
Про основные виды объектов встроенного языка можно
прочитать в главе «Виды объектов встроенного языка,
предназначенные для работы с данными прикладных объектов
конфигурации» на странице 551.
603
602
Краткий справочник разработчика Регистры бухгалтерии
бухгалтерии. Например, данный объект представляет записи регистра Последовательность событий при записи набора
в наборе записей. записей регистра бухгалтерии из формы
РегистрБухгалтерииСубконто. Коллекция значений субконто
записи регистра бухгалтерии. Установка и получение значения
конкретного субконто осуществляется через оператор [], в качестве
параметра которому передается вид субконто или через имя
предопределенного субконто.
РегистрБухгалтерииКлючЗаписи. Набор значений, однозначно
идентифицирующий запись регистра. Объект используется в тех
случаях, когда необходимо сослаться на определенную запись.
Например, он выступает в качестве значения свойства
ТекущаяСтрока табличного поля, отображающего список записей
регистра.
Свойства и методы взаимодействия перечисленных объектов в
большинстве своем аналогичны свойствам и методам объектов,
предназначенных для работы с регистрами накопления (см. раздел
«Регистры накопления» на странице 599).
604 605
Регистры расчета
»■ Узнай больше!
Регистры расчета Про основные виды объектов встроенного языка можно
прочитать в главе «Виды объектов встроенного языка,
Объекты встроенного языка для работы с регистрами предназначенные для работы с данными прикладных объектов
конфигурации» на странице 551.
расчетов
РегистрРасчетаЗапись.<имя>. Используется для доступа к
записи регистра расчета. Объект не создается непосредственно, а
предоставляется другими объектами, отвечающими за регистр Расчета.
Например, данный объект представляет записи регистра в наборе
записей.
РегистрРасчетаКлючЗаписи.<имя>. Представляет собой набор
значений, однозначно идентифицирующих запись регистра. Объект
используется в тех случаях, когда необходимо сослаться на
определенную запись. Например, он выступает в качестве значения
свойства ТекущаяСтрока табличного поля, отображающего список
записей регистра.
РегистрРасчетаПерерасчеты.<имя>. Менеджер всех
менеджеров перерасчетов регистра расчетов.
ПерерасчетМенеджер.<имя>. Менеджер перерасчета служитдля
получения набора записей перерасчета.
ПерерасчетНаборЗаписей.<имя>. Набор записей перерасчета.
ПерерасчетЗапись.<имя>. Объект используется для доступа к
записи перерасчета.
ФактическийПериодДействия. Массив значений типа
ЭлементФактическогоПериодаДействия.
ЭлементФактическогоПериодаДействия. Элемент
фактического периода действия.
Свойства и методы взаимодействия перечисленных объектов в
большинстве своем аналогичны свойствам и методам объектов,
предназначенных для работы с регистрами накопления (см. раздел
«Регистры накопления» на странице 599).
607
606
Сраткий справочник разработчика
Модуль формы
набора записей
регистра
расчета
ПослеЗаписи() ~J
ПланОбменаСписок.<имя>
608
609
Краткий справочник разработчика
610
611
Вопросы при переходе с версии 7.
613
Краткий справочник разработчика Вопросы при переходе с версии 7.7
средствами встроенного языка, и типовые конфигурации содержат Я не могу внести никаких изменений в типовую конфигурацию.
Почему?
настройку, позволяющую регулировать установку этого режима.
Следует заметить, что при включенной защите невозможно не В версии 8.0 существует механизм поддержки и обновления
конфигураций, позволяющий пользователям обновлять конфигурации
только внесение изменений, но и копирование ячеек данного в автоматическом или полуавтоматическом режиме при выходе новых
табличного документа. версий.
Аналогичный подход использовался и в типовых конфигурациях
Естественно, что для всех типовых конфигураций, выпускаемых
версии 7.7 (например, в девятой редакции «Торговля и склад»).
фирмой «1С» по умолчанию включен режим, позволяющий
производить обновления автоматически. Поэтому вся конфигурация
В программных модулях у меня не выделяется цветом все, что защищена от изменений, и вы не имеете возможности что-либо
относится к глобальному контексту (свойства, методы...)? редактировать.
Да, в версии 8.0 выделяются цветом только конструкции
Можно изменить режим поддержки конфигурации так, чтобы
встроенного языка: иметь возможность вносить в нее изменения. Для этого следует
Процедура ... КонецПроцедуры, воспользоваться командой меню
Функция ... КонецФункции, Конфигурация | Поддержка | Настройка поддержки Включить
возможность изменений. После этого все объекты
Возврат,
конфигурации могут редактироваться, и при обновлении
Попытка ... Исключение ... КонецПопытки, конфигурации будет выполняться синхронизация сделанных
Для ... По ... Цикл ... КонецЦикла, изменений с изменениями поставщика.
Для Каждого ... Из ... Цикл ... КонецЦикла, В этом же окне существует возможность вообще снять
Пока ... Цикл ... КонецЦикла, конфигурацию с поддержки, но тогда обновление не будет
производиться, о чем необходимо заранее предупредить
Если ... Тогда ... ИначеЕсли ... Иначе ... КонецЕсли,
пользователей.
Перейти, О том, какие существуют конфигурации, можно прочитать в главе
Прервать, «Немного о конфигурациях» на странице 535.
Продолжить, Более подробную информацию можно найти на диске ИТС в статье
Новый, "Обновление прикладных решений".
Перем,
Права
Выполнить,
конструкция "?".
Встроенные функции языка, свойства и методы глобального Я добавил новую роль, но не могу назначить ее ни одному
пользователю, она не появляется в списке выбора.
контекста не являются конструкциями встроенного языка и поэтому не
В версии 8.0 в информационной базе хранится несколько
выделяются цветом. конфигураций, в том числе основная конфигурация (которую
редактирует разработчик), и конфигурация базы данных (которая
соответствует структуре базы данных, и с которой работают
пользователи в режиме 1С:Предприятие).
614 615
раткий справочник разработчика Вопросы при переходе версии
При редактировании пользователей доступны только те объекты В версии 8.0 обработка ожидания может быть установлена методом
конфигурации (роли, интерфейсы и языки), которые содержатся в ПодключитьОбработчикОжидания() (для отключения обработчика
конфигурации базы данных. ожидания используется метод ОтключитьОбработчикОжидания()).
Обработка ожидания может выполняться как в модуле приложения,
Поэтому, чтобы созданную роль можно было назначить так и в модуле формы. Для каждой формы, как и для приложения в
пользователю, нужно сначала выполнить обновление конфигурации целом, может быть установлено несколько обработчиков ожидания с
базы данных (меню Конфигурация | Обновить конфигурацию базы разными интервалами.
данных).
Более подробно о событиях, связанных с формой, можно прочитать
О том, какие существуют конфигурации, можно прочитать в главе
в главе «События, связанные с формой» на странице 547.
«Немного о конфигурациях» на странице 535.
Что использовать вместо разделителя строк, который был в 7.7?
Системные константы, процедуры и функции Вместо системной константы РазделительСтрок версии 7.7, в
версии 8.0 следует использовать системный набор значений Символы.
В версии 7.7 была функция КаталогИБ, а как теперь определить В частности, для указания символа перевода строки следует
каталог информационной базы, чтобы хранить в нем свои файлы? использовать значение этого набора - «ПС»:
Системная функция 1С:Предприятия 7.7 КаталогИБ() не
реализована в версии 8.0. Сообщить("Первая строка"+Символы.ПС+"Вторая строка");
Это связано с тем, что в версии 8.0 вся информационная база
физически является одним файлом, независимо от используемого
файлового или клиент-серверного варианта работы. Таким образом Есть ли аналог в 8-ке - ПериодСтр() в 7.7?
подразумевается, что понятие каталога, как некоей совокупности Да, в версии 8.0 есть аналог системной функции ПериодСтр().
файлов, относящихся к данной информационной базе, отсутствует. Для формирования текстового представления периода следует
Теперь все нужные файлы должны размещаться внутри использовать функцию глобального контекста
информационной базы. Для этого в 1С:Предприятии 8.0 введен новый ПредставлениеПериода(). В качестве параметров в эту функцию
тип реквизитов и ресурсов — ХранилищеЗначения. передаются даты начала и окончания периода, а также строка,
определяющая способ форматирования периода.
Функция СтатусВозврата(). Есть аналог в 8.0?
Нет, в версии 8.0 метод СтатусВозврата() не используется. ОписаниеПериода = "Период:" +
Чтобы в обработчике события указать на необходимость отмены ПредставлениеПериода(ДатаНачала, ДатаКонца, "ФП = Истина");
стандартных действий, выполняемых системой для данного события,
нужно использовать специальный параметр обработчика события.
Этот параметр имеет тип Булево, а его название зависит от вида Как узнать текущее время в сеансе работы? РабочаяДата
предлагает только дату.
с о б ыт ия , и может б ыт ь различ ным ( «Отказ » или
Свойство глобального контекста РабочаяДата служит для
«СтандартнаяОбработка»).
отображения или установки рабочей даты, используемой в текущем
сеансе конфигурации. Поэтому оно содержит дату в виде 44:MM:CC
Есть ли аналог процедуры ОбработкаОжидания()? 00:00:00, указывающую на начало дня.
Есть.
516 617
Краткий справочник разработчика Вопросы при переходе с версии 7.7
618 619
Сраткий справочник разработчика Вопросы при переходе с версии 7.7
документа «ОказаниеУслуги» в разделе «Отбор объектов, введенных Более подробно о том, что такое расширения формы, можно
прочитать в разделе «Данные и элементы управления» на странице
на основании» на странице 497. 502.
620 621
гкий справочник разработчика Вопросы при переходе с версии 7.7
Как в иерархическом списке программно установить отбор по После этого, используя значение реквизита формы, связанного с
конкретному родителю? полем выбора, можно устанавливать текущее и получать выбранное
Так как табличное поле поддерживает стандартную механику значение в поле выбора.
работы с иерархическими списками, то поле «Родитель» не Пример работы с полем выбора можно посмотреть в модуле формы
используется в стандартной механике отборов, а управляется отчета «РейтингКлиентов» в разделе «Создание отчета
специальным способом. Свойство ТекущийРодитель табличного РейтингКлиентов» настранице 198.
поля позволяет получить и установить текущего родителя, а свойство
ИзменятьТекущегоРодителя позволяет запретить пользователю Не могу найти аналог «семерочного» Активизировать(<имя
переход по родителям. реквизита>). Нужно периодически программно активизировать
элемент формы.
Как работать с элементом управления ПолеВыбора? Для указания текущего активного элемента управления,
В 1С:Предприятии 8.0 значением поля выбора является собственно расположенного в форме, следует использовать свойство объекта
само выбираемое значение, а не список выбора. Форма - ТекущийЭлемент.
Список выбора, соответствующий полю выбора, задается в
свойстве СписокВыбора элемента управления. Справочник
Заполнять список выбора рекомендуется в теле модуля, а не в
обработчиках событий «Перед открытием» и «При открытии». Есть ли в версии 8.0 аналог методу формы справочника
Это связано с тем, что значение, устанавливаемое для поля выбора, ИспользоватьСписокЭлементов()?
сохраняется, если оно найдено в списке выбора этого поля. Если же Нет.
устанавливаемое значение не найдено в списке выбора - сохраняется Для того чтобы отобразить в списке специально отобранный
значение Неопределено. перечень объектов, следует использовать выборку данных запросом и
Таким образом, поскольку установка значения поля выбора в отображение их в форме в таблице значений или табличном
открываемой форме производится в процессе создания формы (до документе. При этом система 1С:Предприятие 8.0 будет обеспечивать
вызова событий «Перед открытием» и «При открытии») - список полноценное взаимодействие других системных механизмов с такими
выбора поля выбора должен быть заполнен в теле модуля формы. формами.
В противном случае, при создании формы значение, При использовании динамических списков документов,
устанавливаемое для поля ввода, не будет найдено в его списке выбора справочников и т.д., также можно программно установить отбор по
(потому что список выбора еще пустой), и в поле выбора будет полю Ссылка, и указать, что в качестве вида сравнения будет
сохранено значение Неопределено (несмотря на то, что реквизит, с использовано вхождение в список значений. Такой прием тоже
которым связано поле выбора, имеет другое значение). Последующие позволяет отображать в списке только определенные объекты. Однако
попытки заполнить список выбора в обработчиках событий «Перед такой способ может иметь только ограниченное применение, потому
открытием» или «При открытии» не дадут ожидаемого результата, что динамический список обладает большим количеством
поскольку в поле ввода ранее уже сохранено значение Неопределено. универсальных возможностей (установка отбора пользователем,
Например: переходы по уровням в иерархических списках и т.д.), и сложно
совместить в прикладных решениях эти механизмы с отбором по
ЭлементыФормы.ПолеВыбора 1 .СписокВыбора.Добавить( 1,"Один"); конкретным значениям ссылок.
ЭлементыФормы.ПолеВыбора 1 .СписокВыбора.Добавить( 2,"Два");
ЭлементыФормы.ПолеВыбора 1 .СписокВыбора.Добавить( 3,"Три");
623
раткий справочник разработчика Вопросы при переходе с версии
624 625
!раткий справочник разработчика Вопросы при переходе с версии 7.7
626 627
раткий справочник разработчика Вопросы при переходе с версии 7.7
Как сохранить документ без проведения (в 7.7 можно было Для обхода табличной части можно использовать и обычный цикл
написать в кнопке #Записать Закрыть)? Для ... По ... Цикл ... КонецЦикла, но необходимо помнить, что
В версии 8.0 следует использовать обработчик события нажатия индекс первого элемента коллекции всегда равен нулю:
кнопки. Назначение процедур модуля обработчиками события нажатия
возможно как для новых кнопок, размещаемых в форме, так и для Для СчетчикЦикла = 0 По Материалы.Количество() - 1 Цикл
ОчереднаяСтрока = Материалы[СчетчикЦикла];
стандартных кнопок, расположенных в командной панели КонецЦикла;
«ОсновныеДействияФормы».
В обработчике события нажатия следует вызвать метод объекта
В качестве примера можно посмотреть главу «
документ Записать(), с первым параметром, равным Способы работы с коллекцией» на странице 550, или обработчик
РежимЗаписиДокумента.Запись. После этого нужно закрыть события «ОбработкаПроведения» в модуле документа
форму: «ПриходнаяНакладная» в разделе «Создание движений документа
ПриходнаяНакладная» на странице 89.
Процедура ЗаписатьБезПроведенияИЗакрыть(Кнопка)
Записать(РежимЗаписиДокумента.Запись); Закрыть();
КонецПроцедуры _______________ _______________ Есть ли в версии 8.0 подчиненные документы?
Нет, специального понятия "Подчиненные документы" в версии 8.0
не существует.
В версии 8.0 одни объекты (документы, элементы справочников,
Как перебрать строки табличной части документа? задачи и т.д.) могут являться основанием, для создания других
Табличная часть документа (так же, как и любого другого объекта объектов. Таким образом, документ может быть создан не только на
конфигурации, обладающего табличными частями) представляет основании другого документа, но и на основании, например, элемента
собой коллекцию значений, элементами которой являются строки справочника или бизнес-процесса.
табличной части. Поэтому перебор строк табличной части (так же, как
Поэтому теперь, для получения документов, имеющих ссылки на
и любой другой коллекции значений) проще всего реализовать с
некоторый документ, рекомендуется использовать объект Критерий
помощью циклаДля Каждого ... Из ... Цикл ... КонецЦикла:
отбора. Использование критерия отбора предоставляет больше
возможностей, чем механизм подчиненных документов. Критерий
Для Каждого ТекСтрокаМатериалы Из Материалы Цикл отбора позволяет отбирать не только документы, но и другие объекты
ОчереднаяСтрока = ТекСтрокаМатериалы; базы данных. Кроме того, он позволяет непосредственно указать
КонецЦикла; перечень реквизитов, по значению которых необходимо выполнять
отбор.
При этом переменной цикла «ТекСтрокаМатериалы» будет
являться не номер строки, а вся строка как объект. Для получения В форме критерия отбора можно использовать стандартный список
для отображения найденных значений и также в форме вставить
номера строки следует использовать свойство НомерСтроки или
список документов с отбором по указанному критерию.
добавить переменную и увеличивать ее в теле цикла.
Однако следует учитывать, что критерий отбора не позволяет
выполнять динамический просмотр найденных данных. В список
будут включаться все найденные объекты. Соответственно,
нецелесообразно использовать этот механизм, если количество
629
Вопросы при переходе с версии 7.7
шожения
найденных объектов по значениям критерия отбора будет достаточно В этом обработчике и должен быть реализован алгоритм
заполнения данных объекта исходя из данных объекта-основания.
велико. Если вы воспользуетесь конструктором ввода на основании, то он
Примеры работы с зависимыми объектами можно посмотреть в сгенерирует обработчик именно этого события.
разделах «Ввод на основании» на странице 493 и «Объекты, введенные Надо помнить, что событие «Обработка заполнения» возникает не
на основании» на странице 497. только при вводе на основании. Это событие будет возникать и при
вызове метода объекта Заполнить().
Как добавить строку в табличную часть документа? Таким образом, обработчик события «Обработка заполнения»
Табличная часть документа представляет собой коллекцию является стандартным местом, в котором реализуется заполнение
значений, элементами которой являются строки табличной части. данных объекта из данных объекта основания без учета того, откуда и
В версии 8.0 существуют общие принципы работы с коллекциями зачем вызывается это заполнение.
значений. Чтобы добавить элемент в коллекцию (в данном случае Поэтому обратите внимание на то, что в этом обработчике следует
строку в табличную часть документа), нужно вызвать у коллекции выполнять только заполнение данных, и не следует делать каких-либо
метод Добавить(). Метод возвращает объект - добавленный элемент дополнительных действий связанных с интерфейсом системы.
коллекции. В случае с табличной частью это будет строка табличной
Аналогичным образом выполняется копирование. При
части: копировании вызывается обработчик события объекта «При
копировании», в котором можно дополнить стандартное заполнение
СтрокаСостава = ДокументОбъект.Состав.Добавить(); данных выполняемое системой при копировании объекта. Этот
СтпокаСостава.Количество = 10; обработчик вызывается, как при интерактивном копировании, так и
при вызове метода Скопировать().
Кроме того, расширения форм объектов (форма документа, форма
Не могу найти метод Провести() у документа...?
элемента справочника и т.д.) предоставляют свойства
В версии 8.0 у документа нет метода Провести().
ПараметрОснование и ПараметрОбъектКопирования, которые
Это связано с тем, что проведение документа не выделяется теперь
заполняются системой при выполнении стандартных команд ввода на
в отдельное действие. В версии 8.0 проведение рассматривается как
основании и копирования. Значения этих свойств можно использовать
один из режимов записи документа. в обработчиках событий формы для определения того, что при
Таким образом, теперь документ может быть либо просто записан, открытии формы выполнялся ввод на основании или копирование.
либо записан с проведением, либо с отменой проведения. Режим Примеры обработки ввода одних объектов на основании других
записи документа задается параметром его метода Записать(): можно посмотреть в разделах «Ввод на основании» на странице 493 и
«Объекты, введенные на основании» на странице 497.
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
631
630
Приложения
Движения = РегистрыНакопления.ОстаткиМатериалов.СоздатьНаборЗаписей();
Движения.Отбор.Регистратор.Значение = Документы.ПриходнаяНакладная.
Пример вызова: Выбор = ВыбратьИзСпиека(СписокЗначений, ЭлементФормы,
НайтиПоНомеру( 1);
Движения.Прочитать();
НачальноеЗначение);
В 7.7 были общие реквизиты. В версии 8.0 их нет? Таблица (табличный документ)
Да. Было принято решение в версии 8.0 отказаться от общих
реквизитов документов. Вместе с этим в версии 8.0 нет и общего В 7.7 была процедура НоваяСтраница(). А что в 8.0?
журнала документов. Для того, чтобы в версии 8.0 вставить в табличный документ
Теперь, если у всех документов нужно иметь аналогичные разделитель страниц, следует использовать метод объекта
реквизиты, например, «Автор» и «Редактор», эти реквизиты следует ТабличныйДокумент
создать вручную у каждого документа. ВывестиГоризонтальныйРазделительСтраниц().
Следует заметить, что также появилась возможность вставлять в
При необходимости использовать аналог общего журнала версии табличный документ и вертикальные разделители страниц (метод
7.7, следует просто создать журнал документов, в котором будут ВывестиВертикальныйРазделительСтраниц()).
регистрироваться все существующие документы.
Однако в этом случае следует иметь в виду, что при интенсивной Как сохранить табличный документ в формате Excel? У меня
работе пользователей в файловом варианте информационной базы, ничего не получается...
высока вероятность возникновения коллизий. Добиться ее уменьшения В версии 8.0 для сохранения табличного документа в формате,
отличающемся от его исходного формата, следует использовать пункт
можно путем исключения из состава этого журнала документов,
меню Файл | Сохранить копию...
которые проводятся наиболее часто.
Команда меню Файл | Сохранить как... позволяет сохранять
табличный документ только в «родном» формате.
Вопросы при переходе с версии 7.7
Приложения
Версия 8.0
Запрос
В запросах версии 7.7 была опция «все вошедшие в запрос». Как
Общие вопросы
сделать то же самое в 8.0?
В версии 7.7 опция «все вошедшие в запрос» использовалась для Я указываю период (дату начала, дату окончания), но последний
день в него не попадает. Почему?
вывода в отчет всех значений одной из группировок запроса. Такая
Дело в том, что в версии 8.0 значения типа Дата включают в себя
необходимость могла возникнуть при создании, например, отчета об
время с точностью до секунд. По умолчанию, если время в явном виде
остатках на складах, в котором обязательно должны быть указаны все
не задается, оно устанавливается равным 00:00:00. Поэтому, если
склады, независимо от того, есть на них остатки товаров, или нет. нужно указать период по какую-то дату включительно, следует
В версии 8.0 для решения такой задачи следует использовать указывать конец суток, т.е. определенную дату со временем 23:59:59,
параметр «Группировки для значений группировок» методов либо использовать функцию КонецДня(), если время в явном виде не
Выбрать() результата запроса и выборки из результата запроса. Если в задается.
качестве этого параметра указать "Все", то будут выбраны все
В качестве примера можно посмотреть процедуру
значения этой группировки в запросе. Если же указать конкретную «ДействияФормыРейтингУслугСформировать» в модуле формы
вышестоящую группировку, то будут выбраны все значения отчета «РейтингУслуг» в разделе «Отчет Рейтинг услуг» на странице
группировки для текущих значений указанных вышестоящих 173.
группировок.
В качестве примера можно привести отчет по складским остаткам,
Преобразую число из 4 цифр в строку и получаю количество
сгруппированным по фирмам. В таком отчете данные по фирме будут символов в строке - 5. Это почему так?
выводиться с новой страницы, причем для каждой фирмы будет Дело в том, что в версии 8.0 получение строкового представления
сформирован свой состав колонок-складов в зависимости от того, на числа выполняется на основе региональных настроек, установленных
каких складах есть остатки по этой фирме. на компьютере.
Наряду с описанным выше параметром, для группировок типа Дата В случае, когда установлены стандартные региональные настройки
существует возможность указать в тексте запроса способ дополнения для России, при приведении числа к строке между группами разрядов
результата запроса значениями группировки в указанном интервале с чисел вставляется неразрывный пробел (Символы.НПП), например:
заданной периодичностью. Для этого в описании формирования
итогов используется ключевое слово ПЕРИОДАМИ. Год = 2004;
С помощью такой конструкции можно, например, сформировать СтроковоеПредставление = Строка(Год);
отчет о продажах по неделям, в котором будет отражена каждая // СтроковоеПредставление = "2 004"
// длина строки - 5 символов, включая неразрывный пробел
неделя, независимо от того, были ли продажи в эту неделю, или нет.
Вывод в отчет всех периодов может понадобиться также при
построении диаграмм, в которых необходимо обеспечить
непрерывность отображения периодов.
В качестве примера можно посмотреть отчет «Выручка мастеров» в
разделе «Отчет ВыручкаМастеров» на странице 183.
635
Приложения Вопросы при переходе с версии 7.7
Чтобы преобразовать число к строке без вставки символа- У меня есть реквизит составного типа, включающий ссылки на
разделителя групп (неразрывного пробела), нужно использовать два справочника. Когда я пытаюсь получить через точку
функцию Формат() с параметром «ЧГ» равным нулю: наименование справочника, система выдает ошибку. Почему?
В 1С:Предприятии 8.0 для реквизитов имеющих составной тип
Год = 2004; (боле одного типа) независимо от того какие типы в него включены,
СтроковоеПредставление = Формат(Год,"ЧГ = 0"); значением по умолчанию является значение Неопределено.
// СтроковоеПредставление = "2004" Поэтому выражение Реквизит.Наименование будет выдавать
// длина строки - 4 символа ошибку, если реквизиту «Реквизит» не присвоено значение ссылки на
один из двух справочников, выбранных в типе этого реквизита.
Чтобы изменить преобразование чисел к строке по умолчанию,
нужно для информационной базы установить региональные настройки Какие особенности имеют общие модули в 8.0?
(например, параметр «Группировка» установить в ноль). Для этого В общих модулях конфигурации могут использоваться только
следует воспользоваться командой меню процедуры и функции общих модулей.
Администрирование | Региональные настройки ИБ ... В них не могут использоваться процедуры, функции и переменные
Если стоит задача получения строкового представления текущего модуля приложения и модуля внешнегосоединения. Кроме того, в
года, можно воспользоваться встроенной функцией формат, указав в ее общих модулях допускается определение только процедур и функций
параметре соответствующую форматную строку: и не допускается определение переменных.
Таким образом, общие модули представляют собой набор
Формат(ТекущаяДата(), "ДФ = птг") доступных в конфигурации процедур и функций и не имеют
: хранимого состояния. Это позволяет использовать их не только в
| клиентском приложении и внешнем соединении, но и на сервере
1С:Предприятия.
Более подробную информацию можно найти на диске ИТС в статье
"Особенности форматирования значений". Чем отличается значение типа Неопределено и значение типа
Null?
Допускает ли версия 8.0 два сеанса работы для одного Значение типа Неопределено используется, прежде всего, как
пользователя одновременно? значение по умолчанию (незаданное значение) для полей с составным
Да, в версии 8.0 одновременно может быть запущено два и более типом. Например, если есть реквизит, который имеет составной тип,
сеансов работы с одним пользователем системы. Наличие такой включающий СправочникСсылка.Сотрудники и
возможности весьма полезно. Например, пользователь, может СправочникСсылка.Клиенты, то значением этого реквизита по
запустить выполнение длительной операции в одном сеансе и, умолчанию будет Неопределено. Также это значение используется и
запустив второй сеанс, продолжать работать с системой. в других случаях для обозначения неуказанного значения.
Значение типа Null используется при работе с таблицами
Что будет результатом вычитания двух значений типа Дата? прикладных объектов. Оно обозначает отсутствие значения поля в
В версии 8.0 значение типа Дата содержит как дату, так и время с выборке. Прежде всего, оно используется в результатах запросов
точностью до секунды. Поэтому результатом вычитания двух выполняющих левое или правое соединение. Поля невыбранных
значений типа Дата будет число - разница в секундах. записей таблиц участвующих в таких соединениях будут иметь
значение Null. Кроме того, значение типа Null будет иметь, например,
Для получения следующей даты нужно прибавить к дате
количество секунд в дате.
636
637
Вопросы при переходе с версии 7.7
Приложения
• запустить конфигуратор
• открыть меню
Администрирование | Настройка журнала регистрации...
• настроить параметры регистрируемых событий
639
638
[риложения
нажать «ОК».
Например, форма документа будет поддерживать
функциональность, ориентированную на редактирование документа,
В каком порядке обходятся элементы соответствия циклом Для если в качестве ее основного реквизита выбрано значение типа
каждого. ДокументОбъект.<имя>.
При использовании конструкции Для Каждого ... Из ... Цикл ... Таким образом, при выборе соответствующих типов реквизитов
КонецЦикла элементы соответствия обходятся в произвольном любая форма может использоваться для редактирования и просмотра
любых данных.
порядке.
При создании форм с помощью конструкторов в форме
Можно ли программно «выгонять» пользователей из размещаются реквизиты и элементы управления, в зависимости от ее
1С:Предприятия 8.0? назначения, выбранного в конструкторе, однако при необходимости
разработчик может реализовать в форме любую функциональность.
Да, можно.
Более подробную информацию можно найти в разделах «Данные и
Для этого следует использовать процедуру глобального контекста элементы управления» на странице 502 и «Механизм основных форм»
ПрекратитьРаботуСистемы(). Ее выполнение приведет к тому, что на странице 542.
работа системы будет завершена независимо от наличия модальных
диалогов, открытых редактируемых форм документов, справочников и
Выполняется ли автоматическое обновление списков в формах?
т.д. При этом не будут вызваны процедуры-обработчики событий
Да, выполняется, но не всегда.
завершения работы системы.
В 1С:Предприятии 8.0 автоматическое обновление списков в
формах по умолчанию выполняется, только в том случае, когда данные
Интерфейсные объекты изменяются в текущем сеансе в клиентском приложении.
Если пользователь хочет видеть в списках изменения, вносимые
Чем в 1С:Предприятии 8.0 отличаются формы справочников, другими пользователями, то ему необходимо нажимать кнопку
документов и других объектов? обновления в командной панели списка или установить режим
Механизм форм в 1С:Предприятии 8.0 позволяет в любой форме автоматического обновления списка с определенной периодичностью.
отображать и редактировать любые данные. Принадлежность форм в Этот режим устанавливается в окне настройки списка.
конфигурации к конкретным объектам метаданных необходима для Режим устанавливается для каждого списка независимо.
удобства организации структуры прикладного решения. To есть форма Рекомендуется устанавливать этот режим только для тех списков,
в конфигурации только "принадлежит" объекту метаданных и может которые действительно необходимо периодически обновлять. Это
использоваться в качестве основной формы для просмотра списка, позволить избежать лишней нагрузки на систему, особенно в
редактирования или выбора. Содержимое формы никак не многопользовательском режиме работы.
определяется тем, к какому объекту метаданных относится форма и
выбрана ли форма в качестве основной. Можно ли в формах списков устанавливать отбор и сортировку по
нескольким полям?
Функциональность формы определяется исключительно
реквизитами формы и связанными с ними элементами управления. В Во всех динамических списках программно можно устанавливать
большинстве случаев функциональность формы обеспечивается за отбор и сортировку по любым комбинациям полей. Пользователю по
умолчанию система предлагает набор доступных для установки отбора
счет выбора основного реквизита формы. Он определяет наличие
и сортировки полей, исходя из возможности выполнять отбор и
расширения формы и обеспечивает специфическое поведение формы
для конкретного прикладного объекта.
641
!ложения Вопросы при переходес версии 7.7
сортировку эффективно. Прежде всего, при этом учитывается наличие Рекомендуется создавать обработчики в модуле нажатием кнопки с
изображением лупы в соответствующем событии в палитре свойств. В
подходящих индексов. Разработчик может программно включить этом случае будет создан обработчик с необходимым составом
возможность настройки пользователем отбора и сортировки по любым параметров.
полям.
Следует учитывать, что при большом объеме информации в базе
Почему при активизации элемента управления не вызывается
данных установка отбора и сортировки по комбинации полей, для
автоматически выбор из списка, как это было в 7.7?
которых нет подходящих индексов, может привести к существенному В версии 8.0 появился новый режим ввода ссылочных значений
снижению производительности при просмотре списка. путем набора на клавиатуре первых символов кода, наименования или
Отбор и сортировка не могут выполняться по полям, имеющим тип номера требуемого объекта.
ХранилищеЗначения, и ОписаниеТипов. Такой режим позволяет существенно ускорить ввод информации.
Для полей, имеющих тип Строка неограниченной длины, отбор Чтобы этот режим мог эффективно использоваться, изменено типовое
может быть установлен только по условию «Содержит». поведение автоматического открытия списка выбора.
Для иерархических данных (справочников, планов счетов и планов Оно выполняется теперь не при активизации элемента управления,
видов характеристик) поле Родитель не используется в этих а при нажатии клавиши «Enter», если значение не заполнено. Таким
настройках, так как управляется табличным полем интерактивно при образом, после активизации элемента управления пользователь может
переходах по уровням и программно с помощью свойства либо ввести несколько первых символов и нажать «Enter» для
ТекущийРодитель. выполнения поиска по символам, либо сразу нажать «Enter» чтобы
В списке журнала документов отбор может устанавливаться по инициировать выбор из списка. Такое решение позволяет эффективно
дате и графам журнала, а также по виду документа. Однако следует сочетать обе возможности.
учитывать, что отбор по графам может весьма существенно снижать Для включения режима выбора незаполненного значения нужно
производительность просмотра. установить свойство АвтоВыборНезаполненного. Кроме того, с
Порядок в списке журнала документов может устанавливаться помощью свойства РежимВыбораНезаполненного можно
установить вариант открытия списка при активизации элемента
только по дате. управления.
Однако это рекомендуется делать только в отдельных случаях, так
В описании событий элементов управления не указан параметр
как открытие списка при активизации поля ввода не позволит
Элемент. использовать режим ввода значения по первым буквам.
В обработчиках событий элементов управления формы первым
параметром всегда является параметр «Элемент». В нем, в обработчик Почему поиск по первым символам в списке справочника
передается элемент управления, вызвавший конкретное событие. Этот работает только по колонке Наименование?
параметр добавляется формой для всех обработчиков элементов Это не так.
управления, и он не описывается в документации для конкретных
В динамических списках 1С:Предприятия 8.0 поиск по первым
событий.
символам выполняется по той колонке, по которой в данный момент
Наличие параметра «Элемент» позволяет реализовывать один упорядочен список (установлена сортировка), независимо от того
обработчик для событий нескольких элементов управления и какая колонка является текущей.
анализировать, какой элемент вызвал событие. В частности, это
необходимо, если элементы управления создаются средствами
встроенного языка.
642 643
риложения Вопросы при переходесверсин 7.7
645
Приложения Вопросы при переходе свепсии 7 7
При обращении к спискам регистров свойство ТекущаяСтрока Для получения более подробной информации можно посмотреть
будет выдавать уже ключ записи регистра, который состоит из главу «Объект конфигурации регистр сведений» на странице 120, а
нескольких полей. также статьи на диске ИТС: "Периодические регистры сведений" и
Таким образом, свойство ТекущаяСтрока для всех типов данных "Проектирование структуры периодических регистров сведений".
выдает значение, идентифицирующее текущую строку.
Почему в 8.0 нет возможности интерактивно открыть форму
Для чего служит флажок «Автопорядок по коду» у плана счетов? элемента справочника только для просмотра?
В версии 8.0 при открытии формы объекта (документа, элемента
Свойство «Автопорядок по коду» используется для того, чтобы
справочника и т.д.) не выполняется (как раньше) блокировка объекта
указать системе, что упорядочивание по полю «Порядок» должно
от изменения другими пользователями. Поэтому два пользователя
всегда подставляться в тех случаях, когда пользователь или
могут, например, открыть один и тот же документ одновременно.
разработчик выбирает упорядочивание по коду. Его нужно Блокировка устанавливается при начале редактирования данных
использовать, прежде всего, тогда, когда с точки зрения пользователя объекта в форме. Если объект уже заблокирован другим
нужно упорядочивать план счетов по коду с учетом разделителей кода пользователем, то при попытке начала редактирования будет выдано
счета. Например, если упорядочивать по коду счета, то счета будут соответствующее сообщение.
располагаться так:
Таким образом, нет необходимости в специальном режиме
«10.11» открытия форм объектов для просмотра. Форма объекта может быть
«10.2» открыта из любого режима программы (из списка, из отчета в качестве
Это правильно с точки зрения сортировки строк, но не расшифровки и т.д.) без указания того, предполагается ли выполнять
соответствует логическому смыслу кодов. редактирование или нет.
Но если заданы значения поля «Порядок»: «10.11» и «10. 2» и
установлено свойство «Автопорядок по коду», то при выборе
упорядочивания по коду пользователь будет, фактически, получать
порядок, учитывающий разделители:
«10.2»
«10.11».
Если свойство не установить, то нужно будет в явном виде
выбирать упорядочивание по полю «Порядок».
646 647
Универсальные коллекции значений
Глава 2. Приемы разработки, Использование объекта Структура - процедура «РозничнаяЦена»
перечисленные в книге в общем модуле «РаботаСоСправочниками» в разделе «Создание
функции РозничнаяЦена()» на странице 124.
Использование объекта Массив - список документа
Встроенный язык «ОказаниеУслуги» в разделе «Изменение данных табличного поля
путем установки типа значения» на странице 520.
Использование функции КонецДня() - процедура
«РейтингУслуг» в модуле формы отчета «РейтингУслуг» в разделе Интерфейсные объекты
«Отчет Рейтинг услуг» на странице 173.
Вычисляемое значение в поле ввода строки табличного поля -
процедура «МатериалыКоличествоПриИзменении» в модуле формы
Глобальный контекст документа «ПриходнаяНакладная» в разделе «Создание процедуры
Сериализация объектов 1С:Предприятия - процедуры обработки события в модуле формы» на странице 74.
«ЗаписатьСообщениеСИзменениями» Создание обработчиков событий элементов управления -
процедура «МатериалыКоличествоПриИзменении» в модуле формы
и документа «ПриходнаяНакладная» в разделе «Создание процедуры
«ПрочитатьСообщениеСИзменениями» в модуле узла плана обмена обработки события в модуле формы» на странице 74.
«ОбменСФилиалами» в разделе «Создание процедуры записи данных» Обработка нескольких событий одной процедурой - модуль
на странице 407. формы документа «ПриходнаяНакладная» в разделе «Создание
процедуры обработки события в общем модуле» на странице 77.
Использование макета для вывода в табличный документ -
Общие объекты процедура «РеестрДокументовОказаниеУслуги» в модуле формы
Использование объекта ПостроительОтчета - модуль отчета отчета «РеестрДокументовОказаниеУслуги» в разделе «Отчет
«Универсальный» в разделе «Создание универсального отчета» на РеестрДокументовОказаниеУслуги» на странице 166.
странице 211. Управление группировками при выводе в табличный документ
процедура «ВыручкаМастеров» в модуле формы отчета
Чтение и запись XML документов - процедура «ВыручкаМастеров» в разделе «Отчет ВыручкаМастеров» на странице
«ЗаписатьСообщениеСИзменениями» в модуле узла плана обмена 183.
«ОбменСФилиалами» в разделе «Создание процедуры записи данных» Работа с элементом управления Список выбора - модуль формы
на странице 407. отчета «РейтингКлиентов» в разделе «Создание отчета
Работа с объектом Файл - процедуры РейтингКлиентов» на странице 198.
«ЗаписатьСообщениеСИзменениями» Заполнение диаграммы данными - процедура «Сформировать» в
модуле формы отчета «РейтингКлиентов» в разделе «Создание отчета
и РейтингКлиентов» на странице 198.
«ПрочитатьСообщениеСИзменениями» в модуле узла плана обмена
«ОбменСФилиалами» в разделе «Создание процедуры записи данных»
на странице 407.
Работа с объектом ДиалогВыбораФайла - процедуры модуля
формы обработки «ОбменСОтделениями» в разделе «Программный
обмен в распределенной информационной базе» на странице 433.
Использование объекта ОписаниеТипов - список документа
«ОказаниеУслуги» в разделе «Изменение данных табличного поля
путем установки типа значения» на странице 520.
649
Приемы разработки, перечисленные в
650 651
Приемы разработки, перечисленные в книге
653
652
Приемы разработки, перечисленные в книге
Как выбрать данные из нескольких таблиц - процедура Обход многоуровневых группировок в результате запроса -
«РейтингУслуг» в модуле формы отчета «РейтингУслуг» в разделе процедура «ВыручкаМастеров» в модуле формы отчета
«Отчет Рейтинг услуг» на странице 173. «ВыручкаМастеров» в разделе «Отчет ВыручкаМастеров» на странице
Как выбрать данные, входящие в указанный период - 183.
процедура «РейтингУслуг» в модуле формы отчета «РейтингУслуг» в Получение итогов по всем датам в выбранном периоде -
разделе «Отчет Рейтинг услуг» на странице 173. процедура «ВыручкаМастеров» в модуле формы отчета
Получение данных регистра накопления периодами - процедура «ВыручкаМастеров» в разделе «Отчет ВыручкаМастеров» на странице
«ВыручкаМастеров» в модуле формы отчета «ВыручкаМастеров» в 183.
разделе «Отчет ВыручкаМастеров» на странице 183. Вычисляемое поле в результате запроса - смотри процедуру
Вычисляемое поле в источнике запроса - процедура «Сформировать» в модуле формы отчета «РейтингКлиентов» в
«Сформировать» в модуле формы отчета «РейтингКлиентов» в разделе разделе «Создание отчета РейтингКлиентов» на странице 198.
«Создание отчета РейтингКлиентов» на странице 198. Выгрузка результата запроса в таблицу значений - смотри
Передача списка значений в параметры виртуальной таблицы модуль формы отчета «РейтингКлиентов» в разделе «Создание отчета
- процедура «ОбработкаПроведения» документа «ОказаниеУслуги» в РейтингКлиентов» на странице198.
разделе «Оптимизация документа ОказаниеУслуги» на странице 238, и Выгрузка результата запроса в список значений - смотри
процедура «ОстаткиМатериаловПоСвойствам» в форме отчета обработчик события «ОбработкаПроведения» документа
«ОстаткиМатериаловПоСвойствам» в разделе «Отчет «НачисленияСотрудникам» в разделе «Создание процедуры расчета
ОстаткиМатериаловПоСвойствам» на странице 277. записей регистра Начисления» на странице 349.
Передача результата запроса в параметры виртуальной
таблицы - процедура «ОбработкаПроведения» документа Прикладные объекты
«ОказаниеУслуги» в разделе «Оптимизация документа Обращение к табличной части и данным строки табличной
ОказаниеУслуги» на странице 238. части в форме документа - процедура
Динамическое формирование текста запроса - процедура «МатериалыКоличествоПриИзменении» в модуле формы документа
«ОстаткиМатериаловПоСвойствам» в форме отчета «ПриходнаяНакладная» в разделе «Создание процедуры обработки
события в модуле формы» на странице 74.
«ОстаткиМатериаловПоСвойствам» в разделе «Отчет
ОстаткиМатериаловПоСвойствам» на странице 277. Обход табличной части документа - процедура
Вывод результата запроса в табличный документ - процедура «ОбработкаПроведения» в модуле документа «Приходная накладная»
в разделе «Создание движений документа ПриходнаяНакладная» на
«РеестрДокументовОказаниеУслуги» в модуле формы отчета
странице 89.
«РеестрДокументовОказаниеУслуги» в разделе «Отчет
РеестрДокументовОказаниеУслуги» на странице 166. Формирование и запись движений документа в модуле
Получение промежуточных итогов - процедура документа - процедура «ОбработкаПроведения» в модуле документа
«Приходная накладная» в разделе «Создание движений документа
«ВыручкаМастеров» в модуле формы отчета «ВыручкаМастеров» в
ПриходнаяНакладная» на странице 89.
разделе «Отчет ВыручкаМастеров» на странице 183.
Формирование движений по регистру накопления остатков -
Управление порядком вывода итогов в результате запроса -
процедура «ОбработкаПроведения» в модуле документа «Приходная
процедура «ВыручкаМастеров» в модуле формы отчета накладная» в разделе «Создание движений документа
«ВыручкаМастеров» в разделе «Отчет ВыручкаМастеров» на странице ПриходнаяНакладная» на странице 89.
183.
Приложения