Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 3
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )

> Работа с синонимом реквизита шапки документа , Как получить значение синонима реквизита шапки документа          
leonid_gun Подменю пользователя
сообщение 17.04.19, 9:24
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 17
Спасибо сказали: 0 раз
Рейтинг: 0

Здравствуйте.
Есть необходимость получить синоним реквизита документа для его последующего отображения в заголовке окна редактирования значения этого реквизита

Процедура ВводПоля(РеквизитДокумента)   // РеквизитДокумента передается в процедуру
    Перем Инф;
    
    //Синоним = РеквизитДокумента.Синоним; // вот здесь не знаю как обратиться к нужному реквизиту, а точнее к его синониму
    
    Инф= РеквизитДокумента;
    Если ВвестиСтроку(Инф, "Введите значение " + Синоним, 999, 1,) = 1 Тогда
        РеквизитДокумента = Инф;
    Иначе
        Возврат;
    КонецЕсли;
КонецПроцедуры


Подскажите как правильно обращаться к Синониму или к Комментарий реквизита шапки, ведь для чего-то они присутствуют в базе. Пробовал через метаданные, но понял только как получить Синоним идентификатора документа, а мне нужен синоним реквизита шапки.

sava1 Подменю пользователя
сообщение 17.04.19, 9:57
Сообщение #2

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2014
Из: Проскуров
Спасибо сказали: 471 раз
Рейтинг: 461


 ! 

Правила: 16
 


Сообщение отредактировал Vofka - 17.04.19, 11:21

Vladal Подменю пользователя
сообщение 17.04.19, 16:23
Сообщение #3

Оратор
*****
Группа: Пользователи
Сообщений: 275
Из: Украина
Спасибо сказали: 47 раз
Рейтинг: 32

Правильно ли я понимаю, что синоним реквизита должен быть заполнен в метаданных?
Тогда по метаданным в цикле и прочитать синоним

Не знаю, что у Вас - УФ или ОП, есть кусочек из кода для обычного приложения:

    МетаданныеДокумента = Источник.Метаданные();
    
    // Проверка по реквизитам шапки

    Для Каждого РеквДок из МетаданныеДокумента.Реквизиты Цикл
        Сообщить(РеквДок.Синоним);
    КонецЦикла;
    
    // Проверка по табличным частям

    Для каждого ТабЧасть Из МетаданныеДокумента.ТабличныеЧасти Цикл
        Для каждого КолонкаТЧ Из ТабЧасть.Реквизиты Цикл
            Сообщить(КолонкаТЧ.Синоним);
        КонецЦикла;
    КонецЦикла;


Для УФ будет немного иной подход.

Более подробно смотрите мои ответы в этой теме на Мисте: [необходимо зарегистрироваться для просмотра ссылки]

-------------------------------------------------------------------------------------------------------------

А вот факультативно занимался подобным, формируя синонимы реквизитов. Функция СформироватьСиноним()
тоже моя публикация: [необходимо зарегистрироваться для просмотра ссылки]

// Формирует синоним переменной.
// Пример: на входе "ИмяПеременнойАБВГ", на выходе "Имя переменной АБВГ"
//
// Параметры
// ИмяРеквизита - Строка. Имя переменной, имя колонки таблицы
//
// Возвращаемое значение:
// Строка - Представление переменной
//
Функция СформироватьСиноним(ИмяРеквизита)
    
    Перем Синоним, ъ, Символ, ПредСимвол, СледСимвол, Прописная, ПредПрописная, СледПрописная, ДлинаСтроки;
    
    Синоним = ВРег(Сред(ИмяРеквизита, 1, 1));
    ДлинаСтроки = СтрДлина(ИмяРеквизита);
    Для ъ=2 По ДлинаСтроки Цикл
        Символ = Сред(ИмяРеквизита, ъ, 1);
        ПредСимвол = Сред(ИмяРеквизита, ъ-1, 1);
        СледСимвол = Сред(ИмяРеквизита, ъ+1, 1);
        Прописная = Символ = ВРег(Символ);
        ПредПрописная = ПредСимвол = ВРег(ПредСимвол);
        СледПрописная = СледСимвол = ВРег(СледСимвол);
        
        // Варианты:
        Если НЕ ПредПрописная И Прописная Тогда
            Синоним = Синоним + " " + Символ;
        ИначеЕсли Прописная И НЕ СледПрописная Тогда
            Синоним = Синоним + " " + Символ;
        Иначе
            Синоним = Синоним + Символ;
        Конецесли;
    КонецЦикла;
    
    Возврат Синоним;
    
КонецФункции // СформироватьСиноним()


Тогда было интересное обсуждение, в комментариях предложили еще несколько вариантов и один парень собрал все алгоритмы в одной обработке:
[необходимо зарегистрироваться для просмотра ссылки]

Оттуда же самый изящный способ:

Функция Синонимайзер(Имя, Ответ = "", Стэйт = 7, б = "") Экспорт
    Для ё = 1 По СтрДлина(Имя) Цикл
        а = Сред(Имя, ё, 1);
        Стэйт = (НРег(а) <> а) * 4 + Цел(Стэйт / 2);
        Ответ = Ответ + ?(Стэйт = 2, НРег(б), ?(ё = 2, ВРег(б), б)) + ?(Стэйт = 4 ИЛИ Стэйт = 5, " ", "");
        б = а
    КонецЦикла;
    Возврат Ответ + б
КонецФункции

Спасибо сказали: leonid_gun,

leonid_gun Подменю пользователя
сообщение 17.04.19, 20:00
Сообщение #4

Общительный
**
Группа: Пользователи
Сообщений: 17
Спасибо сказали: 0 раз
Рейтинг: 0

Vladal @ Сегодня, 16:23 * ,
У меня ТиС 7.70.032.
Спасибо за очень развернутый и подробный ответ. Вы предлагаете разобрать Идентификатор документа на подобие синонима. Но мне необходимо разобраться в механизме обращения к синониму и комментарию реквизитов шапки документа, которые прямо указаны в конфигурации. И скорее всего через Метаданные, и именно в в среде 1С 7.7. В 8-ке, очевидно, этот механизм описан явно, а вот, что касается 7-ки в мануале описано только до уровня Идентификатора документа.

leonid_gun Подменю пользователя
сообщение 17.04.19, 21:11
Сообщение #5

Общительный
**
Группа: Пользователи
Сообщений: 17
Спасибо сказали: 0 раз
Рейтинг: 0

Попробовал обратится к реквизиту шапки документа через
РеквДок = Метаданные.Документ("МойДок").РеквизитШапки(НомерРеквШапки);

где НомерРеквШапки просто номер по порядку, так как он записан в Конфигураторе, и выводит синоним, если поле Синоним не заполнен, тогда Идентификатор.

nysysimara Подменю пользователя
сообщение 18.04.19, 8:46
Сообщение #6

Оратор
Иконка группы
Группа: Местный
Сообщений: 289
Из: Бердянск
Спасибо сказали: 98 раз
Рейтинг: 63.2

sava1 @ Вчера, 9:57 * ,
Если я не ошибаюсь в FormEx есть возможность обратится к Синониму Атрибута Формы.
[необходимо зарегистрироваться для просмотра ссылки]


Signature
1С Предприятие 7.7: Бух. учет для Украины (активно дописанная) + самописка (учет производства и ЗП)
1С Предприятие 8.3: Бух.предприятия 3.0 + самописка
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Кроме высшего образования, нужно иметь хотя бы среднее соображение

Vladal Подменю пользователя
сообщение 18.04.19, 9:08
Сообщение #7

Оратор
*****
Группа: Пользователи
Сообщений: 275
Из: Украина
Спасибо сказали: 47 раз
Рейтинг: 32

Цитата(leonid_gun @ 17.04.19, 21:00) *
Вы предлагаете разобрать Идентификатор документа на подобие синонима. Но мне необходимо разобраться в механизме обращения к синониму и комментарию реквизитов шапки документа, которые прямо указаны в конфигурации.

Если Вы заметили, у меня два варианта. Первый из них как раз из метаданных.
Читая метаданные, можно найти Синоним. Но если он не заполнен? Или просто пришла таблица значений и её надо "красиво оформить" - тогда по идентификатору можно получить синоним.
В принципе, применяемые методы те же и мой код подходит для 7.7.

Цитата(leonid_gun @ 17.04.19, 22:11) *
Попробовал обратится к реквизиту шапки документа через
РеквДок = Метаданные.Документ("МойДок").РеквизитШапки(НомерРеквШапки);

где НомерРеквШапки просто номер по порядку, так как он записан в Конфигураторе, и выводит синоним, если поле Синоним не заполнен, тогда Идентификатор.


НомерРеквШапки можно получить в цикле перебором. или по имени реквизита, как это сделано в глобальном модуле глЕстьРеквизитШапки.
В отладчике посмотрите все доступные поля для этого элемента (имя, синоним, тип и т.д.)

// Перебор общих реквизитов документов 
Для ИндРекв = 1 по Метаданные.ОбщийРеквизитДокумента() Цикл
    Сообщить("- общий реквизит: " + Метаданные.ОбщийРеквизитДокумента(ИндРекв).Идентификатор + ", синоним: " + Метаданные.ОбщийРеквизитДокумента(ИндРекв).Синоним);
КонецЦикла;

// Перебор документов в цикле
Для Индекс = 1 по Метаданные.Документ() Цикл
    ИдентДока = Метаданные.Документ(Индекс).Идентификатор;
    Сообщить("Документ " + ИдентДока);
    Для ИндРекв = 1 по Метаданные.Документ(ИдентДока).РеквизитШапки() Цикл
        Сообщить("- реквизит шапки: " + Метаданные.Документ(ИдентДока).РеквизитШапки(ИндРекв).Идентификатор
            + ", синоним: " + Метаданные.Документ(ИдентДока).РеквизитШапки(ИндРекв).Синоним);
    КонецЦикла;
    Для ИндРекв = 1 по Метаданные.Документ(ИдентДока).РеквизитТабличнойЧасти() Цикл
        Сообщить("- реквизит таблицы: " + Метаданные.Документ(ИдентДока).РеквизитТабличнойЧасти(ИндРекв).Идентификатор
            + ", синоним: " + Метаданные.Документ(ИдентДока).РеквизитТабличнойЧасти(ИндРекв).Синоним);
    КонецЦикла;
КонецЦикла;


Для конкретного документа "МойДокумент" нужно в примере написать ИдентДока = "МойДокумент". Например:

ИдентДока = "МойДок";
Сообщить("Документ " + ИдентДока);
Для ИндРекв = 1 по Метаданные.Документ(ИдентДока).РеквизитШапки() Цикл
    Сообщить("- реквизит шапки: " + Метаданные.Документ(ИдентДока).РеквизитШапки(ИндРекв).Идентификатор
        + ", синоним: " + Метаданные.Документ(ИдентДока).РеквизитШапки(ИндРекв).Синоним);
КонецЦикла;
Для ИндРекв = 1 по Метаданные.Документ(ИдентДока).РеквизитТабличнойЧасти() Цикл
    Сообщить("- реквизит таблицы: " + Метаданные.Документ(ИдентДока).РеквизитТабличнойЧасти(ИндРекв).Идентификатор
        + ", синоним: " + Метаданные.Документ(ИдентДока).РеквизитТабличнойЧасти(ИндРекв).Синоним);
КонецЦикла;


Еще ознакомьтесь с [необходимо зарегистрироваться для просмотра ссылки]

Цитата(leonid_gun @ 17.04.19, 21:00) *
У меня ТиС 7.70.032.

Надо было название конфы и версию указывать в стартовом сообщении. Об этом напоминает всплывающий баннер с правилами оформления.

Цитата(nysysimara @ 18.04.19, 9:46) *
Если я не ошибаюсь в FormEx есть возможность обратится к Синониму Атрибута Формы.
Кладовочка АЛьФа

Формекс классная штука. Но она как наркотик.


Спасибо сказали: leonid_gun,

nysysimara Подменю пользователя
сообщение 18.04.19, 9:28
Сообщение #8

Оратор
Иконка группы
Группа: Местный
Сообщений: 289
Из: Бердянск
Спасибо сказали: 98 раз
Рейтинг: 63.2

Цитата(Vladal @ 18.04.19, 9:08) *
Формекс классная штука. Но она как наркотик.

Каюсь, периодически балуюсь FormEx-ом 44000000.gif

Vladal Подменю пользователя
сообщение 18.04.19, 15:21
Сообщение #9

Оратор
*****
Группа: Пользователи
Сообщений: 275
Из: Украина
Спасибо сказали: 47 раз
Рейтинг: 32

Цитата(nysysimara @ 18.04.19, 10:28) *
Каюсь, периодически балуюсь FormEx-ом

И небось, там уже есть консоль запросов?

Спасибо сказали: leonid_gun,

leonid_gun Подменю пользователя
сообщение 19.04.19, 10:01
Сообщение #10

Общительный
**
Группа: Пользователи
Сообщений: 17
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(Vladal @ 18.04.19, 9:08) *
В принципе, применяемые методы те же и мой код подходит для 7.7.

Да, Вы правы, что код из 8-ки в принципе подходит. Но в конкретном исполнении под 7-ку все таки необходим метод РекизитШапки(), что я собственно и искал в мануале. Про него у меня была только одна строка и то в самом конце раздела Метаданные. Синоним реквизита мне необходим в заголовке окна, полученного через процедуру ВвестиСтроку().

Процедура ВводПоля(РеквизитДокумента, НомерРеквШапки)
    Перем НК;
    РеквДок = Метаданные.Документ("КлиническийПротоколУЗИ_ЩЖ").РеквизитШапки(НомерРеквШапки);
    НК = РеквизитДокумента;
    Если ВвестиСтроку(НК, "Введите значение " + РеквДок.Синоним, 999, 1,) = 1 Тогда
        РеквизитДокумента = НК;
    Иначе
        Возврат;
    КонецЕсли;
КонецПроцедуры


Но, к сожалению, решение этой задачи не принесло удовлетворения. Оказалось, что штатными средствами 1С 7.7 вообще нормально не работает с многострочными текстовыми реквизитами. А у меня задача допилить эту конфу под мед учреждение, с функциями регистратуры, лаборатории и учета работы врачей, в частности оформления и хранения клинических протоколов исследований (УЗИ). В них подразумевается применение длинных и желательно многострочных запичей отдельных показателей исследований (длина символов 500 -700). Согласитесь, что работать с такой длинной строкой неудобно.

И вот в этой теме прозвучала мысль о наркотике о Formex. Не хочется прикручивать С++ с его Tbox, сишку знаю и умею очень мало.
Может направите меня куда рыть, и что курить, чтобы получить в форме документа нормальный механизм редактирования длинных текстовых реквизитов?

Хотя, наверное, это уже мне пора на форум FormEx )))

Batchir Подменю пользователя
сообщение 19.04.19, 10:28
Сообщение #11

Живет на форуме
Иконка группы
Группа: Команда
Сообщений: 3478
Из: Одесса
Спасибо сказали: 1333 раз
Рейтинг: 981.7

ИМХО, 7.7 без FormEx и 1С++ это что 8.0 по сравнению с 8.3.
Когда я имел дело с 7.7. то без этих dll не представлял как можно программировать)


Signature

Спасибо сказали: nysysimara,

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 20.05.19, 2:53
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!

Курсы валют: доллар США к гривне Курсы валют: евро к гривне Курсы валют: российский рубль к гривне