В режиме «Конфигуратор»
Откроем модуль документа ОказаниеУслуги. Напомним, как выглядит сейчас процедура проведения этого документа (листинг 14. 3). листинг 14. 3. Процедура «ОбработкаПроведения» Движения. ОстаткиМатериалов. Записывать = Истина; Движения. СтоимостьМатериалов. Записывать = Истина; Движения. Продажи. Записывать = Истина; Для Каждого ТекСтрокаПереченьНоменклатуры Из ПереченьНоменклатуры Цикл Если ТекСтрокаПереченьНоменклатуры. Номенклатура. ВидНоменклатуры = Перечисления. ВидыНоменклатуры. Материал Тогда // Регистр ОстаткиМатериалов Расход Движение = Движения. ОстаткиМатериалов. Добавить(); Движение. ВидДвижения = ВидДвиженияНакопления. Расход; Движение. Период = Дата; Движение. Материал = ТекСтрокаПереченьНоменклатуры. Номенклатура; Движение. Склад = Склад; Движение. Количество = ТекСтрокаПереченьНоменклатуры. Количество; // Регистр СтоимостьМатериалов Расход Движение = Движения. СтоимостьМатериалов. Добавить(); Движение. ВидДвижения = ВидДвиженияНакопления. Расход; Движение. Период = Дата; Движение. Материал = ТекСтрокаПереченьНоменклатуры. Номенклатура; Движение. Стоимость = ТекСтрокаПереченьНоменклатуры. Количество * ТекСтрокаПереченьНоменклатуры. Стоимость; КонецЕсли; // Регистр Продажи Движение = Движения. Продажи. Добавить(); Движение. Период = Дата; Движение. Номенклатура = ТекСтрокаПереченьНоменклатуры. Номенклатура; Движение. Клиент = Клиент; Движение. Мастер = Мастер; Движение. Количество = ТекСтрокаПереченьНоменклатуры. Количество; Движение. Выручка = ТекСтрокаПереченьНоменклатуры. Сумма; Движение. Стоимость = ТекСтрокаПереченьНоменклатуры. Стоимость * ТекСтрокаПереченьНоменклатуры. Количество;
КонецЦикла; Другими словами, все данные, необходимые для проведения документа, мы получаем из самого документа, и только для опреде- ления того, чем является номенклатура (товаром или услугой), мы обращаемся к базе данных, читая данные всего объекта Номенклатура (листинг 14. 4). листинг 14. 4. Обращение к объекту «Номенклатура» Если ТекСтрокаПереченьНоменклатуры. Номенклатура. ВидНоменклатуры Забегая вперед, скажем, что это не единственные данные, которые не содержатся в самом документе и которые в то же время будут нужны нам для правильного его проведения. Поэтому поступим следующим образом: все данные, связанные с номенклатурой, которая содержится в табличной части документа, мы будем получать с помощью запроса к базе данных. А данные, связанные с самим документом (например, дата документа, склад), мы по-прежнему будем получать из документа. Такой подход позволит нам читать только нужные данные и за счет этого макси- мально ускорить проведение документа. Итак, запросом мы будем получать: номенклатуру, количество, сумму, стоимость. Из документа мы возьмем следующие данные: дата, клиент, мастер, склад. Приступим к созданию запроса. Установим курсор перед циклом обхода табличной части документа и из контекстного меню выберем пункт Конструктор запроса с обработкой результата (рис. 14. 4). Подтвердим, что мы хотим создать новый запрос. В окне конструктора запросов перейдем на закладку Таблицы и поля и выберем таблицу ОказаниеУслугиПереченьНоменклатуры – это табличная часть документа ОказаниеУслуги.
Из этой таблицы нам нужны поля – Номенклатура, Номенклату- раВидНоменклатуры, Количество, Сумма и Стоимость (рис. 14. 5).
Но нам нужны не все записи этой таблицы, а только те, которые относятся к нашему документу.
Поэтому перейдем на закладку Условия и зададим условие отбора из таблицы документа только строк проводимого документа. Для этого перетащим поле Ссылка в список условий запроса (листинг 14. 5). листинг 14. 5. Условие отбора из таблицы документа ОказаниеУслугиПереченьНоменклатуры. Ссылка = & Ссылка Ссылка на этот документ будет передана в параметр запроса Ссылка (рис. 14. 6).
Также следует учесть, что в табличной части документа одна и та же номенклатура может встречаться несколько раз. Поэтому на закладке Группировка сгруппируем наши записи по полям Номенклатура и НоменклатураВидНоменклатуры, а рассчитывать будем сумму значений для полей Количество и Сумма. Благодаря этому в результате значения номенклатуры повторяться не будут, и для каждого из них будут посчитаны суммарные значения по полям Количество и Сумма, если в табличной части документа содержится несколько строк с одинаковой номенклатурой. Также в состав суммируемых полей включим и поле Стоимость. По нему будем рассчитывать, например, функцию Максимум. Мы подразумеваем, что для разных строк одной и той же номенклатуры стоимость будет одинаковой, поэтому функция Максимум нужна нам лишь для того, чтобы получить одно из имеющихся значений стоимости (рис. 14. 7).
На закладке Объединения/Псевдонимы зададим псевдонимы для полей Количество и Сумма – КоличествоВДокументе и СуммаВДокументе, а для поля НоменклатураВидНоменклатуры зададим псевдоним ВидНомен- клатуры просто для облегчения чтения запроса (рис. 14. 8).
Нажмем ОК и посмотрим, какой текст запроса сформировал конструктор (листинг 14. 6). листинг 14. 6. Текст запроса
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|