![]() |
|
Помогите пожалуйста с группировкой | ☑ | ||
---|---|---|---|---|
0
betty
28.04.14
✎
17:28
|
Приветствую
Помогите пожалуйста с группировкой по Документу Есть запросы, один вытягивает данные из Реализации Бухгалтерии, другой вытягивает данные из Реализации Торговли. Сравниваем и выводим различия В итоге получается что нет свертки по документу, т.е Документ 00010 01.01.2014 | Валенки синие| склад1 | 50 Документ 00010 01.01.2014 | Валенки красные| склад1 | 40 Документ 00010 01.01.2014 | Валенки зеленые| склад1 | 60 Документ 00011 01.01.2014 | Валенки зеленые| склад2 | 90 ---------------------------------------------------------------------- Процедура ПоискДляРеализации(ДатаНач,ДатаКон,НаименованиеДок) Экспорт НомерПП = 0; Запрос=БД_COM.NewObject("Запрос"); ТекстЗапроса = ВернутьТекстЗапроса(НаименованиеДок); Запрос.УстановитьПараметр("ДатаНач", ДатаНач); Запрос.УстановитьПараметр("ДатаКон", ДатаКон); Запрос.УстановитьПараметр("Организации", ВернутьСписокОрганизации(БД_COM)); Запрос.УстановитьПараметр("ПоВсем", ?(Организации.Количество()=0,ИСТИНА,ЛОЖЬ)); Запрос.Текст=ТекстЗапроса; ТЗ_УТ=Запрос.Выполнить().Выбрать(); Макет = ВнешнийОтчет.ПолучитьМакет("Макет"); ОбластьШапка = Макет.ПолучитьОбласть("Шапка"); ОбластьСтрока = Макет.ПолучитьОбласть("Строка"); ПустойТовар = Справочники.Номенклатура.ПустаяСсылка(); ЗапросБП = новый Запрос; ЗапросБП.Текст = ТекстЗапроса; ЗапросБП.УстановитьПараметр("ДатаНач", ДатаНач); ЗапросБП.УстановитьПараметр("ДатаКон",ДатаКон); ЗапросБП.УстановитьПараметр("Организации", Организации); ЗапросБП.УстановитьПараметр("ПоВсем", ?(Организации.Количество()=0,ИСТИНА,ЛОЖЬ)); ТЗ_БП = ЗапросБП.Выполнить().Выгрузить(); ТЗ_БП.Колонки.Добавить("Префикс"); ТЗ_БП.Колонки.Добавить("СК"); // сравнительный коэфициент ТЗ_БП.ЗаполнитьЗначения(2,"Префикс"); ТЗ_БП.ЗаполнитьЗначения(1,"СК"); ОбщаяТЗ = ТЗ_БП.Скопировать(); Пока ТЗ_УТ.Следующий() Цикл НоваяСтрокаТЗ = ОбщаяТЗ.Добавить(); НоваяСтрокаТЗ.Дата = ТЗ_УТ.Дата; НоваяСтрокаТЗ.Склад = ТЗ_УТ.Склад; НоваяСтрокаТЗ.Наименование = ТЗ_УТ.Наименование;//.Description; НоваяСтрокаТЗ.Количество = ТЗ_УТ.Количество; НоваяСтрокаТЗ.Артикул = ТЗ_УТ.Артикул; НоваяСтрокаТЗ.Код = ТЗ_УТ.Код; НоваяСтрокаТЗ.Номер = ТЗ_УТ.Номер; НоваяСтрокаТЗ.Сумма = Окр(ТЗ_УТ.Сумма,2); НоваяСтрокаТЗ.Префикс = 3; НоваяСтрокаТЗ.СК = 1; КонецЦикла; ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок"); ОбластьЗаголовок.Параметры.Заголовок = "Расхождения по документам вида "+НаименованиеДок+" с "+Формат(ДатаНач,"ДФ=dd.MM.yyyy")+" по "+Формат(ДатаКон,"ДФ=dd.MM.yyyy"); ТабДок.Вывести(ОбластьЗаголовок); ТабДок.Вывести(ОбластьШапка); //ТабДок.ФиксацияСверху = 2; //по коду Если ПоКоду Тогда ОбщаяТЗ.Свернуть("Наименование,Код,Дата,Склад,Количество,Номер,Сумма","СК,Префикс"); // удалим строки с равным значением Наименование,Артикул,Количество,Номер,Сумма УдаляемыеСтроки = ОбщаяТЗ.НайтиСтроки(Новый Структура("СК",2)); Для каждого СтрокаТаблицы Из Удаляемыестроки Цикл ОбщаяТЗ.Удалить(СтрокаТаблицы) КонецЦикла; ОбщаяТЗ2 = ОбщаяТЗ.Скопировать(); // временная ТЗ что бы получить только список ОбщаяТЗ2.Свернуть("Номер,Код, Дата, Склад"); ОбщаяТЗ2.Сортировать("Номер,Код, Дата, Склад"); СтруктураПоиска = Новый Структура; Для каждого строка ИЗ ОбщаяТЗ2 Цикл ОбластьСтрока.Параметры.Дата = Строка.Дата; ОбластьСтрока.Параметры.Склад = Строка.Склад; ОбластьСтрока.Параметры.Номер = Строка.Номер; Если Строка.Склад="склад в пути" ИЛИ Строка.Склад="Рекламный ЭдЛ" ИЛИ Строка.Склад= "Рекламный СИ" Тогда ОбластьСтрока.Параметры.Дата = ""; ОбластьСтрока.Параметры.Склад = ""; ОбластьСтрока.Параметры.Номер = ""; //ОбластьСтрока.Параметры.Артикул = ""; МассивСтрок = ОбщаяТЗ2.НайтиСтроки(СтруктураПоиска); ОбластьСтрока.Параметры.НаименованиеБП = ""; ОбластьСтрока.Параметры.КоличествоБП = ""; ОбластьСтрока.Параметры.КоличествоУТ = ""; ОбластьСтрока.Параметры.НаименованиеУТ = ""; ОбластьСтрока.Параметры.СуммаБП = ""; ОбластьСтрока.Параметры.СуммаУТ = ""; Иначе СтруктураПоиска.Вставить("Номер",строка.Номер); СтруктураПоиска.Вставить("Код",строка.Код); СтруктураПоиска.Вставить("Дата", Строка.Дата); СтруктураПоиска.Вставить("Склад", Строка.Склад); ///////////////////////////////////////////////// МассивСтрок = ОбщаяТЗ.НайтиСтроки(СтруктураПоиска); ОбластьСтрока.Параметры.НаименованиеБП = ""; ОбластьСтрока.Параметры.КоличествоБП = ""; ОбластьСтрока.Параметры.КоличествоУТ = ""; ОбластьСтрока.Параметры.НаименованиеУТ = ""; ОбластьСтрока.Параметры.СуммаБП = ""; ОбластьСтрока.Параметры.СуммаУТ = ""; Для каждого Строка из МассивСтрок Цикл Если Строка.Префикс = 2 Тогда ОбластьСтрока.Параметры.НаименованиеБП = Строка.Наименование; ОбластьСтрока.Параметры.КоличествоБП = Строка.Количество; ОбластьСтрока.Параметры.СуммаБП = Строка.Сумма; ИначеЕсли Строка.Префикс = 3 Тогда ОбластьСтрока.Параметры.КоличествоУТ = Строка.Количество; ОбластьСтрока.Параметры.НаименованиеУТ = Строка.Наименование; ОбластьСтрока.Параметры.СуммаУТ = Строка.Сумма; КонецЕсли; КонецЦикла; Если НЕ Строка.Префикс = 5 Тогда НомерПП = НомерПП+1; ОбластьСтрока.Параметры.НомерПП = НомерПП; ТабДок.Вывести(ОбластьСтрока); КонецЕсли; КонецЕсли КонецЦикла; КонецЕсли; КонецПроцедуры |
|||
1
Ёпрст
гуру
28.04.14
✎
17:40
|
(0) це очевидно - не совпадение типов в строках ТЗ.. при сворачивании, они тупо остаются теми, которые есть, в первом случае - скорее всего, ссылки, во втором - строки *наименование)..
|
|||
2
Ёпрст
гуру
28.04.14
✎
17:40
|
И это, всё в одном запросе получить, не предлагать ?
Всё проще, чем выгружать в 2 тз. объединять их и сворачивать. |
|||
3
betty
28.04.14
✎
17:42
|
(2) у нас склады по разному в базах называются.
и плюс запрос общий, так как не одну Реализацию рассматриваем, а еще Поступление, Перемещение и ТребованиеНакладную |
|||
4
betty
28.04.14
✎
17:43
|
а если напрямую к документу обращаться - то очень долгое выполнение
|
|||
5
Ёпрст
гуру
28.04.14
✎
17:48
|
(3) :)
И че с того ? Да зовите их как угодно, хоть склад васи и пети. Они же у вас по какому-то реквизиту засинхрированны ? По ид, коду ..еще как ? Вот по этому реквизиту и лепите соответствие в тексте запроса. |
|||
6
Ёпрст
гуру
28.04.14
✎
17:48
|
И будет, один запрос, без всяких выгрузок в тз и прочего.
|
|||
7
Ёпрст
гуру
28.04.14
✎
17:52
|
ну и.. если хочешь оставить "всё как есть", то будьте добры - приводите всё к одному типу, в вашем случае - к строке.
Заместо документа - имейте представление, аналогично со складом и номенклатурой - их наименование.. Тогда, если наименования в обоих базах одинаковые, есть шанец правильно "свернуть" ТЗ на выходе. |
|||
8
betty
28.04.14
✎
17:56
|
(7) спасибо:)буду пробовать
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |