8.х Сравнение строки и имени реквизита

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

  1. TopicStarter Overlay
    sgirg
    Offline

    sgirg Опытный в 1С

    Регистрация:
    25 дек 2008
    Сообщения:
    126
    Симпатии:
    0
    Баллы:
    26
    Доброго времени суток. Прошу ответить на мой вопрос:
    Можно ли сравнить значение типа данных "Строка" с именем реквизита в справочнике? если можно, то как, подскажите плиз))
  2. Доктор Руфус Бейли
    Offline

    Доктор Руфус Бейли Опытный в 1С

    Регистрация:
    7 апр 2010
    Сообщения:
    277
    Симпатии:
    0
    Баллы:
    26
    Используйте "Метеданные". Синтаксис-помощник вещает:
    Пример:
    Код:
    Если Не ТоварСсылка.Пустая() Тогда
    МетаданныеСправочника = ТоварСсылка.Метаданные();
    Сообщить("Представление справочника - " + 
    МетаданныеСправочника.Представление());
    КонецЕсли;
    
    
    ИЛИ

    Код:
    Для каждого Реквизит из ЭтотОбъект.Метаданные() Цикл
    
  3. TopicStarter Overlay
    sgirg
    Offline

    sgirg Опытный в 1С

    Регистрация:
    25 дек 2008
    Сообщения:
    126
    Симпатии:
    0
    Баллы:
    26
    Программирую я документ и нужно метаданные вызвать из справочника, а мне квалификация не позволяет такое чудо сотворить(( я совсем начинающий
  4. Доктор Руфус Бейли
    Offline

    Доктор Руфус Бейли Опытный в 1С

    Регистрация:
    7 апр 2010
    Сообщения:
    277
    Симпатии:
    0
    Баллы:
    26
    Понимаю. Только нужна более подробная задача: реализаций море. Если вам нужно сравнить строку с каждым реквизитом, выглядеть должно как-то так.

    Код:
    Для каждого Реквизит из ЭтотОбъект.Метаданные() Цикл
    Если СокрЛП(Реквизит.ПолноеИмя()) = ЦелеваяСтрока Тогда
    Сообщить(СокрЛП(РеквизитПолноеИмя()));
    КонецЕсли;
    КонецЕсли;
    
    Разумеется, здесь я не выполнил вашу задачу полностью, а лишь сравнил строку со всеми реквизитами по имени и вывел тот, с которым совпало.
  5. TopicStarter Overlay
    sgirg
    Offline

    sgirg Опытный в 1С

    Регистрация:
    25 дек 2008
    Сообщения:
    126
    Симпатии:
    0
    Баллы:
    26
    Доктор Руфус Бейли, дико извиняюсь, но так и не смог разобраться... опишу по подробнее что именно пытаюсь сделать:

    Документ, на нем есть поле ввода (под именем "Месяц"). Тип значения у него: ПеречислениеСсылка.Месяц (ну соответственно в перечислениях я набрал названия месяцев).

    Есть справочник, допустим под названием "Вода", реквизитами его являются все те же месяцы.
    Пример вида справочника:
    Номер|Январь|февраль|Март|Апрель|...и т.д.
    1____|___100|____150|_180|___190|....

    В коде документа нужно запрограммировать что то типа:
    если месяц, выбранный в документе равен имени реквизита в справочнике "Вода", тогда в какую либо переменную записываю значение данного реквизита.
    Т.е. если в документе выбран Март, то в переменную записываем значение 180.
    как то так...
  6. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Бррр... Не понимаю.. Т.е. у вас в справочнике Вода - 12 реквизитов, называющихся январь, февраль и т.д.?

    А что дальше с этой переменной должно происходить?
  7. TopicStarter Overlay
    sgirg
    Offline

    sgirg Опытный в 1С

    Регистрация:
    25 дек 2008
    Сообщения:
    126
    Симпатии:
    0
    Баллы:
    26
    Ага, помимо номера

    Эта переменная будет использоваться для расчета одной формулы, дальше я уже справлюсь....только вот на этой стадии уперся в "мыслительный тупик"
  8. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Что-то заставляет меня предположить что подойдет вам больше не справочник, а регистр сведений. Возможно переодический (в зависимости от задачи), где измерением будет ПеречислениеСсылка.Месяц, а ресурсом ваше число (стоимость это там у вас или что)..
  9. Доктор Руфус Бейли
    Offline

    Доктор Руфус Бейли Опытный в 1С

    Регистрация:
    7 апр 2010
    Сообщения:
    277
    Симпатии:
    0
    Баллы:
    26
    На самом деле было бы лучше, если бы вы сказали, в чём именно вы не смогли разобраться на указанном примере, тем более, что я в силу природной лени и того факта, что мою работу за меня делать не будут, так или иначе, буду писать примеры, не очень сильно вникая в то, что вам нужно.

    Во-вторых, организация справочника бездарна... На самом деле, табличная часть была бы намного лучше - не говоря о других, более вычурных и изящных вариантах.

    Код:
    Для каждого Реквизит из Справочник.Метаданные() Цикл 
    Если СокрЛП(Реквизит.ПолноеИмя()) = СокрЛП(Месяц) Тогда
    Реквизит = ЗначениеКотороеНадоЗаписатьВРеквизит;
    КонецЕсли;
    КонецЦикла;
    
    
    Не проверял, ибо особо и не на чем. Но должно быть похоже на это.

    Разумеется, переменные абстрактные: Справочник - это ваш справочник, Месяц - это значение того поля, в котором указываете месяц, а значениекотороеблаблабла - то, что хотите записать в реквизит справочника.
  10. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Не, человеку прям так думаю не пойдет, в любом случае если есть 12 реквизитов, то соответствующее значение из Перечисление.Месяцы найдется, другое дело - будет ли оно заполнено.
  11. Доктор Руфус Бейли
    Offline

    Доктор Руфус Бейли Опытный в 1С

    Регистрация:
    7 апр 2010
    Сообщения:
    277
    Симпатии:
    0
    Баллы:
    26
    Сделать проверку на заполненность значения - дело одного плевка. У вас есть какое-либо соображение, почему это не годится, которое я не замечаю?
  12. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Ну почему не годится, можно конечно и так..:) Но согласитесь, насчет принципа - кривовато выглядит: искать имя реквизита по значению перечисления.
  13. Доктор Руфус Бейли
    Offline

    Доктор Руфус Бейли Опытный в 1С

    Регистрация:
    7 апр 2010
    Сообщения:
    277
    Симпатии:
    0
    Баллы:
    26
    Вас понял. Отмечаю вашу правоту: я и не скрываю, что это - всего лишь кривой набросок в те мгновения, пока делается очередной бэкап терзаемой дурной программисткой головой базы.
    Если есть более быстрый и красивый способ, с удовольствием взгляну (а, может, и придумаю сам, когда время будет - у меня голова дурная), да ещё и на "Спасибо" жахну.
  14. TopicStarter Overlay
    sgirg
    Offline

    sgirg Опытный в 1С

    Регистрация:
    25 дек 2008
    Сообщения:
    126
    Симпатии:
    0
    Баллы:
    26
    shurikvz
    С регистром сведений я не особо дружен, и думаю, что от него легче не будет, т.к. я уже ранее писал, что кроме месяцев есть реквизит номер (и это не стандартный код, который идет в справочниках по дефолту) и по этому номеру я осуществляю поиск нужной мне строки (в идеале строк там будет около 10 000)
  15. Доктор Руфус Бейли
    Offline

    Доктор Руфус Бейли Опытный в 1С

    Регистрация:
    7 апр 2010
    Сообщения:
    277
    Симпатии:
    0
    Баллы:
    26
    На самом деле, зря. Я, как подружился, так понял, насколько это удобный инструмент - особенно когда надо наладить взаимосвязь между НеведомойЗлостнойФигнёй и УдивительнойСтрашнойЕрундой. Для подобных задач регистры - святой инструмент. Кстати, как и для задач уровня вашей.
  16. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Ну а чего там писать то? может я задачу не понял, но:
    Код:
    Отбор = Новый Структура;
    Отбор.Вставить("Месяц", Месяц);
    Отбор.Вставить("Код", Код);
    
    Табл = РегистрыСведений.МойРегистр.СрезПоследних(ТекущаяДата(), Отбор);
    
    Если Табл.Количество() > 0 Тогда
    НайденоеЗначение = Табл[0].МоеЧисло;
    КонецЕсли;
    
    
    
    Структура периодического регистра:
    Месяц - измерение, тип Перечисление.Месяцы
    Код - можно как реквизит, тип строка или число, смотря что надо
    МоеЧисло - ресурс, тип число

    Писал прям здесь, просьба не пинать.. :)
  17. Доктор Руфус Бейли
    Offline

    Доктор Руфус Бейли Опытный в 1С

    Регистрация:
    7 апр 2010
    Сообщения:
    277
    Симпатии:
    0
    Баллы:
    26
    Через регистры и я могу *обиженным голосом в нос*
    Я думал, что у вас есть более изящное решение для метаданных... Я с ними сегодня впервые работал (нет, не на форуме - в конфигураторе своём - просто совпало), потому любой огрызок знания для меня, как для самоучки, манна небесная.

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