Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
19 Дек 2017, 01:17
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: как присвоить необходимый тип реквизиту  (Прочитано 29132 раз)

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

Оффлайн fis.irina

  • *
  • Сообщений: 8
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2010-11-19
  • Сайт: 
  • Профессия: Программист 1С
Здравствуйте, возникла проблема...надеюсь на вашу помощь


Есть справочник, в нем две табличные части "ФормируемыеДокументы" и "" СодержаниеДокументов".

В табличной части "ФормируемыеДокументы" возможно выбрать любой вид документа конфигурации. Далее при изменение вида документа в тч "СодержаниеДокументов" доступен выбор наименования любого реквизита выбранного документа. Все это реализованно с помощью отбора. Теперь осталось присовить реквизиту "ЗначениеРеквизита" соответсвующий тип..Например, если реквизит Контрагент, то реквизиту "ЗначениеРеквизита" должен присвоиться тип Справочники.Контрагенты..

 
Пыталась воспользоваться функцией ТипЗнч. Неудачно..Предположу, что снова необходим отбор.


Оффлайн cska-fanat-kz

  • 1С:Специалист
  • Глобальный модератор
  • *****
  • Сообщений: 5745
  • РЕПУТАЦИЯ: 1099
  • КПД: 19%
  • Красная армия всех сильней!
  • Регистрация: 2010-11-06
    • Skype: cska-fanat-kz81
  • Сайт: cska-fanat-kz.ucoz.kz
  • Профессия: Разработчик 1С
А можно какой нить пример?

Пример элемента справочника с двумя документами в ТЧ ФормируемыеДокументы
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Оффлайн fis.irina

  • *
  • Сообщений: 8
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2010-11-19
  • Сайт: 
  • Профессия: Программист 1С
Например, выбрали вид документа "Поступление ТМЗ и услуг", далее выбрали один из его реквизитов. Допустим, "Контрагент".. вот проблема в том, как теперб присвоить значению реквизита соответсвующий тип.. вот скрин с примером...

Оффлайн cska-fanat-kz

  • 1С:Специалист
  • Глобальный модератор
  • *****
  • Сообщений: 5745
  • РЕПУТАЦИЯ: 1099
  • КПД: 19%
  • Красная армия всех сильней!
  • Регистрация: 2010-11-06
    • Skype: cska-fanat-kz81
  • Сайт: cska-fanat-kz.ucoz.kz
  • Профессия: Разработчик 1С
Попробуйте что нить вроде...

ТекущиеДанные = ЭлементыФормы.<ИмяТабличнойЧастиСВкладкиСодержание...>.ТекущиеДанные;
ТекущиеДанные.ЗначениеРеквизита = ТекущиеДанные.РеквизитПредставление.ТипЗначения.ПривестиЗначение(ТекущиеДанные.ЗначениеРеквизита);

Вместо "ТекущиеДанные.РеквизитПредставление" возможно нужно что-то другое подставить - имя поля, тип которого вам надо получить...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Оффлайн fis.irina

  • *
  • Сообщений: 8
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2010-11-19
  • Сайт: 
  • Профессия: Программист 1С
Попробовала. Мне как раз надо получить тип поля РеквизитПредставления. Но, увы, ошибка "Значение не является значением объектного типа (ТипЗначения)"...
Хотя мне кажется, это хороший вариант, но что-то нетак

Оффлайн cska-fanat-kz

  • 1С:Специалист
  • Глобальный модератор
  • *****
  • Сообщений: 5745
  • РЕПУТАЦИЯ: 1099
  • КПД: 19%
  • Красная армия всех сильней!
  • Регистрация: 2010-11-06
    • Skype: cska-fanat-kz81
  • Сайт: cska-fanat-kz.ucoz.kz
  • Профессия: Разработчик 1С
Попробовала. Мне как раз надо получить тип поля РеквизитПредставления. Но, увы, ошибка "Значение не является значением объектного типа (ТипЗначения)"...
Хотя мне кажется, это хороший вариант, но что-то нетак

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

Оффлайн fis.irina

  • *
  • Сообщений: 8
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2010-11-19
  • Сайт: 
  • Профессия: Программист 1С
тч "ФормируемыеДокументы" : ПредставлениеОбъекта, СсылкаОбъекта  ;
тч "СодержаниеДокумента" : РеквизитПредставление, ВидЗначения, ЗначениеРеквизита

в ПредставлениеОбъекта выпадает список всех видов документов, после этого в  РеквизитПредставление выпадает список всех реквизитов выбранного вида документа..Тип у всех реквизитов Строка. По скольку все эти виды документов и реквизиты я вытаскивала отбором...

могу вставить листинг кода этих отборов. но он немаленький)



Оффлайн fis.irina

  • *
  • Сообщений: 8
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2010-11-19
  • Сайт: 
  • Профессия: Программист 1С
вот я вот так вот еще пробовала, но не работает

//ТекРеквизит = ЭлементыФормы.СодержаниеДокументов.ТекущиеДанные;
//ТипЗначениеРеквизита=ТипЗнч(РезультатВыбора.Значение);
//з=ТипЗнч(ТекРеквизит.ЗначениеРеквизита);
//з=ТипЗначениеРеквизита;

Оффлайн cska-fanat-kz

  • 1С:Специалист
  • Глобальный модератор
  • *****
  • Сообщений: 5745
  • РЕПУТАЦИЯ: 1099
  • КПД: 19%
  • Красная армия всех сильней!
  • Регистрация: 2010-11-06
    • Skype: cska-fanat-kz81
  • Сайт: cska-fanat-kz.ucoz.kz
  • Профессия: Разработчик 1С
Сделал я так думаю то что требовалось. :zebzdr:

Создал обработку. На форме 2 табличные части:
   ТабличноеПоле1 - список видов документов; 1 колонка - Документ (тип: Строка)
   ТабличноеПоле2 - 2 колонки: Реквизит (тип: Строка), ЗначениеРеквизита (тип: Составной - все типы, которые принимают реквизиты)

Процедура ТабличноеПоле1ДокументНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)
    
//заполняем список выбора поля ТЧ "Документ"

    Элемент.СписокВыбора.Очистить();
    Для каждого Документ Из Метаданные.Документы Цикл
        Элемент.СписокВыбора.Добавить(Документ.Имя);    
    КонецЦикла;
КонецПроцедуры

//Возвращает описание типа Реквизита по именам документа и реквизита
Функция ПолучитьТипРеквизита(ИмяДокумента,ИмяРеквизита)
    Результат = Неопределено;
    
    Для каждого Документ Из Метаданные.Документы Цикл
        Если Документ.Имя = ИмяДокумента Тогда
            Для каждого Реквизит Из Документ.Реквизиты Цикл
                Если Реквизит.Имя = ИмяРеквизита Тогда
                    Результат = Реквизит.Тип;
                    Прервать;
                КонецЕсли;
            КонецЦикла;
        КонецЕсли;
    КонецЦикла;
    
    Возврат Результат;
КонецФункции

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

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

Примечание:
1. Код написан на 8.1. У вас скриншоты на 8.2...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Последний раз редактировалось: Admin; 10 Янв 2011, 21:38

Оффлайн fis.irina

  • *
  • Сообщений: 8
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2010-11-19
  • Сайт: 
  • Профессия: Программист 1С
большое спасибо!!! но... :dfbsdfbsdf: ((

документы и реквизиты я вытаскиваю немного другим способом. но это думаю, нетак важно.
почему-то никак не работает функция типа

"  Результат = Реквизит.Тип;  " или " ПривестиЗначение ". каждый раз "значение не является значением объектного типа"...

вот я примерно так пытаюсь сделать:


//строю таблицу значений куда помещаю все виды документов и список значений куда помещаю все реквизиты...
Процедура ОпределитьСписокОбъектовЗаполнения()
   ТаблицаОбъектовДляЗаполнения = Новый ТаблицаЗначений;
   ТаблицаОбъектовДляЗаполнения.Колонки.Добавить("ОбъектЗаполнения");
   ТаблицаОбъектовДляЗаполнения.Колонки.Добавить("ИмяОбъектаЗаполнения");
   ТаблицаОбъектовДляЗаполнения.Колонки.Добавить("ПредставлениеОбъектаЗаполнения");
   ТаблицаОбъектовДляЗаполнения.Колонки.Добавить("СписокРеквизитов");
   
   СписокОбъектовДляЗаполнения = Новый СписокЗначений;
      Для каждого ТекДокумент Из Метаданные.Документы Цикл
      
      Если ТекДокумент.Реквизиты.Количество() = 0 Тогда
         Продолжить;
      КонецЕсли;
      НоваяСтрока = ТаблицаОбъектовДляЗаполнения.Добавить();
      НоваяСтрока.ОбъектЗаполнения             = Документы[ТекДокумент.Имя].ПустаяСсылка();
      НоваяСтрока.ИмяОбъектаЗаполнения          = ТекДокумент.Имя;
      НоваяСтрока.ПредставлениеОбъектаЗаполнения    = ТекДокумент.Синоним;
      
      СписокРеквизитов = Новый СписокЗначений;
      Для каждого ТекРеквизит Из ТекДокумент.Реквизиты
         Цикл
         СписокРеквизитов.Добавить(ТекРеквизит.Имя, ТекРеквизит.Синоним);
      КонецЦикла;
      НоваяСтрока.СписокРеквизитов = СписокРеквизитов;
      СписокОбъектовДляЗаполнения.Добавить(ТекДокумент.Имя, ТекДокумент.Синоним);
   КонецЦикла;
КонецПроцедуры



Процедура ПриОткрытии()
    ОпределитьСписокОбъектовЗаполнения();
КонецПроцедуры



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



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

//вот тут конечно ошибка!


//ТипРезультата = РезультатВыбора.Тип;
//ТекущиеДанные.ЗначениеРеквизита = ПолучитьТипРеквизита(ЭлементыФормы.ФормируемыеДокументы.ТекущиеДанные.ПредставлениеОбъекта,ТекущиеДанные.РеквизитПредставление).ПривестиЗначение(ТекущиеДанные.ЗначениеРеквизита);

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



Процедура СодержаниеДокументовПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
   ТС = ЭлементыФормы.ФормируемыеДокументы.ТекущаяСтрока;
   ПредставлениеОбъекта=ТС.ПредставлениеОбъекта;
   Элемент.ТекущаяСтрока.ПредставлениеОбъекта = ПредставлениеОбъекта;
КонецПроцедуры


Процедура ПанельПриСменеСтраницы(Элемент, ТекущаяСтраница)
   Если ЭлементыФормы.Панель.ТекущаяСтраница = ЭлементыФормы.Панель.Страницы.СодержаниеДокументов  Тогда
      ТекДанные = ЭлементыФормы.ФормируемыеДокументы.ТекущаяСтрока;
      Если НЕ ТекДанные = Неопределено Тогда
            ПредставлениеОбъекта = ТекДанные.ПредставлениеОбъекта;
            СсылкаОбъекта = ТекДанные.СсылкаОбъекта;

            ЭлементОтбор = ЭлементыФормы.СодержаниеДокументов.ОтборСтрок;
            Отбор = ЭлементОтбор.ПредставлениеОбъекта;
            Отбор.ВидСравнения  =  ВидСравнения.Равно;
            Отбор.Значение      =  ПредставлениеОбъекта;
            Отбор.Использование = Истина;   
         КонецЕсли;
      КонецЕсли;
КонецПроцедуры




Р.S. прошу прощения, что так некрасиво. не нашла, как вставить листинг кода как в конфигураторе(



Теги:
 

Отбор по дополнительному реквизиту в отчете "Продажи" Розница 2.0.8.12

Автор Михаил ДеминРаздел Пользователям "1С - Предприятие 8"

Ответов: 2
Просмотров: 1987
Последний ответ 10 Июн 2016, 10:52
от Михаил Демин
Присвоить начение для реквизита из значения реквизита справочника для печатной формы

Автор ВосходящийРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 18
Просмотров: 9417
Последний ответ 21 Май 2014, 11:01
от cska-fanat-kz
Как выбрать реквизит справочника по реквизиту табличной части документа

Автор genostРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 4
Просмотров: 1027
Последний ответ 30 Июн 2016, 11:26
от genost
Заполнение в табличную часть документа из справочника по определенному реквизиту

Автор witch_nРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 10
Просмотров: 1058
Последний ответ 18 Авг 2016, 13:41
от witch_n
Не могу реквизиту(вид-поле картинки) назначить общую картинку.

Автор bsn-chitaРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 0
Просмотров: 247
Последний ответ 22 Апр 2017, 05:41
от bsn-chita

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

Смотрите бесплатно более 300 видеоуроков по работе в 1С:Бухгалтерия 8 и 1C:ЗУП 8 ред. 3.0

СМОТРЕТЬ >>

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
133 Сообщений
AIFrame
73 Сообщений
alex0402
52 Сообщений
ilyay ilyay
51 Сообщений
andron81_81
44 Сообщений
oleg-x
35 Сообщений
MuI_I_Ika MuI_I_Ika
31 Сообщений
BuhRust
30 Сообщений
Golickoff Golickoff
27 Сообщений
alexandr_ll
23 Сообщений

* Кто онлайн

  • Точка Гостей: 189
  • Точка Скрытых: 0
  • Точка Пользователей: 5
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal