|
Выбрать в запросе Пустые Субконто | ☑ | ||
---|---|---|---|---|
0
romaku
16.08.11
✎
00:11
|
Есть запрос.
ВЫБРАТЬ ОсновнойОбороты.Счет, ОсновнойОбороты.Субконто1, ОсновнойОбороты.Субконто2, ОсновнойОбороты.Субконто3, ОсновнойОбороты.Регистратор, ОсновнойОбороты.НомерСтроки, ОсновнойОбороты.СуммаОборот, ОсновнойОбороты.СуммаОборотДт, ОсновнойОбороты.СуммаОборотКт ИЗ РегистрБухгалтерии.Основной.Обороты( &НачДата, &КонДата, Запись, Счет = &Счет, , Организация = &Организация И Субконто1 = &Субконто1, , ) КАК ОсновнойОбороты Какой установить параметр запроса &Субконто, чтобы выбрать обороты с незаполненым Субконто. Тип Субконто зависит от счета. Понимаю, что по идее туда нужно вставлять Справочник.ПустаяСсылка(), но не понимаю как это сделать, так как счет тоже передается в запрос, а на разных счетах разные субконто и разные справочники. |
|||
1
ilkoder
16.08.11
✎
00:29
|
Так тебе это нужно для конкретного счета или для разных (всех)?
|
|||
2
romaku
16.08.11
✎
00:32
|
(1) для разных отдельных счетов. счет выбирается на форме.
|
|||
3
ilkoder
16.08.11
✎
00:36
|
В параметрах запросах у тебя пропущен массив видов субконто. Если его заполнить в зависимости от счета, то тогда спокойно сможешь выбирать эти самые пустые субконто (погляди как в типовых документах сделано)
|
|||
4
romaku
16.08.11
✎
00:46
|
типовой нет :(
|
|||
5
romaku
16.08.11
✎
13:16
|
как от вида субконто перейти к значению пустых субконто, чтобы их выбрать?
|
|||
6
romaku
16.08.11
✎
13:45
|
УсловиеПоСубконто = "";
Для К = 1 По СчетИз.ВидыСубконто.Количество() Цикл Если ЗначениеЗаполнено(ЭлементыФормы["СубконтоИз"+К].Значение) тогда УсловиеПоСубконто = УсловиеПоСубконто + " И Субконто"+К + " = &Субконто"+К; Запрос.УстановитьПараметр("Субконто"+К, ЭлементыФормы["СубконтоИз"+К].Значение); Иначе УсловиеПоСубконто = УсловиеПоСубконто + " И Субконто"+К + " = &Субконто"+К; Запрос.УстановитьПараметр("Субконто"+К, Null); КонецЕсли КонецЦикла; Запрос.Текст = "ВЫБРАТЬ | ОсновнойОбороты.Счет, | ОсновнойОбороты.Субконто1, | ОсновнойОбороты.Субконто2, | ОсновнойОбороты.Субконто3, | ОсновнойОбороты.Регистратор, | ОсновнойОбороты.НомерСтроки, | ОсновнойОбороты.СуммаОборот, | ОсновнойОбороты.СуммаОборотДт, | ОсновнойОбороты.СуммаОборотКт, | ОсновнойОбороты.Организация, | ОсновнойОбороты.ВидКапитала, | ОсновнойОбороты.План, | ОсновнойОбороты.КоличествоОборотДт, | ОсновнойОбороты.КоличествоОборотКт, | ОсновнойОбороты.ВалютнаяСуммаОборотДт, | ОсновнойОбороты.ВалютнаяСуммаОборотКт | |ИЗ | РегистрБухгалтерии.Основной.Обороты( | "+?(ЗначениеЗаполнено(НачПериода),"&НачДата","")+", | "+?(ЗначениеЗаполнено(КонПериода),"&КонДата","")+", | Запись, | Счет = &Счет, | , | "+?(ЗначениеЗаполнено(ЮрЛицо),"Организация = &Организация","")+ УсловиеПоСубконто +" | , | ) КАК ОсновнойОбороты"; Что мне нужно написать цикле заполнения условий субконто, в блоке "иначе", чтобы запрос выбирал мне пустые субконто |
|||
7
unregistered
16.08.11
✎
13:58
|
Это должно работать для основной таблицы регистра. Для виртуальной таблицы оборотов - не уверен.
ВидыСоставныхСубконто = Новый Соответсвие; Составной = ВидыСоставныхСубконто.Получить(ЭлементыФормы["СубконтоИз"+К].Значение.Ключ); // Если Составной=неопределено Тогда Составной = ЭлементыФормы["СубконтоИз"+К].Значение.Ключ.ТипЗначения.Типы().Количество() > 1; // Кэширование: вид субконто + признак Состовной ВидыСоставныхСубконто.Вставить(ЭлементыФормы["СубконтоИз"+К].Значение.Ключ,Составной); // КонецЕсли; // Если Составной Тогда Запрос.УстановитьПараметр("Субконто"+К, Неопределено); Иначе Запрос.УстановитьПараметр("Субконто"+К, Новый(ЭлементыФормы["СубконтоИз"+К].Значение.Ключ.ТипЗначения); КонецЕсли; |
|||
8
romaku
16.08.11
✎
14:03
|
Поле объекта не обнаружено (Ключ)
Составной = ВидыСоставныхСубконто.Получить(ЭлементыФормы["СубконтоИз"+К].Значение.Ключ); // |
|||
9
Axel2009
16.08.11
✎
14:03
|
неопределено туда вставлять надо
|
|||
10
unregistered
16.08.11
✎
14:08
|
(8) Убери ".Ключ"
Я код копировал с типовой. ошибся. Там ниже аналогичная ошибка - тоже надо убрать ".Ключ". |
|||
11
romaku
16.08.11
✎
14:08
|
(9) в блок иначе вместо null?
Не выбирает ничего :( |
|||
12
unregistered
16.08.11
✎
14:12
|
Для субконто составного типа должно быть Неопределено.
Для субконто ссылочного типа (не составных) значение должно быть - пустая ссылка соответствующего типа. NULL тут быть не должно, т.к. нет ни каких соединений. откуда ему взяться? В БД значения Null не храняться. |
|||
13
romaku
16.08.11
✎
14:13
|
(10) {Форма.Форма(55)}: Значение не является значением объектного типа (ТипЗначения)
Составной = ЭлементыФормы["СубконтоИз"+К].Значение.ТипЗначения.Типы().Количество() > 1; // Кэширование: вид субконто + признак Состовной |
|||
14
Axel2009
16.08.11
✎
14:15
|
(12) значение везде должно быть неопределено. другое дело что могут записать как пустую ссылку у субконто при записи.
|
|||
15
unregistered
16.08.11
✎
14:16
|
Ой....
Замени "ЭлементыФормы["СубконтоИз"+К].Значение" на "СчетИз.ВидыСубконто[К-1].ВидСубконто" должно быть что-то типа Составной = СчетИз.ВидыСубконто[К-1].ВидСубконто.ТипЗначения.Типы().Количество() > 1; |
|||
16
unregistered
16.08.11
✎
14:20
|
+ к (15) и вообще в (7) я фигню написал :))
Должно быть: ВидыСоставныхСубконто = Новый Соответсвие; Составной = ВидыСоставныхСубконто.Получить(СчетИз.ВидыСубконто[К-1].ВидСубконто); // Если Составной=неопределено Тогда Составной = СчетИз.ВидыСубконто[К-1].ВидСубконто.ТипЗначения.Типы().Количество() > 1; // Кэширование: вид субконто + признак Состовной ВидыСоставныхСубконто.Вставить(СчетИз.ВидыСубконто[К-1].ВидСубконто,Составной); // КонецЕсли; // Если Составной Тогда Запрос.УстановитьПараметр("Субконто"+К, Неопределено); Иначе Запрос.УстановитьПараметр("Субконто"+К, Новый(СчетИз.ВидыСубконто[К-1].ВидСубконто.ТипЗначения)); КонецЕсли; Это всё после Иначе... |
|||
17
romaku
16.08.11
✎
14:34
|
(16)
{Форма.Форма(63)}: Тип не определен (Справочник ссылка: Юридические лица) Запрос.УстановитьПараметр("Субконто"+К, Новый(СчетИз.ВидыСубконто[К-1].ВидСубконто.ТипЗначения)); |
|||
18
unregistered
16.08.11
✎
14:38
|
Замени строку с ошибкой на это:
ТипСубконты = СчетИз.ВидыСубконто[К-1].ВидСубконто.ТипЗначения; ЗначениеПараметра = ТипСубконты.ПривестиЗначение(); Запрос.УстановитьПараметр("Субконто"+К, ЗначениеПараметра); |
|||
19
romaku
16.08.11
✎
14:49
|
(18) когда обрабатывает блок иначе, запрос выдает все записи, и с заполненными субконто, и с пустыми :(
|
|||
20
Axel2009
16.08.11
✎
14:51
|
(19) намного проще
ВЫБРАТЬ ОсновнойОбороты.Счет, ОсновнойОбороты.Субконто1, ОсновнойОбороты.Субконто2, ОсновнойОбороты.Субконто3, ОсновнойОбороты.Регистратор, ОсновнойОбороты.НомерСтроки, ОсновнойОбороты.СуммаОборот, ОсновнойОбороты.СуммаОборотДт, ОсновнойОбороты.СуммаОборотКт ИЗ РегистрБухгалтерии.Основной.Обороты( &НачДата, &КонДата, Запись, Счет = &Счет, , Организация = &Организация И Субконто1 В (&Субконто1), , ) КАК ОсновнойОбороты и на вход дать все пустые ссылки и неопределено. так будет намного точнее. чем все то что насоветовали тут. |
|||
21
unregistered
16.08.11
✎
14:57
|
(19) Показывай весь код.
|
|||
22
unregistered
16.08.11
✎
14:58
|
(20) Ну если конфа не УПП, то можно, понадеявшись, что не вылетит ошибка про 256 таблиц.
|
|||
23
Axel2009
16.08.11
✎
15:02
|
(22) ага, составной тип у субконто. заполнили пустым значением какого либо из справочников. выведет?
|
|||
24
Axel2009
16.08.11
✎
15:03
|
+(23) в упп видов субконто порядка 60штук. где там 255 нашел?
|
|||
25
romaku
16.08.11
✎
15:08
|
УсловияСубконто="";
Запрос = Новый Запрос; // надо выстроить условие по субконто так, что елси не заполнено, то выбирает с пустой аналитикой УсловиеПоСубконто = ""; Для К = 1 По СчетИз.ВидыСубконто.Количество() Цикл Если ЗначениеЗаполнено(ЭлементыФормы["СубконтоИз"+К].Значение) тогда УсловиеПоСубконто = УсловиеПоСубконто + " И Субконто"+К + " В (&Субконто"+К+")"; Запрос.УстановитьПараметр("Субконто"+К, ЭлементыФормы["СубконтоИз"+К].Значение); Иначе УсловиеПоСубконто = УсловиеПоСубконто + " И Субконто"+К + " В (&Субконто"+К+")"; Запрос.УстановитьПараметр("Субконто"+К, Неопределено); КонецЕсли; КонецЦикла; Запрос.Текст = "ВЫБРАТЬ | ОсновнойОбороты.Счет, | ОсновнойОбороты.Субконто1, | ОсновнойОбороты.Субконто2, | ОсновнойОбороты.Субконто3, | ОсновнойОбороты.Регистратор, | ОсновнойОбороты.НомерСтроки, | ОсновнойОбороты.СуммаОборот, | ОсновнойОбороты.СуммаОборотДт, | ОсновнойОбороты.СуммаОборотКт, | ОсновнойОбороты.Организация, | ОсновнойОбороты.ВидКапитала, | ОсновнойОбороты.План, | ОсновнойОбороты.КоличествоОборотДт, | ОсновнойОбороты.КоличествоОборотКт, | ОсновнойОбороты.ВалютнаяСуммаОборотДт, | ОсновнойОбороты.ВалютнаяСуммаОборотКт | |ИЗ | РегистрБухгалтерии.Основной.Обороты( | "+?(ЗначениеЗаполнено(НачПериода),"&НачДата","")+", | "+?(ЗначениеЗаполнено(КонПериода),"&КонДата","")+", | Запись, | Счет = &Счет, | , | "+?(ЗначениеЗаполнено(ЮрЛицо),"Организация = &Организация","")+ УсловиеПоСубконто +" | , | ) КАК ОсновнойОбороты"; // сообщить("Текст запроса : "+Запрос.Текст); Если ЗначениеЗаполнено(НачПериода) тогда Запрос.УстановитьПараметр("НачДата", НачПериода); КонецЕсли; Если ЗначениеЗаполнено(КонПериода) тогда Запрос.УстановитьПараметр("КонДата", КонПериода); КонецЕсли; Если ЗначениеЗаполнено(ЮрЛицо) тогда Запрос.УстановитьПараметр("Организация", ЮрЛицо); КонецЕсли; Запрос.УстановитьПараметр("Счет", СчетИз); ТаблицаЗапроса = Запрос.Выполнить().Выгрузить(); ТАблицаЗапроса.ВыбратьСтроку(); //для контроля |
|||
26
romaku
16.08.11
✎
15:09
|
конфа самописная
|
|||
27
unregistered
16.08.11
✎
15:21
|
Сделай проще:
УсловиеПоСубконто = ""; Для К = 1 По СчетИз.ВидыСубконто.Количество() Цикл ЗначениеПараметра = ЭлементыФормы["СубконтоИз"+К].Значение; ТипСубконты = СчетИз.ВидыСубконто[К-1].ВидСубконто.ТипЗначения; ЗначениеПараметра = ТипСубконты.ПривестиЗначение(ЗначениеПараметра); УсловиеПоСубконто = УсловиеПоСубконто + " И Субконто"+К + " В (&Субконто"+К+")"; КонецЦикла; |
|||
28
unregistered
16.08.11
✎
15:23
|
+ к (27) Забыл строку
Запрос.УстановитьПараметр("Субконто"+К, ЗначениеПараметра); |
|||
29
romaku
16.08.11
✎
15:26
|
(27) {Форма.Форма(93)}: Ошибка при вызове метода контекста (Выполнить): {(26, 46)}: Не задано значение параметра "Субконто1"
Организация = &Организация И Субконто1 В (<<?>>&Субконто1) И Субконто2 В (&Субконто2) ТаблицаЗапроса = Запрос.Выполнить().Выгрузить(); |
|||
30
unregistered
16.08.11
✎
15:26
|
(29) См. (28)
|
|||
31
romaku
16.08.11
✎
16:01
|
вроде работает. буду тестировать. спасибо большое.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |