<<

стр. 2
(всего 11)

СОДЕРЖАНИЕ

>>

Ф акт проведения документа и необходимость поддержания
актуальной последовательности документов на оси событий Для тех, кто работал с версией 7.7
порождают два различных способа проведения документов: В 1С:Предприятии 8.0 нет понятия точки актуальности,
оперативное и неоперативное проведение. связанной с расчетом регистров и проведением документов. Теперь
регистры актуальны на последнюю дату, которой в них внесены
С оперативным проведением документов связано понятие
записи.
оперативной отметки времени.
Средствами встроенного языка возможно определение текущего
Оперативная отметка времени представляет собой значение типа
режима проведения документа (система передает его одним из
Дата, которое формирует система. Оперативная отметка времени
параметров в обработчик события ОбработкаПроведения()). В
создается системой каждый раз при оперативном проведении
зависимости от этого могут существовать различные алгоритмы
документа. Ее значение формируется исходя из текущего времени и
проведения документа в том или ином режиме.
последней созданной оперативной отметки.
Если последняя оперативная отметка меньше текущего времени, в
качестве новой оперативной отметки принимается текущее время.
Если последняя оперативная отметка равна или больше текущего
времени, в качестве новой оперативной отметки принимается
значение, на одну секунду большее, чем старая оперативная отметка
времени.
Таким образом, если у объекта конфигурации Документ
установлено свойство оперативного проведения, последовательность
действий системы будет следующей: при создании нового документа
система будет устанавливать ему текущую дату и «нулевое» время.
При проведении такого документа (с текущей датой), система
установит в качестве даты документа оперативную отметку времени.
Если отменить проведение документа и затем провести его снова (не
изменяя даты), система установит документу новую оперативную
отметку времени.
Если же попытаться перепровести документ, то будет выдан запрос
о виде проведения (оперативное или нет).
В случае оперативного проведения система установит новую
оперативную отметку времени, а при неоперативном проведении
время документа будет сохранено прежним.
При попытке проведения (или перепроведения) оперативно
проводимого документа с датой, отличающейся от текущей, будет
выдано сообщение о том, что оперативное проведение невозможно и




65
Документ
Быстрая разработка прикладных решений


Создание документа ПриходнаяНакладная
Типообразующие объекты

П
П
осле того, как мы познакомились с объектом конфигурации
режде чем мы приступим к практическому созданию
Документ, создадим несколько таких объектов, чтобы иметь
документов, необходимо сделать отступление о том, какие
возможность фиксировать события, происходящие в нашем
типы данных могут использоваться в системе
OOO «На все руки мастер».
1С: Предприятие.
Одними из самых популярных услуг нашего предприятия является
В предыдущей главе, когда мы создавали реквизиты справочников
ремонт телевизоров и установка стиральных машин. И в том, и в
или табличных частей, мы всегда указывали тип значения, которое
другом случае требуются некоторые материалы, которые расходуются
может принимать этот реквизит. Это были примитивные типы данных
в процессе оказания этих услуг. Поэтому двумя важнейшими
- Число, Строка, Дата и Булево. Примитивные типы данных
событиями в хозяйственной жизни нашей организации будут являться
изначально определены в системе и их набор ограничен.
поступление материалов и оказание услуг.
Наряду с такими изначально определенными в любой
Для отражения этих событий в базе данных мы создадим два
конфигурации типами, могут существовать типы данных,
документа: «Приходная накладная» и «Оказание услуги». Документ
определяемые только конкретной конфигурацией. Такие типы
«Приходная накладная» будет фиксировать факт поступления в нашу
образуют сами объекты конфигурации в момент их создания в
организацию необходимых материалов, а документ «Оказание услуги»
конфигураторе.
будет фиксировать оказание услуг и расход материалов, которые
Например, после того, как мы создали объект конфигурации
используются при оказании этих услуг.
Справочник «Склады», сразу же появилось несколько новых типов
Создадим новый объект конфигурации Документ. Зададим имя
данных, связанных с этим справочником. Среди них, например,
документа - «ПриходнаяНакладная». Нажмем «Далее».
СправочникСсылка.Склады. И если теперь мы укажем какому-либо
Создадим реквизит документа с именем «Склад» и типом
реквизиту этот тип данных, то сможем хранить в нем ссылку на
СправочникСсылка.Склады:
конкретный объект справочника «Склады».
Такие объекты конфигурации, которые могут образовывать новые
типы данных, называются типообразующими.
Это небольшое отступление было необходимо потому, что уже при
создании первого документа мы столкнемся с использованием типа
данных, доступного благодаря объекту конфигурации Справочник
«Склады».




67
66
Быстрая разработка прикладных решений
Документ

После этого добавим табличную часть с именем «Материалы» и Пока в нашей базе данных нет ни одного документа «Приходная
создадим у нее четыре реквизита: накладная», поэтому создадим новый документ (создать новый
документ можно при помощи пункта меню Действия | Добавить,
• «Материал» с типом СправочникСсылка.Номенклатура,
соответствующей иконки или клавишей «Insert»).
• «Количество» с типом Число, длиной 15, точностью 3,
неотрицательное,
• «Цена» с типом Число, длиной 15, точностью 2, Добавим новый документ при помощи
неотрицательное, меню или иконки
• «Сумма» с типом Число, длиной 15, точностью 2,
неотрицательное.


Создадим табличную часть и опишем ее реквизиты.


Система автоматически присвоит номер новому документу и нам
останется только заполнить табличную часть. Заполним ее
материалами для ремонта телевизоров так, как показано на рисунке:




Запустим 1С: Предприятие в режиме отладки и протестируем
получившийся результат. В отрывшемся окне программы выполним
Нажмем «ОК».
команду Операции | Документы..., выберем документ «Приходная
накладная». Система откроет одну из основных форм документа -
основную форму списка.




68
69
Документ
Быстрая разработка прикладных решений


Аналогичным образом мы создадим второй документ, который <*^ Узнай больше!
будет приходовать следующие материалы для установки стиральных О том, для чего предназначены основные формы объектов
машин: конфигурации, можно прочитать в главе «Механизм основных форм»
на странице 542.

Вернемся в конфигуратор и откроем окно редактирования объекта
конфигурации «ПриходнаяНакладная». В этом окне нас интересует
закладка «Формы». Как мы видим, ни одна из основных форм
документа пока не задана.
Для того чтобы создать форму документа, нажмем на символ лупы
в поле ввода:


Создадим форму документа...


Наверняка вы обратили внимание на то, что при заполнении
документа приходится вводить сумму в каждой строке. Это неудобно,
и возникает естественное желание автоматизировать работу документа
так, чтобы сумма вычислялась автоматически каждый раз при
изменении цены или количества материалов в строке.
Это совсем не сложно и для этого нам потребуется сначала создать
собственную форму документа, а затем воспользоваться
возможностями встроенного языка.

Создание формы документа


П режде всего, следует заметить, что до сих пор мы
использовали предопределенные формы объектов, которые система
1С:Предприятие создавала для нас сама «по умолчанию».
Теперь же у нас возникла необходимость слегка изменить логику
работы формы документа, а значит, нам придется создать свою
собственную форму документа «ПриходнаяНакладная» для того,
чтобы в ней мы могли описать тот алгоритм, который нам нужен.




71
70
Быстрая разработка прикладных решений
Документ

Система вызовет еще один полезный инструмент разработчика - Обратите внимание, что в дереве объектов конфигурации у объекта
конструктор форм. Этот инструмент также построен по принципу конфигурации Документ «ПриходнаяНакладная» появилась форма
«мастеров» - ввод данных в определенной последовательности и «ФормаДокумента», а на экране открылось окно редактора форм,
передвижение кнопками «Далее» и «Назад». содержащее эту форму:


Новая форма документа и окно редактора форм




Сразу нажмем кнопку «Готово», согласившись тем самым со всем, Как видите, форма документа «ПриходнаяНакладная» содержит
что нам предложила система. большое количество всевозможных полей. Эти поля называются
элементами управления. Они имеют разное назначение и разное
поведение, которое соответствует их назначению. Однако все они
служат для того, чтобы отображать информацию, хранящуюся в базе
данных и организовывать интерактивную работу с этой информацией.




72
73
Документ
Быстрая разработка прикладных решений

Среди событий, связанных с полем ввода, найдите событие «При
Сейчас мы обратим свое внимание только на те элементы
изменении». Это событие возникает после изменения значения поля
управления, которые нас интересуют - это три поля ввода,
ввода.
расположенные в колонках «Количество», «Цена» и «Сумма»:
Щелкните по кнопке с лупой в конце поля ввода, и система создаст
заготовку процедуры обработчика этого события в модуле нашей
формы.
Интересующие нас элементы управления.



Модуль - это «хранилище» для текста программы на встроенном
языке. В конфигурации существует большое количество модулей,
которые расположены в различных ее точках. Они могут
принадлежать некоторым объектам конфигурации (например,
формам), а могут существовать сами по себе (принадлежать всей
конфигурации в целом). Текст программы, содержащийся в модулях,
будет использоваться платформой в заранее известные моменты
работы системы 1С:Предприятие.
Мы хотим, чтобы каждый раз, когда меняется значение в поле
«Количество» или в поле «Цена», в поле «Сумма» автоматически
устанавливалось значение равное Количество*Цена. Очевидно, что
для этого нужно написать на встроенном языке команду похожую на
Сумма = Количество*Цена, которая будет выполняться при изменении
значения поля «Количество» или «Цена». Но как «поймать» эти
моменты изменения?

Создание процедуры обработки события в модуле
формы

Щ елкните правой кнопкой мыши на поле ввода в колонке
«Количество» и откройте для него палитру свойств (пункт Выберем событие «При
контекстного меню Свойства). Прокрутите список до изменении» и система создаст
конца, и вы обнаружите перечень событий, которые могут быть заготовку процедуры в модуле
формы..^
связаны с этим полем ввода.
С большинством элементов управления связаны различные
события, и именно с их помощью разработчик может влиять на ход
работы программы.

<*" Узнай больше!
Подробнее об обработчиках событий можно прочитать в главе
«Обработчики событий» на странице 546.
5ыстрая разработка прикладных решений Документ


В модуль формы добавим следующий текст: некотором «общедоступном» месте, чтобы разные документы,
имеющие аналогичные реквизиты табличной части, могли
использовать этот алгоритм.
ПроцедураМатериалыКоличествоПриИзменении(Элемент)
СтрокаТабличнойЧасти = ЭлементыФормы.Материалы Для описания таких «общедоступных» мест служат объекты
.ТекущиеДанные; СтрокаТабличнойЧасти.Сумма =
конфигурации Общий модуль, расположенные в ветке
СтрокаТабличнойЧасти.Количество
Общие | Общие модули. Процедуры и функции, содержащиеся в
* СтрокаТабличнойЧасти.Цена;
этих модулях, могут быть доступны для любых объектов
КонецПроцедуры _____________________________________________
конфигурации.
Объясним назначение этих строк.
Создание процедуры обработки события в общем
В первой строке мы обращаемся к программному объекту
модуле
ЭлементыФормы. Этот объект является коллекцией значений,


Д
содержащей все элементы управления, расположенные на нашей ля того чтобы алгоритм, выполняемый при обработке события,
форме. Каждый элемент управления формы можно получить, указав был доступен для разных документов, мы создадим общий
модуль и перенесем в него нашу процедуру расчета суммы. А в
его имя в качестве свойства объекта ЭлементыФормы. В данном
документе просто оставим вызовы этой процедуры из общего
случае мы обращаемся к элементу управления с именем «Материалы»
модуля.
(ЭлементыФормы.Материалы).
Создадим объект конфигурации Общий модуль в ветке
Этот элемент управления отображает строки табличной части
Общие | Общие модули и назовем его «РаботаСДокументами». Он
нашего документа. Получить ту строку, в которой в настоящее время
будет содержать следующий текст:
осуществляется редактирование, можно при помощи свойства
программного объекта ТабличноеПоле - ТекущиеДанные. Таким
образом, в результате выполнения первой строки переменная Процедура РассчитатьСумлц^СтрокаТабличнойЧасти) Экспорт
СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество
СтрокаТабличнойЧасти будет содержать объект
* СтрокаТабличнойЧасти.Цена;
ДокументТабличнаяЧастьСтрока.ПриходнаяНакладная.Матери КонецПроцедуры
алы, в котором находятся редактируемые данные.
Во второй строке вычисляется сумма как произведение количества Ключевое слово Экспорт в конце оператора «Процедура» как раз
указывает на то, что эта процедура может быть доступна из других
и цены. Объект ДокументТабличнаяЧастьСтрока.<имя> позволяет
программных модулей.
обратиться к данным конкретной колонки, указав имя колонки в
качестве свойства объекта (например, Затем в модуле нашей формы изменим текст нашего обработчика:
СтрокаТабличнойЧасти.Количество).
Теперь посмотрим, как это работает. В окне программы откроем Процедура МатериалыКоличествоПриИзменении(Элемент)
СтрокаТабличнойЧасти = ЭлементыФормы.Материалы
список документов «ПриходнаяНакладная» и откроем любой из двух
.ТекущиеДанные;
созданных нами документов. Если теперь вы поменяете количество в РассчитатьСумму(СтрокаТабличнойЧасти);
любой строке документа, то сумма в строке будет пересчитана КонецПроцедуры
автоматически.
Замечательно. Но теперь хотелось бы и для поля «Цена» сделать то Таким образом, теперь вместо непосредственного расчета суммы
же самое. А если заглянуть вперед, то мы увидим, что подобное мы будем вызывать процедуру из общего модуля, и передавать ей в
автоматическое заполнение поля «Сумма» может нам понадобиться и качестве параметра нужную нам строку табличной части.
в других документах. Поэтому лучше будет поместить расчет суммы в


77
Документ
Быстрая разработка прикладных решений


Проверим, как это работает, и убедимся, что ничего не изменилось.



т
Создание документа ОказаниеУслуги
Теперь осталось и для поля «Цена» установить такой же
еперь мы аналогичным образом создадим второй документ,
обработчик. Так как однажды мы уже написали в модуле формы
необходимый нам - «ОказаниеУслуги». Для этого потребуется
нужную нам процедуру, то мы просто могли бы сопоставить ее также
выполнить следующие действия:
и другому событию другого элемента управления, расположенного в
форме. Однако стандарты разработки конфигураций фирмы «1С» не
допускают такого решения.
создать новый объект конфигурации Документ
«ОказаниеУслуги» с реквизитами:
«" Узнай больше!
Согласно стандартам разработки фирмы «1С», у каждого
• «Склад», тип СправочникСсылка.Склады,
события должен быть свой обработчик. Если одинаковые действия
• «Клиент», тип СправочникСсылка.Клиенты,
должны выполняться при изменении разных элементов управления
• «Мастер», тип СправочникСсылка.Сотрудники,
(например, при нажатии нескольких кнопок), то в этом случае
следует поступать следующим образом:
документа
создать табличную часть этого
- создается отдельная процедура (функция), выполняющая
«ПереченьНоменклатуры» с реквизитами:
необходимые действия;
- для каждого элемента управления создается отдельный
• «Номенклатура», тип
обработчик с именем, назначаемым no умолчанию;
СправочникСсылка.Номенклатура,
- из каждого обработчика вызывается требуемая процедура • «Количество», тип Число, длина 15, точность 3,
(функция). неотрицательное,
• «Цена», тип Число, длина 15, точность 2,
Поэтому мы создадим обработчик события «При изменении» для неотрицательное,
поля ввода, которое расположено в колонке «Цена» и повторим в нем
• «Сумма», тип Число, длина 15, точность 2,
вызов процедуры «РассчитатьСумму» из общего модуля: неотрицательное,

ПроцедураМатериалыЦенаПриИзменении(Элемент)
• создать основную форму документа,
СтрокаТабличнойЧасти = ЭлементыФормы.Материалы
• для полей ввода колонок «Количество» и «Цена» создать
.ТекущиеДанные;
обработчик события «ПриИзменении», в котором вызывать
РассчитатьСумму(СтрокаТабличнойЧасти);
КоненПроцедуры процедуру «РассчитатьСумму» из общего модуля
«РаботаСДокументами».
Запустим 1С:Предприятие в режиме отладки и убедимся, что
теперь сумма в строках табличной части документов
«ПриходнаяНакладная» пересчитывается как при изменении
количества, так и при изменении цены.




79
78
Быстрая разработка прикладных решений
Документ

В результате документ «ОказаниеУслуги» будет выглядеть
Что нового мы узнали
следующим образом:




- для чего предназначен объект конфигурации Документ -
какими характерными особенностями обладает документ -
для чего предназначены реквизиты и табличные части
документа
- какие существуют основные формы документа - что
такое проведение документа - чем отличается оперативное
проведение документа от
неоперативного
После того, как эти действия будут выполнены, запустим
1С:Предприятие в режиме отладки и убедимся, что при вводе цены и - что такое оперативная отметка времени - как создать
количества в табличную часть документа «ОказаниеУслуги» сумма
объект конфигурации Документ и описать его
пересчитывается по нашему алгоритму.
основную структуру
- как создать новый документ и заполнить его данными -
как создать собственную форму документа - что такое
конструктор форм - что такое элементы управления -
что такое события и с чем они связаны - что такое
обработчик события и как его создать - что такое модуль
и для чего он нужен - зачем нужны общие модули
- как сделать процедуру доступной в разных модулях -
как назначить обработчик события - что такое
типообразующие объекты




80
Регистр накопления



Зачем нужен регистр накопления?
Глава 4. Регистр накопления

И
так, мы с вами подошли к одному из главных моментов
В этой главе мы познакомимся с объектом конфигурации Регистр
разработки любой конфигурации - созданию механизма учета
накопления. Вы узнаете, для чего используется этот объект, какой
накопления данных.
структурой он обладает и каковы его отличительные особенности.
Казалось бы, что все необходимое мы с вами уже
В заключение главы мы создадим с вами один из регистров
создали: у нас есть что расходовать и приходовать (справочники) и у
накопления, который будет использоваться в нашей конфигурации.
нас есть чем расходовать и приходовать (документы). Осталось
только построить несколько отчетов и автоматизация OOO «На все
руки мастер» будет закончена.
Однако это не так.
Во-первых, путем анализа документов можно, конечно, получить
требуемые нам выходные данные, но представьте, что завтра OOO «На
все руки мастер» решит немного изменить свои бизнес-процессы и нам
потребуется ввести в конфигурацию еще один документ (или
несколько документов!).
Например, сейчас мы полагаем, что товары поступают в OOO и
затем расходуются. Руководство захотело усилить материальный
контроль и решило приходовать товары на основной склад
организации и затем выдавать их материально ответственным лицам.
В этом случае нам придется добавить в конфигурацию еще один
документ, который будет фиксировать перемещение материалов
между основным складом и материально ответственными лицами. И
очевидно, нам придется переработать все отчеты, которые были нами
созданы к этому моменту, с тем, чтобы они учитывали изменения,
вносимые новым документом. А представьте, если в нашей
конфигурации не два, а двадцать документов?!
Во-вторых, отчеты, анализирующие документы, будут работать
довольно медленно, что будет вызывать раздражение пользователей и
недовольство руководителей.
Поэтому в системе 1С:Предприятие есть несколько объектов
конфигурации, которые позволяют создавать в базе данных структуры,
предназначенные для накопления информации в удобном для
последующего анализа виде.




82 83
Быстрая разработка прикладных решений Регистр накопления


Использование таких «хранилищ» данных позволяет нам с одной
Объект конфигурации Регистр накопления
стороны накапливать в них данные, поставляемые различными


О
документами (или другими объектами базы данных), а с другой бъект конфигурации Регистр накопления является
стороны легко создавать нужные нам отчеты или использовать эти прикладным объектом и предназначен для описания
данные в алгоритмах работы конфигурации. структуры накопления данных. На основе объекта
конфигурации Регистр накопления платформа создает в базе данных
информационную структуру, в которой будут накапливаться данные,
«поставляемые» различными объектами базы данных. Эти данные
будут храниться в регистре в виде отдельных записей, каждая из
которых имеет одинаковую, заданную в конфигураторе, структуру.
Отличительной особенностью регистра накопления является то, что
он не предназначен для интерактивного редактирования
пользователем. Разработчик может, при необходимости, предоставить
пользователю возможность редактировать регистр накопления, но
предназначение регистра накопления заключается в том, чтобы его
модификация производилась на основе алгоритмов работы других
объектов базы данных (не обязательно документов, как в версии 7.7), а
не в результате непосредственных действий пользователя.

Для тех, кто работал с версией 7.7
В конфигурации существует несколько объектов, называемых Движения документа no регистру накопления могут быть теперь
регистрами, для описания подобных «хранилищ». Сейчас мы с разными датами. Например, документ «План продаж» может
рассмотрим один из них. внести в регистр накопления записи о предполагаемых продажах
компании несколькими разными датами.

Основным назначением регистра накопления является накопление
числовой информации в разрезе нескольких измерений, которые
описываются разработчиком в соответствующем объекте
конфигурации Регистр накопления и являются подчиненными
объектами конфигурации.
Виды числовой информации, накапливаемой регистром
накопления, называются ресурсами и также являются подчиненными
объектами и описываются в конфигураторе.
Например, регистр накопления может накапливать информацию о
количестве и сумме товаров на складах. В этом случае он будет иметь
измерения «Товар» и «Склад», и ресурсы «Количество» и «Сумма».
Изменение состояния регистра накопления происходит, как
правило, при проведении документа, и заключается в том, что в

84 85
Быстрая разработка прикладных решений Регистр накопления

регистр добавляется некоторое количество записей. Каждая запись
Создание регистра накопления
содержит значения измерений, значения приращений ресурсов, ссылку
на документ, который вызвал эти изменения (регистратор) и
ОстаткиМатериалов
«направление» приращения (приход или расход). Такой набор записей


Т
называется движениями регистра накопления. Каждому движению еперь, когда мы знаем, для чего предназначены регистры
регистра накопления всегда должен соответствовать регистратор. накопления, посмотрим, как можно их использовать в нашем
примере.
Кроме того, регистр накопления может хранить дополнительную
информацию, описывающую каждое движение. Набор такой Прежде всего, нас интересует информация о том,
дополнительной информации задается разработчиком при помощи сколько и каких материалов есть у нас на складах. Для накопления
реквизитов объекта конфигурации Регистр накопления. такой информации мы создадим регистр «ОстаткиМатериалов».
Откроем в конфигураторе нашу учебную конфигурацию и
создадим новый объект конфигурации Регистр накопления. Зададим
<*" Узнай больше!
имя регистра - «ОстаткиМатериалов». Нажмем «Далее» и перейдем к
О структуре объектов встроенного языка, предназначенных для
созданию структуры регистра.
работы с регистрами накопления можно прочитать в главе
«Регистры накопления» на странице 599. Создадим измерения регистра:
«Материал», с типом
СправочникСсылка.Номенклатура,
«Склад», с типом СправочникСсылка.Склады.
Затем создадим ресурс «Количество» с длиной 15 и точностью 3.
В результате этих действий регистр «ОстаткиМатериалов» должен
иметь следующий вид:




Если вы сейчас попытаетесь запустить 1С:Предприятие в режиме
отладки, то система выдаст сообщение об ошибке:
«РегистрНакопления.ОстаткиМатериалов: Ни один из документов не
является регистратором для регистра». Это сообщение еще раз


86 87
Регистр накопления
Быстрая разработка прикладных решений


Создание движений документа
подтверждает тот факт, что назначение регистра накопления в том,
чтобыаккумулировать данные, поставляемые различными
ПриходнаяНакладная
документами.


Д вижения документа - это записи в регистрах, которые
создаются в процессе проведения документа и отражают
изменения, производимые документом. Откроем окно
редактирования объекта конфигурации Документ
«ПриходнаяНакладная».
Перейдем на закладку «Движения» и в списке регистров
конфигурации отметим регистр накопления «ОстаткиМатериалов»:


Отметим регистр накопления и воспользуемся
конструктором движений...




Обратите внимание, что сразу после отметки выбранного регистра
становится доступной кнопка «Конструктор движений». Этим
конструктором мы и воспользуемся.
Конструктор устроен просто. В списке «Регистры» перечислены
регистры, в которых документ может создавать движения. В нашем
случае там пока один регистр «ОстаткиМатериалов».
В списке «Реквизиты документа» должны находиться исходные
данные для создания движений. А в таблице «Поле - Выражение»


89
Быстрая разработка прикладных решений Регистр накопления

должны быть заданы формулы, по которым будут вычисляться В нижнем окне сформируется соответствие полей и выражений.
значения измерений и реквизитов регистра при записи движений.

Что записываем в измерения и Выберем табличную часть и нажмем «Заполнить
выражения»...
Регистр, для которого
конструируем движения Откуда берем данные
(приход или расход)




Как видите, конструктор движений установил соответствия
подходящим образом: в качестве материала в регистр будет записан
ресурсы регистра
материал из табличной части документа, в качестве склада - склад,
указанный в шапке документа, а в качестве количества - количество
из табличной части документа.
Обратите внимание, что по умолчанию конструктор предлагает нам
Нажмем «ОК» и посмотрим, какой текст сформировал конструктор
создавать движения прихода (символ «+» рядом с названием регистра) в модуле объекта:
по регистру «ОстаткиМатериалов». Это нас вполне устраивает, ведь
документ «ПриходнаяНакладная» и должен приходовать материалы.
Процедура ОбработкаПроведения(Отказ, Режим)
В поле выбора «Табличная часть» выберем табличную часть //{{_КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ // Данный
нашего документа - «Материалы». Список реквизитов документа фрагмент построен конструктором. // При повторном
автоматически заполнится реквизитами нашей табличной части. использовании конструктора, // внесенные вручную
изменения будут утеряны!!! Для Каждого ТекСтрокаМатериалы
Теперь нажмем «Заполнить выражения».
Из Материалы Цикл // регистр ОстаткиМатериалов Приход
Движение = Движения.ОстаткиМатериалов.Добавить();
Движение.ВидДвижения = ВидДвиженияНакоплеиия.Приход;



90 91
Быстрая разработка прикладных решений Регистр накопления


Откроем Приходную накладную №1 и нажмем «ОК». Обратите
Движение.Период = Дата;
внимание, что при проведении приходной накладной появляются
Движение.Материал = ТекСтрокаМатериалы.Материал;
Движение.Склад = Склад; соответствующие записи в регистрах накопления:
Движение.Количество = ТекСтрокаМатериалы.Количество;
КонецЦикла;
// записываем движения регистров
Движения.ОстаткиМатериалов.Записать();
//}_КОНСТРУКТОР ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры

Конструктор создал обработчик события «ОбработкаПроведения»
объекта конфигурации Документ и поместил его в модуль объекта.
Внутри обработчика расположен цикл, который предназначен для
перебора строк табличной части нашего документа. В цикле
обращение к табличной части документа происходит по имени
(«Материалы»), а строки табличной части документа представляют
собой коллекцию значений, для перебора которой можно использовать
конструкцию Для каждого ... из ... цикл.
Объект встроенного языка ДокументОбъект имеет свойство
«Движения». Оно возвращает коллекцию наборов записей регистров,
которые принадлежат этому документу. К набору записей документа,
принадлежащему конкретному регистру, можно обратиться, указав
через точку имя этого регистра.
Таким образом, в первой строке тела цикла мы добавляем к набору Аналогичные действия проделаем и с документом Приходная
записей, который создает наш документ в регистре, новую запись и накладная №2.
сохраняем ее в переменной «Движение».
Затем мы присваиваем нужные значения всем полям этой записи и
после перебора всех строк документа (после завершения циклов)
«одним махом» записываем в регистр «ОстаткиМатериалов» весь
набор записей движений документа.
Посмотрим, как это работает. Запустим 1С:Предприятие в режиме
отладки и откроем одновременно два окна: список документов
«ПриходнаяНакладная» и список регистра накопления
«ОстаткиМатериалов».

92 93
Быстрая разработка прикладных решений Регистр накопления



Что нового мы узнали
Создание движений документа
ОказаниеУслуги

Т еперь мы аналогичным образом создадим движения
документа «ОказаниеУслуги». При использовании - для чего предназначен объект конфигурации
конструктора будем внимательны и обратим внимание на то,
Регистр накопления
что документ «ОказаниеУслуги» должен расходовать материалы.
Поэтому перед тем, как нажать «ОК» убедимся, что выбран правильный - почему следует использовать регистры, хотя
тип движения регистров (нам нужен «Расход»).
необходимая информация содержится в других объектах -
Запустим отладку и создадим документ оказания услуги, который
для чего нужны измерения регистра, ресурсы и реквизиты
будет расходовать один транзистор Philips за 3 рубля.
Проведем документ оказания услуги и убедимся, что в регистре - что такое движения регистра и что такое регистратор -
накопления он создал верные движения.
как создать новый регистр накопления и описать его
Сформированные таким образом движения этого документа будут
не совсем правильны. Дело в том, что в документе «ОказаниеУслуги», структуру
в отличие от документа «ПриходнаяНакладная» могут содержаться не
- как создать движения документа с
только расходуемые материалы, но и услуги. Поэтому в регистр
помощью конструктора движений
«ОстаткиМатериалов» будут попадать записи и о расходуемых
услугах, что не правильно. - как средствами встроенного языка обойти
Пока мы ничего не будем делать с движениями, которые
табличную часть документа и обратиться к ее данным -
сформировал конструктор, но как только познакомимся с
перечислениями, мы внесем в обработчик проведения необходимые как средствами встроенного языка сформировать и
изменения.
записать движения документа в регистр накопления




94 95
Отчет



Объект конфигурации Отчет
Глава 5. Отчет

О
бъект конфигурации Отчет является прикладным объектом и
В этой главе мы познакомимся с вами с объектом конфигурации
предназначен для описания средств и алгоритмов, при
Отчет. Вы узнаете, для чего он используется, и создадите отчет,
помощи которых пользователь сможет получать
который будет показывать движения и остатки материалов на нашем
необходимые ему выходные данные. Алгоритм
предприятии.
формирования выходных данных описывается при помощи
визуальных средств или с использованием встроенного языка В
реальной жизни объектам конфигурации Отчет соответствуют
всевозможные таблицы выходных данных, сводных данных
диаграммы и пр.

Для тех, кто работал с версией 7.7
Отчеты могут иметь теперь несколько реквизитов, табличных
частей, форм и несколько макетов (печатных форм). Теперь доступен
программный объект «Построитель отчета», позволяющий
формировать отчеты автоматически. Таблица отчета может
иметь вертикальные и горизонтальные группировки.




96
Быстрая разработка прикладных решений Отчет


таблицы регистра «ОстаткиМатериалов» в этой ветке присутствуют
Создание отчета Материалы еще несколько виртуальных таблиц, которые формирует система.


Т еперь у нас все готово для того, чтобы можно было получать
выходные данные. Поэтому приступим к созданию отчета, Кроме таблицы регистра ОстаткиМатериалов
который будет показывать нам приход, расход и остатки присутствуют еще несколько виртуальных
материалов. Данная глава преследует цель лишь таблиц...
проиллюстрировать механизм создания отчетов. Более глубоко работа
с конструктором выходной формы будет рассмотрена в главе
«Создание отчетов» на странице 162.
Создадим новый объект конфигурации Отчет и назовем его
«Материалы». Перейдем на закладку «Макеты» и воспользуемся
конструктором выходной формы для того, чтобы полностью создать
наш отчет.

Поскольку мы хотим видеть как остатки материалов, так и
Воспользуемся конструктором выходной формы...
информацию об их поступлении и расходовании, нас будет
интересовать виртуальная таблица
«ОстаткиМатериалов.ОстаткиИОбороты». Раскроем ее.




После выбора имени формы конструктор предложит нам начать
создание отчета. Конструктор обладает большим количеством
возможностей для визуального проектирования отчетов, но мы сейчас
воспользуемся только самыми простыми его возможностями и просто
определим те данные, которые хотим видеть в результате работы
нашего отчета. Как вы видите, эта таблица содержит материал, склад и кроме этого
В списке «База данных» представлен состав объектов базы данных; начальные и конечные остатки, а также значения прихода, расхода и
на основе их данных мы имеем возможность построить отчет. Если оборотов для всех ресурсов регистра «ОстаткиМатериалов».
раскрыть ветку «РегистрыНакопления» то мы увидим, что кроме



98
Быстрая разработка прикладных решений
Отчет

Начнем выбирать поля таблицы в нужном нам порядке двойным Как видите, наш отчет вполне «презентабелен» и полностью
щелчком мыши. Сначала выберем «Склад» и «Материал». Затем отражает движение материалов, произошедшее в нашей организации:
выберем «КоличествоНачальныйОстаток», «КоличествоПриход»,
«КоличествоРасход» и в заключение «КоличествоКонечныйОстаток».
В результате окно «Поля» должно быть заполнено следующим
образом:




После этого на закладке «Итоги» укажем группировочное поле
«Склад»:




Нажмем «ОК». Система автоматически сформирует формы и
откроет их на экране.
Запустим 1С:Предприятие в режиме отладки и посмотрим, как
работает отчет. Выполним Операции | Отчет... | Материалы и
нажмем «Сформировать».



100




101
Быстрая разработка прикладных решений



Глава 6. Макет
В этой главе вы познакомитесь с очередным новым объектом
конфигурации - Макет. Вы узнаете о его назначении и создадите макет
документа, на основе которого будет формироваться печатная форма
документа.




102 103
Быстрая разработка прикладных решений Макет


Создание макета документа
Объект конфигурации Макет

О
ОказаниеУслуги

о
бъект конфигурации Макет предназначен для хранения
различных форм представления данных, которые могут 1 ткроем в конфигураторе окно редактирования объекта
потребоваться каким либо объектам конфигурации или всему конфигурации Документ «ОказаниеУслуги». Перейдем на
прикладному решению в целом. Макет может содержать закладку «Макеты» и запустим конструктор печати:
табличный или текстовый документ, двоичные данные, HTML-
документ или Active Document. Макеты могут существовать как сами
по себе (общие макеты), так и быть подчинены какому либо объекту Запустим конструктор печати...
конфигурации.
Одно из предназначений макета, подчиненного объекту 1
конфигурации и содержащего табличный документ - создание
печатной формы этого объекта.
Создание печатной формы заключается в конструировании ее
составных частей - именованных областей, из которых затем
«собирается» готовая печатная форма. Порядок заполнения областей
данными и порядок вывода их в итоговую форму описывается при
помощи встроенного языка.
Печатная форма может включать в себя различные графические
объекты: картинки, OLE-объекты, диаграммы и т.д.
Помимо создания макета «вручную», конфигуратор предоставляет
разработчику возможность воспользоваться специальным
инструментом - конструктором печати, который берет на себя
большинство рутинной работы по созданию макета.

На первом шаге укажем, что новая процедура, которая будет
создана конструктором для формирования печатной формы документа,
будет располагаться в модуле формы.
На втором шаге нажатием двойной стрелки определим, что все
реквизиты нашего документа будут отображены в шапке печатной
формы.
На третьем шаге точно также определим, что все реквизиты
табличной части документа будут отображены в печатной форме.
На четвертом шаге конструктор предложит сформировать нам
подвал (нижнюю часть) печатной формы. Мы не станем ничего




104
Быстрая разработка прикладных решений Макет


Проверим макет в работе. Запустим 1С:Предприятие в режиме
указывать (подвал в данном случае использовать не будем), и
отладки и откроем документ ОказаниеУслуги №1. Обратите внимание,
перейдем к пятому шагу.
ч то в правом нижнем углу документа появилась новая кнопка
Здесь укажем, что конструктор должен вставить новую кнопку в
«Печать».
форму документа для вызова процедуры формирования печатной
формы, и нажмем «ОК».
В конфигураторе откроется форма документа и его макет: Появилась новая кнопка «Печать»...




Эта та кнопка, которую добавил конструктор. Нажмем на нее и
увидим печатную форму нашего документа.




Как видите, конструктор сформировал вполне подходящую
печатную форму для нашего документа. Единственное, чего не хватает
в данной форме - это итоговой суммы документа.




106 107
Редактирование макетов и форм


Вызвав палитру свойств для последней заполненной нами ячейки,
Глава 7. Редактирование макетов и укажем, что в этой ячейке будет находиться не текст, а параметр:

форм
Укажем, что в ячейке будет находиться не текст, а
параметр...
Редактирование макета документа
ОказаниеУслуги

О
ткроем конфигуратор, раскроем дерево документа
«ОказаниеУслуги» и дважды щелкнем на макете «Печать». Как
видите, макет документа состоит из именованных областей,
которые в определенном порядке выводятся на печать.
Добавим новую область для вывода итоговой суммы документа.
Выделим мышью две пустые строки и выполним команду
Таблица | Имена | Назначить имя...


Выделим мышью две строки и зададим имя области




Здесь следует сказать о том, что каждая ячейка редактируемого
нами табличного документа может содержать либо текст, либо
некоторый параметр, либо шаблон.
Текст, содержащийся в ячейке, будет показан на экране.
Параметр будет заменен некоторым значением, которое может
быть присвоено ему средствами встроенного языка. Текст,
содержащийся в ячейке, является именем этого параметра.
Шаблон представляет собой текстовую строку, в определенные
места которой будут вставлены значения параметров.
Поэтому, указав для ячейки в качестве заполнения «Параметр», мы
определили параметр области с именем «ВсегоПоДокументу»,
которому присвоим нужное нам значение при формировании печатной
формы.

Назовем область «Всего». В созданной области, в колонке «Цена»,
н а п иш е м « В с е го », а в к о л о н к е « С у м м а » н а п и ш е м
«ВсегоПоДокументу».



110 111
Быстрая разработка прикладных решений Редактирование макетов и форм

Теперь откроем модуль формы документа «ОказаниеУслуги» - параметру «ВсегоПоДокументу», находящемуся в этой области, мы
«ФормаДокумента». Найдем в нем процедуру «Печать» и после цикла присваиваем значение суммы табличной части документа по колонке
добавим в нее следующие строки (новые строки выделены жирным «Сумма» (обращение к табличной части документа выполняется по
имени - «ПереченьНоменклатуры»). В заключение мы выводим
шрифтом):
область в итоговый табличный документ, который будет показан на
экране и распечатан пользователем.
Процедура Печать(Элемент)
// {{_KOHCTPyKTOP_ПЕЧАТИ_ЭЛEMEHT(печать) // Подобным образом, используя свойства ячеек макета и управляя
Данный фрагмент построен конструктором. // При порядком их вывода, разработчик имеет возможность создать
повторном использовании конструктора, //внесенные
печатную форму любого дизайна.
вручную изменения будут утеряны!!! ТабДок = Новый
ТабличныйДокумент; А теперь, для того, чтобы наш документ «ОказаниеУслуги»,
Макет = Документы.ОказаниеУслуги.ПолучитьМакет("Печать"); //
выглядел вполне законченным, добавим итоговую сумму по
Заголовок
документу и на экранную форму, чтобы пользователь мог видеть ее в
Область = Макет.ПолучитьОбласть("Заголовок");
процессе заполнения табличной части документа.
ТабДок.Вывести(Область); // Шапка
Область = Макет.ПолучитьОбласть("Шапка");
Область.Параметры.Номер = Номер;
Область.Параметры.Дата = Дата;
Область.Параметры.Клиент = Клиент;
Область.Параметры.Мастер = Мастер;
ТабДок.Вывести(Область); // тчНоменклатура
Область = Макет.ПолучитьОбласть("тчНоменклатураШапка");
ТабДок.Вывести(Область);
Для Каждого ТекСтрокатчНоменклатура Из тчНоменклатура Цикл
Область = Макет.ПолучитьОбласть("тчНоменклатура");
Область.Параметры.УслугаМатериал = ТекСтрокатчНоменклатура.Номенклатура;
Область.Параметры.Количество = ТекСтрокатчНоменклатура.Количество;
Область.Параметры.Цена = ТекСтрокатчНоменклатура.Цена;
Область.Параметры.Сумма = ТекСтрокатчНоменклатура.Сумма;
ТабДок.Вывести(Область); КонецЦикла;
Область = Макет.ПолучитьОбласть("Всего");
Область.Параметры.ВсегоПоДокументу = ПереченьНоменклатуры
.Итог("Сумма");
ТабДок.Вывести(Область); ТабДок.ОтображатьСетку =
Ложь; ТабДок.Защита = Ложь; ТабДок.ТолькоПросмотр =
Ложь; ТабДок.ОтображатьЗаголовки = Ложь;
ТабДок.Показать();
//} }_КОНСТРУКТОР_ПЕЧАТИ_ЭЛЕМЕНТ
КонецПроцедуры

Смысл добавленного фрагмента прост: мы получаем новую область
«Всего» (ту, которую мы только что добавили к макету). Затем


112
113
Быстрая разработка прикладных решений Редактирование макетов и форм


После этого откроем свойства колонки «Сумма», установим
Редактирование формы документа горизонтальное положение в подвале - «Прижать вправо», установим
ОказаниеУслуги флаг «Показывать итог в подвале» и в шрифте подвала тоже изменим
начертание на «Жирный».


О
ткроем в конфигураторе форму документа «ОказаниеУслуги»
Запустим 1С:Предприятие в режиме отладки и посмотрим, как
- «ФормаДокумента». Откроем палитру свойств для
теперь выглядит форма документа Оказание услуги № 1:
табличного поля, расположенного в форме, и установим
свойство «Подвал», которое определяет наличие подвала у элемента
управления табличное поле.


Добавим подвал к табличному полю...




Подобным образом, используя свойства элементов управления и
задавая их значения, разработчик имеет возможность создать
экранную форму любого дизайна и поведения.




Затем откроем свойства колонки «Цена» и установим текст подвала
- «Всего:», горизонтальное положение в подвале - «Прижать вправо»
и в шрифте подвала изменим начертание на «Жирный».




114
115
Быстрая разработка прикладных решений


Часть II. Использование
Что нового мы узнали
основных объектов
конфигурации
- как изменить табличный документ
- какая разница в заполнении ячейки табличного документа Обратите внимание, что, по большому счету, вы уже можете
самостоятельно создавать приложения. Это действительно так, потому
текстом, параметром и шаблоном - как с помощью
что наша учебная конфигурация уже имеет все основные блоки,
встроенного языка вывести в табличный необходимые для организации учета OOO «На все руки мастер».
В самом деле, мы можем описать предметы учета, можем отразить
документ новую область - как изменить внешний
факты движения этих предметов, можем накопить информацию о
вид и поведение элемента движениях и даже можем представить эту информацию в виде
некоторой выходной формы.
управления, расположенного в форме - как
Поэтому все дальнейшее изложение, грубо говоря, будет
отобразить сумму по колонке табличного поля посвящено тому, как «приблизить» эту систему учета к реальным
потребностям 000 «На все руки мастер».




116 117
Периодический регистр сведений



Глава 1. Периодический регистр Зачем нужен периодический регистр
сведений?
сведений

Н
ачнем мы с того, что обратим ваше внимание на документ
В этой главе мы с вами познакомимся с объектом конфигурации
«ОказаниеУслуги». Как вы помните, в этом документе мы
Регистр сведений, а точнее с одним из его видов - периодическим
выбираем услугу, которая оказывается, и затем указываем
регистром сведений. Вы узнаете, для чего предназначен этот объект
цену.
конфигурации, и какова его структура.
Очевидно, что в 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
Перечисление



Объект конфигурации Перечисление
Глава 2. Перечисление

О
бъект конфигурации Перечисление является прикладным
До сих пор мы с вами не обращали внимания на то, что у нас нет объектом и предназначен для описания структуры хранения
никакого признака, по которому мы могли бы сказать, чем является постоянных наборов значений, не изменяемых в процессе
конкретный элемент справочника «Номенклатура»: материалом или работы конфигурации. На основе объекта конфигурации
услугой. To, что все элементы справочника разложены у нас по Перечисление платформа создает в базе данных информационную
некоторым группам, не может являться надежным критерием оценки: структуру, в которой может храниться набор некоторых постоянных
группы можно удалить, переименовать, сгруппировать элементы по значений.
другим принципам...
В реальной жизни этому объекту может соответствовать, например,
Поэтому нам требуется некоторый признак, позволяющий перечисление вариантов указания цены («включая НДС», «без НДС»).
однозначно определять принадлежность элемента справочника к Набор всех возможных значений, которые содержит перечисление,
материалам или услугам, независимо от изменения иерархической задается при конфигурировании системы, и пользователь не может
структуры справочника. изменять их, удалять или добавлять новые.
В этой главе мы создадим у справочника «Номенклатура» Из этого следует важная особенность перечисления: значения
специальный реквизит, тип значения которого образуется новым пока перечисления не «обезличены» для конфигурации, на них могут
еще для нас объектом конфигурации Перечисление. Это поможет нам опираться алгоритмы работы программы.
в дальнейшем легко определять, чем является элемент справочника
«Номенклатура»: услугой или материалом. Кроме этого, мы
тех, ктоработал с версией 7.7
скорректируем процедуру проведения документа ОказаниеУслуги и Перечисления могут теперь иметь формы (в том числе основную
покажем, как работать с перечислением средствами встроенного форму списка и выбора), а также макеты.
языка.





" Узнай больше!
О структуре объектов встроенного языка, предназначенных для
работы с перечислениями можно прочитать в главе «Перечисления»
на странице 584.




130 131
Использование основных объектов конфигурации Перечисление


После этого запустим 1С:Предприятие в режиме отладки и зададим
Реорганизация справочника Номенклатура для каждого элемента справочника «Номенклатура» соответствующее


О
значение реквизита «ВидНоменклатуры»:
ткроем конфигуратор и создадим сначала новый объек
конфигурации Перечисление с
имене\
«ВидыНоменклатуры».
На закладке «Данные» добавим два значен»
перечисления: «Материал» и «Услуга»:




Теперь посмотрим, как можно использовать новые данные,
полученные благодаря использованию перечисления
«ВидыНоменклатуры».

Затем добавим в
справочник «Номенклатура» новый реквизит
«ВидНоменклатуры» с типом
ПеречислениеСсылка.ВидыНоменклатуры:




132
133
Использование основных объектов конфигурации Перечисление


Движение.Количество = ТекСтрокаПереченьНоменклатуры.Количество;
Изменение процедуры проведения КонецЦикла;
// записываем движения регистров
документа ОказаниеУслуги Движения.ОстаткиМатериалов.Записать()-



Е
//} }_КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
сли вы помните, в первой части книги, когда создавались КонецПроцедуры
движения документа «ОказаниеУслуги» по регистру
накопления «ОстаткиМатериалов», мы сказали, что они не
Добавленный текст исключает из выполнения операторов цикла те
совсем правильные, поскольку в регистр будут попадать не только строки документа, в которых номенклатура не является материалом. К
записи об израсходованных материалах, но и записи об значению перечисления «Материал» мы обращаемся, используя
оказанных услугах. менеджер перечисления «ВидыНоменклатуры»
Теперь мы займемся тем, что доработаем документ таким образом, (Перечисления.ВидыНоменклатуры), указывая в качестве его
чтобы в регистре появлялись только записи, относящиеся к расходу свойства имя нужного нам значения перечисления.
материалов. Эта доработка будет не совсем эффективна с точки зрения Запустим 1С:Предприятие в режиме отладки и проверим работу
производительности, зато позволит нам получить нужные данные в процедуры проведения документа «ОказаниеУслуги».
регистре «ОстаткиМатериалов». Откроем документ Оказание услуги №1 и внесем в него следующие
Более эффективный вариант обработки проведения этого изменения (обратите внимание, что изменен не только состав
документа мы рассмотрим после изучения главы, рассказывающей о номенклатуры в табличной части, но и время документа):
механизме запросов 1С:Предприятия 8.0.
Скорректируем движения документа, исключив из обработки те
строки табличной части, в которых находятся услуги. Для этого в
обработчик события «ОбработкаПроведения», расположенный в
модуле документа «ОказаниеУслуги», добавим следующий текст

<<

стр. 2
(всего 11)

СОДЕРЖАНИЕ

>>