WWW.LIBRUS.DOBROTA.BIZ
БЕСПЛАТНАЯ  ИНТЕРНЕТ  БИБЛИОТЕКА - собрание публикаций
 

Pages:     | 1 | 2 || 4 | 5 |

«пособие разработчика. Примеры и типовые приемы Электронная книга в формате pdf; ISBN 978-5-9677-2043-7. Электронный аналог печатного издания «1С:Предприятие 8.2. Практическое пособие разработчика. ...»

-- [ Страница 3 ] --

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

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

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

Если дата проводимого документа меньше текущей даты сеанса, то такой документ система будет проводить в неоперативном режиме .

Неоперативное проведение документов подразумевает отражение в базе данных фактов, которые свершились в прошлом или которые 452 1С:Предприятие 8.3. Практическое пособие разработчика точно будут совершены в будущем. Поэтому задача неоперативного проведения документов – просто отразить в информационной базе данные о совершенных операциях .

При неоперативном проведении документов не имеет смысла производить целый ряд проверок, в частности контроль остатков .

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

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

Зачастую возникает желание провести документ будущей датой, чтобы отразить какие-то события, которые точно наступят в будущем .

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

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





Занятие 14 Понятие момента времени Для определения положения документа на оси времени используется реквизит документа Дата. Дата содержит время с точностью до секунды. Это позволяет контролировать последовательность записи документов. Однако при большом объеме создаваемых документов вероятна ситуация, когда несколько документов будут иметь одинаковое значение даты (т. е. будут созданы в течение одной секунды). Как в этом случае определить последовательность созданных документов?

Для обработки подобных ситуаций было введено понятие момент времени. Момент времени представляет собой совокупность даты, времени и ссылки на объект базы данных. Он позволяет однозначно идентифицировать любой объект ссылочного типа базы данных на оси событий, но имеет смысл в основном только для документов .

Кроме того, момент времени позволяет идентифицировать и необъектные данные, например, записи регистров, подчиненных регистратору .

Понятие момента времени реализовано во встроенном языке при помощи универсального объекта МоментВремени. Этот объект имеет свойства Дата и Ссылка, которые позволяют получить «составляющие» момента времени, и один метод – Сравнить(), при помощи которого возможно сравнение двух моментов времени между собой .

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

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

Оперативная отметка времени создается системой каждый раз при оперативном проведении документа. Ее значение формируется исходя из текущей даты сеанса и последней созданной оперативной отметки .

Если последняя оперативная отметка меньше текущей даты сеанса, в качестве новой оперативной отметки принимается текущая дата сеанса .

454 1С:Предприятие 8.3. Практическое пособие разработчика Если последняя оперативная отметка равна или больше текущей даты сеанса, в качестве новой оперативной отметки принимается значение на одну секунду большее, чем старая оперативная отметка времени .

Таким образом, если у объекта конфигурации Документ установлено свойство оперативного проведения (рис.

14.30), последовательность действий системы будет следующей:

при создании нового документа система будет устанавливать ему текущую дату сеанса и «нулевое» время;

при проведении такого документа (с датой, день которой соответствует дню текущей даты сеанса) система установит в качестве даты документа оперативную отметку времени;

если отменить проведение документа и затем провести его снова (не изменяя даты), система установит документу новую оперативную отметку времени;

если попытаться перепровести документ, то система также автоматически установит документу новую оперативную отметку времени и проведет его;

при попытке проведения (или перепроведения) оперативно проводимого документа с датой, день которой меньше дня текущей даты сеанса, документ будет проведен неоперативно;

если попытаться провести (или перепровести) оперативно проводимый документ с датой, день которой больше дня текущей даты сеанса, то система не даст выполнить такое действие .

Рис. 14.30. Разрешение оперативного проведения документа Занятие 14 Контроль остатков Общая методика контроля остатков при проведении документа заключается в следующем: сначала, не глядя ни на что, нужно записать движения документа, а затем, когда движения уже записаны, прочитать из базы данных остатки .

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

Если же отрицательных остатков не появилось, тогда можно смело проводить документ .

Полдела у нас уже сделано: мы формируем движения документа и записываем их. Единственное, что нам осталось, – в случае оперативного проведения проконтролировать, что получилось, и, если появились отрицательные остатки, отменить проведение документа .

В режиме «Конфигуратор»

Сделаем заготовку. После цикла обхода результата запроса и перед концом процедуры напишем следующие строки (листинг 14.35) .

листинг 14.35. Фрагмент процедуры «ОбработкаПроведения()»

… КонецЦикла;

Движения.Записать();

Если Режим = РежимПроведенияДокумента.Оперативный Тогда // Проверить отрицательные остатки КонецЕсли;

КонецПроцедуры Сначала мы записываем движения в регистры .

Затем определяем режим проведения документа. При выполнении процедуры ОбработкаПроведения() вторым параметром (Режим) в нее передается режим проведения документа, и значение этой переменной сравнивается со значением системного перечисления РежимПроведенияДокумента. В случае оперативного проведения мы будем выполнять контроль остатков .

456 1С:Предприятие 8.3. Практическое пособие разработчика Теперь сделаем заготовку запроса для проверки отрицательных остатков .

Так как нам придется снова получать остатки только для той номенклатуры, которая в документе, укажем, что этот запрос будет использовать тот же самый менеджер временных таблиц МенеджерВТ (листинг 14.36) .

листинг 14.36. Фрагмент процедуры «ОбработкаПроведения()»

Если Режим = РежимПроведенияДокумента.Оперативный Тогда // Проверить отрицательные остатки Запрос3 = Новый Запрос;

Запрос3.МенеджерВременныхТаблиц = МенеджерВТ;

Запрос3.Текст = "";

КонецЕсли;

Установим курсор внутрь кавычек и вызовем конструктор запроса .

Подтвердим создание нового запроса .

Выберем таблицу ОстаткиМатериалов.Остатки и из нее два поля:

Материал и КоличествоОстаток .

Зададим параметры этой таблицы. В параметре Условие напишем:

листинг 14.37. Условие виртуальной таблицы Материал В ( ВЫБРАТЬ НоменклатураДокумента.Номенклатура ИЗ НоменклатураДокумента) И Склад = &Склад То есть мы получаем итоги только для той номенклатуры, которая содержится в нашей временной таблице, и только по складу, который указан в документе .

Затем на закладке Условия перенесем в список условий поле КоличествоОстаток, установим флажок Произвольное и укажем, что нас интересуют только отрицательные остатки (листинг 14.38) .

листинг 14.38. Условие запроса ОстаткиМатериаловОстатки.КоличествоОстаток 0 Нажмем ОК. Текст запроса будет выглядеть следующим образом (листинг 14.39) .

Занятие 14 листинг 14.39. Текст запроса // Проверить отрицательные остатки Запрос3 = Новый Запрос;

Запрос3.МенеджерВременныхТаблиц = МенеджерВТ;

Запрос3.Текст = " |ВЫБРАТЬ | ОстаткиМатериаловОстатки .

Материал, | ОстаткиМатериаловОстатки.КоличествоОстаток |ИЗ | РегистрНакопления.ОстаткиМатериалов.Остатки(, Материал В ( | ВЫБРАТЬ | НоменклатураДокумента.Номенклатура | ИЗ | НоменклатураДокумента) | И Склад = &Склад) КАК ОстаткиМатериаловОстатки |ГДЕ | ОстаткиМатериаловОстатки.КоличествоОстаток 0";

Теперь осталось только установить параметр запроса, обойти результат запроса и вывести сообщения об отрицательных остатках (листинг 14.40) .

листинг 14.40. Фрагмент процедуры «ОбработкаПроведения()»

// Проверить отрицательные остатки Запрос3 = Новый Запрос;

Запрос3.МенеджерВременныхТаблиц = МенеджерВТ;

Запрос3.Текст = " |ВЫБРАТЬ | ОстаткиМатериаловОстатки .

Материал, … |ГДЕ | ОстаткиМатериаловОстатки.КоличествоОстаток 0";

Запрос3.УстановитьПараметр("Склад", Склад);

РезультатЗапроса = Запрос3.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Сообщение = Новый СообщениеПользователю();

Сообщение.Текст = "Не хватает " + Строка(- ВыборкаДетальныеЗаписи.КоличествоОстаток) + " единиц материала """ + ВыборкаДетальныеЗаписи.Материал + """";

Сообщение.Сообщить();

Отказ = Истина;

КонецЦикла;

Кратко поясним добавленный текст .

При выполнении проверки в запрос в параметре Склад передается склад, указанный в документе .

458 1С:Предприятие 8.3. Практическое пособие разработчика Затем выполняется запрос для получения отрицательных остатков номенклатуры, содержащейся во временной таблице и на складе, указанном в параметре Склад .

После этого выборка записей запроса обходится в цикле, и, если есть такие записи, они выводятся в сообщениях пользователю .

При этом параметру Отказ процедуры проведения документа присваивается значение Истина, то есть документ не проводится, начатая транзакция отменяется, и состояние данных, измененных в процессе проведения, возвращается в исходное, до начала проведения документа .

Блокировка данных, которые читаются и изменяются при проведении Казалось бы, это все? Но нет, есть очень важный момент, о котором мы не позаботились .

Сейчас схема нашей процедуры такова:

1. Выполняем первый запрос с именем Запрос. В результате мы формируем временную таблицу из перечня номенклатуры документа .

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

3. Записываем движения регистров (Движения.Записать()) .

4. Выполняем третий запрос с именем Запрос3. Тем самым мы проверяем наличие отрицательных остатков .

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

Однако может возникнуть следующая ситуация. Выполняя второй запрос, мы прочитали, что есть 2 шт. некоторого материала. И другая транзакция (другой пользователь), которая собирается списывать материалы, тоже прочитала, что есть 2 шт. этого материала. После этого мы записали движения, и система заблокировала эти данные .

Занятие 14 Другая транзакция ждет, когда мы освободим данные. Мы провели документ, списали 2 шт. материала и освободили данные. Другая транзакция пытается тоже списать 2 шт. материала, но его уже нет!

Аналогичная ситуация может возникнуть и между п. 3 и п. 4, в результате чего контроль остатков будет работать неверно .

Поэтому, чтобы не происходило таких коллизий, нам необходимо заблокировать остатки от чтения другими транзакциями еще до выполнения второго запроса. То есть прежде чем читать что-то, что мы собираемся изменять, нужно запретить чтение этих данных другими транзакциями до тех пор, пока мы не закончим свои изменения (или пока не откажемся от проведения документа) .

В режиме «Конфигуратор»

Как это сделать? Хороший вопрос. Давайте посмотрим на свойство Режим управления блокировкой данных нашей конфигурации. Оно установлено в значение Управляемый (рис. 14.31) .

–  –  –

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

460 1С:Предприятие 8.3. Практическое пособие разработчика Необходимо заблокировать те данные, которые мы собираемся читать и впоследствии изменять. Для этого у наборов записей регистров есть свойство БлокироватьДляИзменения, которым мы и воспользуемся .

Вставим этот код перед записью пустых наборов записей (листинг 14.41) .

листинг 14.41. Фрагмент процедуры «ОбработкаПроведения()»

… | ПО НоменклатураДокумента.Номенклатура = СтоимостьМатериаловОстатки.Материал";

// Установим необходимость блокировки данных в регистрах СтоимостьМатериалов // и ОстаткиМатериалов Движения.СтоимостьМатериалов.БлокироватьДляИзменения = Истина;

Движения.ОстаткиМатериалов.БлокироватьДляИзменения = Истина;

// Запишем пустые наборы записей, чтобы читать остатки без учета данных в документе Движения.СтоимостьМатериалов.Записать();

Движения.ОстаткиМатериалов.Записать();

РезультатЗапроса = Запрос2.Выполнить();

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

Что нам и требовалось .

Выделение произвольных областей модуля Итак, мы закончили редактирование процедуры ОбработкаПроведения() в модуле документа ОказаниеУслуги. Хотя модуль содержит всего одну процедуру, эта процедура довольно объемная (особенно для неопытного разработчика), и ее нельзя «охватить одним взглядом». Это затрудняет процесс восприятия и понимания текста процедуры, поиск в ней ошибок и т. д .

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

Например, в нашей процедуре можно выделить три логические части: в первой части формируется временная таблица, содержащая Занятие 14 перечень номенклатуры документа; во второй части рассчитывается стоимость номенклатуры и формируются движения в регистрах накопления; и в третьей части производится контроль остатков номенклатуры при оперативном проведении документа .

Выделим эти три области в тексте процедуры, используя инструкции препроцессору #Область имя области и #КонецОбласти (листинг 14.42) .

листинг 14.42. Процедура «ОбработкаПроведения()»

Процедура ОбработкаПроведения(Отказ, Режим) Движения.ОстаткиМатериалов.Записывать = Истина;

Движения.СтоимостьМатериалов.Записывать = Истина;

Движения.Продажи.Записывать = Истина;

// Создать менеджер временных таблиц МенеджерВТ = Новый МенеджерВременныхТаблиц;

#Область НоменклатураДокумента Запрос = Новый Запрос;

// Укажем, какой менеджер временных таблиц использует этот запрос Запрос.МенеджерВременныхТаблиц = МенеджерВТ;

–  –  –

Запрос.УстановитьПараметр("Ссылка", Ссылка);

РезультатЗапроса = Запрос.Выполнить();

#КонецОбласти #Область ДвиженияДокумента Запрос2 = Новый Запрос;

Запрос2.МенеджерВременныхТаблиц = МенеджерВТ;

462 1С:Предприятие 8.3. Практическое пособие разработчика

–  –  –

// Установим необходимость блокировки данных в регистрах СтоимостьМатериалов // и ОстаткиМатериалов Движения.СтоимостьМатериалов.БлокироватьДляИзменения = Истина;

Движения.ОстаткиМатериалов.БлокироватьДляИзменения = Истина;

// Запишем пустые наборы записей, чтобы читать остатки без учета данных в документе Движения.СтоимостьМатериалов.Записать();

Движения.ОстаткиМатериалов.Записать();

РезультатЗапроса = Запрос2.Выполнить();

// ТЗ = РезультатЗапроса.Выгрузить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

–  –  –

// Регистр ОстаткиМатериалов Расход Движение = Движения.ОстаткиМатериалов.Добавить();

Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

Движение.Период = Дата;

Движение.Материал = ВыборкаДетальныеЗаписи.Номенклатура;

Движение.Склад = Склад;

Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоВДокументе;

–  –  –

// Регистр Продажи Движение = Движения.Продажи.Добавить();

Движение.Период = Дата;

Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;

Движение.Клиент = Клиент;

Движение.Мастер = Мастер;

Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоВДокументе;

Движение.Выручка = ВыборкаДетальныеЗаписи.СуммаВДокументе;

Движение.Стоимость = СтоимостьМатериала * ВыборкаДетальныеЗаписи.КоличествоВДокументе;

КонецЦикла;

Движения.Записать();

#КонецОбласти

–  –  –

Запрос3.УстановитьПараметр("Склад", Склад);

464 1С:Предприятие 8.3. Практическое пособие разработчика РезультатЗапроса = Запрос3.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

–  –  –

КонецПроцедуры В результате мы можем свернуть выделенные программные области в тексте процедуры (рис. 14.32) .

Рис. 14.32. Выделение произвольных областей в модуле Затем можно развернуть только нужную область модуля и работать с ней. Текст процедуры станет более компактным и читаемым .

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

Занятие 14 Области могут быть вложены друг в друга или в другие группируемые конструкции языка. При расстановке областей в модуле нужно следить за тем, чтобы области не пересекались между собой и с другими группируемыми конструкциями. Потому что группировка по таким областям работать не будет .

В режиме «1С:Предприятие»

Запустим «1С:Предприятие» в режиме отладки и проверим работу нового обработчика события ОбработкаПроведения, перепроведя все документы Оказание услуги .

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

Теория: устройство кеша В разделе «Теория: особенности использования ссылочных данных»

на стр. 413 мы упомянули о том, что в платформе есть некий кеш, который хранит в себе данные объектов, читаемых из базы данных .

Теперь расскажем о работе этого механизма подробнее .

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

Таким образом, для получения реквизитов какого-либо объекта через ссылку выполняется обращение к кешу объектов, расположенному в оперативной памяти .

Кеш объектов состоит из двух частей: транзакционного кеша и обычного кеша. В зависимости от того, происходит ли обращение в рамках транзакции или нет, в действие вступает тот или иной кеш (рис. 14.33) .

Все данные, находящиеся в кеше, предназначены только для чтения (ReadOnly). Таким образом, чтение любых данных, получаемых через ссылку, выполняется только через кеш объектов, а запись – механизмами самих программных объектов .

466 1С:Предприятие 8.3. Практическое пособие разработчика

Рис. 14.33. Кеш объектов

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

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

Если в кеше нет информации для нашей ссылки, из базы данных в кеш будут считаны только поля, необходимые для формирования представления объекта .

Если мы обратимся к кешу для получения реквизита объекта и в кеше есть информация для нашей ссылки, дальнейшие действия будут зависеть от того, что находится в кеше .

Если в кеше весь объект, значение реквизита будет получено из кеша .

Если в кеше представление объекта, оно будет удалено из кеша, Занятие 14 и в кеш будут считаны все данные объекта. Если же при получении реквизита объекта в кеше нет информации для нашей ссылки, из базы данных будут считаны все поля объекта .

Считанные данные будут находиться в кеше до тех пор, пока не наступит одно из следующих событий:

считанные данные будут вытеснены из кеша другими считанными данными других объектов (переполнение кеша);

при очередном обращении к кешу окажется, что считанные данные были изменены в базе данных;

закончится интервал времени в 20 минут .

Все считанные данные помещаются в последовательную очередь, и, поскольку объем кеша ограничен, наиболее старые данные будут вытесняться из кеша последними считанными .

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

Если обращение происходит в пределах 20 секунд после поступления данных в кеш, данные считаются верными (валидными). Если интервал превысил 20 секунд, будет выполняться проверка на соответствие версии данных, хранящихся в кеше, версии данных, находящихся в базе данных .

Если окажется, что версии данных не совпадают (т. е. произошло изменение данных в базе данных), данные, находящиеся в кеше, будут удалены из него, и будет выполнено повторное считывание данных из базы данных. Начиная с этого момента, идет отсчет следующего 20-секундного интервала валидности этих данных .

Кроме всех вышеперечисленных событий считанные данные будут удалены из кеша по истечении 20 минут после их последнего считывания из базы данных .

Таким образом, при последовательном выполнении двух операторов (листинг 14.43), где Номенклатура – это ссылка на объект справочника, на выполнение второго оператора будет тратиться гораздо меньше времени, поскольку в первом случае будет выполняться обращение к базе данных, а во втором – чтение из оперативной памяти (кеша объектов) .

468 1С:Предприятие 8.3. Практическое пособие разработчика листинг 14.43. Последовательность операторов А = Номенклатура.Наименование;

В = Номенклатура.ВидНоменклатуры;

Транзакционный кеш Если обращение к данным происходит в рамках транзакции, то оно переадресуется транзакционному кешу. В рамках транзакции в «1С:Предприятии» выполняются все операции, приводящие к изменению данных в базе данных. Например, в рамках транзакции выполняется обработка проведения документа .

Транзакция – это неделимая последовательность манипулирования данными, переводящая базу данных из одного целостного состояния в другое. Если по каким-то причинам одно из действий транзакции невыполнимо, база данных возвращается в то состояние, которое было до начала транзакции (происходит откат транзакции – Rollback) .

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

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

Транзакционный кеш хранит считанные данные до тех пор, пока они не будут вытеснены более поздними или пока не закончится транзакция. По окончании транзакции кеш очищается, однако действия, выполняемые при этом, зависят от состояния завершения транзакции .

Если транзакция завершена успешно (Commit), данные всех объектов, содержащиеся в транзакционном кеше, переносятся в обычный кеш, а транзакционный кеш очищается (рис. 14.34) .

Если был выполнен отказ от изменений (Rollback), то просто очищается транзакционный кеш (рис. 14.35) .

Занятие 14 Рис. 14.34. Транзакция завершена успешно Рис. 14.35. Очистка транзакционного кеша при отказе от изменений 470 1С:Предприятие 8.3. Практическое пособие разработчика Контрольные вопросы ; Как система «1С:Предприятие» выполняет обращение к ссылочным данным?

; Как используется кеш объектов?

; Почему для доступа к массивам данных информационной базы предпочтительнее использовать запросы?

; Что такое момент времени?

; Чем отличается оперативное проведение документов от неоперативного?

; Что такое оперативная отметка времени?

; Как запросом получить остатки регистра накопления?

; На что следует обращать внимание при указании параметров виртуальных таблиц запросов?

; Почему при неоперативном проведении документов не нужно контролировать остатки?

; Что такое временные таблицы, и зачем их использовать?

; Что такое менеджер временных таблиц?

; Как и зачем можно использовать временные таблицы в параметрах виртуальных таблиц?

; Как программно блокировать данные?

; Как посмотреть в отладчике результат запроса?

; Как выделить произвольные области в тексте программного модуля?

Занятие 15 План видов характеристик пРодолжительность Ориентировочная продолжительность занятия – 2 часа 50 минут .

Постановка задачи

Что такое план видов характеристик

Логическая связь объектов

Создание новых объектов конфигурации

Доработка объектов конфигурации

Справочник «Варианты номенклатуры»

Регистр сведений «Значения свойств номенклатуры»

Создание видов характеристик номенклатуры

В режиме «1С:Предприятие»

Доработка учетных механизмов

Регистр «Остатки материалов»

Документ «Приходная накладная»

Документ «Оказание услуги»

Приход/расход номенклатуры с учетом характеристик

Отчет, использующий характеристики

Запрос для набора данных

Ресурсы

Настройки

Контрольные вопросы

472 1С:Предприятие 8.3. Практическое пособие разработчика На этом занятии мы познакомимся с новым объектом конфигурации План видов характеристик и узнаем, каким образом можно использовать этот объект для расширения возможностей нашей конфигурации .

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

Описывать материалы пользователь сможет следующим образом:

для каждого материала будет возможность создать некоторые (произвольные) характеристики этого материала (например, цвет, производитель и пр.). Затем при поступлении материалов можно будет задать конкретные значения интересующих характеристик (например, при поступлении электрических кабелей можно будет указать, что они белого цвета и их сечение равно 2,5 мм, а при поступлении резиновых шлангов указать, что они черного цвета и произведены на фирме «Fagumit Sp. z o.o.») .

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

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

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

Занятие 15 Что такое план видов характеристик Объект конфигурации План видов характеристик предназначен для описания структуры хранения информации о характеристиках, создаваемых пользователем. На основе объекта конфигурации План видов характеристик платформа создает в базе данных набор таблиц, в которых будет храниться информация о существующих видах характеристик и типе значения характеристики каждого вида .

В сущности, план видов характеристик очень напоминает справочник, однако имеет более узкую «специализацию»: хранит, по сути, информацию только о том, какими видами характеристик может описываться какой-либо объект базы данных .

План видов характеристик состоит из видов характеристик. Каждый вид характеристики обязательно описывается наименованием и типом значения .

Разработчик и, что самое важное, пользователь могут задать в нем любое необходимое им количество видов характеристик (рис. 15.1) .

Рис. 15.1. План видов характеристик в конфигураторе, в базе данных и в режиме «1С:Предприятие»

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

474 1С:Предприятие 8.3. Практическое пособие разработчика Это свойство определяет составной тип данных, куда входят все типы, которые могут понадобиться при указании типа значения характеристики (рис. 15.2) .

–  –  –

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

Например, он захочет вести учет в разрезе цвета товаров, а справочник Цвет в конфигурации отсутствует .

В этом случае он сможет воспользоваться специальным вспомогательным справочником, который разработчик создаст заблаговременно и укажет в качестве свойства объекта конфигурации План видов характеристик – Дополнительные значения характеристик (рис. 15.3) .

Занятие 15

Рис. 15.3. Свойство «Дополнительные значения характеристик»

Тогда пользователь, создав новый вид характеристики Цвет, сможет задать необходимые значения цвета в справочнике дополнительных значений характеристик .

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

УзнАй больше!

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

на стр. 917 .

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

476 1С:Предприятие 8.3. Практическое пособие разработчика Каким образом хранить соответствие конкретного вида характеристик или значения характеристик конкретному объекту базы данных, решает сам разработчик в зависимости от создаваемого прикладного решения .

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

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

Логическая связь объектов Для реализации этого примера нам понадобятся три новых объекта конфигурации .

Прежде всего, это План видов характеристик. Он будет хранить виды характеристик, которыми в принципе можно описывать материалы .

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

И третий объект – это регистр сведений, в котором собственно и будет храниться соответствие конкретных значений характеристик некоторому варианту материала (см. рис. 15.4) .

–  –  –

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

И вместе с этим мы получим возможность вести учет в разрезе видов характеристик, добавив в регистры накопления еще одно измерение для хранения ссылки на элемент справочника, подчиненного справочнику Номенклатура (рис. 15.4) .

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

Создание новых объектов конфигурации В режиме «Конфигуратор»

Как мы уже говорили, нам понадобится создать несколько новых объектов конфигурации:

справочник ВариантыНоменклатуры, чтобы описывать партии материалов;

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

план видов характеристик СвойстваНоменклатуры, чтобы создавать виды характеристик;

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

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

Затем создадим еще один объект конфигурации Справочник с именем ДополнительныеСвойстваНоменклатуры .

После этого создадим объект конфигурации План видов характеристик с именем СвойстваНоменклатуры .

478 1С:Предприятие 8.3. Практическое пособие разработчика Установим его свойство Тип значения характеристик .

Для этого нажмем кнопку выбора и зададим составной тип данных следующим образом (рис.

15.5):

Число, длина 15, точность 3;

Строка, длина 25;

Дата;

Булево;

СправочникСсылка.ДополнительныеСвойстваНоменклатуры .

–  –  –

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

Рис. 15.7. Окно редактирования плана видов характеристик 480 1С:Предприятие 8.3. Практическое пособие разработчика Теперь создадим объект конфигурации Регистр сведений с именем ЗначенияСвойствНоменклатуры .

На закладке Данные создадим измерения регистра:

НаборСвойств, Ведущее, тип СправочникСсылка.ВариантыНоменклатуры;

ВидСвойства, тип ПланВидовХарактеристикСсылка.СвойстваНоменклатуры .

Затем создадим ресурс регистра (рис. 15.8):

Значение, тип Характеристика.СвойстваНоменклатуры .

Рис. 15.8. Окно редактирования регистра сведений

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

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

Занятие 15

–  –  –

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

482 1С:Предприятие 8.3. Практическое пособие разработчика

–  –  –

Откроется диалог описания характеристик. С помощью кнопки Добавить в командной панели добавим в него новую запись .

В качестве источника характеристик выберем план видов характеристик СвойстваНоменклатуры. Платформа автоматически определит, что полем ключа будет являться поле Ссылка этого объекта конфигурации (рис. 15.11) .

Два оставшихся поля, Поле отбора видов и Значение отбора, оставим пустыми. В нашем случае эти поля не понадобятся .

Перейдем к описанию того, где и как хранятся значения наших свойств. В качестве источника значений характеристик выберем регистр сведений ЗначенияСвойствНоменклатуры. Платформа автоматически определит, что в этом регистре полем объекта является измерение НаборСвойств, а полем вида – измерение ВидСвойства .

Занятие 15 Рис. 15.11. Описание источника видов характеристик Поэтому единственное, что нам останется указать самостоятельно, что значения свойств хранятся в ресурсе Значение. В результате описание характеристик для справочника ВариантыНоменклатуры будет выглядеть следующим образом (рис. 15.12) .

–  –  –

Доработка объектов конфигурации Итак, мы создали новые объекты конфигурации и задали их основные свойства, необходимые для реализации нашей задачи .

Но, как мы дальше увидим, не все свойства нас полностью устраивают. И вообще при разработке невозможно предусмотреть все заранее. Часто какие-то недочеты становятся видны лишь в процессе работы. То есть, увидев промежуточный результат в режиме 1С:Предприятие, важно уметь оценить недостатки и исправить их прямо по ходу работы .

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

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

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

Поэтому проигнорируем появившееся системное сообщение об отсутствии привязки созданных нами объектов к подсистемам .

Справочник «Варианты номенклатуры»

В режиме «1С:Предприятие»

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

Сначала мы хотим создать набор свойств для элемента номенклатуры Кабель электрический .

В разделе Учет материалов откроем справочник Номенклатура и его элемент Кабель электрический из группы Материалы Прочее .

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

Для этого выполним команду Варианты номенклатуры для перехода к списку, где будут храниться наборы свойств элементов номенклатуры (рис. 15.13) .

Занятие 15

Рис. 15.13. Список вариантов номенклатуры

Открывшаяся форма списка вариантов номенклатуры не совсем нас устраивает – столбцы Код и Владелец явно лишние .

Код нового варианта номенклатуры генерируется автоматически и ни о чем пользователю не говорит .

Владелец варианта номенклатуры отражен в заголовке формы и тоже в списке не имеет смысла .

Чтобы сделать эти колонки невидимыми, нам нужно создать форму списка справочника ВариантыНоменклатуры и при ее создании проанализировать, откуда она открывается (это можно понять по значению параметра формы Отбор) .

Если установлен отбор по владельцу (то есть она открывается из списка номенклатуры), то мы будем в ней скрывать колонки Код и Владелец .

486 1С:Предприятие 8.3. Практическое пособие разработчика Если же форма открывается другими способами, то эти колонки могут понадобиться, поэтому просто удалить их из формы было бы неправильно .

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

В режиме «Конфигуратор»

Вернемся в конфигуратор и устраним недостатки формы списка .

Для создания формы откроем окно редактирования объекта конфигурации Справочник ВариантыНоменклатуры, перейдем на закладку Формы, нажмем кнопку открытия и создадим основную форму списка (рис. 15.14) .

–  –  –

нужно событие формы в целом) и двойным щелчком мыши откроем палитру свойств этого элемента .

Прокрутив вниз список свойств формы, найдем событие ПриСозданииНаСервере и нажмем кнопку открытия (рис. 15.15) .

–  –  –

В модуле формы будет создан обработчик события формы ПриСозданииНаСервере, в который мы внесем следующий текст (листинг 15.1) .

листинг 15.1. Обработчик события формы «ПриСозданииНаСервере()»

Если Параметры.Отбор.Свойство("Владелец") Тогда Элементы.Код.Видимость = Ложь;

КонецЕсли;

Прокомментируем этот код .

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

К элементу этой коллекции Отбор мы обращаемся по имени .

Используя метод Свойство() структуры элементов отбора, мы определяем, установлен ли отбор по полю Владелец .

488 1С:Предприятие 8.3. Практическое пособие разработчика Если такой отбор установлен, то мы устанавливаем видимость поля Код в значение Ложь, то есть скрываем это поле. Здесь Элементы – это свойство управляемой формы, которое позволяет получить доступ ко всем элементам формы .

В режиме «1С:Предприятие»

Проверим результат изменений в режиме 1С:Предприятие .

Форма списка вариантов номенклатуры будет иметь следующий вид (рис. 15.16) .

–  –  –

Мы видим, что добились желаемого результата (см. рис. 15.13): было три колонки, а теперь только одна – Наименование .

Теперь нажмем кнопку Создать, чтобы создать новый набор свойств для элемента номенклатуры .

Откроется форма элемента справочника ВариантыНоменклатуры (рис. 15.17) .

–  –  –

Эта форма сгенерирована системой автоматически.

Но в ней также есть недостатки:

заголовок формы должен быть задан в единственном числе;

лишние поля Код и Владелец;

команду перехода к подчиненной информации нужно переименовать в более понятную .

Вернемся в конфигуратор и исправим их .

В режиме «Конфигуратор»

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

Для этого в окне редактирования объекта конфигурации Справочник ВариантыНоменклатуры на закладке Основные зададим Представление объекта в единственном числе как Вариант номенклатуры (рис. 15.18) .

–  –  –

Это свойство будет использоваться в интерфейсе «1С:Предприятия»

как заголовок формы элемента справочника .

Во-вторых, нужно убрать поля Код и Владелец из этой формы .

490 1С:Предприятие 8.3. Практическое пособие разработчика

–  –  –

Поэтому в окне редактирования объекта конфигурации Регистр сведений ЗначенияСвойствНоменклатуры на закладке Основные зададим Представление списка как Состав варианта номенклатуры (рис. 15.20) .

Это свойство будет использоваться в интерфейсе «1С:Предприятия»

как заголовок формы списка регистра .

В режиме «1С:Предприятие»

Проверим результат изменений в режиме 1С:Предприятие .

Итак, в разделе Учет материалов откроем справочник Номенклатура и его элемент Кабель электрический из группы Материалы Прочее .

В форме элемента выполним команду Варианты номенклатуры для перехода к списку наборов свойств данного элемента номенклатуры .

Пока этот список пуст .

Нажмем кнопку Создать. Теперь в открывшейся форме варианта номенклатуры нас все устраивает .

Регистр сведений «Значения свойств номенклатуры»

В режиме «1С:Предприятие»

Создадим вариант номенклатуры Белые кабели (рис. 15.21) .

Рис. 15.21. Форма элемента справочника «Вариант номенклатуры»

Выполним команду Состав варианта номенклатуры для перехода к составу редактируемого варианта номенклатуры .

подскАзкА Как показывает опыт многих читателей, при выполнении данного занятия может возникнуть проблема – в панели навигации формы 492 1С:Предприятие 8.3. Практическое пособие разработчика варианта номенклатуры не видна команда для перехода к связанным записям регистра сведений ЗначенияСвойствНоменклатуры (Состав варианта номенклатуры). В этом случае, скорее всего, вы забыли установить свойство Ведущее для измерения этого регистра НаборСвойств, имеющего тип СправочникСсылка.ВариантыНоменклатуры .

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

Если новый вариант номенклатуры еще не записан, то появится вопрос о записи данных, на который мы ответим утвердительно (рис. 15.22) .

–  –  –

После этого откроется форма списка регистра Значения свойств номенклатуры, которая также генерируется по умолчанию (рис. 15.23) .

Рис. 15.23. Форма списка регистра «Состав варианта номенклатуры»

–  –  –

лишняя колонка НаборСвойств .

Вернемся в конфигуратор и устраним недостатки формы списка .

В режиме «Конфигуратор»

Во-первых, название колонки Вид свойства лучше переименовать в Свойство .

Для этого в окне редактирования объекта конфигурации Регистр сведений ЗначенияСвойствНоменклатуры на закладке Данные откроем палитру свойств измерения ВидСвойства и зададим его Синоним как Свойство (рис. 15.24) .

Рис. 15.24. Установка синонима для измерения регистра Во-вторых, поскольку регистр имеет ведущее измерение НаборСвойств типа СправочникСсылка.ВариантыНоменклатуры, поле 494 1С:Предприятие 8.3. Практическое пособие разработчика Набор свойств – лишнее, так как владелец данного набора свойств отражен в заголовке формы .

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

Для создания этого обработчика откроем окно редактирования объекта конфигурации Регистр сведений ЗначенияСвойствНоменклатуры, перейдем на закладку Формы, нажмем кнопку открытия и создадим основную форму списка .

Затем создадим для формы обработчик события формы ПриСозданииНаСервере, в который мы внесем следующий текст (листинг 15.2) .

листинг 15.2. Обработчик события формы «ПриСозданииНаСервере()»

Если Параметры.Отбор.Свойство("НаборСвойств") Тогда Элементы.НаборСвойств.Видимость = Ложь;

КонецЕсли;

Этот код аналогичен коду, приведенному выше в листинге 15.1, поэтому в комментариях не нуждается .

В режиме «1С:Предприятие»

Проверим результат изменений в режиме 1С:Предприятие .

В результате форма списка регистра Состав варианта номенклатуры примет вид (рис. 15.25) .

–  –  –

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

Рис. 15.26. Форма записи регистра «Значения свойств номенклатуры»

Эта форма сгенерирована системой автоматически.

Но в ней также есть недостатки:

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

Вернемся в конфигуратор и исправим их .

В режиме «Конфигуратор»

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

Для этого в окне редактирования объекта конфигурации Регистр ЗначенияСвойствНоменклатуры на закладке Основные сведений зададим Представление записи как Свойство и значение (рис. 15.27) .

Это свойство будет использоваться в интерфейсе «1С:Предприятия»

как заголовок формы записи регистра .

Во-вторых, нужно убрать поле НаборСвойств из этой формы .

Для этого в окне редактирования объекта конфигурации Регистр сведений ЗначенияСвойствНоменклатуры перейдем на закладку Формы, нажмем кнопку открытия и создадим основную форму записи .

496 1С:Предприятие 8.3. Практическое пособие разработчика Рис. 15.27. Установка представления записи регистра В окне структуры элементов формы выделим этот элемент и, нажав кнопку Удалить в командной панели, удалим его из формы .

В режиме «1С:Предприятие»

Проверим результат изменений в режиме 1С:Предприятие. В результате форма записи регистра ЗначенияСвойствНоменклатуры примет вид (рис. 15.28) .

–  –  –

Создание видов характеристик номенклатуры В режиме «1С:Предприятие»

Теперь создадим различные варианты номенклатуры в режиме 1С:Предприятие .

Итак, в разделе Учет материалов откроем справочник Номенклатура и его элемент Кабель электрический из группы Материалы Прочее .

В форме элемента номенклатуры выполним команду Варианты номенклатуры для перехода к списку наборов свойств данного элемента номенклатуры .

В форме списка вариантов номенклатуры откроем набор свойств Белые кабели, который мы создали ранее .

В форме варианта номенклатуры выполним команду Состав варианта номенклатуры для перехода к составу редактируемого варианта номенклатуры. Этот список пока пуст .

Нажмем кнопку Создать. В открывшейся форме (см. рис. 15.28) создадим свойство Цвет со значением Белый. Для этого нажмем кнопку выбора в поле Свойство и в выпадающем списке нажмем на ссылку Показать все .

Измерение ВидСвойства(Свойство) регистра ЗначенияСвойствНоменклатуры имеет тип ПланВидовХарактеристикСсылка.СвойстваНоменклатуры. Поэтому перед нами появится форма выбора этого плана видов характеристик. Список видов характеристик пока пуст .

Нажмем кнопку Создать. В открывшемся окне формы элемента плана видов характеристик введем наименование вида характеристики – Цвет. Тип значения этого вида характеристики оставим по умолчанию – Дополнительные свойства номенклатуры (рис. 15.29) .

Обратите внимание, что в форме элемента плана видов характеристик (см. рис. 15.29) и в форме элемента справочника дополнительных характеристик номенклатуры (см. рис. 15.30) также есть лишнее поле Код. Кроме того, заголовок этих форм желательно задать в единственном числе .

498 1С:Предприятие 8.3. Практическое пособие разработчика

Рис. 15.29. Создание вида характеристики в плане видов характеристик

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

Нажмем Записать и закрыть. В окне выбора плана видов характеристик появится созданный нами вид характеристики .

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

Нажмем кнопку выбора в поле Значение и в выпадающем списке нажмем кнопку Создать (+) .

Занятие 15 Ресурс Значение регистра ЗначенияСвойствНоменклатуры имеет тип Характеристика.СвойстваНоменклатуры. Это составной тип данных, который описан в свойстве Тип значения характеристик плана видов характеристик СвойстваНоменклатуры .

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

В открывшемся окне формы элемента дополнительных свойств номенклатуры введем тип значения Белый, в поле Владелец оставим имеющееся значение – Цвет (рис. 15.30) .

Рис. 15.30. Создание дополнительных свойств номенклатуры Нажмем Записать и закрыть .

Мы вернемся в форму записи состава варианта номенклатуры с заголовком Свойство и значение и увидим там созданное нами свойство Цвет со значением Белый (рис. 15.31) .

500 1С:Предприятие 8.3. Практическое пособие разработчика Рис. 15.31. Свойство и значение в составе варианта номенклатуры Нажмем Записать и закрыть. Мы вернемся в форму списка состава варианта номенклатуры .

Создадим еще одно свойство – Сечение, мм2 – в составе варианта номенклатуры Белые кабели. Для этого повторим только что выполненные действия .

Нажмем кнопку Создать (рис. 15.32) .

Рис. 15.32. Создание нового свойства в составе варианта номенклатуры В открывшейся форме записи состава варианта номенклатуры нажмем кнопку выбора в поле Свойство и в выпадающем списке нажмем на ссылку Показать все .

В форме выбора плана видов характеристик нажмем кнопку Создать .

В открывшемся окне формы элемента плана видов характеристик введем наименование вида характеристики – Сечение, мм2 и выберем Тип значения этого вида характеристики – Число, длина 15, точность 3 (рис. 15.33) .

Занятие 15

Рис. 15.33. Создание вида характеристики в плане видов характеристик

Нажмем Записать и закрыть. В окне выбора плана видов характеристик появится созданный нами вид характеристики .

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

Введем число 2,5 в поле Значение (рис. 15.34) .

Рис. 15.34. Свойство и значение в составе варианта номенклатуры

Нажмем Записать и закрыть. Мы вернемся в форму списка состава варианта номенклатуры .

Итак, мы видим два свойства и их значения, которые мы создали для варианта номенклатуры Белые кабели (рис. 15.35) .

Теперь аналогичным образом создадим набор свойств для элемента справочника Номенклатура – Шланг резиновый .

Этот набор свойств будет называться Польша (рис. 15.36) и состоять из следующих свойств (рис.

15.37):

Цвет – Черный;

Производитель – Fagumit .

502 1С:Предприятие 8.3. Практическое пособие разработчика Рис. 15.35. Свойства и значения в составе варианта номенклатуры

–  –  –

При создании свойства Цвет выберем его из уже имеющихся свойств в плане видов характеристик .

Значение этого вида характеристики – Черный, сначала добавим в справочник дополнительных свойств номенклатуры и затем выберем из него .

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

Значение этого вида характеристики – Fagumit, сначала добавим в справочник дополнительных свойств номенклатуры и затем выберем из него .

Теперь посмотрим на все, что мы создали, не с точки зрения пользователя, а с точки зрения разработчика .

Занятие 15 Рис. 15.37. Свойства и значения в составе варианта номенклатуры «Польша»

Перейдем в главное меню программы. Для этого нажмем кнопку с пиктограммой в виде черного треугольника, расположенную в панели системных команд приложения рядом с символом «1С» .

Выполним команду главного меню Все функции. Поочередно откроем все объекты конфигурации, в которых хранится информация о созданных нами характеристиках номенклатуры .

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

В плане видов характеристик Свойства номенклатуры хранятся созданные нами виды характеристик номенклатуры:

Цвет, тип значения СправочникСсылка.ДополнительныеСвойстваНоменклатуры;

Сечение, мм2, тип значения Число;

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

В справочнике Дополнительные свойства номенклатуры хранятся значения этих видов характеристик (за исключением вида характеристики Сечение типа Число). А в регистре сведений ЗначенияСвойствНоменклатуры хранятся соответствия видов характеристик и их значений в разрезе наборов свойств .

Взаимодействие этих объектов конфигурации представлено на следующей схеме (рис. 15.38) .

504 1С:Предприятие 8.3. Практическое пособие разработчика Рис. 15.38. Объекты конфигурации, в которых хранится информация о характеристиках номенклатуры Доработка учетных механизмов Итак, мы добавили возможность указывать произвольные характеристики для номенклатуры и создали несколько таких характеристик – вариантов номенклатуры .

Но это лишь часть работы. Теперь хотелось бы иметь возможность еще и учитывать номенклатуру в разрезе этих характеристик .

А именно:

приходовать товар, указывая характеристики;

расходовать товар, указывая характеристики;

Занятие 15 получать отчеты не просто по номенклатуре, а по номенклатуре с определенными характеристиками .

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

Регистр «Остатки материалов»

В режиме «Конфигуратор»

Для обеспечения учета материалов по значениям характеристик необходимо изменить структуру регистра накопления ОстаткиМатериалов, чтобы хранить в нем данные еще и в разрезе наборов свойств номенклатуры .

Для этого откроем окно редактирования объекта конфигурации Регистр накопления ОстаткиМатериалов и на закладке Данные добавим в него новое измерение НаборСвойств с типом СправочникСсылка.ВариантыНоменклатуры (рис. 15.39) .

Рис. 15.39. Новое измерение «НаборСвойств»

506 1С:Предприятие 8.3. Практическое пособие разработчика Документ «Приходная накладная»

В режиме «Конфигуратор»

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

Для этого откроем окно редактирования объекта конфигурации Документ ПриходнаяНакладная и на закладке Данные добавим в табличную часть документа новый реквизит НаборСвойств с типом СправочникСсылка.ВариантыНоменклатуры (рис. 15.40) .

Рис. 15.40. Новый реквизит «НаборСвойств»

Занятие 15 У этого реквизита необходимо заполнить свойство Связи параметров выбора, чтобы после выбора номенклатуры в этом свойстве выбирать только среди тех наборов свойств, которые относятся к данной номенклатуре .

Найдем в палитре свойств свойство Связи параметров выбора и нажмем кнопку выбора .

Перенесем из списка доступных реквизитов в список параметров реквизит Материалы.Материал (рис. 15.41) .

Рис. 15.41. Связи параметров выбора

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

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

Для этого перейдем на закладку Формы и двойным щелчком мыши на строке ФормаДокумента в списке форм откроем форму документа .

Затем в правом верхнем окне редактора форм на закладке Реквизиты раскроем реквизит формы Объект .

Мы видим, что он содержит все реквизиты документа ПриходнаяНакладная .

508 1С:Предприятие 8.3. Практическое пособие разработчика Найдем в табличной части реквизит НаборСвойств и с помощью мыши перетащим его в окно элементов формы, расположенное слева в верхней части редактора форм, в таблицу Материалы .

Новый элемент расположим в структуре элементов формы после поля Материал (рис. 15.42) .

Рис. 15.42. Изменение формы документа «Приходная накладная»

Обратите внимание, что в открывшейся палитре свойств элемента формы НаборСвойств в свойстве ПутьКДанным уже указан реквизит табличной части НаборСвойств, так как мы перетаскивали реквизит в форму с помощью мыши, и оно заполнилось автоматически .

Свойство ПутьКДанным устанавливает связь элемента формы с реквизитом формы, то есть с отображаемыми данными. Это свойство обязательно должно быть заполнено, иначе элемент формы не будет показан!

пРиМеЧАние При добавлении элемента формы с помощью кнопки Добавить свойство ПутьКДанным, устанавливающее связь элемента с реквизитом формы, необходимо заполнять вручную .

В заключение в окне редактирования объекта конфигурации Документ ПриходнаяНакладная на закладке Прочее откроем модуль объекта .

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

Занятие 15 листинг 15.3. Фрагмент процедуры «ОбработкаПроведения()»

… // регистр ОстаткиМатериалов Приход … Движение.Материал = ТекСтрокаМатериалы.Материал;

Движение.НаборСвойств = ТекСтрокаМатериалы.НаборСвойств;

Движение.Склад = Склад;

… Документ «Оказание услуги»

В режиме «Конфигуратор»

Теперь аналогичным образом доработаем документ ОказаниеУслуги .

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

У этого реквизита заполним свойство Связи параметров выбора .

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

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

Новый элемент расположим в структуре элементов формы после поля Номенклатура .

В заключение в окне редактирования объекта конфигурации Документ ОказаниеУслуги на закладке Прочее откроем модуль объекта .

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

510 1С:Предприятие 8.3. Практическое пособие разработчика листинг 15.4. Фрагмент процедуры «ОбработкаПроведения()»

… // регистр ОстаткиМатериалов Расход … Движение.Материал = ВыборкаДетальныеЗаписи.Номенклатура;

Движение.НаборСвойств = ВыборкаДетальныеЗаписи.НаборСвойств;

Движение.Склад = Склад;

… Поскольку на предыдущем занятии мы оптимизировали процедуру проведения документа и получали все данные документа с помощью запроса, то в текст запроса нужно также добавить строки для получения нового реквизита документа (листинг 15.5) .

листинг 15.5. Фрагмент процедуры «ОбработкаПроведения()»

… Запрос = Новый Запрос;

// Укажем, какой менеджер временных таблиц использует этот запрос Запрос.МенеджерВременныхТаблиц = МенеджерВТ;

–  –  –

| ЕСТЬNULL(СтоимостьМатериаловОстатки.СтоимостьОстаток, 0) КАК Стоимость, | ЕСТЬNULL(ОстаткиМатериаловОстатки.КоличествоОстаток, 0) КАК Количество |ИЗ | НоменклатураДокумента КАК НоменклатураДокумента … Кроме этого, понадобится изменить последний запрос, который при оперативном проведении проверяет, не появились ли отрицательные остатки. Теперь мы будем получать остатки не «вообще» для номенклатуры из табличной части документа, а для номенклатуры именно с тем набором свойств, который указан в строках документа (листинг 15.6) .

листинг 15.6. Контроль отрицательных остатков при оперативном проведении … Запрос3.Текст = "ВЫБРАТЬ | ОстаткиМатериаловОстатки.Материал, | ОстаткиМатериаловОстатки.НаборСвойств, | ОстаткиМатериаловОстатки.КоличествоОстаток |ИЗ | РегистрНакопления.ОстаткиМатериалов.Остатки(, (Материал, НаборСвойств) В | (ВЫБРАТЬ | НоменклатураДокумента.Номенклатура, | НоменклатураДокумента.НаборСвойств | ИЗ | НоменклатураДокумента) И Склад = &Склад) | КАК ОстаткиМатериаловОстатки |ГДЕ | ОстаткиМатериаловОстатки.КоличествоОстаток 0";

Запрос3.УстановитьПараметр("Склад", Склад);

РезультатЗапроса = Запрос3.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Сообщение = Новый СообщениеПользователю();

Сообщение.Текст = "Не хватает " + Строка(- ВыборкаДетальныеЗаписи.КоличествоОстаток) + " единиц материала """ + ВыборкаДетальныеЗаписи.Материал + """" + " из набора свойств """ + ВыборкаДетальныеЗаписи.НаборСвойств + """";

Сообщение.Сообщить();

Отказ = Истина;КонецЦикла;…512 1С:Предприятие 8.3. Практическое пособие разработчика

Приход/расход номенклатуры с учетом характеристик В режиме «1С:Предприятие»

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

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

Затем скопируем первую строку документа и укажем, что был закуплен еще и черный электрический кабель в количестве 3 шт .

(в процессе ввода нам придется создать еще один набор свойств для электрического кабеля – Черные кабели, у которого Цвет – Черный и Сечение – 2,5), рис. 15.43 .

–  –  –

Нажмем Провести и, выполнив команду Остатки материалов в панели навигации формы документа, проверим движения документа по регистру ОстаткиМатериалов (рис. 15.46) .

Рис. 15.46. Движения документа «Оказание услуги № 1»

по регистру «Остатки материалов»

514 1С:Предприятие 8.3. Практическое пособие разработчика Отчет, использующий характеристики Для полного завершения картины мы создадим отчет, который будет показывать нам наличие материалов с теми или иными свойствами .

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

Рис. 15.47. Результат отчета

Коротко говоря, набором данных для системы компоновки данных будет довольно простой запрос к регистру ОстаткиМатериалов .

А свойства вариантов номенклатуры платформа задействует в этом отчете автоматически на основании того описания, которое мы создали у справочника ВариантыНоменклатуры (см. раздел «Описание характеристик вариантов номенклатуры» на стр. 481) .

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

–  –  –

Запрос для набора данных В качестве источника данных для запроса выберем виртуальную таблицу регистра накопления ОстаткиМатериалов.ОстаткиИОбороты .

Из этой таблицы выберем следующие поля (рис. 15.48):

Материал, НаборСвойств, КоличествоНачальныйОстаток, КоличествоПриход, КоличествоРасход, КоличествоКонечныйОстаток .

–  –  –

На этом создание запроса закончено. Нажмем ОK .

516 1С:Предприятие 8.3. Практическое пособие разработчика Ресурсы Приступим к редактированию схемы компоновки данных .

Прежде всего, на закладке Ресурсы выберем все доступные ресурсы (рис. 15.50) .

–  –  –

Настройки Перейдем на закладку Настройки. Создадим структуру отчета – добавим группировку Детальные записи .

Затем на закладке Выбранные поля выберем те поля, которые будут выводиться в отчет: Материал, НаборСвойств, НачальныйОстаток, Приход, Расход и КонечныйОстаток (рис. 15.51) .

Рис. 15.51. Группировки и поля отчета Занятие 15 Затем перейдем на закладку Другие настройки и зададим заголовок отчета – Остатки материалов по свойствам .

Чтобы иметь возможность протестировать наш отчет, включим настройку Отбор в состав быстрых пользовательских настроек .

Для этого нажмем кнопку Свойства элемента пользовательских настроек, расположенную вверху в командной панели окна настроек .

В появившемся окне мы можем редактировать состав пользовательских настроек отчета. Установим признак использования для настройки Отбор и оставим предложенное для нее по умолчанию свойство Режим редактирования в значении Быстрый (рис. 15.52) .

Рис. 15.52. Состав пользовательских настроек

В заключение определим, в каких подсистемах будет отображаться наш отчет .

Закроем конструктор схемы компоновки данных и в окне редактирования объекта конфигурации Отчет ОстаткиМатериаловПоСвойствам перейдем на закладку Подсистемы .

Отметим в списке подсистем конфигурации подсистемы Учет материалов и Бухгалтерия .

На этом создание отчета завершено .

518 1С:Предприятие 8.3. Практическое пособие разработчика В режиме «1С:Предприятие»

Запустим «1С:Предприятие» в режиме отладки и посмотрим, какие результаты можно получить с помощью нашего отчета .

В разделе Учет материалов выполним команду открытия отчета Остатки материалов по свойствам (рис. 15.53) .

–  –  –

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

Сначала посмотрим, какие у нас есть материалы с сечением 2,5 мм .

Для этого в поле настройки Отбор нажмем кнопку выбора (см. рис. 15.53). В появившемся окне Редактирование отбора слева мы видим список доступных полей отчета .

Раскроем поле Набор свойств (рис. 15.54) .

Обратите внимание, что к стандартным реквизитам справочника ВариантыНоменклатуры система компоновки данных добавила все характеристики, которые определены нами для различных наборов свойств в базе данных: Производитель, Сечение и Цвет. Таким образом, отбор в отчете по значениям каких-либо характеристик является достаточно простым и интуитивно понятным .

Чтобы узнать, какие у нас есть материалы с сечением 2,5 мм, достаточно выбрать поле Сечение, мм2 и задать для него условие равенства 2,5 .

Нажмем ОК. В окне отчета нажмем Сформировать и получим следующий результат (рис. 15.55) .

Занятие 15

–  –  –

Затем посмотрим, какие у нас есть материалы черного цвета. Для этого в поле настройки Отбор еще раз нажмем кнопку выбора и удалим прежний отбор кнопкой Удалить над списком условий отбора .

Затем двойным щелчком мыши выберем из списка доступных полей поле Цвет. Затем в поле Значение нажмем кнопку выбора и выберем из списка дополнительных свойств номенклатуры значение Черный (рис. 15.56) .

520 1С:Предприятие 8.3. Практическое пособие разработчика

–  –  –

Нажмем ОК .

В окне отчета нажмем Сформировать и получим следующий результат (рис. 15.59) .

Рис. 15.59. Результат отчета 522 1С:Предприятие 8.3. Практическое пособие разработчика Таким образом, мы убедились в том, что при использовании данной логической схемы мы имеем теперь возможность вести учет материалов в произвольном количестве разрезов свойств и их значений .

Следует заметить, что пример, рассмотренный нами в этой главе, не является законченным решением для данной конфигурации .

Мы лишь продемонстрировали возможность ведения такого учета .

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

Контрольные вопросы ; Для чего предназначен объект конфигурации «План видов характеристик»?

; В чем принципиальное отличие плана вида характеристик от справочника?

; Что такое тип значения характеристик?

; Зачем нужны дополнительные значения характеристик?

; Как, используя план видов характеристик, организовать учет по переменному количеству характеристик?

; Как создать план видов характеристик?

; Что такое связь по параметрам выбора?

; Как изменить заголовок формы?

; Как скрывать элементы формы с подчиненной информацией при ее создании?

; Как описать характеристики в метаданных?

; Как использовать характеристики при выполнении отчета?

Занятие 16

–  –  –

пРодолжительность Ориентировочная продолжительность занятия – 1 час 50 минут .

План видов характеристик в бухгалтерском учете

Добавление плана видов характеристик

Что такое «План счетов»

Добавление плана счетов

Что такое регистр бухгалтерии

Добавление регистра бухгалтерии

Доработка приходной накладной

Доработка документа «Оказание услуги»

Оборотно-сальдовая ведомость

В режиме «Конфигуратор»

Запрос для набора данных

Ресурсы

Параметры

Настройки

В режиме «1С:Предприятие»

Контрольные вопросы

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

Для организации бухгалтерского учета мы используем уже знакомый нам объект конфигурации – план видов характеристик и два новых объекта – План счетов и Регистр бухгалтерии .

Регистр бухгалтерии будет использоваться нами для накопления данных о совершенных хозяйственных операциях .

С помощью плана счетов мы будем описывать счета, в разрезе которых ведется учет, а план видов характеристик будет служить для описания объектов аналитического учета, в разрезе которых должен вестись учет на счетах .

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

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

Бухгалтерский учет, как правило, подразумевает ведение аналитического учета на большинстве счетов. Для обозначения разрезов аналитического учета мы будем использовать термин виды субконто .

То есть на каждом счете учет может вестись в разрезе нескольких видов субконто .

А для обозначения конкретных объектов аналитического учета мы будем использовать термин субконто .

Например, на 41 счете (Товары) учет ведется обычно в разрезе Номенклатуры и Складов, которые являются видами субконто .

Занятие 16 А вот конкретная номенклатура Паста шоколадная и конкретный склад Основной, указанные для некоторой проводки по 41 счету, – это субконто .

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

Добавление плана видов характеристик В режиме «Конфигуратор»

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

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

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

Затем на закладке Владельцы укажем, что этот справочник будет подчинен плану видов характеристик ВидыСубконто .

Для этого на закладке Владельцы нажмем кнопку Редактировать элемент списка и выберем в качестве владельца справочника план видов характеристик ВидыСубконто (рис. 16.1) .

Закроем окно редактирования справочника и вернемся к нашему плану видов характеристик .

На закладке Основные установим свойство Тип значения характеристик. Нажмем кнопку выбора и зададим составной тип данных следующим образом (рис.

16.2):

СправочникСсылка.Клиенты, СправочникСсылка.Номенклатура, СправочникСсылка.Субконто .

526 1С:Предприятие 8.3. Практическое пособие разработчика Рис. 16.1. Окно редактирования справочника «Субконто»

–  –  –

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

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

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

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

Рис. 16.3. Предопределенные виды характеристик

Нажимая кнопку Добавить, создадим предопределенный вид субконто Материалы с кодом 000000001 и типом СправочникСсылка.Номенклатура .

Затем создадим вид субконто Клиенты с кодом 000000002 и типом СправочникСсылка.Клиенты .

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

528 1С:Предприятие 8.3. Практическое пособие разработчика Что такое «План счетов»

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

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

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

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

Например, законодательно утвержденный план счетов для ведения бухучета в России имеет следующий вид (рис. 16.4) .

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

Для описания используемых субконто система создает в плане счетов специальную табличную часть ВидыСубконто, которая не видна в конфигураторе (но доступна средствами встроенного языка) .

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

Также существует возможность определить несколько видов учета субконто (например, суммовой, валютный или количественный) .

Виды учета субконто задаются при помощи подчиненных объектов конфигурации признак учета субконто .

УзнАй больше!

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

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

Добавление плана счетов В режиме «Конфигуратор»

Приступим к созданию плана счетов ООО «На все руки мастер» .

Как мы говорили в начале этого занятия, бухгалтерский учет в нашем ООО «На все руки мастер» сильно упрощен.

Поэтому план счетов, по которому работает бухгалтерия, содержит всего четыре счета:

Товары, РасчетыСПоставщиками,

–  –  –

Дебиторская задолженность .

530 1С:Предприятие 8.3. Практическое пособие разработчика Добавим новый объект конфигурации План счетов. Присвоим ему имя – Основной. Свойство Представление списка зададим как Основной план счетов. На закладке Подсистемы укажем, что план счетов будет отображаться в подсистеме Бухгалтерия. На закладке Данные выделим группу реквизитов Признаки учета и, нажав кнопку Добавить, создадим признак учета Количественный (рис. 16.5) .

Рис. 16.5. Создание реквизита плана счетов в группе «Признаки учета»

–  –  –

Рис. 16.6. Установка свойств «Субконто для плана счетов»

Затем откроем закладку Прочее.

Нажмем кнопку Предопределенные и создадим четыре предопределенных счета (при создании каждого счета, перед тем как нажать кнопку Добавить, нужно выделить корень структуры счетов – строку Счета):

Товары, код 41, активный, с количественным учетом в разрезе материалов (рис. 16.7) .

Рис. 16.7. Предопределенный счет «Товары»

532 1С:Предприятие 8.3. Практическое пособие разработчика РасчетыСПоставщиками, код 60, активный/пассивный (рис. 16.8) .

Рис. 16.8. Предопределенный счет «РасчетыСПоставщиками»

ДебиторскаяЗадолженность, код 62, активный/пассивный, в разрезе клиентов (рис. 16.9) .

–  –  –

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

УзнАй больше!

Для плана счетов можно установить свойство «Автопорядок по коду». Это свойство используется для того, чтобы указать системе, что упорядочивание по полю «Порядок» должно всегда подставляться в тех случаях, когда пользователь или разработчик выбирает упорядочивание по коду. Его нужно использовать прежде всего тогда, 534 1С:Предприятие 8.3. Практическое пособие разработчика

–  –  –

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

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

Измерения позволяют разделять ведение учета (например, используя измерение Организация, можно вести учет в разрезе нескольких юридических лиц) .

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

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

Например, запись регистра может содержать дополнительные поля для указания корреспондирующих счетов, сумм, объектов аналитического учета (субконто), количества, вида валюты и т. д .

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

УзнАй больше!

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

935 .

Добавление регистра бухгалтерии В режиме «Конфигуратор»

Создадим новый объект конфигурации Регистр бухгалтерии. Зададим его имя – Управленческий. Свойство Расширенное представление списка зададим как Движения в регистре Управленческий. Укажем, что с ним будет связан план счетов Основной. Установим флажок Корреспонденция (рис. 16.12) .

Рис. 16.12. Основные свойства регистра бухгалтерии 536 1С:Предприятие 8.3. Практическое пособие разработчика Флажок Корреспонденция будет говорить о том, что создаваемый нами регистр поддерживает корреспонденцию. Это означает, что каждая запись регистра имеет дебетовую и кредитовую часть, что позволит нам получать информацию не только об остатках и оборотах по счетам, но и о корреспонденциях между счетами .

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

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

Теперь перейдем на закладку Данные и создадим два ресурса:

Сумма, длина 15, точность 2, Балансовый;

Количество, длина 15, точность 3, Небалансовый, признак учета – Количественный, признак учета субконто – Количественный (рис. 16.13) .

Рис. 16.13. Свойства ресурса «Количество» регистра бухгалтерии Занятие 16 В заключение сделаем видимой команду для открытия списка регистра в разделе Бухгалтерия и расположим ее после всех созданных нами ранее регистров .

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

На этом создание нашего регистра бухгалтерии завершено .

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

Доработка приходной накладной Что нас ждет дальше?

Сначала мы доработаем оба наши документа (ПриходнаяНакладная и ОказаниеУслуги) так, чтобы они «поставляли» данные не только для регистров накопления, но и для регистра бухгалтерии .

Затем мы создадим бухгалтерский отчет Оборотно-сальдовая ведомость, который будет показывать нам состояние товародвижения в ООО «На все руки мастер», основываясь на данных регистра бухгалтерии .

При проведении наши документы будут создавать следующие бухгалтерские проводки – записи в регистре бухгалтерии (таблица 16.1) .

таблица 16.1. Проводки, создаваемые документами

–  –  –

Эти проводки мы отразим при создании движений документов в регистре бухгалтерии .

538 1С:Предприятие 8.3. Практическое пособие разработчика Итак, сначала изменим процедуру проведения документа ПриходнаяНакладная, а затем в режиме 1С:Предприятие перепроведем все эти документы, чтобы отработал новый, измененный нами алгоритм проведения документа ПриходнаяНакладная .

В режиме «Конфигуратор»

В окне редактирования объекта конфигурации Документ ПриходнаяНакладная перейдем на закладку Движения. В списке регистров отметим, что документ будет создавать теперь движения и по регистру бухгалтерии Управленческий. Перейдем на закладку Прочее и откроем модуль объекта. Откроем процедуру обработчика события ОбработкаПроведения. В самом конце цикла перед строкой КонецЦикла добавим строки кода, создающие движения регистра Управленческий (листинг 16.1) .

листинг 16.1. Движения документа «ПриходнаяНакладная» (фрагмент) // Регистр Управленческий Движение = Движения.Управленческий.Добавить();

Движение.СчетДт = ПланыСчетов.Основной.Товары;

Движение.СчетКт = ПланыСчетов.Основной.РасчетыСПоставщиками;

Движение.Период = Дата;

Движение.Сумма = ТекСтрокаМатериалы.Сумма;

Движение.КоличествоДт = ТекСтрокаМатериалы.Количество;

Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Материалы] = ТекСтрокаМатериалы.Материал;

Перед началом цикла установим свойство Записывать набора записей регистра Управленческий в значение Истина для записи изменений регистра в базу данных .

В результате процедура ОбработкаПроведения будет выглядеть следующим образом (листинг 16.2) .

листинг 16.2. Движения документа «ПриходнаяНакладная»

Процедура ОбработкаПроведения(Отказ, Режим) Движения.ОстаткиМатериалов.Записывать = Истина;

Движения.СтоимостьМатериалов.Записывать = Истина;

Движения.Управленческий.Записывать = Истина;

Для Каждого ТекСтрокаМатериалы Из Материалы Цикл

–  –  –

Движение.ВидДвижения = ВидДвиженияНакопления.Приход;

Движение.Период = Дата;

Движение.Материал = ТекСтрокаМатериалы.Материал;

Движение.НаборСвойств = ТекСтрокаМатериалы.НаборСвойств;

Движение.Склад = Склад;

Движение.Количество = ТекСтрокаМатериалы.Количество;

// Регистр Стоимость Материалов Приход Движение = Движения.СтоимостьМатериалов.Добавить();

Движение.ВидДвижения = ВидДвиженияНакопления.Приход;

Движение.Период = Дата;

Движение.Материал = ТекСтрокаМатериалы.Материал;

Движение.Стоимость = ТекСтрокаМатериалы.Сумма;

// Регистр Управленческий Движение = Движения.Управленческий.Добавить();

Движение.СчетДт = ПланыСчетов.Основной.Товары;

Движение.СчетКт = ПланыСчетов.Основной.РасчетыСПоставщиками;

Движение.Период = Дата;

Движение.Сумма = ТекСтрокаМатериалы.Сумма;

Движение.КоличествоДт = ТекСтрокаМатериалы.Количество;

Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Материалы] = ТекСтрокаМатериалы.Материал;

КонецЦикла;

КонецПроцедуры Прокомментируем этот код .

Как видите, движения для регистра бухгалтерии формируются таким же образом, как и для регистра накопления .

Но платформа (при создании таблицы хранения данных) добавила к созданным нами реквизитам регистра еще ряд полей, которые явились следствием использования плана счетов Основной .

Прежде всего, это поля СчетДт и СчетКт. В этих полях указываются счета, дебет и кредит которых затрагивает данная проводка .

Кроме этого, для измерений и ресурсов регистра, связанных с признаками учета, платформа создает пару полей для хранения значения каждого ресурса отдельно по дебету и отдельно по кредиту проводки – КоличествоДт и КоличествоКт. А также для счетов, по которым ведется учет в разрезе субконто, платформа создает коллекции СубконтоДт и СубконтоКт .

Если обратиться к таблице 16.1, то при проведении приходной накладной счетом по дебету должен быть счет Товары (41), а счетом по кредиту – счет РасчетыСПоставщиками (60) .

540 1С:Предприятие 8.3. Практическое пособие разработчика К счету мы обращаемся с помощью свойства глобального контекста ПланыСчетов. Оно предоставляет доступ ко всем планам счетов, созданным в конфигурации. Через точку от него мы указываем имя нужного нам плана счетов – Основной. А далее, тоже через точку, указываем имя предопределенного счета в этом плане счетов – Товары. Этот счет (и три других) мы создали в конфигураторе .

Так как количественный учет у нас ведется только для счета Товары (41), то поле регистра КоличествоДт заполняется количеством товара из табличной части документа. Поле регистра КоличествоКт не заполняется, так как по счету кредита проводки (РасчетыСПоставщиками) количественный учет не ведется .

Теперь рассмотрим последнюю строку цикла, в которой присваивается значение субконто дебета .

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

Обратиться к элементу коллекции можно, указав в квадратных скобках ссылку на соответствующий вид субконто (ПланыВидовХарактеристик.ВидыСубконто.Материалы) .

Другой способ – в явном виде указать имя предопределенного вида субконто через точку от коллекции субконто дебета .

Другими словами, запись Движение.СубконтоДт[ПланыВидовХаравносильна записи рактеристик.ВидыСубконто.Материалы] Движение.СубконтоДт.Материалы .

Коллекция регистра СубконтоКт не заполняется, так как по счету кредита проводки (РасчетыСПоставщиками) учет в разрезе субконто у нас не ведется .

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

Для этого откроем форму документа ПриходнаяНакладная. В левом верхнем окне перейдем на закладку Командный интерфейс. В разделе Занятие 16 Панель навигации раскроем группу Перейти и установим видимость для команды открытия регистра бухгалтерии Управленческий .

В режиме «1С:Предприятие»

Запустим «1С:Предприятие» в режиме отладки .

Платформа предупредит нас, что регистр бухгалтерии Управленческий и справочник Субконто не включены ни в одну подсистему. Проигнорируем это сообщение .

Откроем документ Приходная накладная № 1 и нажмем Провести .

Выполним команду перехода к регистру Управленческий и посмотрим, какие движения сформировал документ в регистре бухгалтерии (рис. 16.14, 16.15) .

Рис. 16.14. Движения документа «Приходная накладная № 1»

в регистре бухгалтерии «Управленческий»

Рис. 16.15. Движения документа «Приходная накладная № 1»

в регистре бухгалтерии «Управленческий»

Обратите внимание: поскольку на счете 60 (РасчетыСПоставщиками) отсутствует аналитика и ведется только суммовой учет, в записях движений регистра Субконто1Кт, Субконто2Кт и КоличествоКт не указаны .

542 1С:Предприятие 8.3. Практическое пособие разработчика После этого перепроведем документ Приходная накладная № 2 и убедимся, что он тоже формирует правильные проводки по регистру бухгалтерии Управленческий .

Теперь перейдем к более сложной задаче: добавлению движений по регистру Управленческий в документ ОказаниеУслуги .

Доработка документа «Оказание услуги»

Сначала мы изменим процедуру проведения документа ОказаниеУслуги, а затем в режиме 1С:Предприятие перепроведем все эти документы, чтобы отработал новый, измененный нами алгоритм проведения документов Оказание услуги .

В режиме «Конфигуратор»

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

Напомним, что бухгалтерия нашего ООО «На все руки мастер»

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

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

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

Откроем процедуру обработчика события ОбработкаПроведения .

Поскольку нас интересует только движение материалов, для внесения дополнений подойдет тело условия Если…, в котором мы формировали движения по регистрам ОстаткиМатериалов и СтоимостьМатериалов .

Добавим в конец условия, перед строкой КонецЕсли, движения по регистру бухгалтерии Управленческий (листинг 16.3) .

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

Занятие 16 листинг 16.3. Движения документа «ОказаниеУслуги» (фрагмент) … Если ВыборкаДетальныеЗаписи.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Материал Тогда // Регистр ОстаткиМатериалов Расход … // Регистр СтоимостьМатериалов Расход … // Регистр Управленческий // Первая проводка: Д 62(ДебиторскаяЗадолженность) – К 90 (Капитал) Розничная сумма Движение = Движения.Управленческий.Добавить();

Движение.СчетДт = ПланыСчетов.Основной.ДебиторскаяЗадолженность;

Движение.СчетКт = ПланыСчетов.Основной.Капитал;

Движение.Период = Дата;

Движение.Сумма = ВыборкаДетальныеЗаписи.СуммаВДокументе;

Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Клиенты] = Клиент;

// Вторая проводка: Д 90 (Капитал) – К 41 (Товары) – себестоимость Движение = Движения.Управленческий.Добавить();

Движение.СчетДт = ПланыСчетов.Основной.Капитал;

Движение.СчетКт = ПланыСчетов.Основной.Товары;

Движение.Период = Дата;

Движение.Сумма = СтоимостьМатериала * ВыборкаДетальныеЗаписи.КоличествоВДокументе;

Движение.КоличествоКт = ВыборкаДетальныеЗаписи.КоличествоВДокументе;

Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Материалы] = ВыборкаДетальныеЗаписи.Номенклатура;

КонецЕсли;…

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

Теперь в самом начале процедуры установим свойство Записывать регистра бухгалтерии в значение Истина для записи изменений регистров в базу данных (листинг 16.4) .

листинг 16.4. Запись движений регистров Процедура ОбработкаПроведения(Отказ, Режим) Движения.ОстаткиМатериалов.Записывать = Истина;

Движения.СтоимостьМатериалов.Записывать = Истина;

Движения.Продажи.Записывать = Истина;

Движения.Управленческий.Записывать = Истина;

… 544 1С:Предприятие 8.3. Практическое пособие разработчика В заключение отредактируем командный интерфейс формы документа, чтобы в панели навигации формы иметь возможность переходить к списку записей регистра Управленческий, связанному с документом. Для этого откроем форму документа ОказаниеУслуги. В левом верхнем окне перейдем на закладку Командный интерфейс. В разделе Панель навигации раскроем группу Перейти и установим видимость для команды открытия регистра бухгалтерии Управленческий .

В режиме «1С:Предприятие»

Запустим «1С:Предприятие» в режиме отладки, откроем документ Оказание услуги № 1 и нажмем Провести .

Выполним команду перехода к регистру Управленческий и посмотрим, какие движения сформировал документ в регистре бухгалтерии (рис. 16.16, 16.17) .

–  –  –

Оборотно-сальдовая ведомость Теперь нам только осталось создать отчет для бухгалтерии предприятия «На все руки мастер», и наше знакомство с использованием регистра бухгалтерии будет закончено .

Единственный отчет, которым пользуется бухгалтерия нашего предприятия, – это отчет Оборотно-сальдовая ведомость (рис. 16.18) .

Рис. 16.18. Результат отчета

В режиме «Конфигуратор»

Для того чтобы его создать, откроем конфигуратор и добавим новый объект конфигурации Отчет с именем ОборотноСальдоваяВедомость. Создадим новую схему компоновки данных и добавим Набор данных – запрос. Откроем конструктор запроса .

Запрос для набора данных Бухгалтерский отчет Оборотно-сальдовая ведомость представляет собой таблицу, в строках которой перечислены все имеющиеся в плане счетов счета, а в колонках – начальное сальдо, оборот и конечное сальдо по дебету и кредиту каждого счета .

Поэтому нам для построения такого отчета понадобятся две исходные таблицы:

объектная (ссылочная) таблица плана счетов Основной;

виртуальная таблица регистра бухгалтерии Управленческий.ОстаткиИОбороты (рис. 16.19) .

546 1С:Предприятие 8.3. Практическое пособие разработчика

–  –  –

Из таблицы Основной мы выберем поле Ссылка, а из таблицы УправленческийОстаткиИОбороты возьмем следующие поля (рис. 16.20):

СуммаНачальныйРазвернутыйОстатокДт, СуммаНачальныйРазвернутыйОстатокКт, СуммаОборотДт, СуммаОборотКт, СуммаКонечныйРазвернутыйОстатокДт, СуммаКонечныйРазвернутыйОстатокКт .

–  –  –

Перейдем на закладку Связи и укажем, что из таблицы Основной мы будем выбирать все записи, а из таблицы регистра – только те, которые соответствуют условию связи (рис. 16.21) .

–  –  –

На этом создание запроса закончено, нажмем ОK .

Ресурсы Перейдем на закладку Ресурсы и с помощью кнопки Добавить все ресурсы () выберем все доступные ресурсы .

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

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

листинг 16.5. Выражение для расчета параметров «НачалоПериода»

и «КонецПериода»

&Период.ДатаНачала &Период.ДатаОкончания Поскольку бухгалтерские отчеты всегда формируются за определенный период, для параметра Период в колонке Использование укажем значение Всегда. В результате в отчетной форме не будет доступен признак использования отчетного периода (флажок слева от параметра), и параметр будет использоваться всегда, независимо от желания пользователя .

Таким образом, параметры компоновки данных примут вид (рис. 16.23) .

548 1С:Предприятие 8.3. Практическое пособие разработчика

Рис. 16.23. Параметры схемы компоновки данных

Заметим, что даты начала и конца стандартного периода также содержат и время. Однако здесь, в отличие от параметров НачалоПериода и КонецПериода, начальная дата имеет время 00:00:00, а конечная дата – 23:59:59. Таким образом, последний день включается в отчет, и не нужно использовать функцию КонецПериода() .

Настройки В заключение перейдем на закладку Настройки и создадим структуру отчета. Добавим группировку, содержащую детальные записи. Затем на закладке Выбранные поля выберем поле Счет, затем реквизит этого поля Наименование (для этого раскроем поле Счет), а также все остальные поля для вывода в отчет и разместим их в следующем порядке (рис.

16.24):

Рис. 16.24. Поля и группировки отчета Занятие 16 На закладке Другие настройки укажем заголовок отчета – Оборотно-сальдовая ведомость. Для параметра Расположение общих итогов по вертикали укажем значение Начало и конец .

Затем на закладке Параметры выберем для параметра Период значение из списка стандартных периодов – Этот месяц (рис. 16.25) .

Рис. 16.25. Создание быстрых настроек отчетного периода

Тем самым мы обеспечим, что при открытии формы отчета в настройке отчетного периода всегда будет указан текущий месяц .

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

В заключение определим, в каких подсистемах будет отображаться наш отчет .

Закроем конструктор схемы компоновки данных и в окне редактирования объекта конфигурации Отчет ОборотноСальдоваяВедомость перейдем на закладку Подсистемы .

Отметим в списке подсистем конфигурации подсистему Бухгалтерия .

550 1С:Предприятие 8.3. Практическое пособие разработчика В режиме «1С:Предприятие»

Запустим «1С:Предприятие» в режиме отладки и посмотрим, как работает отчет .

В разделе Бухгалтерия откроем отчет и нажмем Сформировать (рис. 16.26) .

–  –  –

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

Занятие 16

Контрольные вопросы

; Как использовать план видов характеристик для организации ведения бухгалтерского учета?

; Что такое субконто?

; Для чего предназначен объект конфигурации «План счетов»?

; Как создать план счетов?

; Для чего предназначен «Регистр бухгалтерии»?

; Как создать регистр бухгалтерии и настроить параметры учета?

; Как создать движения документа по регистру бухгалтерии средствами встроенного языка?

; Как создать отчет на основании данных из регистра бухгалтерии с помощью системы компоновки?

; Как задать стандартный период для выполнения отчета?

552 1С:Предприятие 8.3. Практическое пособие разработчика Занятие 17 План видов расчета, регистр расчета пРодолжительность Ориентировочная продолжительность занятия – 1 час .

Зачем нужен план видов расчета и регистр расчета?

Зависимость по базовому периоду

Вытеснение по периоду действия

Что такое план видов расчета

Добавление плана видов расчета

В режиме «Конфигуратор»

Что такое регистр расчета

Периодичность

Вытеснение по периоду действия

Зависимость по базовому периоду

Зависимость по периоду действия

Зависимость по периоду регистрации

Добавление регистра расчета

В режиме «1С:Предприятие»

Контрольные вопросы

554 1С:Предприятие 8.3. Практическое пособие разработчика На этом занятии мы познакомимся с объектами конфигурации План видов расчета и Регистр расчета и узнаем об основных понятиях, используемых при создании сложных периодических расчетов .

В конце занятия мы создадим план видов расчета и регистр расчета, на основе которых на следующем занятии продемонстрируем работу механизмов периодических расчетов .

Зачем нужен план видов расчета и регистр расчета?

На этом занятии мы рассмотрим, какие возможности для автоматизации сложных периодических расчетов предоставляет система «1С:Предприятие» .

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

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

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

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

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

Занятие 17 Зависимость по базовому периоду Это может быть влияние на исходные данные, используемые при расчете .

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

Причем поскольку оклад рассчитывается за некоторый период, при расчете премии нам интересно знать не значение оклада вообще, а сумму, начисленную в том периоде, который влияет на расчет премии. Такой период мы будем называть базовым, а подобную зависимость между видами расчета – зависимостью по базовому периоду .

В качестве примера рассмотрим начисление премии за апрель .

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

Допустим, общая сумма таких начислений составила 8 000 рублей – в этом случае премия должна быть начислена в размере 800 рублей (рис. 17.1) .

Рис. 17.1. Зависимость премии от оклада по базовому периоду 556 1С:Предприятие 8.3. Практическое пособие разработчика Вытеснение по периоду действия Это влияние может быть не на исходные данные, а на сам период, за который производится расчет .

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

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

Но кроме этого необходимо будет пересчитать и оклад сотрудника, исходя из того, что фактический период действия расчета Оклад стал теперь с 11.03.2013 по 31.03.2013 .

Такое влияние мы будем называть вытеснением по периоду действия .

В результате если за полный месяц работы сотруднику должно было быть начислено 9 300 рублей, то теперь, за фактический период работы, начисление составит 6 300 рублей (рис. 17.2) .

Рис. 17.2. Запись расчета «Невыход» вытесняет запись расчета «Оклад»

по периоду действия Занятие 17 Таким образом, исходя из двух видов взаимного влияния расчетов, можно сказать, что в общем случае с каждым видом расчета будет связано три периода: период действия, фактический период и базовый период .

Период действия является «запрашиваемым». То есть, указывая период действия, мы говорим: «Мы хотели бы, чтобы результат действовал в этом периоде» .

Фактический период – это то, что получилось из периода действия после анализа всех периодов действия расчетов, которые вытесняют наш по периоду действия .

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

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

То есть один вид расчета может влиять на другой, который, в свою очередь, влияет на третий и т. д .

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

В системе «1С:Предприятие» такой универсальный механизм реализован при помощи планов видов расчета и регистров расчета .

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

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

Отличительной особенностью плана видов расчета является то, что пользователь в процессе работы может добавлять новые виды 558 1С:Предприятие 8.3. Практическое пособие разработчика расчета. Такая возможность делает механизм периодических расчетов более гибким и позволяет пользователю создавать собственные виды расчета, помимо тех, которые заданы разработчиком как предопределенные .

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

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

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

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

Существует возможность указать один из двух видов зависимости от базы: Зависимость по периоду действия и Зависимость по периоду регистрации. Оба вида этой зависимости подробно рассмотрены в разделе «Что такое регистр расчета» на стр. 561 .

Еще одной важной особенностью плана видов расчета является возможность создания предопределенных видов расчета и описания их взаимного влияния.

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

Базовые – их результаты должны быть использованы при перерасчете этого вида расчета;

Вытесняющие – вытесняют этот вид расчета по периоду действия;

Ведущие – изменение их результатов должно приводить к необходимости перерасчета этого вида расчета .

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

Занятие 17 Например, мы имеем три вида расчета: Невыход, Оклад и Премия .

Невыход вытесняет Оклад по периоду действия, а Премия зависит от оклада по базовому периоду .

В этом случае для премии следует указать базовым видом расчета оклад, а ведущими – оклад и невыход, поскольку изменение результата расчета невыхода приведет к изменению результата оклада, что, в свою очередь, должно привести к изменению результата премии (рис. 17.3) .

–  –  –

УзнАй больше!

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

560 1С:Предприятие 8.3. Практическое пособие разработчика Добавление плана видов расчета Приступим теперь к созданию плана видов расчета ОсновныеНачисления, который будет использоваться в нашей конфигурации .

В режиме «Конфигуратор»

Откроем конфигуратор и создадим новый объект конфигурации План видов расчета .

Зададим его имя – ОсновныеНачисления, а также зададим Представление списка как Виды расчетов .

На закладке Подсистемы укажем, что план видов расчета будет отображаться в подсистеме РасчетЗарплаты .

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

В качестве базового плана видов расчета укажем его самого, поскольку все наши виды расчетов будут храниться в единственном плане видов расчета (рис. 17.4) .

Рис. 17.4. Определим использование периода действия, зависимость от базы и базовые планы видов расчета

–  –  –

Как и в случае с бухгалтерией, расчеты в нашем ООО «На все руки мастер» будут скромные, поэтому мы создадим всего три элемента (рис.

17.5):

Невыход – с именем и наименованием Невыход и кодом Невыход;

Оклад – с именем, кодом и наименованием Оклад, с вытесняющим его видом расчета Невыход и ведущим видом расчета Невыход;

Премия – с именем, кодом и наименованием Премия, с базовым видом расчета Оклад и ведущими видами расчета Невыход и Оклад .

–  –  –

Теперь мы перейдем к рассмотрению второго объекта, используемого при реализации механизмов сложных периодических расчетов, – регистра расчета .

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

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

Отличительной особенностью регистра расчета является то, что он не предназначен для интерактивного редактирования пользователем .

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

Как и другие регистры, регистр расчета имеет ресурсы, в которых хранит числовые данные; имеет измерения, в разрезе которых можно получать значения ресурсов регистра; имеет реквизиты, которые характеризуют каждую запись регистра расчета .

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

Периодичность Периодичность регистра расчета может быть определена одним из следующих значений:

День, Месяц, Квартал, Год .

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

Если указана периодичность День, то каждая запись регистра будет относиться к какому-либо дню; если периодичность – Месяц, то к какому-либо месяцу и т. д .

Для указания факта принадлежности записи к какому-либо периоду регистр имеет служебный реквизит ПериодРегистрации типа Дата .

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

Например, если в регистр расчета с периодичностью месяц записать данные, где ПериодРегистрации задан как 08.04.2004, то регистр сохранит эти данные со значением поля ПериодРегистрации 01.04.2004 (рис. 17.6) .

Если в этой же ситуации периодичность регистра будет год, сохраненное значение периода регистрации будет 01.01.2004 (рис. 17.7) .

Занятие 17 Рис. 17.6. Запись данных из документа в регистр расчета видов расчета Рис. 17.7. Запись данных из документа в регистр расчета видов расчета 564 1С:Предприятие 8.3. Практическое пособие разработчика Вытеснение по периоду действия Следующей важной особенностью регистра расчета является возможность использования механизма вытеснения одних записей другими по периоду действия .

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

–  –  –

Если рассмотреть структуру записей таблиц регистра расчета, то после внесения записи о начислении по окладу таблицы регистра будут выглядеть следующим образом (таблицы 17.1, 17.2) .

таблица 17.1. Таблица регистра расчета

–  –  –

После добавления в регистр записи вида расчета Невыход, который вытесняет вид расчета Оклад по периоду действия, записи о начислении по окладу примут следующий вид (таблицы 17.3, 17.4) .

таблица 17.3. Таблица регистра расчета

–  –  –

Зависимость по базовому периоду Другим механизмом, который поддерживает регистр расчета, является зависимость записей по базовому периоду. Этот механизм позволяет основывать расчет зависимых (вторичных) записей регистра на данных, полученных в результате расчета первичных записей .

Регистр расчета может поддерживать два вида зависимости от базы:

зависимость по периоду действия и зависимость по периоду регистрации .

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

Например, в начале апреля производится расчет зарплаты за март .

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

566 1С:Предприятие 8.3. Практическое пособие разработчика

Рис. 17.9. Зависимость по периоду действия

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

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

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

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

В качестве примера можно привести расчет штрафов при начислении зарплаты за март. В качестве базы для расчета суммы штрафов должны браться записи о прогулах, зарегистрированные в марте месяце (это могут быть как записи о мартовских прогулах, так и записи о прогулах в феврале). В этом случае, как правило, используется зависимость по периоду регистрации (рис. 17.10) .

Рис. 17.10. Зависимость по периоду регистрации

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

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

В таблице, созданной в базе данных на основе объекта конфигурации Перерасчет, платформа хранит информацию о том, какие записи регистра подлежат перерасчету. Таблицы перерасчета 568 1С:Предприятие 8.3. Практическое пособие разработчика заполняются автоматически как на основании записей регистров расчета, затронутых ведущими видами расчета, так и на основании записей регистра расчета, для которых изменился фактический период действия. Исходя из этой информации, разработчик может принимать решение о необходимости перерасчета записей регистра .

Последним замечанием, которое следует сделать, говоря о регистре расчета, является возможность установки связи регистра расчета с графиком. Такой график должен представлять собой регистр сведений (непериодический, с обязательным измерением типа Дата и ресурсом типа Число), в котором содержится временная схема исходных данных, участвующих в расчетах. Измерениями этого графика могут быть, например, график работы (ссылка на справочник) и дата, а ресурсом – количество рабочих часов в этой дате .

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

УзнАй больше!

О структуре объектов встроенного языка, предназначенных для работы с регистром расчета, можно прочитать в разделе «Краткий справочник разработчика. Регистры расчета» на стр. 938 .

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

регистр сведений ГрафикиРаботы, справочник ВидыГрафиковРаботы .

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

Занятие 17 В режиме «Конфигуратор»

Откроем конфигуратор и создадим новый объект конфигурации Справочник с именем ВидыГрафиковРаботы .

На закладке Подсистемы укажем, что справочник будет отображаться в подсистеме РасчетЗарплаты .

На закладке Прочее создадим для справочника два предопределенных графика работы (рис. 17.11) – ГрафикАдминистрации и ГрафикМастеров .

–  –  –

После этого создадим объект конфигурации Регистр сведений с именем ГрафикиРаботы .

Этот регистр будет иметь два измерения:

ГрафикРаботы, тип СправочникСсылка.ВидыГрафиковРаботы;

–  –  –

Затем создадим единственный ресурс регистра – Значение с типом Число, длиной 1. На закладке Подсистемы укажем, что регистр сведений будет отображаться в подсистеме РасчетЗарплаты. Теперь заполним регистр сведений ГрафикиРаботы данными о рабочих днях июля графика мастеров .

В режиме «1С:Предприятие»

Запустим «1С:Предприятие» в режиме отладки и в разделе Расчет зарплаты выполним команду Графики работы. Поочередно создадим 31 запись в регистре .

Чтобы проще выполнить эту довольно однообразную работу, воспользуйтесь возможностью добавления элементов в регистр 570 1С:Предприятие 8.3. Практическое пособие разработчика копированием текущего элемента (команда Еще Скопировать (F9)) .

В качестве измерения ГрафикРаботы нашего регистра выберем предопределенный элемент График мастеров справочника ВидыГрафиковРаботы. В качестве ресурса Значение у рабочих дней проставим 1, а у выходных – 0 (рис. 17.12) .

–  –  –

В режиме «Конфигуратор»

Добавим новый объект конфигурации Регистр расчета с именем Начисления. Зададим Расширенное представление списка как Движения в регистре Начисления. В качестве плана видов расчета, используемого регистром, выберем ОсновныеНачисления .

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

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

Рис. 17.13. Окно редактирования регистра расчета «Начисления»

На закладке Подсистемы укажем, что регистр расчета будет отображаться в подсистеме РасчетЗарплаты .

Затем перейдем на закладку Данные и создадим (рис. 17.14):

измерение Сотрудник, тип СправочникСсылка.Сотрудники, Базовое;

ресурс Результат, тип Число, длина 15, точность 2, 572 1С:Предприятие 8.3. Практическое пособие разработчика реквизит ГрафикРаботы, тип СправочникСсылка.ВидыГрафиковРаботы, в разделе свойств Данные зададим свойство Связь с графиком по измерению ГрафикРаботы;

реквизит ИсходныеДанные, тип Число, длина 15, точность 2 .

Реквизит ГрафикРаботы мы будем использовать для того, чтобы связать запись регистра с используемым графиком работы, а реквизит ИсходныеДанные – чтобы хранить в нем данные, которые могут понадобиться при расчете или перерасчете (в нашем примере это будет расчет оклада) .

Рис. 17.14. Измерения, ресурсы и реквизиты регистра расчета

–  –  –

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

Для этого в дереве объектов конфигурации выделим подсистему РасчетЗарплаты, вызовем контекстное меню и выполним команду Открыть командный интерфейс .

В открывшемся окне командного интерфейса подсистемы в группе Панель навигации.Обычное включим видимость у команды Начисления .

На этом создание объекта конфигурации Регистр расчета Начисления завершено .

574 1С:Предприятие 8.3. Практическое пособие разработчика

Контрольные вопросы

; Что такое сложные периодические расчеты?

; Что такое вид расчета, база?

; Какая разница между базовым периодом, фактическим периодом и периодом действия?

; Что такое зависимость по базовому периоду?

; Что такое вытеснение по периоду действия?

; Для чего предназначен объект конфигурации «План видов расчета»?

; Каковы основные свойства плана видов расчета?

; Какая разница между базовыми, вытесняющими и ведущими видами расчетов?

; Как создать план видов расчета?

; Что такое объект конфигурации «Регистр расчета»?

; Каковы отличительные особенности регистра расчета?

; Что такое график времени?

; Что такое перерасчет?

; По какому принципу формируются записи перерасчета?

; Как создать регистр расчета?

Занятие 18 Использование регистра расчета пРодолжительность Ориентировочная продолжительность занятия – 3 часа 40 минут .

Добавление документа о начислениях

В режиме «Конфигуратор»

В режиме «1С:Предприятие»

Иллюстрация механизмов вытеснения и зависимости от базы

Отчет по перерасчетам

Зависимость по базовому периоду

Вытеснение по периоду действия

Процедура расчета записей регистра расчета

Отчет о начислениях сотрудникам

В режиме «Конфигуратор»

Запрос для набора данных

Ресурсы

Настройки

В режиме «1С:Предприятие»

Перерасчет

Диаграмма Ганта

Контрольные вопросы

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

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

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

В заключение мы познакомимся с новым элементом формы – Диаграмма Ганта – и с его помощью наглядно проиллюстрируем работу некоторых механизмов расчета .

Добавление документа о начислениях Для того чтобы иметь возможность регистрировать в базе данных начисления, производимые сотрудникам ООО «На все руки мастер», нам понадобится специальный документ .

В режиме «Конфигуратор»

Откроем конфигуратор и добавим новый объект конфигурации Документ. Назовем его НачисленияСотрудникам. Зададим представление объекта как Начисление сотрудникам.

На закладке Нумерация установим:

Тип номера – Число, Длина номера – 5 (рис. 18.1) .

На закладке Подсистемы укажем, что документ будет отображаться в подсистеме РасчетЗарплаты .

На закладке Данные укажем, что этот документ будет иметь табличную часть Начисления, содержащую следующие реквизиты:

Сотрудник, тип СправочникСсылка.Сотрудники;

ГрафикРаботы, тип СправочникСсылка.ВидыГрафиковРаботы;

ДатаНачала, тип Дата;

ДатаОкончания, тип Дата;

ВидРасчета, тип ПланВидовРасчетаСсылка.ОсновныеНачисления;

Начислено, Число, длина 15, точность 2 .

Занятие 18

Рис. 18.1. Нумерация документа

Реквизиты ДатаНачала и ДатаОкончания понадобятся нам для того, чтобы задавать период, в котором должна действовать запись расчета .

На закладке Движения запретим оперативное проведение документа .

Отметим, что документ будет создавать движения по регистру расчета Начисления, и запустим конструктор движений (рис. 18.2) .

Рис. 18.2. Движения документа578 1С:Предприятие 8.3. Практическое пособие разработчика

В окне конструктора выберем табличную часть Начисления и нажмем Заполнить выражения .

Для реквизитов ПериодДействияКонец и БазовыйПериодКонец укажем выражение КонецДня(ТекСтрокаНачисления.ДатаОкончания) .

Для поля ПериодРегистрации укажем выражение Дата .

Реквизиту ИсходныеДанные поставим в соответствие реквизит табличной части Начислено, а для ресурса Результат оставим пустое выражение, так как мы будем его потом рассчитывать (рис. 18.3) .

–  –  –

Нажмем OK и посмотрим текст обработчика, созданный конструктором (листинг 18.1) .

листинг 18.1. Текст обработчика, созданный конструктором движений Процедура ОбработкаПроведения(Отказ, Режим)

–  –  –

Движения.Начисления.Записывать = Истина;

// Регистр Начисления Для Каждого ТекСтрокаНачисления Из Начисления Цикл Движение = Движения.Начисления.Добавить();

Движение.Сторно = Ложь;

Движение.ВидРасчета = ТекСтрокаНачисления.ВидРасчета;

Движение.ПериодДействияНачало = ТекСтрокаНачисления.ДатаНачала;

Движение.ПериодДействияКонец = КонецДня(ТекСтрокаНачисления.ДатаОкончания);

Движение.ПериодРегистрации = Дата;

Движение.БазовыйПериодНачало = ТекСтрокаНачисления.ДатаНачала;

Движение.БазовыйПериодКонец = КонецДня(ТекСтрокаНачисления.ДатаОкончания);

Движение.Сотрудник = ТекСтрокаНачисления.Сотрудник;

Движение.ГрафикРаботы = ТекСтрокаНачисления.ГрафикРаботы;

Движение.ИсходныеДанные = ТекСтрокаНачисления.Начислено;

КонецЦикла;

//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ КонецПроцедуры Прокомментируем этот код .

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

Напомним лишь, что Начисления – имя регистра расчета, и в выражениях Движения.Начисления.Записывать() и Движения.Начисления.Добавить() мы обращаемся к методам набора записей этого регистра .

В строке Для Каждого ТекСтрокаНачисления Из Начисления Цикл мы обращаемся по имени (Начисления) к табличной части нашего документа и организуем цикл обхода этой табличной части .

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

Для присвоения значений полям ПериодДействияКонец, БазовыйПериодКонец мы используем функцию КонецДня(). Аналогичным образом мы поступали при создании отчетов, чтобы последний день периода попал в отчет .

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

Для этого в дереве объектов конфигурации выделим подсистему РасчетЗарплаты, вызовем контекстное меню и выполним команду Открыть командный интерфейс .

580 1С:Предприятие 8.3. Практическое пособие разработчика В группе Панель действий.Создать включим видимость у команды Начисление сотрудникам: создать (рис. 18.4) .

Рис. 18.4. Редактирование командного интерфейса подсистемы В режиме «1С:Предприятие»

Запустим «1С:Предприятие» в режиме отладки и посмотрим, как работает наш документ .

В разделе Расчет зарплаты выполним команду Начисление сотрудникам и начислим оклад за июль всем сотрудникам ООО «На все руки мастер» (рис. 18.5) .

–  –  –

Обратите внимание на то, что платформа привела период регистрации каждой записи к началу периода регистра расчета – началу месяца (в обработчике проведения мы указывали значение даты документа – 24.07.2013) .

Кроме этого заметьте, что в каждой записи мы сохранили в реквизите ИсходныеДанные размер оклада сотрудника, введенный в документе, чтобы в дальнейшем рассчитать сумму оплаты по окладу .

Для дальнейшего изучения работы регистра расчета нам понадобится служебный отчет, с помощью которого мы сможем посмотреть содержимое записей перерасчета .

582 1С:Предприятие 8.3. Практическое пособие разработчика Иллюстрация механизмов вытеснения и зависимости от базы Отчет по перерасчетам В режиме «Конфигуратор»

Создадим новый объект конфигурации Отчет. Назовем его Перерасчет. Создадим основную схему компоновки данных, добавим источник данных – запрос и откроем конструктор запроса .

В списке База данных раскроем ветвь Перерасчеты и из виртуальной таблицы перерасчета Начисления.Перерасчет выберем все поля:

ОбъектПерерасчета, ВидРасчета, Сотрудник (рис. 18.8) .

Рис. 18.8. Поля и таблицы запроса

На этом создание запроса закончено, нажмем ОK .

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

На этом создание схемы компоновки данных закончено, закроем ее .

В окне редактирования объекта конфигурации Отчет Перерасчет на закладке Подсистемы укажем, что отчет будет принадлежать подсистеме РасчетЗарплаты .

Занятие 18 Зависимость по базовому периоду В режиме «1С:Предприятие»

Если сейчас мы выполним отчет в режиме 1С:Предприятие, то мы увидим, что ни один перерасчет еще не выполнялся .

Поэтому создадим новый документ Начисление сотрудникам № 2, в котором начислим премию за июль Гусакову и Деловому (рис. 18.9) .

Рис. 18.9. Документ «Начисления сотрудникам № 2»

Этим документом мы зафиксируем тот факт, что сотрудникам Гусакову и Деловому нужно начислить премию по итогам работы за июль. Поскольку размер премии нам неизвестен (он будет рассчитываться по некоторому алгоритму), поле Начислено мы оставляем пустым. Нажмем Провести и закрыть .

Теперь снова откроем документ Начисление сотрудникам № 1 и изменим оклад Гусакова с 10 000 на 7 000. Нажмем Провести и закрыть .

Сформируем отчет Перерасчет (рис. 18.10) .

Рис. 18.10. Отчет «Перерасчет»584 1С:Предприятие 8.3. Практическое пособие разработчика

Как видите, отчет теперь содержит какие-то данные .

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

Вы можете спросить: почему в перерасчет попали записи как про Делового, так и про Гусакова, хотя оклад мы меняли только Гусакову?

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

Поэтому в набор записей перерасчета она включает информацию обо ВСЕХ записях регистра, значение ресурсов которых МОЖЕТ измениться в результате перепроведения документа, создавшего базовые записи регистра .

Перепроведем документ Начисления сотрудникам № 2 (которым мы начисляли премию) и сформируем отчет Перерасчет .

Он снова не содержит никаких данных – система отметила тот факт, что мы «пересчитали» зависимые записи, и очистила таблицу перерасчета .

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

Вытеснение по периоду действия В режиме «1С:Предприятие»

Теперь посмотрим, как работает механизм вытеснения по периоду действия .

Для этого нам понадобится создать документ Начисления сотрудникам № 3 (рис. 18.11) .

Этим документом мы зафиксируем тот факт, что Гусаков не выходил на работу с 1 по 10 июля .

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

Занятие 18 Рис. 18.11. Документ «Начисления сотрудникам № 3»

Нажмем Провести и закрыть и затем сформируем отчет Перерасчет (рис. 18.12) .

–  –  –

Как вы видите, в перерасчет попала запись о начислении оклада Гусакову. Это явилось результатом работы механизма вытеснения по периоду действия, ведь вид расчета Невыход вытесняет у нас вид расчета Оклад .

Обратите внимание, что в перерасчет попала и запись о начислении премии Гусакову .

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

Перепроведем документы Начисления сотрудникам № 1 и № 2 и убедимся, что таблица перерасчета очистилась .

586 1С:Предприятие 8.3. Практическое пособие разработчика Процедура расчета записей регистра расчета В режиме «Конфигуратор»

До сих пор мы с вами просто заносили в регистр расчета Начисления записи о том, что необходимо выполнить какой-либо вид расчета .

Но каким именно образом получать эти результаты, мы не говорили .

Теперь настало время описать алгоритмы формирования различных видов расчетов .

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

Откроем в конфигураторе текст обработчика проведения документа НачисленияСотрудникам и добавим в него после завершения создания движений в регистре Начисления вызов процедуры РассчитатьНачисления() из общего модуля ПроведениеРасчетов (листинг 18.2) .

листинг 18.2. Обработчик проведения документа «НачисленияСотрудникам»

Процедура ОбработкаПроведения(Отказ, Режим) … КонецЦикла;

//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ // Записываем движения регистров Движения.Начисления.Записать();

// Получим список всех сотрудников, содержащихся в документе Запрос = Новый Запрос(

"ВЫБРАТЬ РАЗЛИЧНЫЕ

| НачисленияСотрудникамНачисления.Сотрудник |ИЗ | Документ.НачисленияСотрудникам.Начисления КАК НачисленияСотрудникамНачисления | |ГДЕ | НачисленияСотрудникамНачисления.Ссылка = &ТекущийДокумент");

Запрос.УстановитьПараметр("ТекущийДокумент", Ссылка);

–  –  –

// Вызов процедуры РассчитатьНачисления из общего модуля ПроведениеРасчетов.РассчитатьНачисления(Движения.Начисления, ПланыВидовРасчета.ОсновныеНачисления.Оклад, МассивСотрудников);

Движения.Начисления.Записать(, Истина);

ПроведениеРасчетов.РассчитатьНачисления(Движения.Начисления, ПланыВидовРасчета .

ОсновныеНачисления.Премия, МассивСотрудников);

Движения.Начисления.Записать(, Истина);

КонецПроцедуры Обратите внимание: при проведении документа мы сначала записываем движения, сформированные документом, в регистр (Движения.Начисления.Записать()), а затем передаем этот набор записей регистра в процедуру расчета РассчитатьНачисления(), которую мы создадим в общем модуле ПроведениеРасчетов .

Эту процедуру мы вызываем сначала для расчета первичных записей (Оклад), а затем для расчета вторичных (Премия) .

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

После того как ресурсы будут рассчитаны, мы перезаписываем набор записей регистра без формирования записей перерасчета (второй параметр в методе Записать() – Истина) .

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

Для параметра запроса ТекущийДокумент устанавливаем значение стандартного реквизита документа – Ссылка. Используя метод запроса Запрос.Выполнить().Выгрузить(), выгружаем результат запроса в таблицу значений (переменную ТаблЗнач). Затем формируем массив МассивСотрудников, содержащий колонку Сотрудник из этой таблицы значений .

Теперь создадим в ветке Общие новый общий модуль ПроведениеРасчетов .

Установим флажок Вызов сервера для видимости его экспортных процедур и функций (рис. 18.13) .

588 1С:Предприятие 8.3. Практическое пособие разработчика

–  –  –

Добавим в него заготовку процедуры РассчитатьНачисления (листинг 18.3) .

листинг 18.3. Заготовка процедуры «РассчитатьНачисления»

Процедура РассчитатьНачисления(НаборЗаписейРегистра, ТребуемыйВидРасчета, СписокСотрудников) Экспорт Регистратор = НаборЗаписейРегистра.Отбор.Регистратор.Значение;

// Рассчитать первичные записи Если ТребуемыйВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Оклад Тогда КонецПроцедуры Алгоритм расчета начислений будет различным при расчете первичных (вид расчета – Оклад) и вторичных записей (вид расчета – Премия), и каждая из его частей будет находиться в своей ветке условия Если.. .

При расчете первичных записей нам понадобятся данные графика из регистра расчета, поэтому добавим в первую ветку условия запроса по виртуальной таблице регистра расчета РегистрРасчета.Начисления.ДанныеГрафика (листинг 18.4) .

Занятие 18

–  –  –

Регистратор = НаборЗаписейРегистра.Отбор.Регистратор.Значение;

// Рассчитать первичные записи Если ТребуемыйВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Оклад Тогда

–  –  –

Запрос.УстановитьПараметр("Регистратор", Регистратор);

Запрос.УстановитьПараметр("ВидРасчета", ТребуемыйВидРасчета);

Запрос.УстановитьПараметр("СписокСотрудников", СписокСотрудников);

ВыборкаРезультата = Запрос.Выполнить().Выбрать();

// Рассчитать вторичные записи ИначеЕсли ТребуемыйВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Премия Тогда

–  –  –

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

Теперь добавим обход переданного в процедуру набора записей и расчет записей, для которых получены значения графика (листинг 18.5) .

590 1С:Предприятие 8.3. Практическое пособие разработчика

–  –  –

Регистратор = НаборЗаписейРегистра.Отбор.Регистратор.Значение;

// Рассчитать первичные записи Если ТребуемыйВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Оклад Тогда … ВыборкаРезультата = Запрос.Выполнить().Выбрать();

–  –  –

сотрудника, и по этому номеру ищем соответствующую запись в выборке из результата запроса .

Если в результате запроса есть запись с таким номером строки, мы рассчитываем результат записи регистра расчета. То есть мы получаем начисление по окладу для каждого сотрудника как результат от деления начисленной суммы (поле регистра ИсходныеДанные) на количество рабочих дней в месяце (Норма) и умножения на фактически отработанные рабочие дни (Факт) .

Добавим текст запроса во вторую ветку условия Если… с той лишь разницей, что теперь мы будем получать значения базы, используя виртуальную таблицу регистра расчета РегистрРасчета.Начисления.БазаНачисления (листинг 18.6) .

–  –  –

Регистратор = НаборЗаписейРегистра.Отбор.Регистратор.Значение;

// Рассчитать первичные записи Если ТребуемыйВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Оклад Тогда … // Рассчитать вторичные записи ИначеЕсли ТребуемыйВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Премия Тогда

–  –  –

Запрос.УстановитьПараметр("ИзмеренияОсновного", Измер);

Запрос.УстановитьПараметр("ИзмеренияБазового", Измер);

Запрос.УстановитьПараметр("Регистратор", Регистратор);

Запрос.УстановитьПараметр("ВидРасчета", ТребуемыйВидРасчета);

Запрос.УстановитьПараметр("СписокСотрудников", СписокСотрудников);

ВыборкаРезультата = Запрос.Выполнить().Выбрать();

–  –  –

КонецПроцедуры 592 1С:Предприятие 8.3. Практическое пособие разработчика В параметрах виртуальной таблицы запроса мы кроме привычных для нас регистратора, вида расчета и списка сотрудников задаем еще измерения основного и базового регистров. В нашем случае это будет один и тот же регистр Начисления, а нужное нам измерение – Сотрудник .

В заключение осталось добавить во второе условие Если… обход набора записей регистра расчета и вычисление результата вторичных записей (листинг 18.7) .

листинг 18.7. Добавление обхода набора записей регистра и вычисления результата вторичных записей Процедура РассчитатьНачисления(НаборЗаписейРегистра, ТребуемыйВидРасчета, СписокСотрудников) Экспорт Регистратор = НаборЗаписейРегистра.Отбор.Регистратор.Значение;

// Рассчитать первичные записи Если ТребуемыйВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Оклад Тогда … // Рассчитать вторичные записи ИначеЕсли ТребуемыйВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Премия Тогда ВыборкаРезультата = Запрос.Выполнить().Выбрать();

–  –  –

В режиме «1С:Предприятие»

Запустим «1С:Предприятие» в режиме отладки и проверим правильность работы процедуры расчета .

Отменим проведение документа Начисления сотрудникам № 3 (Еще Отмена проведения) и перепроведем документы Начисления сотрудникам № 1 и № 2. Регистр расчета Начисления должен выглядеть следующим образом (рис. 18.14, 18.15) .

–  –  –

Мы видим, что всем сотрудникам произведены начисления по окладу (поле Результат) за полный месяц в соответствии с исходными данными (поле Исходные данные) .

Сотрудникам Гусакову и Деловому начислена премия в размере 10 % от суммы начисления по окладу .

Проведем документ Начисление сотрудникам № 3, а затем № 1 и № 2 .

При этом отчет Перерасчет должен быть пуст .

594 1С:Предприятие 8.3. Практическое пособие разработчика Состояние регистра изменится следующим образом (рис. 18.16, 18.17) .

–  –  –

В результате невыхода Гусакова на работу сумма оплаты по окладу будет уменьшена, и соответствующим образом уменьшится начисленная ему премия .

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

–  –  –

В режиме «Конфигуратор»

Создадим в конфигураторе новый объект конфигурации Отчет .

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

Запрос для набора данных Выберем таблицу регистра расчета Начисления (рис. 18.19) .

–  –  –

Из нее выберем следующие поля:

Сотрудник, ВидРасчета, ПериодДействияНачало, ПериодДействияКонец, Регистратор, Результат (рис. 18.20) .

–  –  –

На закладке Объединения/Псевдонимы определим следующие псевдонимы полей ПериодДействияНачало и ПериодДействияКонец (рис. 18.21) .

596 1С:Предприятие 8.3. Практическое пособие разработчика

–  –  –

На этом создание запроса закончено, нажмем ОK .

Ресурсы Перейдем на закладку Ресурсы и укажем, что должна быть рассчитана сумма по полю Результат .

Настройки После этого перейдем на закладку Настройки и создадим структуру отчета .

Добавим группировку по полю Сотрудник и в ней – подчиненную группировку детальных записей .

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

В результате окно настроек отчета должно иметь вид (рис. 18.22) .

–  –  –

И в заключение на закладке Другие настройки зададим заголовок отчета – Начисления сотрудникам .

На этом создание схемы компоновки данных закончено, закроем ее .

В окне редактирования объекта конфигурации Отчет НачисленияСотрудникам на закладке подсистемы укажем, что отчет будет вызываться из подсистем РасчетЗарплаты и Бухгалтерия .

В режиме «1С:Предприятие»

Запустим «1С:Предприятие» в режиме отладки .

В командной панели раздела Расчет зарплаты выполним команду Начисления сотрудникам и сформируем отчет (рис. 18.24) .

Рис. 18.24. Результат отчета 598 1С:Предприятие 8.3. Практическое пособие разработчика Перерасчет Итак, в нашем алгоритме работы с данными расчета осталось одно узкое место – контроль актуальности данных, содержащихся в регистре расчета .

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

Теперь мы с вами создадим специальную процедуру, которая будет определять, требуется ли перерасчет данных регистра расчета, и, если такая необходимость есть, выполнять перерасчет .

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

В режиме «Конфигуратор»

Для этого в окне редактирования объекта конфигурации Отчет НачисленияСотрудникам перейдем на закладку Формы, нажмем кнопку открытия и создадим основную форму отчета .

Затем в правом верхнем окне редактора форм перейдем на закладку Команды и на закладке Команды формы создадим команду формы Перерассчитать (рис. 18.25) .

Теперь нужно установить Действие для этой команды .

Для этого нажмем кнопку открытия в строке Действие .

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

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

Саму процедуру перерасчета поместим в общем модуле ПроведениеРасчетов (листинг 18.9) .

Занятие 18

Рис. 18.25. Добавление команды формы

листинг 18.8. Текст обработчика команды «Перерассчитать»

&НаКлиенте Процедура Перерассчитать(Команда) ПроведениеРасчетов.ПерерассчитатьНачисления(ПредопределенноеЗначение( "ПланВидовРасчета.ОсновныеНачисления.Оклад"));

ПроведениеРасчетов.ПерерассчитатьНачисления(ПредопределенноеЗначение( "ПланВидовРасчета.ОсновныеНачисления.Премия"));

КонецПроцедуры листинг 18.9.

Процедура перерасчета начислений Процедура ПерерассчитатьНачисления(ТребуемыйВидРасчета) Экспорт // Здесь следует выбрать из набора записей перерасчета записи в следующей последовательности:

// записи документа1 для сотрудников из списка, // записи документа2 для сотрудников из списка и т. д .

Запрос = Новый Запрос( "ВЫБРАТЬ | НачисленияПерерасчет.ОбъектПерерасчета, | НачисленияПерерасчет.Сотрудник |ИЗ | РегистрРасчета.Начисления.Перерасчет КАК НачисленияПерерасчет |ГДЕ | НачисленияПерерасчет.ВидРасчета = &ТребуемыйВидРасчета |ИТОГИ ПО | НачисленияПерерасчет.ОбъектПерерасчета");

600 1С:Предприятие 8.3. Практическое пособие разработчика Запрос.УстановитьПараметр("ТребуемыйВидРасчета", ТребуемыйВидРасчета);

СписокСотрудников = Новый СписокЗначений;

// Перебрать группировку по регистратору .

ВыборкаПоРегистратору = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Пока ВыборкаПоРегистратору.Следующий() Цикл Регистратор = ВыборкаПоРегистратору.ОбъектПерерасчета;

// Перебрать группировку по сотрудникам для выбранного регистратора // и создать список сотрудников .

ВыборкаПоСотрудникам = ВыборкаПоРегистратору.Выбрать();

СписокСотрудников.Очистить();

Пока ВыборкаПоСотрудникам.Следующий() Цикл СписокСотрудников.Добавить(ВыборкаПоСотрудникам.Сотрудник);

КонецЦикла;

// Получить набор записей регистра расчета для выбранного регистратора .

НаборЗаписей = РегистрыРасчета.Начисления.СоздатьНаборЗаписей();

НаборЗаписей.Отбор.Регистратор.Значение = Регистратор;

НаборЗаписей.Прочитать();

РассчитатьНачисления(НаборЗаписей, ТребуемыйВидРасчета, СписокСотрудников);

НаборЗаписей.Записать(, Истина);

// Очистить перерассчитанные записи в перерасчете .

НаборЗаписейПерерасчета = РегистрыРасчета.Начисления.Перерасчеты.Перерасчет.СоздатьНаборЗаписей();

НаборЗаписейПерерасчета.Отбор.ОбъектПерерасчета.Значение = Регистратор;

НаборЗаписейПерерасчета.Записать();

КонецЦикла;

КонецПроцедуры В самом начале процедуры мы запросом выбираем данные о записях перерасчетов, содержащие переданный вид расчета и сгруппированные по объекту перерасчета .

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

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

Вернемся в форму отчета НачислениеСотрудникам .

Занятие 18 Итак, мы указали для команды Перерассчитать действие, то есть процедуру для ее выполнения. Но чтобы можно было воспользоваться этой командой, нужно создать в форме кнопку и связать ее с этой командой (в строке ИмяКоманды) .

Проще всего это сделать перетаскиванием команды из окна Команды формы в окно элементов формы .

Перетащим мышью команду Перерассчитать в группу элементов формы ОсновнаяКоманднаяПанель .

При этом в форме появится кнопка Перерассчитать, а связь кнопки с командой будет установлена автоматически (рис. 18.26) .

Рис. 18.26. Добавление кнопки в форму

В режиме «1С:Предприятие»

Запустим «1С:Предприятие» и проверим, как выполняется перерасчет записей регистра расчета .

Отменим проведение всех документов Начисления сотрудникам и проведем документ Начисления сотрудникам № 1 и затем № 2 .

Сформируем отчет Начисления сотрудникам (рис. 18.27) .

Теперь откроем документ Начисления сотрудникам № 1, изменим оклад Гусакова на 10 000 и проведем документ .

В отчете Начисления сотрудникам нажмем кнопку Перерассчитать .

602 1С:Предприятие 8.3. Практическое пособие разработчика

–  –  –

Чтобы увидеть в отчете актуальные данные, нажмем кнопку Сформировать .

Результат работы отчета будет содержать новые значения премии Гусакова (рис. 18.29) .

–  –  –

И, наконец, проведем документ Начисления сотрудникам № 3 и нажмем Перерассчитать в отчете Начисления сотрудникам .

Снова будет произведен перерасчет оклада и премии Гусакова (рис. 18.30) .

–  –  –

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

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

Диаграмма Ганта представляет собой диаграмму интервалов на шкале времени (рис. 18.32) и отражает использование объектами (точками) ресурсов (серий) .

604 1С:Предприятие 8.3. Практическое пособие разработчика Чтобы проще было представить себе составные части диаграммы Ганта, изучим диаграмму, которая должна получиться в результате работы создаваемого нами отчета .

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

Рис. 18.32. Пример диаграммы Ганта

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

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

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

Этот объект является совокупностью (коллекцией) интервалов, то есть может содержать не один, а несколько интервалов, которые соответствуют паре серия-точка (создаваемый по умолчанию объект ЗначениеДиаграммыГанта не содержит ни одного интервала). Разработчик может получить значение диаграммы, указав интересующую его точку и серию, и затем добавить в коллекцию необходимое количество интервалов .

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

Занятие 18 Теперь коротко объясним последовательность наших дальнейших действий .

В качестве исходных данных для построения такой диаграммы мы возьмем данные регистра расчета Начисления.

Каждая запись этого регистра уже содержит все необходимое для построения диаграммы:

сотрудника, вид расчета, начало и конец интервала .

Нам останется только средствами встроенного языка разместить все это в диаграмме .

Итак, приступим .

В режиме «Конфигуратор»

Создадим новый объект конфигурации Отчет и назовем его ДиаграммаНачислений .

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

В окне редактирования объекта конфигурации Отчет ДиаграммаНачислений перейдем на закладку Формы, нажмем кнопку открытия и создадим основную форму отчета .

В правом верхнем окне редактора форм на закладке Реквизиты находятся реквизиты формы. Мы видим здесь основной реквизит формы Отчет, который был создан автоматически при создании формы .

Нажмем кнопку Добавить и добавим новый реквизит формы. Назовем его ДиаграммаГанта и выберем его тип ДиаграммаГанта (рис. 18.33) .

Теперь перетащим новый реквизит в окно элементов формы, которое пока пусто .

В окне элементов формы будет создано новое поле для отображения диаграммы Ганта, а в нижнем окне просмотра формы мы сразу увидим поле диаграммы (рис. 18.34) .

606 1С:Предприятие 8.3. Практическое пособие разработчика

–  –  –

Теперь нужно установить Действие для этой команды .

Для этого нажмем кнопку открытия в строке Действие .

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

Рис. 18.36. Выбор типа обработчика команды формы В модуле формы будут созданы шаблоны двух процедур: клиентской процедуры Сформировать() и серверной внеконтекстной процедуры СформироватьНаСервере(), которая вызывается из процедуры Сформировать() .

608 1С:Предприятие 8.3. Практическое пособие разработчика Мы не будем сейчас подробно рассматривать, что такое серверная внеконтекстная процедура. Отметим только, что внеконтекстная процедура выполняется на сервере значительно быстрее за счет того, что на сервер с клиента не передается весь контекст формы .

Однако нам нужно передать в процедуру СформироватьНаСервере() в качестве параметра ссылку на реквизит формы ДиаграммаГанта, чтобы на сервере заполнить его данными. Поэтому изменим текст модуля следующим образом (листинг 18.10) .

листинг 18.10. Текст обработчика команды «Сформировать»

&НаКлиенте Процедура Сформировать(Команда) СформироватьНаСервере(ДиаграммаГанта);

КонецПроцедуры &НаСервереБезКонтекста Процедура СформироватьНаСервере(Диаграмма) // Вставить содержимое обработчика .

КонецПроцедуры В процедуру СформироватьНаСервере() мы вставим заготовку запроса (листинг 18.11) .

листинг 18.11. Процедура «СформироватьНаСервере()»

&НаСервереБезКонтекста Процедура СформироватьНаСервере(Диаграмма)

–  –  –

Все, запрос готов .

Теперь нажмем OK и после текста запроса добавим в процедуру следующий текст (листинг 18.12) .

листинг 18.12. Процедура «СформироватьНаСервере()»

&НаСервереБезКонтекста Процедура СформироватьНаСервере(Диаграмма) Запрос = Новый Запрос;

Запрос.Текст = "ВЫБРАТЬ | НачисленияФактическийПериодДействия.Сотрудник, | НачисленияФактическийПериодДействия.ВидРасчета, | НачисленияФактическийПериодДействия.ПериодДействияНачало, | НачисленияФактическийПериодДействия.ПериодДействияКонец, | НачисленияФактическийПериодДействия.Результат, | НачисленияФактическийПериодДействия.Регистратор, | НачисленияФактическийПериодДействия.Регистратор.Представление |ИЗ | РегистрРасчета.Начисления.ФактическийПериодДействия | КАК НачисленияФактическийПериодДействия";

ВыборкаРезультата = Запрос.Выполнить().Выбрать();

// Запретить обновление диаграммы .

Диаграмма.Обновление = Ложь;

Диаграмма.Очистить();

Диаграмма.ОтображатьЗаголовок = Ложь;

// Заполнить диаграмму .

Пока ВыборкаРезультата.Следующий() Цикл // Получить серию, точку и значение для них .

ТекущаяСерия = Диаграмма.УстановитьСерию(ВыборкаРезультата.ВидРасчета);

610 1С:Предприятие 8.3. Практическое пособие разработчика ТекущаяТочка = Диаграмма.УстановитьТочку(ВыборкаРезультата.Сотрудник);

ТекущееЗначение = Диаграмма.ПолучитьЗначение(ТекущаяТочка, ТекущаяСерия);

// Создать нужные нам интервалы в значении .

ТекущийИнтервал = ТекущееЗначение.Добавить();

ТекущийИнтервал.Начало = ВыборкаРезультата.ПериодДействияНачало;

ТекущийИнтервал.Конец = ВыборкаРезультата.ПериодДействияКонец;

ТекущийИнтервал.Текст = ВыборкаРезультата.РегистраторПредставление;

ТекущийИнтервал.Расшифровка = ВыборкаРезультата.Регистратор;

–  –  –

// Раскрасить серии своими цветами .

Для Каждого Серия из Диаграмма.Серии Цикл Если Серия.Значение = ПланыВидовРасчета.ОсновныеНачисления.Оклад Тогда Серия.Цвет = WEBЦвета.Желтый;

ИначеЕсли Серия.Значение = ПланыВидовРасчета.ОсновныеНачисления.Премия Тогда Серия.Цвет = WEBЦвета.Зеленый;

ИначеЕсли Серия.Значение = ПланыВидовРасчета.ОсновныеНачисления.Невыход Тогда Серия.Цвет = WEBЦвета.Красный;

–  –  –

// Разрешить обновление диаграммы .

Диаграмма.Обновление = Истина;

КонецПроцедуры Сначала мы запрещаем обновление диаграммы на то время, пока мы будем заполнять ее данными. Это нужно для того, чтобы в процессе заполнения не выполнялись пересчеты при каждом изменении данных диаграммы. После окончания заполнения диаграммы мы разрешим обновление, и все пересчеты будут выполнены один раз .

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

Сначала, используя методы УстановитьСерию() и Установить Точку(), мы получаем либо существующие, либо новые точку и серию .

Точки и серии однозначно идентифицируются своими значениями, в качестве которых мы используем сотрудника и вид расчета из результата запроса .

После того как точка и серия получены, с помощью метода ПолучитьЗначение() мы получаем соответствующее им значение диаграммы .

Занятие 18 Затем мы добавляем в значение диаграммы новый интервал, задаем его начало и конец, задаем текст интервала, который будет показываться во всплывающей подсказке, и задаем расшифровку интервала, которая будет выполняться при двойном щелчке мышью на этом интервале .

После того как все значения диаграммы сформированы, мы раскрашиваем серии своими цветами. Серии диаграммы представляют собой коллекцию значений, которую мы перебираем при помощи конструкции Для Каждого … Цикл .

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

Для этого перетащим мышью команду Сформировать из окна Команды формы в окно элементов формы (рис. 18.38) .

–  –  –

В заключение в окне редактирования объекта конфигурации Отчет ДиаграммаНачислений на закладке подсистемы укажем, что отчет будет вызываться из подсистемы РасчетЗарплаты .

612 1С:Предприятие 8.3. Практическое пособие разработчика В режиме «1С:Предприятие»

Запустим «1С:Предприятие» в режиме отладки и посмотрим на результат работы отчета (рис. 18.39) .

–  –  –

А теперь посмотрим, как выглядит механизм вытеснения по периоду действия на конкретном примере .

Откроем документ Начисления сотрудникам № 3 и вместо одного прогула с 1 по 10 число зададим Гусакову два прогула: с 3 по 7 число и с 12 по 15 число .

Проведем документ и снова нажмем Сформировать в нашем отчете (рис. 18.40) .

Рис. 18.40. Отчет «Диаграмма начислений»

Занятие 18 Теперь вы наглядно видите, как записи вида расчета Невыход вытеснили по периоду действия запись расчета Оклад, изменив ее фактический период действия .

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

Для этого в панели свойств реквизита, содержащего диаграмму, нужно выполнить команду Настройка Открыть .

614 1С:Предприятие 8.3. Практическое пособие разработчика

Контрольные вопросы

; Как создать движения документа по регистру расчета?

; Как запросом получить записи перерасчета?

; Как работает перерасчет?

; Как рассчитать записи регистра расчета?

; Как запросом получить данные графика и базы?

; Как выполнить перерасчет отдельных записей регистра расчета?

; Как получить запросом записи регистра расчета?

; Как получить запросом фактический период действия записей регистра расчета?

; Для чего используется диаграмма Ганта?

; Как устроена диаграмма Ганта?

; Как заполнить диаграмму Ганта данными?

Занятие 19

–  –  –

пРодолжительность Ориентировочная продолжительность занятия – 40 минут .

Общие сведения о механизме полнотекстового поиска в данных

Полнотекстовый индекс

В режиме «Конфигуратор»

В режиме «1С:Предприятие»

Примеры поиска в базе данных

В режиме «1С:Предприятие»

Поиск при вводе по строке

В режиме «Конфигуратор»

В режиме «1С:Предприятие»

Контрольные вопросы

616 1С:Предприятие 8.3. Практическое пособие разработчика Информационная база нашей фирмы ООО «На все руки мастер»

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

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

Специально для того, чтобы облегчить поиск незнакомой информации в базе данных, система «1С:Предприятие» содержит механизм полнотекстового поиска в данных. Преимущества этого механизма заключаются в том, что он позволяет искать данные, вводя поисковый запрос в простой и естественной форме, например: «телефон абдулова». При этом можно использовать специальные операторы, наподобие тех, что применяются при поиске в Интернете (И, ИЛИ, НЕ и т. д.) .

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

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

На этом занятии мы познакомимся с общими сведениями о механизме полнотекстового поиска в данных, создадим полнотекстовый индекс и на его основе попробуем найти нужные данные в базе данных нашего ООО «На все руки мастер» .

Занятие 19 Общие сведения о механизме полнотекстового поиска в данных Механизм полнотекстового поиска «1С:Предприятия» основан на использовании двух составляющих:

полнотекстового индекса, средств выполнения полнотекстового поиска .

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

Поиск осуществляется по тем данным, которые содержатся в полнотекстовом индексе. Таким образом, если ведется интенсивная работа с базой данных (например, данные изменяются, добавляются новые), то полнотекстовый индекс следует обновлять как можно чаще. Если же объем изменяемых или новых данных невелик, то обновление полнотекстового индекса можно выполнять реже, например раз в сутки, в период наименьшей загруженности системы .

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

В процессе работы информационной базы система отслеживает факт изменения данных в тех объектах конфигурации, которые могут участвовать в полнотекстовом поиске. Такими объектами являются, например, планы обмена, справочники, документы, планы видов характеристик, планы счетов, планы видов расчета, регистры (сведений, накопления, бухгалтерии, расчета), бизнес-процессы и задачи .

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

При этом анализироваться могут не все реквизиты, а только те, которые имеют тип Строка, Число, Дата, ХранилищеЗначения или ссылочный тип (например, СправочникСсылка.Номенклатура) .

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

Результаты полнотекстового поиска возвращаются порциями, и, кроме этого, они отсортированы в определенном порядке .

Это сделано для того, чтобы с большой долей вероятности пользователь получал требуемые ему данные в начале первой порции .

Как показывает практика, при правильно составленном поисковом запросе требуемые данные возвращаются в первой тройке-пятерке результатов .

Теперь, когда мы в общем виде представляем себе, как работает полнотекстовый поиск, приступим к первой части необходимых действий – созданию полнотекстового индекса .

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

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

В режиме «Конфигуратор»

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

Таким образом, в данный момент от нас не требуется вносить какиелибо изменения, но, тем не менее, для знакомства откроем окно редактирования объекта конфигурации Справочник Номенклатура на закладке Прочее (рис. 19.1) .

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

Занятие 19

–  –  –

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

Перейдем в режим 1С:Предприятие .

620 1С:Предприятие 8.3. Практическое пособие разработчика В режиме «1С:Предприятие»

Выполним команду главного меню приложения Все функции Стандартные Управление полнотекстовым поиском (рис. 19.3) .

–  –  –

В результате будет открыто окно управления полнотекстовым поиском (рис. 19.4) .

Рис. 19.4. Окно управления полнотекстовым поиском Это окно позволяет создавать и обновлять полнотекстовый индекс интерактивно. Кроме этого, оно позволяет разрешать или запрещать вообще все операции, связанные с полнотекстовым поиском: обновление, очистка полнотекстового индекса, полнотекстовый поиск .

Как вы видите, по умолчанию полнотекстовый поиск стандартно разрешен .

Также система сообщает нам о том, что требуется обновление полнотекстового индекса. Это действительно так, потому что в нашем случае индекс вообще отсутствует (дата актуальности индекса пуста) .

Для того чтобы создать (или обновить) полнотекстовый индекс, нажмем кнопку Обновить индекс .

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

После того как создание полнотекстового индекса будет закончено, система сообщит об этом (рис. 19.5), и в окне управления полнотекстовым поиском будет отображена дата актуальности 622 1С:Предприятие 8.3. Практическое пособие разработчика полнотекстового индекса – дата, когда последний раз выполнялось обновление индекса (см. рис. 19.6) .

Рис. 19.5. Полнотекстовое индексирование завершено Рис. 19.6. Окно управления полнотекстовым поиском Итак, мы создали полнотекстовый индекс для нашей информационной базы. Теперь, используя этот индекс, выполним полнотекстовый поиск в базе данных .

Примеры поиска в базе данных В режиме «1С:Предприятие»

Поиск в данных на основе полнотекстового индекса является стандартной функцией платформы «1С:Предприятие». Для начала поиска достаточно нажать кнопку Поиск (со значком лупы) в панели инструментов приложения (рис. 19.7) .

Количество данных в нашей базе данных невелико, но даже и на них мы сможем познакомиться с основными возможностями полнотекстового поиска .

Для начала попробуем найти данные, связанные с Ивановым. Введем в строку поиска значение иванов и нажмем Найти или клавишу Enter (рис. 19.8) .

Занятие 19

–  –  –

Результат поиска содержит 5 элементов, и найденные слова в реквизитах этих элементов выделены жирным шрифтом .

Обратите внимание, что кроме элемента справочника Иванов и документа оказания услуги клиенту Иванов система нашла также и другие объекты, которые содержат различные словоформы введенного выражения (в данном случае – Иван) .

Чтобы выполнить точный поиск по указанному выражению, его необходимо заключить в кавычки (рис. 19.9) .

624 1С:Предприятие 8.3. Практическое пособие разработчика

Рис. 19.9. Поиск по выражению «иванов»

Часто пользователь не помнит точно, например, название номенклатуры. В этом случае можно выполнить поиск по нескольким начальным символам слова, заменив последние символы звездочкой (*). Например, при поиске по выражению тран* будут найдены элементы номенклатуры: транзистор и трансформатор (рис. 19.10) .

Рис. 19.10. Поиск по первым символам поискового слова Занятие 19 Как правило, для получения наилучших результатов полнотекстового поиска рекомендуется использовать в поисковом выражении пару слов .

Например, если требуется узнать, какого числа клиенту Симонову заменили трансформатор в телевизоре, можно ввести поисковое выражение трансформатор симонов (рис. 19.11) .

Рис. 19.11. Поиск по выражению «трансформатор Симонов»

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

Система индексирует не только данные, содержащиеся в объектах конфигурации, но и имена реквизитов и объектов метаданных .

Поэтому, например, если требуется найти информацию о сотруднике по фамилии Деловой, в поисковом выражении следует указать имя справочника, который нас интересует: сотрудник деловой (рис. 19.12) .

Рис. 19.12. Поиск по выражению «сотрудник Деловой»

626 1С:Предприятие 8.3. Практическое пособие разработчика Как видите, система нашла также и документы начисления сотрудникам, которые содержат формы слова «сотрудники», но, несмотря на это, искомый нами справочник Сотрудники находится первым в списке найденных .

Система позволяет выполнять также нечеткий поиск. Например, пользователь не уверен в правильности написания поискового слова. В этом случае в поисковом выражении можно задать признак нечеткого поиска – решетку (#) и количество символов после нее, на которое поисковое выражение может отличаться от оригинала в базе данных. В результате, даже если пользователь ввел в поисковую строку римонт#2, в базе данных будут найдены все объекты, содержащие слово ремонт (рис. 19.13) .

Рис. 19.13. Нечеткий поиск по выражению «римонт»

Также можно выполнять поиск по синонимам слов. Для этого перед поисковым выражением нужно поставить символ ! (восклицательный знак). Например, поиск по выражению !починка даст такой же результат (см. рис. 19.13), так как ремонт и починка являются синонимами .

Для составления поисковых выражений можно использовать разнообразные операторы, которые подробно описаны в документации «1С:Предприятие 8.3. Руководство разработчика», приложение 5 «Поисковые выражения полнотекстового поиска». Их использование не должно вызвать у вас затруднений .

Занятие 19 Форма поиска, которая появляется при нажатии кнопки Поиск в панели инструментов приложения (рис. 19.7–19.13), стандартно генерируется платформой. Так происходит потому, что свойство конфигурации ОсновнаяФормаПоиска по умолчанию не определено .

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

Можно изменить ее по своему желанию, и тогда для поиска будет использоваться именно она .

Поиск при вводе по строке В режиме «Конфигуратор»

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

Настроить параметры поиска при вводе по строке можно на закладке Поле ввода окна редактирования объектов конфигурации, которые используются в прикладном решении в качестве ссылочных полей. При этом можно настроить свойства: Способ поиска строки (по умолчанию – Начало), Полнотекстовый поиск (по умолчанию – Не использовать) и Режим получения данных выбора (по умолчанию – Непосредственно) .

Установим параметры поиска поля ввода для справочника Номенклатура так, как показано на рис. 19.14 .

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

Если база данных невелика, то можно не использовать полнотекстовый поиск, но при этом искать в любом месте поля ввода, а не только по началу строки (Способ поиска строки – Любая часть) .

628 1С:Предприятие 8.3. Практическое пособие разработчика

Рис. 19.14. Свойства поиска по строке в поле ввода

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

В режиме «1С:Предприятие»

Запустим «1С:Предприятие» и начнем вводить новую цену на номенклатуру в регистр Цены на номенклатуру .

Как только мы начинаем вводить символы в поле ввода Номенклатура, имеющего тип ссылки на номенклатуру, в выпадающем окне под полем ввода отображаются наименования номенклатуры, содержащие в начале слов, составляющих название, введенные нами символы (рис. 19.15) .

Занятие 19

–  –  –

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

630 1С:Предприятие 8.3. Практическое пособие разработчика Контрольные вопросы ; Для чего предназначен полнотекстовый поиск в данных?

; Как интерактивно управлять полнотекстовым поиском?

; Как составлять простейшие поисковые выражения?

; Как настроить свойства поиска при вводе по строке в поле ввода?

Занятие 20

–  –  –

Постановка задачи

Что такое регламентное задание

Создание регламентных заданий

В режиме «Конфигуратор»

Запуск регламентных заданий

В режиме «1С:Предприятие»

Контрольные вопросы

632 1С:Предприятие 8.3. Практическое пособие разработчика Любая информационная база системы «1С:Предприятие» требует периодического выполнения определенного набора регламентных операций .

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

Другой пример. Для того чтобы использовать полнотекстовый поиск в базе данных, необходимо, чтобы все данные, в которых предполагается выполнять поиск, были проиндексированы. А это значит, что полнотекстовый индекс нужно периодически обновлять. Как часто? Это зависит от интенсивности изменения данных и ввода новых данных .

Но очевидно, что делать это нужно с некоторой периодичностью .

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

На этом занятии мы рассмотрим использование механизма заданий на примере автоматизации двух регламентных операций, связанных с полнотекстовым поиском: операции полнотекстового индексирования и операции слияния индексов .

Мы опишем эти операции средствами встроенного языка и установим расписание для их автоматического выполнения .

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

На самом деле полнотекстовый индекс состоит из двух индексов:

основного и дополнительного. При выполнении полнотекстового Занятие 20 поиска поиск осуществляется как в одном, так и в другом индексе .

Отличие их заключается в следующем .

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

Дополнительный индекс является полной противоположностью основному: добавление данных в дополнительный индекс осуществляется быстро, однако при значительном объеме данных в дополнительном индексе поиск будет выполняться относительно медленно .

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

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

Таким образом, чтобы пользователи могли искать во всех данных и не ощущали какого-либо замедления работы системы, дополнительный индекс необходимо обновлять относительно часто (например, раз в час или раз в минуту). В то же время чтобы пользователи выполняли поиск быстро, необходимо, чтобы дополнительный индекс содержал как можно меньше данных, т. е. нужно периодически выполнять слияние основного и дополнительного индексов (например, ночью, в период минимальной активности пользователей) .

В результате для автоматизации полнотекстового индексирования нам понадобится два задания. Первое задание будет выполнять 634 1С:Предприятие 8.3. Практическое пособие разработчика индексирование без слияния и запускаться каждую минуту. Второе будет выполнять слияние индексов и запускаться один раз в сутки, ночью .

Приступим к созданию этих заданий .

Что такое регламентное задание Регламентные задания располагаются в дереве объектов конфигурации, в ветке Общие. Каждое регламентное задание содержит два основных свойства: Имя метода и Расписание .

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

Свойство Расписание позволяет задать периодичность выполнения этой процедуры .

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

Создание регламентных заданий В режиме «Конфигуратор»

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

Раскроем ветвь Общие дерева объектов конфигурации. Выделим строку Регламентные задания и добавим новый объект конфигурации Регламентное задание. Зададим его имя – ОбновлениеИндекса (рис. 20.1) .

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

Занятие 20

–  –  –

Выберем модуль РегламентныеПроцедуры. В этом модуле будет создан шаблон процедуры ОбновлениеИндекса(). Заполним его следующим образом (листинг 20.1) .

листинг 20.1. Процедура обновления индекса Если ПолнотекстовыйПоиск.ПолучитьРежимПолнотекстовогоПоиска() = РежимПолнотекстовогоПоиска.Разрешить Тогда Если Не ПолнотекстовыйПоиск.ИндексАктуален() Тогда ПолнотекстовыйПоиск.ОбновитьИндекс(, Истина);

КонецЕсли;

КонецЕсли;

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

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

В случае необходимости индексирования вызывается метод ОбновитьИндекс() менеджера полнотекстового поиска .

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

Второй параметр метода определяет, какое количество данных будет индексироваться: сразу все, которые необходимо проиндексировать, или порциями. Наша задача – выполнить индексирование как можно быстрее, поэтому указываем, что индексирование будет выполняться порциями (значение Истина) .

Размер одной порции фиксирован – 10 000 объектов. Таким образом, если в данный момент требуется проиндексировать, например, 15 000 объектов, то при вызове этого метода из них будет проиндексировано только 10 000 (первая порция), а оставшиеся объекты будут проиндексированы при следующем вызове этого метода (при следующем запуске нашего регламентного задания) .

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

Нажмем на ссылку Открыть в свойствах регламентного задания (в строке Расписание), и система откроет диалог редактирования расписания (рис. 20.4) .

Занятие 20

–  –  –

В результате запуск задания будет выполняться не круглые сутки, а только с 8 часов утра. Так как время окончания запуска не указано, запуск задания будет прекращен по окончании текущих суток. Таким образом, с 00:00 до 08:00 часов запуск задания выполняться не будет .

На этом создание расписания регламентного задания закончено, нажмем ОK .

В качестве последнего штриха установим в свойствах регламентного задания флажок Предопределенное (рис. 20.8) .

Установка этого свойства означает, что после запуска системы в режиме 1С:Предприятие будет создано одно предопределенное регламентное задание. В противном случае такое задание пришлось бы создавать средствами встроенного языка .

На этом создание регламентного задания Обновление индекса завершено .

Занятие 20

Рис. 20.8. Предопределенное регламентное задание

Теперь по аналогии создадим второе регламентное задание – СлияниеИндексов. В палитре его свойств нажмем кнопку открытия у поля ввода Имя метода. В открывшемся диалоге выберем модуль РегламентныеПроцедуры .

В этом модуле будет создан шаблон процедуры СлияниеИндексов() .

Заполним его следующим образом (листинг 20.2) .

листинг 20.2. Процедура «СлияниеИндексов»

Если ПолнотекстовыйПоиск.ПолучитьРежимПолнотекстовогоПоиска() = РежимПолнотекстовогоПоиска.Разрешить Тогда Если Не ПолнотекстовыйПоиск.ИндексАктуален() Тогда ПолнотекстовыйПоиск.ОбновитьИндекс(Истина);

КонецЕсли;

КонецЕсли;

Эта процедура аналогична показанной в листинге 20.1, за исключением того, что при обновлении индекса выполняется слияние индексов (первый параметр Истина), и индексирование выполняется целиком, для всех данных (второй параметр Ложь по умолчанию), поскольку в данном случае время выполнения индексирования для нас не критично .

В свойствах задания установим также флажок Предопределенное и приступим к редактированию расписания. Для этого нажмем на ссылку Открыть в свойствах регламентного задания (в строке Расписание) .

640 1С:Предприятие 8.3. Практическое пособие разработчика На закладке Общее укажем, что задание будет запускаться каждый день (Повторять каждые: 1 дн.), а на закладке Дневное укажем время начала выполнения задания (Время начала: 01:00), рис. 20.9 .

Рис. 20.9. Расписание задания «СлияниеИндексов»

В результате мы получим следующее расписание запуска регламентного задания: Выполнять: каждый день; с 1:00 один раз в день .

На этом создание регламентного задания СлияниеИндексов завершено, нажмем ОK .

Запуск регламентных заданий Дальнейшее выполнение регламентных заданий не требует никаких дополнительных действий разработчика .

Как мы уже говорили на теоретическом занятии (стр. 200) в начале книги, система «1С:Предприятие» поддерживает два варианта работы: файловый и клиент-серверный .

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

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

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

В режиме «1С:Предприятие»

Итак, проверим, как работают наши регламентные задания .

Запустим «1С:Предприятие» и изменим состояние базы данных .

Например, добавим новый элемент номенклатуры и затем удалим его. Подождем пару минут .

Затем выполним команду главного меню приложения Все функции Стандартные Управление полнотекстовым поиском. Дата актуальности индекса будет соответствовать дате и времени нашей последней манипуляции с базой данных плюс еще минуту (рис. 20.10) .

Рис. 20.10. Изменение даты актуальности полнотекстового индекса

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

642 1С:Предприятие 8.3. Практическое пособие разработчика Контрольные вопросы ; Что такое основной полнотекстовый индекс, и что такое дополнительный полнотекстовый индекс?

; Какова стратегия полнотекстового индексирования информационной базы?

; Для чего предназначены регламентные задания?

; Как задать расписание для автоматического запуска заданий?

Занятие 21

–  –  –

В режиме «Конфигуратор»

В режиме «1С:Предприятие»

Программное редактирование записей регистра

Запись движений регистра из формы

Программная запись движений регистра

Где создавать обработчики событий

Контрольные вопросы

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

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

Рассмотрим пример ввода начальных остатков регистра накопления ОстаткиМатериалов .

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

В режиме «Конфигуратор»

Создадим новый объект конфигурации Документ с именем ВводНачальныхОстатковНоменклатуры .

На закладке Движения запретим проведение документа (поскольку сами будем формировать записи регистра) и отметим, что движения документа будут находиться в регистре накопления ОстаткиМатериалов (рис. 21.1) .

После этого перейдем на закладку Формы и создадим основную форму документа .

В окне редактора форм на закладке Реквизиты раскроем основной реквизит формы Объект, затем раскроем коллекцию движений Движения, найдем строку ОстаткиМатериалов и перетащим ее в окно элементов формы. На вопрос системы «Добавить колонки таблицы?»

ответим утвердительно (рис. 21.2) .

Обратите внимание, что в палитре свойств этой таблицы в строке Данные автоматически будет установлена связь с данными набора записей регистра Объект.Движения.ОстаткиМатериалов .

Занятие 21

–  –  –

Немного изменим внешний вид формы. В окне элементов формы добавим группу полей типа Обычная группа без отображения с типом группировки Горизонтальная и перетащим в нее поля документа 646 1С:Предприятие 8.3. Практическое пособие разработчика Номер и Дата. А также поменяем местами поля таблицы ДвиженияОстаткиМатериалов НаборСвойств и Склад (рис. 21.3) .

–  –  –

В окне редактирования объекта конфигурации Документ ВводНачальныхОстатковНоменклатуры на закладке Подсистемы мы укажем его принадлежность к подсистеме Бухгалтерия .

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

В группе Панель действий.Создать включим видимость у команды Ввод начальных остатков номенклатуры: создать .

В режиме «1С:Предприятие»

Запустим «1С:Предприятие» в режиме отладки и проверим работу нашего документа .

Выполним команду Ввод начальных остатков номенклатуры в разделе Бухгалтерия .

Создадим документ для ввода начальных остатков в регистр ОстаткиМатериалов и внесем в него следующие данные (рис. 21.5) .

Рис. 21.5. Документ «Ввод начальных остатков номенклатуры № 1»

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

Нажмем Записать и в панели навигации формы документа перейдем к движениям нашего документа в регистре ОстаткиМатериалов (рис. 21.6) .

648 1С:Предприятие 8.3. Практическое пособие разработчика

Рис. 21.6. Записи регистра «ОстаткиМатериалов»

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

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

Программное редактирование записей регистра Запись движений регистра из формы В режиме «Конфигуратор»

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

Для этого создадим для формы документа клиентский обработчик события ПередЗаписью и добавим в него следующий текст (листинг 21.1) .

листинг 21.1. Обработчик события «ПередЗаписью» формы документа Для Каждого ЗаписьРегистра Из Объект.Движения.ОстаткиМатериалов Цикл ЗаписьРегистра.Период = Объект.Дата;

КонецЦикла;

Занятие 21 В режиме «1С:Предприятие»

Снова запустим «1С:Предприятие» в режиме отладки, откроем наш документ и нажмем Записать .

Открыв движения документа в регистре ОстаткиМатериалов, увидим, что значение поля Период у всех записей стало равно дате документа (рис. 21.7) .

Рис. 21.7. Измененные записи регистра «ОстаткиМатериалов»

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

Программная запись движений регистра Если программно вызвать метод Записать() у объекта нашего документа, он будет записан без участия формы документа .

Это значит, что событие ПередЗаписью формы документа вызвано не будет и наш код обработчика не отработает .

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

Событие ПередЗаписью в случае интерактивной записи документа сначала будет вызвано у формы документа, а затем у объекта Документ (смотри схему событий в разделе «Последовательность событий при записи документа из формы документа» на стр. 913) .

650 1С:Предприятие 8.3. Практическое пособие разработчика В режиме «Конфигуратор»

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

Для этого на закладке Прочее окна редактирования этого объекта конфигурации откроем модуль объекта и внесем в него следующий текст (листинг 21.2) .

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

ОбновитьДатуДвижений = ЭтоНовый() Или Движения.ОстаткиМатериалов.Модифицированность();

Если Не ОбновитьДатуДвижений Тогда

–  –  –

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

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

Перед установкой даты мы проверяем, был ли прочитан набор записей в свойстве Движения объекта и изменялся ли он. Если оба эти условия ложны, значит набор записей в свойстве Движения объекта пуст, и это состояние не связано с его изменением. В этом случае, чтобы предотвратить ошибочное удаление записей в регистре (перезапись пустым набором записей), мы предварительно читаем движения из регистра в набор записей в свойстве Движения .

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

При выполнении записи объекта Документ этот набор будет записан в регистр накопления .

В режиме «1С:Предприятие»

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

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

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

При этом вероятно, что кроме управления периодом записей регистра вам потребуется управлять значением поля Активность («включать»

и «выключать» проводки документа) и т. д .

652 1С:Предприятие 8.3. Практическое пособие разработчика Где создавать обработчики событий В заключение следует сказать, что выбор обработчика, в который будет помещен текст процедуры, зависит от логики работы создаваемого объекта. Если конфигурация не предусматривает программной записи объекта, можно выбрать обработчик модуля формы. Если предполагается и программная модификация объекта, следует выбирать обработчик модуля объекта .

Заметьте, что оба эти способа не исключают модификацию записей регистра через объект Регистр…НаборЗаписей.имя регистра .

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

Контрольные вопросы ; Для чего предназначен документ для ввода начальных остатков, и как его создать?

; Как программно изменить значение регистра при вводе начальных остатков?

; В каких случаях использовать модуль формы, а в каких – модуль объекта для размещения обработчиков событий?

Занятие 22

–  –  –

Что такое роль

Создание ролей

В режиме «Конфигуратор»

Администратор

Директор

Мастер

Расчетчик

Бухгалтер

Права на запуск клиентских приложений

Добавление новых пользователей

Ограничение доступа к данным на уровне записей и полей базы данных...............665 Контрольные вопросы

654 1С:Предприятие 8.3. Практическое пособие разработчика После того как созданы все основные объекты конфигурации, можно приступить к определению ролей пользователей. Администрирование списка пользователей «1С:Предприятия» и назначение им ролей в соответствии с их служебными обязанностями – очень важные моменты для организации интерфейса прикладного решения в целом и разграничения прав и действий его отдельных пользователей. Этому вопросу и будет посвящено данное занятие .

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

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

Кроме этого, должна существовать возможность ограничить пользователей в выполнении тех или иных действий с объектами базы данных. Например, кладовщик может создавать и изменять приходные накладные, поскольку он отвечает за учет материалов на предприятии. Мастеру может понадобиться просматривать приходные накладные для того, чтобы знать, какие материалы и когда были получены. Однако мастер не должен иметь возможности вносить какие-либо изменения в приходные накладные .

Что такое роль Для описания подобных разрешений используются объекты конфигурации Роль. С помощью такого объекта разработчик получает возможность описать набор прав на выполнение тех или иных действий над каждым объектом базы данных и над всей конфигурацией в целом .

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

Занятие 22 Если пользователю поставлено в соответствие несколько ролей, предоставление доступа будет осуществляться по следующему алгоритму:

если хотя бы в одной роли есть разрешение, то доступ будет открыт;

если во всех ролях разрешение отсутствует, то доступ будет закрыт .

Создание ролей В режиме «Конфигуратор»

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

–  –  –

Откроется окно редактирования прав этой роли (рис. 22.2) .

Слева, в списке объектов, перечислены все объекты и виды объектов конфигурации, а справа, в окне прав, – доступные права для выбранного объекта или видов объектов конфигурации .

656 1С:Предприятие 8.3. Практическое пособие разработчика

Рис. 22.2. Окно редактирования прав для роли «Администратор»

Администратор должен иметь права на все объекты и все виды объектов. Для этого выполним команду Действия Установить все права в командной панели окна .

После этого все права для всех объектов будут помечены .

Однако можно поставить или снять отметку для прав конкретного объекта конфигурации, пользуясь кнопками Отметить все элементы и Снять отметку со всех элементов, расположенными над окном прав .

Теперь единственное, что следует сделать, – снять разрешение на интерактивное удаление для всех объектов. Это необходимо для того, чтобы администратор случайно не мог удалить какой-либо объект базы данных. Для этого пройдемся по всем видам объектов конфигурации (Справочники, Документы и т. д.) и снимем отметку с команды Интерактивное удаление. Заметьте, что одновременно с отключением права на интерактивное удаление объектов снимается также отметка с права Интерактивное удаление предопределенных (см. рис. 22.2) .

Для того чтобы наш Администратор мог работать с объектами, которые мы будем создавать после расстановки прав, зададим для него параметр Устанавливать права для новых объектов (см. рис. 22.2) .

На этом создание роли Администратор закончено .

Занятие 22 Директор Следующей ролью, которую мы создадим, будет роль Директор .

Создадим новый объект конфигурации Роль с именем Директор .

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

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

Теперь нам останется лишь пройти по видам объектов конфигурации и установить для них право Просмотр (права Чтение и Использование при этом установятся автоматически) .

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

Рис. 22.3. Окно редактирования прав для роли «Директор»

Вторая роль нашей конфигурации готова .

658 1С:Предприятие 8.3. Практическое пособие разработчика Мастер Следующая роль, которую мы создадим, будет роль Мастер. Снова добавим новый объект конфигурации Роль с именем Мастер .

Выполним команду Действия Установить по подсистемам… и выберем подсистемы УчетМатериалов и ОказаниеУслуг. Нажмем Установить .

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

Если теперь установить фильтр объектов по подсистемам УчетМатериалов и ОказаниеУслуг, то можно при необходимости внести уточнения в установленные права (рис. 22.4) .

Рис. 22.4. Установка фильтра по подсистеме

В частности, для справочника Сотрудники мы запретим права Добавление, Изменение и Удаление .

Обратите внимание, что при запрете права Добавление исчезла отметка и у права Интерактивное добавление, так как оно является «уточнением» права Добавление. Точно так же уточненные права запрещаются и при отмене прав на изменение и удаление .

Кроме этого, мы снова снимем разрешения на интерактивное удаление для всех объектов базы данных. Для этого пройдем по всем Занятие 22 видам объектов конфигурации и снимем у всех право Интерактивное удаление .

Затем снимем фильтр и установим все права, кроме интерактивного удаления для следующих объектов конфигурации:

справочник ВариантыНоменклатуры, справочник ДополнительныеСвойстваНоменклатуры, план видов характеристик СвойстваНоменклатуры, регистр сведений ЗначенияСвойствНоменклатуры .

Эти объекты мы не привязывали ни к каким подсистемам, но они будут нужны для работы с характеристиками номенклатуры .

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

Роль Мастер готова .

Расчетчик В заключение нам с вами осталось создать две роли: Бухгалтер и Расчетчик .

Мы разделим права по расчету зарплаты и по ведению бухгалтерского учета .

Дело в том, что в ООО «На все руки мастер» есть бухгалтер и помощник бухгалтера. Помощник бухгалтера занят в основном расчетом зарплаты, но иногда это делает и главный бухгалтер .

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

Создадим новый объект конфигурации Роль с именем Расчетчик .

В окне редактирования прав установим их по подсистеме РасчетЗарплаты (и не забудем запретить интерактивное удаление) .

А также установим право Просмотр для объекта конфигурации:

Регистр накопления Продажи и справочника Клиенты .

В заключение установим право Просмотр у подсистемы Предприятие .

Роль Расчетчик готова .

660 1С:Предприятие 8.3. Практическое пособие разработчика Бухгалтер В заключение создадим объект конфигурации Роль с именем Бухгалтер. В окне редактирования прав установим их по подсистеме Бухгалтерия .

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

Также запретим интерактивное удаление для всех объектов .

Затем снимем фильтр и установим все права, кроме интерактивного удаления для объекта конфигурации Справочник Субконто .

А также установим право Просмотр для следующих объектов конфигурации:

Справочник Склады, Справочник ВариантыНоменклатуры, Справочник ДополнительныеСвойстваНоменклатуры, План видов характеристик СвойстваНоменклатуры, Регистр сведений ЗначенияСвойствНоменклатуры .

В заключение установим право Просмотр у подсистемы Предприятие .

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

Для этого воспользуемся другим, более удобным инструментом – редактором Все роли. В дереве объектов конфигурации выделим ветку Роли и в контекстном меню выполним команду Все роли .

Мы видим, что права Тонкий клиент и Веб-клиент включены для всех ролей (рис. 22.5) .

Администратор также имеет возможность подключаться и с помощью других клиентских приложений .

Список прав для каждой роли можно получить, выполнив в окне редактирования прав команду Действия Вывести список… (рис. 22.6) .

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

Занятие 22 Рис. 22.5. Окно редактора «Все роли»

Рис. 22.6. Список прав для роли «Бухгалтер»

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

Можно создавать и удалять пользователей системы, назначать им роли и т. д .

В режиме «Конфигуратор»

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

После того как обновление произведено, выполним команду главного меню Администрирование Пользователи .

Откроется список пользователей системы. Пока что он пуст, поэтому добавим нового пользователя (Действия Добавить) или нажмем кнопку Добавить в командной панели окна (рис. 22.7) .

–  –  –

ВниМАние!

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

пользователя – это идентификатор, который будет появИмя ляться в окне выбора пользователей при запуске системы в режиме 1С:Предприятие .

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

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

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

операционной системы подразумевает, что при Аутентификация запуске системы «1С:Предприятие» от пользователя не требуется 664 1С:Предприятие 8.3. Практическое пособие разработчика

–  –  –

Нажмем ОК .

После этого создадим остальных пользователей системы (рис. 22.10) .

Для всех них мы будем использовать аутентификацию «1С:Предприятия» и русский язык .

–  –  –

Обратите внимание, что главному бухгалтеру Назаровой поставлены в соответствие две роли: Расчетчик и Бухгалтер, поскольку она должна иметь возможность не только вести бухгалтерский учет, но и рассчитывать зарплату .

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

Для этого в системе «1С:Предприятие» используется механизм ограничения доступа на уровне записей и полей базы данных .

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

Такое уточнение записывается на специальном языке, являющемся подмножеством языка запросов .

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

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

В режиме «Конфигуратор»

Для решения этой задачи сначала установим для роли Мастер право Просмотр для документа НачисленияСотрудникам .

Поскольку этот документ принадлежит подсистеме РасчетЗарплаты, дадим право на просмотр этой подсистемы. Также дадим права на просмотр справочника ВидыГрафиковРаботы и плана видов расчета Основные начисления, т. к. ссылки на эти объекты используются в документе НачисленияСотрудникам. Вернемся к редактированию прав для документа НачисленияСотрудникам .

666 1С:Предприятие 8.3. Практическое пособие разработчика Как мы видим, при установке права Просмотр право Чтение документа НачисленияСотрудникам установилось автоматически. Выделим его .

В правой нижней части экрана находится поле Ограничение доступа к данным. Нажмем кнопку Добавить (рис. 22.11) .

Рис. 22.11. Добавление ограничения доступа для роли «Мастер»

Мы хотим запретить доступ ко всем полям документа Начисления сотрудникам .

Поэтому мы не будем выбирать поля, а нажмем кнопку выбора в поле Ограничение доступа (рис. 22.12) .

Откроется окно Ограничение доступа, в котором можно задать текст на специальном языке, являющемся подмножеством языка запроса .

Для облегчения работы мы воспользуемся конструктором запроса .

Нажмем кнопку Конструктор запроса .

Откроется конструктор ограничений доступа к данным. Он похож на конструктор запросов (см. рис. 22.13) .

Таблица НачисленияСотрудникам автоматически попала на закладку Таблицы и поля, а конструктор открылся на закладке Условия .

Перенесем в список условий поле ВидРасчета табличной части Начисления, установим флажок Произвольное и заполним правую часть условия, как показано в листинге 22.1 (рис. 22.13) .

Занятие 22

–  –  –

листинг 22.1. Ограничение доступа к данным НачисленияСотрудникам.Начисления.ВидРасчета ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисления.Премия) Рис. 22.13. Конструктор ограничений доступа к данным Нажмем ОК (рис. 22.14) .

668 1С:Предприятие 8.3. Практическое пособие разработчика

–  –  –

Текущий пользователь имеет право прочитать или изменить некоторый объект базы данных только в том случае, если ограничение доступа предоставляет ему такое право. То есть когда условие ограничения истинно .

В нашем случае пользователь сможет прочитать документ Начисления сотрудникам НачисленияСотрудникам ГДЕ… только в том случае, если в его табличной части Начисления … ГДЕ НачисленияСотрудникам.Начисления … есть виды расчета … ГДЕ НачисленияСотрудникам.Начисления.ВидРасчета …, не являющиеся видом расчета Премия … ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисления.Премия) .

Нажмем ОК .

Окно ограничений доступа к данным для роли Мастер будет выглядеть следующим образом (рис. 22.15) .

Рис. 22.15. Ограничение доступа для роли «Мастер»

Занятие 22 В режиме «1С:Предприятие»

Обновим информационную базу, нажав F7, и запустим «1С:Предприятие» для пользователя с ролью Мастер, например, для пользователя Гусаков .



Pages:     | 1 | 2 || 4 | 5 |



Похожие работы:

«Г о с го р те х н а д з о р Р о с с и и # Н Т Ц " П ром ы ш ленная б е зо п асн о сть " С ерия 05 Н орм ативны е д окум енты по б е зопасности, надзорной и разреш ительной д еятел ьности в угольной пром ы ш л енности В ы пуск 6 ПРАВИЛА БЕЗОПАСНОСТИ ПРИ ОБОГАЩЕНИИ И БРИКЕТИРОВАНИИ УГЛ...»

«МНМНОТПЧ'ТНО мГм " TPAttciiopTiU'i't) строп riuibimiA AUIIIIU.f"l4tTHO д аw sa" имв л т а г _ РСФСР СПЕЦИАЛЬНЫХ строительных РАьот СССР ПРАВИЛА ПРОИЗВОДСТВА И ПРИЕМКИ РАБОТ ПРИ ВОЗВЕДЕНИИ МОРСКИХ И РЕЧНЫХ ПОРТОВЫХ СООРУЖЕНИИ Глава V III КОНТРОЛЬ ТРЕ1ЦИ ПОСТОВ КОСТИ ПРЕДВАРИТЕЛЬНО-НАПРЯЖЕННЫХ ЖЕЛЕЗОБЕТОННЫХ ЭЛЕМЕНТОВ ПОРТОВЫХ Г...»

«ДОГОВОР № г. Москва "01" ноября 2016 г. Ассоциация саморегулируемых организаций общероссийская негосударственная некоммерческая организация общероссийское межотраслевое объединение рабо...»

«ООО "Сибирь-мехатроника" Станция технологического контроля серии СТК 500 (в том числе, входящая в состав станции частотного управления СЧ 500). Часть 1. Техническое описание. Новосибирск – 2014 Уважаемый п...»

«ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ТЕХНИЧЕСКОМУ РЕГУЛИРОВАНИЮ И МЕТРОЛОГИИ НАЦИОНАЛЬНЫЙ ГОСТР СТАНДАРТ 54150РОССИЙСКОЙ ФЕДЕРАЦИИ ПРОВОЛОКА ИЗ БРОНЗЫ МАРКИ БрКМцЗ-1 Технические условия Издание официальное Москва Стамдартинформ метрология...»

«Приложение к свидетельству № 66948 Лист № 1 об утверждении типа средств измерений Всего листов 13 ОПИСАНИЕ ТИПА СРЕДСТВА ИЗМЕРЕНИЙ Полуприцепы-цистерны УЗСТ ППЦ и прицепы-цистерны УЗСТ ПЦ Назначение средства измерений Полуприцепы-цистерны УЗСТ ППЦ (далее УЗСТ ППЦ) и прицепы-цистерны УЗСТ ПЦ...»

«Отчет №03-2017 об оценке рыночной стоимости нежилого административного здания с мансардой (отдельно стоящее здание), общей площадью 371 м2, кадастровый (или условный) номер: 23:43:0414013:5273, адрес (местоположение): Краснодарский край, г. Краснодар, Карасунский округ, ул. им. Стасова/Сормовская, д. 178-180/1 и объ...»

«НИУ МГСУ СК О ПВД 01-356-2016 Центр "Постоянно действующая приемная комиссия" Ректор НИУ МГСУ А. А. Волков “_”_ 2016 г.Ввес ти в дейс твие: “_”_ 2016 г. ПОЛОЖЕНИЕ о порядке учета индивидуальных достижений поступающих при приеме на обучение по образовательным программам высше...»

«Краткое описание ЛКМ АО "МХЗ" Армокот® Z600 Материал лакокрасочный полисилоксановый ТУ 2312-009-23354769-2008 Область Материал предназначен для промышленного применения с целью создания применения защитно-декоративного, атмосферостойкого, термостойкого, масло-бензостойкого покрытия, для защиты металлических, ж...»

«ИНСТРУМЕНТЫ И МЕХАНИЗМЫ ФОРМИРОВАНИЯ КОНКУРЕНТОСПОСОБНОСТИ ЭКОНОМИЧЕСКИХ СИСТЕМ Сборник статей Международной научно-практической конференции 1 октября 2018 г. НАУЧНО-ИЗДАТЕЛЬСКИЙ ЦЕНТР "АЭТЕРНА"...»

«Согласовано: Согласовано: ФГБУ ВНИИПО МЧС России ФГУП "ВНИИФТРИ" ОС "ПОЖТЕСТ" ОС ВСИ "ВНИИФТРИ" ВЗРЫВОЗАЩИЩЕННЫЙ ИЗВЕЩАТЕЛЬ ПОЖАРНЫЙ ПЛАМЕНИ ИП330-3-3 "Спектрон" серия 200 исполнения: "Спектрон-202", "Спектрон-202-Exm-M", "Спектрон-202-Exi-M" Руководство по эксплуатации СПЕК.425200....»

«PA653UL Лазерный проектор Спецификация Проектор PA653UL от NEC сочетает в себе лазерные, жидкокристаллические и бесфильтровые технологии! Компания NEC выпускает первый в мире бесфильтровый лазерный проектор...»

«Проект Министерство образования Республики Беларусь Учреждения образования "Белорусский государственный университет информатики и радиоэлектроники" Филиал "Минский радиотехнический колледж" УТВЕРЖДАЮ Директор С.Н.Анкуда ""2018г Производственная практика методические рекомендации п...»

«ІНТЕГРОВАНІ ТЕХНОЛОГІЇ ПРОМИСЛОВОСТІ _ УДК 678.5:678.046 Рассоха А.Н., Черкашина А.Н. ВЛИЯНИЕ АРМИРУЮЩЕГО НАПОЛНИТЕЛЯ НА СВОЙСТВА ФУРАНО-ЭПОКСИДНЫХ КОМПОЗИЦИОННЫХ МАТЕРИАЛОВ Фурано-эпоксидные композиционные материалы (ПКМ), обладая к...»

«УДК 519.6:517.958:533.6 ББК 27.5.14.4 М34 Издание осуществлено при финансовой поддержке Российского фонда фундаментальных исследований (проект 18-08-20036) и Московского авиационного института (националь...»

«НАВИГАЦИОННЫЙ КОНТРОЛЛЕР ARNAVI 5 РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ ООО "АРУСНАВИ ЭЛЕКТРОНИКС" Оглавление ОБЩИЕ СВЕДЕНИЯ 1. Технические характеристики 2. Внешний вид устройства и распиновка основного разъёма НАСТРОЙКА ТРЕКЕРА 1. WE...»

«Министерство образования и науки Российской Федерации Федеральное государственное автономное образовательное учреждение высшего образования "Уральский федеральный университет имени первого Президента России Б.Н.Ельцина" Высшая шк...»

«Акционерное общество Радио и Микроэлектроника Выключатели вакуумные РиМ ВВ Руководство по эксплуатации Новосибирск Содержание 1 ОПИСАНИЕ И РАБОТА 1.1 Назначение ВВ 1.2 Технические характеристики 1.3 Комплект поставки ВВ 1.4 Конструкция ВВ 1.5 Работа ВВ 1.6 Маркировка и пломбиров...»

«Документ отредактирован по состоянию на 30.09.05г.УСТРОЙСТВО МИКРОПРОЦЕССОРНОЕ ЗАЩИТЫ, АВТОМАТИКИ, КОНТРОЛЯ И УПРАВЛЕНИЯ ПРИСОЕДИНЕНИЙ 6-35 кВ МРЗС – 05 – 01 Руководство по эксплуатации РСГИ.466452.007-41 РЭ Содержание 1 Назначение 2 Технические характеристики 2.1 Общие технические характеристики 2.2 Технические возм...»

«1 Договор поставки № г. Екатеринбург 2016 г. "О б " Екатеринбургское муниципальное унитарное предприятие "Екатеринбургский метрополитен", именуемый в дальнейшем "Покупатель", в лице директора Шафрая Владимира Владимировича, действующего на основании Устава, с одной сторон...»







 
2019 www.librus.dobrota.biz - «Бесплатная электронная библиотека - собрание публикаций»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.