Здравствуйте.
Есть необходимость получить синоним реквизита документа для его последующего отображения в заголовке окна редактирования значения этого реквизита
Процедура ВводПоля(РеквизитДокумента) // РеквизитДокумента передается в процедуру
Перем Инф;
//Синоним = РеквизитДокумента.Синоним; // вот здесь не знаю как обратиться к нужному реквизиту, а точнее к его синониму
Инф= РеквизитДокумента;
Если ВвестиСтроку(Инф, "Введите значение " + Синоним, 999, 1,) = 1 Тогда
РеквизитДокумента = Инф;
Иначе
Возврат;
КонецЕсли;
КонецПроцедуры
! | http://pro1c.org.ua/index.php?act=announce&id=2: 16 |
Правильно ли я понимаю, что синоним реквизита должен быть заполнен в метаданных?
Тогда по метаданным в цикле и прочитать синоним
Не знаю, что у Вас - УФ или ОП, есть кусочек из кода для обычного приложения:
МетаданныеДокумента = Источник.Метаданные();
// Проверка по реквизитам шапки
Для Каждого РеквДок из МетаданныеДокумента.Реквизиты Цикл
Сообщить(РеквДок.Синоним);
КонецЦикла;
// Проверка по табличным частям
Для каждого ТабЧасть Из МетаданныеДокумента.ТабличныеЧасти Цикл
Для каждого КолонкаТЧ Из ТабЧасть.Реквизиты Цикл
Сообщить(КолонкаТЧ.Синоним);
КонецЦикла;
КонецЦикла;
// Формирует синоним переменной.
// Пример: на входе "ИмяПеременнойАБВГ", на выходе "Имя переменной АБВГ"
//
// Параметры
// ИмяРеквизита - Строка. Имя переменной, имя колонки таблицы
//
// Возвращаемое значение:
// Строка - Представление переменной
//
Функция СформироватьСиноним(ИмяРеквизита)
Перем Синоним, ъ, Символ, ПредСимвол, СледСимвол, Прописная, ПредПрописная, СледПрописная, ДлинаСтроки;
Синоним = ВРег(Сред(ИмяРеквизита, 1, 1));
ДлинаСтроки = СтрДлина(ИмяРеквизита);
Для ъ=2 По ДлинаСтроки Цикл
Символ = Сред(ИмяРеквизита, ъ, 1);
ПредСимвол = Сред(ИмяРеквизита, ъ-1, 1);
СледСимвол = Сред(ИмяРеквизита, ъ+1, 1);
Прописная = Символ = ВРег(Символ);
ПредПрописная = ПредСимвол = ВРег(ПредСимвол);
СледПрописная = СледСимвол = ВРег(СледСимвол);
// Варианты:
Если НЕ ПредПрописная И Прописная Тогда
Синоним = Синоним + " " + Символ;
ИначеЕсли Прописная И НЕ СледПрописная Тогда
Синоним = Синоним + " " + Символ;
Иначе
Синоним = Синоним + Символ;
Конецесли;
КонецЦикла;
Возврат Синоним;
КонецФункции // СформироватьСиноним()
Функция Синонимайзер(Имя, Ответ = "", Стэйт = 7, б = "") Экспорт
Для ё = 1 По СтрДлина(Имя) Цикл
а = Сред(Имя, ё, 1);
Стэйт = (НРег(а) <> а) * 4 + Цел(Стэйт / 2);
Ответ = Ответ + ?(Стэйт = 2, НРег(б), ?(ё = 2, ВРег(б), б)) + ?(Стэйт = 4 ИЛИ Стэйт = 5, " ", "");
б = а
КонецЦикла;
Возврат Ответ + б
КонецФункции
Vladal @ Сегодня, 16:23
,
У меня ТиС 7.70.032.
Спасибо за очень развернутый и подробный ответ. Вы предлагаете разобрать Идентификатор документа на подобие синонима. Но мне необходимо разобраться в механизме обращения к синониму и комментарию реквизитов шапки документа, которые прямо указаны в конфигурации. И скорее всего через Метаданные, и именно в в среде 1С 7.7. В 8-ке, очевидно, этот механизм описан явно, а вот, что касается 7-ки в мануале описано только до уровня Идентификатора документа.
Попробовал обратится к реквизиту шапки документа через
РеквДок = Метаданные.Документ("МойДок").РеквизитШапки(НомерРеквШапки);
sava1 @ Вчера, 9:57
,
Если я не ошибаюсь в FormEx есть возможность обратится к Синониму Атрибута Формы.
http://pro1c.org.ua/redirect.php?http://dorex.pro/?main
// Перебор общих реквизитов документов
Для ИндРекв = 1 по Метаданные.ОбщийРеквизитДокумента() Цикл
Сообщить("- общий реквизит: " + Метаданные.ОбщийРеквизитДокумента(ИндРекв).Идентификатор + ", синоним: " + Метаданные.ОбщийРеквизитДокумента(ИндРекв).Синоним);
КонецЦикла;
// Перебор документов в цикле
Для Индекс = 1 по Метаданные.Документ() Цикл
ИдентДока = Метаданные.Документ(Индекс).Идентификатор;
Сообщить("Документ " + ИдентДока);
Для ИндРекв = 1 по Метаданные.Документ(ИдентДока).РеквизитШапки() Цикл
Сообщить("- реквизит шапки: " + Метаданные.Документ(ИдентДока).РеквизитШапки(ИндРекв).Идентификатор
+ ", синоним: " + Метаданные.Документ(ИдентДока).РеквизитШапки(ИндРекв).Синоним);
КонецЦикла;
Для ИндРекв = 1 по Метаданные.Документ(ИдентДока).РеквизитТабличнойЧасти() Цикл
Сообщить("- реквизит таблицы: " + Метаданные.Документ(ИдентДока).РеквизитТабличнойЧасти(ИндРекв).Идентификатор
+ ", синоним: " + Метаданные.Документ(ИдентДока).РеквизитТабличнойЧасти(ИндРекв).Синоним);
КонецЦикла;
КонецЦикла;
ИдентДока = "МойДок";
Сообщить("Документ " + ИдентДока);
Для ИндРекв = 1 по Метаданные.Документ(ИдентДока).РеквизитШапки() Цикл
Сообщить("- реквизит шапки: " + Метаданные.Документ(ИдентДока).РеквизитШапки(ИндРекв).Идентификатор
+ ", синоним: " + Метаданные.Документ(ИдентДока).РеквизитШапки(ИндРекв).Синоним);
КонецЦикла;
Для ИндРекв = 1 по Метаданные.Документ(ИдентДока).РеквизитТабличнойЧасти() Цикл
Сообщить("- реквизит таблицы: " + Метаданные.Документ(ИдентДока).РеквизитТабличнойЧасти(ИндРекв).Идентификатор
+ ", синоним: " + Метаданные.Документ(ИдентДока).РеквизитТабличнойЧасти(ИндРекв).Синоним);
КонецЦикла;
Процедура ВводПоля(РеквизитДокумента, НомерРеквШапки)
Перем НК;
РеквДок = Метаданные.Документ("КлиническийПротоколУЗИ_ЩЖ").РеквизитШапки(НомерРеквШапки);
НК = РеквизитДокумента;
Если ВвестиСтроку(НК, "Введите значение " + РеквДок.Синоним, 999, 1,) = 1 Тогда
РеквизитДокумента = НК;
Иначе
Возврат;
КонецЕсли;
КонецПроцедуры
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua