• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

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

Guest

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

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

.......

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

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

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

KiR

совсем не понял почему нельзя использовать ГДЕ и задать определенные условия?
запрос конструктором строился? если нет - нада попробовтаь конструктором и указать там условине необходимое. Если сравнение с переменной - не забыть передать этот параметр запросу
 
T

thinkfast

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

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

Guest

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

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

..........

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

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

KiR

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

Guest

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

1. Если передавать в условие не параметром - он ругается.
2. Орфограффию проверил - все норм. (скопировал из справочника)

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

thinkfast

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

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

Тогда в точке останова будут рассчитаны:
текСтрока.Имя1 "Служба главного инженера" Строка
 
G

Guest

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

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

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

KiR

попробуй выбрать просто статью - РасходныйКассовыйОрдер.СтатьяДвиженияДенежныхСредств КАК Статья
 
T

thinkfast

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

unknown181538

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

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

KiR

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

unknown181538

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

thinkfast

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

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

KiR

unknown181538, суть не в этом. у него не работает и так как ты написал. скорее всего нада открывать журнал и смотреть есть ли там РКО за выбранный период, если есть - заполнен ли реквизит и какой он имеет тип...
 
U

unknown181538

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

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

thinkfast

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

Я копировал все и запрос и обработку.

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!