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

автоматическое заполнение табличной части документа выборкой из справочника по владельцу

Автор jediAlex1985, 11 фев 2015, 21:05

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

jediAlex1985

Здравствуйте. Делаю свою конфу на 1с 8.3.5. Добавил справочник "Сотрудники" и подчиненный ему справочник "КритерииОценки", где создал реквизит НаименованиеКритерия -стандартное наименование по длине не устраивало. Для второго справочника изменил представление в менеджере:

Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
 
    СтандартнаяОбработка = Ложь;
    Представление = Данные.НаименованиеКритерия;
 
КонецПроцедуры
Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка)
 
    СтандартнаяОбработка = Ложь;
    Поля.Добавить("НаименованиеКритерия");
КонецПроцедуры


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

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


при изменении реквизита Сотрудник в документе вылетает ошибка:
Ошибка отображения типов: отсутствует отображение для типа Справочниквыборка.КритерииОценки
Что тут не так? помогите пожалуйста

vitasw

Типовая ошибка наинающих. Своетую почитать, что такое "Клиент" и "Сервер".
Если в двух словах, то
клиент - это форма, все что на форме отображено, и управление видимостью элементов. Причем все что вы видите на форме, грубо говоря, это картинки со стоками и никаких ссылочных значений на клиенте нет.
сервер - это объекты, ссылки, выборки, запросы, операции над базой данных и прочая-прочая-прочая.
Далее, получая что-то на стороне сервера и возвращая на клиент, платформа пытается отобразить полученный "объект" в соответствии с представлением. Естественно, далеко не у всех объектов может иметься представление, как например в данном случае, справочник-выборка. Вот, как по вашему, форма должна отобразить справочник-выборку? 

jediAlex1985

насчет сервера и клиента я понял... но вот и как теперь на клиенте эту выборку отобразить? притом, что выборка идет по параметру, значение которого передается из формы?

vitasw

Цитата: jediAlex1985 от 12 фев 2015, 09:09
насчет сервера и клиента я понял... но вот и как теперь на клиенте эту выборку отобразить? притом, что выборка идет по параметру, значение которого передается из формы?
Да ну е-мое! "Я все понял, только непонял" - могу предложить только читать умные книжки до наступления просветления.
На Сервере!, работаете на сервере!
Рекомендую почитать хоть одну умную книжку, ваши вопросы - элементарны, охотников отвечать на такие банальные вопросы - ну очень мало.

jediAlex1985

Сделал так:
&НаСервере
Процедура ВыгрузкаКритериев()
Результат=Справочники.КритерииОценки.Выбрать( ,Объект.Сотрудник);
Пока Результат.Следующий() Цикл
    НоваяСтрока=Объект.КритерииОценки.Добавить();       
        //НоваяСтрока=Объект.КритерииОценки.ТекущиеДанные; 
        //НоваяСтрока.КритерийОценкиКритерий=Результат.Ссылка;
        НоваяСтрока.КритерииОценкиНольБаллов=Результат.НольБаллов;
        НоваяСтрока.Записать();
    КонецЦикла;

КонецПроцедуры 
&НаКлиенте
Процедура СотрудникПриИзменении(Элемент)
    ВыгрузкаКритериев()
КонецПроцедуры

в модуле формы. Добавляет одну строку в табличную часть пустую. При этом ругается :
Документ.ОценочнаяВедомость.Форма.ФормаДокумента.Форма(8)}: Поле объекта не обнаружено (КритерииОценкиНольБаллов)
        НоваяСтрока.КритерииОценкиНольБаллов=Результат.НольБаллов;


LexaK

если помогло нажмите: Спасибо!

vitasw

Цитата: jediAlex1985 от 13 фев 2015, 09:15
Сделал так:
&НаСервере
Процедура ВыгрузкаКритериев()
Результат=Справочники.КритерииОценки.Выбрать( ,Объект.Сотрудник);
Пока Результат.Следующий() Цикл
    НоваяСтрока=Объект.КритерииОценки.Добавить();       
        //НоваяСтрока=Объект.КритерииОценки.ТекущиеДанные; 
        //НоваяСтрока.КритерийОценкиКритерий=Результат.Ссылка;
        НоваяСтрока.КритерииОценкиНольБаллов=Результат.НольБаллов;
        НоваяСтрока.Записать();
    КонецЦикла;

КонецПроцедуры 
&НаКлиенте
Процедура СотрудникПриИзменении(Элемент)
    ВыгрузкаКритериев()
КонецПроцедуры

в модуле формы. Добавляет одну строку в табличную часть пустую. При этом ругается :
Документ.ОценочнаяВедомость.Форма.ФормаДокумента.Форма(8)}: Поле объекта не обнаружено (КритерииОценкиНольБаллов)
        НоваяСтрока.КритерииОценкиНольБаллов=Результат.НольБаллов;


Вы, пожалуйста, чем сразу впадать в отчаяние и строчить сообщения - попробуйте вникнуть в те сообщения, которые вам пишет платформа. В данном случае платформа сообщает, что у вас отсутствует реквизит табличной части КритерииОценкиНольБаллов. Ищите где вы ошиблись, возможно вы спутали идентификатор имени реквизита формы и имени реквизита объекта.

jediAlex1985


Теги:

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

Рейтинг@Mail.ru

Поиск