Область применения: управляемое приложение, мобильное приложение, обычное приложение.
1. Директивы компиляции:
&НаКлиенте (&AtClient)
&НаСервере (&AtServer)
&НаСервереБезКонтекста (&AtServerNoContext)
следует применять только в коде модулей управляемых форм и в коде модулей команд. В остальных модулях рекомендуется применять инструкции препроцессору.
В серверных или клиентских общих модулях контекст исполнения очевиден, поэтому смысла в директивах компиляции нет. В общих модулях с признаками клиент и сервер применение директив компиляции затрудняет понимание, какие же процедуры (функции) доступны в конечном итоге.
2. Не следует использовать инструкции препроцессора в клиент-серверных общих модулях для проверки клиентского и серверного контекстов (#Если Сервер, #Если Клиент) ввиду невозможности надежного определения контекста исполнения. Процедуры и функции, которые работают по-разному при вызове с клиента и с сервера, следует размещать в общих модулях с постфиксами Клиент и Сервер , а не КлиентСервер .
В противном случае невозможно гарантировать корректную работу клиент-серверных процедур и функций в различных режимах работы платформы 1С:Предприятие.
Функция КодОсновногоЯзыка() Экспорт
#Если НЕ ТонкийКлиент И НЕ ВебКлиент Тогда
Возврат Метаданные.ОсновнойЯзык.КодЯзыка;
#Иначе
Возврат СтандартныеПодсистемыКлиент.ПараметрКлиента("КодОсновногоЯзыка");
#КонецЕсли
КонецФункции
Функция КодОсновногоЯзыка() Экспорт
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
Возврат Метаданные.ОсновнойЯзык.КодЯзыка;
#Иначе
Возврат СтандартныеПодсистемыКлиент.ПараметрКлиента("КодОсновногоЯзыка");
#КонецЕсли
КонецФункции
Правильно: разделить на две одноименные функции в серверном и клиентском модуле с различной реализацией. В общем случае, когда у них имеется определенная общая часть, одинаковая для клиента и сервера, то для того чтобы избежать дублирования кода, этот общий код (и только его) следует оставить в клиент-серверном общем модуле и вызывать его из клиентской и серверной функций, соответственно. Тем самым надежно достигается различное поведение в клиентском и серверном контекстах без использования инструкций препроцессора.
В то же время, как и в обычных клиентских модулях, допустимо ветвление кода для учета специфики различных режимов работы клиентского приложения: веб-клиент, тонкий или толстый клиент (например, #Если ВебКлиент).
3. Не следует разрывать инструкциями препроцессора и областями отдельные грамматические конструкции, выражения, а также объявления и места вызова процедур и функций.
Процедура Пример1()
а = 1
#Область ИмяОбласти
+ 2;
#КонецОбласти // разрыв выражения
КонецПроцедуры
#Область ИмяОбласти
Процедура Пример2()
// .
#КонецОбласти // разрыв процедуры
КонецПроцедуры
Если Тогда
// .
#Если ВебКлиент Тогда // разрыв блока Если
Иначе
// .
#КонецЕсли
КонецЕсли;
Результат = Пример4(Параметр1,
#Если Клиент Тогда
Параметр2, // некорректный вызов функции
#КонецЕсли
Параметр3);
Данные ошибки диагностируются автоматически с помощью среды разработки 1C:Enterprise Development Tools (EDT).
Правильно использовать инструкции препроцессора без разрыва конструкций.
При запуске "Закрытие месяца" выдает сообщение об ошибках
Как устранить Ошибку
В файле ReadMe.txt, который входит в пакет обновления релиза сказано:
Внимание!
Текущая версия конфигурации "Бухгалтерия предприятия" предназначена
для использования с версией системы 1С:Предприятие не ниже 8.3.8.1747
При работе с операционной системой Microsoft Windows 10 необходимо использовать версию 8.3 платформы "1С:Предприятие".
Работа конфигурации в режимах совместимости «Версия 8.3» и «Версия 8.2.х» поддерживается.
Это означает, что
необходимо установить любую платформу линейки 8.3.х.хххх, но не ниже рекомендуемой 8.3.8.1747
Не путайте платформу с конфигурацией (редакцией, релизом)!
После установки новой платформы (8.3.х.хххх) запустите свою рабочую ИБ и ошибка исчезнет.
Подскажите пожалуйста
Установлена 1С: Предприятие 8.2 (8.2.12.87), на нее поставил 1С: Розница. Магазин автозапчастей 2.1 (2.1.3.11). Прои запуске ошибка: <ХранилищеНастроек. ХранилищеВариантовОтчетов (2,2)>: Ожидается оператор препроцессора
# >Область ПрограммныйИнтерфейс
<ХранилищеНастроек. ХранилищеВариантовОтчетов (199,2)>: Ожидается оператор препроцессора
# >КонецОбласти
<ХранилищеНастроек. ХранилищеВариантовОтчетов (201,2)>: Ожидается оператор препроцессора
# >Область ОбработчикиСобытий
<ХранилищеНастроек. ХранилищеВариантовОтчетов (423,2)>: Ожидается оператор препроцессора
# >КонецОбласти