8.х Присвоение типа элементу

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

  1. TopicStarter Overlay
    JediAlex
    Offline

    JediAlex Опытный в 1С

    Регистрация:
    27 авг 2011
    Сообщения:
    140
    Симпатии:
    0
    Баллы:
    26
    где тоя еще накосячил.. пробовал - не выводятся реквизиты в список на форме...
  2. TopicStarter Overlay
    JediAlex
    Offline

    JediAlex Опытный в 1С

    Регистрация:
    27 авг 2011
    Сообщения:
    140
    Симпатии:
    0
    Баллы:
    26
    поле, из которого выбираю справочник имеет тип СправочникСсылка, данные - ТекущийСправочник(реквизит обработки),Реквизиты справочника пытаюсь вывести в табличное поле на форме. Его данные - реквизит обработки с именем Реквизит справочника,который в свою очередь имеет тип СписокЗначений... что может быть еще не правильно???? уже не знаю..разве что ... кроме собственного мозга...
  3. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Есть возможность выложить сюда обработку?
  4. TopicStarter Overlay
    JediAlex
    Offline

    JediAlex Опытный в 1С

    Регистрация:
    27 авг 2011
    Сообщения:
    140
    Симпатии:
    0
    Баллы:
    26
    сейчас выложу..

    Вложения:

  5. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Добавьте колонку в табличное поле ЭлементыСпр. Данные колонки Представление (ну или Значение)
    Посмотреть вложение 8712

    Вложения:

    • 0026.PNG
      0026.PNG
      Размер файла:
      3,3 КБ
      Просмотров:
      22
  6. TopicStarter Overlay
    JediAlex
    Offline

    JediAlex Опытный в 1С

    Регистрация:
    27 авг 2011
    Сообщения:
    140
    Симпатии:
    0
    Баллы:
    26
    Большое спасибо)) реквизиты вывести удалось))
  7. TopicStarter Overlay
    JediAlex
    Offline

    JediAlex Опытный в 1С

    Регистрация:
    27 авг 2011
    Сообщения:
    140
    Симпатии:
    0
    Баллы:
    26
    хотя... удалось, да не совсем... получаю имена реквизитов справочника...Есть третий реквизит обработки -
    Код:
    НовоеЗначение
    
    , которому при выборе реквизита из списка должен присваиваться тип того реквизита справочника, который я выбираю... а тут присваивается тип
    Код:
    Строка
    
    . Почему Строка - понятно - потому что список заполнен не реквизитами, а именами...как теперь присвоить реквизиту
    Код:
    НовоеЗначение
    
    правильный тиП? т.е. чтоб можно было ввести новое значение или выбрать его, если например выбранный реквизит имеет тип СправочникСсылка?
  8. TopicStarter Overlay
    JediAlex
    Offline

    JediAlex Опытный в 1С

    Регистрация:
    27 авг 2011
    Сообщения:
    140
    Симпатии:
    0
    Баллы:
    26
    Например, выбираю в поле Выбор Справочника формы справочник Номенклатура Соответственно получаю тип реквизита ТекущийСправочник, СправчникСсылкаНоменклатура. Из выведенного списка реквизитов выбираю реквизит СтатьяЗатрат, который имеет тип СправочникСсылкаСтатьяЗатрат.. Как мне получить тип реквизита НовоеЗначение СправочникССылкаСтатьяЗатрат? ну или ПеречислениеСсылка.СтавкиНДС, если выберу реквизит СтавкаНДС..
  9. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Самый простой вариант присвоить реквизиту НовоеЗначение значение реквизита справочника:
    Код:
    Процедура ЭлементыСпрВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
    ТекРеквизит = ВыбраннаяСтрока.Значение;
    НовоеЗначение = ТекущийСправочник[ТекРеквизит];
    КонецПроцедуры
    
    Ну или так:
    Код:
    Процедура ЭлементыСпрВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
    ТекРеквизит = ВыбраннаяСтрока.Значение;
    МетаданныеСправочника = ТекущийСправочник.Метаданные();
    ТекСправочник = Справочники[МетаданныеСправочника.Имя].ПустаяСсылка();
    НовоеЗначение = ТекСправочник[ТекРеквизит];
    КонецПроцедуры
    
    Вот только есть у меня сомнение по поводу типа реквизита (Произвольный). Устанавливать тип реквизита объекта будет, а вот отображать в элементе управления (поле ввода) вопрос? IMHO, нужно составной тип реквизита задавать.
  10. TopicStarter Overlay
    JediAlex
    Offline

    JediAlex Опытный в 1С

    Регистрация:
    27 авг 2011
    Сообщения:
    140
    Симпатии:
    0
    Баллы:
    26
    Большое спасибо. Пробую, поэкспериментирую))
  11. TopicStarter Overlay
    JediAlex
    Offline

    JediAlex Опытный в 1С

    Регистрация:
    27 авг 2011
    Сообщения:
    140
    Симпатии:
    0
    Баллы:
    26
    не выводится значение... поставил составной тип реквизита.. все равно не работает.. Например,надо что было так: выбираю справочник Номенклатура - выводятся реквизиты справочника. Это работает. Выбираю в реквизитах СтавкаНДС, который имеет тип СправочникСсылкаСтавкиНДС.. В поле НовоеЗначение тогда должен быть выбор ставок НДС, а на самом деле при нажатии на кнопку выбора ничего не происходит.. Почему? что надо еще сделать?

    прошу прощения за ложный донос.. включил в составной тип СправочникСсылка и ПеречисленияСсылка и заработало.. я уже одурел просто от этой задачи..
  12. TopicStarter Overlay
    JediAlex
    Offline

    JediAlex Опытный в 1С

    Регистрация:
    27 авг 2011
    Сообщения:
    140
    Симпатии:
    0
    Баллы:
    26
    Здравствуйте, уважаемые специалисты.Попытался перезаполнить выбранный реквизит новыми значениями. Например, выбрал справочник Номенклатура,из списка реквизитов выбрал СтавкаНДС. В поле НовоеЗначение получил возможные ставки и нажал Выполнить,для которой написал такой код:
    Код:
    Процедура КнопкаВыполнитьНажатие(Кнопка)
    // Вставить содержимое обработчика.
    МетаданныеСправочника = ТекущийСправочник.Метаданные();
    ТекСправочник = Справочники[МетаданныеСправочника.Имя].ПустаяСсылка();
    Выборка = Справочники[МетаданныеСправочника.Имя].Выбрать();
    Пока Выборка.Следующий() Цикл
    Объект =  Выборка.ПолучитьОбъект();
    Если Не Объект.ЭтоГруппа Тогда
    Объект[РеквизитСправочника] = НовоеЗначение.Значение;
    Объект.Записать();
    КонецЕсли;
    КонецЦикла;
    
    
    не сработало. Запустил отладчик, который выдал следующее:
    Выборка - СправочникВыборка.Номенклатура
    Объект - СправочникОбъект.Номенклатура
    Объект[РеквизитСправочника] - Получение элемента по индексу для значения не определено как правильно сделать нужно???Помогите пожалуйста
  13. TopicStarter Overlay
    JediAlex
    Offline

    JediAlex Опытный в 1С

    Регистрация:
    27 авг 2011
    Сообщения:
    140
    Симпатии:
    0
    Баллы:
    26
    Напомню, что РеквизитСправочника - реквизит обработки, в который записывается выбранный реквизит справочника. НовоеЗначение - также реквизит обработки, в который выводится значение выбранного реквизита
  14. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Не совсем так. РеквизитСправочника у вас это список значений с именами реквизитов. Поэтому имя выбранного реквизита нужно получать так:
    Код:
    ТекРеквизит = ЭлементыФормы.ЭлементыСпр.ТекущиеДанные.Значение;
    
    Ну и далее
    Код:
    Объект[ТекРеквизит] = НовоеЗначение;
    
    Или же (IMHO правильнее) переименовываете существующий реквизит объекта в РеквизитыСправочника (тип - список значений), добавляете реквизит объекта РеквизитСправочника (тип - строка) и при выборе реквизита в списке значений храните там имя выбранного реквизита.
    Код:
    РеквизитСправочника = ВыбраннаяСтрока.Значение;
    
  15. TopicStarter Overlay
    JediAlex
    Offline

    JediAlex Опытный в 1С

    Регистрация:
    27 авг 2011
    Сообщения:
    140
    Симпатии:
    0
    Баллы:
    26
    Сделал по вашему совету.. Ошибок не выдает, но почему то реквизит справочника не заполняется...Например, в Номенклатуре ставка НДС остается пустой..
  16. TopicStarter Overlay
    JediAlex
    Offline

    JediAlex Опытный в 1С

    Регистрация:
    27 авг 2011
    Сообщения:
    140
    Симпатии:
    0
    Баллы:
    26
    хотя, отладчик показывает значение..
    привожу элементы строки табло для строки из тела цикла -
    Код:
    Объект[ТекРеквизит] = НовоеЗначение
    
    :
    Выражение - Объект[ТекРеквизит]
    Значение - 18%
    Тип - ПеречисленияСсылка.СтавкиНДС..



    :


    Реквизит НовоеЗначение у меня заполняется так:
    Код:
    НовоеЗначение = ТекСправочник[ТекРеквизит]
    
    , где ТекСправочник[ТекРеквизит] - столбец
    Тогда получается, что я реквизиту элемента(ячейке) табблицы справочника столбец пытаюсь присвоить?
  17. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    А что показывает отладчик для НовоеЗначение? И почему ТекСправочник[ТекРеквизит] это столбец?
  18. TopicStarter Overlay
    JediAlex
    Offline

    JediAlex Опытный в 1С

    Регистрация:
    27 авг 2011
    Сообщения:
    140
    Симпатии:
    0
    Баллы:
    26
    Проверил в отладчике НовоеЗначение:
    Выражение: НОвоеЗначение
    Значение:18%
    Тип:ПеречислениеСсылка.СтавкиНДС

    Теже самые данные для Объект[ТекРеквизит] т.е... левая часть равна правой поучается... и как бы все нормально. но для строчки:
    Код:
    Объект.Записать();
    
    значение такое:{(1)}: Обращение к процедуре объекта как к функции (Записать)



    Проверил в отладчике НовоеЗначение:
    Выражение: НОвоеЗначение
    Значение:18%
    Тип:ПеречислениеСсылка.СтавкиНДС

    Теже самые данные для Объект[ТекРеквизит] т.е... левая часть равна правой поучается... и как бы все нормально. но для строчки:
    Код:
    Объект.Записать();
    
    значение такое:{(1)}: Обращение к процедуре объекта как к функции (Записать)


    конечно же запись:
    Код:
    Объект.Записать
    
    не работает. Ошибка:{Форма.Форма(12,20)}: Неопознанный оператор
    Объект.Записать<<?>>;


    пробовал так сделать:
    Код:
    Выборка = Справочники[МетаданныеСправочника.Имя].ВыбратьЭлементы();
    Пока Выборка.Следующий() Цикл
    Объект =  Выборка.ПолучитьОбъект();
    Если Не Объект.ЭтоГруппа Тогда
    Объект[ТекРеквизит] = НовоеЗначение;
    Объект.Записать();
    КонецЕсли;
    КонецЦикла;
    
    ругается в ответ:{Форма.Форма(7)}: Метод объекта не обнаружен (ВыбратьЭлементы)
    Выборка = Справочники[МетаданныеСправочника.Имя].ВыбратьЭлементы();
  19. TopicStarter Overlay
    JediAlex
    Offline

    JediAlex Опытный в 1С

    Регистрация:
    27 авг 2011
    Сообщения:
    140
    Симпатии:
    0
    Баллы:
    26
    проверил работу обработки с реквизитом не ссылочного типа.Например, выбрал справочник АдресныеСокращения. В нем 2 реквизита: Уровень - число и Сокращение - Строка. Менял то один то другой из этих реквизитов по всякому... все меняется... а если реквизит ссылочного типа, то не работает.. поле в таблице справочника пустое..(случай с НДС для Номенклатуры)
  20. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Выложите обработку сюда еще раз.

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