Имя: Пароль:
1C
1С v8
отбор в регистре сведений через comconnector
,
0 rmullakhmetov
 
30.05.16
09:43
Добрый день, работаю с 1с ЗУП 2.5 через comconnector из C#
Работаю с документом ОтпускаОрганизаций из табличной часть РаботникиОрганизации получил информацию о сотрудниках
Не получается получить руководителя подразделения в котором находится сотрудник

                                    dynamic объктОтбора = conn1C.Справочники.ПодразделенияОрганизаций.НайтиПоКоду(строка.Сотрудник.ТекущееПодразделениеОрганизации.Код).ПолучитьОбъект();

                                    dynamic отбор = conn1C.NewObject("Структура");
                                    отбор.Вставить("СтруктурнаяЕдиница", объктОтбора.Ссылка);
                                    отбор.Вставить("ОтветственноеЛицо", conn1C.Перечисления.ОтветственныеЛицаОрганизаций.Руководитель);
                                    
dynamic руководитель = conn1C.РегистрыСведений.ОтветственныеЛицаОрганизаций.Выбрать(отбор);

на последней строке при выполнении получаю ошибку "System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта."

что делаю не так?
1 itlikbez
 
30.05.16
09:45
А если вместо:
отбор.Вставить("СтруктурнаяЕдиница", объктОтбора.Ссылка);

поставить
отбор.Вставить("СтруктурнаяЕдиница", объктОтбора);

?
2 itlikbez
 
30.05.16
09:48
conn1C.Справочники.ПодразделенияОрганизаций.НайтиПоКоду(Сотрудник.ТекущееПодразделениеОрганизации.Код);
3 rmullakhmetov
 
30.05.16
10:01
тоже самое :(
4 rmullakhmetov
 
30.05.16
10:04
если выполнять без указания отбора просто так
dynamic руководитель = conn1C.РегистрыСведений.ОтветственныеЛицаОрганизаций.Выбрать();

то отрабатывает, судя по всему косяк при создании отбора, подобная вещь с регистром в 1с бухгалтерии работает
5 alle68
 
30.05.16
10:07
Зачем объект получать, если достаточно ссылки? Надо исправить.
6 rmullakhmetov
 
30.05.16
10:14
это уже метод тыка, от непонимая процесса

написал вот так
                                    dynamic объктОтбора = conn1C.Справочники.ПодразделенияОрганизаций.НайтиПоКоду(строка.Сотрудник.ТекущееПодразделениеОрганизации.Код);//.ПолучитьОбъект();
                                    logger.Info(объктОтбора.Наименование);

                                    dynamic отбор = conn1C.NewObject("Структура");
                                    отбор.Вставить("СтруктурнаяЕдиница", объктОтбора.Ссылка);
                                    отбор.Вставить("ОтветственноеЛицо", conn1C.Перечисления.ОтветственныеЛицаОрганизаций.Руководитель);
                                    dynamic руководитель = conn1C.РегистрыСведений.ОтветственныеЛицаОрганизаций.Выбрать(отбор);

ошибка та же "Ссылка на объект не указывает на экземпляр объекта."

так тоже пробовал
отбор.Вставить("СтруктурнаяЕдиница", объктОтбора);
7 hhhh
 
30.05.16
10:29
(6) а где проверка на заполненность этого объктОтбора  ??

не проверяете, нашло не нашло, так наобум суете в отбор.
8 hhhh
 
30.05.16
10:31
(6) вот здесь

dynamic объктОтбора = conn1C.Справочники.ПодразделенияОрганизаций.НайтиПоКоду(строка.Сотрудник.ТекущееПодразделениеОрганизации.Код)//.ПолучитьОбъект();


у вас нет точки с запятой
9 hhhh
 
30.05.16
10:37
(8) + чудеса, миста сама убрала скобку после ".Код"

как так может быть?
10 rmullakhmetov
 
30.05.16
10:38
объктОтбора проверяю

вот эта строка logger.Info(объктОтбора.Наименование);

выдает наименование подразделения

точка с запятой есть, код валится ниже

в этой строке

dynamic руководитель = conn1C.РегистрыСведений.ОтветственныеЛицаОрганизаций.Выбрать(отбор);
11 itlikbez
 
30.05.16
10:41
(10) См. сюда
строка.Сотрудник
12 itlikbez
 
30.05.16
10:42
(11) А потом см. (2)
13 rmullakhmetov
 
30.05.16
10:54
в общем написал в 1с такой код
Процедура Кнопка1Нажатие(Элемент)
    // Вставить содержимое обработчика.
    сотрудник = справочники.СотрудникиОрганизаций.НайтиПоКоду("0047");
    мойОтбор = Новый Структура;
    мойОтбор.Вставить("СтруктурнаяЕдиница", сотрудник.ТекущееПодразделениеОрганизации.Ссылка);
    мойОтбор.Вставить("ОтветственноеЛицо", Перечисления.ОтветственныеЛицаОрганизаций.Руководитель);
    
    СрезПоследних   = РегистрыСведений.ОтветственныеЛицаОрганизаций.СрезПоследних(ТекущаяДата(), мойОтбор);
    
    Если СрезПоследних.Количество() >= 1 Тогда сообщить(СрезПоследних[0].ФизическоеЛицо.Наименование); конецесли;

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

код работает
переношу его в с# для работы через comconnector
                                    dynamic мойОтбор = conn1C.NewObject("Структура");
                                    мойОтбор.Вставить("СтруктурнаяЕдиница", строка.Сотрудник.ТекущееПодразделениеОрганизации.Ссылка);
                                    мойОтбор.Вставить("ОтветственноеЛицо", conn1C.Перечисления.ОтветственныеЛицаОрганизаций.Руководитель);

                                    dynamic руководитель = conn1C.РегистрыСведений.ОтветственныеЛицаОрганизаций.СрезПоследних(dateFrom + " 00:00:00", мойОтбор);

и не работает, всяко разно изголяюсь передаю ссылку и не ссылку и не работает, возможно какое-то глючано платформы
14 hhhh
 
30.05.16
11:04
мойОтбор.Вставить("СтруктурнаяЕдиница", Сотрудник.ТекущееПодразделениеОрганизации);
15 hhhh
 
30.05.16
11:06
(13) не пишите

сотрудник.ТекущееПодразделениеОрганизации.Ссылка

это работает в 10 раз медленнее чем

сотрудник.ТекущееПодразделениеОрганизации

и одно и то же на самом деле.

или тогда пишите

сотрудник.ТекущееПодразделениеОрганизации.Ссылка.Ссылка.Ссылка.Ссылка

чтобы уж наверняка.
16 rmullakhmetov
 
30.05.16
12:04
спасибо за информацию )
и за юмор!
17 rmullakhmetov
 
30.05.16
12:39
обновил платформу, ничего не изменилось

есть еще идеи?
18 alle68
 
30.05.16
14:23
(13) Здесь ссылка из другой базы: мойОтбор.Вставить("СтруктурнаяЕдиница", строка.Сотрудник.ТекущееПодразделениеОрганизации);
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс