Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
19 апр 2024, 06:01

Запрос к Регистру сведений

Автор frank, 24 фев 2011, 13:14

0 Пользователей и 1 гость просматривают эту тему.

frank

При оформлении документы "Выдача" формируется запрос к регистру сведений, для получения текущего статуса оборудования, поиск согласно ШтрихКоду. Основные данные т.к. Наименование и Отделение к которому оно прикреплено забивается из справочники "Оборудование". "Статус" (Выдано/Принято) выберается из РегистраСведений "ДвижениеОборудования" где накапливается данные внесенные этим же документом.

Что я делаю не так?????

Процедура СтатусОборуд(СтрокаТабличнойЧасти)
   Запрос = Новый Запрос;
   Запрос.Текст = "ВЫБРАТЬ
                  |   ДвижениеОборудования.Статус
                  |ИЗ
                  |   РегистрСведений.ДвижениеОборудования КАК ДвижениеОборудования
                  |ГДЕ
                  |   ДвижениеОборудования.ШтрихКод = &ШтрихКод"
               ;
   Запрос.УстановитьПараметр("ШтрихКод",СтрокаТабличнойЧасти.ШтрихКод);
   СтатусОборудования = Запрос.Выполнить();
   СтрокаТабличнойЧасти.Статус = СтатусОборудования;
КонецПроцедуры

Не могу получить "Статус"...

Klyacksa

Какие измерения имеет регистр "ДвижениеОборудования"? Регистр сведений периодический?

и вот это вот не правильно:
   СтатусОборудования = Запрос.Выполнить();
   СтрокаТабличнойЧасти.Статус = СтатусОборудования;


Если вы в запросе должны получить одну строку и из нее взять статус, то код будет такой:
СтатусОборудованияВыборка=Запрос.Выполнить().Выбрать();
Если СтатусОборудованияВыборка.Следующий() тогда
   СтрокаТабличнойЧасти.Статус=СтатусОборудованияВыборка.Статус
КонецЕсли;


Но это при условии, что запрос получает правильно данные.
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

frank

РегистрСведений.ДвижениеОборудования - измерени: Дата(Дата), Оборудование(Строка), Подразделение (Справочник.Подразделения), Статус (ПеречислениеСсылка.ВыдачаПрием), ШтрихКод (СправочникСсылка.Оборудование). Справочник.оборудование основное представление в виде кода.
Периодичность в пределаъх дня

frank


Klyacksa

Тогда запрос должен быть такой:
"ВЫБРАТЬ
|   ДвижениеОборудования.Статус
|ИЗ
|   РегистрСведений.ДвижениеОборудования.СрезПоследних(, ШтрихКод = &ШтрихКод) КАК ДвижениеОборудование"
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Klyacksa

В таком случае, будут браться не все подряд записи регистра с вашим ШтрихКодом, а последние. Можно так же брать их на определенную дату.
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

cska-fanat-kz

Регистр - периодический.

Если выбираем запросом, то лучше использовать виртуальную таблицу СрезПоследних.
Либо отсортировать основную таблицу регистра по периоду по убыванию и получить данные из первой строки (либо в запросе добавить ПЕРВЫЕ 1, либо в выборке получить только первую строку).

Если бы Состояние стояло в ресурсах - то можно было использовать метод менеджера регистра сведений ПолучитьПоследнее().
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

cska-fanat-kz

Вопрос в догонку:

зачем нужны измерения Дата(Дата) (если есть стандартный реквизит Период)
и Оборудование(Строка) (если есть Штрихкод(СправочникСсылка.Оборудование))?
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

frank

После последних изминений запрос принял след. вид:

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

Процедура ОборудованиеШтрихКодПриИзменении(Элемент)
   ПодстановкаДанных(ЭлементыФормы.Оборудование.ТекущиеДанные);
   СтатусОборуд(ЭлементыФормы.Оборудование.ТекущиеДанные);
КонецПроцедуры



Измерение "Дата" удалена (действительно не нужно), на счет менеджера регистра сведений по подробней пжл., т.к. выше перечисленный запрос ничего не дала. :fdbsdfbsd:

cska-fanat-kz

СтатусОборудованияВыборка=Запрос.Выполнить().Выбрать();
СтрокаТабличнойЧасти.Статус = СтатусОборудованияВыборка;

надо заменить на

СтатусОборудованияВыборка=Запрос.Выполнить().Выбрать();
СтатусОборудованияВыборка.Следующий();
СтрокаТабличнойЧасти.Статус = СтатусОборудованияВыборка.Статус;
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск