|
Как правильно переделать такой механизм? | ☑ | ||
---|---|---|---|---|
0
SherifSP
06.08.13
✎
12:23
|
Весь механизм занимает более 3 минут;
1. запросом получаем переплаты по контрагенту //Получим таблицу переплат Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.Организация, | ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.Контрагент, | ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДоговорКонтрагента КАК Договор, | РеализацияТоваровУслуг.ТорговаяТочка КАК ТорговаяТочка, | РеализацияТоваровУслуг.ТорговыйПредставитель КАК ТорговыйПредставитель, | ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом КАК ДокументРасчетов, | ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата КАК ДатаДокументаРасчетов, | ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ВидРасчетовСКонтрагентом КАК ВидРасчетов, | ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.СуммаВзаиморасчетовОстаток КАК Сумма, | ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.Сделка, | РеализацияТоваровУслуг.КомандаТорговогоПредставителя КАК КомандаТорговогоПредставителя, | ЕСТЬNULL(РеализацияТоваровУслуг.Форма2, ИСТИНА) КАК Форма2, | РеализацияТоваровУслуг.Ссылка КАК Реализация |ИЗ | РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки(, ДоговорКонтрагента.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровКонтрагентов.СПоставщиком)) КАК ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки | ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг | ПО ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.Контрагент = РеализацияТоваровУслуг.Контрагент | И (НАЧАЛОПЕРИОДА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Дата, ГОД) = НАЧАЛОПЕРИОДА(РеализацияТоваровУслуг.Дата, ГОД)) | И (РеализацияТоваровУслуг.Номер ПОДОБНО ""%0"" + ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.НомерВходящегоДокумента) |ГДЕ | ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.СуммаВзаиморасчетовОстаток < 0 | И ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом ССЫЛКА Документ.ПоступлениеТоваровУслуг | И ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.СкладОрдер = &СкладОрдер | |УПОРЯДОЧИТЬ ПО | ДатаДокументаРасчетов"; Запрос.УстановитьПараметр("СкладОрдер",ВыбСклад); ТаблицаПереплат = Запрос.Выполнить().Выгрузить(); 2. А вот здесь меня картина немного шокировала, циклом перебирается полученная ТЗ "ТаблицаПереплат" и ищется таблица долгов ТаблицаДолгов = ПолучитьТаблицуРН(СтрокаТЗ.ДокументПереплаты,СтрокаТЗ.ТорговаяТочка); Если ТаблицаДолгов = Неопределено Тогда Продолжить; КонецЕсли; СтрокаРегистратора = ТаблицаДолгов.Найти(СтрокаТаблицыПереплат.Реализация,"Регистратор"); И тд. А вот и сама функция ПолучитьТаблицуРН: Функция ПолучитьТаблицуРН(ПриходныйДокумент,ТорговаяТочка) ТекстЗапроса = "ВЫБРАТЬ РАЗЛИЧНЫЕ | ПоступлениеТоваровУслугТовары.Номенклатура КАК Номенклатура |ИЗ | Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары |ГДЕ | ПоступлениеТоваровУслугТовары.Ссылка.Ссылка = &Ссылка"; Запрос = Новый Запрос(ТекстЗапроса); Запрос.УстановитьПараметр("Ссылка",ПриходныйДокумент); Результат = Запрос.Выполнить(); Если Результат.Пустой() Тогда Возврат Неопределено; Иначе СписокТары = Результат.Выгрузить().ВыгрузитьКолонку("Номенклатура"); КонецЕсли; ТекстЗапроса = "ВЫБРАТЬ РАЗЛИЧНЫЕ | РеализацияТоваровУслугТовары.Ссылка КАК Ссылка |ИЗ | Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары |ГДЕ | РеализацияТоваровУслугТовары.Ссылка.ТорговаяТочка = &ТорговаяТочка | И РеализацияТоваровУслугТовары.Ссылка.Дата <= &Дата | И РеализацияТоваровУслугТовары.Ссылка.Проведен | И РеализацияТоваровУслугТовары.Номенклатура.ВидУпаковки.Тара В (&СписокТары) | |УПОРЯДОЧИТЬ ПО | РеализацияТоваровУслугТовары.Ссылка.Дата УБЫВ"; Запрос = Новый Запрос(ТекстЗапроса); Запрос.УстановитьПараметр("Дата",КонецДня(ПриходныйДокумент.Дата)); Запрос.УстановитьПараметр("ТорговаяТочка",ТорговаяТочка); Запрос.УстановитьПараметр("СписокТары",СписокТары); тз = Запрос.Выполнить().Выгрузить(); ТекстЗапроса = "ВЫБРАТЬ РАЗЛИЧНЫЕ | ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Период КАК Период, | ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Регистратор, | ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.НомерСтроки, | ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Активность, | ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.ВидДвижения, | ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.ДоговорКонтрагента КАК Договор, | ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Сделка, | ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.ДокументРасчетовСКонтрагентом, | ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.ВидРасчетовСКонтрагентом, | ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Организация, | ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Контрагент, | ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.СуммаВзаиморасчетов, | ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.ДокументРасчетовСКонтрагентом.КомандаТорговогоПредставителя КАК КомандаТорговогоПредставителя, | ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.ДокументРасчетовСКонтрагентом.ТорговыйПредставитель КАК ТорговыйПредставитель |ИЗ | РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов КАК ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов |ГДЕ | ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Регистратор В(&СписокРН) | |УПОРЯДОЧИТЬ ПО | Период УБЫВ"; Запрос.Текст = ТекстЗапроса; Запрос.УстановитьПараметр("СписокРН",тз.ВыгрузитьКолонку("Ссылка")); Возврат Запрос.Выполнить().Выгрузить(); КонецФункции |
|||
1
SherifSP
06.08.13
✎
12:28
|
+(0) 1. Думал выгрузить отдельно колонки параметров в массив;
2. Функцию ПолучитьТаблицуРН вызывать перед циклом и по полученной тз искать строки |
|||
2
Cube
06.08.13
✎
12:30
|
Тысяча запросов с кривой обработкой результата... Ты давай задачу опиши лучше...
В любом случае, нужно стараться решить всё одним запросом. |
|||
3
SherifSP
06.08.13
✎
12:36
|
(2) Долго описывать, очень долго)
|
|||
4
Cube
06.08.13
✎
12:37
|
(3) То есть, описывать задачу ты не хочешь, но хочешь, чтобы народ прочитал твою портянку, сам разобрался что к чему и переделал всё за тебя? Ну что, похвально, настоящий адинэсник...
|
|||
5
zladenuw
06.08.13
✎
12:39
|
берешь типовой отчет взаиморасчетов и куришь его долго
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |