Почему не правильно работает выборка в запросе ?
Добрый день, понять не могу делаю выборку из РегСвед
3 поля
у ресурс1 дата
у ресурс 2 строка
у ресурс3
строка сравниваю в итоге по дате даже отбор не проходит а если закоментить то работает только второе условие.
В консоле запросов смотрел там отбор даже в таком вариате на проходит почему ?
3 поля
у ресурс1 дата
у ресурс 2 строка
у ресурс3
строка сравниваю в итоге по дате даже отбор не проходит а если закоментить то работает только второе условие.
ДатаДокумента = Объект.Дата;
НомерДокумента = Объект.Номер;
Организация = Объект.Организация;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДвиженияУФДляСписания.Период КАК ДатаУФ,
| ДвиженияУФДляСписания.Ресурс2 КАК НомерУФ,
| ДвиженияУФДляСписания.Ресурс3 КАК ОрганизацияУФ
|ИЗ
| РегистрСведений.ДвиженияУФДляСписания КАК ДвиженияУФДляСписания
|ГДЕ
| Ресурс1 = """+ДатаДокумента+"""
|И
| Ресурс2 = """+НомерДокумента+"""
|И
| Ресурс3 = """+Организация+""" ";
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
ДатаУФ = Выборка.ДатаУФ;
НомерУФ = Выборка.НомерУФ;
ОрганизацияУФ = Выборка.ОрганизацияУФ;
КонецЦикла;
Если ДатаУФ = ДатаДокумента Тогда
Если ТипЗнч(НомерУФ) = ТипЗнч(НомерДокумента) Тогда
Сообщить("Работает0");
Если ОрганизацияУФ = Тип("СправочникСсылка.Организации") Тогда
Сообщить("Работает1");
ЭтаФорма.Объект.СнятьСЗаписи = Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;
ПоказатьВ консоле запросов смотрел там отбор даже в таком
Ресурс1 = "02.03.2021 12:47:50"
По теме из базы знаний
Найденные решения
(18) Вы намеренно делаете как хуже?
Я так понял, что нужно найти по всем этим данным запись в РС, и если найдено, то проставить реквизит в истина.
Тогда так:
Я так понял, что нужно найти по всем этим данным запись в РС, и если найдено, то проставить реквизит в истина.
Тогда так:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДвиженияУФДляСписания.Период КАК ДатаУФ
|ИЗ
| РегистрСведений.ДвиженияУФДляСписания КАК ДвиженияУФДляСписания
|ГДЕ
| Ресурс1 = &ДатаДокумента
|И
| Ресурс2 = &НомерДокумента
|И
| Ресурс3 = &Организация";
Запрос.УстановитьПараметр("ДатаДокумента", Объект.Дата);
Запрос.УстановитьПараметр("НомерДокумента", Объект.Номер);
Запрос.УстановитьПараметр("Организация", Объект.Организация);
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
Объект.ДокументГотовДляРедактирования = Истина;
КонецЕсли;
Показать
(20)
Неожиданный поворот. Серьезно? Сами делали регистр? Тренируетесь, или это на живой базе?
Почему не ссылочный тип справочника Организации?
Ну, только для Вас, наверно можно и так:
Только никому не говорите, что это я так посоветовал.
РегСвед Ресурс3 в который записывается Организация имеет тип Строка
Неожиданный поворот. Серьезно? Сами делали регистр? Тренируетесь, или это на живой базе?
Почему не ссылочный тип справочника Организации?
Ну, только для Вас, наверно можно и так:
Запрос.УстановитьПараметр("Организация", Объект.Организация.Наименование);
Только никому не говорите, что это я так посоветовал.
Остальные ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
(2)(3) Поправил
пока по двум выборкам
Тоже самое
пока по двум выборкам
Тоже самое
ДатаДокумента = Объект.Дата;
НомерДокумента = Объект.Номер;
Организация = Объект.Организация;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДвиженияУФДляСписания.Период КАК ДатаУФ,
| ДвиженияУФДляСписания.Ресурс2 КАК НомерУФ,
| ДвиженияУФДляСписания.Ресурс3 КАК ОрганизацияУФ
|ИЗ
| РегистрСведений.ДвиженияУФДляСписания КАК ДвиженияУФДляСписания
|ГДЕ
//| Ресурс1 = """+ДатаДокумента+"""
//|И
| Ресурс2 = &ВыбРесурс2
|И
| Ресурс3 = &ВыбРесурс3 ";
Запрос.УстановитьПараметр("ВыбРесурс2", НомерДокумента);
Запрос.УстановитьПараметр("ВыбРесурс3", Справочники.Организации.НайтиПоНаименованию(Организация));
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
ДатаУФ = Выборка.ДатаУФ;
НомерУФ = Выборка.НомерУФ;
ОрганизацияУФ = Выборка.ОрганизацияУФ;
//Если ДатаУФ = ДатаДокумента Тогда
Сообщить("Работает");
Если НомерУФ = НомерДокумента Тогда
Сообщить("Работает0");
Если ОрганизацияУФ = Организация Тогда
Сообщить("Работает1");
ЭтаФорма.Объект.СнятьСЗаписи = Истина;
КонецЕсли;
КонецЕсли;
//КонецЕсли;
КонецПроцедуры
Показать
(9) нет, просто Вы не поняли его комментарий. Вы внутри цикла присваиваете одним и тем же переменным значения. Это бессмысленно делать, так как они будут содержать значение только последнего прохода в цикле. Но и не означает нельзя. Все зависит от условий выполнения запроса. Если там только одна порция данных, то можно использовать Если Выборка.Следующий() Тогда. Но можно оставить и через Цикл. Главное понимать что делаете. В любом случае, значение выборки нужно получить только проходом через Выборка.Следующий().
(7)
пример
Запрос.УстановитьПараметр("ВыбРесурс3", Справочники.Организации.НайтиПоНаименованию(Организация));
ссылочный тип
пример
/// Как передать в запрос параметры ссылочных типов в 1с 8.3, 8.2
&НаСервере
Процедура КакПередатьВЗапросПараметрыСсылочныхТиповНаСервере()
// Сделаем отбор продуктов со сладким вкусом.
Запрос = Новый Запрос(
"ВЫБРАТЬ
| Наименование,
| Вкус
|ИЗ
| Справочник.Номенклатура
|ГДЕ
| Вкус = &ВыбВкус"
);
Запрос.УстановитьПараметр("ВыбВкус",
Справочники.Вкусы.НайтиПоНаименованию("Сладкий")
);
ВыполнитьЗапросИВывестиНаФорму(Запрос);
КонецПроцедуры
Показать
(12)Я уже запутался давайте сначала я получаю от объектов значения и подставляя их в запрос отбираю по ним нужную мне строку из РегСвед.
В РегСвед есть тип Дата у Ресурса1 у Ресурса2 строка Объект.Номер тип строка и Ресурс3 тип строка у Объекта.Организация ссылочный тип на справочники.Организации. Как мне тогда сделать выборку по ссылочному типу ?
В РегСвед есть тип Дата у Ресурса1 у Ресурса2 строка Объект.Номер тип строка и Ресурс3 тип строка у Объекта.Организация ссылочный тип на справочники.Организации. Как мне тогда сделать выборку по ссылочному типу ?
(13) не до конца понятна задача, что нужно в итоге. Вот, для примера:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДвиженияУФДляСписания.Период КАК ДатаУФ
|ИЗ
| РегистрСведений.ДвиженияУФДляСписания КАК ДвиженияУФДляСписания
|ГДЕ
| Ресурс2 = &ВыбРесурс2
|И
| Ресурс3 = &ВыбРесурс3 ";
Запрос.УстановитьПараметр("ВыбРесурс2", Объект.Номер);
Запрос.УстановитьПараметр("ВыбРесурс3", Объект.Организация);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() И Выборка.ДатаУФ = Объект.Дата Тогда
Объект.СнятьСЗаписи = Истина;
КонецЕсли;
Показать
(16)Вот так всё заработало
Осталось только ссылочный тип ОРГАНИЗАЦИЯ для отбора в запрос предать подскажите пожалуйста как это можно это сделать ?
&НаСервере
Процедура ПроверяемНаличиеПроведенияДокОтУчреж()
ДатаДокумента = Дата(Объект.Дата);
НомерДокумента = Объект.Номер;
Организация = Объект.Организация;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДвиженияУФДляСписания.Период КАК ДатаУФ,
| ДвиженияУФДляСписания.Ресурс2 КАК НомерУФ,
| ДвиженияУФДляСписания.Ресурс3 КАК ОрганизацияУФ
|ИЗ
| РегистрСведений.ДвиженияУФДляСписания КАК ДвиженияУФДляСписания
|ГДЕ
| Ресурс1 = &ДатаДокумента
|И
| Ресурс2 = &НомерДокумента ";
//|И
//| Ресурс3 = &Организация
Запрос.УстановитьПараметр("ДатаДокумента", ДатаДокумента);
Запрос.УстановитьПараметр("НомерДокумента", НомерДокумента);
//Запрос.УстановитьПараметр("Организация", Организация);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
ДатаУФ = Выборка.ДатаУФ;
НомерУФ = Выборка.НомерУФ;
ОрганизацияУФ = Выборка.ОрганизацияУФ;
КонецЦикла;
Если ДатаУФ = ДатаДокумента Тогда
Если НомерУФ = НомерДокумента Тогда
Сообщить("Работает0");
//Если ОрганизацияУФ = Организация Тогда
Сообщить("Работает1");
ЭтаФорма.Объект.ДокументГотовДляРедактирования = Истина;
//КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
ПоказатьОсталось только ссылочный тип ОРГАНИЗАЦИЯ для отбора в запрос предать подскажите пожалуйста как это можно это сделать ?
(18) Вы намеренно делаете как хуже?
Я так понял, что нужно найти по всем этим данным запись в РС, и если найдено, то проставить реквизит в истина.
Тогда так:
Я так понял, что нужно найти по всем этим данным запись в РС, и если найдено, то проставить реквизит в истина.
Тогда так:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДвиженияУФДляСписания.Период КАК ДатаУФ
|ИЗ
| РегистрСведений.ДвиженияУФДляСписания КАК ДвиженияУФДляСписания
|ГДЕ
| Ресурс1 = &ДатаДокумента
|И
| Ресурс2 = &НомерДокумента
|И
| Ресурс3 = &Организация";
Запрос.УстановитьПараметр("ДатаДокумента", Объект.Дата);
Запрос.УстановитьПараметр("НомерДокумента", Объект.Номер);
Запрос.УстановитьПараметр("Организация", Объект.Организация);
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
Объект.ДокументГотовДляРедактирования = Истина;
КонецЕсли;
Показать
(20)
Неожиданный поворот. Серьезно? Сами делали регистр? Тренируетесь, или это на живой базе?
Почему не ссылочный тип справочника Организации?
Ну, только для Вас, наверно можно и так:
Только никому не говорите, что это я так посоветовал.
РегСвед Ресурс3 в который записывается Организация имеет тип Строка
Неожиданный поворот. Серьезно? Сами делали регистр? Тренируетесь, или это на живой базе?
Почему не ссылочный тип справочника Организации?
Ну, только для Вас, наверно можно и так:
Запрос.УстановитьПараметр("Организация", Объект.Организация.Наименование);
Только никому не говорите, что это я так посоветовал.
(21)Про ссылочный тип я писал выше видимо друг друга не поняли. Вы конечно не поверите, но я в РегСвед ставил соответствующие типы, но в тот момент это не работало, начал пробовать другие варианты. Ваш код прост как автомат Калашникова, у меня сразу вопрос, "А что так можно было" )) Да моя конструкция слишком длинная.
(7) Это не строка, выше по коду присваивается из объекта. А судя по составу полей, это должен быть справочник организаций.
Просто у человека пока нет понимания как правильно делать.
Хотя данная конструкция и будет работать в данном случае и не важно что это "порнография" :-)
Просто у человека пока нет понимания как правильно делать.
Хотя данная конструкция и будет работать в данном случае и не важно что это "порнография" :-)
(14)Разъясняю. То что вы тут привели - это говнокод.
С такой реализацией чего-бы то ни было, удивительно, что вы работаете программистом.
У вас же знаний в этой области буквально ноль.
Почитайте хотя бы Радченко, "Практическое пособие разработчика", выполните сквозной пример.
С такой реализацией чего-бы то ни было, удивительно, что вы работаете программистом.
У вас же знаний в этой области буквально ноль.
Почитайте хотя бы Радченко, "Практическое пособие разработчика", выполните сквозной пример.
(14) По поводу кода в целом не скажу, так как не понимаю в каком контексте он выполняется.
А вот про этот случай распишу:
Делая вывод из всего написанного, строка кода должна была выглядеть так:
А вот про этот случай распишу:
Запрос.УстановитьПараметр("ВыбРесурс3", Справочники.Организации.НайтиПоНаименованию(Организация));
//Данный код ищет ссылку справочника организации.
Справочники.Организации.НайтиПоНаименованию(Организация)
//В качестве параметра у Вас указана переменная "Организация".
//Но в самом начале этой переменной вы уже присвоили ссылочный тип справочника организации, то есть искать еще раз ссылку на элемент справочника нет необходимости.
//Наоборот, данная ситуация может привести к ошибке, если будет два элемента с одинаковыми названиями, так как будет найден произвольный (не совсем так, но не будем вдаваться в подробности), который может быть не верным.
Делая вывод из всего написанного, строка кода должна была выглядеть так:
Запрос.УстановитьПараметр("ВыбРесурс3", Организация);
//или
Запрос.УстановитьПараметр("ВыбРесурс3", Объект.Организация);
Вакансии
Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)