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

Получить данные со ставного типа данных!

Автор Шурик_1985, 07 фев 2012, 14:33

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

Шурик_1985

Здравствуйте!
Ребят помогите решить задачку!!
Имеется реквизит табличной части документа составного типа (два разных справочника 1.СправочникСотрудник и 2 СправочникКонтрагенты).
Задача: если пользователь выбрал один тип справочника т.е СправочникСотрудники, то нужно открыть форму выбора и передав  параметры в глобальный модуль,
а если другой - ничего не делать, вот что я пробовал написать:

&НаКлиенте
Процедура ТабДокКлиентыПриИзменении(Элемент)
ТЗ = ЭтаФорма.Элементы.Долги.ТекущиеДанные;
Если ТипЗнч(ТЗ.Клиенты)= Тип("СправочникСсылка.Сотрудники") Тогда
  ДанныеСотрудника = "";
  ГМВариантыОтчетов.ПолучитьДанныеСотрудника(ТЗ.Клиенты,ДанныеСотрудника);
  ТЗ.Организация   = ДанныеСотрудника.Организация;
  ТЗ.Подразделение = ДанныеСотрудника.Подразделение;
  ИначеЕсли
  ТипЗнч(ТЗ.Клиенты)= Тип("СправочникСсылка.Сотрудники") Тогда
  КонецЕсли;
КонецПроцедуры

Функция ПолучитьДанныеСотрудника (ДанныеСотрудника,Сотрудник) Экспорт

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

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

Если Выборка.Следующий()  Тогда
ДанныеСотрудника  = Новый Структура;
ДанныеСотрудника.Вставить("Организация",Выборка.Организация);
ДанныеСотрудника.Вставить("СтруктурнаяЕдиница",Выборка.Подразделение);
Возврат ДанныеСотрудника;
КонецЕсли;
КонецФункции

[code\]
Спасибо за внимание!
Усё чотко!

Шурик_1985

И в Результате:Ошибка {Документ.АвансовыйОтчет.Форма.ФормаДокумента(2307)}: Значение не является значением объектного типа (Организация)

я понимаю что передаю пустую строку, вопрос как теперь мне обойти или остановит первый параметр
Усё чотко!

cska-fanat-kz

1. В функции ПолучитьДанныеСотрудника(...) параметры перепутаны.
В описании сперва ДанныеСотрудника, а потом Сотрудник,
а при вызове - наоборот...

2. Да и в качестве параметра ДанныеСотрудника вам не нужны - вы ее (структуру данных о сотруднике) как результат функции возвращаете.

3. В начале текста функции присвойте ДанныеСотрудника = Неопределено.
Тогда после вызова функции сможете проверить
Если ПолученныеДанные <> Неопределено Тогда
...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Шурик_1985

Все равно результат не та,  при изменении ТЗ.клиента я передаю родителя СправочникаСотрудник в глобальный модуль и уменя результат естественно получаеться пустая строка.
может это следует написать в НачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
типа СтандартнаяОбработка = Ложь;
и дальше ? ?
если я реально туплю прошу не судите строго, начинающий:((
Усё чотко!

cska-fanat-kz

Ничего не понятно (
1. Какого "родителя" вы передаете в функцию из общего модуля?
2. И почему это "естественно" получается пустая строка?

P.S. функцию вызывайте следующим образом:
ДанныеСотрудника = ГМВариантыОтчетов.ПолучитьДанныеСотрудника(ТЗ.Клиенты,ДанныеСотрудника);

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

Шурик_1985

cska-fanat-kz
Спасибо Вам, получилось, а самое главное я понял как все работает!

&НаКлиенте
Процедура ДолгиКлиентыПриИзменении(Элемент)
  ТЗ = ЭтаФорма.Элементы.Долги.ТекущиеДанные;      
  Если ТипЗнч(ТЗ.Клиенты)= Тип("СправочникСсылка.Сотрудники") Тогда
     ДанныеСотрудника = УправлениеНебольшойФирмойСервер.ПолучитьДанныеСотрудника(ТЗ.Клиенты,ДанныеСотрудника);
     Если ДанныеСотрудника<> Неопределено Тогда
         ТЗ.Организация   = ДанныеСотрудника.Организация;
          ТЗ.Подразделение = ДанныеСотрудника.СтруктурнаяЕдиница;   
ИначеЕсли
   ТипЗнч(ТЗ.Клиенты)= Тип("СправочникСсылка.Контрагенты") Тогда
КонецЕсли;
КонецЕсли;
КонецПроцедуры


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

Усё чотко!

cska-fanat-kz

А теперь если начать придираться ;)

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

Шурик_1985

а если так:
ВЫБРАТЬ
            |   СотрудникиСрезПоследних.Организация,
            |   СотрудникиСрезПоследних.СтруктурнаяЕдиница КАК Подразделение
            |ИЗ
            |   РегистрСведений.Сотрудники.СрезПоследних(, Сотрудник = &Сотрудник) КАК СотрудникиСрезПоследних";
что теперь скажите? :))
Усё чотко!

cska-fanat-kz

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

Теги:

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

Рейтинг@Mail.ru

Поиск