[Закрываем эфир!] Образовательный интенсив «Педагог 2.0: инструменты и технологии» Трансляция→
Конкурс разработок «Пять с плюсом» сентябрь 2020
Добавляйте свои материалы в библиотеку и получайте ценные подарки
Конкурс проводится с 1 сентября по 30 сентября

Лабораторные работы 1С: Предприятие

В данном документе представлены Методические рекомендации к лабораторным работам по дисциплине "Пакеты прикладных программ". Используемое ПО - 1С: Предприятие 8.2. Рекомендуется для студентов 4 курсов.
Просмотр
содержимого документа

Государственное бюджетное профессиональное образовательное учреждение

 «Арзамасский приборостроительный колледж имени П.И. Пландина»

 

 

 

Одобрено

ЦМК «Информационные

системы и компьютерные сети»

Протокол от «____»_________2019 №____

_______________/Козина Л.В./

 

 

 

 

 

 

Методические рекомендации

по выполнению лабораторных работ

учебная дисциплина:

Пакеты прикладных программ

 

по специальности 09.02.04

Информационные системы (по отраслям)

 

 

 

 

 

 

Разработчик: Карасева В.С.,

 преподаватель

 

 

 

 

 

 

 

 

 

г. Арзамас, 2019 г.


Содержание

 

стр.

  1.                       

Пояснительная записка

3

  1.                       

Правила выполнения лабораторных работ

5

  1.                       

Правила по технике безопасности при проведении лабораторных работ

6

  1.                       

Перечень лабораторных работ по учебной дисциплине

7

  1.                       

Инструкционные карты и задания по выполнению лабораторных работ

8


  1. Пояснительная записка

 

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

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

Содержание всех лабораторных работ по учебной дисциплине  «Пакеты прикладных программ» обеспечивают выработку практических умений и формирование общих и профессиональных компетенций в соответствии с ФГОС СПО по специальности 09.02.04 Информационные системы (по отраслям).

В результате выполнения лабораторных работ по учебной дисциплине студенты должны:

уметь:

- ориентироваться в среде выбранных программных продуктов;

- создавать документы и шаблоны в среде выбранных пакетов;

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

знать:

- состав и структуру пакетов (управляющие, обслуживающие и обрабатывающие модули, информационная база);

- виды интерфейсов (внешние, внутренние, справочные, управления, ввода-вывода, информационные);

- функциональное и системное наполнение пакетов;

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

- интеграция выбранных пакетов с другими программами.

 Формируемые общие компетенции и профессиональными (ПК) компетенциями:

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

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

 ОК 3. Решать проблемы, оценивать риски и принимать решения в нестандартных ситуациях.

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

 ОК 5. Использовать информационно-коммуникационные технологии для совершенствования профессиональной деятельности.

 ОК 6. Работать в коллективе и команде, обеспечивать ее сплочение, эффективно общаться с коллегами, руководством, потребителями.

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

 ОК 8. Самостоятельно определять задачи профессионального и личностного развития, заниматься самообразованием, осознанно планировать повышение квалификации.

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

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

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

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

 ПК 2.4. Формировать отчетную документацию по результатам работ.

 ПК 2.5. Оформлять программную документацию в соответствии с принятыми стандартами.

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

    В ходе работы необходимо строго соблюдать правила по технике безопасности.

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

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


  1. Правила выполнения лабораторных работ

 

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

2.Каждый студент должен знать правила по технике безопасности при работе в компьютерном классе.

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

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

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

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

7. Содержание лабораторной работы обучающиеся должны оформить в виде письменного отчета.

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

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

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


  1. Правила по технике безопасности при проведении лабораторных и практических работ в компьютерном классе

 

  1. Работая в компьютерном классе, необходимо соблюдать все меры предосторожности при работе с оборудованием, находящимся под электрическим напряжением.
  2. На первом занятии студенты знакомятся с инструкцией по охране труда.
  3. Студенты находятся в кабинете без верхней одежды.
  4. Студенты находятся в кабинете только в присутствии преподавателя.
  5. Приступать к выполнению задания студенты должны после указания преподавателя.
  6. Студенты занимают только закрепленные за ними рабочие места на ПК.
  7. Перед практической работой на компьютере студенты проверяют состояние своих рабочих мест и о выявленных неполадках срочно сообщают преподавателю.
  8. Во время занятия студенты не покидают свои рабочие места без разрешения преподавателя.
  9. В кабинете запрещено использовать CD-диски и флэш-накопители без разрешения преподавателя. Если такое разрешение получено, то преподаватель сам работает с электронными носителями студентов со своего компьютера, предварительно, проверив носитель на наличие Вируса.
  10. Категорически запрещается ставить на системные блоки какие-либо предметы, облокачиваться на столешницу для клавиатуры.
  11. Категорически запрещается студентам ставить на компьютерные столы пластиковые бутылки с водой.
  12. При обнаружении посторонних запахов при работе компьютерного оборудования и сбойных ситуациях немедленно сообщить преподавателю.
  13. Во время каждой перемены студенты выходят из кабинета.

  1. Перечень лабораторных работ

 

 


5. Инструкции по выполнению лабораторных работ

 

Лабораторная работа №1.

Знакомство с прикладной программой «1С: Бухгалтерия 8.2» на базе системы 1С: Предприятие 8.2

Цель работы: познакомится с прикладной программой «1С: Бухгалтерия 8.2».

Оборудование: ПК

Программное обеспечение: Браузер Google Chrome. Онлайн версия 1С: Предприятие 8.2

Теоретические сведения:

1С: Предприятие является универсальной системой автоматизации экономической и организационной деятельности предприятия.

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

Это достигается благодаря тому, что 1С: Предприятие – совокупность различных программных инструментов, с которыми работают разработчики и пользователи. Логически всю систему делят на две части – конфигурацию и платформу, которая управляет работой конфигурации. Т.е. основа системы и различные ее настройки под конкретные условия.

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

Существует множество прикладных решений (конфигураций), например: 1С: Управление небольшой фирмой 8, 1С: Бухгалтерия 8, 1С: Предприятие 8. Управление торговлей, 1С: Зарплата и Управление Персоналом 8, 1С: Предприятие 8. Управление производственным предприятием, 1С: Консолидация 8 и др.

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

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

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

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

Ход работы:

Создание новой информационной базы.

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

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

Нажмите Далее, выберите пункт Создание информационной базы без конфигурации.

Нажмите кнопку Далее. Задайте наименование Вашей информационной базы типа «Информационная база ваша_фамилия» и выберите тип ее расположения На данном компьютере.

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

Нажмите Далее, ничего не меняйте и нажмите Готово.

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

Запустите 1С: Предприятие в режиме Конфигуратора.

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

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

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

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

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

 

Откроется дерево объектов конфигурации:

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

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

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

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

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

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

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

Как добавить объект конфигурации

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

  •      Установите курсор на ветку объектов конфигурации, где хотите создать объект и нажмите на кнопку Действия – Добавить.
  •      Установите курсор на ветку объектов конфигурации, где хотите создать объект и нажмите правую кнопку мыши – появится контекстное меню, пункт Добавить, рядом указана клавиша быстрого вызова – Insert.
  •      Установите курсор на ветку объектов конфигурации, где хотите создать объект и нажмите кнопку-пиктограмму Добавить

Окно свойств

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

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

Почему мы именно так задали имя?

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

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

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

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

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

Ответим на вопрос конфигуратора Да и на экране появится окно 1С: Предприятия.

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

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

  1. Что такое конфигурируемость системы 1С: Предприятие.
  2. Из каких основных частей состоит система.
  3. Что такое платформа и конфигурация.
  4. Для чего используются разные режимы запуска системы.
  5. Для чего нужно дерево объектов конфигурации.
  6. Что такое объекты конфигурации.
  7. Как можно добавить новый объект конфигурации.
  8. Как запустить 1С: Предприятие в режиме отладки.

Список литературы:

  1.         Дадян Э.Г.  Конфигурирование и моделирование в системе «1С: Предприятие»: учебник / Э.Г. Дадян. — М. : Вузовский учебник : ИНФРА-М, 2018. — 417 с.

Лабораторная работа №2.

Знакомство с интерфейсом программы 1С: Предприятие 8.2

Цель работы: познакомится с объектом конфигурации Подсистема как основой описания интерфейса  «1С: Предприятия 8.2».

Оборудование: ПК

Программное обеспечение: Браузер Google Chrome. Онлайн версия 1С: Предприятие 8.2

Теоретические сведения:

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

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

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

 

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

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

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

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

Ход работы:

Добавление подсистемы

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

Закройте окно 1С: Предприятие и вернитесь в конфигуратор.

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

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

Задайте имя подсистемы – Бухгалтерия. На основании имени система сама создаст синоним Бухгалтерия.

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

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

Картинка подсистемы

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

Нажмите кнопку выбора в поле Картинка.

 

Добавьте картинку в список на закладке Из конфигурации – нажмите кнопку Добавить как показано на рисунке.

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

Задайте для подсистемы Бухгалтерия одноимѐнную картинку.

 

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

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

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

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

Порядок разделов

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

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

Закройте командный интерфейс и запустите 1С: Предприятие в режиме отладки (клавиша F5).

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

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

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

Список литературы:

  1.         Дадян Э.Г.  Конфигурирование и моделирование в системе «1С: Предприятие»: учебник / Э.Г. Дадян. — М. : Вузовский учебник : ИНФРА-М, 2018. — 417 с.

Лабораторная работа №3.

Работа со справочником программы 1С: Предприятие 8.2

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

Оборудование: ПК

Программное обеспечение: Браузер Google Chrome. Онлайн версия 1С: Предприятие 8.2

Теоретические сведения:

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

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

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

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

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

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

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

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

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

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

Формы справочника

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

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

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

Ход работы:

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

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

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

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

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

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

Расширенное представление объекта – определяет заголовок формы объекта. Если не задано, используется Представление объекта.

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

Расширенное представление списка определяет заголовок формы списка. Если не задано, используется Представление списка. Задайте два свойства Представление объекта Клиент и Представление списка Клиенты (последнее необязательно, т.к. будет использован синоним).

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

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

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

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

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

Команда добавления нового элемента

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

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

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

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

В открывшемся окне Все подсистемы слева в списке Подсистемы выделим ОказаниеУслуг, справа в списке Командный интерфейс отразятся все команды выбранной подсистемы.

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

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

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

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

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

Панель навигации и панель разделов

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

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

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

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

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

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

Создание элементов справочника

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

Для этого выполним команду Клиент в панели действий раздела Оказание услуг. Перед Вами откроется форма для создания элемента справочника – основная форма объекта. Внесите имя нового клиента – Иванов Михаил Юрьевич, код создается автоматически.

Нажмите Записать и закрыть (не забывайте о сочетаниях клавиш, так быстрее).

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

Добавьте таким же образом еще одного клиента с наименованием Роман.

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

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

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

Создайте клиента с наименованием Спиридонова Галина.

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

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

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

Справочник с табличной частью

Создадим второй справочник – Сотрудники.

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

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

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

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

Табличная часть

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

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

Добавьте следующие реквизиты:

Организация – тип Строка, длина 100;

НачалоРаботы – тип Дата, состав даты – Дата;

ОкончаниеРаботы – тип Дата, состав даты – Дата;

Должность – тип Строка, длина 100.

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

Для этого выделим подсистему РасчетЗарплаты, контекстное меню – Открыть командный интерфейс.

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

 

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

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

 

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

 Гусаков Николай Дмитриевич

 Организация – ЗАО «НТЦ»

 Начало работы – 01.02.2000

 Окончание работы – 16.04.2003

 Должность – Ведущий специалист

 Деловой Иван Сергеевич

 Организация – ООО «Автоматизация»

 Начало работы – 22.01.1996

 Окончание работы – 31.12.2002

 Должность – Инженер

 Организация – ЗАО «НПО СпецСвязь»

 Начало работы – 20.06.1986

 Окончание работы – 21.01.1995

 Должность – Начальник производства

 Симонов Валерий Михайлович

 Организация – ООО «СтройМастер»

 Начало работы – 06.02.2001

 Окончание работы – 03.04.2004

 Должность – Прораб

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

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

Иерархический справочник

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

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

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

На закладке Данные установите длину наименования 100 символов.

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

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

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

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

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

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

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

Создание элементов в иерархическом справочнике

Создайте две группы в корне справочника: Материалы и Услуги с помощью кнопки Создать группу в командной панели формы списка.

Поля Родитель и Код заполнять не будем.

Затем раскроем группу Материалы, нажав на крестик слева от нее. И создадим в ней 5 элементов кнопкой :

 Строчный трансформатор Samsung

 Строчный трансформатор GoldStar

 Транзистор Philips 2N2369

 Шланг резиновый

 Кабель электрический

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

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

Раскройте группу Услуги и создайте в ней услуги по ремонту телевизоров:

 Диагностика

 Ремонт отечественного телевизора

 Ремонт импортного телевизора

И услуги по установке стиральных машин:

 Подключение воды

 Подключение электричества

Перенос элементов в другие группы

Теперь распределим услуги по двум смысловым группам: услуги по ремонту телевизоров и услуги по установке стиральных машин. Для этого в группе Услуги создайте еще две группы: Телевизоры и Стиральные машины. Есть несколько способов распределения элементов в группы. Первый – ставите курсор на услугу, которую хотите перетащить в другую группу, кнопка Все действия – Переместить в группу. Можно переместить сразу несколько элементов, выделив их с помощью Ctrl. Второй способ – выбрать услугу двойным щелчком и установить в поле Родитель нужную группу. Третий способ – самый простой – выбрать услуги мышью и ею перетащить в нужную группу.

Переместите услуги Диагностика, Ремонт отечественного телевизора, ремонт импортного телевизора в группу Телевизоры, остальное – в группу Стиральные машины.

Создайте в группе Материалы две группы: Радиодетали и Прочее. Кабель электрический и Шланг резиновый поместите в группу Прочее. Остальное – в группу Радиодетали.

Переключите представление списка в виде дерева – Все действия – Режим просмотра – Дерево. Получится такая картина:

Закройте приложение и вернитесь в конфигуратор.

Справочник с предопределенными элементами

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

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

Представление объекта Склад. На вкладке Подсистемы отметьте ОказаниеУслуг и УчетМатериалов. На вкладке Формы установите флажок Быстрый выбор.

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

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

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

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

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

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

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

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

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

  1. Для чего предназначен объект конфигурации Справочник
  2. Каковы характерные особенности Справочника
  3. Для чего используются реквизиты и табличные части справочника
  4. Зачем нужны иерархические справочники и что такое родитель
  5. Что такое предопределенные элементы
  6. Чем с точки зрения конфигурации отличаются обычные элементы справочника от предопределенных элементов
  7. Как создать объект Справочник и описать его структуру
  8. Как добавить новые элементы в Справочник
  9. Как создать группу Справочника
  10. Как переместить элементы из одной группы Справочника в другую
  11. Зачем нужна проверка заполнения у реквизитов справочника
  12. Что такое быстрый выбор и как его использовать
  13. Как отобразить команды создания нового элемента справочника в интерфейсе подсистем
  14. Как редактировать командный интерфейс подсистем

Список литературы:

  1.         Дадян Э.Г.  Конфигурирование и моделирование в системе «1С: Предприятие»: учебник / Э.Г. Дадян. — М. : Вузовский учебник : ИНФРА-М, 2018. — 417 с.

Лабораторная работа №4.

Работа с объектом документ системы 1С: Предприятие 8.2

Цель работы: работа с объектом документ, создание нескольких документов и последовательности действий.

Оборудование: ПК

Программное обеспечение: Браузер Google Chrome. Онлайн версия 1С: Предприятие 8.2

Теоретические сведения:

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

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

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

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

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

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

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

Ход работы:

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

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

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

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

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

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

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

Создайте реквизиты табличной части Материалы:

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

Количество, тип Число, длина 15, точность 2 знака после запятой, неотрицательное;

Цена, тип Число, длина 15, точность 2, неотрицательное;

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

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

Закройте окно свойств справочника.

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

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

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

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

Система автоматически подставит текущую дату создания документа и нулевое время, т.к. документ еще не проведѐн. Поле Номер не заполнено, но система сама его сгенерирует, т.к. свойство Автонумерация (на вкладке Нумерация в свойствах документа) включено по умолчанию. Обратите внимание, что поле Склад уже заполнено значением Основной, как мы и задавали в свойствах реквизита. Заполните табличную часть приходной накладной материалами для ремонта телевизоров как показано на рисунке. При нажатии кнопки выбора в поле Материал открывается форма для выбора элементов справочника Номенклатура, т.к. этот реквизит имеет ссылочный тип данных и ссылается на справочник Номенклатура. Также можно начать набирать название материала в поле Материал и система выдаст всплывающий список подходящих под описание материалов. После заполнения нажмите Провести и закрыть.

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

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

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

Зеленая галочка около документа означает, что он проведен.

Автоматический пересчет суммы в строках документа

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

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

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

Откроется конструктор форм. Там ничего не меняете и сразу нажмите Готово. Откроется окно редактора форм.

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

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

Обработчик события

У системы существуют события, которые связаны с различными моментами еѐ функционирования. В том числе, связанные с функционированием форм и элементов в формах.

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

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

  Система откроет закладку Модуль редактора формы. Модуль – это хранилище для текста программы на встроенном языке. В данном случае это модуль формы. В модуль формы в процедуру МатериалыКоличествоПриИзменении() добавим следующий текст.

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

СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество * СтрокаТабличнойЧасти.Цена;

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

Одна процедура для обработки нескольких событий

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

Создайте общий модуль РаботаСДокументами, установите в его свойствах флажок Клиент, а флажок Сервер снимите (это означает, что модуль будет скомпилирован в тонком клиенте и в веб-клиенте, а не на сервере).

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

Процедура РассчитатьСумму(СтрокаТабличнойЧасти) Экспорт

СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество

*СтрокаТабличнойЧасти.Цена;

КонецПроцедуры

Теперь зайдите в модуль формы документа Приходная накладная и изменим вторую строчку процедуры на следующую:

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

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

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

Для этого нажмите внизу вкладку Форма (рядом с Модуль), дважды щелкните в левом верхнем окне на МатериалыЦена, прокрутите окно свойств, нажмите на значок лупы в поле ПриИзменении и в выделенную область впишите:

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

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

Документ «Оказание услуги» Создайте новый документ с именем ОказаниеУслуги. Представление объекта не задаем – будет использоваться синоним, Представление списка задайте как Оказание услуг. На вкладке Подсистемы отметьте ОказаниеУслуг и Бухгалтерия. На вкладке Данные создайте реквизиты документа:

Склад, тип СправочникСсылка.Склады, Значение заполнения Основной;

Клиент, тип СправочникСсылка.Клиенты, Проверка заполнения Выдавать ошибку;

Мастер, тип СправочникСсылка.Сотрудники, Проверка заполнения Выдавать ошибку.

Создайте табличную часть документа с именем ПереченьНоменклатуры с реквизитами:

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

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

Цена, тип Число, длина 15, точность 2, неотрицательное;

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

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

Перейдите на вкладку Формы. Создайте основную форму документа.

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

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

ПереченьНоменклатурыЦенаПриИзменении для поля ПереченьНоменклатурыЦена.

 

Далее модуль формы документа ОказаниеУслуги заполните следующим образом:

&НаКлиенте

Процедура ПереченьНоменклатурыКоличествоПриИзменении(Элемент)

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

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

КонецПроцедуры

 

&НаКлиенте

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

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

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

КонецПроцедуры

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

В панели действий раздела Оказание услуг создайте документ и заполните следующим образом:

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

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

  1. Какими характерными особенностями обладает документ
  2. Для чего предназначены реквизиты и табличные части документа
  3. Что такое проведение документа
  4. Как создать объект Документ и описать его структуру
  5. Как создать новый документ и заполнить его данными
  6.  Как создать собственную форму документа
  7.  Что такое обработчик события и как его создать
  8. Что такое модуль и для чего он нужен
  9. Зачем нужны общие модули

Список литературы:

  1.         Дадян Э.Г.  Конфигурирование и моделирование в системе «1С: Предприятие»: учебник / Э.Г. Дадян. — М. : Вузовский учебник : ИНФРА-М, 2018. — 417 с.

Лабораторная работа №5.

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

Цель работы: работа с объектом конфигурации регистр накопления.

Оборудование: ПК

Программное обеспечение: Браузер Google Chrome. Онлайн версия 1С: Предприятие 8.2

Теоретические сведения:

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

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

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

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

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

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

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

Ход работы:

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

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

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

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

Затем создайте ресурс Количество с длиной 15 и точностью 3.

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

Откройте окно редактирования объекта Документ ПриходнаяНакладная на закладке Движения. Раскройте список Регистры накопления и выделите ОстаткиМатериалов. Затем нажмите кнопку Конструктор движений.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Запустите 1С: Предприятие в режиме отладки, откройте Приходную накладную №2. В форме документа появилась панель навигации, в которой можно перейти к списку записей регистра Остатки материалов, связанному с документом и обратно к содержимому документа.

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

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

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

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

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

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

ТекСтрокаПереченьНоменклатуры.Номенклатура.

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

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

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

Закройте окно модуля, перейдите на вкладку формы документа ОказаниеУслуги, дважды щелкните на названии формы.

Далее выберите вкладку Командный интерфейс, раскройте группу Панель навигации – Перейти и установите видимость для команды открытия регистра накопления Остатки материалов.

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

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

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

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

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

  1. Для чего предназначен объект конфигурации Регистр накопления
  2. Для чего нужны измерения регистра, ресурсы и реквизиты
  3. Что такое движение регистра и что такое регистратор
  4. Как создать новый регистр накопления и описать его структуру
  5. Как создать движения документа с помощью конструктора движений
  6. Как показать команды открытия списк, а регистра в интерфейсе конфигурации и в интерфейсе формы.

Список литературы:

  1.         Дадян Э.Г.  Конфигурирование и моделирование в системе «1С: Предприятие»: учебник / Э.Г. Дадян. — М. : Вузовский учебник : ИНФРА-М, 2018. — 417 с.

Лабораторная работа №6.

Работа с объектом отчет

Цель работы: работа с объектом отчет, создание отчета.

Оборудование: ПК

Программное обеспечение: Браузер Google Chrome. Онлайн версия 1С: Предприятие 8.2

Теоретические сведения:

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

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

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

Нажмите Готово. Перед Вами откроется конструктор схемы компоновки данных.

Добавьте новый набор данных – запрос. Чтобы создать текст запроса, запустите конструктор запроса с помощью одноименной кнопки.

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

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

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

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

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

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

Просто нажмите ОК.

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

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

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

 Склад

 Материал

 КоличествоНачальныйОстаток

 КоличествоПриход

 КоличествоРасход

 КоличествоКонечныйОстаток

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

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

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

Определим, в каких подсистемах будет отображаться наш отчет. Закройте конструктор схемы компоновки данных и перейдите на вкладку Подсистемы. Отметим Бухгалтерия, УчетМатериалов, ОказаниеУслуг. Теперь ссылка на наш отчет попадет в панель действий указанных разделов. Запустите 1С: Предприятие.

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

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

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

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

  1. Для чего предназначен объект конфигурации Отчет
  2. Как создать отчет с помощью конструктора схемы компоновки данных
  3. Как отобразить отчет в разделах прикладного решения

Список литературы:

  1.         Дадян Э.Г.  Конфигурирование и моделирование в системе «1С: Предприятие»: учебник / Э.Г. Дадян. — М. : Вузовский учебник : ИНФРА-М, 2018. — 417 с.

Лабораторная работа №7.

Макеты. Редактирование макетов и форм

Цель работы: работа с объектом макет, создание макета документа.

Оборудование: ПК

Программное обеспечение: Браузер Google Chrome. Онлайн версия 1С: Предприятие 8.2

Теоретические сведения:

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

Ход работы: Создадим печатную форму документа ОказаниеУслуги. Откройте в конфигураторе окно редактирования объекта Документ ОказаниеУслуги. Перейдите на вкладку Макеты и запустите конструктор печати.

На первом шаге ничего менять не будем, нажмите Далее. На втором шаге перенесите все реквизиты документа из левой части в правую – они будут отображены в шапке печатной формы. Нажмите Далее. Также перенесите все реквизиты в табличную часть. На четвертом шаге ничего не переносите – подвал (нижняя часть формы) использовать не будем, нажмите Далее. Нажмите ОК. Откроется модуль команды Печать, модуль менеджера документа ОказаниеУслуги и макет этого документа.

Таким образом, конструктор создал:

Макет печатной формы документа ОказаниеУслуги с именем Печать

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

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

Запустите 1С: Предприятие в режиме отладки и откройте документ Оказание услуги №1. Нажмите на появившуюся кнопку Печать.

Откроется печатная форма документа. Единственное, чего в ней не хватает – итоговой суммы документа.

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

Вернитесь в конфигуратор. Добавим итоговую сумму в печатную форму.

Раскройте дерево документа ОказаниеУслуги и дважды щелкните на макете Печать (Если закрыли перед этим).

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

Добавим новую область для вывода итоговой суммы документа. Выделите мышью две пустые строки под табличной частью документа и выполните Таблица Имена Назначить имя. Назовите область Всего и нажмите ОК.

Слева появилась новая область Всего. Но ширина области Всего не совпадает с остальными, изменим ее. Выделите две строчки созданной области Всего, потяните мышью в заголовке таблицы за правую границу колонки 2 так, чтобы ее ширина совпала с шириной колонки № в шапке документа. Согласитесь, когда платформа предложит создать новый формат строк. Теперь сделайте такое же изменение ширины для колонок 3,4, 5, 6, чтобы они соответствовали колонкам в шапке.

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

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

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

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

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

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

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

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

Перед Вами часть процедуры печати, выделенные жирным строчки – новые.

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

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

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

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

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

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

 

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

Пока Выборка.Следующий() Цикл

Если ВставлятьРазделительСтраниц Тогда

ТабДок.ВывестиГоризонтальныйРазделительСтраниц();

КонецЕсли;

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

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

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

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

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

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

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

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

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

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

СуммаИтог=СуммаИтог+ВыборкаПереченьНоменклатуры.Сумма;

КонецЦикла;

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

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

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

КонецЦикла;

 

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

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

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

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

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

Затем откройте свойства элемента формы ПереченьНоменклатурыЦена и установите:

Текст подвала – Всего:

Горизонтальное положение Право,

Шрифт подвала – Жирный.

После этого откройте свойства элемента ПереченьНоменклатурыСумма, установите: Горизонтальное положение Право, Шрифт жирный.

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

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

 

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

  1. Для чего предназначен объект Макет?
  2. Что такое конструктор печати?
  3. Как создать макет с помощью конструктора печати?
  4. Как изменить макет документа?
  5. Какая разница в заполнении ячейки табличного документа между текстом, параметром и шаблоном?
  6. Как изменить внешний вид и поведение элемента формы?
  7. Как отобразить сумму по колонке таблицы?

Список литературы:

  1.         Дадян Э.Г.  Конфигурирование и моделирование в системе «1С: Предприятие»: учебник / Э.Г. Дадян. — М.: Вузовский учебник : ИНФРА-М, 2018. — 417 с.

Лабораторная работа №8.

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

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

Оборудование: ПК

Программное обеспечение: Браузер Google Chrome. Онлайн версия 1С: Предприятие 8.2

Теоретические сведения:

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

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

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

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

 В пределах секунды

 В пределах дня

 В пределах месяца

 В пределах квартала

 В пределах года

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

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

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

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

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

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

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

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

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

Создайте также ресурс Цена, тип Число, длина 15, точность 2, неотрицательное.

Запустите 1С: Предприятие. Вы увидите, что в разделах Бухгалтерия, Оказание услуг и Учет материалов появилась команда для открытия списка регистра Цены на номенклатуру. Эта команда доступна по умолчанию, т.к. в отличие от регистров накопления предполагается изменение данных регистра пользователем.

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

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

Заполните регистр ценами всех услуг и материалов, задавая период задним числом, чтобы оно было раньше даты создания документа об оказании услуг (в моем случае дата создания документа – 24.08.2010, поэтому я устанавливаю 01.08.2010).

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

Автоматическая подстановка цены в документ при выборе номенклатуры

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

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

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

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

Поместите в модуль следующий текст:

Функция РозничнаяЦена(АктуальнаяДата, ЭлементНоменклатуры) Экспорт

// Создать вспомогательный объект Отбор

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

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

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

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

КонецФункции

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

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

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

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

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

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

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

СтрокаТабличнойЧасти.Номенклатура);

// Пересчитать сумму строки

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

Должно получиться следующее:

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

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

Теперь откройте документ Оказание услуги №1, где мы израсходовали один такой транзистор. Оставим дату документа без изменения и повторим выбор транзистора в колонке Номенклатура табличной части документа. Автоматически установится значение цены транзистора от 01.08.2010. Это последнее значение цены на дату документа.

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

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

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

  1. Для чего предназначен объект Регистр сведений
  2. Какими особенностями обладает Регистр сведений
  3. В чем главнее отличия регистра сведений от регистра накопления
  4. Что такое периодический регистр сведений и что такое независимый регистр сведений
  5. Как создать периодический регистр сведений
  6. Что такое ведущее измерение регистра

Список литературы:

  1.         Дадян Э.Г.  Конфигурирование и моделирование в системе «1С: Предприятие»: учебник / Э.Г. Дадян. — М. : Вузовский учебник : ИНФРА-М, 2018. — 417 с.

Лабораторная работа №9.

Работа с объектом перечисление

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

Оборудование: ПК

Программное обеспечение: 1С: Предприятие 8.2

Теоретические сведения:

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

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

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

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

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

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

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

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

Запустите 1С: Предприятие в режиме отладки. Зайдите в Учет материалов – Номенклатура. Задайте каждому элементу справочника соответствующее значение реквизита Вид номенклатуры.

Регистрация расхода только номенклатуры Материал

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

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

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

//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

// Данный фрагмент построен конструктором.

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

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

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

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

// регистр ОстаткиМатериалов Расход

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

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

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

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

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

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

КонецЕсли;

КонецЦикла;

//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

КонецПроцедуры

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

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

 Удалите из табличной части строку, содержащую Транзистор philips

 Добавьте услугу – Подключение воды

 Добавьте материал – Шланг резиновый.

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

 

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

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

  1. Для чего предназначен объект Перечисление
  2. Как создать новое перечисление
  3. Как с помощью перечисления задать принадлежность элементов справочника к той или иной смысловой группе

Список литературы:

  1.         Дадян Э.Г.  Конфигурирование и моделирование в системе «1С: Предприятие»: учебник / Э.Г. Дадян. — М. : Вузовский учебник : ИНФРА-М, 2018. — 417 с.

Лабораторная работа №10.

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

Цель работы: познакомится со способами проведения документа по нескольким регистрам.

Оборудование: ПК

Программное обеспечение: Браузер Google Chrome. Онлайн версия 1С: Предприятие 8.2

Теоретические сведения:

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

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

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

Создайте новый объект Регистр накопления с именем СтоимостьМатериалов. Расширенное представление списка задайте как Движения по регистру Стоимость материалов. На закладке Подсистемы отметьте Бухгалтерия, УчетМатериалов и ОказаниеУслуг. На закладке Данные создайте одно измерение – Материал с типом СправочникСсылка.Номенклатура и один ресурс – Стоимость с типом Число, длина 15, точность 2. Получится следующее:

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

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

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

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

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

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

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

Ход работы:

Перейдите на вкладку Прочее и откройте модуль объекта. В самом конце цикла перед строкой КонецЦикла добавим строки кода, создающие движение в регистре СтоимостьМатериалов.

Процедура ОбработкаПроведения(Отказ, Режим)

//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

// Данный фрагмент построен конструктором.

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

// регистр ОстаткиМатериалов Приход

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

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

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

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

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

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

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

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

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

// регистр Стоимость Материалов Приход

Движение = Движения.СтоимостьМатериалов.Добавить();

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

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

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

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

КонецЦикла;

//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

Процедура ОбработкаПроведения(Отказ, Режим)

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

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

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

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

// регистр ОстаткиМатериалов Расход

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

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

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

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

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

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

// регистр СтоимостьМатериалов Расход

Движение = Движения.СтоимостьМатериалов.Добавить();

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

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

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

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

КонецЕсли;

КонецЦикла;

КонецПроцедуры

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

Запустите 1С: Предприятие, откройте документ Оказание услуги № 1 и укажите в нем стоимость резинового шланга – 100. Нажмите Провести и перейдите в регистр Стоимость материалов через панель навигации.

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

Движения созданных документов по регистру Стоимость материалов:

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

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

  1. Как создать движения документа по нескольким регистрам?
  2. Как создать движения документа без использования конструктора движений?
  3. Как добавить в форму документа новый реквизит?

 


Лабораторная работа №11.

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

Цель работы: познакомится с оборотными регистрами накопления.

Оборудование: ПК

Программное обеспечение: Браузер Google Chrome. Онлайн версия 1С: Предприятие 8.2

Теоретические сведения:

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

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

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

 Какие именно услуги оказаны (для рейтинга услуг)

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

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

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

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

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

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

Ход работы

Создайте новый регистр накопления с именем Продажи, вид – Обороты. Расширенное представление списка Движение по регистру Продажи.

На вкладке Подсистемы отметьте Бухгалтерия, УчетМатериалов, ОказаниеУслуг. На вкладке Данные создайте измерения регистра:

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

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

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

Создайте три ресурса:

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

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

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

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

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

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

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

Процедура ОбработкаПроведения(Отказ, Режим)

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

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

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

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

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

// регистр ОстаткиМатериалов Расход

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

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

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

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

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

// регистр СтоимостьМатериалов Расход

Движение = Движения.СтоимостьМатериалов.Добавить();

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

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

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

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

КонецЕсли;

// Регистр Продажи

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

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

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

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

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

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

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

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

КонецЦикла;

КонецПроцедуры

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

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

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

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

  1. Что такое оборотный регистр накопления
  2. В чем отличие между регистром накопления остатков и оборотным регистром накопления
  3. Как выбирать реквизиты и измерения при создании регистров накопления
  4. Как создать оборотный регистр накопления

Список литературы:

  1.         Дадян Э.Г.  Конфигурирование и моделирование в системе «1С: Предприятие»: учебник / Э.Г. Дадян. — М. : Вузовский учебник : ИНФРА-М, 2018. — 417 с.

Лабораторная работа №12.

Работа с объектом отчеты

Цель работы: познакомится с объектом отчеты.

Оборудование: ПК

Программное обеспечение: Браузер Google Chrome. Онлайн версия 1С: Предприятие 8.2

Теоретические сведения:

Система поддерживает два способа доступа к данным, хранящимся в БД:

Объектный (для чтения и записи),

Табличный (для чтения).

Объектный способ реализован через использование объектов встроенного языка.

Важная особенность этого способа – при обращении к объекту встроенного языка, мы обращаемся к совокупности данных в БД как к единому целому.

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

Объектный способ обеспечивает сохранение целостности объектов, их кэширование, вызов соответствующих обработчиков событий и т.д.

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

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

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

Работа с запросами

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

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

Исходные таблицы запрос:

-Реальные таблицы:

1. Объектные (ссылочные)

  1. Необъектные (нессылочные)

-Виртуальные таблицы

Реальные таблицы содержат данные одной реальной таблицы в БД.

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

Объектные (ссылочные) таблицы представляют информацию ссылочных типов данных (справочники, документы, планы видов характеристик и т.д.). А необъектные (нессылочные) – все остальные типы данных (константы, регистры и т.д.).

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

Язык запросов

Текст запроса может состоять из нескольких частей:

 Описание запроса,

 Объединение результатов,

 Упорядочивание результатов

 Автоупорядочивание,

 Описание итогов.

Обязательная часть запроса – первая. Остальные присутствуют по необходимости.

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

Мы не будем писать запросы «руками». Для большинства отчетов с помощью системы компоновки данных, запрос можно создать при помощи конструктора запросов.

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

Ход работы:

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

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

Исходные данные для компоновки отчета содержит в себе схема компоновки данных. Это наборы данных и методы работы с ними.

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

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

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

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

Добавим в Конфигураторе объект конфигурации Отчѐт. Повторим первые шаги по созданию отчета, описанные в работе №6. На закладке Основные зададим имя отчета – РеестрДокументовОказаниеУслуги.

Установите свойство Расширенное представление как Список оказанных услуг для представления отчета в интерфейсе программы.

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

В открывшемся окне нажмите Готово. В конструкторе схемы компоновки создайте Набор данных – запрос.

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

Нажмите кнопку Конструктор запроса. В качестве источника данных для запроса выберите объектную (ссылочную) таблицу документа ОказаниеУслуги. Из этой таблицы выберите следующие поля:

 Склад

 Мастер

 Клиент

 Ссылка

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

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

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

Анализ текста запроса

Нажмите ОК и посмотрите, какой запрос сформировал конструктор:

ВЫБРАТЬ

ОказаниеУслуги.Склад,

ОказаниеУслуги.Мастер,

ОказаниеУслуги.Клиент,

ОказаниеУслуги.Ссылка КАК Документ

ИЗ

Документ.ОказаниеУслуги КАК ОказаниеУслуги

УПОРЯДОЧИТЬ ПО

Документ

Если Вы знакомы с языком SQL, то увидите, что это его аналог на русском.

Описание запроса начинается с обязательного ключевого слова ВЫБРАТЬ. Затем следует список полей выборки. В нем описываются поля, которые должны содержаться в результате запроса. Этот список может содержать как сами поля, так и выражения, вычисляемые на основе значений полей.

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

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

Предложение УПОРЯДОЧИТЬ ПО позволяет сортировать строки в результате запроса. После этого оператора располагается выражение упорядочивания, которое представляет собой перечисление полей (выражений) и порядка вывода. Настройки

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

Иерархическая структура отчета может содержать в различных сочетания три основных элемента:

Группировка – для вывода информации в виде обычного линейного отчета.

Таблица – для вывода информации в виде таблицы.

Диаграмма – для вывода информации в виде диаграммы.

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

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

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

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

 Документ

 Склад

 Мастер

 Клиент

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

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

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

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

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

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

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

Нажмите кнопку Сформировать.

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

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

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

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

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

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

Левое соединение двух таблиц

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

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

 

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

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

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

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

Условие отбора записей

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

спрНоменклатура.ЭтоГруппа = ЛОЖЬ

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

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

Псевдонимы полей

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

Порядок записей

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

Создание запроса закончено, нажмите ОК и вернитесь в конструктор схемы компоновки данных.

Анализ текста запроса

Текст запроса, сформированный платформой, примет вид:

ВЫБРАТЬ

спрНоменклатура.Ссылка КАК Услуга,

ПродажиОбороты.ВыручкаОборот КАК Выручка

ИЗ

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

ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты

ПО ПродажиОбороты.Номенклатура = спрНоменклатура.Ссылка

ГДЕ

спрНоменклатура.ЭтоГруппа = ЛОЖЬ

И спрНоменклатура.ВидНоменклатуры = &ВидНоменклатуры

УПОРЯДОЧИТЬ ПО

Выручка УБЫВ

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

При описании источников запроса (после ИЗ) использована возможность определения нескольких источников запроса. В данном случае выбираются записи из двух источников: спрНоменклатура и ПродажиОбороты, причем ключевым предложением ЛЕВОЕ СОЕДИНЕНИЕ…ПО описан способ, которым будут соединены записи этих двух источников.

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

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

ГДЕ

спрНоменклатура.ЭтоГруппа = ЛОЖЬ

И спрНоменклатура.ВидНоменклатуры = &ВидНоменклатуры

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

Ресурсы

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

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

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

Параметры

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

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

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

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

Изменим существующее описание типа для параметра НачалоПериода.

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

Во-вторых, по умолчанию время в дате установлено 00:00:00, поэтому если пользователь задаст период отчета с 01.07.2011 по 14.07.2011, итоги регистра будут рассчитаны с начала дня 01.07 00:00:00 по начало дня 14.07 00:00:00. Т.о. данные за 14-е число, отличные от начала дня, в расчет не войдут, что сильно удивит пользователя.

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

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

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

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

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

В ячейке Выражение напишите следующее выражение: КонецПериода(&ДатаОкончания,"день")

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

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

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

Настройки

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

На закладке Выбранные поля укажите поля Услуга и Выручка.

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

Быстрые пользовательские настройки

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

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

Установите флажок Включать в пользовательские настройки и оставьте предложенное по умолчанию значение Быстрый доступ.

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

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

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

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

Запустите 1С: Предприятие в режиме отладки, вкладка Оказание услуг. Нажмите на Рейтинг услуг, Сформировать.

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

Настройки в конфигураторе и в режиме 1С: Предприятие

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

Условное оформление

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

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

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

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

Затем укажем Условие, при наступлении которого будет применяться оформление (красный текст).

Нажмите кнопку выбора в поле Условие и в появившемся окне добавьте Новый элемент отбора. Каждый элемент задает одно условие. Условий может быть несколько. Нажмите кнопку Добавить и укажите в графе Левое значение – поле Выручка, в графе Вид сравнения Меньше, в Правое значение 700. Нажмите ОК.

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

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

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

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

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

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

Перейдите в режим отладки. Вызовите отчет. Задайте Дату окончания как Начало этого дня и нажмите Сформировать.

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

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

Выделение цветом исчезнет.

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

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

Вернитесь в конфигуратор.

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

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

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

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

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

Откройте отчет в режиме 1С: Предприятие и нажмите кнопку Настройка. Появились настройки Отбор и Условное форматирование.

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

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

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

Нажмите Завершить редактирование и сформируйте отчет.

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

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

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

Вернитесь в Конфигуратор и снимите галочку использования у настройки отбора – это нам понадобится в дальнейшем.

 

Вывод данных по всем дням в выбранном порядке

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

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

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

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

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

 

После этого выберите из таблицы поля:

 ПродажиОбороты.Мастер

 ПродажиОбороты.Период

 ПродажиОбороты.Клиент

 ПродажиОбороты.ВыручкаОборот

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

Анализ текста запроса

Нажмите ОК и проанализируйте текст запроса, сформированный конструктором.

ВЫБРАТЬ

ПродажиОбороты.Мастер,

ПродажиОбороты.Период,

ПродажиОбороты.Клиент,

ПродажиОбороты.ВыручкаОборот КАК Выручка

ИЗ

РегистрНакопления.Продажи.Обороты(, , День, ) КАК

 

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

Ресурсы

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

Параметры

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

Добавьте еще один параметр – ДатаОкончания, тип Дата, состав даты - Дата.

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

КонецПериода(&ДатаОкончания,"День")

Настройки

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

 Верхнего уровня – по полю Мастер

 Вложенная в нее – по полю Период

Затем добавьте в группировку Мастер вложенную группировку по полю Период. Для этого выделите группировку Мастер и нажмите Добавить.

Затем добавим

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

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

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

Перейдите на закладку Другие настройки и измените следующие параметры:

1. Расположение полей группировок Отдельно и только в итогах.

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

2. Расположение общих итогов по вертикали Начало.

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

3. Заголовок Выручка мастеров.

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

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

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

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

Вывод всех дат в выбранном периоде

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

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

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

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

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

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

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

Нажмите ОК. Теперь нажмите кнопку выбора и отметьте параметр НачалоПериода. Нажмите ОК.

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

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

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

Новый вариант отчета

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

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

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

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

Чтобы добавить новый вариант, нажмите кнопку Добавить над этим списком. Задайте имя варианта – ОбъемВыручки.

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

Добавим в структуру отчета диаграмму с помощью контекстного меню элемента Отчет. Затем выделите ветку Точки и добавьте в нее группировку по полю Мастер. Серии оставим без изменений.

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

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

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

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

Запустите отладку и выполните Выручка мастеров в панели действий Расчет зарплаты. Нажмите кнопку Выбрать вариант, выделите Объем выручки и нажмите кнопку Выбрать.

Задайте отчетный период и сформируйте отчет.

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

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

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

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

Ход работы:

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

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

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

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

Параметры виртуальной таблицы

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

 СпрНоменклатура.Родитель

 СпрНоменклатура.Ссылка

 ЦеныСрезПоследних.Цена

Левое соединение таблиц

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

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

Псевдонимы полей

На закладке Объединения/Псевдонимы укажите, что поле Родитель будет иметь псевдоним ГруппаУслуг, а поле Ссылка Услуга. Нажмите ОК.

Анализ текста запроса

Рассмотрим текст запроса, сформированного конструктором.

ВЫБРАТЬ

СпрНоменклатура.Родитель КАК ГруппаУслуг,

СпрНоменклатура.Ссылка КАК Услуга,

ЦеныСрезПоследних.Цена

ИЗ

Справочник.Номенклатура КАК СпрНоменклатура

ЛЕВОЕ СОЕДИНЕНИЕ Регистр Сведений. Цены. СрезПоследних (&ДатаОтчета,) КАК ЦеныСрезПоследних

ПО Цены СрезПоследних. Номенклатура = СпрНоменклатура. Ссылка

ГДЕ

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

Перейдем к редактированию схемы компоновки данных. На закладке Ресурсы выберем единственный доступный ресурс – Цена.

Параметры

На закладке Параметры задайте значения параметра ВидНоменклатуры как Перечисление.ВидыНоменклатуры.Услуга. Снимите ограничение доступности для параметра ДатаОтчета. В поле Тип этого параметра задайте состав даты – Дата.

Для параметра Период, наоборот, установите ограничение доступности.

Настройки

Перейдите на закладку Настройки и создайте группировку по полю ГруппаУслуг с типом группировки Иерархия.

Существуют следующие типы иерархии для группировки отчета:

 Без иерархии – в группировке выводятся только неиерархические записи.

 Иерархия – выводятся неиерархические и иерархические записи.

 Только иерархия – выводятся только иерархические (родительские) записи.

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

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

Теперь перейдем на закладку Другие настройки и определим внешний вид отчета.

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

Затем перейдите к настройкам конкретной группировки – ГруппаУслуг. Для параметра РасположениеИтогов этой группировки укажите Нет.

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

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

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

Запустите отладку и откройте периодический регистр Цены на номенклатуру. Добавьте в него еще одно значение для услуги Диагностика: новая цена услуги на текущее число – 350. Это позволит нам протестировать отчет.

 

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

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

Как видите, показана новая цена услуги Диагностика – 350 р.

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

Использование вычисляемого поля в отчете

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

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

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

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

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

 ПродажиОбороты.Клиент

 ПродажиОбороты.ВыручкаОборот

 ПродажиОбороты.СтоимостьОборот

На закладке Объединения/Псевдонимы укажите, что поле ВыручкаОборот будет иметь псевдоним Выручка, а поле СтоимостьОборот Стоимость. Нажмите ОК.

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

Вычисляемые поля

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

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

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

Задайте имя в колонке Путь к данным Доход. В колонку Выражение введите следующее выражение:

Выручка – Стоимость

Ресурсы

На закладке Ресурсы выберите все доступные ресурсы отчета.

Настройки

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

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

На закладке Другие настройки выберете тип диаграммы – Круговая объемная и задайте заголовок отчета – Рейтинг клиентов. Отметьте в списке подсистем Оказание услуг и Бухгалтерия.

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

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

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

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

Вывод данных в таблицу

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

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

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

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

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

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

Анализ текста запроса

ВЫБРАТЬ

ПродажиОбороты.Номенклатура,

ПродажиОбороты.Клиент,

ПродажиОбороты.Мастер,

ПродажиОбороты.КоличествоОборот,

ПродажиОбороты.ВыручкаОборот,

ПродажиОбороты.СтоимостьОборот

ИЗ

РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты

Ресурсы

На закладке Ресурсы выберете все доступные ресурсы отчета.

Настройки

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

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

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

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

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

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

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

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

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

Теперь добавим в список выбранных полей СтоимостьОборот. И в строки таблицы вместо группировки по полю Номенклатура поместите группировку по полю Клиент.

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

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

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

 

1. Для чего предназначена система компоновки данных.

  1. Для чего предназначены настройки компоновки данных.
  2. В чем отличие между реальными и виртуальными таблицами.
  3. Что является источником данных запроса.
  4. Что такое псевдонимы в языке запросов.
  5. Что такое параметры запроса.
  6. Что такое параметры виртуальной таблицы.
  7. Что такое левое соединение.
  8. Как использовать конструктор запроса.
  9. Как выбрать данные в некотором периоде для отчета.
  10. Как упорядочить данные в отчете.
  11. Как использовать в отчете данные нескольких таблиц.
  12. Как использовать группировки в структуре отчета.
  13. Как получить последние значения регистра сведений.
  14. Как вывести в отчет иерархические данные.
  15. Как управлять выводом итогов по группировкам и общих итогов.
  16. Как создать отчет с диаграммой.
  17. Как использовать параметры в системе компоновки данных.
  18. Что такое ресурсы в системе компоновки данных.
  19. Что такое вычисляемые поля в системе компоновки данных.
  20. Как создать пользовательские настройки отчета
  21. В чем отличие быстрых настроек от остальных пользовательских.
  22. Как определить состав пользовательских настроек отчета.
  23. Как вывести данные в виде таблицы.
  24. Как сделать отчет универсальным.

Список литературы:

  1. Дадян Э.Г.  Конфигурирование и моделирование в системе «1С: Предприятие»: учебник / Э.Г. Дадян. — М. : Вузовский учебник : ИНФРА-М, 2018. — 417 с.


Лабораторная работа №13.

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

Цель работы: познакомиться со способами оптимизации проведения документа «Оказание услуги».

Оборудование: ПК

Программное обеспечение: Браузер Google Chrome. Онлайн версия 1С: Предприятие 8.2

Теоретические сведения:

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

Зачем это нужно? Этому есть три причины.

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

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

В-третьих, при проведении документа необходимо контролировать остатки расходуемых товаров на складе. Если товаров не хватает – выдавать предупреждение и не проводить документ.

Поэтому в нашей работе три цели:

1. Повышение скорости выполнения процедуры;

2. Автоматическое определение стоимости расходуемых материалов при проведении документа;

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

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

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

Механизм запросов лучше «читает» информационную базу и может за один раз выбрать только нужные данные. Поэтому в типовых решениях вы не увидите использование объекта встроенного языка СправочникВыборка. <имя>. Вместо этого используются запросы к БД.

Повышение скорости проведения

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

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

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

Обращение к объекту Номенклатура:

Если ТекСтрокаПереченьНоменклатуры.Номенклатура.ВидНоменклатуры

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

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

Запросом мы будем получать:

 Номенклатуру

 Количество

 Сумму

 Стоимость

Из документа возьмем:

 Дата

Клиент

 Мастер

 Склад

Установите курсор перед циклом Если… и из контекстного меню выберите Конструктор запроса с обработкой результата. Подтвердите создание нового запроса.

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

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

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

Для этого перетащите поле Ссылка в список условий запроса:

В обработчике появится условие:

ОказаниеУслугиПереченьНоменклатуры.Ссылка=&Ссылка

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

На закладке Объединения/Псевдонимы задайте псевдонимы для полей Количество и Сумма КоличествоВДокументе и СуммаВДокументе, а для поля НоменклатураВидНоменклатуры - ВидНоменклатуры.

Нажмите ОК и посмотрите какой текст запроса сформирован.

//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

// Данный фрагмент построен конструктором.

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

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

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

"ВЫБРАТЬ

| ОказаниеУслугиПереченьНоменклатуры.Номенклатура,

| ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры КАК ВидНоменклатуры,

| СУММА(ОказаниеУслугиПереченьНоменклатуры.Количество) КАК КоличествоВДокументе,

| МАКСИМУМ(ОказаниеУслугиПереченьНоменклатуры.Сумма) КАК СуммаВДокументе,

| СУММА(ОказаниеУслугиПереченьНоменклатуры.Стоимость) КАК Стоимость

|ИЗ

| Документ.ОказаниеУслуги.ПереченьНоменклатуры КАК ОказаниеУслугиПереченьНоменклатуры

|ГДЕ

| ОказаниеУслугиПереченьНоменклатуры.Ссылка = &Ссылка

|

|СГРУППИРОВАТЬ ПО

| ОказаниеУслугиПереченьНоменклатуры.Номенклатура,

| ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры";

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

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

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

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

// Вставить обработку выборки ВыборкаДетальныеЗаписи

КонецЦикла;

//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

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

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

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

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

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

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

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

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

// Вставить обработку выборки ВыборкаДетальныеЗаписи

КонецЦикла;

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

Сначала вместо комментария «// Вставить обработку выборки ВыборкаДетальныеЗаписи» перенесите условие проверки и весь код, формирующий движения по регистрам ОстаткиМатериалов и СтоимостьМатериалов.

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

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

// регистр ОстаткиМатериалов Расход

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

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

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

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

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

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

// регистр СтоимостьМатериалов Расход

Движение = Движения.СтоимостьМатериалов.Добавить();

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

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

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

КонецЕсли;

КонецЦикла;

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

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

Если ВыборкаДетальныеЗаписи.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Материал Тогда

// регистр ОстаткиМатериалов Расход

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

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

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

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

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

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

// регистр СтоимостьМатериалов Расход

Движение = Движения.СтоимостьМатериалов.Добавить();

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

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

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

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

КонецЕсли;

КонецЦикла;

Теперь перенесем формирование движений по регистру Продажи:

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

Если ВыборкаДетальныеЗаписи.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Материал Тогда

// регистр ОстаткиМатериалов Расход

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

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

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

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

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

// регистр СтоимостьМатериалов Расход

Движение = Движения.СтоимостьМатериалов.Добавить();

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

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

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

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

КонецЕсли;

// Регистр Продажи

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

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

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

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

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

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

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

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

КонецЦикла;

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

А также поля Сумма и Количество заменим на их псевдонимы СуммаВДокументе и КоличествоВДокументе.

// Регистр Продажи

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

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

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

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

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

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

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

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

КонецЦикла;

Оставшийся цикл обхода табличной части можно удалить:

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

КонецЦикла; Процедура проведения примет следующий вид:

Процедура ОбработкаПроведения(Отказ, Режим)

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

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

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

//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

// Данный фрагмент построен конструктором.

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

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

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

"ВЫБРАТЬ

| ОказаниеУслугиПереченьНоменклатуры.Номенклатура,

| ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры КАК ВидНоменклатуры,

| СУММА(ОказаниеУслугиПереченьНоменклатуры.Количество) КАК КоличествоВДокументе,

| СУММА(ОказаниеУслугиПереченьНоменклатуры.Сумма) КАК СуммаВДокументе,

| МАКСИМУМ(ОказаниеУслугиПереченьНоменклатуры.Стоимость) КАК Стоимость

|ИЗ

| Документ.ОказаниеУслуги.ПереченьНоменклатуры КАК ОказаниеУслугиПереченьНоменклатуры

|ГДЕ

| ОказаниеУслугиПереченьНоменклатуры.Ссылка = &Ссылка

|

|СГРУППИРОВАТЬ ПО

| ОказаниеУслугиПереченьНоменклатуры.Номенклатура,

| ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры";

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

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

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

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

Если ВыборкаДетальныеЗаписи.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Материал Тогда

// регистр ОстаткиМатериалов Расход

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

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

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

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

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

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

// регистр СтоимостьМатериалов Расход

Движение = Движения.СтоимостьМатериалов.Добавить();

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

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

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

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

КонецЕсли;

// Регистр Продажи

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

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

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

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

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

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

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

КонецЦикла;

КонецПроцедуры

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

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

Автоматический расчет стоимости

Приступим ко второму этапу плана. До сих пор стоимость расходуемых материалов мы вписывали в документ Оказание услуги вручную, при его создании.

Теперь же будем определять стоимость номенклатуры «по среднему»: для каждой номенклатуры делить ее общую, суммарную стоимость на имеющееся у нас количество номенклатуры, т.о. получая среднюю стоимость единицы номенклатуры.

Чтобы выполнить такой расчет, понадобятся дополнительные данные, которых сейчас нет. Для каждой номенклатуры из табличной части нам понадобятся:

 Ее стоимость, хранящаяся в регистре СтоимостьМатериалов;

 Общее ее количество на всех складах, хранящееся в регистре ОстаткиМатериалов.

Поэтому нам нужно будет доработать запрос, чтобы он получал из БД и эти данные тоже. Т.о. нам хотелось бы, чтобы запрос возвращал следующие поля для каждой номенклатуры, которая есть в документе:

Табличная часть документа

Регистр Стоимость материалов

Регистр Остатки материалов

Номенклатура

Кол-во в документе

Сумма в документе

Вид номенклатуры

Стоимость

Кол-во на всех складах

Первые четыре поля мы уже получаем из табличной части самого документа, а последние два нужно будет получить из других таблиц.

Это значит, что наш запрос должен содержать два левых соединения таблицы документа с другими таблицами: одно – с таблицей РегистрНакопления.СтоимостьМатериалов.Остатки; другое – с таблицей РегистрНакопления.ОстаткиМатериалов.Остатки.

Важная деталь: в предложенной схеме виртуальные таблицы будут возвращать стоимость и остатки абсолютно для всей номенклатуры, когда нас интересует только та, которая указана в нашем документе.

Для маленькой базы это не важно, но для реальной БД, где 15 000 наименований и только 5 используются в документе – это непозволительная расточительность вычислительных ресурсов.

Поэтому во все виртуальные таблицы, которые мы будем использовать, нужно добавить условие отбора только номенклатуры из табличной части нашего документа. В этом случае стоимость и остатки будут рассчитаны не для всей номенклатуры вообще, а только для нужной нам.

Чтобы не получать список номенклатуры три раза (для документа и в каждой виртуальной таблице заново), мы можем сформировать его заранее и затем уже использовать в нужных нам условиях запроса.

Выполнить эту задачу нам помогут временные таблицы – программные объекты, которые разработчик может создать и заполнить данными, а запросы могут использовать данные временных таблиц для своих нужд.

Таким образом, схема нашего запроса приобретает следующий вид:

В режиме Конфигуратор

Первое – мы удалим реквизит табличной части Стоимость документа ОказаниеУслуги, который нам больше не понадобится. Для этого откройте окно редактирования объекта Документа ОказаниеУслуги, перейдите на закладку Данные, раскройте список реквизитов табличной части документа, выделите реквизит Стоимость и нажмите кнопку Удалить в командной панели. Хотя проще это сделать из окна конфигурации.

Также удалите поле Стоимость из таблицы ПереченьНоменклатуры, расположенной в форме.

Временную таблицу мы сформируем с помощью того запроса, который у нас уже написан. Откройте модуль документа ОказаниеУслуги.

В процедуре ОбработкаПроведения() перед созданием запроса создайте менеджер временных таблиц и укажите, что этот запрос будет использовать созданный менеджер:

Процедура ОбработкаПроведения(Отказ, Режим)

Движения.ОстаткиМатериалов.Записывать = Истина;

Движения.СтоимостьМатериалов.Записывать = Истина;

Движения.Продажи.Записывать = Истина;

//Создать менеджер временных таблиц.

МенеджерВТ = Новый МенеджерВременныхТаблиц;

Запрос = Новый Запрос;

//Укажем, какой менеджер временных таблиц использует этот запрос

Запрос.МенеджерВременныхТаблиц = МенеджерВТ;

Запрос.Текст =

"ВЫБРАТЬ

| ОказаниеУслугиПереченьНоменклатуры.Номенклатура,

Теперь изменим запрос, чтобы он создавал временную таблицу, которая будет храниться в нашем менеджере временных таблиц МенеджерВТ.

Чтобы конструктор запроса смог открыть наш запрос, удалите из него строку (поля Стоимость у нас больше нет) и запятую в строке выше этой:

МАКСИМУМ(ОказаниеУслугиПереченьНоменклатуры.Стоимость) КАК Стоимость

Получится следующее:

Запрос.Текст =

"ВЫБРАТЬ

| ОказаниеУслугиПереченьНоменклатуры.Номенклатура,

| ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры КАК ВидНоменклатуры,

| СУММА(ОказаниеУслугиПереченьНоменклатуры.Количество) КАК КоличествоВДокументе,

| СУММА(ОказаниеУслугиПереченьНоменклатуры.Сумма) КАК СуммаВДокументе

|

|ИЗ

Установите курсор внутрь текста запроса (например, на слове ВЫБРАТЬ) и выполните команду контекстного меню Конструктор запроса.

Чтобы результат запроса поместить во временную таблицу, перейдите на закладку Дополнительно и отметьте пункт Создание временной таблицы. Задайте ей имя – НоменклатураДокумента. Нажмите ОК.

Конструктор сформировал текст запроса с одной новой строкой:

"ВЫБРАТЬ

| ОказаниеУслугиПереченьНоменклатуры.Номенклатура,

| ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры КАК ВидНоменклатуры,

| СУММА(ОказаниеУслугиПереченьНоменклатуры.Количество) КАК КоличествоВДокументе,

| СУММА(ОказаниеУслугиПереченьНоменклатуры.Сумма) КАК СуммаВДокументе

|ПОМЕСТИТЬ НоменклатураДокумента

|ИЗ

| Документ.ОказаниеУслуги.ПереченьНоменклатуры КАК ОказаниеУслугиПереченьНоменклатуры

|ГДЕ

| ОказаниеУслугиПереченьНоменклатуры.Ссылка = &Ссылка

|

|СГРУППИРОВАТЬ ПО

| ОказаниеУслугиПереченьНоменклатуры.Номенклатура,

| ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры";

Это означает, что результат запроса будет сохранен во временной таблице НоменклатураДокумента. Это был Запрос 1 на нашей схеме.

Теперь если мы для другого запроса укажем этот же самый менеджер временных таблиц МенеджерВТ, то в другом запросе мы сможем обратиться к данным этой временной таблицы.

Займемся вторым запросом.

Установите курсор на следующую строку после оператора Результат = Запрос.Выполнить(); (именно здесь выполняется создание временной таблицы) и напишите заготовку будущего запроса:

Запрос2 = Новый Запрос;

Запрос2.МенеджерВременныхТаблиц = МенеджерВТ;

Запрос2.Текст = "";

Мы создали новый объект Запрос и назначили ему тот же самый менеджер временных таблиц, чтобы иметь возможность обращаться к созданной нами ранее временной таблице.

Установите курсор внутрь кавычек и выполните контекстную команду Конструктор запроса. Согласитесь на создание нового запроса.

Создадим описание временной таблицы в этом запросе. Для этого над списком Таблицы нажмите Создать описание временной таблицы.

Введите имя нашей временной таблицы НоменклатураДокумента и добавьте поля:

 Номенклатура, тип СправочникСсылка.Номенклатура;

 ВидНоменклатуры, тип ПеречислениеСсылка.ВидыНоменклатуры;

 КоличествоВДокументе, тип Число, 15, 3;

 СуммаВДокументе, тип Число, 15, 2.

Нажмите ОК.

Выберите из НоменклатураДокумента все поля и нажмите кнопку Запрос.

ВЫБРАТЬ

НоменклатураДокумента.Номенклатура,

НоменклатураДокумента.ВидНоменклатуры,

НоменклатураДокумента.КоличествоВДокументе,

НоменклатураДокумента.СуммаВДокументе

ИЗ

НоменклатураДокумента КАК НоменклатураДокумента

Итак, мы создали первую часть второго запроса – выбрали информацию из временной таблицы. Теперь будем соединять эту конструкцию левыми соединениями с таблицами остатков.

Добавим в список таблиц запроса виртуальную таблицу РегистрНакопления.СтоимостьМатериалов.Остатки. Из нее выберем поле СтоимостьОстаток. Перейдем на закладку Связи и зададим связь между таблицами.

Из временной таблицы будем выбирать все записи, и поле Номенклатура временной таблицы должно быть равно полю Материал таблицы остатков.

Ограничим виртуальную таблицу только нужной номенклатурой. Для этого вернемся на вкладку таблицы и поля, выделите в списке таблицу СтоимостьМатериаловОстатки и нажмите кнопку Параметры виртуальной таблицы.

 

Задайте условие:

Материал В (ВЫБРАТЬ НоменклатураДокумента.Номенклатура ИЗ НоменклатураДокумента)

Т.е. материал должен быть среди номенклатуры, выбранной из временной таблицы. Нажмите ОК.

Теперь нажмите кнопку Запрос и посмотрите на текст, сформированный конструктором.

ВЫБРАТЬ

НоменклатураДокумента.Номенклатура,

НоменклатураДокумента.ВидНоменклатуры,

НоменклатураДокумента.КоличествоВДокументе,

НоменклатураДокумента.СуммаВДокументе,

СтоимостьМатериаловОстатки.СтоимостьОстаток

ИЗ

НоменклатураДокумента КАК НоменклатураДокумента

ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьМатериалов.Остатки(

,

Материал В

(ВЫБРАТЬ

НоменклатураДокумента.Номенклатура

ИЗ

НоменклатураДокумента)) КАК СтоимостьМатериаловОстатки

ПО НоменклатураДокумента.Номенклатура = СтоимостьМатериаловОстатки.Материал

Тем самым мы добавили к выбранным ранее полям стоимость номенклатуры.

Теперь добавим виртуальную таблицу остатков регистра ОстаткиМатериалов.Остатки, из которой выберем поле Количество.Остаток.

Перейдите на закладку Связи и задайте связь между таблицами.

Из временной таблицы будем выбирать все записи, поле Номенклатура временной таблицы должно быть равно полю Материал таблицы остатков.

Также зададим параметры виртуальной таблицы ОстаткиМатериаловОстатки. В параметр Условие введите:

Материал В (ВЫБРАТЬ НоменклатураДокумента.Номенклатура ИЗ НоменклатураДокумента)

Тем самым мы добавили к выбранным ранее полям остатки номенклатуры на всех складах.

В заключение перейдем на закладку Объединения/Псевдонимы и зададим следующие псевдонимы полей:

СтоимостьОстаток Стоимость;

КоличествоОстаток Количество.

В результате получим следующий текст запроса:

ВЫБРАТЬ

НоменклатураДокумента.Номенклатура,

НоменклатураДокумента.ВидНоменклатуры,

НоменклатураДокумента.КоличествоВДокументе,

НоменклатураДокумента.СуммаВДокументе,

СтоимостьМатериаловОстатки.СтоимостьОстаток КАК Стоимость,

ОстаткиМатериаловОстатки.КоличествоОстаток КАК Количество

ИЗ

НоменклатураДокумента КАК НоменклатураДокумента

ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьМатериалов.Остатки(

,

Материал В

(ВЫБРАТЬ

НоменклатураДокумента.Номенклатура

ИЗ

НоменклатураДокумента)) КАК СтоимостьМатериаловОстатки

ПО НоменклатураДокумента.Номенклатура = СтоимостьМатериаловОстатки.Материал

ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.Остатки(

,

Материал В

(ВЫБРАТЬ

НоменклатураДокумента.Номенклатура

ИЗ

НоменклатураДокумента)) КАК ОстаткиМатериаловОстатки

ПО НоменклатураДокумента.Номенклатура = ОстаткиМатериаловОстатки.Материал

Нужно предусмотреть тот случай, когда номенклатура в справочнике есть, но у нее нет ни остатков, ни стоимости. Это может быть, например, когда номенклатуру создали в справочнике, но она еще не поступала в нашу фирму.

В такой ситуации левые соединения с виртуальными таблицами не вернут ничего. На языке запросов это значит, что в полях Стоимость и Количество будут значения NULL.

Избавимся в самом запросе от этих значений. Для этого мы применим функцию ЕСТЬNULL() к полям Стоимость и Количество. Если значение этого поля будет NULL, функция вернет 0. В остальных случаях функция вернет само значение этого поля.

Перейдите на закладку Таблицы и поля, выделите СтоимостьМатериаловОстатки.СтоимостьОстаток и нажмите кнопку Изменить текущий элемент.

Отредактируем значение поля:

ЕСТЬNULL(СтоимостьМатериаловОстатки.СтоимостьОстаток,0)

Аналогично с другим полем –

ОстаткиМатериаловОстатки.КоличествоОстаток.

ЕСТЬNULL(ОстаткиМатериаловОстатки.КоличествоОстаток,0)

Нажмите ОК – текст запроса будет вставлен в модуль. Останется всего лишь дописать после него оператор выполнения запроса:

Запрос2 = Новый Запрос;

Запрос2.МенеджерВременныхТаблиц = МенеджерВТ;

Запрос2.Текст = "ВЫБРАТЬ

| НоменклатураДокумента.Номенклатура,

| НоменклатураДокумента.ВидНоменклатуры,

| НоменклатураДокумента.КоличествоВДокументе,

| НоменклатураДокумента.СуммаВДокументе,

| ЕСТЬNULL(СтоимостьМатериаловОстатки.СтоимостьОстаток, 0) КАК Стоимость,

| ЕСТЬNULL(ОстаткиМатериаловОстатки.КоличествоОстаток, 0) КАК Количество

|ИЗ

| НоменклатураДокумента КАК НоменклатураДокумента

| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьМатериалов.Остатки(

| ,

| Материал В

| (ВЫБРАТЬ

| НоменклатураДокумента.Номенклатура

| ИЗ

| НоменклатураДокумента)) КАК СтоимостьМатериаловОстатки

| ПО НоменклатураДокумента.Номенклатура = СтоимостьМатериаловОстатки.Материал

| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.Остатки(

| ,

| Материал В

| (ВЫБРАТЬ

| НоменклатураДокумента.Номенклатура

| ИЗ

| НоменклатураДокумента)) КАК ОстаткиМатериаловОстатки

| ПО НоменклатураДокумента.Номенклатура = ОстаткиМатериаловОстатки.Материал";

Результат = Запрос2.Выполнить();

ВыборкаДетальныеЗаписи = Результат.Выбрать();

Теперь разберемся с записью движений. Все операторы, которые были написаны нами ранее, будут работать без изменений.

Единственное, что потребуется изменить – способ получения стоимости. Раньше мы просто брали ее из документа, теперь же нам нужно ее рассчитать на основании данных запроса. Стоимость материала равна частному от деления всей стоимости, полученной запросом (Стоимость) на общее количество материала на всех складах (Количество).

Но, как сказано ранее, Количество может быть равно 0, а на ноль делить нельзя. Поэтому сразу после начала цикла обхода результата запроса рассчитаем стоимость для текущей номенклатуры.

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

Если ВыборкаДетальныеЗаписи.Количество = 0 Тогда

СтоимостьМатериала = 0;

Иначе

СтоимостьМатериала = ВыборкаДетальныеЗаписи.Стоимость/ВыборкаДетальныеЗаписи.Количество;

КонецЕсли;

Если ВыборкаДетальныеЗаписи.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Материал Тогда

Теперь заменим расчет стоимости в движениях регистров СтоимостьМатериалов и Продажи.

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

Если ВыборкаДетальныеЗаписи.Количество = 0 Тогда

СтоимостьМатериала = 0;

Иначе

СтоимостьМатериала = ВыборкаДетальныеЗаписи.Стоимость/ВыборкаДетальныеЗаписи.Количество;

КонецЕсли;

Если ВыборкаДетальныеЗаписи.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Материал Тогда

// регистр ОстаткиМатериалов Расход

Движение = Движения.ОстаткиМатериалов.Добавить();

Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

Движение.Период = Дата;

Движение.Материал = ВыборкаДетальныеЗаписи.Номенклатура;

Движение.Склад = Склад;

Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоВДокументе;

// регистр СтоимостьМатериалов Расход

Движение = Движения.СтоимостьМатериалов.Добавить();

Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

Движение.Период = Дата;

Движение.Материал = ВыборкаДетальныеЗаписи.Номенклатура;

Движение.Стоимость = ВыборкаДетальныеЗаписи.КоличествоВДокументе*СтоимостьМатериала;

КонецЕсли;

// Регистр Продажи

Движение = Движения.Продажи.Добавить();

Движение.Период = Дата;

Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;

Движение.Клиент = Клиент;

Движение.Мастер = Мастер;

Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоВДокументе;

Движение.Выручка = ВыборкаДетальныеЗаписи.СуммаВДокументе;

Движение.Стоимость = СтоимостьМатериала * ВыборкаДетальныеЗаписи.КоличествоВДокументе;

КонецЦикла;

Теперь, если проводить этот документ в первый раз, результат получится правильный. Но, если документ был проведен ранее и мы заново решим его провести, получим неправильный результат. Дело в том, что когда мы находимся в обработчике проведения и этот документ был проведен ранее, то в БД существуют движения этого документа. Таким образом, читая из базы стоимость и остатки материалов, мы прочитаем их с учетом движений документа. А это неправильно.

Чтобы в обработчике проведения документа прочитать данные без учета предыдущих движений, которые мог выполнять документ, нужно перед чтением записать пустые наборы записей в те регистры, из которых мы собираемся читать. В нашем случае это СтоимостьМатериалов и ОстаткиМатериалов.

Перед выполнением второго запроса добавим строки:

| ПО НоменклатураДокумента.Номенклатура = ОстаткиМатериаловОстатки.Материал";

//Запишем пустые наборы записей, чтобы читать остатки без учета данных в документе.

Движения.СтоимостьМатериалов.Записать();

Движения.ОстаткиМатериалов.Записать();

Результат = Запрос2.Выполнить();

Запустите режим отладки и перепроведите все документы Оказание услуги, проверьте правильность занесения данных в регистры.

Оперативное и неоперативное проведение документов

Оперативное проведение документов пользователями выполняется в режиме реального времени, т.е. отображает изменения, факты, свершающиеся в настоящее время. Оперативное проведение особенно актуально при многопользовательской работе. Поэтому при этом способе проведения следует осуществлять максимум проверок, способных исключить ошибки при вводе данных пользователями.

Например, при оперативном проведении следует выполнять контроль остатков на складе списываемой номенклатуры, чтобы исключить одновременную продажу одного товара несколькими продавцами.

Оперативность или неоперативность проведения документа определяется по его дате. Если дата проводимого документа совпадает с текущей, то система будет проводить такой документ в оперативном режиме, не задавая вопросов, и в обработке проведения об этом можно узнать, чтобы выстроить определенный алгоритм проведения. Если дата документа меньше текущей, то такой документ система будет проводить в неоперативном режиме. При этом перед проведением она напомнит, что оперативно она его провести не может (вдруг пользователь ошибся). И если пользователь подтвердит, что хочет провести его неоперативно, то система проведет документ неоперативно.

Неоперативное проведение подразумевает отражение в базе данных фактов, которые свершились в прошлом или которые точно будут совершены в будущем. Поэтому задача неоперативного проведения документов – просто отразить в информационной базе данные о совершенных операциях.

При неоперативном проведении не имеет смысла производить целый ряд проверок, в частности – контроль остатков. Подразумевается, что если в процессе неоперативного проведения были допущены ошибки, то анализ полученного состояния БД является отдельной задачей, не относящейся к неоперативному проведению и выполняющейся не в момент проведения документа.

Если логика учета подразумевает, что какой-то документ должен проводиться будущей датой, для такого документа механизм оперативного проведения должен быть отключен в метаданных (на закладке Движения окна редактирования объекта конфигурации).

Контроль остатков

Общая методика контроля остатков при проведении документа заключается в записи движения документа, а затем чтения из базы остатков. Если появились отрицательные остатки, значит такой документ проводить нельзя. Нужно сообщить пользователю каких материалов не хватает и отменить проведение документа. Нам осталось проконтролировать это.

В режиме Конфигуратор

Сделаем заготовку. После цикла обхода результата запроса и перед концом процедуры напишем:

КонецЦикла;

Движения.Записать();

Если Режим = РежимПроведенияДокумента.Оперативный Тогда

//проверить отрицательные остатки.

КонецЕсли;

КонецПроцедуры

Сначала мы записываем движения в регистры. Затем определяем режим проведения документа. При выполнении процедуры ОбработкаПроведения() вторым параметром (Режим) в нее передается режим проведения документа и значение этой переменной сравнивается со значением системного перечисления РежимПроведенияДокумента. В случае оперативного проведения мы будем выполнять контроль остатков.

Теперь сделаем заготовку запроса для проверки отрицательных остатков. Используем тот же менеджер виртуальных таблиц.

Если Режим = РежимПроведенияДокумента.Оперативный Тогда

//проверить отрицательные остатки.

Запрос3 = Новый Запрос;

Запрос3.МенеджерВременныхТаблиц = МенеджерВТ;

Запрос3.Текст = "";

КонецЕсли;

Установите курсор внутрь кавычек и вызовите конструктор запроса. Подтвердите создание нового запроса.

Выберите таблицу ОстаткиМатериалов.Остатки и из нее два поля: Материал и КоличествоОстаток. Задайте параметры этой таблице. В параметре Условие напишем:

Материал В (ВЫБРАТЬ НоменклатураДокумента.Номенклатура ИЗ НоменклатураДокумента) И Склад = &Склад

Т.е. мы получаем итоги только для той номенклатуры, которая содержится в нашей временной таблице и только по складу, который указан в документе.

Затем на вкладке Условия перенесем в список условий поле ОстаткиМатериаловОстатки.КоличествоОстаток, поставим флажок Произвольное и укажем, что нас интересуют только отрицательные остатки:

ОстаткиМатериаловОстатки.КоличествоОстаток < 0

Нажмите ОК.

Теперь осталось только установить параметр запроса, обойти результат запроса и вывести сообщения об отрицательных остатках.

//проверить отрицательные остатки.

Запрос3 = Новый Запрос;

Запрос3.МенеджерВременныхТаблиц = МенеджерВТ;

Запрос3.Текст = "ВЫБРАТЬ

| ОстаткиМатериаловОстатки.Материал,

| ОстаткиМатериаловОстатки.КоличествоОстаток

|ИЗ

| РегистрНакопления.ОстаткиМатериалов.Остатки(

| ,

| Материал В

| (ВЫБРАТЬ

| НоменклатураДокумента.Номенклатура

| ИЗ

| НоменклатураДокумента)

| И Склад = &Склад) КАК ОстаткиМатериаловОстатки

|ГДЕ

| ОстаткиМатериаловОстатки.КоличествоОстаток < 0";

Запрос3.УстановитьПараметр("Склад", Склад);

Результат = Запрос3.Выполнить();

ВыборкаДетальныеЗаписи = Результат.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

Сообщение = Новый СообщениеПользователю();

Сообщение.Текст = "Не хватает" + Строка(- ВыборкаДетальныеЗаписи.КоличествоОстаток) + "единиц материала""" + ВыборкаДетальныеЗаписи.Материал + """";

Сообщение.Сообщить();

Отказ = Истина;

КонецЦикла;

КонецЕсли;

КонецПроцедуры

При выполнении проверки в запрос в параметре Склад передается склад, указанный в документе. Затем выполняется запрос для получения отрицательных остатков номенклатуры, содержащейся во временной таблице и на складе, указанном в параметре Склад.

После этого выборка записей запроса обходится в цикле, и если есть такие записи, они выводятся в сообщениях пользователю.

При этом параметру Отказ присваивается значение Истина, т.е. документ не проводится, начатая транзакция отменяется, состояние данных, измененных в процессе проведения, возвращается в исходное, как до начала проведения документа.

Блокировка данных, которые читаются и изменяются при проведении

Сейчас схема нашей процедуры такова:

1. Выполняем первый запрос с именем Запрос. В результате мы формируем временную таблицу из перечня номенклатуры документа.

2. Выполняем второй запрос с именем Запрос2. В результате мы читаем стоимость и остатки для номенклатуры, содержащейся в табличной части документа.

3. Записываем движения регистров (Движения.Записать())

4. Выполняем третий запрос Запрос3. Тем самым мы проверяем наличие отрицательных остатков.

Обратите внимание, что, начиная с выполнения второго запроса и до конца процедуры, нам необходимо обеспечить неизменность стоимости и остатков номенклатуры, с которой мы работаем, и запретить другим транзакциям даже читать эти данные. Сама система заблокирует изменение этих данных, но лишь начиная с момента записи движения.

Однако может возникнуть следующая ситуация. Выполняя второй запрос, мы прочитали, что есть 2 шт. некоторого материала. И другая транзакция (другой пользователь), которая собирается списывать материалы, тоже прочитала, что есть 2 шт. этого материала. После этого мы записали движения, система заблокировала эти данные. Другая транзакция ждет, когда мы освободим данные. Мы провели документ, списали 2 шт. материала и освободили данные. Другая транзакция пытается тоже списать 2 шт. материала, но его уже нет!

Аналогичная ситуация может возникнуть и между пунктами 3 и 4, в результате чего контроль остатков будет работать неверно.

Поэтому необходимо заблокировать остатки от чтения другими транзакциями еще до выполнения второго запроса. Т.е. прежде чем читать что-то, что мы собираемся изменять, нужно запретить чтение этих данных другими транзакциями до окончания введения изменений нами.

В режиме Конфигуратор

Как это сделать? Давайте посмотрим на свойство нашей конфигурации Режим управления блокировкой данных. Он установлен в значение Управляемый.

Это значит, что нам нужно использовать управляемые блокировки, которые устанавливаются средствами встроенного языка.

Необходимо заблокировать те данные, которые мы собираемся читать и впоследствии изменять. Для этого у наборов записей регистров есть свойство БлокироватьДляИзменения. Вставим этот код перед записью пустых наборов записей.

ПО НоменклатураДокумента.Номенклатура = ОстаткиМатериаловОстатки.Материал";

//Установим необходимость блокировки данных в регистрах СтоимостьМатериалов и ОстаткиМатериалов.

Движения.СтоимостьМатериалов.БлокироватьДляИзменения = Истина;

Движения.ОстаткиМатериалов.БлокироватьДляИзменения = Истина;

//Запишем пустые наборы записей, чтобы читать остатки без учета данных в документе.

Движения.СтоимостьМатериалов.Записать();

Движения.ОстаткиМатериалов.Записать();

Результат = Запрос2.Выполнить();

Управляемая блокировка будет установлена в момент записи этих наборов записей, т.е. как раз перед выполнением второго запроса. Что и требовалось.

В режиме 1С: Предприятие

Запустите режим отладки и проверьте работу нового обработчика события ОбработкаПроведения, перепроведя все документы Оказание услуги.

Контрольные вопросы

  1. Почему для доступа к массивам данных информационной базы предпочтительнее использовать запросы.
  2. Чем отличается оперативное проведение документов от неоперативного.
  3. Почему при неоперативном проведении документов не нужно контролировать остатки.
  4. Что такое временные таблицы и зачем их использовать.
  5. Что такое менеджер запросов.
  6. Как программно блокировать данные.

Лабораторная работа №14.

План видов характеристик

Цель работы: познакомиться с полнотекстовым поиском данных.

Оборудование: ПК

Программное обеспечение: Браузер Google Chrome. Онлайн версия 1С: Предприятие 8.2

Теоретические сведения:

В этой работе мы познакомимся с новым объектом конфигурации – План видов характеристик - и узнаем, как можно использовать этот объект для расширения возможностей нашей конфигурации.

Задача работы: создать механизм, позволяющий пользователю произвольно описывать материалы и вести учет в разрезе всех описаний, которые могут быть заданы пользователем.

Что такое план видов характеристик

Объект конфигурации план видов характеристик предназначен для описания структуры хранения информации о характеристиках, создаваемых пользователем.

Он напоминает справочник, но с более узкой специализацией – хранит только виды характеристик объекта БД.

План видов характеристик состоит из видов характеристик, описываемых наименованием и типом значения.

Разработчик и пользователь могут задать в нем любое необходимое количество видов характеристик.

Для задания набора возможных типов значений, которые могут принимать виды характеристик, существует свойство Тип значения характеристик.

Если пользователю будет недостаточно определенных в данной конфигурации типов данных, он может воспользоваться специальным вспомогательным справочником, который разработчик создаст заблаговременно и укажет в качестве свойства объекта План видов характеристик Дополнительные значения характеристик.

Логическая связь объектов

Для реализации этого примера нам понадобятся три новых объекта конфигурации. Прежде всего, План видов характеристик, который будет хранить виды характеристик, описывающих материалы.

Второе, нам понадобится специальный справочник, подчиненный справочнику Номенклатура. Элементы этого справочника будут идентифицировать партии материалов с некоторым фиксированным набором значений характеристик.

Третье – регистр сведений, в котором и будет храниться соответствие конкретных значений характеристик некоторому варианту материала.

Создание новых объектов конфигурации

В режиме Конфигуратор

Нам понадобится создать несколько новых объектов:

 Справочник ВариантыНоменклатуры, чтобы описывать партии материалов.

 Справочник ДополнительныеСвойстваНоменклатуры, чтобы задавать значения видов характеристик, для которых нет подходящих типов в конфигурации.

План видов характеристик СвойстваНоменклатуры, чтобы создавать виды характеристик.

 Регистр сведений ЗначенияСвойствНоменклатуры, чтобы хранить значения видов характеристик для различных партий материалов.

Сначала создадим справочник с именем ВариантыНоменклатуры и укажем, что он будет подчинен справочнику Номенклатура. Для этого добавим справочник Номенклатура на закладке Владельцы в список владельцев справочника ВариантыНоменклатуры.

Затем создадим еще один справочник с именем ДополнительныеСвойстваНоменклатуры.

После этого создадим План видов характеристик с именем СвойстваНоменклатуры. Установим его свойство Тип значения характеристик.

Для этого нажмите кнопку выбора и задайте составной тип данных:

 Число, длина 15, точность 3;

 Строка, длина 25;

 Дата;

 Булево;

 СправочникСсылка.ДополнительныеСвойстваНоменклатуры.

Затем справочнику ДополнительныеСвойстваНоменклатуры укажем владельца – план видов характеристик СвойстваНоменклатуры.

После определим, что дополнительные значения характеристик плана видов характеристик будут располагаться в справочнике ДополнительныеСвойстваНоменклатуры.

В заключение создадим объект Регистр сведений с именем ЗначенияСвойствНоменклатуры.

На закладке Данные создадим измерения регистра:

НаборСвойств, Ведущее, тип СправочникСсылка.ВариантыНоменклатуры;

ВидСвойства, тип ПланВидовХарактеристикСсылка.СвойстваНоменклатуры.

 

Затем создадим ресурс регистра: Значение, тип Характеристика.СвойстваНоменклатуры.

Обратите внимание, что мы имеем возможность определить тип значения ресурса регистра как Характеристика.<имя>. Это определение представляет собой составной тип данных, как он задан в типе значения соответствующего плана видов характеристик. Т.е. ресурс регистра может иметь значение любого типа из тех, которые описаны в типе значения плана видов характеристик.

Кроме этого, зададим в свойстве Связь по типу этого ресурса измерение регистра ВидСвойства. Связь по типу будет обеспечивать нам соответствие типа значений, вводимых в это поле, и типа характеристики, выбранной в поле Вид свойства.

А также заполним еще одно свойство – Связи параметров выбора. Для этого нажмите кнопку выбора у этого свойства и перенесите из списка доступных реквизитов в список параметров измерение регистра ВидСвойства. Установка свойства Связи параметров выбора обеспечит нам то, что при выборе значений, содержащихся в справочнике Дополнительные свойства номенклатуры, для выбора будут предлагаться только те значения, которые относятся к выбранной характеристике.

Доработка объектов конфигурации

Справочник Номенклатура

В режиме 1С:Предприятие

Запустите режим отладки и посмотрите, как взаимодействуют логически связанные объекты конфигурации Справочник Номенклатура, Справочник ВариантыНоменклатуры, План видов характеристик СвойстваНоменклатуры и Регистр сведений ЗначенияСвойствНоменклатуры.

Мы не указывали для этих объектов подсистем, к которым они относятся, потому что отображение этих объектов вне их логической связи не имеет особого смысла. Т.к. мы задали подчинения, то нужные объекты автоматически попадут в панели навигации форм своих владельцев. Поэтому проигнорируйте системное сообщение об отсутствии привязки объектов к подсистемам.

В разделе Учет материалов откройте справочник Номенклатура и его элемент Кабель электрический из группы Материалы - Прочее.

 

Поскольку справочник Номенклатура является владельцем справочника ВариантыНоменклатуры, мы видим в панели навигации ссылку для перехода к подчиненному списку. Это значит, что при открытии этого списка мы будем видеть только наборы свойств, относящиеся к редактируемому элементу справочника Номенклатура.

Это система сделала за нас, и нас это устраивает. Но название стандартного реквизита Родитель не совсем понятно. Более естественное название – Группа номенклатуры. Поскольку в интерфейсе отражаются синонимы объектов, нам нужно изменить синоним стандартного реквизита справочника, который по умолчанию совпадает с его именем Родитель.

В режиме Конфигуратор

Для этого вернемся в конфигуратор и откроем окно редактирования Справочника Номенклатура.

На закладке Данные нажмите кнопку Стандартные реквизиты, дважды щелкните на реквизите Родитель и в открывшемся окне задайте Синоним реквизита Группа номенклатуры.

Мы изменили синоним реквизита объекта конфигурации, а не реквизита формы. В данном случае форма элемента справочника Номенклатура вообще сгенерирована системой автоматически.

Теперь во всех видах форм данный реквизит будет иметь установленный синоним, если только разработчик не захочет его изменить при создании своей собственной формы.

В режиме 1С:Предприятие

Откройте форму того же элемента номенклатуры и вместо названия мы увидим Группа номенклатуры.

 Справочник Варианты номенклатуры

В режиме 1С:Предприятие

Теперь зададим набор свойств для элемента номенклатуры Кабель электрический. Для этого выполним команду Варианты номенклатуры для перехода к списку, где будут храниться наборы свойств элементов номенклатуры.

Открывшаяся форма списка вариантов номенклатуры не совсем нас устраивает – поля Код и Владелец явно лишние. Код нового варианта номенклатуры генерируется автоматически и ничего пользователю не говорит. Владелец варианта номенклатуры отражен в левом верхнем углу панели навигации формы и тоже в списке не имеет смысла.

Чтобы сделать эти колонки невидимыми, нам нужно создать форму списка справочника ВариантыНоменклатуры и при ее создании проанализировать, откуда она открывается (это можно понять по значению параметра формы Отбор).

Если установлен отбор по владельцу (т.е. она открывается из списка номенклатуры), то мы будем в ней скрывать колонки Код и Владелец. Если же форма открывается другими способами, то эти колонки могут понадобиться, поэтому просто удалить их из формы было бы неправильно.

Поскольку форма создается на сервере, делать это нужно в обработчике события формы ПриСозданииНаСервере.

В режиме Конфигуратор

Для создания формы откройте окно редактирования объекта Справочник ВариантыНоменклатуры, перейдите на вкладку Формы, нажмите кнопку открытия и создайте основную форму списка.

Форма, созданная конструктором, не содержит поля Владелец. Поэтому наша задача даже упрощается: нам нужно будет скрыть только поле Код.

В открывшемся окне редактора форм вверху слева расположено окно элементов формы. Выделите в нем элемент Форма (нам нужно событие формы в целом) и двойным щелчком откройте свойства этого элемента. Прокрутите список вниз, найдите событие ПриСозданииНаСервере и нажмите кнопку открытия

 

В модуле формы будет создан обработчик события формы ПриСозданииНаСервере, в который мы внесем следующий текст: &НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

Если Параметры.Отбор.Свойство("Владелец") Тогда

Элементы.Код.Видимость = Ложь;

КонецЕсли;

КонецПроцедуры

Прокомментируем этот код.

Параметры – это свойство управляемой формы, в модуле которой мы находимся. Используя это свойство, мы получаем объект, который содержит коллекцию параметров формы.

К элементу этой коллекции Отбор мы обращаемся по имени.

Используя метод Свойство структуры элементов отбора, мы определяем, установлен ли отбор по полю Владелец. Если такой отбор установлен, мы устанавливаем видимость поля Код в значение Ложь, т.е. скрываем это поле. Здесь Элементы – это свойство управляемой формы, которое позволяет получить доступ ко всем элементам формы.

В режиме 1С:Предприятие

Форма списка вариантов номенклатуры будет иметь вид:

Как видите, мы добились желаемого результата: было три колонки, теперь только одна – Наименование.

Нажмите кнопку Создать, чтобы создать новый набор свойств для элемента номенклатуры. Появится сгенерированная форма элемента справочника ВариантыНоменклатуры. В ней есть недостатки:

 Заголовок формы должен быть задан в единственном числе,

 Лишние поля Код и Владелец,

Команду перехода к подчиненной информации нужно переименовать в более понятную.

Вернемся в конфигуратор и исправим это.

 В режиме Конфигуратор

Переименуем заголовок формы, чтобы было понятно, что мы создаем в данный момент один элемент номенклатуры.

Для этого в окне редактирования справочника ВариантыНоменклатуры на закладке Основные задайте Представление объекта в единственном числе как Вариант номенклатуры. Это свойство будет использоваться в интерфейсе как заголовок формы элемента справочника.

Нужно убрать поля Код и Владелец из этой формы. Для этого в окне редактирования справочника ВариантыНоменклатуры перейдите на закладку Формы, нажмите кнопку открытия и создайте основную форму элемента.

В окне структуры элементов формы выделите поочередно эти элементы и удалите их из формы.

 

В результате в форме элемента будет отображен только один реквизит справочника – Наименование. Его представление мы тоже немного поправим.

На закладке Данные в окне редактирования справочника нажмите кнопку Стандартные реквизиты, в списке реквизитов дважды щелкните на реквизите Наименование и в свойствах задайте Синоним Название.

Заголовок формы Вариант номенклатуры и подчиненная ему информация – Значения свойств номенклатуры не «вяжутся» друг с другом. Это записи одноименного регистра, к которым можно перейти из формы элемента.

Поэтому в окне редактирования объекта конфигурации Регистр сведений ЗначенияСвойствНоменклатуры на закладке Основные задайте Представление списка как Состав варианта номенклатуры.

Это свойство будет использоваться в интерфейсе 1С:Предприятия как заголовок формы списка регистра.

В режиме 1С:Предприятие

В разделе Учет материалов откройте справочник Номенклатура и его элемент Кабель электрический.

В форме элемента выполните команду Варианты номенклатуры для перехода к списку наборов свойств данного элемента. Пока этот список пуст. Нажмите кнопку Создать. Теперь в открывшейся форме варианта номенклатуры нас всѐ устраивает.

Регистр Значения свойств номенклатуры

В режиме 1С:Предприятие

Создадим вариант номенклатуры Белые кабели.

Выполните команду Состав варианта номенклатуры для перехода к составу редактируемого варианта номенклатуры. Если вариант номенклатуры еще не записан, то появится вопрос о записи данных, на который мы ответим утвердительно.

После этого откроется форма списка регистра Значения свойств номенклатуры, которая генерируется по умолчанию.

В этой форме нас также не всѐ устраивает:

 Заголовок колонки ВидСвойства лучше переименовать,

 Лишняя колонка НаборСвойств.

Вернемся в конфигуратор и устраним эти недостатки.

В режиме Конфигуратор

Название колонки Вид свойства лучше переименовать в Свойство.

Для этого в окне редактирования регистра сведений ЗначенияСвойствНоменклатуры на закладке Данные откройте свойства измерения ВидСвойства и задайте его Синоним как Свойство.

Поскольку регистр имеет ведущее измерение НаборСвойств типа СправочникСсылка.ВариантыНоменклатуры, поле Набор свойств лишнее, т.к. владелец данного набора свойств отражен в левом верхнем углу панели навигации формы.

Поэтому создадим обработчик события ПриСозданииНаСервере формы списка регистра и в нем сделаем колонку НаборСвойств невидимой в случае открытия формы с отбором по этому полю, т.е. если форма списка регистра открыта из формы элемента справочника Варианты номенклатуры.

Откройте окно редактирования регистра сведений ЗначенияСвойствНоменклатуры, перейдите на закладку Формы, создайте основную форму списка. Затем создайте для формы обработчик события формы ПриСозданииНаСервере со следующим текстом:

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

Если Параметры.Отбор.Свойство("НаборСвойств") Тогда

Элементы.НаборСвойств.Видимость = Ложь;

КонецЕсли;

КонецПроцедуры

В режиме 1С:Предприятие

В результате форма списка регистра Состав варианта номенклатуры примет вид:

Теперь, если нажать Создать, чтобы ввести новую запись, откроется форма записи регистра ЗначенияСвойствНоменклатуры.

Эта форма сгенерирована автоматически и не лишена недостатков:

 Заголовок формы должен быть задан в единственном числе,

 Лишняя колонка Набор свойств.

В режиме конфигуратор

Во-первых, нужно переименовать заголовок формы, чтобы было понятно, что мы создаем в данный момент одно свойство и его значение в составе варианта номенклатуры.

Для этого в окне редактирования регистра сведений ЗначенияСвойствНоменклатуры на закладке Основные задайте Представление записи как Свойство и значение.

Это свойство будет использоваться в интерфейсе как заголовок формы записи регистра.

Во-вторых, нужно убрать поле НаборСвойств из этой формы. Для этого в окне редактирования регистра сведений ЗначенияСвойствНоменклатуры перейдите на закладку Формы и создайте основную форму записи.

В окне структуры элементов формы выделите поле НаборСвойств и удалите его. В режиме 1С:Предприятие

Форма записи регистра ЗначенияСвойствНоменклатуры примет вид:

Создание характеристик номенклатуры

В режиме 1С:Предприятие

Теперь создадим различные варианты номенклатуры в режиме 1С:Предприятие.

В разделе Учет материалов откройте справочник Номенклатура и его элемент Кабель электрический.

В форме элемента номенклатуры выполните команду Варианты номенклатуры для перехода к списку наборов свойств данного элемента номенклатуры. В форме списка вариантов номенклатуры откройте набор свойств Белые кабели, который мы создали ранее.

В форме варианта номенклатуры нажмите Состав варианта номенклатуры. Этот список пока пуст. Нажмите кнопку Создать. В открывшейся форме создайте свойство Цвет со значением Белый.

Обратите внимание, что в форме элемента плана видов характеристик и в форме элемента справочника дополнительных характеристик номенклатуры также есть лишнее поле Код. Можете самостоятельно исправить эти недостатки аналогично предыдущим для справочника ВариантыНоменклатуры.

В окне выбора плана видов характеристик появится созданная нами характеристика. Нажмите кнопку Выбрать. В результате мы вернемся в форму записи состава варианта номенклатуры с заголовком Свойство и значение.

Нажмите кнопку выбора в поле Значение.

Ресурс Значение регистра ЗначенияСвойствНоменклатуры имеет тип Характеристика.СвойстваНоменклатуры. Это составной тип данных, который описан в свойстве Тип значения характеристик плана видов характеристик СвойстваНоменклатуры. Т.к. для характеристики Цвет мы задали тип значения

СправочникСсылка.ДополнительныеСвойстваНоменклатуры, то перед нами появится форма выбора этого справочника. Список свойств пока пуст. Нажмите кнопку Создать.

Введите тип значения Белый, в поле Владелец оставим имеющееся значение – Цвет.

Нажмите Записать и закрыть. Нажмите кнопку Выбрать.

Нажмите Записать и закрыть. Мы вернулись в форму списка состава варианта номенклатуры.

Создадим еще одно свойство – Сечение, мм2 – в составе варианта номенклатуры Белые кабели. Для этого повторим только что выполненные действия. Нажмите кнопку Создать.

В открывшейся форме нажмите кнопку выбора в поле Свойство. Далее кнопку Создать.

Введите наименование – Сечение, мм2 и выберите тип Число, длина 15, точность 3.

Нажмите Записать и закрыть. Нажмите Выбрать. Введите в поле Значение число 2,5.

Нажмите Записать и закрыть.

Теперь аналогично создадим набор свойств для элемента справочника Номенклатура – Шланг резиновый. Этот набор будет называться Польша и состоять из свойств:

 Цвет – Черный;

 Производитель – Fagumit.

При создании свойства Цвет выберем его из уже имеющихся свойств в плане видов характеристик. Значение этой характеристики (Черный) сначала добавим в справочник дополнительных свойств номенклатуры и затем выберем из него.

При создании свойства Производитель с типом значения Дополнительные свойства номенклатуры сначала добавим это свойство в план видов характеристик (тип значения – Дополнительные свойства номенклатуры), а затем выберем из него. Значение этой характеристики (Fagumit), сначала добавим в справочник дополнительных свойств номенклатуры и затем выберем из него.

Теперь посмотрим на созданное нами с точки зрения разработчика.

Доработка учетных механизмов

Мы добавили возможность указывать произвольные характеристики для номенклатуры и создали несколько таких характеристик – вариантов номенклатуры. Теперь хотелось бы иметь возможность еще и учитывать номенклатуру в разрезе этих характеристик, а именно:

 Приходовать товар, указывая характеристики;

 Расходовать товар, указывая характеристики;

 Получать отчеты не просто по номенклатуре, а по номенклатуре с определенными характеристиками.

Для этого требуется доработать регистры и создать новый отчет.

Регистр Остатки материалов

В режиме Конфигуратор Изменим структуру регистра накопления ОстаткиМатериалов. Откройте окно редактирования регистра накопления и на закладке Данные добавим новое измерение НаборСвойств с типом Справочник.Ссылка.ВариантыНоменклатуры.

Документ Приходная накладная

Теперь нам нужно доработать документ ПриходнаяНакладная, чтобы при приходовании материалов можно было указать набор свойств и чтобы этот набор записывался в регистры при проведении документа.

Для этого откройте окно редактирования документа ПриходнаяНакладная и на вкладке Данные добавим в табличную часть документа новый реквизит НаборСвойств с типом СправочникСсылка.ВариантыНоменклатуры.

У этого реквизита необходимо заполнить свойство Связи параметров выбора, чтобы после выбора номенклатуры в этом свойстве выбирать только среди тех наборов свойств, которые относятся к данной номенклатуре. Найдите это свойство и нажмите кнопку выбора.

Перенесите из списка реквизит Материалы.Материал. Тем самым мы задали, что при выборе в поле НаборСвойств будет всегда открываться список элементов справочника Варианты номенклатуры, подчиненных материалу, выбранному в колонке Материал.

После этого расположим этот реквизит в табличной части формы документа. Для этого перейдите на вкладку Формы и двойным щелчком на строке ФормаДокумента откройте форму.

В правом верхнем окне на закладке Реквизиты раскройте реквизит формы Объект.

Найдите в табличной части реквизит НаборСвойств и перетащите его в окно элементов формы, расположенное слева в верхней части редактора форм, в таблицу Материалы и расположите его в структуре элементов формы после поля Материал.

В заключение в окне редактирования документа ПриходнаяНакладная на закладке Прочее откроем модуль объекта. Откройте процедуру обработчика события ОбработкаПроведения и добавьте к формируемым движениям присвоение значения измерению НаборСвойств регистра ОстаткиМатериалов.

// регистр ОстаткиМатериалов Приход

Движения.ОстаткиМатериалов.Записывать = Истина;

Движения.СтоимостьМатериалов.Записывать = Истина;

Для Каждого ТекСтрокаМатериалы Из Материалы Цикл

Движение = Движения.ОстаткиМатериалов.Добавить();

Движение.ВидДвижения = ВидДвиженияНакопления.Приход;

Движение.Период = Дата;

Движение.Материал = ТекСтрокаМатериалы.Материал;

Движение.НаборСвойств = ТекСтрокаМатериалы.НаборСвойств;

Движение.Склад = Склад;

Движение.Количество = ТекСтрокаМатериалы.Количество;

Документ Оказание услуги

Теперь аналогично доработаем документ ОказаниеУслуги.

Для того чтобы при расходовании материалов пользователь мог указывать набор свойств для каждого расходуемого материала, откроем окно редактирования документа ОказаниеУслуги, на закладке Данные добавим в табличную часть документа новый реквизит НаборСвойств с типом СправочникСсылка.ВариантыНоменклатуры.

У этого реквизита заполним свойство Связи параметров выбора. Перенесем из списка реквизитов в список параметров ПереченьНоменклатуры.Номенклатура. Тем самым мы задали, что при выборе в поле НаборСвойств будет всегда открываться список элементов справочника Варианты номенклатуры, подчиненных материалу, выбранному в колонке Номенклатура. Расположим этот реквизит в табличной части формы документа после поля Номенклатура.

В окне редактирования документа на закладке Прочее откройте модуль объекта. Откройте процедуру обработчика события ОбработкаПроведения и добавьте к формируемым движениям присвоение значения измерению НаборСвойств регистра ОстаткиМатериалов:

// регистр ОстаткиМатериалов Расход Движение = Движения.ОстаткиМатериалов.Добавить();

Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

Движение.Период = Дата;

Движение.Материал = ВыборкаДетальныеЗаписи.Номенклатура;

Движение.НаборСвойств = ВыборкаДетальныеЗаписи.НаборСвойств;

Движение.Склад = Склад;

Поскольку в предыдущей работе мы оптимизировали процедуру проведения документа и получали все данные документа с помощью запроса, то в текст запроса нужно также добавить строки для получения нового реквизита документа.

Запрос.Текст =

"ВЫБРАТЬ

| ОказаниеУслугиПереченьНоменклатуры.Номенклатура,

| ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры КАК ВидНоменклатуры,

| ОказаниеУслугиПереченьНоменклатуры.НаборСвойств,

| СУММА(ОказаниеУслугиПереченьНоменклатуры.Количество) КАК КоличествоВДокументе,

| СУММА(ОказаниеУслугиПереченьНоменклатуры.Сумма) КАК СуммаВДокументе

|ПОМЕСТИТЬ НоменклатураДокумента

|ИЗ

| Документ.ОказаниеУслуги.ПереченьНоменклатуры КАК ОказаниеУслугиПереченьНоменклатуры

|ГДЕ

| ОказаниеУслугиПереченьНоменклатуры.Ссылка = &Ссылка

|

|СГРУППИРОВАТЬ ПО

| ОказаниеУслугиПереченьНоменклатуры.Номенклатура,

| ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры,

| ОказаниеУслугиПереченьНоменклатуры.НаборСвойств";

Запрос.УстановитьПараметр("Ссылка", Ссылка);

Результат = Запрос.Выполнить();

Запрос2 = Новый Запрос;

Запрос2.МенеджерВременныхТаблиц = МенеджерВТ;

Запрос2.Текст = "ВЫБРАТЬ | НоменклатураДокумента.Номенклатура,

| НоменклатураДокумента.ВидНоменклатуры,

| НоменклатураДокумента.НаборСвойств,

| НоменклатураДокумента.КоличествоВДокументе,

| НоменклатураДокумента.СуммаВДокументе,

| ЕСТЬNULL(СтоимостьМатериаловОстатки.СтоимостьО