Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема НазначитьВид() не отрабатывает (число прочтений - 3348 )
OnCheck
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 130
Зарегистрирован: 12. Декабря 2007
НазначитьВид() не отрабатывает
04. Декабря 2009 :: 07:08
Печать  
Метод НазначитьВид() не отрабатывает с реквизитом формы документа полученный через переданный контекст (в форме класса)

//======================================================================
Процедура УстановитьВидРеквизита() Экспорт
     Сам=Сам(Контекст);
     Конт=Сам.Конт;
       НазначитьВид(Конт.РеквизитТаблЧастиДокументаТипаДокумент,"ВидДокумента");
     Конт.Форма.РеквизитТаблЧастиДокументаТипаДокумент.НеИзменятьВид(1);

КонецПроцедуры // УстановитьВидРеквизита

а вот так работает:

Процедура УстановитьВидРеквизита(РеквизитПереданныйИзМодуляФормыДокумента) Экспорт
     Сам=Сам(Контекст);
     Конт=Сам.Конт;
       НазначитьВид(РеквизитПереданныйИзМодуляФормыДокумента,"ВидДокумента");
     Конт.Форма.РеквизитТаблЧастиДокументаТипаДокумент.НеИзменятьВид(1);

КонецПроцедуры // УстановитьВидРеквизита

но в рамках перебора строк документа это крайне неудобно, в поисках альтернативного решения  Озадачен Если кто знает, посвятите?
« Последняя редакция: 04. Декабря 2009 :: 08:44 - OnCheck »  
Наверх
 
IP записан
 
OnCheck
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 130
Зарегистрирован: 12. Декабря 2007
Re: НазначитьВид() не отрабатывает
Ответ #1 - 04. Декабря 2009 :: 10:07
Печать  
Может не понятно спросил?  Нерешительный
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: НазначитьВид() не отрабатывает
Ответ #2 - 04. Декабря 2009 :: 10:52
Печать  
Если реквизит имеет тип <Документ> , без указания вида, то назначать ему вид вовсе не обязательно.. При присвоении и так всё будет записываться..
Вид нужен только, если на форме есть реквизит неопределенного вида и хотим выбрать определенного вида сразу..
А так, главное тип, а не вид.
  
Наверх
 
IP записан
 
OnCheck
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 130
Зарегистрирован: 12. Декабря 2007
Re: НазначитьВид() не отрабатывает
Ответ #3 - 04. Декабря 2009 :: 11:22
Печать  
Реквизит хранит ссылку на документ хранилище дополнительной табличной части. Этот реквизит я передаю в класс для документа хранилища, где если он пустой опрашиваю на вид и создаю новый.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: НазначитьВид() не отрабатывает
Ответ #4 - 04. Декабря 2009 :: 12:45
Печать  
Нуи а нафига вид то назначать вообще ?
И что ты хотел поиметь этим кодом ?

НазначитьВид(РеквизитПереданныйИзМодуляФормыДокумента,"ВидДокумента");

???
  
Наверх
 
IP записан
 
OnCheck
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 130
Зарегистрирован: 12. Декабря 2007
Re: НазначитьВид() не отрабатывает
Ответ #5 - 05. Декабря 2009 :: 06:21
Печать  
Классовый метод работает так что если значение = пустая ссылка, до создает новый док текущего вида, а если сам реквизит типа "Документ", то ему прежде надо задать вид, иначе он не знает кого вида док создавать! я уже решил проблему: создаю временную переменую которую посылаю в класс, после отработки класса кладу ее в реквизит. Но важно вот что Конт.Реквизит <> Реквизит (тот же, но в самой форме документа).
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: НазначитьВид() не отрабатывает
Ответ #6 - 06. Декабря 2009 :: 06:52
Печать  
OnCheck писал(а) 05. Декабря 2009 :: 06:21:
Но важно вот что Конт.Реквизит <> Реквизит (тот же, но в самой форме документа).

Ты 100% уверен?
Напиши код
Цитата:
Если Конт.Реквизит <> Реквизит Тогда рез =1/0; КонецЕсли;

и проверь результат.

ЗЫ Кстати, у тебя Конт.Реквизит вообще передается? или конт.Форма работает? Я к тому, что вдруг ТурбоБЛ не включился ?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
OnCheck
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 130
Зарегистрирован: 12. Декабря 2007
Re: НазначитьВид() не отрабатывает
Ответ #7 - 16. Декабря 2009 :: 04:44
Печать  
Ну значение то равно, т.е. сравнение Конт.Реквизит <> Реквизит будет равно 0. А сами объекты разные, правильнее будет так Конт.Реквизит.Свойство (приватное) <> Реквизит.Свойство (то же самое приватное). Здесь у меня не хватает знаний, чтобы объяснить, поэтому и обращаюсь к Вам. Попробую отобразить во фрагментах кода:

для решения поставленной задачи требется выполнить код:

НазначитьВид(ДокументХранилище,ВидДокумента);
Форма.ДокументХранилище.НеИзменятьВид(1);

где ДокументХранилище реквизит документа табличной части, а ВидДокумента -  строка с соответсвующим содержанием. В дальнейшем ревизит ДокументХранилище отслается в метод класса где требуется получить значение Метода Вид() объекта-реквизита ДокументХранилище. В данном случае все рабоет как следует, и если после этих действий вернуть ДокументХранилище.Вид(), он будет равен ВидДокумента.

Но если тот же самый код отрабатывается в контексте класса:

НазначитьВид(Конт.ДокументХранилище,ВидДокумента);
Конт.Форма.ДокументХранилище.НеИзменятьВид(1);

где класс настроен и работет нормально и Конт.ДокументХранилище = ДокументХранилище. А после этого кода вернуть Конт.ДокументХранилище.Вид(), он не будет равен ВидДокумента, а равен пустой строке. Вот что я имел в виду.

Для решения это задачи, мне пришлось проверять:


Если Конт.ДокументХранилище.Выбран()=1 тогда
     временныйДокументХранилище = Конт.ДокументХранилище;
Иначе
     временныйДокументХранилище = СоздатьОбъект("Документ."+ВидДокумента);
КонецЕсли;

Сам.Хранилище_Сохранить( временныйДокументХранилище, ТабХранилище, спПаррыСохрХран);
Конт.ДокументХранилище = временныйДокументХранилище;
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать