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


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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



Отказ = Ложь;

Если НЕ ЗначениеЗаполнено(Склад) Тогда

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

Сообщить("Поле <Склад> не заполнено!");

КонецЕсли;

Если НЕ ЗначениеЗаполнено(Сотрудник) Тогда

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

Сообщить("Поле <Сотрудник> не заполнено!");

КонецЕсли;

Если НЕ ЗначениеЗаполнено(Контрагент) Тогда

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

Сообщить("Поле <Контрагент> не заполнено!");

КонецЕсли;

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

Запрос.Текст = "ВЫБРАТЬ

| Расходная.НомерСтроки,

| ЕСТЬNULL(Расходная.Количество, 0) КАК Количество,

| ЕСТЬNULL(Расходная.Цена, 0) КАК Цена,

| ЕСТЬNULL(Расходная.Сумма, 0) КАК Сумма,

| ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,

| ЕСТЬNULL(ОстаткиНоменклатурыОстатки.СуммаОстаток, 0) КАК СуммаОстаток,

| ЕСТЬNULL(Расходная.Номенклатура, NULL) КАК Номенклатура

|ИЗ

| (ВЫБРАТЬ

| РасходнаяНакладнаяТовары.НомерСтроки КАК НомерСтроки,

| РасходнаяНакладнаяТовары.Количество КАК Количество,

| РасходнаяНакладнаяТовары.Цена КАК Цена,

| РасходнаяНакладнаяТовары.Сумма КАК Сумма,

| РасходнаяНакладнаяТовары.Номенклатура КАК Номенклатура

| ИЗ

| Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары

| ГДЕ

| РасходнаяНакладнаяТовары.Ссылка = &Ссылка) КАК Расходная

| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки(

| &Дата,

| (Склад, Номенклатура) В

| (ВЫБРАТЬ

| РасходнаяНакладная.Склад,

| РасходнаяНакладнаяТовары.Номенклатура

| ИЗ

| Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная КАК РасходнаяНакладная

| ПО

| РасходнаяНакладнаяТовары.Ссылка = РасходнаяНакладная.Ссылка

| ГДЕ

| РасходнаяНакладная.Ссылка = &Ссылка)) КАК ОстаткиНоменклатурыОстатки

| ПО Расходная.Номенклатура = ОстаткиНоменклатурыОстатки.Номенклатура

|

|ДЛЯ ИЗМЕНЕНИЯ";

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

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

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

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

Если Выборка.Номенклатура.Наименование = "" Тогда

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

Сообщить("В строке №" + Выборка.НомерСтроки + " не заполнено поле <Номенклатура>!");

КонецЕсли;

Если Выборка.Количество = 0 Тогда

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

Сообщить("В строке №" + Выборка.НомерСтроки + " в поле <Количество> указано нулевое значение!");

КонецЕсли;

Если Выборка.Цена = 0 Тогда

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

Сообщить("В строке №" + Выборка.НомерСтроки + " в поле <Цена> указано нулевое значение!");

КонецЕсли;

Нехватка = Выборка.Количество - Выборка.КоличествоОстаток;

Если Нехватка > 0 Тогда

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

Сообщить("Номенклатуры <"+Выборка.Номенклатура+"> на сладе <"+Склад+"> не хватает в количестве "+Нехватка);

КонецЕсли;

Если НЕ Отказ Тогда

Движение = Движения.Цены.Добавить();

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

Движение.Контрагент = Контрагент;

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

Движение.ТипЦен = Перечисления.ТипыЦен.ЦенаПродажи;

Движение.Цена = Выборка.Цена;

Движение = Движения.ОстаткиНоменклатуры.ДобавитьРасход();

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

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

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

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

Если Выборка.Количество = Выборка.КоличествоОстаток Тогда

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

Иначе

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

КонецЕсли;

КонецЕсли;

КонецЦикла;

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

 

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

 

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

Отказ = Ложь;

Если НЕ ЗначениеЗаполнено(Склад) Тогда

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

Сообщить("Поле <Склад> не заполнено!");

КонецЕсли;

Если НЕ ЗначениеЗаполнено(Сотрудник) Тогда

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

Сообщить("Поле <Сотрудник> не заполнено!");

КонецЕсли;

Если НЕ ЗначениеЗаполнено(Контрагент) Тогда

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

Сообщить("Поле <Контрагент> не заполнено!");

КонецЕсли;

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

Запрос.Текст = "ВЫБРАТЬ

| ПриходнаяНакладнаяТовары.НомерСтроки,

| ПриходнаяНакладнаяТовары.Номенклатура,

| ЕСТЬNULL(ПриходнаяНакладнаяТовары.Количество, 0) КАК Количество,

| ЕСТЬNULL(ПриходнаяНакладнаяТовары.Цена, 0) КАК Цена,

| ЕСТЬNULL(ПриходнаяНакладнаяТовары.Сумма, 0) КАК Сумма

|ИЗ

| Документ.ПриходнаяНакладная.Товары КАК ПриходнаяНакладнаяТовары

|ГДЕ

| ПриходнаяНакладнаяТовары.Ссылка = &Ссылка";

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

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

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

Если Выборка.Номенклатура.Наименование = "" Тогда

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

Сообщить("В строке №" + Выборка.НомерСтроки + " не заполнено поле <Номенклатура>!");

КонецЕсли;

Если Выборка.Количество = 0 Тогда

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

Сообщить("В строке №" + Выборка.НомерСтроки + " в поле <Количество> указано нулевое значение!");

КонецЕсли;

Если Выборка.Цена = 0 Тогда

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

Сообщить("В строке №" + Выборка.НомерСтроки + " в поле <Цена> указано нулевое значение!");

КонецЕсли;

Если НЕ Отказ Тогда

Движение = Движения.Цены.Добавить();

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

Движение.Контрагент = Контрагент;

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

Движение.ТипЦен = Перечисления.ТипыЦен.ЦенаПокупки;

Движение.Цена = Выборка.Цена;

Движение = Движения.ОстаткиНоменклатуры.ДобавитьПриход();

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

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

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

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

Движение.Сумма = Выборка.Сумма;

КонецЕсли;

КонецЦикла;

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

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

 

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

 

 

В настройках виртуальной таблицы в поле «Период» пишем &Дата, а в поле «Условие» Номенклатура В ИЕРАРХИИ (&Номенклатура). Что мы сейчас сделали. Мы могли не писать условие и тогда отчёт формировался бы по всей существующей номенклатуре. Мы могли написать Номенклатура = &Номенклатура, и тогда отчёт формировался бы по заданной номенклатуре. Но мы поступили иначе и написали В ИЕРАРХИИ. Это означает, что мы сможем выбрать не только конкретный товар, но и его родителя, т.е. можем посмотреть остатки по конкретному телевизору или по всем телевизорам сразу. Такой подход может применяться только для иерархических справочников. При этом, если в отчёте мы не зададим номенклатуру, то он автоматически выдаст данные для всей номенклатуры. Тоже самое происходит и с датой - если она не будет заполнена, то отчёт строится на текущую дату.

 

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

 

 

Сначала из левой колонки перенесём поле «Номенклатура» в верхнее правое окошко (это означает, что итоги будут подводиться по этому полю). Затем из левой колонки перенесём поле «КоличествоОстаток» в нижнее правое окошко (это означает, что в качестве итогов будут суммироваться остатки). Внимательно посмотрите на выпадающий список «тип итогов» - он определяет иерархию, с которой будут отображаться элементы. Если выставить тип итогов в «Элементы», то выходная форма будет такой же, как если бы мы вообще не использовали итоги. Это связано с тем, что мы в отчёт и так выводим поле «КоличествоОстаток» для каждого элемента, поэтому нет никакого смысла подбивать итоги для каждого элемента, если этот итог итак уже есть в выводимой таблице. Для лучшего понимания типа итогов, продемонстрируем в работе все 3 варианта.

 

Элементы:

Только иерархия:

Элементы и иерархия:

 

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

 

Если у вас в списке записи дублируются, т.е. 2 поля Дата и 2 поля Номенклатура, то заполните их аналогично (это не является грубой ошибкой, а скорее недоработкой учебной версии платформы). Нажмём «ОК» и увидим, что макет и выходную форму конструктор создал за нас. Отчёт готов. Осталось добавить его в нужные интерфейсы и посмотреть на результат работы в режиме «Предприятие». При желании можно проявить фантазию и оформить отчёт более красиво для наглядности:

 

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

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

 

1. Изучить теоретические сведения.

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

3. Реализовать алгоритмы функционирования системы.

4. Реализовать необходимую отчетность.

5. Подготовить отчет о работе.

5. Содержание отчета

1. Цель работы.

2. Описание варианта задания (предметной области и набора ее элементов, отображаемых в БД).

3. Копии всех подготавливаемых аналитических отчетов.

4. Выводы по работе.

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

 

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

2. Как осуществить выбор представления данных?

3. В какие элементы управления позволяет выводить отчет конструктор выходной формы?

4. Какие данные может содержать макет?

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

6. Объясните разницу между видами группировок при подведении итогов.

7. Какие виды соединения таблиц вы знаете? Опишите их.

 

 

 

БИБЛИОГРАФИЧЕСКИЙ СПИСОК

 

 

 

 

 

 

ПРИЛОЖЕНИЕ А. Варианты заданий

 

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

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

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

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

 

№ варианта Предметная область Объекты учета
  Медицина Пациенты, Расписание работы врачей, Запись на прием, Вызовы на дом, Процедуры и операции, Оплаты
  Кадры на предприятии Сотрудники, Должности, Вакансии, Анкеты претендентов на работу, Графики работы, Рабочее время, Структура предприятия (отделы, руководство)
  Учебное заведение Студенты, Преподаватели, Дисциплины, Оценки, Оплата обучения, Прием абитуриентов, Отчисление, Переведение на следующий курс
  Общественное питание Продукты, Рецепты, Заказы столиков, Продажи, Закупка/списание продуктов
  Сервисный центр Обслуживаемое оборудование, Виды ремонта (платный, гарантийный), Заявки от клиентов, Запчасти, Услуги сторонних организаций
  Агентство недвижимости Клиенты (потенциальные и текущие), Агенты, Сделки, Дополнительные услуги, Учет недвижимости
  Пансионат (санаторий) Клиенты, Номера (различные характеристики – этаж, число мест, есть ли балкон итд), Перемещения клиентов (въезды, выезды, переселения), Путевки (включают перечень услуг), Заказы и бронирование мест
  Фитнесс-клуб Клиенты, Услуги и занятия, Расписание работы тренеров, Клубные карты, Оплаты
  Библиотека Каталог книг, Читатели, Прием книг на учет и их списание, Выдача/возврат книг
  Издательство (отдел подписки) Заказчики, Периодические издания, Варианты подписки, Заявка на подписку, Контроль за исполнением заказов

 



Поделиться:


Последнее изменение этой страницы: 2016-08-10; просмотров: 389; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.218.234.83 (0.066 с.)