Запрос по РКО в 1с 8.1

  • Автор темы Guest
  • Дата начала
G

Guest

#1
Доброго времени суток!

Необходимо выбрать те РКО у которых определенная "Статья Движения Денежных Средств". Пишу код
[codebox]
ЗапросОРасходниках.Текст =
"ВЫБРАТЬ
| РасходныйКассовыйОрдер.СуммаДокумента КАК СуммаДокумента,
| РасходныйКассовыйОрдер.Контрагент.Наименование КАК Продавец,
| РасходныйКассовыйОрдер.СтатьяДвиженияДенежныхСредств.Наименование КАК Имя1
|ИЗ
| Документ.РасходныйКассовыйОрдер КАК РасходныйКассовыйОрдер";

.......

ТЗРКО = Новый ТаблицаЗначений;
ТЗРКО = ЗапросОРасходниках.Выполнить().Выгрузить();
для Инд=0 по ТЗРКО.Количество()-1 цикл
Предупреждение(ТипЗнч(ТЗРКО.Получить(Инд).Имя1));
КонецЦикла;
[/codebox]

Предупреждение выводит NULL. Подскажите что делать?

P.S. Соответственно не могу использовать конструкцию ГДЕ в запросе, так как сравнение с NULL не проходит.
 

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#2
совсем не понял почему нельзя использовать ГДЕ и задать определенные условия?
запрос конструктором строился? если нет - нада попробовтаь конструктором и указать там условине необходимое. Если сравнение с переменной - не забыть передать этот параметр запросу
 
T

thinkfast

#3
гм...
Попробовал то, что сам написал, не то ... удалил

Мысль осталось токо одна, этот реквизит не был заполнен при записи/проведении дока. Поэтому пустая ссылка, значение реквезита/регистра Пустая ссылка/Null.
При передачи в таблицу пустого значения и формируется Null
больше идей нет корми инфой )))
 
G

Guest

#4
Я делал вот так: [codebox]
ЗапросОРасходниках = Новый Запрос;
ЗапросОРасходниках.Текст =
"ВЫБРАТЬ
| РасходныйКассовыйОрдер.СуммаДокумента КАК СуммаДокумента,
| РасходныйКассовыйОрдер.Контрагент.Наименование КАК Продавец
|ИЗ
| Документ.РасходныйКассовыйОрдер КАК РасходныйКассовыйОрдер
|ГДЕ
| РасходныйКассовыйОрдер.СтатьяДвиженияДенежныхСредств.Наименование ПОДОБНО &Парам1";

ЗапросОРасходниках.УстановитьПараметр("Парам1", "Выплата заработной платы");

..........

ТЗРКО = Новый ТаблицаЗначений;
ТЗРКО = ЗапросОРасходниках.Выполнить().Выгрузить();
для инд=0 по ТЗРКО.Количество()-1 цикл
Предупреждение(ТЗРКО.Получить(инд).Продавец);
КонецЦикла;
[/codebox]

Предупреждение ничего не выводит.
Куда копать???
 

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#5
ну в случае строки в принцыпе переменную можно было вообще не передавать...
Код:
РасходныйКассовыйОрдер.СтатьяДвиженияДенежныхСредств.Наименование ПОДОБНО ""Выплата заработной платы"";
я бы вот как сделал - убрал бы условие, посмотрел бы отладчиком выходную таблицу значения с отбором из запроса. Может там вообще нет подобного - естественно что в отбор ничо и не попадет. А если и есть - тогда возможно проблема с орфографией - можно прям с таблицы правильную строку скопировать.
 
G

Guest

#6
ну в случае строки в принцыпе переменную можно было вообще не передавать...
Код:
РасходныйКассовыйОрдер.СтатьяДвиженияДенежныхСредств.Наименование ПОДОБНО "Выплата заработной платы";
я бы вот как сделал - убрал бы условие, посмотрел бы отладчиком выходную таблицу значения с отбором из запроса. Может там вообще нет подобного - естественно что в отбор ничо и не попадет. А если и есть - тогда возможно проблема с орфографией - можно прям с таблицы правильную строку скопировать.
1. Если передавать в условие не параметром - он ругается.
2. Орфограффию проверил - все норм. (скопировал из справочника)

3-й день уже бьюсь над этим.
 
T

thinkfast

#7
Выполни запрос как советует KiR без условия полный.
И через точку останова посмотри строки таблицы, а лучше сюда выложи вместе посмотрим что формирует запрос.

Например:
Код:
для Инд=0 по ТЗРКО.Количество()-1 цикл	
текСтрока = ТЗРКО.Получить(Инд); //Получить строку ТЗ
Предупреждение(ТипЗнч(ТЗРКО.Получить(Инд).Имя1));
КонецЦикла;
Тогда в точке останова будут рассчитаны:
текСтрока.Имя1 "Служба главного инженера" Строка
 
G

Guest

#8
Запрос:
[codebox]
ЗапросОРасходниках = Новый Запрос;
ЗапросОРасходниках.Текст =
"ВЫБРАТЬ
| РасходныйКассовыйОрдер.СуммаДокумента КАК СуммаДокумента,
| РасходныйКассовыйОрдер.Контрагент.Наименование КАК Продавец,
| РасходныйКассовыйОрдер.СтатьяДвиженияДенежныхСредств.Наименование КАК Статья
|ИЗ
| Документ.РасходныйКассовыйОрдер КАК РасходныйКассовыйОрдер";
[/codebox]

Вывод:
[codebox]
Индекс Значение элемента Тип элемента СуммаДокумента Продавец Статья
0 СтрокаТаблицыЗначений СтрокаТаблицыЗначений 150 "Бубнова Галина"
1 СтрокаТаблицыЗначений СтрокаТаблицыЗначений 123 "Бердалиева Оксана"
2 СтрокаТаблицыЗначений СтрокаТаблицыЗначений 150 "Бубнова Галина"
[/codebox]

В статье пусто (((
 

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#9
попробуй выбрать просто статью - РасходныйКассовыйОрдер.СтатьяДвиженияДенежныхСредств КАК Статья
 
T

thinkfast

#11
Напрашивается вопрос:
А в самом доке этот реквизит заполнен?
 

unknown181538

НеГуру
28.12.2008
1 417
0
#12
[codebox]Процедура КнопкаВыполнитьНажатие(Кнопка)
ЗапросОРасходниках = Новый ЗАпрос;
ЗапросОРасходниках.Текст =
"ВЫБРАТЬ
| РасходныйКассовыйОрдер.СуммаДокумента КАК СуммаДокумента,
| РасходныйКассовыйОрдер.Контрагент КАК Продавец,
| РасходныйКассовыйОрдер.СтатьяДвиженияДенежныхСредств КАК Имя1
|ИЗ
| Документ.РасходныйКассовыйОрдер КАК РасходныйКассовыйОрдер";

ТЗРКО = Новый ТаблицаЗначений;
ТЗРКО = ЗапросОРасходниках.Выполнить().Выгрузить();
для Инд=0 по ТЗРКО.Количество()-1 цикл
сообщить(ТипЗнч(ТЗРКО.Получить(Инд).Имя1));
КонецЦикла;
КонецПроцедуры[/codebox]
Иначе не правильно в таблицу выгружается.
И еще - условие ставьте лучше не по наименованию, а по ссылке.
 

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#13
unknown181538, ты ошибаешься! Новый ТЗ можно не делать, все правильно выгружается в таблицу значений! Причем таблицу значений в отладчике можно простомтеть до ее формирования. Например точку остановы поставить на ТЗРКО = ЗапросОРасходниках.Выполнить().Выгрузить(); - ТЗРКО будет иметь тип НЕОПРЕДЕЛЕНО, а ЗапросОРасходниках.Выполнить().Выгрузить() уже будет заполненной таблицей значений!
я более склонен согласиться с thinkfast
 

unknown181538

НеГуру
28.12.2008
1 417
0
#14
KiR , я не про то.
Если в запросе идет обращение через 2 точки, ТЗ в результате, имеет сложную структуру, не такую, как мы предполагаем.
Я убрал ".Наименование" в запросе. И у меня все работает.
 
T

thinkfast

#15
А у меня и с ".Наименование" работает...
А у него по-твоему варианту идет пустая строка...

Вот не знаю, может ли это быть различием версий, навсяк у меня 1С:Предприятие 8.1 (8.1.12.101)
 

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#16
unknown181538, суть не в этом. у него не работает и так как ты написал. скорее всего нада открывать журнал и смотреть есть ли там РКО за выбранный период, если есть - заполнен ли реквизит и какой он имеет тип...
 

unknown181538

НеГуру
28.12.2008
1 417
0
#17
Ну, надо сначала смотреть выполняется ли вообще запрос, выводится ли наименование, и затем - попадает ли оно в ТЗ?
thinkfast , а ты код полностью копировал, или только запрос выполнял?

PS. Я не прав - все работает в обоих случаях - У меня в исходном варианте выдается Null и "Строка" - вероятно Null там где не заполнено, что несомненно правильно.
 
T

thinkfast

#18
Запрос выпоняется, попадают все значения кроме Статьи вот его результат он привел:
Индекс Значение элемента Тип элемента СуммаДокумента Продавец Статья
0 СтрокаТаблицыЗначений СтрокаТаблицыЗначений 150 "Бубнова Галина"
1 СтрокаТаблицыЗначений СтрокаТаблицыЗначений 123 "Бердалиева Оксана"
2 СтрокаТаблицыЗначений СтрокаТаблицыЗначений 150 "Бубнова Галина"
Я копировал все и запрос и обработку.

PS. Я не прав - все работает в обоих случаях - У меня в исходном варианте выдается Null и "Строка" - вероятно Null там где не заполнено, что несомненно правильно.
unknown181538 =) К этому мы и пришли ) что null из-за пустого значния )