При переводе любого используемого в коде объекта, идентификатора, свойства, метода необходимо знать его тип, чтобы определить место, в котором он инициализирован. В этом случае его можно будет перевести по тому переводу, который задан в месте определения этого объекта или из словаря платформы, если это платформенный объект.
В платформе 1С:Предприятие нет обязательной типизации кода, однако есть набор приемов задания типизации, которые рассматриваются ниже.
В случае если не типизирован код то статический анализатор в 1C:EDT не может вычислить владельца свойства или метода к которому выполняется обращение. Так же, для разных объектов платформы есть свойства или методы на русском языке, которые на английский переводятся по-разному - для корректного перевода в этих местах необходимо точно знать тип объекта.
Правильный перевод исходного кода в полном объеме возможен только после решения всех проблем связанных с типизацией. Для обеспечения контроля полноты типизации 1C:Language Tool предоставляет средства валидации кода. Он позволяют в окне редактирования кода явно выделить фрагменты с проблемами типизации, которые необходимо решить для дальнейшей работы.
Чтобы найти все фрагменты исходного кода, который не типизирован, а значит не может быть переведен однозначно корректно, можно включить валидацию неоднозначности перевода кода. Для этого в каталоге рабочего проекта разместить файл \ProjectName\.settings\com.e1c.langtool.v8.dt.bsl.prefs
Валидации качества кода:
Валидации наличия переводов:
Каждый параметр может принимать одно из следующих значений:
Пример файла:
eclipse.preferences.version=1
validation/checkTranslationAmbiguity=error
validation/checkStringLiteralTranslationAmbiguity=error
validation/checkStringLiteralTypeAmbiguity=error
validation/checkVariableTranslation=error
validation/checkVariableNotAllowedTranslation=error
validation/checkMethodTranslation=error
validation/checkNstrLiteralTranslation=error
validation/checkStringLiteralTranslation=error
validation/checkNstrLiteralParamInTranslation=error
validation/checkRegionTranslation=error
validation/checkComputedStringTranslation=error
Для методов и свойств объекта или глобального контекста применяется следующий алгоритм:
Для нетипизированного кода выполняются шаги получения перевода в следующем порядке:
выборки результата запроса
то может быть использован кэш всех переведенных полей всех запросов в текущем контексте (например в текущем методе).объекта XDTO
- то такое ствойство не переводится и остается без изменений. Т.к. объекты XDTO являются объектами другой (чужой) системы - они не переводстся.МойОбъект.МоеСвойство
) - выполняется расчет системы догадок по всем возможным объектам платформы и их свойствам, с учетом доступности этих объектов в разных окружениях (клиент, сервер, веб-клиент и т.д.).Критерием типизированности кода в текущем месте может служить контент-ассист (контекстный помощник ввода, вызывается по Ctrl+Space
) - если он подсказывает ввод текущего свойства/метода - значит в этом месте код типизирован достаточно для определения объекта-источника, по которому будет запрошен перевод.
Все процедуры и функции должны иметь корректные документирующие комментарии в соотсевтсвии со стандартом разарботки. В стандарте в частности предусмаотрено указание всех параметров и их типов.
Стандарт опубликован на сайте ИТС.
Для переменной, которая инициализируется заначением функции, тип может быть задан явно в виде комментрия к строке, в которой эта переменная инициализирована. Данный способ не является основным и не рекомендуется прибегать к нему без крайней необходимости. Рекомендуемым способом является написание документирующего комментария к самой функции. Однако в случае невозможности написания комментария, например при использвоании
Пример:
МояПеременная = ФункцияБезВозвращаемогоТипа(ВходящаяПеременная); // СправочникСсылка.Товары - по коду тут только один тип возвращается.
Код должен быть написан таким образом, чтобы статический анализатор в EDT корректно понимал код. В частности это достигается путем явного указания типа переменной в коде перед обращением к её свойствам или методам, как показано в примере ниже.
Пример:
Если ТипЗнч(МояПеременная) = Тип("СправочникСсылка.Товары") Тогда МояПеременная.Ссылка… КонецЕсли;
На текущий момент 1С:EDT не поддерживается типизация в следующих случаях: