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

Pages:     | 1 || 3 | 4 |   ...   | 5 |

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

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

Рис. 6.10. Регистраторы регистра «ОстаткиМатериалов»

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

В группе Панель навигации.Обычное включим видимость у команды Остатки материалов и мышью перетащим ее в группу Панель навигации.См.также (рис. 6.11) .

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

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

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

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

В открывшемся окне «1С:Предприятия» мы видим, что в панели команд разделов Бухгалтерия, Оказание услуг и Учет материалов в конце списка команд для открытия различных списков, перед подменю Создать, Отчеты (если они есть) появилась команда для открытия списка регистра Остатки материалов (рис. 6.12) .

Рис. 6.12. Список регистра накопления «ОстаткиМатериалов»

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

Откроем Приходную накладную № 1 и нажмем Провести и закрыть, то есть перепроведем ее. То же самое сделаем для Приходной накладной № 2 .

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

Для этого следует выделить нужный документ в списке (или выделить мышью группу документов, удерживая клавишу Ctrl), раскрыть подменю Еще в командной панели формы списка и выбрать пункт Провести (рис. 6.13) .

–  –  –

Теперь выполним команду Остатки материалов и откроем список нашего регистра накопления (рис. 6.14) .

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

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

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

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

Занятие 6 Рис. 6.14. Список регистра накопления «ОстаткиМатериалов»

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

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

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

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





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

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

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

Установим свойство Видимость для этой команды (рис. 6.15) .

Рис. 6.15. Настройка командного интерфейса формы документа В режиме «1С:Предприятие»

Запустим «1С:Предприятие» в режиме отладки и откроем Приходную накладную № 2 (рис. 6.16) .

–  –  –

Под заголовком формы документа появилась панель навигации, в которой мы можем переходить к списку записей регистра Остатки Материалов, связанному с документом (рис. 6.17), и обратно к содержимому документа (ссылка Главное) .

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

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

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

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

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

Перейдем на закладку Движения и в списке регистров конфигурации отметим регистр накопления ОстаткиМатериалов .

Нажмем кнопку Конструктор движений .

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

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

Теперь нажмем кнопку Заполнить выражения .

В нижнем окне сформируется соответствие полей (измерений и ресурсов) регистра и выражений для их расчета. Однако при автоматическом заполнении поле Материал не заполнится .

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

Чтобы избежать этого, нужно выделить поле регистра Материал и в окне Реквизиты документа дважды щелкнуть по строке ТекСтрокаПереченьНоменклатуры.Номенклатура .

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

–  –  –

Конструктор создал обработчик события ОбработкаПроведения объекта конфигурации Документ ОказаниеУслуги и поместил его в модуль объекта (листинг 6.2) .

листинг 6.2 .

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

Процедура ОбработкаПроведения(Отказ, Режим) //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ // Данный фрагмент построен конструктором .

// При повторном использовании конструктора внесенные вручную изменения будут утеряны!!!

// регистр ОстаткиМатериалов Расход Движения.ОстаткиМатериалов.Записывать = Истина;

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

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

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

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

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

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

КонецЦикла;

//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ КонецПроцедуры Обратите внимание, что строка Движение.ВидДвижения = ВидДвиженияНакопления.Расход определяет вид движения регистра накопления, производимый этим документом как Расход, а в остальном процедура обработчика ОбработкаПроведения документа ОказаниеУслуги идентична обработчику документа ПриходнаяНакладная (см. листинг 6.1), подробно разобранному нами ранее .

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

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

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

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

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

Теперь выполним команду Остатки материалов и откроем список нашего регистра накопления (рис. 6.19) .

Рис. 6.19. Список регистра накопления «ОстаткиМатериалов»

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

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

Пиктограмма со знаком минус слева от записи указывает на тип движения – Расход (см. рис. 6.19) .

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

Для этого откроем еще раз документ Оказание услуги № 1 .

Занятие 6 В форме документа появилась панель навигации, в которой мы можем переходить к списку записей регистра Остатки материалов, связанному с документом, и обратно к содержимому документа (рис. 6.20) .

Рис. 6.20. Переход к регистру накопления из формы документа Однако сформированные таким образом движения этого документа будут не совсем правильны .

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

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

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

Многие объекты встроенного языка являются коллекциями .

Коллекция представляет собой совокупность объектов. Существуют общие принципы работы с любой коллекцией .

Во-первых, доступ к каждому объекту коллекции возможен путем перебора элементов коллекции в цикле. Для этого используется конструкция языка Для Каждого Из … Цикл … (листинг 6.3) .

230 1С:Предприятие 8.3. Практическое пособие разработчика листинг 6.3. Перебор элементов коллекции в цикле Для Каждого СтрокаТабличнойЧасти Из ТабличнаяЧасть Цикл Сообщить(СтрокаТабличнойЧасти.Услуга);

КонецЦикла;

В этом примере ТабличнаяЧасть – это коллекция строк табличной части объекта конфигурации. При каждом проходе цикла в переменной СтрокаТабличнойЧасти будет содержаться очередная строка из этой коллекции .

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

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

листинг 6.4 .

Обращение к элементу коллекции Справочники.Сотрудники;

Справочники["Сотрудники"];

В этом примере Справочники – это коллекция менеджеров всех справочников, содержащихся в конфигурации. Так как каждый справочник конфигурации имеет свое уникальное имя, то к конкретному элементу этой коллекции (к менеджеру конкретного справочника) можно обратиться, указав имя этого справочника: Справочники[«Сотрудники»] .

2. Если нет смысла в «персонификации» элементов коллекции (коллекция неименованная), тогда обращение к элементу коллекции возможно по индексу (индекс первого элемента коллекции – ноль), листинг 6.5 .

листинг 6.5 .

Обращение к элементу коллекции по индексу ТабличнаяЧасть[0];

В этом примере ТабличнаяЧасть – это коллекция строк табличной части объекта конфигурации. И мы обращаемся к первому элементу этой коллекции, указывая его индекс – 0 .

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

Занятие 6

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

; Для чего предназначен объект конфигурации «Регистр накопления»?

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

; Для чего нужны измерения регистра, ресурсы и реквизиты?

; Что такое движения регистра, и что такое регистратор?

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

; Как создать движения документа с помощью конструктора движений?

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

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

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

–  –  –

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

Что такое отчет

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

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

Макет

Схема компоновки данных

Набор данных

Текст запроса

Настройки отчета

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

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

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

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

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

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

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

–  –  –

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

Откроем в конфигураторе нашу учебную конфигурацию и добавим новый объект конфигурации Отчет .

Для этого выделим в дереве объектов конфигурации ветвь Отчеты и нажмем кнопку Добавить в командной панели окна конфигурации (рис. 7.2) .

Рис. 7.2. Создание нового объекта конфигурации «Отчет»

В открывшемся окне редактирования объекта конфигурации на закладке Основные зададим имя отчета – Материалы .

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

Создадим основу для построения любого отчета – схему компоновки данных. Для этого нажмем кнопку Открыть схему компоновки данных или кнопку открытия со значком лупы (рис. 7.3) .

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

–  –  –

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

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

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

Рис. 7.5. Добавление набора данных в конструкторе схемы компоновки Текст запроса Для того чтобы создать текст запроса, запустим конструктор запроса – нажмем кнопку Конструктор запроса (рис. 7.6) .

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

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

Если раскрыть ветку РегистрыНакопления, то мы увидим, что кроме таблицы регистра ОстаткиМатериалов в этой ветке присутствуют еще несколько виртуальных таблиц, которые формирует система (рис. 7.7) .

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

–  –  –

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

пРиМеЧАние Выделенные элементы можно перенести из одного списка в другой перетаскиванием мышью или двойным щелчком на них. Либо можно использовать кнопки,,, .

В результате окно Поля должно быть заполнено следующим образом (рис. 7.9) .

–  –  –

Нажмем OK и вернемся в конструктор схемы компоновки данных (рис. 7.10) .

Рис. 7.10. Конструктор схемы компоновки данных 240 1С:Предприятие 8.3. Практическое пособие разработчика Текст запроса, который был создан с помощью конструктора, платформа поместит в поле Запрос .

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

Для упрощения восприятия материала мы не будем здесь приводить листинг запроса и разбирать его. Более подробно этот вопрос будет рассмотрен в разделе о языке запросов на занятии «Отчеты»

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

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

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

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

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

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

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

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

Занятие 7 Тем самым мы определили, что в отчет будут выводиться детальные записи из информационной базы – записи, получаемые в результате выполнения запроса без итогов (рис. 7.11) .

–  –  –

В структуре отчета появится группировка Детальные записи .

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

Для этого перейдем в нижнем окне настроек на закладку Выбранные поля и перенесем мышью из списка доступных полей:

Склад,

–  –  –

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

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

В результате окно настроек отчета должно иметь вид (рис. 7.12) .

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

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

Рис. 7.12. Окно настроек отчета

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

Затем выделим каждый из параметров, нажмем кнопку Свойства элемента пользовательских настроек и установим флажок Включать в пользовательские настройки (рис. 7.13) .

Рис. 7.13. Окно настроек отчета Занятие 7 Таким образом, перед формированием отчета пользователь сможет задать отчетный период. Более подробно о параметрах и пользовательских настройках отчета будет рассказано позже на занятии «Отчеты» (стр. 323) .

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

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

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

Таким образом, ссылка на наш отчет автоматически попадет в панель команд этих разделов, в подменю Отчеты (рис. 7.14) .

Рис. 7.14. Определение списка подсистем, в которых будет отражаться отчет 244 1С:Предприятие 8.3. Практическое пособие разработчика В режиме «1С:Предприятие»

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

В открывшемся окне «1С:Предприятия» мы видим, что в разделах Бухгалтерия, Оказание услуг и Учет материалов появилось новое подменю Отчеты, содержащее команды для выполнения отчетов, и в нем команда для формирования отчета Материалы (рис. 7.15) .

Рис. 7.15. Команда для формирования отчета «Материалы»

Выполним ее. Откроется автоматически сформированная системой форма отчета .

Зададим даты начала и окончания отчетного периода и нажмем кнопку Сформировать (рис. 7.16) .

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

Занятие 7 Рис. 7.16. Отчет «Материалы»

246 1С:Предприятие 8.3. Практическое пособие разработчика Контрольные вопросы ; Для чего предназначен объект конфигурации «Отчет»?

; Как создать отчет с помощью конструктора схемы компоновки данных?

; Как отобразить отчет в разделах прикладного решения?

Занятие 8

–  –  –

Что такое макет

Макет печатной формы

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

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

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

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

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

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

248 1С:Предприятие 8.3. Практическое пособие разработчика На этом занятии вы познакомитесь с очередным новым объектом конфигурации – Макет. Вы узнаете о его назначении и создадите макет документа, на основе которого будет формироваться печатная форма документа .

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

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

Макеты могут существовать как сами по себе (общие макеты), так и быть подчинены какому-либо объекту конфигурации .

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

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

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

–  –  –

Нажмем Далее .

250 1С:Предприятие 8.3. Практическое пособие разработчика На втором шаге нажатием кнопки определим, что все реквизиты нашего документа будут отображены в шапке печатной формы (рис. 8.3) .

–  –  –

Нажмем Далее .

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

–  –  –

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

–  –  –

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

Нажмем OK .

В конфигураторе откроется модуль команды Печать, модуль менеджера документа ОказаниеУслуги и макет этого документа (рис. 8.6) .

Рис. 8.6. Макет документа «Оказание услуги»

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

–  –  –

В командную панель формы документа ОказаниеУслуги помещена команда Печать для формирования печатной формы документа (рис. 8.8) .

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

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

Занятие 8

–  –  –

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

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

Обратите внимание, что в командной панели документа появилась новая кнопка Печать (рис. 8.9) .

Рис. 8.9. Форма документа «Оказание услуги» с новой кнопкой «Печать»

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

Нажмем эту кнопку (в форме списка или в форме документа) и увидим печатную форму нашего документа (рис. 8.10) .

Рис. 8.10. Печатная форма документа «Оказание услуги»

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

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

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

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

Откроем конфигуратор, раскроем дерево документа Оказание Услуги и дважды щелкнем на макете Печать .

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

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

Добавим новую область для вывода итоговой суммы документа .

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

Занятие 8

Рис. 8.11. Создание области ячеек для вывода итоговой строки

Назовем область Всего, нажмем ОК .

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

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

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

Согласимся .

Аналогичные действия выполним и для колонок 3, 4, 5 и 6 .

В созданной области, в колонке Цена напишем ВСЕГО, а в колонке Сумма напишем ВсегоПоДокументу (рис. 8.12) .

Рис. 8.12. Создание ячеек для вывода итога 256 1С:Предприятие 8.3. Практическое пособие разработчика Вызвав палитру свойств для ячейки ВсегоПоДокументу (контекстное меню – Свойства), в свойстве Заполнение укажем, что в этой ячейке будет находиться не текст, а параметр (рис. 8.13) .

–  –  –

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

Текст, содержащийся в ячейке, будет показан на экране .

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

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

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

Откроем модуль менеджера документа ОказаниеУслуги .

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

Занятие 8

Рис. 8.14. Открытие модуля менеджера документа «ОказаниеУслуги»

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

листинг 8.1 .

Печать формы документа (фрагмент) … ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");

Шапка = Макет.ПолучитьОбласть("Шапка");

ОбластьПереченьНоменклатурыШапка = Макет.ПолучитьОбласть("ПереченьНоменклатурыШапка");

ОбластьПереченьНоменклатуры = Макет.ПолучитьОбласть("ПереченьНоменклатуры");

ОбластьИтог = Макет.ПолучитьОбласть("Всего");

ТабДок.Очистить();

ВставлятьРазделительСтраниц = Ложь;

Пока Выборка.Следующий() Цикл Если ВставлятьРазделительСтраниц Тогда ТабДок.ВывестиГоризонтальныйРазделительСтраниц();

КонецЕсли;

ТабДок.Вывести(ОбластьЗаголовок);

Шапка.Параметры.Заполнить(Выборка);

ТабДок.Вывести(Шапка, Выборка.Уровень());

ТабДок.Вывести(ОбластьПереченьНоменклатурыШапка);

ВыборкаПереченьНоменклатуры = Выборка.ПереченьНоменклатуры.Выбрать();

СуммаИтог = 0;

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

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

–  –  –

ОбластьИтог.Параметры.ВсегоПоДокументу = СуммаИтог;

ТабДок.Вывести(ОбластьИтог);

ВставлятьРазделительСтраниц = Истина;

КонецЦикла;

… Смысл добавленного фрагмента прост. Мы обращаемся к макету документа ОказаниеУслуги по его имени – Макет .

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

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

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

В заключение мы выводим итоговую область в табличный документ, который будет показан на экране и распечатан пользователем – ТабДок.Вывести(ОбластьИтог) .

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

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

Запустим «1С:Предприятие» в режиме отладки и проверим результат наших изменений (рис. 8.15) .

Рис. 8.15. Печатная форма документа «Оказание услуги»

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

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

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

; Для чего предназначен объект конфигурации «Макет»?

; Что такое конструктор печати?

; Как создать макет с помощью конструктора печати?

; Как изменить табличный документ?

; Какая разница в заполнении ячейки табличного документа текстом, параметром и шаблоном?

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

Занятие 9 Периодические регистры сведений пРодолжительность Ориентировочная продолжительность занятия – 50 минут .

Зачем нужен периодический регистр сведений

Что такое регистр сведений

Добавление периодического регистра сведений

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

Измерения и ресурсы

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

Создание записей в регистре сведений

Автоматическая подстановка цены в документ при выборе номенклатуры............271 В режиме «Конфигуратор»

Функция, возвращающая цену номенклатуры

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

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

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

262 1С:Предприятие 8.3. Практическое пособие разработчика На этом занятии мы с вами познакомимся с объектом конфигурации Регистр сведений, а точнее с одним из его видов – периодическим регистром сведений. Вы узнаете, для чего предназначен этот объект конфигурации и какова его структура .

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

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

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

Однако стоимость услуг имеет особенность меняться со временем .

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

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

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

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

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

Рис. 9.1. Независимый периодический регистр сведений «Цены»

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

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

Периодичность регистра сведений можно определить одним из следующих значений:

в пределах секунды;

в пределах дня;

в пределах месяца;

в пределах квартала;

в пределах года;

в пределах регистратора (если установлен режим записи Подчинение регистратору) .

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

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

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

Ключом записи, однозначно идентифицирующим запись, является в данном случае совокупность значений измерений регистра Занятие 9 и периода (в случае, если регистр сведений периодический) .

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

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

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

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

Добавление периодического регистра сведений Приступим к созданию периодического регистра сведений, который будет хранить развернутые во времени розничные цены материалов и стоимости услуг, оказываемых нашим ООО «На все руки мастер» .

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

Откроем в конфигураторе нашу учебную конфигурацию и добавим новый объект конфигурации Регистр сведений .

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

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

Установим свойство Периодичность этого регистра – В пределах секунды .

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

–  –  –

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

Для этого выделим ветвь Измерения и нажмем кнопку Добавить в командной панели окна .

Укажем, что это измерение будет ведущим (рис. 9.4) .

Рис. 9.4. Создание ведущего измерения регистра сведений

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

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

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

Затем создадим ресурс Цена, тип Число, длина 15, точность 2, неотрицательное .

Для этого выделим ветвь Ресурсы и нажмем кнопку Добавить в командной панели окна (рис. 9.5) .

Рис. 9.5. Создание ресурса регистра сведений Занятие 9 В режиме «1С:Предприятие»

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

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

Рис. 9.6. Команда для открытия периодического регистра сведений «Цены»

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

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

Зададим стоимость услуг ООО «На все руки мастер» следующим образом (рис. 9.7) .

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

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

–  –  –

Автоматическая подстановка цены в документ при выборе номенклатуры Наша задача заключается в следующем. Цена номенклатуры у нас теперь хранится в отдельном регистре сведений. Когда мы создаем или изменяем документ ОказаниеУслуги и добавляем в табличную часть какую-либо номенклатуру, нам хочется, чтобы одновременно с этим в документ подставлялась бы сразу и актуальная цена этой номенклатуры, полученная из регистра сведений и соответствующая дате документа .

Для этого нам нужно сделать две вещи .

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

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

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

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

Откроем конфигуратор, в ветке Общие Общие модули добавим новый объект конфигурации Общий модуль и назовем его РаботаСоСправочниками .

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

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

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

Рис. 9.9. Свойства общего модуля

Поместим в него следующий текст (листинг 9.1) .

листинг 9.1 .

Функция «РозничнаяЦена()»

Функция РозничнаяЦена(АктуальнаяДата, ЭлементНоменклатуры) Экспорт // Создать вспомогательный объект "Отбор" .

Отбор = Новый Структура("Номенклатура", ЭлементНоменклатуры);

// Получить актуальные значения ресурсов регистра .

ЗначенияРесурсов = РегистрыСведений.Цены.ПолучитьПоследнее(АктуальнаяДата, Отбор);

Возврат ЗначенияРесурсов.Цена;

КонецФункции Поясним эту функцию .

Для получения розничной цены мы будем передавать в функцию два параметра:

АктуальнаяДата – параметр типа Дата, определяет точку на оси времени, в которой нас интересует значение розничной цены;

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

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

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

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

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

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

В нашем регистре ресурс один, но все равно будет возвращена структура, содержащая единственный элемент .

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

Теперь эту функцию нужно вызвать в некоторый момент работы документа .

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

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

Найдем в конфигураторе документ ОказаниеУслуги и откроем его форму ФормаДокумента .

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

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

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

274 1С:Предприятие 8.3. Практическое пособие разработчика Рис. 9.10. Выбор типа обработчика события, создаваемого в форме Система создаст шаблон процедуры обработчика этого события в модуле нашей формы и откроет закладку Модуль редактора формы .

Внесем в него следующий текст (листинг 9.2) .

листинг 9.2 .

Процедура «ПереченьНоменклатурыНоменклатураПриИзменении()»

// Получить текущую строку табличной части .

СтрокаТабличнойЧасти = Элементы.ПереченьНоменклатуры.ТекущиеДанные;

// Установить цену .

СтрокаТабличнойЧасти.Цена = РаботаСоСправочниками.РозничнаяЦена( Объект.Дата, СтрокаТабличнойЧасти.Номенклатура);

// Пересчитать сумму строки РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);

Прокомментируем содержимое обработчика .

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

Затем мы вызываем нашу функцию РозничнаяЦена() из общего модуля РаботаСоСправочниками .

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

Вторым параметром мы передаем ссылку на элемент справочника Номенклатура, который содержится в текущей строке табличной части документа (СтрокаТабличнойЧасти.Номенклатура) .

Занятие 9 Функция возвращает последнее значение цены, и это значение мы присваиваем полю Цена в текущей строке табличной части документа (СтрокаТабличнойЧасти.Цена) .

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

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

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

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

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

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

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

Толстый клиент и внешнее соединение – это клиентские приложения прежней версии платформы, которые существуют для совместимости с прежними прикладными решениями .

Мы же с вами разрабатываем совершенно новое прикладное решение, которое работает в тонком клиенте или в веб-клиенте. Поэтому в нашем случае для получения каких-либо данных из базы данных нужно передать исполнение кода на сервер, там получить нужные данные и вернуть эти данные на клиента. Что мы и сделали .

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

Проверим, как теперь работает наш документ .

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

Для транзистора Philips добавим другим числом новую цену (рис. 9.11) .

–  –  –

Теперь откроем документ Оказание услуги № 1. Как вы помните, этим документом мы как раз «израсходовали» один такой транзистор .

Оставим дату документа без изменения и повторим выбор транзистора в колонке Номенклатура табличной части документа. Автоматически установится значение цены транзистора от 06.07.2013 .

Это последнее значение цены на дату документа (рис. 9.12) .

Теперь изменим дату документа на 10.07.2013 и снова повторим выбор транзистора. Будет установлено новое значение цены, последнее на эту дату (рис. 9.13) .

Занятие 9 Рис. 9.12. Заполнение документа «Оказание услуги»

Рис. 9.13. Заполнение документа «Оказание услуги»

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

278 1С:Предприятие 8.3. Практическое пособие разработчика Контрольные вопросы ; Для чего предназначен объект конфигурации «Регистр сведений»?

; Какими особенностями обладает объект конфигурации «Регистр сведений»?

; В чем главные отличия регистра сведений от регистра накопления?

; Какие поля определяют ключ уникальности регистра сведений?

; Что такое периодический регистр сведений, и что такое независимый регистр сведений?

; Как создать периодический регистр сведений?

; Что такое ведущее измерение регистра?

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

Занятие 10

–  –  –

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

Что такое перечисление

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

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

Привязка номенклатуры к значениям перечисления «ВидНоменклатуры»..............281 В режиме «Конфигуратор»

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

Произвольное представление номенклатуры

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

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

Регистрация расхода только той номенклатуры, которая является материалом....287 В режиме «Конфигуратор»

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

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

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

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

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

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

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

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

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

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

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

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

На закладке Данные добавим два значения перечисления: Материал и Услуга .

Для этого нажмем кнопку Добавить над списком значений перечисления (рис. 10.1) .

Рис. 10.1. Данные перечисления «ВидыНоменклатуры»

Привязка номенклатуры к значениям перечисления «ВидНоменклатуры»

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

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

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

282 1С:Предприятие 8.3. Практическое пособие разработчика В режиме «Конфигуратор»

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

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

Рис. 10.2. Данные справочника «Номенклатура»

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

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

В режиме 1С:Предприятие зададим для каждого элемента справочника Номенклатура соответствующее значение реквизита Вид номенклатуры (рис. 10.3) .

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

Занятие 10

Рис. 10.3. Данные справочника «Номенклатура»

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

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

Стандартное представление номенклатуры (как и любого другого элемента справочника) определяется свойством справочника Основное представление. По умолчанию это свойство установлено в значение В виде наименования (рис. 10.4) .

Поэтому, например, в табличной части документов в колонке Номенклатура мы видим не ссылку на номенклатуру, а ее наименование (рис. 10.5) .

284 1С:Предприятие 8.3. Практическое пособие разработчика Рис. 10.4. Свойство справочника «Основное представление»

–  –  –

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

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

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

листинг 10.1. Модуль менеджера справочника «Номенклатура»

Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка) СтандартнаяОбработка = Ложь;

Поля.Добавить("Наименование");

Поля.Добавить("ВидНоменклатуры");

КонецПроцедуры листинг 10.2. Модуль менеджера справочника «Номенклатура»

Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)

–  –  –

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

В обработчике события ОбработкаПолученияПолейПредставления мы описываем, какие реквизиты будут участвовать в формировании представления документа. Для этого сначала мы устанавливаем параметр СтандартнаяОбработка в значение Ложь, а затем добавляем в массив Поля нужные реквизиты справочника. Если параметр 286 1С:Предприятие 8.3. Практическое пособие разработчика СтандартнаяОбработка в обработчике не установлен в значение Ложь, то массив Поля будет заполнен реквизитами, используемыми для формирования стандартного представления данного объекта (в нашем случае – это Наименование) .

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

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

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

В результате при открытии документа Оказание услуги в табличной части мы видим заданное нами представление номенклатуры (рис. 10.6) .

–  –  –

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

Регистрация расхода только той номенклатуры, которая является материалом Если вы помните, на шестом занятии (стр. 225), когда создавались движения документа ОказаниеУслуги по регистру накопления ОстаткиМатериалов, мы сказали, что они не совсем правильные, поскольку в регистр будут попадать не только записи об израсходованных материалах, но и записи об оказанных услугах (листинг 10.3) .

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

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

Процедура ОбработкаПроведения(Отказ, Режим) //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ // Данный фрагмент построен конструктором .

// При повторном использовании конструктора внесенные вручную изменения будут утеряны!!!

// регистр ОстаткиМатериалов Расход Движения.ОстаткиМатериалов.Записывать = Истина;

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

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

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

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

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

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

КонецЦикла;

//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ КонецПроцедуры Теперь мы доработаем документ таким образом, чтобы в регистре появлялись только записи, относящиеся к расходу материалов .

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

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

пРиМеЧАние Более эффективный вариант обработки проведения этого документа мы рассмотрим после изучения занятия № 14 (стр. 411), рассказывающего о механизме запросов «1С:Предприятия» .

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

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

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

Текст следует добавить в начало цикла обхода табличной части документа после строки Для Каждого ТекСтрокаПереченьНоменклатуры Из ПереченьНоменклатуры Цикл .

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

листинг 10.4. Движения документа «ОказаниеУслуги»

Процедура ОбработкаПроведения(Отказ, Режим) //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ // Данный фрагмент построен конструктором .

// При повторном использовании конструктора внесенные вручную изменения будут утеряны!!!

–  –  –

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

В переменной ТекСтрокаПереченьНоменклатуры содержатся на каждом шаге цикла данные текущей строки табличной части ПереченьНоменклатуры .

Указывая через точку имя колонки Номенклатура (ТекСтрокаПереченьНоменклатуры.Номенклатура), мы обращаемся к ссылке на элемент номенклатуры, которая содержится в этой строке табличной части .

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

Полученное значение с помощью оператора сравнения (=) мы сравниваем со значением Материал перечисления ВидыНоменклатуры (Перечисления.ВидыНоменклатуры.Материал) .

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

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

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

Откроем список документов, выполнив команду Оказание услуг в разделе Оказание услуг .

Откроем документ Оказание услуги № 1 и внесем в него следующие изменения:

удалим из табличной части строку, содержащую Транзистор Philips;

добавим услугу – Подключение воды;

добавим материал – Шланг резиновый (рис. 10.7) .

290 1С:Предприятие 8.3. Практическое пособие разработчика Рис. 10.7. Измененный документ «Оказание услуги № 1»

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

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

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

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

Как мы видим, в движения по регистру Остатки материалов включаются только строки, содержащие материалы. Запись про услугу Подключение воды в движения не попала .

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

Занятие 10

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

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

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

; Как с помощью перечисления задать принадлежность элементов справочника к той или иной смысловой группе?

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

; Как задать произвольное представление объекта конфигурации?

292 1С:Предприятие 8.3. Практическое пособие разработчика Занятие 11 Проведение документа по нескольким регистрам пРодолжительность Ориентировочная продолжительность занятия – 1 час 20 минут .

Зачем нужно проведение документа по нескольким регистрам

Добавление еще одного регистра накопления

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

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

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

Изменение процедуры проведения

Команда перехода к записям регистра

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

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

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

Новый реквизит документа

Изменение процедуры проведения

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

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

294 1С:Предприятие 8.3. Практическое пособие разработчика Это занятие будет посвящено тому, как один и тот же документ может поставлять информацию в различные регистры конфигурации и для чего может понадобиться такая возможность .

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

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

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

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

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

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

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

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

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

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

Регистр СтоимостьМатериалов совсем не сложен, поэтому мы не будем подробно останавливаться на его создании .

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

Расширенное представление списка зададим как Движения по регистру Стоимость материалов. Этот заголовок будет отображаться в окне списка записей регистра .

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

На закладке Данные создадим для регистра одно измерение – Материал типа СправочникСсылка.Номенклатура и один ресурс – Стоимость типа Число длиной 15 и точностью 2 .

После создания регистр СтоимостьМатериалов должен выглядеть в дереве конфигурации следующим образом (рис. 11.1) .

–  –  –

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

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

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

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

В группе Панель навигации.Обычное включим видимость у команды Стоимость материалов и мышью перетащим ее в группу Панель навигации.См.также (рис. 11.2) .

Рис. 11.2. Настройка командного интерфейса подсистем

Аналогично, выделив подсистемы ОказаниеУслуг и УчетМатериалов, в группе Панель навигации.Обычное включим видимость у команды Стоимость материалов и перенесем ее в группу Панель навигации.См .

также .

Теперь мы можем приступить к внесению изменений в процедуры проведения наших документов .

Начнем с самого простого – документа Приходная накладная .

Занятие 11 Проведение приходной накладной по двум регистрам В режиме «Конфигуратор»

Изменение процедуры проведения Откроем в конфигураторе окно редактирования объекта конфигурации Документ ПриходнаяНакладная и перейдем на закладку Движения .

В списке регистров отметим, что документ будет создавать теперь движения и по регистру СтоимостьМатериалов (рис. 11.3) .

Рис. 11.3. Создание движений документа «ПриходнаяНакладная»

в регистре «Стоимость материалов»

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

В открывшемся окне конструктора движений мы увидим, что для регистра ОстаткиМатериалов все поля конструктора уже содержат информацию, которую мы задавали ранее при формировании 298 1С:Предприятие 8.3. Практическое пособие разработчика движений для этого регистра (см. раздел «Движения документа»

на стр. 214). Над списком Регистры нажмем кнопку Добавить и добавим еще один регистр СтоимостьМатериалов (рис. 11.4) .

–  –  –

Тип движения регистра СтоимостьМатериалов по умолчанию будет установлен как Приход (пиктограмма со знаком + слева от имени регистра) .

В поле выбора Табличная часть выберем табличную часть нашего документа – Материалы .

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

Теперь нажмем кнопку Заполнить выражения. В нижнем окне сформируется соответствие полей (измерений и ресурсов) регистра и выражений для их расчета .

Чтобы задать нужное соответствие для поля регистра Стоимость, нужно его выделить и в окне Реквизиты документа дважды щелкнуть по строке ТекСтрокаМатериалы.Сумма (рис. 11.5) .

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

Занятие 11

Рис. 11.5. Конструктор движений регистров

Мы увидим, что конструктор сформировал новый текст обработчика, содержащий движения по двум регистрам (листинг 11.1) .

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

Процедура ОбработкаПроведения(Отказ, Режим) //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ // Данный фрагмент построен конструктором .

// При повторном использовании конструктора внесенные вручную изменения будут утеряны!!!

// регистр ОстаткиМатериалов Приход Движения.ОстаткиМатериалов.Записывать = Истина;

Для Каждого ТекСтрокаМатериалы Из Материалы Цикл Движение = Движения.ОстаткиМатериалов.Добавить();

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

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

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

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

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

КонецЦикла;

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

Для Каждого ТекСтрокаМатериалы Из Материалы Цикл Движение = Движения.СтоимостьМатериалов.Добавить();

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

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

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

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

–  –  –

//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ КонецПроцедуры Мы видим, что фрагмент, добавленный конструктором в процедуру обработки проведения документа для регистра СтоимостьМатериалов, аналогичен фрагменту для формирования движений по регистру ОстаткиМатериалов .

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

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

Выполним эту небольшую оптимизацию. И еще удалим комментарии, внесенные конструктором .

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

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

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

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

Для Каждого ТекСтрокаМатериалы Из Материалы Цикл // Регистр ОстаткиМатериалов Приход Движение = Движения.ОстаткиМатериалов.Добавить();

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

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

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

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

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

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

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

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

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

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

–  –  –

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

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

Рис. 11.6. Настройка командного интерфейса формы документа «ПриходнаяНакладная»

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

В режиме 1С:Предприятие наша задача будет заключаться в том, чтобы провести еще раз (перепровести) все приходные накладные .

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

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

Выделим одновременно, используя клавишу Ctrl, все приходные накладные и перепроведем их, выполнив команду Провести из подменю Еще .

302 1С:Предприятие 8.3. Практическое пособие разработчика Затем откроем первый документ (рис. 11.7) и, выполнив команды перехода к регистрам Остатки материалов и Стоимость материалов, убедимся, что документ создает желаемые записи как в одном (рис. 11.8), так и в другом регистре накопления (рис. 11.9) .

–  –  –

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

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

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

Поскольку в документе ОказаниеУслуги у нас отражена только цена номенклатуры, нам понадобится:

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

2. После этого изменить процедуру проведения документа ОказаниеУслуги .

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

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

Новый реквизит документа Откроем в конфигураторе окно редактирования объекта конфигурации Документ ОказаниеУслуги и перейдем на закладку Данные .

Создадим новый реквизит табличной части документа с именем Стоимость, типом Число, длиной 15 и точностью 2, неотрицательное (рис. 11.10) .

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

Для этого в правом верхнем окне редактора форм на закладке Реквизиты раскроем реквизит формы Объект (рис. 11.11) .

304 1С:Предприятие 8.3. Практическое пособие разработчика Рис. 11.10. Изменение документа «ОказаниеУслуги»

Рис. 11.11. Изменение формы документа «ОказаниеУслуги»

–  –  –

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

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

Рис. 11.12. Изменение формы документа «ОказаниеУслуги»

Изменение процедуры проведения Теперь создадим движения документа ОказаниеУслуги .

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

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

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

306 1С:Предприятие 8.3. Практическое пособие разработчика В самом конце цикла перед строкой КонецЕсли добавим строки кода, создающие движения регистра СтоимостьМатериалов, производимые документом ОказаниеУслуги (листинг 11.3) .

листинг 11.3. Движения документа «ОказаниеУслуги» (фрагмент) // регистр СтоимостьМатериалов Расход Движение = Движения.СтоимостьМатериалов.Добавить();

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

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

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

Движение.Стоимость = ТекСтрокаПереченьНоменклатуры.Количество * ТекСтрокаПереченьНоменклатуры.Стоимость;

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

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

листинг 11.4. Движения документа «ОказаниеУслуги»

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

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

Для Каждого ТекСтрокаПереченьНоменклатуры Из ПереченьНоменклатуры Цикл Если ТекСтрокаПереченьНоменклатуры.Номенклатура.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Материал Тогда

–  –  –

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

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

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

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

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

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

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

Откроем документ Оказание услуги № 1 и укажем в нем стоимость резинового шланга – 100 (рис. 11.13) .

Рис. 11.13. Документ «Оказание услуги № 1»

308 1С:Предприятие 8.3. Практическое пособие разработчика Проведем документ Оказание услуги № 1 и посмотрим на движения этого документа по регистру Стоимость материалов .

Для этого нажмем кнопку Провести и выполним команду перехода к регистру Стоимость материалов (рис. 11.14) .

Рис. 11.14. Записи регистра «Стоимость материалов»

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

Для этого в форме списка документов нажмем кнопку Создать или в панели действий раздела Оказание услуг выполним команду Оказание услуги (рис. 11.15) .

–  –  –

Движения документов Оказание услуги № 2 и № 3 по регистру Стоимость материалов должны выглядеть соответственно следующим образом (рис. 11.18, 11.19) .

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

–  –  –

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

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

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

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

; Как добавить в форму документа новый реквизит?

Занятие 12 Оборотные регистры накопления пРодолжительность Ориентировочная продолжительность занятия – 40 минут .

Зачем нужно создавать еще один регистр

Что такое оборотный регистр накопления

Добавление оборотного регистра накопления

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

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

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

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

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

312 1С:Предприятие 8.3. Практическое пособие разработчика На этом занятии мы с вами познакомимся с еще одним видом регистра накопления – оборотным регистром накопления .

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

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

Зачем нужно создавать еще один регистр Продолжим рассматривать работу нашего документа ОказаниеУслуги .

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

Дело в том, что при учете услуг важны совершенно другие критерии, нежели при учете материалов .

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

Кроме этого, интересны следующие моменты:

какие именно услуги были оказаны (чтобы составить рейтинг услуг);

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

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

Очевидно, что существующие регистры накопления совершенно не подходят для решения таких задач .

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

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

Занятие 12 Регистры накопления могут быть регистрами остатков и регистрами оборотов .

Существующие в нашей учебной конфигурации регистры ОстаткиМатериалов и СтоимостьМатериалов являются регистрами остатков .

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

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

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

В остальном оборотный регистр ничем не отличается от регистра остатков .

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

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

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

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

314 1С:Предприятие 8.3. Практическое пособие разработчика Значит, поставщика следует добавить не как измерение, а как реквизит регистра накопления .

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

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

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

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

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

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

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

Назовем его Продажи и определим вид регистра – Обороты .

Кроме этого, зададим Расширенное представление списка как Движения по регистру Продажи. Этот заголовок будет отображаться в окне списка записей регистра (рис. 12.1) .

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

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

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

Клиент, тип СправочникСсылка.Клиенты;

Мастер, тип СправочникСсылка.Сотрудники .

Занятие 12 Рис. 12.1. Создание оборотного регистра накопления

У регистра будет три ресурса:

Количество, тип Число, длина 15, точность 3;

Выручка, тип Число, длина 15, точность 2;

Стоимость, тип Число, длина 15, точность 2 .

–  –  –

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

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

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

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

В группе Панель навигации.Обычное включим видимость у команды Продажи и мышью перетащим ее в группу Панель навигации.См .

также .

Аналогично, выделив подсистемы ОказаниеУслуг и УчетМатериалов, в группе Панель навигации.Обычное включим видимость у команды Продажи и перенесем ее в группу Панель навигации.См. также .

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

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

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

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

Перейдем на закладку Прочее и откроем модуль документа. Для этого нажмем кнопку Модуль объекта .

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

В конце цикла после строки КонецЕсли и перед строкой КонецЦикла добавим строки кода, создающие движения регистра Продажи, производимые документом ОказаниеУслуги (листинг 12.1) .

Занятие 12 листинг 12.1. Движения документа «ОказаниеУслуги» (фрагмент) // Регистр Продажи Движение = Движения.Продажи.Добавить();

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

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

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

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

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

Движение.Выручка = ТекСтрокаПереченьНоменклатуры.Сумма;

Движение.Стоимость = ТекСтрокаПереченьНоменклатуры.Стоимость * ТекСтрокаПереченьНоменклатуры.Количество;

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

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

листинг 12.2. Движения документа «ОказаниеУслуги»

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

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

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

Для Каждого ТекСтрокаПереченьНоменклатуры Из ПереченьНоменклатуры Цикл Если ТекСтрокаПереченьНоменклатуры.Номенклатура.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Материал Тогда // Регистр ОстаткиМатериалов Расход Движение = Движения.ОстаткиМатериалов.Добавить();

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

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

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

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

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

–  –  –

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

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

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

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

318 1С:Предприятие 8.3. Практическое пособие разработчика Движение.Мастер = Мастер;

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

Движение.Выручка = ТекСтрокаПереченьНоменклатуры.Сумма;

Движение.Стоимость = ТекСтрокаПереченьНоменклатуры.Стоимость * ТекСтрокаПереченьНоменклатуры.Количество;

КонецЦикла;

КонецПроцедуры Все добавленные конструкции вам уже хорошо известны .

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

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

Это важно, так как движения в этом регистре создаются как для материалов, так и для услуг .

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

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

Установим свойство Видимость для этой команды .

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

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

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

Нажмем Провести и перейдем к списку движений этих документов по регистру Продажи. Они должны иметь следующий вид (рис. 12.3а,

12.3б, 12.4а, 12.4б, 12.5а, 12.5б) .

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

в регистре «Продажи»

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

в регистре «Продажи»

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

в регистре «Продажи»

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

в регистре «Продажи»

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

–  –  –

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

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

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

Занятие 12

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

; Что такое оборотный регистр накопления?

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

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

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

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

–  –  –

Теория: способы доступа к данным

Работа с запросами

Источники данных запросов

Язык запросов

Система компоновки данных

Выбор данных из одной таблицы

Выбор данных из двух таблиц

Вывод данных по всем дням в выбранном периоде

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

Вывод данных в таблицу

Теория: виртуальные таблицы запросов

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

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

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

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

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

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

В начале этого занятия мы познакомимся с общими сведениями о языке запросов системы «1С:Предприятие» и о системе компоновки данных .

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

–  –  –

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

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

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

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

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

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

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

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

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

Источники данных запросов Исходную информацию запрос получает из набора таблиц .

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

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

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

Рис. 13.1. Таблицы запросов

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

Отличительной особенностью реальных таблиц является то, что они содержат данные какой-либо одной реальной таблицы, хранящейся в базе данных .

Например, реальной является таблица Справочник.Клиенты, соответствующая справочнику Клиенты, или таблица РегистрНакопления.ОстаткиМатериалов, соответствующая регистру накопления ОстаткиМатериалов .

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

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

Иногда виртуальные таблицы могут формироваться и из одной реальной таблицы (например, виртуальная таблица Цены.СрезПоследних формируется на основе таблицы регистра сведений Цены) .

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

Реальные таблицы подразделяются на объектные (ссылочные) и необъектные (нессылочные) .

Занятие 13 В объектных (ссылочных) таблицах представлена информация ссылочных типов данных (справочники, документы, планы видов характеристик и т. д.). А в необъектных (нессылочных) – всех остальных типов данных (константы, регистры и т. д.) .

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

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

Текст запроса может состоять из нескольких частей:

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

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

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

Объединение запросов определяет, как будут объединены результаты выполнения нескольких запросов .

Упорядочивание результатов определяет условия упорядочивания строк результата запроса .

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

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

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

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

Справка Содержание справки 1С:Предприятие Встроенный язык Работа с запросами, а также в документации «1С:Предприятие 8.3 .

Руководство разработчика», глава 8 «Работа с запросами» .

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

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

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

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

Исходные данные для компоновки отчета содержит в себе схема компоновки данных. Это наборы данных и методы работы с ними (рис. 13.2) .

Рис. 13.2. Общая схема работы с системой компоновки данных Занятие 13 Разработчик создает схему компоновки данных, в которой описывает текст запроса, наборы данных, связи между ними, доступные поля, параметры получения данных, и задает первоначальные настройки компоновки – структуру отчета, макет оформления данных и др .

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

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

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

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

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

–  –  –

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

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

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

Алгоритм взаимодействия этих объектов выглядит следующим образом:

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

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

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

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

Эту последовательность работы можно представить в виде следующей схемы (рис. 13.6) .

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

Рис. 13.6. Схема работы системы компоновки

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

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

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

Этот отчет будет выводить список существующих в базе данных документов ОказаниеУслуги в порядке их дат и номеров (рис. 13.7) .

–  –  –

В открывшемся диалоговом окне конструктора макета нажмем Готово. В конструкторе схемы компоновки данных создадим Набор данных – запрос (рис. 13.9) .

Рис. 13.9. Создание набора данных – запрос 334 1С:Предприятие 8.3. Практическое пособие разработчика Запрос для набора данных Нажав кнопку Конструктор запроса, запустим конструктор запроса .

В качестве источника данных для запроса выберем объектную (ссылочную) таблицу документа ОказаниеУслуги .

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

Склад, Мастер, Клиент, Ссылка .

–  –  –

Анализ текста запроса Нажмем ОK и посмотрим, какой запрос сформировал конструктор запроса (листинг 13.1) .

листинг 13.1. Текст запроса ВЫБРАТЬ ОказаниеУслуги.Склад, ОказаниеУслуги.Мастер, ОказаниеУслуги.Клиент, ОказаниеУслуги.Ссылка КАК Документ ИЗ Документ.ОказаниеУслуги КАК ОказаниеУслуги

УПОРЯДОЧИТЬ ПО Документ336 1С:Предприятие 8.3. Практическое пособие разработчика

Текст запроса начинается, как мы говорили выше, с части описания запроса (листинг 13.2) .

листинг 13.2. Описание запроса ВЫБРАТЬ ОказаниеУслуги.Склад, ОказаниеУслуги.Мастер, ОказаниеУслуги.Клиент, ОказаниеУслуги.Ссылка КАК Документ ИЗ Документ.ОказаниеУслуги КАК ОказаниеУслуги Описание запроса начинается с обязательного ключевого слова ВЫБРАТЬ .

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

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

В данном случае это объектная (ссылочная) таблица Документ.ОказаниеУслуги .

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

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

Такое обращение мы видим в описании полей выборки (листинг 13.3) .

листинг 13.3. Описание полей выборки ВЫБРАТЬ ОказаниеУслуги.Склад, ОказаниеУслуги.Мастер, ОказаниеУслуги.Клиент, ОказаниеУслуги.Ссылка КАК Документ

–  –  –

После части описания запроса в нашем примере следует часть упорядочивания результатов (листинг 13.4) .

листинг 13.4. Упорядочивание результатов запроса

УПОРЯДОЧИТЬ ПО

Документ Предложение УПОРЯДОЧИТЬ ПО позволяет сортировать строки в результате запроса. После этого ключевого предложения располагается выражение упорядочивания, которое в общем случае представляет собой перечисление полей (выражений) и порядка вывода .

В нашем случае упорядочивание будет выполняться по полю Документ, оно же поле ОказаниеУслуги.Ссылка. Порядок сортировки будет по возрастанию (если порядок сортировки не указан явно, выполняется сортировка по возрастанию) .

На этом закончим изучение текста запроса и перейдем к настройке схемы компоновки данных .

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

Иерархическая структура отчета может содержать в различных сочетаниях три основных элемента:

Группировка – для вывода информации в виде обычного линейного отчета;

Таблица – для вывода информации в виде таблицы;

Диаграмма – для вывода информации в виде диаграммы .

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

Можно также нажать кнопку Добавить, расположенную в командной панели окна, или нажать клавишу Ins. Выберем пункт меню Новая группировка (рис. 13.13) .

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

Рис. 13.13. Добавление новой группировки в отчет

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

В структуре отчета появится группировка Детальные записи .

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

Документ, Склад, Мастер, Клиент .

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

–  –  –

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

Таким образом, ссылка на наш отчет автоматически попадет в панель команд этого раздела, в подменю Отчеты (рис. 13.15) .

Рис. 13.15. Определение списка подсистем, в которых будет отражаться отчет 340 1С:Предприятие 8.3. Практическое пособие разработчика В режиме «1С:Предприятие»

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

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

Выполним эту команду (рис. 13.16) .

Рис. 13.16. Команда для формирования отчета

Откроется форма отчета, автоматически сформированная системой .

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

Нажмем кнопку Сформировать (рис. 13.17) .

Мы видим, что отчет содержит реестр документов Оказание услуги .

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

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

Занятие 13

–  –  –

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

–  –  –

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

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

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

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

Добавим новый объект конфигурации Отчет .

Назовем его РейтингУслуг и запустим конструктор схемы компоновки данных .

Добавим новый Набор данных – запрос и вызовем конструктор запроса .

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

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

Для этого выделим ее в списке Таблицы, вызовем ее контекстное меню и выберем пункт Переименовать таблицу (рис. 13.19) .

–  –  –

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

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

Но нам нужно снять флажок Все у таблицы ПродажиОбороты и установить его у таблицы спрНоменклатура .

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

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

Описанную связь двух таблиц схематично можно представить следующим примером (рис. 13.21) .

Рис. 13.21. Связь записей таблиц в запросе 344 1С:Предприятие 8.3. Практическое пособие разработчика В результате описанных выше действий закладка Связи будет иметь следующий вид (рис. 13.22) .

–  –  –

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

Для этого раскроем таблицу спрНоменклатура, перетащим мышью поле ЭтоГруппа в список условий, установим флажок Произвольное и напишем в поле Условие следующий текст (листинг 13.5) .

листинг 13.5. Условие запроса спрНоменклатура.ЭтоГруппа = ЛОЖЬ Тем самым мы указали, что из базы данных нужно выбрать только те записи справочника Номенклатура, которые не являются группами .

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

Рис. 13.23. Отбор записей номенклатуры в запросе Занятие 13 Вторым условием должно быть то, что выбранный элемент является услугой. Это Простое условие. Чтобы его создать, перетащим мышью поле ВидНоменклатуры в список условий .

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

В дальнейшем перед выполнением запроса мы передадим в параметр ВидНоменклатуры значение перечисления – Услуга .

Работу этого условия тоже можно проиллюстрировать на примере .

Слева – записи справочника Номенклатура, выбранные согласно первому условию. Справа – только те записи, которые являются услугами (рис. 13.24) .

Рис. 13.24. Отбор записей номенклатуры в запросе В результате закладка Условия примет вид (рис. 13.25) .

Рис. 13.25. Создание условия запроса 346 1С:Предприятие 8.3. Практическое пособие разработчика соВет Отбор можно применять и в самом запросе, и в настройках отчета .

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

Псевдонимы полей Перейдем на закладку Объединения/Псевдонимы и укажем, что представление элемента справочника (поле Ссылка) будет иметь псевдоним Услуга, а поле регистра будет иметь псевдоним Выручка (рис. 13.26) .

–  –  –

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

–  –  –

Анализ текста запроса Текст запроса, сформированный платформой, примет вид (листинг 13.6) .

листинг 13.6. Текст запроса ВЫБРАТЬ СпрНоменклатура.Ссылка КАК Услуга, ПродажиОбороты.ВыручкаОборот КАК Выручка ИЗ Справочник.Номенклатура КАК СпрНоменклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты ПО ПродажиОбороты.Номенклатура = СпрНоменклатура.Ссылка ГДЕ СпрНоменклатура.ЭтоГруппа = ЛОЖЬ И СпрНоменклатура.ВидНоменклатуры = &ВидНоменклатуры

УПОРЯДОЧИТЬ ПО Выручка УБЫВ

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

При описании источников запроса (после ключевого слова ИЗ) использована возможность определения нескольких источников запроса (листинг 13.7) .

листинг 13.7. Определение нескольких источников запроса ИЗ Справочник.Номенклатура КАК СпрНоменклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты ПО ПродажиОбороты.Номенклатура = СпрНоменклатура.Ссылка В данном случае выбираются записи из двух источников: СпрНоменклатура и ПродажиОбороты, причем ключевым предложением ЛЕВОЕ СОЕДИНЕНИЕ … ПО описан способ, которым будут скомбинированы между собой записи этих двух источников .

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

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

348 1С:Предприятие 8.3. Практическое пособие разработчика листинг 13.8. Задание условий отбора ГДЕ СпрНоменклатура.ЭтоГруппа = ЛОЖЬ И СпрНоменклатура.ВидНоменклатуры = &ВидНоменклатуры Условию отбора всегда предшествует ключевое слово ГДЕ. После него описывается само условие. Обратите внимание, что поля исходных таблиц, на которые накладывается условие, могут и не входить в список выборки (как в нашем случае). Кроме того, в нашем условии использован параметр запроса ВидНоменклатуры (перед именем параметра указывается символ & – амперсанд) .

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

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

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

Итоговые данные формируются на закладке Ресурсы .

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

В нашем случае это единственный ресурс Выручка .

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

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

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

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

На этой закладке мы увидим три параметра: НачалоПериода, КонецПериода и ВидНоменклатуры. Вы можете спросить: почему параметра три, хотя в запросе мы задавали всего один – ВидНоменклатуры?

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

Такими параметрами являются НачалоПериода и КонецПериода .

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

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

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

Рис. 13.30. Параметры виртуальной таблицы

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

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

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

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

Для этого мы изменим существующее описание типа для параметра НачалоПериода .

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

Затем нажмем кнопку выбора и в нижней части окна редактирования типа данных установим Состав даты в значение Дата. Нажмем ОK (рис. 13.31) .

Вторая особенность заключается в том, что по умолчанию время в дате установлено 00:00:00. Поэтому если пользователь задаст период отчета с 01.06.2013 по 11.06.2013, итоги регистра будут рассчитаны Занятие 13 с начала дня 01.06.2013 00:00:00 по начало дня 11.06.2013, 00:00:00 .

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

–  –  –

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

Поэтому для параметра КонецПериода установим флажок Ограничение доступности (рис. 13.32) .

Рис. 13.32. Добавление параметра «ДатаОкончания»

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

Затем с помощью кнопки Добавить в командной панели добавим новый параметр с именем ДатаОкончания (см. рис. 13.32). Для этого параметра платформа автоматически сформирует заголовок – Дата окончания. Оставим его без изменений .

Зададим тип значения параметра – Дата. При этом, как и для параметра Начало Периода, укажем состав даты – Дата (см. рис. 13.31) .

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

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

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

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

В нем есть функция КонецПериода(), которая позволяет получить дату, соответствующую концу какого-либо периода, например, указанного дня .

В ячейке Выражение зададим для параметра КонецПериода следующее выражение (листинг 13.9) .

листинг 13.9. Выражение для расчета значения параметра «КонецПериода»

КонецПериода(&ДатаОкончания, "День")

–  –  –

И в заключение настроим параметр ВидНоменклатуры .

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

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

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

Рис. 13.34. Установка значения параметра «ВидНоменклатуры»

Настройки Перейдем к формированию структуры отчета. На закладке Настройки добавим группировку и снова не укажем поле группировки. На закладке Выбранные поля укажем поля Услуга и Выручка (рис. 13.35) .

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

–  –  –

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

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

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

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

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

Рис. 13.37. Определение пользовательских настроек 356 1С:Предприятие 8.3. Практическое пособие разработчика Поясним, что флажок Включать в пользовательские настройки означает, что эта настройка будет доступна пользователю в отдельном окне (2) при вызове из подменю Еще команды Настройки… (то есть такая настройка, которой он может пользоваться, но не очень часто, рис .

13.38) .

Рис. 13.38. Быстрые (1) и обычные (2) пользовательские настройки А режим редактирования, установленный в значение Быстрый доступ, означает, что эта настройка также будет автоматически отображаться непосредственно в отчетной форме (1). Это быстрая пользовательская настройка – такая настройка, которая нужна пользователю постоянно, чуть ли не при каждом запуске отчета. Поэтому она должна быть всегда «под рукой» .

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

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

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

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

Таким образом, ссылка на наш отчет автоматически попадет в панель команд этих разделов (рис. 13.39) .

Рис. 13.39. Подсистемы, в которых отображается отчет

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

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

В открывшемся окне «1С:Предприятия» мы видим, что в разделах Оказание услуг и Бухгалтерия в подменю Отчеты появилась команда для формирования отчета Рейтинг услуг (рис. 13.40) .

Выполним эту команду .

Откроется форма отчета, автоматически сформированная системой .

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

Рис. 13.40. Команда для формирования отчета

В окне отчета мы видим параметры, определяющие отчетный период .

Он по умолчанию задан – с начала месяца по сегодняшнее число .

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

Нажмем кнопку Сформировать. Результат будет выглядеть следующим образом (рис. 13.41) .

–  –  –

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

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

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

Теперь изменим дату окончания на 10.07.2013. Данные за 10 июля из документа Оказание услуги № 1 попадают в отчет (рис. 13.42) .

–  –  –

То есть, как и требовалось, благодаря использованию функции КонецПериода() данные за последнее число отчетного периода включены в отчет .

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

Настройки в конфигураторе и в режиме «1С:Предприятие»

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Рис. 13.43. Настройка условного оформления 362 1С:Предприятие 8.3. Практическое пособие разработчика Сначала укажем Оформление, то есть то, каким образом должны выделяться интересующие нас поля .

Нажмем кнопку выбора в поле Оформление и установим красный цвет текста (см. рис. 13.43). Нажмем ОК .

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

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

Каждый элемент отбора задает одно условие. Условий может быть несколько (рис. 13.44) .

Рис. 13.44. Настройка условного оформления

Для этого нажмем кнопку Добавить и укажем в графе Левое значение – поле Выручка, в графе Вид сравнения – Меньше, а в графе Правое значение – 700. Нажмем ОК .

То есть когда в поле Выручка окажется значение меньше 700, «что-то»

будет выделено красным цветом текста .

Теперь укажем это «что-то», то есть зададим список оформляемых полей .

Если мы хотим выделять всю строку отчета, то можно оставить этот список пустым. Или же нажать кнопку выбора в поле Оформляемые поля, и в появившемся окне, нажимая кнопку Добавить, можно выбрать поля Услуга и Выручка (рис. 13.45) .

Занятие 13

–  –  –

В нашем случае можно было бы этого не делать, так как Услуга и Выручка и есть все поля отчета. Нажмем ОК .

В заключение зададим Представление условного оформления как Непопулярная услуга (рис. 13.46) .

–  –  –

Непопулярная услуга – это то, что увидит пользователь в своих настройках. То есть вместо пугающей строки «Выручка меньше 700…» пользователь увидит осмысленное выражение, которое задано в поле Представление .

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

и выделяться красным цветом .

Теперь добавим это условие в пользовательские настройки. Нажмем кнопку Свойства элемента пользовательских настроек, расположенную 364 1С:Предприятие 8.3. Практическое пособие разработчика в правом нижнем углу окна настроек (см. рис. 13.46). Установим флажок Включать в пользовательские настройки и установим свойство Режим редактирования в значение Обычный .

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

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

Перейдем в режим 1С:Предприятие. Вызовем отчет .

Зададим Дату окончания отчетного периода как Начало этого дня и нажмем кнопку Сформировать (рис. 13.47) .

–  –  –

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

–  –  –

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

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

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

Рассмотрим это в следующем примере .

Пользовательские настройки В режиме «Конфигуратор»

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

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

366 1С:Предприятие 8.3. Практическое пособие разработчика Для этого нажмем кнопку Свойства элемента пользовательских настроек, расположенную вверху в командной панели окна настроек (рис. 13.49) .

–  –  –

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

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

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

–  –  –

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

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

Откроем отчет в режиме 1С:Предприятие и выполним команду Еще Настройки… В окне пользовательских настроек отчета появились настройки Отбор и Условное оформление, которые мы только что отметили (рис. 13.51) .

Рис. 13.51. Окно пользовательских настроек 368 1С:Предприятие 8.3. Практическое пособие разработчика На самом деле здесь присутствуют две настройки условного оформления .

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

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

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

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

–  –  –

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

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

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

–  –  –

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

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

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

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

Рис. 13.55. Окно пользовательских настроек отчета в режиме «1С:Предприятие»

В открывшемся окне Состав настроек пользователь может указать, какие настройки будут редактироваться в форме отчета (правый список), то есть будут быстрыми, а какие будут доступны по команде Еще Настройки… (левый список). Кнопками Добавить, Удалить или двойным щелчком мыши можно перенести настройки из левого списка в правый и наоборот. Например, перенесем в список быстрых настроек настройку отбора (рис. 13.56) .

Занятие 13 Рис. 13.56. Редактирование состава настроек в режиме «1С:Предприятие»

В результате настройка отбора будет доступна непосредственно в отчетной форме .

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

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

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

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

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

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

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

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

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

Добавим новый Набор данных – запрос и вызовем конструктор запроса .

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

–  –  –

Нажмем OK. После этого выберем из таблицы следующие поля (рис.

13.60):

ПродажиОбороты.Мастер, ПродажиОбороты.Период, ПродажиОбороты.Клиент, ПродажиОбороты.ВыручкаОборот .

–  –  –

Теперь перейдем на закладку Объединения/Псевдонимы и зададим псевдоним Выручка для поля ПродажиОбороты.ВыручкаОборот (рис. 13.61) .

Рис. 13.61. Объединения/Псевдонимы 374 1С:Предприятие 8.3. Практическое пособие разработчика Анализ текста запроса Нажмем ОК и рассмотрим текст запроса, сформированный конструктором (листинг 13.10) .

листинг 13.10. Текст запроса ВЫБРАТЬ ПродажиОбороты.Мастер, ПродажиОбороты.Период, ПродажиОбороты.Клиент, ПродажиОбороты.ВыручкаОборот КАК Выручка ИЗ РегистрНакопления.Продажи.Обороты(,, День, ) КАК ПродажиОбороты В части описания запроса обратите внимание, что у источника данных задана периодичность выбираемых данных – День (листинг 13.11) .

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

Ресурсы Теперь перейдем к редактированию схемы компоновки данных .

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

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

Для параметров НачалоПериода и КонецПериода в поле Тип зададим состав даты – Дата .

Для параметра КонецПериода зададим Выражение (листинг 13.12) .

–  –  –

Настройки Теперь создадим структуру отчета .

На закладке Настройки последовательно создадим две вложенные группировки:

верхнего уровня – по полю Мастер;

вложенная в нее – по полю Период .

Для этого сначала выделим корневой элемент Отчет в структуре отчета, нажмем кнопку Добавить в командной панели окна настроек, добавим новую группировку и укажем поле группировки Мастер (рис. 13.63) .

Рис. 13.63. Поле группировки 376 1С:Предприятие 8.3. Практическое пособие разработчика Затем добавим в группировку Мастер вложенную группировку по полю Период .

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

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

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

В результате структура отчета будет иметь вид (рис. 13.64) .

–  –  –

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

Рис. 13.66. Расположение полей группировок «Отдельно и только в итогах»

Для параметра Расположение общих итогов по вертикали зададим значение Начало .

По умолчанию итоги по вертикали располагаются в конце (см .

рис. 13.66). Установка этого свойства означает, что общие итоги будут отображаться в начале перед строками группировки (рис. 13.67) .

Рис. 13.67. Расположение итогов по вертикали в начале 378 1С:Предприятие 8.3. Практическое пособие разработчика В результате другие настройки отчета примут вид (рис. 13.68) .

–  –  –

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

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

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

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

–  –  –

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

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

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

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

Выполним эту команду. Зададим отчетный период с 10.07.2013 по 15.07.2013 и сформируем отчет (рис. 13.70) .

Рис. 13.70. Результат выполнения отчета

Если отчетный период для пользователя не важен, то он может снять признак использования параметров (флажок слева от параметра) .

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

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

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

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

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

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

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

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

ВниМАние!

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

–  –  –

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

Перейдем на закладку Поля группировки. Для поля Период установим Тип дополнения – День (рис. 13.71) .

–  –  –

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

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

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

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

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

–  –  –

Нажмем OK .

Теперь нажмем в поле ввода кнопку выбора и в открывшемся окне выбора поля отметим параметр НачалоПериода (рис. 13.73) .

Нажмем OK .

–  –  –

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

Запустим «1С:Предприятие» в режиме отладки и выполним отчет Выручка мастеров за период с 10.07.2013 по 15.07.2013 (рис. 13.75) .

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

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

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

Диаграмма Диаграмма предназначена для размещения в таблицах и формах диаграмм и графиков различного вида .

Логически диаграмма является совокупностью точек, серий и значений серий в точке (рис. 13.76) .

–  –  –

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

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

Занятие 13 Диаграмма как объект встроенного языка имеет три области, которые позволяют управлять оформлением диаграммы: область построения, область заголовка и область легенды (рис. 13.77) .

Рис. 13.77. Области диаграммы Диаграмма может быть вставлена в структуру отчета как отдельный элемент. В следующем варианте настроек отчета ВыручкаМастеров мы будем использовать диаграмму в структуре настроек схемы компоновки данных .

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

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

В левой части окна находится список вариантов отчета .

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

Рис. 13.78. Добавление нового варианта настроек 386 1С:Предприятие 8.3. Практическое пособие разработчика Мы видим, что структура отчета и все его настройки очистились .

Но они не пропали, а стали невидимы, так как относятся к Основному варианту настроек .

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

Добавим в структуру отчета диаграмму. Для этого выделим корневой элемент Отчет, вызовем его контекстное меню и добавим диаграмму (рис. 13.79) .

Рис. 13.79. Добавление диаграммы в структуру отчета

Затем выделим ветку Точки и добавим в нее группировку по полю Мастер. Серии диаграммы оставим без изменений .

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

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

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

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

Структура отчета должна принять следующий вид (рис. 13.80) .

–  –  –

Прокрутив вниз список свойств измерительной диаграммы, зададим ее полосы – Плохо, Хорошо и Отлично (рис. 13.82) .

В заключение включим параметры Начало периода и Конец периода в состав пользовательских настроек и установим для них Режим редактирования – Быстрый доступ .

ВниМАние!

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

388 1С:Предприятие 8.3. Практическое пособие разработчика Рис. 13.82. Настройка полос измерительной диаграммы В режиме «1С:Предприятие»

Запустим «1С:Предприятие» в режиме отладки и выполним команду Выручка мастеров в разделе Расчет зарплаты. В открывшемся окне отчета нажмем кнопку Выбрать вариант (рис. 13.83) .

–  –  –

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

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

Заметьте, что мы сформировали отчет, не задавая отчетный период .

Но все данные об оказании услуг все равно попали в отчет .

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

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

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

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

–  –  –

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

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

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

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

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

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

–  –  –

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

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

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

–  –  –

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

–  –  –

Псевдонимы полей На закладке Объединения/Псевдонимы укажем, что поле Родитель будет иметь псевдоним ГруппаУслуг, а поле Ссылка – Услуга (рис. 13.90) .

–  –  –

Анализ текста запроса Теперь рассмотрим текст запроса, сформированный конструктором (листинг 13.13) .

листинг 13.13. Текст запроса ВЫБРАТЬ СпрНоменклатура.Родитель КАК ГруппаУслуг, СпрНоменклатура.Ссылка КАК Услуга, ЦеныСрезПоследних.Цена ИЗ Справочник.Номенклатура КАК СпрНоменклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены.СрезПоследних(&ДатаОтчета, ) КАК ЦеныСрезПоследних ПО ЦеныСрезПоследних.Номенклатура = СпрНоменклатура.Ссылка ГДЕ СпрНоменклатура.ВидНоменклатуры = &ВидНоменклатуры Практически все конструкции, использованные в этом запросе, нам уже известны. Перейдем к редактированию схемы компоновки данных .

Ресурсы На закладке Ресурсы нажатием кнопки выберем единственный доступный ресурс – Цена. В колонке Рассчитывать по нажмем кнопку выбора и укажем поле Услуга (рис. 13.91) .

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

Параметры На закладке Параметры зададим значение параметра ВидНоменклатуры как Перечисление.ВидыНоменклатуры.Услуга .

Кроме этого, снимем ограничение доступности для параметра ДатаОтчета .

В поле Тип этого параметра зададим состав даты – Дата .

Для параметра Период, наоборот, установим ограничение доступности (рис. 13.92) .

–  –  –

Настройки Приступим к созданию структуры отчета. Перейдем на закладку Настройки и создадим группировку по полю ГруппаУслуг, указав тип группировки Иерархия (рис. 13.93) .

–  –  –

• Иерархия – в группировке выводятся как неиерархические, так и иерархические записи;

• Только иерархия – в группировке выводятся только иерархические записи .

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

Перейдем на закладку Выбранные поля и укажем, что в отчет будут выводиться поля Услуга и Цена (рис. 13.94) .

Рис. 13.94. Структура и поля отчета

Теперь настроим внешний вид отчета на закладке Другие настройки .

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

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

Также зададим заголовок отчета – Перечень услуг (рис. 13.95) .

Рис. 13.95. Параметры настроек вывода отчета 396 1С:Предприятие 8.3. Практическое пособие разработчика В заключение включим параметр Дата отчета в состав пользовательских настроек и установим для него Режим редактирования – Быстрый доступ. Также определим, в каких подсистемах будет отображаться наш отчет .

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

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

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

Добавим в него еще одно значение для услуги Диагностика: новая цена услуги на 10.07.2013 – 350 (рис. 13.96). Это позволит нам протестировать отчет .

–  –  –

Теперь выполним отчет Перечень услуг по состоянию на 07.07.2013 (рис. 13.97) .

Наш отчет правильно отражает цену услуги Диагностика на 07.07.2013 – 200 руб .

Еще раз выполним отчет, но теперь уже на другую дату – 10.07.2013 (рис. 13.98) .

Как видите, показана новая цена услуги Диагностика – 350 руб .

Занятие 13 Рис. 13.97. Результат выполнения отчета Рис. 13.98. Результат выполнения отчета 398 1С:Предприятие 8.3. Практическое пособие разработчика Таким образом, на примере этого отчета мы показали, как система компоновки данных получает последние значения из периодического регистра сведений и как вывести группировки по иерархии справочника .

Использование вычисляемого поля в отчете Следующий отчет – Рейтинг клиентов – будет показывать в графическом виде, каков доход от оказания услуг каждому из клиентов за все время работы ООО «На все руки мастер» (рис. 13.99) .

–  –  –

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

–  –  –

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

13.100):

ПродажиОбороты.Клиент, ПродажиОбороты.ВыручкаОборот, ПродажиОбороты.СтоимостьОборот .

–  –  –

На закладке Объединения/Псевдонимы укажем, что поле ВыручкаОборот будет иметь псевдоним Выручка, а поле СтоимостьОборот – Стоимость. На этом создание запроса завершено, нажмем OK .

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

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

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

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

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

400 1С:Предприятие 8.3. Практическое пособие разработчика Дадим ему имя (Путь к данным) – Доход, в колонку Выражение введем выражение для расчета вычисляемого поля (листинг 13.14) .

листинг 13.14. Выражение для расчета вычисляемого поля «Доход»

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

–  –  –

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

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

–  –  –

Настройки На закладке Настройки добавим в структуру отчета диаграмму .

Для этого нажмем кнопку Добавить в командной панели окна настроек и добавим диаграмму (рис. 13.103) .

Рис. 13.103. Добавление диаграммы в структуру отчета Затем выделим ветку Точки и добавим в нее группировку по полю Клиент .

Серии диаграммы оставим без изменений .

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

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

Структура отчета должна принять следующий вид (рис. 13.104) .

Рис. 13.104. Структура отчета и настройки диаграммы 402 1С:Предприятие 8.3. Практическое пособие разработчика На закладке Другие настройки выберем тип диаграммы – Круговая объемная и включим эту настройку в состав быстрых пользовательских настроек (рис. 13.105). Также зададим заголовок отчета – Рейтинг клиентов .

–  –  –

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

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

Запустим «1С:Предприятие» в режиме отладки и выполним команду Рейтинг клиентов в разделе Бухгалтерия. Нажмем Сформировать .

Мы видим данные о доходе от оказания услуг по каждому из клиентов, представленные в виде круговой диаграммы (рис. 13.106) .

Воспользуемся настройкой типа диаграммы, представленной в форме отчета, и изменим тип диаграммы на Гистограмма объемная. Заново сформируем отчет (рис. 13.107) .

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

Занятие 13 Рис. 13.106. Круговая объемная диаграмма Рис. 13.107. Гистограмма объемная 404 1С:Предприятие 8.3. Практическое пособие разработчика Вывод данных в таблицу На примере создания универсального отчета мы продемонстрируем вывод данных в таблицу (рис. 13.108) .

–  –  –

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

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

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

–  –  –

Анализ текста запроса Нажмем OK и посмотрим на текст, сформированный конструктором запроса (листинг 13.15) .

листинг 13.15. Текст запроса ВЫБРАТЬ ПродажиОбороты.Номенклатура, ПродажиОбороты.Клиент, ПродажиОбороты.Мастер, ПродажиОбороты.КоличествоОборот, ПродажиОбороты.ВыручкаОборот, ПродажиОбороты.СтоимостьОборот ИЗ РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты Ресурсы На закладке Ресурсы нажатием кнопки выберем все доступные ресурсы отчета .

Настройки На закладке Настройки добавим в структуру отчета таблицу .

Для этого нажмем кнопку Добавить в командной панели окна настроек и добавим таблицу (рис. 13.110) .

–  –  –

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

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

Установим признак использования для настроек Выбранные поля, Группировки строк и Группировки колонок и оставим для них 406 1С:Предприятие 8.3. Практическое пособие разработчика по умолчанию свойство Режим редактирования в значении Быстрый доступ (рис. 13.111) .

–  –  –

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

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

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

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

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

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

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

Нажмем Сформировать .

Отчет примет следующий вид (рис. 13.112) .

–  –  –

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

Теперь добавим в список выбранных полей поле СтоимостьОборот .

В строки таблицы вместо группировки по полю Номенклатура поместим группировку по полю Клиент .

В результате отчет примет следующий вид (рис. 13.113) .

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

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

Теперь исключим из списка выбранных полей поле СтоимостьОборот .

В строках таблицы заменим прежнюю группировку на группировку по полю Номенклатура с типом ТолькоИерархия. В колонки таблицы добавим группировку по полю Клиент и поместим ее первой в списке группировок .

В результате отчет примет следующий вид (рис. 13.114) .

–  –  –

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

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

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

Примечательным здесь является то, что задание параметров виртуальной таблицы далеко не всегда приводит к простой подстановке указанных разработчиком значений в текст запроса. В зависимости от того, какие параметры виртуальной таблицы указаны разработчиком, система может формировать РАЗЛИЧНЫЕ запросы для получения одной и той же виртуальной таблицы, причем они будут оптимизированы с точки зрения переданных параметров .

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

Совсем иная картина с виртуальными таблицами регистров накопления .

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

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

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

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

; Для чего предназначен объект встроенного языка «Запрос»?

; Для чего предназначена система компоновки данных?

; Для чего предназначена схема компоновки данных?

; Для чего предназначены настройки компоновки данных?

; В чем отличие между реальными и виртуальными таблицами?

; Из каких частей состоит текст запроса, какие из них являются обязательными?

; Каковы основные синтаксические конструкции языка запросов?

; Что является источником данных запроса?

; Что такое псевдонимы в языке запросов?

; Что такое параметры запроса?

; Что такое параметры виртуальной таблицы?

; Что такое левое соединение?

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

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

; Как упорядочить данные в отчете?

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

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

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

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

; Как управлять выводом итогов по группировкам и общих итогов?

; Как создать отчет, содержащий диаграмму?

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

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

; Что такое вычисляемые поля в системе компоновки данных?

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

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

; В чем отличие «быстрых» настроек от остальных пользовательских настроек?

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

; Как вывести данные в виде таблицы?

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

Занятие 14 Оптимизация проведения документа «Оказание услуги»

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

Теория: особенности использования ссылочных данных

Повышение скорости проведения

Автоматический расчет стоимости

Теория

Как быстро посмотреть результат запроса

Оперативное и неоперативное проведение документов

Понятие момента времени

Контроль остатков

Блокировка данных, которые читаются и изменяются при проведении

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

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

Теория: устройство кеша

Обычный кеш

Транзакционный кеш

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

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

«Зачем это нужно?» – можете спросить вы. Тому есть три причины .

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

Во-вторых, руководство ООО «На все руки мастер» решило наконец-то завершить «эксперименты» по ручному вводу стоимости расходуемых материалов и перейти на автоматический расчет стоимости расходуемых материалов «по среднему» .

В-третьих, при проведении документа ОказаниеУслуги необходимо контролировать остатки расходуемых товаров на складе. Если товаров не хватает, выдавать предупреждение и не проводить документ .

Поэтому изменения, вносимые нами в документ ОказаниеУслуги, будут преследовать три цели:

повышение скорости выполнения процедуры;

автоматическое определение стоимости расходуемых материалов при проведении документа;

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

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

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

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

Не все данные, хранящиеся в базе данных, являются ссылочными .

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

С точки зрения платформы некоторая совокупность объектных данных определяется не только значениями своих полей, но и самим фактом своего существования. Другими словами, удалив из базы некоторую совокупность объектных данных, мы не сможем вернуть систему в то же состояние, которое было до удаления. Даже если мы заново создадим ту же самую совокупность объектных данных с теми же самыми значениями полей, с точки зрения системы это будет ДРУГАЯ совокупность объектных данных .

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

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

Необъектные данные хранятся в виде записей и с точки зрения системы определяются исключительно значениями своих полей .

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

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

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

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

Рис. 14.1. Ссылка на элемент справочника «Номенклатура»

Когда в обработчике события ОбработкаПроведения документа ОказаниеУслуги мы присваиваем значение реквизита табличной части Номенклатура какой-либо переменной, мы имеем дело с объектом встроенного языка ДокументОбъект.ОказаниеУслуги .

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

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

Занятие 14 листинг 14.1. Обращение к реквизиту объекта Движение.Материал = ТекСтрокаПереченьНоменклатуры.Номенклатура;

–  –  –

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

листинг 14.2. Обращение к реквизиту ссылки Если ТекСтрокаПереченьНоменклатуры.Номенклатура.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Материал Тогда Рис. 14.3. Использование кеша объектов 416 1С:Предприятие 8.3. Практическое пособие разработчика Поскольку в объекте ДокументОбъект.ОказаниеУслуги есть только ссылка на элемент справочника Номенклатура и больше никаких данных об этом элементе нет, платформа возьмет эту ссылку и обратится по ней в кеш объектов в надежде найти там данные того объекта, ссылка на который у нее есть .

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

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

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

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

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

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

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

Занятие 14 Повышение скорости проведения Первое, чем мы займемся на этом занятии, – избавимся от «вредной»

конструкции ТекСтрокаПереченьНоменклатуры.Номенклатура.ВидНоменклатуры .

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

Откроем модуль документа ОказаниеУслуги .

Напомним, как выглядит сейчас процедура проведения этого документа (листинг 14.3) .

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

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

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

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

Для Каждого ТекСтрокаПереченьНоменклатуры Из ПереченьНоменклатуры Цикл Если ТекСтрокаПереченьНоменклатуры.Номенклатура.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Материал Тогда // Регистр ОстаткиМатериалов Расход Движение = Движения.ОстаткиМатериалов.Добавить();

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

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

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

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

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

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

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

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

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

Движение.Стоимость = ТекСтрокаПереченьНоменклатуры.Количество * ТекСтрокаПереченьНоменклатуры.Стоимость;

КонецЕсли;

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

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

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

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

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

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

Движение.Выручка = ТекСтрокаПереченьНоменклатуры.Сумма;

Движение.Стоимость = ТекСтрокаПереченьНоменклатуры.Стоимость * ТекСтрокаПереченьНоменклатуры.Количество;

КонецЦикла;

418 1С:Предприятие 8.3. Практическое пособие разработчика Другими словами, все данные, необходимые для проведения документа, мы получаем из самого документа, и только для определения того, чем является номенклатура (товаром или услугой), мы обращаемся к базе данных, читая данные всего объекта Номенклатура (листинг 14.4) .

листинг 14.4. Обращение к объекту «Номенклатура»

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

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

Итак, запросом мы будем получать:

номенклатуру, количество, сумму, стоимость .

Из документа мы возьмем следующие данные:

дата, клиент, мастер, склад .

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

Подтвердим, что мы хотим создать новый запрос .

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

Занятие 14

–  –  –

Но нам нужны не все записи этой таблицы, а только те, которые относятся к нашему документу .

420 1С:Предприятие 8.3. Практическое пособие разработчика Поэтому перейдем на закладку Условия и зададим условие отбора из таблицы документа только строк проводимого документа .

Для этого перетащим поле Ссылка в список условий запроса (листинг 14.5) .

листинг 14.5. Условие отбора из таблицы документа ОказаниеУслугиПереченьНоменклатуры.Ссылка = &Ссылка Ссылка на этот документ будет передана в параметр запроса Ссылка (рис. 14.6) .

–  –  –

Также следует учесть, что в табличной части документа одна и та же номенклатура может встречаться несколько раз .

Поэтому на закладке Группировка сгруппируем наши записи по полям Номенклатура и НоменклатураВидНоменклатуры, а рассчитывать будем сумму значений для полей Количество и Сумма .

Благодаря этому в результате значения номенклатуры повторяться не будут, и для каждого из них будут посчитаны суммарные значения по полям Количество и Сумма, если в табличной части документа содержится несколько строк с одинаковой номенклатурой .

Также в состав суммируемых полей включим и поле Стоимость .

По нему будем рассчитывать, например, функцию Максимум .

Мы подразумеваем, что для разных строк одной и той же номенклатуры стоимость будет одинаковой, поэтому функция Максимум нужна нам лишь для того, чтобы получить одно из имеющихся значений стоимости (рис. 14.7) .

Занятие 14

Рис. 14.7. Группировка строк таблицы документа

На закладке Объединения/Псевдонимы зададим псевдонимы для полей Количество и Сумма – КоличествоВДокументе и СуммаВДокументе, а для поля НоменклатураВидНоменклатуры зададим псевдоним ВидНоменклатуры просто для облегчения чтения запроса (рис. 14.8) .

Рис. 14.8. Псевдонимы полей

Нажмем ОК и посмотрим, какой текст запроса сформировал конструктор (листинг 14.6) .

листинг 14.6. Текст запроса //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА // Данный фрагмент построен конструктором .

// При повторном использовании конструктора внесенные вручную изменения будут утеряны!!!

–  –  –

Запрос.УстановитьПараметр("Ссылка», Ссылка);

РезультатЗапроса = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл // Вставить обработку выборки ВыборкаДетальныеЗаписи КонецЦикла;

//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА Комментарии конструктора запроса в начале и конце фрагмента можно удалить .

Поскольку для построения запроса мы использовали Конструктор запроса с обработкой результата, конструктор написал за нас код для выполнения и обхода записей запроса. Прокомментируем этот код .

Как вы уже знаете, для работы с запросами используется объект встроенного языка Запрос. Вначале создается новый объект Запрос и помещается в переменную Запрос. Затем в свойство Текст объекта Запрос помещается сам текст запроса (Запрос.Текст = …) .

После этого устанавливается значение параметра запроса &Ссылка как ссылка на тот документ, в модуле которого мы сейчас находимся (листинг 14.7) .

листинг 14.7. Установка параметра запроса Запрос.УстановитьПараметр("Ссылка", Ссылка);

–  –  –

Таким образом, получается объект ВыборкаИзРезультатаЗапроса, который помещается в переменную ВыборкаДетальныеЗаписи .

Далее, используя метод этого объекта Следующий() (ВыборкаДетальныеЗаписи.Следующий()), мы будем в цикле обходить выборку записей запроса .

Выполняя метод выборки запроса ВыборкаДетальныеЗаписи.Следующий(), мы на каждом шаге цикла позиционируем указатель на следующую запись выборки, пока не будет достигнут конец выборки .

Чтобы в цикле получить значение какого-либо поля выборки из результата запроса, мы будем обращаться к полям запроса через точку от переменной ВыборкаДетальныеЗаписи, которая содержит текущую строку выборки запроса. Например, так: ВыборкаДетальныеЗаписи.Номенклатура .

Теперь нам осталось перенести существовавшие ранее в этом модуле строки, описывающие движения регистров, внутрь цикла обхода результата запроса (листинг 14.8) .

листинг 14.8. Цикл обхода записей запроса Пока ВыборкаДетальныеЗаписи.Следующий() Цикл // Вставить обработку выборки ВыборкаДетальныеЗаписи КонецЦикла;

Сначала вместо комментария «// Вставить обработку выборки ВыборкаДетальныеЗаписи» перенесем условие проверки и весь код, формирующий движения по регистрам ОстаткиМатериалов и СтоимостьМатериалов (листинг 14.9) .

листинг 14.9. Формирование движений регистров Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Если ТекСтрокаПереченьНоменклатуры.Номенклатура.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Материал Тогда // Регистр ОстаткиМатериалов Расход Движение = Движения.ОстаткиМатериалов.Добавить();

Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

Движение.Период = Дата;

Движение.Материал = ТекСтрокаПереченьНоменклатуры.Номенклатура;

Движение.Склад = Склад;

Движение.Количество = ТекСтрокаПереченьНоменклатуры.Количество;

// Регистр СтоимостьМатериалов Расход Движение = Движения.СтоимостьМатериалов.Добавить();

424 1С:Предприятие 8.3. Практическое пособие разработчика

–  –  –

В условии заменим ТекСтрокаПереченьНоменклатуры.Номенклатура на ВыборкаДетальныеЗаписи, так как вид номенклатуры мы теперь получаем из запроса .

В движениях также заменим ТекСтрокаПереченьНоменклатуры на ВыборкаДетальныеЗаписи (листинг 14.10) .

листинг 14.10. Формирование движений регистров Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Если ВыборкаДетальныеЗаписи.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Материал Тогда // Регистр ОстаткиМатериалов Расход Движение = Движения.ОстаткиМатериалов.Добавить();

Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

Движение.Период = Дата;

Движение.Материал = ВыборкаДетальныеЗаписи.Номенклатура;

Движение.Склад = Склад;

Движение.Количество = ВыборкаДетальныеЗаписи.Количество;

–  –  –

листинг 14.11. Формирование движений регистров Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Если ВыборкаДетальныеЗаписи.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Материал Тогда // Регистр ОстаткиМатериалов Расход Движение = Движения.ОстаткиМатериалов.Добавить();

Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

Движение.Период = Дата;

Движение.Материал = ВыборкаДетальныеЗаписи.Номенклатура;

Движение.Склад = Склад;

Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоВДокументе;

// Регистр СтоимостьМатериалов Расход Движение = Движения.СтоимостьМатериалов.Добавить();

Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

Движение.Период = Дата;

Движение.Материал = ВыборкаДетальныеЗаписи.Номенклатура;

Движение.Стоимость = ВыборкаДетальныеЗаписи.КоличествоВДокументе * ВыборкаДетальныеЗаписи.Стоимость;

КонецЕсли;

КонецЦикла;

Теперь перенесем формирование движений по регистру Продажи (листинг 14.12) .

листинг 14.12. Формирование движений регистров Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Если ВыборкаДетальныеЗаписи.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Материал Тогда // Регистр ОстаткиМатериалов Расход Движение = Движения.ОстаткиМатериалов.Добавить();

Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

Движение.Период = Дата;

Движение.Материал = ВыборкаДетальныеЗаписи.Номенклатура;

Движение.Склад = Склад;

Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоВДокументе;

// Регистр СтоимостьМатериалов Расход Движение = Движения.СтоимостьМатериалов.Добавить();

Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

Движение.Период = Дата;

Движение.Материал = ВыборкаДетальныеЗаписи.Номенклатура;

Движение.Стоимость = ВыборкаДетальныеЗаписи.КоличествоВДокументе * ВыборкаДетальныеЗаписи.Стоимость;

КонецЕсли;

// Регистр Продажи Движение = Движения.Продажи.Добавить();

426 1С:Предприятие 8.3. Практическое пособие разработчика Движение.Период = Дата;

Движение.Номенклатура = ТекСтрокаПереченьНоменклатуры.Номенклатура;

Движение.Клиент = Клиент;

Движение.Мастер = Мастер;

Движение.Количество = ТекСтрокаПереченьНоменклатуры.Количество;

Движение.Выручка = ТекСтрокаПереченьНоменклатуры.Сумма;

Движение.Стоимость = ТекСтрокаПереченьНоменклатуры.Стоимость * ТекСтрокаПереченьНоменклатуры.Количество;

КонецЦикла;

Здесь произведем аналогичные замены. ТекСтрокаПереченьНоменклатуры заменим на ВыборкаДетальныеЗаписи (листинг 14.13) .

листинг 14.13. Формирование движений регистров Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Если ВыборкаДетальныеЗаписи.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Материал Тогда // Регистр ОстаткиМатериалов Расход Движение = Движения.ОстаткиМатериалов.Добавить();

Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

Движение.Период = Дата;

Движение.Материал = ВыборкаДетальныеЗаписи.Номенклатура;

Движение.Склад = Склад;

Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоВДокументе;

–  –  –

// Регистр Продажи Движение = Движения.Продажи.Добавить();

Движение.Период = Дата;

Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;

Движение.Клиент = Клиент;

Движение.Мастер = Мастер;

Движение.Количество = ВыборкаДетальныеЗаписи.Количество;

Движение.Выручка = ВыборкаДетальныеЗаписи.Сумма;

Движение.Стоимость = ВыборкаДетальныеЗаписи.Стоимость * ВыборкаДетальныеЗаписи.Количество;

КонецЦикла;

Поля запроса Сумма и Количество заменим на СуммаВДокументе и КоличествоВДокументе (листинг 14.14) .

Занятие 14 листинг 14.14. Формирование движений регистров Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Если ВыборкаДетальныеЗаписи.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Материал Тогда // Регистр ОстаткиМатериалов Расход Движение = Движения.ОстаткиМатериалов.Добавить();

Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

Движение.Период = Дата;

Движение.Материал = ВыборкаДетальныеЗаписи.Номенклатура;

Движение.Склад = Склад;

Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоВДокументе;

// Регистр СтоимостьМатериалов Расход Движение = Движения.СтоимостьМатериалов.Добавить();

Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

Движение.Период = Дата;

Движение.Материал = ВыборкаДетальныеЗаписи.Номенклатура;

Движение.Стоимость = ВыборкаДетальныеЗаписи.КоличествоВДокументе * ВыборкаДетальныеЗаписи.Стоимость;

КонецЕсли;

// Регистр Продажи Движение = Движения.Продажи.Добавить();

Движение.Период = Дата;

Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;

Движение.Клиент = Клиент;

Движение.Мастер = Мастер;

Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоВДокументе;

Движение.Выручка = ВыборкаДетальныеЗаписи.СуммаВДокументе;

Движение.Стоимость = ВыборкаДетальныеЗаписи.Стоимость * ВыборкаДетальныеЗаписи.КоличествоВДокументе;

КонецЦикла;

Оставшийся цикл обхода табличной части можно удалить (листинг 14.15) .

листинг 14.15. Ненужные строки Для Каждого ТекСтрокаПереченьНоменклатуры Из ПереченьНоменклатуры Цикл КонецЦикла;

В результате процедура проведения примет следующий вид (листинг 14.16) .

листинг 14.16. Процедура «ОбработкаПроведения»

Процедура ОбработкаПроведения(Отказ, Режим) Движения.ОстаткиМатериалов.Записывать = Истина;

Движения.СтоимостьМатериалов.Записывать = Истина;

Движения.Продажи.Записывать = Истина;

Запрос = Новый Запрос;

Запрос.Текст = 428 1С:Предприятие 8.3. Практическое пособие разработчика

–  –  –

Запрос.УстановитьПараметр("Ссылка", Ссылка);

РезультатЗапроса = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

–  –  –

В режиме «1С:Предприятие»

Теперь нужно запустить «1С:Предприятие» в режиме отладки, перепровести документы Оказание услуги и проверить, что ничего не изменилось .

Таким образом, мы выполнили первый пункт нашего «плана» – избавились в процедуре проведения от считывания всех данных объекта Номенклатура и тем самым оптимизировали выполнение процедуры проведения .

Автоматический расчет стоимости Теперь приступим ко второму этапу нашего плана .

До сих пор стоимость расходуемых материалов мы вписывали в документ Оказание услуги вручную, при его создании .

Теперь же будем определять стоимость номенклатуры по среднему:

для каждой номенклатуры делить ее общую, суммарную стоимость на то количество этой номенклатуры, которое у нас имеется, и таким образом получать среднюю стоимость одной единицы этой номенклатуры .

Чтобы выполнить такой расчет, нам понадобятся дополнительные данные, которых у нас сейчас нет .

Для каждой номенклатуры из табличной части нам понадобятся:

ее стоимость, хранящаяся в регистре СтоимостьМатериалов;

общее ее количество на всех складах, хранящееся в регистре ОстаткиМатериалов .

Поэтому нам нужно будет доработать наш запрос таким образом, чтобы он получал из базы данных и эти данные тоже .

Таким образом, нам хотелось бы, чтобы запрос возвращал следующие поля для каждой номенклатуры, которая есть в документе (рис. 14.9) .

Рис. 14.9. Описание полей запроса 430 1С:Предприятие 8.3.

Практическое пособие разработчика Первые четыре поля мы можем получить (и уже получаем) из табличной части самого документа, а вот последние два нужно будет получить из других таблиц базы данных:

стоимость – из регистра СтоимостьМатериалов;

остатки на всех складах – из регистра ОстаткиМатериалов (рис. 14.10) .

–  –  –

Это значит, что наш запрос должен содержать два левых соединения таблицы документа с другими таблицами: одно – с таблицей РегистрНакопления.СтоимостьМатериалов.Остатки, другое – с таблицей РегистрНакопления.ОстаткиМатериалов.Остатки .

Казалось бы, все готово для того, чтобы составить запрос .

Но обратите внимание на важную деталь: в предложенной схеме виртуальные таблицы будут возвращать стоимость и остатки номенклатуры абсолютно для всей номенклатуры. А нас интересует только та номенклатура, которая указана в нашем документе .

На маленькой базе эта особенность может почти не проявляться – количество различных элементов номенклатуры в справочнике сравнимо с количеством различных элементов номенклатуры в документе .

Но представьте реальную базу. В справочнике Номенклатура – 15 000 наименований, например. А в документе – всего 5 наименований .

Получится, что сначала виртуальная таблица остатков будет усиленно трудиться и рассчитывать нам стоимость (или остатки) по всем 15 000 наименованиям номенклатуры, а в результате, когда мы левым соединением станем соединять ее с таблицей документа, мы из этих 15 000 строк стоимости (или остатков) возьмем всего лишь 5 строк – для той номенклатуры, которая указана в документе. Остальные 14 995 строк будут просто отброшены – система напрасно их рассчитывала .

Занятие 14 Естественно, такая расточительность непозволительна в реальных условиях, и такой запрос является очень неоптимальным. Поэтому во все виртуальные таблицы, которые мы будем использовать, нужно добавить условие отбора только той номенклатуры, которая содержится в табличной части нашего документа. В этом случае стоимость и остатки будут рассчитаны не для всей номенклатуры вообще, а только для нужной нам номенклатуры .

В результате схема нашего запроса будет выглядеть следующим образом (рис. 14.11) .

Рис. 14.11. Схема запроса

Обратите внимание, что в обеих виртуальных таблицах используется список номенклатуры из табличной части документа (по нему ограничиваются рассчитываемые данные) .

Кроме этого, из таблиц документа тоже берутся не все данные, а только данные, относящиеся к одному нашему конкретному документу. Чтобы не получать этот список три раза (для документа и в каждой виртуальной таблице заново), мы можем сформировать его заранее и затем уже использовать в нужных нам условиях запроса .

Выполнить эту задачу нам помогут временные таблицы .

Временные таблицы – это программные объекты, которые разработчик может создать и заполнить данными, а запросы могут использовать данные временных таблиц для своих нужд. Например, для наложения некоторого сложного условия, как в нашем случае .

Таким образом, схема нашего запроса приобретает следующий вид (рис. 14.12) .

432 1С:Предприятие 8.3. Практическое пособие разработчика

–  –  –

Итак, приступим .

В режиме «Конфигуратор»

Первое, что мы сделаем, – удалим реквизит табличной части Стоимость документа ОказаниеУслуги, который нам больше не понадобится .

Для этого откроем в конфигураторе окно редактирования объекта конфигурации Документ ОказаниеУслуги, перейдем на закладку Данные, раскроем список реквизитов табличной части документа, выделим реквизит Стоимость и нажмем кнопку Удалить в командной панели (рис. 14.13) .

Также следует удалить соответствующее поле из таблицы ПереченьНоменклатуры, расположенной в форме .

Для этого откроем форму ФормаДокумента документа ОказаниеУслуги и в окне структуры элементов формы выделим поле таблицы и нажмем кнопку Удалить ПереченьНоменклатурыСтоимость в командной панели (рис. 14.14) .

Занятие 14 Рис. 14.13. Удаление реквизита табличной части

–  –  –

Теперь займемся запросом .

Временную таблицу мы сформируем с помощью того запроса, который у нас уже написан .

Откроем модуль документа ОказаниеУслуги .

В процедуре ОбработкаПроведения() перед созданием запроса создадим менеджер временных таблиц и укажем, что этот запрос 434 1С:Предприятие 8.3. Практическое пособие разработчика будет использовать созданный менеджер временных таблиц (листинг 14.17) .

листинг 14.17. Использование менеджера временных таблиц Движения.ОстаткиМатериалов.Записывать = Истина;

Движения.СтоимостьМатериалов.Записывать = Истина;

Движения.Продажи.Записывать = Истина;

// Создать менеджер временных таблиц МенеджерВТ = Новый МенеджерВременныхТаблиц;

Запрос = Новый Запрос;

// Укажем, какой менеджер временных таблиц использует этот запрос Запрос.МенеджерВременныхТаблиц = МенеджерВТ;

Запрос.Текст = "ВЫБРАТЬ | ОказаниеУслугиПереченьНоменклатуры.Номенклатура, Теперь изменим запрос таким образом, чтобы он создавал временную таблицу, которая будет храниться в нашем менеджере временных таблиц МенеджерВТ .

Чтобы конструктор запроса смог открыть наш запрос, удалим из него строку (поля Стоимость у нас больше нет), листинг 14.18 .

листинг 14.18. Изменение запроса | МАКСИМУМ(ОказаниеУслугиПереченьНоменклатуры.Стоимость) КАК Стоимость Также удалим запятую в конце предыдущей строки (листинг 14.19) .

листинг 14.19. Изменение запроса | СУММА(ОказаниеУслугиПереченьНоменклатуры.Сумма) КАК СуммаВДокументе

–  –  –

Нажмем ОК и посмотрим, какой текст сформировал конструктор запроса (листинг 14.20) .

листинг 14.20. Текст запроса "ВЫБРАТЬ | ОказаниеУслугиПереченьНоменклатуры.Номенклатура, | ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры | КАК ВидНоменклатуры, | СУММА(ОказаниеУслугиПереченьНоменклатуры.Количество) КАК КоличествоВДокументе, | СУММА(ОказаниеУслугиПереченьНоменклатуры.Сумма) КАК СуммаВДокументе |ПОМЕСТИТЬ НоменклатураДокумента |ИЗ | Документ.ОказаниеУслуги.ПереченьНоменклатуры КАК ОказаниеУслугиПереченьНоменклатуры |ГДЕ | ОказаниеУслугиПереченьНоменклатуры.Ссылка = &Ссылка |СГРУППИРОВАТЬ ПО | ОказаниеУслугиПереченьНоменклатуры.Номенклатура, | ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры";

436 1С:Предприятие 8.3. Практическое пособие разработчика Новым здесь является только строка (листинг 14.21) .

листинг 14.21. Создание временной таблицы |ПОМЕСТИТЬ НоменклатураДокумента Это означает, что результат запроса будет сохранен во временной таблице НоменклатураДокумента .

Теперь если мы для другого запроса укажем этот же самый менеджер временных таблиц МенеджерВТ, то в этом другом запросе мы сможем обратиться к данным этой временной таблицы .

Таким образом, мы выполнили первую часть нашего плана – создали запрос, помещающий данные табличной части документа во временную таблицу (рис. 14.17) .

–  –  –

листинг 14.22. Создание второго запроса Запрос2 = Новый Запрос;

Запрос2.МенеджерВременныхТаблиц = МенеджерВТ;

Запрос2.Текст = "";

Мы создали новый объект Запрос и назначили ему тот же самый менеджер временных таблиц, чтобы иметь возможность обращаться к созданной нами ранее временной таблице .

Теперь установим курсор внутрь кавычек и выполним команду контекстного меню Конструктор запроса. Согласимся на создание нового запроса .

Поскольку мы собираемся выбирать данные из нашей временной таблицы, создадим в запросе описание этой временной таблицы .

Для этого над списком Таблицы нажмем кнопку Создать описание временной таблицы (рис. 14.18) .

–  –  –

В открывшемся окне введем имя нашей временной таблицы НоменклатураДокумента и добавим описание полей:

Номенклатура, тип СправочникСсылка.Номенклатура;

ВидНоменклатуры, тип ПеречислениеСсылка.ВидыНоменклатуры;

КоличествоВДокументе, тип Число, 15, 3;

СуммаВДокументе, тип Число, 15, 2 .

Нажмем ОК .

438 1С:Предприятие 8.3. Практическое пособие разработчика В результате у нас получится следующее описание временной таблицы (рис. 14.19) .

–  –  –

Текст запроса будет иметь вид (листинг 14.23) .

листинг 14.23. Текст второго запроса ВЫБРАТЬ НоменклатураДокумента.Номенклатура, НоменклатураДокумента.ВидНоменклатуры, НоменклатураДокумента.КоличествоВДокументе, НоменклатураДокумента.СуммаВДокументе ИЗ НоменклатураДокумента КАК НоменклатураДокумента

–  –  –

Теперь будем соединять эту конструкцию левыми соединениями с таблицами остатков .

Начнем со стоимости материалов .

Добавим в список таблиц запроса виртуальную таблицу РегистрНакопления.СтоимостьМатериалов.Остатки. Из нее выберем поле СтоимостьОстаток. Перейдем на закладку Связи и зададим связь между таблицами .

Из временной таблицы будем выбирать все записи, и поле Номенклатура временной таблицы должно быть равно полю Материал таблицы остатков (рис. 14.22) .

Рис. 14.22. Связи между таблицами440 1С:Предприятие 8.3. Практическое пособие разработчика

Нужно не забыть ограничить виртуальную таблицу только той номенклатурой, которая есть в нашей временной таблице .

Поэтому вернемся на закладку Таблицы и поля, выделим в списке таблиц таблицу СтоимостьМатериаловОстатки и нажмем кнопку Параметры виртуальной таблицы, расположенную над списком таблиц .

Зададим параметр Условие следующим образом (листинг 14.24) .

листинг 14.24. Условие виртуальной таблицы Материал В (ВЫБРАТЬ НоменклатураДокумента.Номенклатура ИЗ НоменклатураДокумента)

–  –  –

Нажмем кнопку Запрос и посмотрим, какой текст запроса сформировал конструктор (листинг 14.25) .

листинг 14.25. Текст запроса ВЫБРАТЬ НоменклатураДокумента.Номенклатура, НоменклатураДокумента.ВидНоменклатуры, НоменклатураДокумента.КоличествоВДокументе, НоменклатураДокумента.СуммаВДокументе, СтоимостьМатериаловОстатки.СтоимостьОстаток ИЗ НоменклатураДокумента КАК НоменклатураДокумента ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьМатериалов.Остатки(, Материал В (ВЫБРАТЬ НоменклатураДокумента.Номенклатура ИЗ НоменклатураДокумента)) КАК СтоимостьМатериаловОстатки ПО НоменклатураДокумента.Номенклатура = СтоимостьМатериаловОстатки.Материал Тем самым мы добавили к выбранным ранее полям стоимость номенклатуры (рис. 14.23) .

–  –  –

Теперь добавим виртуальную таблицу остатков регистра ОстаткиМатериалов.Остатки, из которой выберем поле КоличествоОстаток .

Перейдем на закладку Связи и зададим связь между таблицами .

442 1С:Предприятие 8.3. Практическое пособие разработчика Из временной таблицы будем выбирать все записи, и поле Номенклатура временной таблицы должно быть равно полю Материал таблицы остатков (рис. 14.24) .

–  –  –

Также зададим параметры виртуальной таблицы ОстаткиМатериаловОстатки .

В параметр Условие внесем следующий текст (листинг 14.26) .

листинг 14.26. Условие виртуальной таблицы Материал В (ВЫБРАТЬ НоменклатураДокумента.Номенклатура ИЗ НоменклатураДокумента)

–  –  –

В заключение перейдем на закладку Объединения/Псевдонимы и зададим следующие псевдонимы полей (рис.

14.26):

СтоимостьОстаток – Стоимость;

КоличествоОстаток – Количество .

–  –  –

В результате мы получим следующий текст запроса (листинг 14.28) .

444 1С:Предприятие 8.3. Практическое пособие разработчика листинг 14.28. Текст запроса ВЫБРАТЬ НоменклатураДокумента.Номенклатура, НоменклатураДокумента.ВидНоменклатуры, НоменклатураДокумента.КоличествоВДокументе, НоменклатураДокумента.СуммаВДокументе, СтоимостьМатериаловОстатки.СтоимостьОстаток КАК Стоимость, ОстаткиМатериаловОстатки.КоличествоОстаток КАК Количество ИЗ НоменклатураДокумента КАК НоменклатураДокумента ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьМатериалов.Остатки(, Материал В ( ВЫБРАТЬ НоменклатураДокумента.Номенклатура ИЗ НоменклатураДокумента)) КАК СтоимостьМатериаловОстатки ПО НоменклатураДокумента.Номенклатура = СтоимостьМатериаловОстатки.Материал ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.Остатки(, Материал В ( ВЫБРАТЬ НоменклатураДокумента.Номенклатура ИЗ НоменклатураДокумента)) КАК ОстаткиМатериаловОстатки ПО НоменклатураДокумента.Номенклатура = ОстаткиМатериаловОстатки.Материал В качестве последнего штриха нашей работы с запросом нужно предусмотреть тот случай, когда номенклатура в справочнике есть, но у нее нет ни остатков, ни стоимости. Это может быть, например, в том случае, когда номенклатуру создали в справочнике, но она еще не поступала в нашу фирму .

В такой ситуации левые соединения с виртуальными таблицами не вернут ничего. На языке запросов это значит, что в полях Стоимость и Количество будут значения NULL .

Чтобы в дальнейшем нам было удобно работать с результатом нашего запроса, сразу же в самом запросе избавимся от этих значений .

Для этого мы применим функцию ЕСТЬNULL() к полям Стоимость и Количество. Если значение этого поля будет NULL, функция вернет

0. В остальных случаях функция вернет само значение этого поля .

Перейдем на закладку Таблицы и поля, выделим поле СтоимостьМатериаловОстатки.СтоимостьОстаток и нажмем кнопку Изменить текущий элемент (рис. 14.27) .

В открывшемся окне отредактируем значение поля следующим образом (листинг 14.29), рис. 14.28 .

Занятие 14

–  –  –

Аналогично поступим и с другим полем: ОстаткиМатериаловОстатки.КоличествоОстаток .

Нажмем ОК – текст запроса будет вставлен в модуль (листинг 14.30) .

листинг 14.30. Текст запроса Запрос2.Текст = "ВЫБРАТЬ | НоменклатураДокумента .

Номенклатура, | НоменклатураДокумента.ВидНоменклатуры, | НоменклатураДокумента.КоличествоВДокументе, | НоменклатураДокумента.СуммаВДокументе, | ЕСТЬNULL(СтоимостьМатериаловОстатки.СтоимостьОстаток, 0) КАК Стоимость, | ЕСТЬNULL(ОстаткиМатериаловОстатки.КоличествоОстаток, 0) КАК Количество |ИЗ | НоменклатураДокумента КАК НоменклатураДокумента | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьМатериалов.Остатки(, Материал В ( 446 1С:Предприятие 8.3. Практическое пособие разработчика

–  –  –

Нам останется всего лишь дописать после него оператор выполнения запроса (листинг 14.31) .

листинг 14.31. Фрагмент процедуры «ОбработкаПроведения()»

… Запрос2 = Новый Запрос;

Запрос2.МенеджерВременныхТаблиц = МенеджерВТ;

Запрос2.Текст = "ВЫБРАТЬ | НоменклатураДокумента .

Номенклатура, … | ПО НоменклатураДокумента.Номенклатура = СтоимостьМатериаловОстатки.Материал";

РезультатЗапроса = Запрос2.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

… Теперь разберемся с записью движений .

Все операторы, которые были написаны нами ранее, будут работать без изменений .

Единственное, что потребуется изменить, – это способ получения стоимости. Раньше мы просто брали ее из документа, теперь же нам нужно ее рассчитать на основании тех данных, которые мы получили запросом .

Стоимость материала равна частному от деления всей стоимости, полученной запросом (Стоимость), на общее количество материала на всех складах (Количество) .

Но, как мы уже сказали, возможна ситуация, когда поле Количество у нас будет равно 0, а на 0 делить нельзя. Поэтому сразу после начала цикла обхода результата запроса рассчитаем стоимость для текущей номенклатуры (листинг 14.32) .

Занятие 14 листинг 14.32. Фрагмент процедуры «ОбработкаПроведения()»

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Если ВыборкаДетальныеЗаписи.Количество = 0 Тогда СтоимостьМатериала = 0;

Иначе СтоимостьМатериала = ВыборкаДетальныеЗаписи.Стоимость / ВыборкаДетальныеЗаписи.Количество;

КонецЕсли;

–  –  –

Теперь заменим расчет стоимости в движениях регистров СтоимостьМатериалов и Продажи (листинг 14.33) .

листинг 14.33. Фрагмент процедуры «ОбработкаПроведения()»

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Если ВыборкаДетальныеЗаписи.Количество = 0 Тогда СтоимостьМатериала = 0;

Иначе СтоимостьМатериала = ВыборкаДетальныеЗаписи.Стоимость / ВыборкаДетальныеЗаписи.Количество;

КонецЕсли;

Если ВыборкаДетальныеЗаписи.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Материал Тогда // Регистр ОстаткиМатериалов Расход Движение = Движения.ОстаткиМатериалов.Добавить();

Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

Движение.Период = Дата;

Движение.Материал = ВыборкаДетальныеЗаписи.Номенклатура;

Движение.Склад = Склад;

Движение.Количество = ВыборкаДетальныеЗаписи.Количество;

–  –  –

// Регистр Продажи Движение = Движения.Продажи.Добавить();

Движение.Период = Дата;

Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;

Движение.Клиент = Клиент;

448 1С:Предприятие 8.3. Практическое пособие разработчика Движение.Мастер = Мастер;

Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоВДокументе;

Движение.Выручка = ВыборкаДетальныеЗаписи.СуммаВДокументе;

Движение.Стоимость = СтоимостьМатериала * ВыборкаДетальныеЗаписи.КоличествоВДокументе;

КонецЦикла;

Теперь все вроде бы хорошо, но остался один важный момент .

Если проводить этот документ в первый раз, то результат получится правильный .

Однако если документ был проведен ранее и мы заново решим провести его, мы получим неправильный результат .

Дело в том, что когда мы находимся в обработчике проведения документа и этот документ был уже проведен ранее, то в базе данных существуют движения этого документа .

Таким образом, читая из базы данных стоимость и остатки материалов, мы прочитаем их с учетом тех движений, которые документ выполнил ранее. А это неправильно .

Чтобы в обработчике проведения документа прочитать данные базы данных без учета предыдущих движений, которые мог выполнять документ, нужно перед чтением записать пустые наборы записей в те регистры, из которых мы собираемся читать .

В нашем случае такими регистрами являются регистры накопления СтоимостьМатериалов и ОстаткиМатериалов .

Поэтому перед выполнением второго запроса добавим следующие две строки:

листинг 14.33а. Фрагмент процедуры «ОбработкаПроведения()»

… | ПО НоменклатураДокумента.Номенклатура = СтоимостьМатериаловОстатки.Материал";

// Запишем пустые наборы записей, чтобы читать остатки без учета данных в документе Движения.СтоимостьМатериалов.Записать();

Движения.ОстаткиМатериалов.Записать();

–  –  –

В режиме «1С:Предприятие»

Теперь нужно запустить «1С:Предприятие» в режиме отладки, перепровести все документы Оказание услуги и проверить, что данные правильно заносятся в регистры .

Теория Как быстро посмотреть результат запроса В процессе изменения процедуры проведения документа ОказаниеУслуги мы с вами подошли уже к написанию довольно сложных запросов .

Зачастую возникает необходимость быстро убедиться в правильности тех данных, которые читаются из базы данных с помощью запроса, просмотреть их в виде таблицы .

Есть простой способ сделать это в конфигураторе. Рассмотрим его на примере запроса из нашей обработки проведения .

Предположим, после выполнения запроса (Запрос2) нужно выгрузить результат запроса в таблицу значений (ТЗ). Это можно сделать следующим образом (листинг 14.34) .

листинг 14.34. Фрагмент процедуры «ОбработкаПроведения()»

… РезультатЗапроса = Запрос2.Выполнить();

ТЗ = РезультатЗапроса.Выгрузить();

ВыборкаДетальныеЗаписи = Результат.Выбрать();

… После этого нужно установить точку останова на следующем операторе (ВыборкаДетальныеЗаписи = Результат.Выбрать()). Затем запустить «1С:Предприятие» в режиме отладки и перепровести один из документов Оказание услуги. Например, документ № 2 .

После того как исполнение кода будет остановлено, нужно двойным щелчком выделить слово ТЗ и нажать кнопку Вычислить выражение (Shift + F9) на панели инструментов Отладка конфигурации .

Откроется окно просмотра выражений, в котором будет находиться наша таблица значений ТЗ .

450 1С:Предприятие 8.3. Практическое пособие разработчика Таблица значений является коллекцией, поэтому, чтобы просмотреть ее содержимое, выделим строку ТЗ в окне Результат и нажмем кнопку Показать значения в отдельном окне (или F2) над окном результата (рис. 14.29) .

Рис. 14.29. Просмотр таблицы значений, содержащей результат запроса Мы увидим всю таблицу значений, которая будет содержать результат выполнения нашего запроса .

С помощью кнопки Вывести список можно вывести эту таблицу значений, например, в табличный документ, если требуется какой-то анализ этих данных или если эти данные нужно сохранить для сравнения .

После просмотра таким образом результата запроса нужно не забыть снять точку останова в процедуре проведения документа и закомментировать (или удалить) добавленную нами строку, выгружающую результат запроса в таблицу значений, поскольку для нормальной работы документа она не нужна .

Оперативное и неоперативное проведение документов Теперь мы поговорим о некоторых особенностях, связанных с тем, что в обработке проведения мы будем контролировать наличие достаточного количества материалов на складе при проведении документа .

Делать это мы будем не всегда. А только в том случае, когда документ проводится оперативно. Если документ проводится неопеЗанятие 14 ративно, то мы это делать не будем. Так для чего же предназначено оперативное и неоперативное проведение документа? Как устроен в системе механизм оперативного проведения документов?

При разработке конфигураций на платформе «1С:Предприятие»

используется концепция оперативного и неоперативного проведения документов. Эта концепция используется при решении задач оперативного учета (например, при складском учете товаров) и позволяет организовать корректную работу с документами в условиях реальной действительности. Однако можно отключить этот механизм (запретить оперативное проведение документов) и реализовывать собственные алгоритмы, проверять актуальность документов на оси событий и т. д .

Эта концепция подразумевает, что работа пользователей может происходить в двух принципиально разных по своей сути режимах .



Pages:     | 1 || 3 | 4 |   ...   | 5 |



Похожие работы:

«СОДЕРЖАНИЕ Введение 1. 4 Аналитическая часть 1.1. Общие сведения об образовательной организации 4 1.2. Оценка образовательной деятельности организации 5 1.3. Оценка системы управления организации 9 1.4. Оценка содержания и качества подготовки обучающихс...»

«| С. H. МИНЧИН I и А. Т. УЛУБЕКОВ ЗЕМЛЯ — КОСМОС —ЛУНА ems ЗЕМЛЯКОСМОСЛУНА Т н Т Б \ НИИ приоор-^!! ел9. %f Г С. Н. М и н ч и н I и А. Т. У л у б е к о в. Земля—космос—Луна. М., "Машиностроение", 1972, стр. 244. Эта книга — рассказ об истории и основных этапах исследования человеком Луны главным о...»

«Филин 120 СМ 4G GPS Руководство пользователя Оглавление Общая Информация: Применение: Основные Характеристики Электропитание Флеш-карта Внимание Вид и детали камеры Установка карты памяти Быстра...»

«Восточно-Европейский журнал передовых технологий ISSN 1729-3774 3/1 ( 93 ) 2018 УДК 621.9.06-658:512 Побудовано тривимірні твердотільні моделі інструменталь­ DOI: 10.15587/1729-4061.2018.131778 них магазинів дискового типу (на 14 інструментів) і ланцю­ гов...»

«Пять важнейших аспектов организации беспрерывного беспроводного подключения в системах AS/RS и AGV Автор – Джеффри Ке, продакт-менеджер компании Моха Обзор — эволюция средств автоматической транспортировки материалов (AMH) Автоматическая транспортировка ма...»

«ФГБ ОУ ВПО "МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ПУТЕЙ СООБЩЕНИЯ" Кафедра "Теплоэнергетика железнодорожного транспорта" Воронова Л.А., Гусев Г.Б, Костин А.В . ТЕРМОДИНАМИКА И ТЕПЛОПЕРЕДАЧА Рекомендовано редакционно-издательским советом университета в качестве методических указаний для студентов...»

«Отраслевые научные и прикладные исследования: Производство, переработка и хранение сельскохозяйственной продукции УДК 641.87:642.5069.6 ОСОБЕННОСТИ ПРОИЗВОДСТВА КОМБИНИРОВАННЫХ МЯСОРАСТИТЕЛЬНЫХ ПАШТЕТОВ ––––––– FEATURES OF THE PRODUCTION OF COMBINED MEAT AND VEG...»

«10 научная рота Министерства обороны Российской Федерации Гляков М.Ю., к.т.н, командир роты старший научный сотрудник ВА МТО ВС РФ Гольцин Р.О., оператор научной роты ВА МТО ВС РФ Тихонов А.Д., опе...»

«Вестник науки и образования Северо-Запада России, 2018, Т.4, №3 http://vestnik-nauki.ru ISSN 2413–9858 УДК 627.8 ОПТИМИЗАЦИЯ ПРОЦЕССА РАБОТЫ МЕХАНИЧЕСКИХ СИСТЕМ ТОРМОЖЕНИЯ ВЕТРОЭНЕРГЕТИЧЕСКИХ УСТАНОВОК...»

«ЭЛЕКТРОННЫЙ КАТАЛОГ Автоматизированные процессы в библиотеке техникума обеспечивает информационно-библиотечная программа АБИС "МАРК-SQL версия для школьных библиотек". Это информационная система осуществляет авт...»

«ГОСТ Р 50267.29-99 (М ЭК 60601-2-29-99) ГОСУДАРСТВЕННЫЙ СТАНДАРТ РОССИЙСКОЙ ФЕДЕРАЦИИ И ЗД Е Л И Я М Е Д И Ц И Н С К И Е ЭЛ ЕК ТРИ ЧЕСК И Е Часть 2 Частные требования безопасности к симуляторам (имитаторам) для луч...»

«Членам Научно-технического совета по развитию промышленности строительных материалов (изделий) и строительных конструкций при Министерстве промышленности и торговли Российской Федерации (по списку рассылки) В Министер...»

«ЮЖНО-УРАЛЬСКИЙ КООРДИНАЦИОННЫЙ ЦЕНТР НАУЧНО-ТЕХНИЧЕСКОГО ТВОРЧЕСТВА МОЛОДЕЖИ (НТТМ) "И Н Т Е Л Л Е К Т У А Л Ы XXI В Е К А" Южно-Уральский государственный университет (НИУ) Челябинское областное отделен...»

«Министерство образования и науки Российской Федерации федеральное государственное автономное образовательное учреждение высшего образования "НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТОМСКИЙ ПОЛИТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ" Инженерная школа природных ресурсов Направление подготовки 20.03.02 Природообустройство и водопользование О...»

«1. Цель и задачи сектора на уч. год.Цель работы: • внедрение дистанционных образовательных технологий в учебный процесс вуза согласно Плана-графика на 2015/16 уч. год по всем направлениям и профилям бакалавриата очной и заочной форм обучения.• повышение эффективности использования дистанционных образовательных те...»

«ЭЛЕКТРИЧЕСКАЯ ЦЕПНАЯ ПИЛА SAFUN ECS-2300-16 РУКОВОДСТВО ПО ЭКСПЛУАТАЦИИ арт. 001 0301 Руководство по эксплуатации Уважаемый покупатель! Благодарим Вас за приобретение инструмента торговой марки Safun. Вся продукция Safun спроектирована и изготовлена с учетом самых высоких требо...»

«САДУЕВ БАКЫТЖАН КАСЫМОВИЧ Окончил землеустроительный факультет в 1977 году. С 1977 по 2002 годы работал в Костанайском филиале "Целингипро-зем", занимал должности инженераземлеустроителя, руководителя изыскате...»

«О компании В 2006 году стартовал Национальный проект "Развитие АПК". Одним из основных направлений проекта стало ускоренное развитие животноводства. Его реализация позволит повысить рентабельность, провести техническое переоснащение действующих животноводческих комплексов и...»

«Министерство образования и науки Российской Федерации Федеральное государственное автономное образовательное учреждение высшего образования "Уральский федеральный университет имени первого Президента России Б.Н. Ельцина" Институт "Высшая школа экономики и менеджмента" Кафедра экономики и управления строительством и рынком нед...»

«Приложение к Свидетельству Ns СОГЛАСОВАНО ЦИ СИ СHI ИМ УП "СНИИМ" В.И. Евграфов -г ^о9 г. Внесенв енный Модем технологический РМ 056.01-01 реестр средгтв измерений, Регистрационный номер Е[-1 9 Р { — 09 Взамен Ns Выпускается по техническим условиям ТУ 4224-031 — 11821941 — 2009,...»

«МИНИСТЕРСТВО СТРОИТЕЛЬСТВА И ЖИЛИЩНО-КОММУНАЛЬНОГО ХОЗЯЙСТВА РОССИЙСКОЙ ФЕДЕРАЦИИ (МИНСТРОЙ РОССИИ) ПРИКАЗ от” 201^ г. Москве Об утверждении Изменения № 1 к СП 136.13330.2012 "Здания и сооружения. Общие положения проектиро...»







 
2019 www.librus.dobrota.biz - «Бесплатная электронная библиотека - собрание публикаций»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.