Имя: Пароль:
1C
 
Не получается указать измерение отбора набора записей - "Поле объекта не обнаружено"
0 Bahamut
 
19.09.18
04:44
Добрый день!

Собственно сабж. Есть регистр сведений Бригады с измерением ТранспортныеСредства. Регистр подчинён документу ОформлениеБригады и заполняется на его основе. Я хочу сделать так, чтобы при укомплектовании машины новой бригадой 1С не ругалась на уже существующую запись, а затирала старую и записывала новую. Для этого в модуле документа ОформлениеБригады я модифицировал событие ОбработкаПроведения. Получилось следующее:


Процедура ОбработкаПроведения(Отказ, Режим)
    //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

    // регистр Бригады
    Движения.Бригады.Записывать = Истина;
    Движение = Движения.Бригады.Добавить();
    Если ПолучитьТСНаСервере(ТранспортноеСредство) = ТранспортноеСредство Тогда
        УдалитьЗаписьПоТС(ТранспортноеСредство);
    КонецЕсли;
    Движение.ТранспортноеСредство = ТранспортноеСредство;
    Движение.Грузчик1 = Грузчик1;
    Движение.Грузчик2 = Грузчик2;
    Движение.Водитель = Водитель;

    // регистр ПоездкиИКилометры
    Движения.ПоездкиИКилометры.Записывать = Истина;
    Движение = Движения.ПоездкиИКилометры.Добавить();
    Движение.Период = Дата;
    Движение.ТранспортноеСредство = ТранспортноеСредство;
    Движение.Километры = НачальноеЗначениеСчетчика;

    //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры

&НаСервере
Функция ПолучитьТСНаСервере(ТС)
    НаборЗаписей = РегистрыСведений.Бригады.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.ТранспортноеСредство.Установить(ТС);
    Выборка=НаборЗаписей.Выбрать();
    Если Не Выборка.Следующий() Тогда
        Сообщить("Выборка пуста!");
    Иначе
        Выборка.Следующий();
    КонецЕсли;
КонецФункции

&НаСервере
Процедура УдалитьЗаписьПоТС(ТС)
    НаборЗаписей = РегистрыСведений.Бригады.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.ТранспортноеСредство.Установить(ТС);
    НаборЗаписей.Записать();
КонецПроцедуры

ПолучитьТСНаСервере(ТС) - проверочная функция, она пока ничего не возвращает. Но на линии
НаборЗаписей.Отбор.ТранспортноеСредство.Установить(ТС);
система выдаёт ошибку
Поле объекта не обнаружено (ТранспортноеСредство).
Пробовал включать свойство Ведущее в свойствах измерения ТранспортноеСредство, пробовал устанавливать отбор по регистратору - ничего не помогает. Где я прокололся? Как это можно исправить?

Заранее спасибо!
1 hhhh
 
19.09.18
05:07
(0) если регистр подчинен регистратору, то отбор только по регистратору. по измерениям отбор невозможен. поэтому выбросьте, что вы там навояли  про
НаборЗаписей.Отбор.ТранспортноеСредство.Установить(ТС);

и напишите по-новой
2 Bahamut
 
19.09.18
05:11
hhhh я так тоже пробовал, итог всё тот же - "Поле объекта не обнаружено (ОформлениеБригады)"
3 hhhh
 
19.09.18
05:14
(2) ну это совсем другой итог, не тот же, совершенно другая ошибка
4 Bahamut
 
19.09.18
05:23
(3) С чем она может быть связана? Я проверил данные регистра сведений - регистратор везде проставлен...
5 hhhh
 
19.09.18
05:31
(4) причем тут регистратор, вы не вчитались в ошибку, у вас ошибка не найдено поле ОформлениеБригады , и там в ошибке приведено имя модуля и номер строки, надо смотреть эту строку, почему не определено поле
6 catena
 
19.09.18
05:53
(2)Наверное потому, что отбор устанавливается по названию ключа (Регистратор), а не по типу документа (ОформлениеБригады)
7 Bahamut
 
19.09.18
06:12
(5) (6) Спасибо, уже разобрался. Судя по всему, НаборЗаписей тут бесполезен, сделаю через запрос.

Спасибо за помощь!
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn