8.х Как программно сделать все типы реквизитов формы строкой ?

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Ткачев, 23 авг 2012.

  1. TopicStarter Overlay
    Ткачев
    Offline

    Ткачев

    Регистрация:
    21 июн 2008
    Сообщения:
    15
    Симпатии:
    0
    Баллы:
    1
    Если СвояФорма.ЭлементыФормы.Найти(ИмяЭл) <> Неопределено Тогда
    Если ТипЗнч(СвояФорма.ЭлементыФормы[ИмяЭл].Значение) <> Тип("Строка") И ТипЗнч(СвояФорма.ЭлементыФормы[ИмяЭл].Значение) <> Тип("Число")
    И ТипЗнч(СвояФорма.ЭлементыФормы[ИмяЭл].Значение) <> Тип("Дата") Тогда

    //Вот тут надо заменить тип реквизита на строку!!!

    СвояФорма.ЭлементыФормы[ИмяЭл].Значение = Ссылка[ИмяЭл].Наименование;
    Иначе
    СвояФорма.ЭлементыФормы[ИмяЭл].Значение = Ссылка[ИмяЭл];
    КонецЕсли;
    КонецЕсли;
  2. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.781
    Симпатии:
    509
    Баллы:
    204
    Зачем такое извращение ? А если в реквизите ссылка, что тогда в регистр попадет ? Что будет с отчетами ?
  3. TopicStarter Overlay
    Ткачев
    Offline

    Ткачев

    Регистрация:
    21 июн 2008
    Сообщения:
    15
    Симпатии:
    0
    Баллы:
    1
    Данные в "Ссылка" берутся из другой базы и от туда надо наименование элемента справочника, соединение с базой через СОМ.
    Я же не могу открыть форму по СОМ, или я не прав ?
  4. uza
    Offline

    uza 1С, VBA (EXCEL), VB (.NET + WEB)

    Регистрация:
    10 июл 2007
    Сообщения:
    1.845
    Симпатии:
    1
    Баллы:
    29
    А сразу запилить форму, с типами элементов "Строка неограниченной длины" не? не канает?
    В общем случае изменение типа реквизита формы может быть невыполнимо.
    Например если это форма документа, справочника или регистра, то реквизит формы есть, и если он отсылает к БД (берет реквизит справочника/дока/регистра) - то менять его тип НИЗЯ!

    Сам тип реквизита формы исходно должен поддерживать тип "строка" (т.е. иметь составной тип). Остальное вы можете подсмотреть в типовых конфах на формах, где отбор может устанавливаться как "Равно/Не равно/В списке/Не в списке"
  5. TopicStarter Overlay
    Ткачев
    Offline

    Ткачев

    Регистрация:
    21 июн 2008
    Сообщения:
    15
    Симпатии:
    0
    Баллы:
    1
    Есть такой регистр "РегистрСведений.СоответствиеОбъектовДляОбмена" я не хочу видить в нем ГУИД, а хочу видеть наименование объекта из другой базы.
    А Тип строка мне нужен для открытия элемента из сом базы.
  6. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.781
    Симпатии:
    509
    Баллы:
    204
    Хм, интересно становится, каким тогда образом у вас будут сопоставляться объекты? По названию ?

    Может тогда проще добавить в этот РС еще один строковый реквизит и писать туда наименование ?
  7. TopicStarter Overlay
    Ткачев
    Offline

    Ткачев

    Регистрация:
    21 июн 2008
    Сообщения:
    15
    Симпатии:
    0
    Баллы:
    1
    По ГУИД-у

    Еще не совсем готово, хотелось бы послушать отзывы.
    http://rusfolder.com/32262702
  8. uza
    Offline

    uza 1С, VBA (EXCEL), VB (.NET + WEB)

    Регистрация:
    10 июл 2007
    Сообщения:
    1.845
    Симпатии:
    1
    Баллы:
    29
    А чего огороды то городить?
    Делай раз: в форме Регистра колонку ГУИД делаем невидимой
    Делай два: добавляем новую колонку на форме регистра (не связанную с данными)
    Делай три: в событии "ПриВыводеСтроки" прописываем заполнение этой колонки вычисленным строковым значением из второй БД.

    Но делать так можно разве что, если в той, второй БД шибко часто правят наименования (строковые представления). Ибо такой вот подход тормозной и е[цензура]ый.
    Шутка ли, для каждой записи регистра нужно постучаться в другую БД и спросить что же она имела в виду под [128340edjsdklfgjsdoreu1p0298493-02180941].

    Ежли строковое представление во втрой БД меняется не часто - то лучше уж в регистре (а еще лучше, в справочнике отдельном) хранить эти представления и ГУИДы. И раз в цать часов/дней/месяцев выполнять регламентное задание по синхронизации итих БД.

    P.S.
    ГУИД у второй БД - это 1Совский УникальныйИдентификатор элемента справочника / экземпляра документа ?
    Если так, то еще раз фигня. Ибо 1С не гарантирует что после, допустим обновления (платформы или конфигурации) этот GUID останется прежним!
    Фиксируйте его явно в виде отдельного реквизита справочника / документа.
  9. TopicStarter Overlay
    Ткачев
    Offline

    Ткачев

    Регистрация:
    21 июн 2008
    Сообщения:
    15
    Симпатии:
    0
    Баллы:
    1
    Какая ерунда, вот из-за таких все так криво и работает.
    Обработка нужна на разовые работы, когда не идет какой нибудь элемент и поправить его надо быстренько.
  10. uza
    Offline

    uza 1С, VBA (EXCEL), VB (.NET + WEB)

    Регистрация:
    10 июл 2007
    Сообщения:
    1.845
    Симпатии:
    1
    Баллы:
    29
    Дайте две!
  11. TopicStarter Overlay
    Ткачев
    Offline

    Ткачев

    Регистрация:
    21 июн 2008
    Сообщения:
    15
    Симпатии:
    0
    Баллы:
    1
    Почему не показывает ? ТабЗнч заполняеться.

    Код:
        СтандартнаяОбработка = Ложь;
    Запрос = БазаСОМ.NewObject("Запрос");
    Запрос.Текст = "
    |ВЫБРАТЬ
    //|    СсылкаДругойБазы.Ссылка,
    |    СсылкаДругойБазы.Код,
    |    СсылкаДругойБазы.Наименование
    |ИЗ
    |    " +  СтрЗаменить(ЭлементыФормы.Таб.ТекущиеДанные.ИмяТипаПриемника, "Ссылка", "")  + " КАК СсылкаДругойБазы";
    ФормаВыбора = ПолучитьФорму("ФормаВыбораСсылок");
    ТабЗнч = ФормаВыбора.ЭлементыФормы.ТабЗнач.Значение;
    ТабЗнч.Колонки.Добавить("Код");
    ТабЗнч.Колонки.Добавить("Наименование");
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
    НоваяСтрока = ТабЗнч.Добавить();
    НоваяСтрока.Код = Выборка.Код;
    НоваяСтрока.Наименование = Выборка.Наименование;
    КонецЦикла;
    ФормаВыбора.ОткрытьМодально();
  12. uza
    Offline

    uza 1С, VBA (EXCEL), VB (.NET + WEB)

    Регистрация:
    10 июл 2007
    Сообщения:
    1.845
    Симпатии:
    1
    Баллы:
    29
  13. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    что не показывает?????

    З.Ы. пользуйтесь тегами для формления кода....
  14. TopicStarter Overlay
    Ткачев
    Offline

    Ткачев

    Регистрация:
    21 июн 2008
    Сообщения:
    15
    Симпатии:
    0
    Баллы:
    1
    Код:
    ...
    ФормаВыбора.ЭлементыФормы.ТабЗнач.СоздатьКолонки();
    ФормаВыбора.ОткрытьМодально();
  15. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    может я чет не допоняла, но сдается мне, что вы не видите свою заполненную тз, следовательно я бы поправила код таким образом

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

Поделиться этой страницей