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

Ошибка чтения значения в запросе

Автор unsave.one, 21 окт 2014, 19:08

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

unsave.one

Здравствуйте. Используя табличную модель в форме документа, с выбранными параметрами, а именно даты и транспорта, у меня не заполняются поля (водитель, грузчик и т.д.) на конкретную дату (то есть не используя срезпоследних).



&НаКлиенте
Процедура ТранспортПриИзменении(Элемент)
ЗаполнениеИзРегистраСведений(Объект.Транспорт, Объект.Дата);
КонецПроцедуры


&НаСервере
Процедура ЗаполнениеИзРегистраСведений(Транспорт, Дата)

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СоставБригады.Период,
| СоставБригады.Автомобиль,
| СоставБригады.Водитель,
| СоставБригады.Грузчик1,
| СоставБригады.Грузчик2,
| СоставБригады.Счетчик
|ИЗ
| РегистрСведений.СоставБригады КАК СоставБригады
|ГДЕ
| СоставБригады.Период = &Период
| И СоставБригады.Автомобиль = &Автомобиль";

Запрос.УстановитьПараметр("Автомобиль", Транспорт);
Запрос.УстановитьПараметр("Период", Дата);

РезультатЗапроса = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Водитель = ВыборкаДетальныеЗаписи.Водитель;
Грузчик1 = ВыборкаДетальныеЗаписи.Грузчик1;
Грузчик2 = ВыборкаДетальныеЗаписи.Грузчик2;
//Расстояние = ВыборкаДетальныеЗаписи.Расстояние;
КонецЦикла;
КонецПроцедуры

TreeDogNight

Водитель,Грузчик1 и Грузчик2 это реквизиты формы или документа? Если Документа, то пишите:
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Объект.Водитель = ВыборкаДетальныеЗаписи.Водитель;
        Объект.Грузчик1 = ВыборкаДетальныеЗаписи.Грузчик1;
        Объект.Грузчик2 = ВыборкаДетальныеЗаписи.Грузчик2;
    КонецЦикла;

п.с. Что такое табличная модель?
Cегодня не все могут провести завтрашним числом. Вернее, не только лишь все - мало кто может это сделать.

unsave.one

Это реквизиты формы. Табличная модель - это способ доступа к данным.
Добавлено: 22 окт 2014, 00:23


Оказывается данный запрос работает, я в элементах реквизит объект "транспорт" забыл обновить, но возникла другая проблема. Теперь если устанавливаешь параметры, а элемент с такими данными отсутствует в регистре сведений то он пропускает выборку, то есть в результат запроса ничего не попадает. Как перехватить результат запроса, чтобы очистить от предыдущих записей (водитель, грузчики и расстояние).

Besart

РезультатЗапроса = Запрос.Выполнить();
   Если НЕ РезультатЗапроса.Пустой() Тогда
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
   
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Водитель = ВыборкаДетальныеЗаписи.Водитель;
        Грузчик1 = ВыборкаДетальныеЗаписи.Грузчик1;
        Грузчик2 = ВыборкаДетальныеЗаписи.Грузчик2;
        //Расстояние = ВыборкаДетальныеЗаписи.Расстояние;
    КонецЦикла;

    Иначе
        Водитель = Справочник.Водители.ПустаяСсылка();
        Грузчик1 = Справочник.Грузчики.ПустаяСсылка();
        Грузчик2 = Справочник.Грузчики.ПустаяСсылка();
    КонецЕсли;

cska-fanat-kz

1. Регистр сведений СоставБригады полагаю периодический? Тогда должно быть не условие на Период=Дата, а надо брать вирт. таблицу СрезПоследних на Дату
2. В серверной НЕКОНТЕКСТНОЙ функции надо по транспорту и дате получить СТРУКТУРУ, содержащую водителя и грузчиков, и потом на клиенте разложить их по соответствующим реквизитам.
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Luzer1C

Чтобы было понятно:
&НаКлиенте
Процедура ТранспортПриИзменении(Элемент)
        СтруктураВозврата = ЗаполнениеИзРегистраСведений(Объект.Транспорт, Объект.Дата);
        Грузчик1 = СтруктураВозврата.Грузчик1;
//и так все остальные реквизиты
КонецПроцедуры
Халамбалам.

cska-fanat-kz

Цитата: unsave.one от 21 окт 2014, 20:29Теперь если устанавливаешь параметры, а элемент с такими данными отсутствует в регистре сведений то он пропускает выборку, то есть в результат запроса ничего не попадает

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

unsave.one

Всем спасибо за советы, сделал так, работает, но
&НаКлиенте
Процедура ТранспортПриИзменении(Элемент)

ЗаполнениеИзРегистраСведений(Объект.Транспорт, Объект.Дата);

КонецПроцедуры


&НаСервере
Процедура ЗаполнениеИзРегистраСведений(Транспорт, Дата)

//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СоставБригады.Период,
| СоставБригады.Автомобиль,
| СоставБригады.Водитель,
| СоставБригады.Грузчик1,
| СоставБригады.Грузчик2,
| СоставБригады.Счетчик
|ИЗ
| РегистрСведений.СоставБригады КАК СоставБригады
|ГДЕ
| СоставБригады.Период = &Период
| И СоставБригады.Автомобиль = &Автомобиль";

Запрос.УстановитьПараметр("Автомобиль", Транспорт);
Запрос.УстановитьПараметр("Период", Дата);

РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Водитель = ВыборкаДетальныеЗаписи.Водитель;
Грузчик1 = ВыборкаДетальныеЗаписи.Грузчик1;
Грузчик2 = ВыборкаДетальныеЗаписи.Грузчик2;
Объект.Расстояние = ВыборкаДетальныеЗаписи.Счетчик;
КонецЦикла;
Иначе
Водитель = " ";
Грузчик1 = " ";
Грузчик2 = " ";
Объект.Расстояние = " ";
Сообщить("На данный автомобиль не назначена бригада");
КонецЕсли;

КонецПроцедуры


будет ли это оптимально? Может лучше будет сделать через структуру и временную таблицу судя по вашим советам?
P.S. Регистр сведений периодичный (в пределах дня)

cska-fanat-kz

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

unsave.one

В том, что выводится водитель и грузчики на конкретную дату из регистра сведений, а также при отсутствие транспорта на заданную дату не заполняются поля водителя и грузчиков. Буду переделаю через временную таблицу напишу, что получится.
(P.S На каждую дату назначается автомобиль и формируется бригада(водители, грузчики и т.д.))

Теги:

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

Рейтинг@Mail.ru

Поиск