Группа: Пользователи
Сообщений: 20
Спасибо сказали: 0 раз
Рейтинг: 0
Здравствуйте. Есть необходимость получить синоним реквизита документа для его последующего отображения в заголовке окна редактирования значения этого реквизита
Процедура ВводПоля(РеквизитДокумента) // РеквизитДокумента передается в процедуру Перем Инф;
//Синоним = РеквизитДокумента.Синоним; // вот здесь не знаю как обратиться к нужному реквизиту, а точнее к его синониму
Инф= РеквизитДокумента; Если ВвестиСтроку(Инф, "Введите значение " + Синоним, 999, 1,) = 1 Тогда РеквизитДокумента = Инф; Иначе Возврат; КонецЕсли; КонецПроцедуры
Подскажите как правильно обращаться к Синониму или к Комментарий реквизита шапки, ведь для чего-то они присутствуют в базе. Пробовал через метаданные, но понял только как получить Синоним идентификатора документа, а мне нужен синоним реквизита шапки.
Группа: Местный
Сообщений: 373
Из: Slovensko
Спасибо сказали: 79 раз
Рейтинг: 67.3
Правильно ли я понимаю, что синоним реквизита должен быть заполнен в метаданных? Тогда по метаданным в цикле и прочитать синоним
Не знаю, что у Вас - УФ или ОП, есть кусочек из кода для обычного приложения:
МетаданныеДокумента = Источник.Метаданные();
// Проверка по реквизитам шапки
Для Каждого РеквДок из МетаданныеДокумента.Реквизиты Цикл Сообщить(РеквДок.Синоним); КонецЦикла;
// Проверка по табличным частям
Для каждого ТабЧасть Из МетаданныеДокумента.ТабличныеЧасти Цикл Для каждого КолонкаТЧ Из ТабЧасть.Реквизиты Цикл Сообщить(КолонкаТЧ.Синоним); КонецЦикла; КонецЦикла;
Для УФ будет немного иной подход.
Более подробно смотрите мои ответы в этой теме на Мисте: [необходимо зарегистрироваться для просмотра ссылки]
А вот факультативно занимался подобным, формируя синонимы реквизитов. Функция СформироватьСиноним() тоже моя публикация: [необходимо зарегистрироваться для просмотра ссылки]
// Формирует синоним переменной. // Пример: на входе "ИмяПеременнойАБВГ", на выходе "Имя переменной АБВГ" // // Параметры // ИмяРеквизита - Строка. Имя переменной, имя колонки таблицы // // Возвращаемое значение: // Строка - Представление переменной // Функция СформироватьСиноним(ИмяРеквизита)
Синоним = ВРег(Сред(ИмяРеквизита, 1, 1)); ДлинаСтроки = СтрДлина(ИмяРеквизита); Для ъ=2 По ДлинаСтроки Цикл Символ = Сред(ИмяРеквизита, ъ, 1); ПредСимвол = Сред(ИмяРеквизита, ъ-1, 1); СледСимвол = Сред(ИмяРеквизита, ъ+1, 1); Прописная = Символ = ВРег(Символ); ПредПрописная = ПредСимвол = ВРег(ПредСимвол); СледПрописная = СледСимвол = ВРег(СледСимвол);
// Варианты: Если НЕ ПредПрописная И Прописная Тогда Синоним = Синоним + " " + Символ; ИначеЕсли Прописная И НЕ СледПрописная Тогда Синоним = Синоним + " " + Символ; Иначе Синоним = Синоним + Символ; Конецесли; КонецЦикла;
Возврат Синоним;
КонецФункции // СформироватьСиноним()
Тогда было интересное обсуждение, в комментариях предложили еще несколько вариантов и один парень собрал все алгоритмы в одной обработке: [необходимо зарегистрироваться для просмотра ссылки]
Оттуда же самый изящный способ:
Функция Синонимайзер(Имя, Ответ = "", Стэйт = 7, б = "") Экспорт Для ё = 1 По СтрДлина(Имя) Цикл а = Сред(Имя, ё, 1); Стэйт = (НРег(а) <> а) * 4 + Цел(Стэйт / 2); Ответ = Ответ + ?(Стэйт = 2, НРег(б), ?(ё = 2, ВРег(б), б)) + ?(Стэйт = 4 ИЛИ Стэйт = 5, " ", ""); б = а КонецЦикла; Возврат Ответ + б КонецФункции
Группа: Пользователи
Сообщений: 20
Спасибо сказали: 0 раз
Рейтинг: 0
Vladal @ Сегодня, 16:23
, У меня ТиС 7.70.032. Спасибо за очень развернутый и подробный ответ. Вы предлагаете разобрать Идентификатор документа на подобие синонима. Но мне необходимо разобраться в механизме обращения к синониму и комментарию реквизитов шапки документа, которые прямо указаны в конфигурации. И скорее всего через Метаданные, и именно в в среде 1С 7.7. В 8-ке, очевидно, этот механизм описан явно, а вот, что касается 7-ки в мануале описано только до уровня Идентификатора документа.
sava1 @ Вчера, 9:57
, Если я не ошибаюсь в FormEx есть возможность обратится к Синониму Атрибута Формы. [необходимо зарегистрироваться для просмотра ссылки]
1С Предприятие 7.7: Бух. учет для Украины (активно дописанная) + самописка (учет производства и ЗП) 1С Предприятие 8.3: Бух.предприятия 3.0 + самописка ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Кроме высшего образования, нужно иметь хотя бы среднее соображение
Группа: Местный
Сообщений: 373
Из: Slovensko
Спасибо сказали: 79 раз
Рейтинг: 67.3
Цитата(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 есть возможность обратится к Синониму Атрибута Формы. Кладовочка АЛьФа
Группа: Пользователи
Сообщений: 20
Спасибо сказали: 0 раз
Рейтинг: 0
Цитата(Vladal @ 18.04.19, 9:08)
В принципе, применяемые методы те же и мой код подходит для 7.7.
Да, Вы правы, что код из 8-ки в принципе подходит. Но в конкретном исполнении под 7-ку все таки необходим метод РекизитШапки(), что я собственно и искал в мануале. Про него у меня была только одна строка и то в самом конце раздела Метаданные. Синоним реквизита мне необходим в заголовке окна, полученного через процедуру ВвестиСтроку().
Процедура ВводПоля(РеквизитДокумента, НомерРеквШапки) Перем НК; РеквДок = Метаданные.Документ("КлиническийПротоколУЗИ_ЩЖ").РеквизитШапки(НомерРеквШапки); НК = РеквизитДокумента; Если ВвестиСтроку(НК, "Введите значение " + РеквДок.Синоним, 999, 1,) = 1 Тогда РеквизитДокумента = НК; Иначе Возврат; КонецЕсли; КонецПроцедуры
Но, к сожалению, решение этой задачи не принесло удовлетворения. Оказалось, что штатными средствами 1С 7.7 вообще нормально не работает с многострочными текстовыми реквизитами. А у меня задача допилить эту конфу под мед учреждение, с функциями регистратуры, лаборатории и учета работы врачей, в частности оформления и хранения клинических протоколов исследований (УЗИ). В них подразумевается применение длинных и желательно многострочных запичей отдельных показателей исследований (длина символов 500 -700). Согласитесь, что работать с такой длинной строкой неудобно.
И вот в этой теме прозвучала мысль о наркотике о Formex. Не хочется прикручивать С++ с его Tbox, сишку знаю и умею очень мало. Может направите меня куда рыть, и что курить, чтобы получить в форме документа нормальный механизм редактирования длинных текстовых реквизитов?
Хотя, наверное, это уже мне пора на форум FormEx )))
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!