Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   Как установить тип значения реквизиту документа (http://forums.kuban.ru/f1040/kak_ustanovit-_tip_znacheniya_rekvizitu_dokumenta-2893137.html)

Birmingem 01.08.2012 18:27

Как установить тип значения реквизиту документа
 
Пытаюсь изучать 1С 8.2.
В моем документе ПКО есть реквизит КоррСчет (счет кредита проводки), при выборе которого нужно установить типы значения для реквизитов Субконто1, Субконто2, Субконто3 (аналитика КоррСчета, тип значения "Неопределенный" или как это в восьмерке называется). В семерке это делалось просто:

НазначитьТип("Субконто1",КоррСчет.ВидСубконто(1));

А как это сделать в восьмерке?

Чучундер 01.08.2012 18:59

хм.. я когда у меня давным давно возник такоцй вопрос в клюшках - позырил в документе "бухсправка" как там субконто назначаются - почему бы аналогичным макаром не посмотреть как это сделано в снеговике?

Birmingem 01.08.2012 19:22

1) Первым делом, так и попытался. Но фирма 1С в типовой бухгалтерии идет другим путем. Не дает такой свободы пользователям в формировании проводок в документах. Там шагг вправо, шаг влево - расстрел. Короче, не нашел я подобного простого примера. Те что нашел, для меня пока сильно сложные.
Вот например есть в док. ПриходныйКассовыйОрдер в модуле формы процедура СчетУчетаПриИзменении(). Она отправляет в глобальный модуль РаботаСДиалогами.ПриВыбореСчетаВТабличномПоле(). А там уже черт ногу сломит. Я так и не разобрался.
Может посоветуете какую нибудь простую конфигурацию, в которой можно было бы смотреть примеры кода?

Billi 01.08.2012 19:31

2-Birmingem >Для начала раздели понятия Реквизит и ЭлеметФормы. Затем посмотри в СП какие есть свойства и методы у твоего ЭлементаФормы. И задача очень легко решится.

Billi 01.08.2012 19:51

Самый простой способ:
Реквизит = Справочники.НужныйСправочник.ПустаяСсылка();

Если нужно ограничить типы при интерактивном заполнении реквизита, то так:
МассивТипов = Новый Массив;
МассивТипов.Добавить(Тип("СправочникСсылка.КакойтоСправочник"));
МассивТипов.Добавить(Тип("ДокументСсылка.КакойтоДокумент"));
ЭлементыФормы.ТвойРеквизит.ОграничениеТипа = Новый ОписаниеТипов (МассивТипов);

Birmingem 07.08.2012 15:01

Наваял такой код. Оцените пожалуйста. Что то сложновато получилось. Больше чем 3 строки на семерке :)
Наверняка можно улучшить, подскажите как?

Для к=1 По 3 Цикл
Если КоррСчет.ВидыСубконто.Количество()>=к Тогда
ТипСубк = КоррСчет.ВидыСубконто[к-1].ВидСубконто.ТипЗначения; ЭлементыФормы.Найти("Субконто"+к).ВыбиратьТип = ложь;
Если ТипСубк.ПривестиЗначение(ЭлементыФормы.Найти("Субконто"+к).Значение<>ЭлементыФормы.Найти("Субконто"+к).Значение Тогда ЭлементыФормы.Найти("Субконто"+к).Значение = ТипСубк.ПривестиЗначение(ЭлементыФормы.Найти("Субконто"+к).Значение);
КонецЕсли;
Иначе ЭлементыФормы.Найти("Субконто"+к).Значение = "";
КонецЕсли;
КонецЦикла;

Zurab 07.08.2012 15:51

Для Каждого ВидСубконто Из СчетБ.ВидыСубконто Цикл

СтрТЧ=Субконто.Добавить();
СтрТЧ.ВидСубконто=ВидСубконто.ВидСубконто.ТипЗначения.ПривестиЗначение().Метаданные().Имя;
Если Найти(ВидСубконто.ВидСубконто.ТипЗначения,"Справочник")>0 тогда
СтрТЧ.Значение=Справочники[ВидСубконто.ВидСубконто.ТипЗначения.ПривестиЗначение().Метаданные().Имя].ПустаяСсылка();
иначе
СтрТЧ.Значение=Перечисления[ВидСубконто.ВидСубконто.ТипЗначения.ПривестиЗначение().Метаданные().Имя].ПустаяСсылка();
КонецЕсли;
СтрТЧ.ТолькоЧтение=Истина;

КонецЦикла;

roma n 07.08.2012 17:36

2-Birmingem > "[em]Не дает такой свободы пользователям в формировании проводок в документах[/em]" враки. Нажми на кнопку "Дт/Кт" под полными правами (или правами ГБ) и дивись на флаг "Ручная корректировка". Только особо бухгалтерам не распространяйся :)

roma n 07.08.2012 17:39

6-Zurab > субконто составных типов? не, не слышал...

roma n 07.08.2012 17:43

5-Birmingem >
Для к=1 По 3 Цикл
логичнее заменить на Для Каждого (или предварительно читать максимальное значение количества субконто из метаданных)
+ если тип значения субконто не составной - для поля ввода ВыбиратьТип = Ложь, в противном случае выбирать тип всё же уместно

Zurab 07.08.2012 21:21

(8) :))


Текущее время: 17:01. Часовой пояс GMT +3.