|
facepalm.jpg | ☑ | ||
---|---|---|---|---|
0
Amiralnar
01.09.11
✎
14:21
|
А КАК ЧАСТО ВЫ ЭТО НАБЛЮДАЕТЕ?
Функция ЗапросБезПлатежей() ЗапросКонтр = Новый Запрос; ЗапросКонтр.Текст = "ВЫБРАТЬ | ПродажиОбороты.Контрагент КАК Контрагент, | ПродажиОбороты.Номенклатура КАК Номенклатура, | ПродажиОбороты.Регистратор КАК Регистратор, | СУММА(ВЫБОР | КОГДА ПродажиОбороты.КоличествоОборот > 0 | ТОГДА ПродажиОбороты.КоличествоОборот | ИНАЧЕ 0 | КОНЕЦ) КАК ПродажиКоличество, | СУММА(ВЫБОР | КОГДА ПродажиОбороты.КоличествоОборот < 0 | ТОГДА ПродажиОбороты.КоличествоОборот | ИНАЧЕ 0 | КОНЕЦ) КАК ВозвратыКоличество, | СУММА(ВЫБОР | КОГДА ПродажиОбороты.СтоимостьОборот > 0 | ТОГДА ПродажиОбороты.СтоимостьОборот | ИНАЧЕ 0 | КОНЕЦ) КАК ПродажиСумма, | СУММА(ВЫБОР | КОГДА ПродажиОбороты.СтоимостьОборот < 0 | ТОГДА ПродажиОбороты.СтоимостьОборот | ИНАЧЕ 0 | КОНЕЦ) КАК ВозвратыСумма |ИЗ | РегистрНакопления.Продажи.Обороты( | &ДатаНач, | &ДатаКон, | Регистратор, | Организация = &Организация"; Если ЗначениеЗаполнено(Номенклатура) Тогда ЗапросКонтр.Текст = ЗапросКонтр.Текст + " И Номенклатура В ИЕРАРХИИ (&ВыбНоменклатура)"; КонецЕсли; ЗапросКонтр.Текст = ЗапросКонтр.Текст + ") КАК ПродажиОбороты | |СГРУППИРОВАТЬ ПО | ПродажиОбороты.Контрагент | ,ПродажиОбороты.Номенклатура, | ПродажиОбороты.Регистратор |ИТОГИ | СУММА(ПродажиКоличество), | СУММА(ВозвратыКоличество), | СУММА(ПродажиСумма), | СУММА(ВозвратыСумма) |ПО //| ОБЩИЕ, | Контрагент"; //| Номенклатура ТОЛЬКО ИЕРАРХИЯ, //| Регистратор"; ЗапросКонтр.УстановитьПараметр("Организация", Организация); ЗапросКонтр.УстановитьПараметр("ДатаНач", НачалоДня(ДатаНач)); Если ЗначениеЗаполнено(ДатаКон) Тогда ЗапросКонтр.УстановитьПараметр("ДатаКон", КонецДня(ДатаКон)); Иначе ЗапросКонтр.УстановитьПараметр("ДатаКон", КонецДня(ТекущаяДата())); КонецЕсли; ЗапросКонтр.УстановитьПараметр("ВыбНоменклатура", Номенклатура); Рез = ЗапросКонтр.Выполнить().Выгрузить(); Сч = 0; Пока Сч < Рез.Количество() Цикл ТекСтрока = Рез.Получить(Сч); Если ЗначениеЗаполнено(ТекСтрока.Контрагент) = Ложь Тогда Рез.Удалить(ТекСтрока); Продолжить; КонецЕсли; Если ТекСтрока.Контрагент.ПринадлежитЭлементу(ГруппаСотрудники) Тогда Рез.Удалить(ТекСтрока); Продолжить; КонецЕсли; Сч = Сч + 1; КонецЦикла; Рез.Свернуть("Контрагент"); СписокКонтр = Рез.ВыгрузитьКолонку("Контрагент"); Если ТолькоПеремещения Тогда СписокКонтр.Очистить(); КонецЕсли; СписокКонтр.Добавить(СкладОтправитель); Если ПоСотрудникам Тогда СписокКонтр.Очистить(); СписокКонтр.Добавить(ГруппаСотрудники); КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ"; Для Каждого СтрокаГрупп Из Группировки Цикл Если СтрокаГрупп.Включить = Ложь Тогда Продолжить; КонецЕсли; Если СтрокаГрупп.Наименование = "Номенклатура" Тогда Запрос.Текст = Запрос.Текст + " | ВложенныйЗапрос.Номенклатура КАК Номенклатура,"; ИначеЕсли СтрокаГрупп.Наименование = "Контрагенты" Тогда Запрос.Текст = Запрос.Текст + " | ВложенныйЗапрос.Контрагент КАК Контрагенты,"; ИначеЕсли СтрокаГрупп.Наименование = "Документ" Тогда Запрос.Текст = Запрос.Текст + " | ВложенныйЗапрос.Регистратор КАК Документ,"; КонецЕсли; КонецЦикла; Запрос.Текст = Запрос.Текст + " | СУММА(ВложенныйЗапрос.ПродажиКоличество) КАК ПродажиКоличество, | СУММА(ВложенныйЗапрос.ВозвратыКоличество) КАК ВозвратыКоличество, | СУММА(ВложенныйЗапрос.ПродажиСумма) КАК ПродажиСумма, | СУММА(ВложенныйЗапрос.ВозвратыСумма) КАК ВозвратыСумма |ИЗ | (ВЫБРАТЬ | ПродажиОбороты.Контрагент КАК Контрагент, | ПродажиОбороты.Номенклатура КАК Номенклатура, | ПродажиОбороты.Регистратор КАК Регистратор, | ВЫБОР | КОГДА ПродажиОбороты.КоличествоОборот > 0 | ТОГДА ПродажиОбороты.КоличествоОборот | ИНАЧЕ 0 | КОНЕЦ КАК ПродажиКоличество, | ВЫБОР | КОГДА ПродажиОбороты.КоличествоОборот < 0 | ТОГДА ПродажиОбороты.КоличествоОборот | ИНАЧЕ 0 | КОНЕЦ КАК ВозвратыКоличество, | ВЫБОР | КОГДА ПродажиОбороты.СтоимостьОборот > 0 | ТОГДА ПродажиОбороты.СтоимостьОборот | ИНАЧЕ 0 | КОНЕЦ КАК ПродажиСумма, | ВЫБОР | КОГДА ПродажиОбороты.СтоимостьОборот < 0 | ТОГДА ПродажиОбороты.СтоимостьОборот | ИНАЧЕ 0 | КОНЕЦ КАК ВозвратыСумма | ИЗ | РегистрНакопления.Продажи.Обороты( | &ДатаНач, | &ДатаКон, | Регистратор, | Организация = &Организация | И Контрагент В ИЕРАРХИИ (&СписокКонтрагентов)) КАК ПродажиОбороты | | ОБЪЕДИНИТЬ ВСЕ | | ВЫБРАТЬ | ВложенныйЗапрос.Контрагент, | ВложенныйЗапрос.Номенклатура, | ВложенныйЗапрос.Ссылка, | ВложенныйЗапрос.Количество, | ВложенныйЗапрос.КоличествоВозврат, | ВложенныйЗапрос.Сумма, | ВложенныйЗапрос.СуммаВозврат | ИЗ | (ВЫБРАТЬ | ВЫБОР | КОГДА ПеремещениеТоваровТовары.Ссылка.СкладОтправитель = &СкладОтправитель | ТОГДА ПеремещениеТоваровТовары.Ссылка.СкладОтправитель | ИНАЧЕ ПеремещениеТоваровТовары.Ссылка.СкладПолучатель | КОНЕЦ КАК Контрагент, | ПеремещениеТоваровТовары.Номенклатура КАК Номенклатура, | ПеремещениеТоваровТовары.Ссылка КАК Ссылка, | ВЫБОР | КОГДА ПеремещениеТоваровТовары.Ссылка.СкладОтправитель = &СкладОтправитель | И ПеремещениеТоваровТовары.Ссылка.СкладПолучатель = &СкладПолучатель | ТОГДА ПеремещениеТоваровТовары.Количество | ИНАЧЕ 0 | КОНЕЦ КАК Количество, | ВЫБОР | КОГДА ПеремещениеТоваровТовары.Ссылка.СкладОтправитель = &СкладПолучатель | И ПеремещениеТоваровТовары.Ссылка.СкладПолучатель = &СкладОтправитель | ТОГДА -ПеремещениеТоваровТовары.Количество | ИНАЧЕ 0 | КОНЕЦ КАК КоличествоВозврат, | ВЫБОР | КОГДА ПеремещениеТоваровТовары.Ссылка.СкладОтправитель = &СкладОтправитель | И ПеремещениеТоваровТовары.Ссылка.СкладПолучатель = &СкладПолучатель | ТОГДА ПеремещениеТоваровТовары.Количество * ЦеныНоменклатурыСрезПоследних.Цена | ИНАЧЕ 0 | КОНЕЦ КАК Сумма, | ВЫБОР | КОГДА ПеремещениеТоваровТовары.Ссылка.СкладОтправитель = &СкладПолучатель | И ПеремещениеТоваровТовары.Ссылка.СкладПолучатель = &СкладОтправитель | ТОГДА -ПеремещениеТоваровТовары.Количество * ЦеныНоменклатурыСрезПоследних.Цена | ИНАЧЕ 0 | КОНЕЦ КАК СуммаВозврат | ИЗ | Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаКон, ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних | ПО ПеремещениеТоваровТовары.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура | ГДЕ | ПеремещениеТоваровТовары.Ссылка.Организация = &Организация | И ПеремещениеТоваровТовары.Ссылка.СкладОтправитель В(&СписокСкладов) | И ПеремещениеТоваровТовары.Ссылка.СкладПолучатель В(&СписокСкладов) | И ПеремещениеТоваровТовары.Ссылка.Дата МЕЖДУ &ДатаНач И &ДатаКон) КАК ВложенныйЗапрос) КАК ВложенныйЗапрос | И ПеремещениеТоваровТовары.Ссылка.ПометкаУдаления = ЛОЖЬ | И ПеремещениеТоваровТовары.Ссылка.Проведен = ИСТИНА |"; //Запрос.Текст = Запрос.Текст + //" //| СУММА(ВЫБОР //| КОГДА ПродажиОбороты.КоличествоОборот > 0 //| ТОГДА ПродажиОбороты.КоличествоОборот //| ИНАЧЕ 0 //| КОНЕЦ) КАК ПродажиКоличество, //| СУММА(ВЫБОР //| КОГДА ПродажиОбороты.КоличествоОборот < 0 //| ТОГДА ПродажиОбороты.КоличествоОборот //| ИНАЧЕ 0 //| КОНЕЦ) КАК ВозвратыКоличество, //| СУММА(ВЫБОР //| КОГДА ПродажиОбороты.СтоимостьОборот > 0 //| ТОГДА ПродажиОбороты.СтоимостьОборот //| ИНАЧЕ 0 //| КОНЕЦ) КАК ПродажиСумма, //| СУММА(ВЫБОР //| КОГДА ПродажиОбороты.СтоимостьОборот < 0 //| ТОГДА ПродажиОбороты.СтоимостьОборот //| ИНАЧЕ 0 //| КОНЕЦ) КАК ВозвратыСумма //|ИЗ //| РегистрНакопления.Продажи.Обороты( //| &ДатаНач, //| &ДатаКон, //| Регистратор"; Запрос.Текст = Запрос.Текст + " |ГДЕ |"; ЕстьУсловия = 0; //Если ЗначениеЗаполнено(Организация) Тогда // Запрос.Текст = Запрос.Текст + //" Организация = &Организация"; // ЕстьУсловия = 1; //КонецЕсли; Если (СписокКонтр.Количество() <> 0) Тогда Запрос.Текст = Запрос.Текст + " Контрагент В ИЕРАРХИИ (&СписокКонтрагентов)"; ЕстьУсловия = 1; КонецЕсли; Если (ЕстьУсловия = 0) И (ЗначениеЗаполнено(Номенклатура)) Тогда Запрос.Текст = Запрос.Текст + " Номенклатура В ИЕРАРХИИ (&ВыбНоменклатура)"; ЕстьУсловия = 1; ИначеЕсли ЗначениеЗаполнено(Номенклатура) Тогда Запрос.Текст = Запрос.Текст + " И Номенклатура В ИЕРАРХИИ (&ВыбНоменклатура)"; КонецЕсли; //Иначе // Запрос.Текст = Запрос.Текст + //" ) КАК ПродажиОбороты"; //КонецЕсли; Запрос.Текст = Запрос.Текст + " | СГРУППИРОВАТЬ ПО"; ВключеныГруппы = 0; Для Каждого СтрокаГрупп Из Группировки Цикл Если СтрокаГрупп.Включить = Ложь Тогда Продолжить; КонецЕсли; Если ВключеныГруппы = 1 Тогда Запрос.Текст = Запрос.Текст + ", "; КонецЕсли; Если СтрокаГрупп.Наименование = "Контрагенты" Тогда Запрос.Текст = Запрос.Текст + " ВложенныйЗапрос.Контрагент"; ИначеЕсли СтрокаГрупп.Наименование = "Номенклатура" Тогда Запрос.Текст = Запрос.Текст + " ВложенныйЗапрос.Номенклатура"; ИначеЕсли СтрокаГрупп.Наименование = "Документ" Тогда Запрос.Текст = Запрос.Текст + " ВложенныйЗапрос.Регистратор"; КонецЕсли; ВключеныГруппы = 1; КонецЦикла; ВключеныУпорядочивания = 0; Для Каждого СтрокаГрупп Из Группировки Цикл Если СтрокаГрупп.Включить = Ложь Тогда Продолжить; КонецЕсли; Если ВключеныУпорядочивания = 1 Тогда Запрос.Текст = Запрос.Текст + ", "; Иначе Запрос.Текст = Запрос.Текст + " |УПОРЯДОЧИТЬ ПО"; КонецЕсли; Если СтрокаГрупп.Наименование = "Контрагенты" Тогда Запрос.Текст = Запрос.Текст + " Контрагент.Наименование"; ИначеЕсли СтрокаГрупп.Наименование = "Номенклатура" Тогда Запрос.Текст = Запрос.Текст + " Номенклатура.Наименование"; ИначеЕсли СтрокаГрупп.Наименование = "Документ" Тогда Запрос.Текст = Запрос.Текст + " Регистратор.Дата"; КонецЕсли; ВключеныУпорядочивания = 1; КонецЦикла; //Запрос.Текст = Запрос.Текст + //" //| //|УПОРЯДОЧИТЬ ПО //| Регистратор Запрос.Текст = Запрос.Текст + " |ИТОГИ | СУММА(ПродажиКоличество), | СУММА(ВозвратыКоличество), | СУММА(ПродажиСумма), | СУММА(ВозвратыСумма) |ПО | ОБЩИЕ,"; ВключеныГруппы = 0; Для Каждого СтрокаГрупп Из Группировки Цикл Если СтрокаГрупп.Включить = Ложь Тогда Продолжить; КонецЕсли; Если ВключеныГруппы = 1 Тогда Запрос.Текст = Запрос.Текст + ", "; КонецЕсли; Запрос.Текст = Запрос.Текст + " " + СокрЛП(СтрокаГрупп.Наименование); Если СтрокаГрупп.Тип = "Иерархия" Тогда Запрос.Текст = Запрос.Текст + " ИЕРАРХИЯ"; ИначеЕсли СтрокаГрупп.Тип = "ТолькоИерархия" Тогда Запрос.Текст = Запрос.Текст + " ТОЛЬКО ИЕРАРХИЯ"; КонецЕсли; ВключеныГруппы = 1; КонецЦикла; Запрос.УстановитьПараметр("СкладОтправитель", СкладОтправитель); Запрос.УстановитьПараметр("СкладПолучатель", СкладПолучатель); СписокСкладов = Новый Массив; СписокСкладов.Добавить(СкладОтправитель); СписокСкладов.Добавить(СкладПолучатель); Запрос.УстановитьПараметр("СписокСкладов", СписокСкладов); Запрос.УстановитьПараметр("ТипЦен", ТипЦен); Запрос.УстановитьПараметр("ДатаНач", НачалоДня(ДатаНач)); Если ЗначениеЗаполнено(ДатаКон) Тогда Запрос.УстановитьПараметр("ДатаКон", КонецДня(ДатаКон)); Иначе Запрос.УстановитьПараметр("ДатаКон", КонецДня(ТекущаяДата())); КонецЕсли; Если ЗначениеЗаполнено(Организация) Тогда Запрос.УстановитьПараметр("Организация", Организация); КонецЕсли; Если ЗначениеЗаполнено(Номенклатура) Тогда Запрос.УстановитьПараметр("ВыбНоменклатура", Номенклатура); КонецЕсли; Запрос.УстановитьПараметр("СписокКонтрагентов", СписокКонтр); Результат = Запрос.Выполнить(); Возврат Результат; КонецФункции |
|||
1
Grusswelle
01.09.11
✎
14:22
|
(0) И чо?
|
|||
2
Amiralnar
01.09.11
✎
14:22
|
Через плечо. Построитель наше фсё.
|
|||
3
forforumandspam
01.09.11
✎
14:25
|
(1) Присоединяюсь.
|
|||
4
Wingless
01.09.11
✎
14:28
|
(2) Сделаем свой построитель, с преферансом и куртизанками!
Для Каждого СтрокаГрупп Из Группировки Цикл Если СтрокаГрупп.Включить = Ложь Тогда Продолжить; КонецЕсли; Если СтрокаГрупп.Наименование = "Номенклатура" Тогда Запрос.Текст = Запрос.Текст + " | ВложенныйЗапрос.Номенклатура КАК Номенклатура,"; ИначеЕсли СтрокаГрупп.Наименование = "Контрагенты" Тогда Запрос.Текст = Запрос.Текст + " | ВложенныйЗапрос.Контрагент КАК Контрагенты,"; ИначеЕсли СтрокаГрупп.Наименование = "Документ" Тогда Запрос.Текст = Запрос.Текст + " | ВложенныйЗапрос.Регистратор КАК Документ,"; КонецЕсли; КонецЦикла; Шедевр. |
|||
5
forforumandspam
01.09.11
✎
14:36
|
(4) Это тоже. В запросе получаем и номенклатуру и продажи/возвраты, а используются только контрагенты.
ЗапросКонтр = Новый Запрос; ЗапросКонтр.Текст = "ВЫБРАТЬ | ПродажиОбороты.Контрагент КАК Контрагент, | ПродажиОбороты.Номенклатура КАК Номенклатура, | ПродажиОбороты.Регистратор КАК Регистратор, | СУММА(ВЫБОР | КОГДА ПродажиОбороты.КоличествоОборот > 0 | ТОГДА ПродажиОбороты.КоличествоОборот | ИНАЧЕ 0 | КОНЕЦ) КАК ПродажиКоличество, | СУММА(ВЫБОР | КОГДА ПродажиОбороты.КоличествоОборот < 0 | ТОГДА ПродажиОбороты.КоличествоОборот | ИНАЧЕ 0 | КОНЕЦ) КАК ВозвратыКоличество, | СУММА(ВЫБОР | КОГДА ПродажиОбороты.СтоимостьОборот > 0 | ТОГДА ПродажиОбороты.СтоимостьОборот | ИНАЧЕ 0 | КОНЕЦ) КАК ПродажиСумма, | СУММА(ВЫБОР | КОГДА ПродажиОбороты.СтоимостьОборот < 0 | ТОГДА ПродажиОбороты.СтоимостьОборот | ИНАЧЕ 0 | КОНЕЦ) КАК ВозвратыСумма |ИЗ | РегистрНакопления.Продажи.Обороты( | &ДатаНач, | &ДатаКон, | Регистратор, | Организация = &Организация"; Если ЗначениеЗаполнено(Номенклатура) Тогда ЗапросКонтр.Текст = ЗапросКонтр.Текст + " И Номенклатура В ИЕРАРХИИ (&ВыбНоменклатура)"; КонецЕсли; ЗапросКонтр.Текст = ЗапросКонтр.Текст + ") КАК ПродажиОбороты | |СГРУППИРОВАТЬ ПО | ПродажиОбороты.Контрагент | ,ПродажиОбороты.Номенклатура, | ПродажиОбороты.Регистратор |ИТОГИ | СУММА(ПродажиКоличество), | СУММА(ВозвратыКоличество), | СУММА(ПродажиСумма), | СУММА(ВозвратыСумма) |ПО //| ОБЩИЕ, | Контрагент"; //| Номенклатура ТОЛЬКО ИЕРАРХИЯ, //| Регистратор"; ЗапросКонтр.УстановитьПараметр("Организация", Организация); ЗапросКонтр.УстановитьПараметр("ДатаНач", НачалоДня(ДатаНач)); Если ЗначениеЗаполнено(ДатаКон) Тогда ЗапросКонтр.УстановитьПараметр("ДатаКон", КонецДня(ДатаКон)); Иначе ЗапросКонтр.УстановитьПараметр("ДатаКон", КонецДня(ТекущаяДата())); КонецЕсли; ЗапросКонтр.УстановитьПараметр("ВыбНоменклатура", Номенклатура); Рез = ЗапросКонтр.Выполнить().Выгрузить(); Сч = 0; Пока Сч < Рез.Количество() Цикл ТекСтрока = Рез.Получить(Сч); Если ЗначениеЗаполнено(ТекСтрока.Контрагент) = Ложь Тогда Рез.Удалить(ТекСтрока); Продолжить; КонецЕсли; Если ТекСтрока.Контрагент.ПринадлежитЭлементу(ГруппаСотрудники) Тогда Рез.Удалить(ТекСтрока); Продолжить; КонецЕсли; Сч = Сч + 1; КонецЦикла; Рез.Свернуть("Контрагент"); |
|||
6
Megas
01.09.11
✎
14:38
|
(0) Хвастаешся своим кодом? Скромнее надо быть =)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |