|
v7: не работает выборка из справочника | ☑ | ||
---|---|---|---|---|
0
Irina3gger
26.07.17
✎
09:42
|
Доброго времени суток, даже не знаю как правильно сформулировать вопрос.
Есть отчет о задолженностях. При его сформирование появляется окошка в котором можно выбрать критерии по которым он формируется. Но дело в том, что не важно какие критерии ты выбираешь то отчет не меняет своего вида, т.е. он выглядит так как если бы не одно боле не было заполнено. Помогите понять в чем была допущена ошибка и где я могу ошибаться, потому что мне не понятно из-за чего это может происходить |
|||
1
Рэйв
26.07.17
✎
09:44
|
>> из-за чего это может происходить
Как вариант- просто показали левое окошко для понтов:-) И потом его данные никуда не пошли |
|||
2
2S
26.07.17
✎
09:46
|
> При его сформирование появляется окошка
русскиймана незнать? Если реквизит используется для отбора в запросе, смотрите условие этого отбора в самом запросе. Если тупо выборка, смотрите условия |
|||
3
Irina3gger
26.07.17
✎
09:47
|
(2) Вот код вдруг поможет
Перем Таблица; //====================================================================== Процедура Сформировать() сз = СоздатьОбъект("СписокЗначений"); ТабЗначВсего = СоздатьОбъект("ТаблицаЗначений"); ТабЗначОбъект = СоздатьОбъект("ТаблицаЗначений"); ТабЗначИтогРайон = СоздатьОбъект("ТаблицаЗначений"); ТабОбъект = СоздатьОбъект("ТаблицаЗначений"); ТабЗначЗаказчик = СоздатьОбъект("ТаблицаЗначений"); ТЗ = СоздатьОбъект("ТаблицаЗначений"); ТабОбъект.НоваяКолонка("с1"); ТабОбъект.НоваяКолонка("с2"); ТабОбъект.НоваяКолонка("с3"); ТабОбъект.НоваяКолонка("с4"); ТабЗначВсего.НоваяКолонка("с1","Число"); ТабЗначВсего.НоваяКолонка("с2","Число"); ТабЗначВсего.НоваяКолонка("с3","Число"); ТабЗначИтогРайон.НоваяКолонка("с1","Число"); ТабЗначИтогРайон.НоваяКолонка("с2","Число"); ТабЗначИтогРайон.НоваяКолонка("с3","Число"); ТабЗначЗаказчик.НоваяКолонка("с1","Число"); ТабЗначЗаказчик.НоваяКолонка("с2","Число"); ТабЗначЗаказчик.НоваяКолонка("с3","Число"); Таб = СоздатьОбъект("Таблица"); RS = СоздатьОбъект("ODBCRecordset"); RS.УстБД1С(); ТекстЗапроса = " |SELECT | Жур.IDDoc as [Док $Документ], | Жур.IDDocDef as Док_вид, | Спр.Code as Код, | Спр.Descr as Наименование, | $Док.Объект as [Объект $Справочник.Объект], | $Док.Сумма as Сумма, | $Док.ДолгПоОплате as ДолгПоОплате, | $Док.ПризнакПодпис as [ПризнакПодпис $Перечисление.Признак], | $Док.ВидАкта as [ВидАкта $Справочник.ВидАкт], | $Спр.Заказчик as [Заказчик $Справочник.Заказчик], | $Спр.Район as [Район $Справочник.Области] |FROM | _1SJourn as Жур |INNER JOIN | $Документ.АктОбъемаРабот as Док ON Док.IDDoc = Жур.IDDoc |INNER JOIN | $Справочник.Объект as Спр ON Спр.ID = $Док.Объект | |WHERE | Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ | AND Жур.Closed & 1 = 1 | AND $Док.ВидАкта <> :ВидАктов | AND $Док.ДолгПоОплате <> 0 | AND $Спр.Заказчик = :ТекЗаказчик |" ; Таб.ВывестиСекцию("ШапкаОсновная"); Таб.ВывестиСекцию("Шапка"); ТекЗаказчик = ""; Номер = 1; СпрРайон = СоздатьОбъект("Справочник.Области"); СпрРайон.ПорядокКодов(); СпрРайон.ВыбратьЭлементы(); Пока СпрРайон.ПолучитьЭлемент() = 1 Цикл Таб.ВывестиСекцию("Район"); СпрЗаказчик = СоздатьОбъект("Справочник.Заказчик"); СпрЗаказчик.ВыбратьЭлементы(); Пока СпрЗаказчик.ПолучитьЭлемент() = 1 Цикл Если СпрЗаказчик.Район = СпрРайон.ТекущийЭлемент() Тогда RS.УстановитьТекстовыйПараметр("НачДата", НачПер); RS.УстановитьТекстовыйПараметр("КонДата", ОконПер); RS.УстановитьТекстовыйПараметр("ОстМеньше", ОстМеньше); спрВидАкта = СоздатьОбъект("Справочник.ВидАкт"); Если спрВидАкта.НайтиПоКоду(2) = 1 Тогда RS.УстановитьТекстовыйПараметр("ВидАктов", спрВидАкта.ТекущийЭлемент()); КонецЕсли; RS.УстановитьТекстовыйПараметр("ТекЗаказчик",СпрЗаказчик.ТекущийЭлемент()); ТЗ = RS.ВыполнитьИнструкцию(ТекстЗапроса); ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку() = 1 Цикл СуммаНеПодпис = 0; СуммаПодпис = 0; ДолгЭкспертизы = 0; Если Число(ТЗ.ВидАкта.Код) = Число(4) Тогда ДолгЭкспертизы = ТЗ.ДолгПоОплате; Иначе Если ТЗ.ПризнакПодпис = Перечисление.Признак.Нет Тогда СуммаНеПодпис = ТЗ.ДолгПоОплате; ИначеЕсли ТЗ.ПризнакПодпис = Перечисление.Признак.Да Тогда СуммаПодпис = ТЗ.ДолгПоОплате; КонецЕсли; КонецЕсли; ТабОбъект.НоваяСтрока(); ТабОбъект.с1 = ТЗ.Объект; ТабОбъект.с2 = СуммаНеПодпис; ТабОбъект.с3 = СуммаПодпис; ТабОбъект.с4 = ДолгЭкспертизы; КонецЦикла; ТабОбъект.Свернуть("с1","с2,с3,с4"); Если (ТабОбъект.Итог("с2") > ОстМеньше) или (ТабОбъект.Итог("с3") > ОстМеньше) или (ТабОбъект.Итог("с4") > ОстМеньше) Тогда Таб.ВывестиСекцию("Заказчик"); КонецЕсли; ТабОбъект.ВыбратьСтроки(); Пока ТабОбъект.ПолучитьСтроку() = 1 Цикл Если (ТабОбъект.с2 > ОстМеньше) или (ТабОбъект.с3 > ОстМеньше) или (ТабОбъект.с4 > ОстМеньше) Тогда сз.УдалитьВсе(); сз.ДобавитьЗначение(ТабОбъект.с1.Код); Таб.ВывестиСекцию("Объект"); Номер = Номер + 1; ТабЗначЗаказчик.НоваяСтрока(); ТабЗначЗаказчик.с1 = ТабОбъект.с2; ТабЗначЗаказчик.с2 = ТабОбъект.с3; ТабЗначЗаказчик.с3 = ТабОбъект.с4; КонецЕсли; КонецЦикла; ТабОбъект.УдалитьСтроки(); Если (ТабЗначЗаказчик.Итог("с1") > ОстМеньше) или (ТабЗначЗаказчик.Итог("с2") > ОстМеньше) или (ТабЗначЗаказчик.Итог("с3") > ОстМеньше) Тогда Таб.ВывестиСекцию("Итого"); КонецЕсли; ТабЗначИтогРайон.НоваяСтрока(); ТабЗначИтогРайон.с1 = ТабЗначЗаказчик.Итог("с1"); ТабЗначИтогРайон.с2 = ТабЗначЗаказчик.Итог("с2"); ТабЗначИтогРайон.с3 = ТабЗначЗаказчик.Итог("с3"); ТабЗначЗаказчик.УдалитьСтроки(); КонецЕсли; КонецЦикла; Если (ТабЗначИтогРайон.Итог("с1") > ОстМеньше) или (ТабЗначИтогРайон.Итог("с2") > ОстМеньше) или (ТабЗначИтогРайон.Итог("с3") > ОстМеньше) Тогда Таб.ВывестиСекцию("ИтогоРайон"); КонецЕсли; ТабЗначВсего.НоваяСтрока(); ТабЗначВсего.с1 = ТабЗначИтогРайон.Итог("с1"); ТабЗначВсего.с2 = ТабЗначИтогРайон.Итог("с2"); ТабЗначВсего.с3 = ТабЗначИтогРайон.Итог("с3"); ТабЗначИтогРайон.УдалитьСтроки(); КонецЦикла; Таб.ВывестиСекцию("Всего"); Таб.Опции(0,1,9); Таб.ПараметрыСтраницы(1,,,0,0,0,10,0,10,1,0); Таб.ТолькоПросмотр(1); Таб.Показать(); КонецПроцедуры //====================================================================== Процедура ОбработкаЯчейкиТаблицы(список,фл) фл=1; тип=ТипЗначенияСтр(список); Если тип="СписокЗначений" Тогда фл=0; спрОбъект = СоздатьОбъект("Справочник.Объект"); Если спрОбъект.НайтиПоКоду(СтрЗаменить(список.ПолучитьЗначение(1),"""","_")) = 1 Тогда ОткрытьФормуМодально("Обработка.ЖурналОбъекта", спрОбъект.ТекущийЭлемент()); КонецЕсли; конецЕсли; КонецПроцедуры //====================================================================== Процедура ПриОткрытии() НачПер = "01.01.2017"; ОконПер = ТекущаяДата(); Район = (); ОстМеньше = 50; КонецПроцедур |
|||
4
aka AMIGO
26.07.17
✎
09:50
|
(2) Девушка из Минска..
(3) Район = (); - забавно :) |
|||
5
aka AMIGO
26.07.17
✎
09:53
|
(3) Отчет в составе конфигурации?
Если -да, то выложи его в какой-нибудь файлообменник. А получить - ПКМ на этом отчете в дереве конфигурации, далее "Сохранить как внешний" |
|||
6
Ёпрст
26.07.17
✎
09:54
|
(3) Феерический п...ц
:) Такая помесь применяемых методов и всё без понимания куда зачем и почему |
|||
7
Ёпрст
26.07.17
✎
09:55
|
ЗЫ: если че, в тесте запроса ОстМеньше нигде не используется, что вы там по нему фильтровать хотите - загадка.
|
|||
8
Irina3gger
26.07.17
✎
09:57
|
(7)я заметила что форма вообще не как не влияет на то что в итоге формируется, все равно выходит один и тот же документ
кто то может объяснить как так вообще вышло |
|||
9
Irina3gger
26.07.17
✎
10:16
|
(7)
я поняла, лучше сделать отчет с самого начала. Только вот подскажите пожалуйста как сделать чтоб выборка все таки работала? |
|||
10
Ёпрст
26.07.17
✎
10:35
|
(7)
1. Не делать запрос в цикле 2. Не делать выборку из справочника(ов) 3. Переписать всё на прямой запрос. 4. переписать весь отчет |
|||
11
ildary
26.07.17
✎
10:44
|
(10) 3. С козырей зашел :) Девушка обычные механизмы не умеет, а её в сразу в пучину
|
|||
12
Irina3gger
26.07.17
✎
10:50
|
(11) я сама рву волосы от того что вижу. но ничего страшного и не с таким справлялись.
(10) я сейчас попробую переделать, и через некоторое время скину что выйдет, правда я так и не поняла как сделать чтоб работала выборка, но что-то придумаю |
|||
13
Herby
26.07.17
✎
11:16
|
дописывай nolock, иначе таблицы будешь блокировать на время формирования запроса
|FROM | _1SJourn as Жур (nolock) |INNER JOIN | $Документ.АктОбъемаРабот as Док (nolock) ON Док.IDDoc = Жур.IDDoc |INNER JOIN | $Справочник.Объект as Спр (nolock) ON Спр.ID = $Док.Объект |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |