Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

пРиМеЧАние




422


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


 

|   СУММА(ОказаниеУслугиПереченьНоменклатуры. Количество)

|                                                                                КАК КоличествоВДокументе,

|   СУММА(ОказаниеУслугиПереченьНоменклатуры. Сумма) КАК СуммаВДокументе,

|   МАКСИМУМ(ОказаниеУслугиПереченьНоменклатуры. Стоимость) КАК Стоимость

|ИЗ

|   Документ. ОказаниеУслуги. ПереченьНоменклатуры

|                                                       КАК ОказаниеУслугиПереченьНоменклатуры

|ГДЕ

|   ОказаниеУслугиПереченьНоменклатуры. Ссылка = & Ссылка

|

|СГРУППИРОВАТЬ ПО

|   ОказаниеУслугиПереченьНоменклатуры. Номенклатура,

|   ОказаниеУслугиПереченьНоменклатуры. Номенклатура. ВидНоменклатуры";

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

// Вставить обработку выборки ВыборкаДетальныеЗаписи

КонецЦикла;

//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

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

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

Как вы уже знаете, для работы с запросами используется объект встроенного языка Запрос. Вначале создается новый объект Запрос и помещается в переменную Запрос. Затем в свойство Текст объекта Запрос помещается сам текст запроса (Запрос. Текст = …).

После этого устанавливается значение параметра запроса & Ссылка как ссылка на тот документ, в модуле которого мы сейчас находимся (листинг 14. 7).

листинг 14. 7. Установка параметра запроса

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

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


Таким образом, получается объект ВыборкаИзРезультатаЗапроса, который помещается в переменную ВыборкаДетальныеЗаписи.

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

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

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

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

листинг 14. 8. Цикл обхода записей запроса

 

Сначала вместо комментария «// Вставить обработку выборки ВыборкаДетальныеЗаписи» перенесем условие проверки и весь код, формирующий движения по регистрам ОстаткиМатериалов и Стои- мостьМатериалов (листинг 14. 9).

листинг 14. 9. Формирование движений регистров

 


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

В движениях также заменим ТекСтрокаПереченьНоменклатуры на

ВыборкаДетальныеЗаписи (листинг 14. 10).

листинг 14. 10. Формирование движений регистров

 

 

пРиМеЧАние

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

 

Не забудем, что для поля Количество мы задали псевдоним в запросе, поэтому заменим его на КоличествоВДокументе (листинг 14. 11).


листинг 14. 11. Формирование движений регистров

 

Теперь перенесем формирование движений по регистру Продажи

(листинг 14. 12).

листинг 14. 12. Формирование движений регистров

 


Здесь произведем аналогичные замены. ТекСтрокаПереченьНомен- клатуры заменим на ВыборкаДетальныеЗаписи (листинг 14. 13).

листинг 14. 13. Формирование движений регистров

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

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

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

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

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

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

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

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

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

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

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

КонецЕсли;

// Регистр Продажи

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

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

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

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

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

КонецЦикла;

Поля запроса Сумма и Количество заменим на СуммаВДокументе

и КоличествоВДокументе (листинг 14. 14).


листинг 14. 14. Формирование движений регистров

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

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

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

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

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

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

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

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

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

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

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

КонецЕсли;

// Регистр Продажи

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

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

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

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

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

КонецЦикла;

Оставшийся цикл обхода табличной части можно удалить (листинг 14. 15).

листинг 14. 15. Ненужные строки

 

В результате процедура проведения примет следующий вид (листинг 14. 16).

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

 



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


" ВЫБРАТЬ

|   ОказаниеУслугиПереченьНоменклатуры. Номенклатура,

|   ОказаниеУслугиПереченьНоменклатуры. Номенклатура. ВидНоменклатуры

|                                                                        КАК ВидНоменклатуры,

|   СУММА(ОказаниеУслугиПереченьНоменклатуры. Количество)

|                                                                        КАК КоличествоВДокументе,

|   СУММА(ОказаниеУслугиПереченьНоменклатуры. Сумма) КАК СуммаВДокументе,

|   МАКСИМУМ(ОказаниеУслугиПереченьНоменклатуры. Стоимость) КАК Стоимость

|ИЗ

|   Документ. ОказаниеУслуги. ПереченьНоменклатуры

|                                                               КАК ОказаниеУслугиПереченьНоменклатуры

|ГДЕ

|   ОказаниеУслугиПереченьНоменклатуры. Ссылка = & Ссылка

|

|СГРУППИРОВАТЬ ПО

|   ОказаниеУслугиПереченьНоменклатуры. Номенклатура,

|   ОказаниеУслугиПереченьНоменклатуры. Номенклатура. ВидНоменклатуры";

Запрос. УстановитьПараметр(" Ссылка", Ссылка); РезультатЗапроса = Запрос. Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса. Выбрать();

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

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

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

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

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

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

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

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

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

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

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

КонецЕсли;

// Регистр Продажи

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

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

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

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

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

КонецЦикла;

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


Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...