7.7 Помогите с кодом

Тема в разделе "Общие вопросы "1С:Предприятие 7.7"", создана пользователем bvv79, 18 окт 2009.

  1. TopicStarter Overlay
    bvv79
    Offline

    bvv79

    Регистрация:
    31 мар 2008
    Сообщения:
    32
    Симпатии:
    0
    Баллы:
    1
    наверное мозг замылился, не могу решить простенькую вещь:
    платформа 7.7, релиз 27

    имеется справочник с реквизитами: январь, февраль, март
    имеется некая обработка, которая берет данные из этих реквизитов.

    примерный кусок кода:
    Код:
    спр=создатьобъект ("справочник....");
    спр.найтипореквизиту (...);                          //позиционируюсь на требуемую запись;
    переменная1=датамесяц(текущаядата()); //возвращаемые текстовые значения соответствуют 
    
    
    ревкизитам справочника буква в букву.

    так вот надо обратиться к реквизиту справочника, заданного в виде строки, типа:
    Код:
    переменная2 = спр.переменная1;
    
    
    но при этом выдается ошибка. ясно понятно, что такого реквизита - "переменная1" в структуре справочника нет, как сделать так, что бы значение переменной подменялись на реквизит?

    Пользуемся тегами!
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Ты же уже сделал это:
    Код:
    спр=создатьобъект ("справочник....");
    спр.найтипореквизиту ("РеквизитДата",МоеЗначение,1);   //позиционируюсь на требуемую запись;
    
    
  3. TopicStarter Overlay
    bvv79
    Offline

    bvv79

    Регистрация:
    31 мар 2008
    Сообщения:
    32
    Симпатии:
    0
    Баллы:
    1
    нет, ты не понял, объясню еще.
    в справочнике 4 реквизита: статьидоходов,январь,февраль,март
    позиционируюсь на элемент справочника я по реквизиту "статьидоходов", а обращаться к другим реквизитам приходится через текстовую переменную. примерно это выглядит как:
    перем1="январь";
    перем2=спр.перем1;

    может там надо задействовать "Метаданные"?
  4. Хряк
    Offline

    Хряк Профессионал в 1С

    Регистрация:
    26 сен 2007
    Сообщения:
    1.447
    Симпатии:
    37
    Баллы:
    54
    Извини, ничё не понятно
    Поставь задачу иначе

    +что находится в рекв. янв, февр,...
  5. TopicStarter Overlay
    bvv79
    Offline

    bvv79

    Регистрация:
    31 мар 2008
    Сообщения:
    32
    Симпатии:
    0
    Баллы:
    1
    реквизит "статьидоходов"-перечисление с уникальными именами, "январь,февраль,март"-цифры, которые неизвестны и могут повторяться, поэтому позиционироваться на них нельзя.
    вот он код:

    Код:
    Процедура Сформировать()
    
    если пустоезначение(фотделы)=1 тогда
    сообщить ("Выберите отдел");
    возврат;
    конецесли;
    
    Спр=создатьобъект ("Справочник.ПланПоДоходам");
    Спр.использоватьвладельца(фотделы);
    
    запрос=создатьобъект("Запрос");
    текстзапроса="
    |Период с '01.01.2009' по '31.03.2009';
    |статьи=регистр.фактдоходы.статьи;
    |отделы=регистр.фактдоходы.отделы;
    |суммаД=регистр.фактдоходы.сумма;
    |группировка отделы все;
    |группировка статьи все;
    |группировка месяц все;
    |функция ФактСумма=сумма (СуммаД);
    |условие (отделы=Фотделы);
    |";   
    
    
    Если Запрос.Выполнить(ТекстЗапроса)= 0 Тогда
    Возврат;
    КонецЕсли;
    
    Таб = СоздатьОбъект("Таблица");
    таб.вывестисекцию("шапка");
    таб.вывестисекцию ("статьи");
    
    
    Пока Запрос.Группировка("отделы")=1 Цикл
    сообщить (запрос.отделы);
    Пока Запрос.Группировка("статьи")=1 Цикл 
    
    статьидоходов=запрос.статьи;
    таб.вывестисекцию("СтатьиДоходов|первая");
    Пока Запрос.Группировка("месяц")=1 Цикл
    факт=запрос.фактсумма;                                       //данные в таблицу
    спр.найтипореквизиту("СтатьяДоходов",запрос.статьи,0);
    
    й1=  нрег(сред(запрос.месяц,1,стрдлина(запрос.месяц)-3));    //получаем название месяца  в текстовом виде
    //а вот она ПРОБЛЕМА доступа к реквизиту справочника, заданного неявно
    план=спр.й1;   //план=спр.й1; {Отчет.ИсполнениеБюджета.Форма.Модуль(60)}: Поле агрегатного объекта не обнаружено (й1)
    
    таб.присоединитьсекцию("статьиДоходов|месяц");  //тут собственно строится таблица по месяцам
    КонецЦикла; 
    конеццикла;
    КонецЦикла;
    таб.показать();
    
    КонецПроцедуры 
    
    
  6. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Тогда используй

    ВыбратьЭлементыПоРеквизиту(<ИмяРеквизита>,<Значение>,<РежимИерархии>,<РежимГрупп>)
    Назначение:
    Открыть выборку элементов справочника по значению реквизита.


    В качестве реквизита отбора используй запрос.статьи. В цикле сравнивай месяца - при совпадении получишь ссылку на искомый элемент справочника.
  7. TopicStarter Overlay
    bvv79
    Offline

    bvv79

    Регистрация:
    31 мар 2008
    Сообщения:
    32
    Симпатии:
    0
    Баллы:
    1
    ага, вроде вариант, надо попробовать.
    но на будущее - как можно обратиться к реквизиту диалога, описанного текстом?
  8. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Как-то заумно выражаешь свои мысли. Трудно понять. Что значит "описанного текстом"? Поконкретнее..
  9. TopicStarter Overlay
    bvv79
    Offline

    bvv79

    Регистрация:
    31 мар 2008
    Сообщения:
    32
    Симпатии:
    0
    Баллы:
    1
    ну я эту проблему всю тему жувал:

    спр.+"январь"

    так понятней?
  10. KishMish
    Offline

    KishMish

    Регистрация:
    16 окт 2009
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Код:
    Значение=Спр.ПолучитьАтрибут(<ИмяРеквизита>);
    Спр.УстановитьАтрибут(<ИмяРеквизита>,<Значение>)
    
    Это назвается обращение к реквизиту по его идентификатору

    Код:
    ОписаниеТекстом="Дата2"
    Форма.ПолучитьАтрибут(ОписаниеТекстом).Видимость(1); //сам кака атрибут формы
    Сообщить(Шаблон("["+ОписаниеТекстом+"]")); // значение реквизиты
    
    вроде так
    для того чтобы присвоить значение реквизиту формы по его названию нао использовать спец функцию Присвоить


    Недокументированные возможности функции Шаблон

    Код:
    // Присвоить значение переменной по ее имени.
    // в глоб.модуль:
    Функция Присвоить(Чему,Что) Экспорт
    Чему = Что;
    Возврат "";
    КонецФункции
    // варианты вызова:
    // Шаблон("[Присвоить("+ИмяПеременной+",ПеременнаяСоЗначением)]");
    // Шаблон("[Присвоить("+ИмяПеременной+","+ИмяПеременнойСоЗначением+")]");
    // Пример: пусть у нас на форме есть 5 числовых реквизитов К1, К2, ... К5
    Для н=1 по 5 Цикл
    Шаблон("[Присвоить("+("К"+н)+","+(н)+")]");
    КонецЦикла;
    
Похожие темы
  1. Arfey
    Ответов:
    2
    Просмотров:
    771
  2. Arfey
    Ответов:
    1
    Просмотров:
    632
Загрузка...

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