В режиме «Конфигуратор»
Откроем модуль документа ОказаниеУслуги. Напомним, как выглядит сейчас процедура проведения этого документа (листинг 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 - 2025 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|