8.х Присвоить значение

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

  1. TopicStarter Overlay
    NewCoder
    Offline

    NewCoder Опытный в 1С

    Регистрация:
    8 дек 2011
    Сообщения:
    189
    Симпатии:
    0
    Баллы:
    26
    Добрый день, подскажите пожалуйста как присвоить переменной выбранное пользователем из справочника значение если СтандартнаяОбработка отключена?

    Вот процедура которая начинает работать при попытке выбрать значение (открывается форма списка значений, но выбранное значение я не знаю как присвоить).
    Код:
    Процедура ОбъектКонфигурацииНачалоВыбора(Элемент, СтандартнаяОбработка)
        СтандартнаяОбработка = Ложь;
        Если НЕ ЗначениеЗаполнено(ЭлементыФормы.ВидОбъекта.Значение)= Истина Тогда
            Сообщить("Не выбран вид объекта!");
            Возврат;
        КонецЕсли;         
       
        Попытка
            ОткрытьФорму(ВидОбъекта + ".ФормаВыбора", , ЭтаФорма); 
        Исключение   
        КонецПопытки; 
    КонецПроцедуры
  2. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    процедура Обработка Выбора - там присваивается
  3. TopicStarter Overlay
    NewCoder
    Offline

    NewCoder Опытный в 1С

    Регистрация:
    8 дек 2011
    Сообщения:
    189
    Симпатии:
    0
    Баллы:
    26
    Я уже проверял, ставил в ОбработкуВыбора такой код и точку останова - он даже не останавливается!
    Код:
    Процедура ОбъектКонфигурацииОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
    ОбъектКонфигурации = ВыбранноеЗначение;   
    КонецПроцедуры
    
  4. Tiger86
    Offline

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

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

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    1) ПолучитьФормуВыбора()
    2) Вторым параметром передавайте туда "Элемент".
    NewCoder нравится это.
  6. TopicStarter Overlay
    NewCoder
    Offline

    NewCoder Опытный в 1С

    Регистрация:
    8 дек 2011
    Сообщения:
    189
    Симпатии:
    0
    Баллы:
    26
    так сделать?
    Код:
    Процедура ОбъектКонфигурацииНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
        СтандартнаяОбработка = Ложь;
        Если НЕ ЗначениеЗаполнено(ЭлементыФормы.ВидОбъекта.Значение)= Истина Тогда
            Сообщить("Не выбран вид объекта!");
            Возврат;
        КонецЕсли;         
       
        Попытка
            ОткрытьФорму(ВидОбъекта + ".ФормаВыбора", , ЭтаФорма); 
            ПолучитьФормаВыбора(,Элемент);
        Исключение   
        КонецПопытки; 
    КонецПроцедуры
    
    Выдает ошибку - такая процедура не найдена и что дальше делать?
  7. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    ВидОбъекта - это что? Тип значения какой?
    --- Объединение сообщений, 22 окт 2014 ---
    Блок Попытка-Исключение по какой причине стоит?
    NewCoder нравится это.
  8. TopicStarter Overlay
    NewCoder
    Offline

    NewCoder Опытный в 1С

    Регистрация:
    8 дек 2011
    Сообщения:
    189
    Симпатии:
    0
    Баллы:
    26
    ВидОбъекта - Это документ или справочник, выбирается в другом полеввода.
  9. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    --- Объединение сообщений, 22 окт 2014 ---
    На форме у поля ввода (или что там это такое) ВидОбъекта тип значения какой?
    --- Объединение сообщений, 22 окт 2014 ---
    Если строка, то пример этой строки.
    NewCoder нравится это.
  10. TopicStarter Overlay
    NewCoder
    Offline

    NewCoder Опытный в 1С

    Регистрация:
    8 дек 2011
    Сообщения:
    189
    Симпатии:
    0
    Баллы:
    26
    поле выделено зеленым. тип - справочники, пустая ссылка, документы, обработки.
    При выборе в этом поле срабатывает процедура:
    Код:
    Процедура ВидОбъектаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
        СтандартнаяОбработка = Ложь;
       
        сп = Новый СписокЗначений;
        сп.Добавить("Справочник");
        сп.Добавить("Документ");
        сп.Добавить("Отчет");
        сп.Добавить("Обработка");
        Эл = сп.ВыбратьЭлемент();
        Если НЕ Эл = Неопределено Тогда
           
            ВидОбъекта = Эл.Значение;
           
            спВидов = ПолучитьВиды(ВидОбъекта);      
           
            Эл = спВидов.ВыбратьЭлемент();
            Если НЕ Эл = Неопределено Тогда
                ВидОбъекта = ВидОбъекта + "." + Эл.Значение;
                ВидОбъектаСиноним = ВидОбъекта + "." + Эл.Представление;
                ОбъектКонфигурации.ВидОбъекта = ВидОбъекта;
            КонецЕсли;
           
        КонецЕсли;
    
    КонецПроцедуры
    

    Вложения:

    • стоб.jpg
      стоб.jpg
      Размер файла:
      259,6 КБ
      Просмотров:
      2
  11. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Пока не вчитывался.
    А какая для Отчет и Обработка может быть форма выбора?
    --- Объединение сообщений, 22 окт 2014 ---
    Что такое
    ОбъектКонфигурации.ВидОбъекта = ВидОбъекта;
    ?
    --- Объединение сообщений, 22 окт 2014 ---
    NewCoder мне честно говоря лениво в логике работы всего этого разбираться, просто скажите тогда в процедуре ОбъектКонфигурацииНачалоВыбора() ВидОбъекта какой тип значения имеет, и пример этого значения приведите.
    Последнее редактирование: 22 окт 2014
    NewCoder нравится это.
  12. TopicStarter Overlay
    NewCoder
    Offline

    NewCoder Опытный в 1С

    Регистрация:
    8 дек 2011
    Сообщения:
    189
    Симпатии:
    0
    Баллы:
    26
    "Справочник.Банки" это значение
  13. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Ладно, я буду исходить из того что тип значения ВидОбъекта - строка.
    Так как-то:
    Код:
    Процедура ОбъектКонфигурацииНачалоВыбора(Элемент, СтандартнаяОбработка)
      Если НЕ ЗначениеЗаполнено(ЭлементыФормы.ВидОбъекта.Значение) Тогда
        Сообщить("Не выбран вид объекта!");
        Возврат;
      КонецЕсли;
    
      ТипОбъекта = Тип(ВидОбъекта);
      ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипОбъекта);
      МенеджерОбъекта = Неопределено;
      Если Справочники.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда
        МенеджерОбъекта = Справочники[ОбъектМетаданных.Имя];
      ИначеЕсли Документы.ТипВсеСсылки().СодержитТип(ТипОбъекта) Тогда
        МенеджерОбъекта = Документы[ОбъектМетаданных.Имя];
      КонецЕсли;
    
      Если МенеджерОбъекта <> Неопределено Тогда
        СтандартнаяОбработка = Ложь;
        МенеджерОбъекта.ПолучитьФормуВыбора(, Элемент).Открыть();
      КонецЕсли;
    
    КонецПроцедуры
    
    NewCoder нравится это.
  14. TopicStarter Overlay
    NewCoder
    Offline

    NewCoder Опытный в 1С

    Регистрация:
    8 дек 2011
    Сообщения:
    189
    Симпатии:
    0
    Баллы:
    26
    при попытке определить тип - выдает ошибку - что не может определить тип.
    ТипОбъекта = Тип(ВидОбъекта);
  15. Svb
    Offline

    Svb Опытный в 1С Команда форума

    Регистрация:
    12 янв 2011
    Сообщения:
    980
    Симпатии:
    19
    Баллы:
    29
    Чтобы Тип() отработал ВидОбъекта должны быть таким "СправочникСсылка.Банки"
    NewCoder нравится это.
  16. TopicStarter Overlay
    NewCoder
    Offline

    NewCoder Опытный в 1С

    Регистрация:
    8 дек 2011
    Сообщения:
    189
    Симпатии:
    0
    Баллы:
    26
    Так тип работает, но он почему-то не присваивается реквизиту с составным типом, он таки остается неопределенным. Нужно, чтобы после присвоения типа этому реквизиту, при нажатии на форме на его поле ввода - был список из элементов справочника или выбранного типа документа.
  17. Svb
    Offline

    Svb Опытный в 1С Команда форума

    Регистрация:
    12 янв 2011
    Сообщения:
    980
    Симпатии:
    19
    Баллы:
    29
    У вас же в 14 сообщении написано, что не может определить тип :)
    --- Объединение сообщений, 23 окт 2014 ---
    Такой код у меня работает. Попробуйте разобраться и адаптировать к своим нуждам.
    Код:
            РеквизитОбъекта = ОбъектМетаданные.Реквизиты.Найти(НазваниеРеквизита);
            Если РеквизитОбъекта = Неопределено Тогда
                МассивТипов = Новый Массив;
                МассивТипов.Добавить(Тип("Строка"));
                Элементы.ТаблицаОтбораПравоеЗначение.ОграничениеТипа = Новый ОписаниеТипов(МассивТипов);
                Элементы.ТаблицаОтбораПравоеЗначение.ВыбиратьТип = МассивТипов.Количество()>1;
            Иначе           
                Элементы.ТаблицаОтбораПравоеЗначение.ОграничениеТипа = РеквизитОбъекта.Тип;
                Элементы.ТаблицаОтбораПравоеЗначение.ВыбиратьТип = Ложь;
    
    --- Объединение сообщений, 23 окт 2014 ---
    Прокомментирую немного.
    ТаблицаОтбораПраоеЗначение имеет составной тип (ЛюбаяСсылка, строка, число, булево). РеквизитОбъекта.Тип это тип реквизита объекта, для которого я хочу выбрать значение. Далее, строчками
    Код:
                Элементы.ТаблицаОтбораПравоеЗначение.ОграничениеТипа = РеквизитОбъекта.Тип;
                Элементы.ТаблицаОтбораПравоеЗначение.ВыбиратьТип = Ложь;
    я добиваюсь того, чтобы пользователю не надо было выбирать тип вручную, а тип устанавливался в зависимости от выбранного реквизита объекта.
    NewCoder нравится это.
  18. TopicStarter Overlay
    NewCoder
    Offline

    NewCoder Опытный в 1С

    Регистрация:
    8 дек 2011
    Сообщения:
    189
    Симпатии:
    0
    Баллы:
    26
    Огромнейшее всем спасибо, наконец заработало!

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