Свойство глобального контекста РабочаяДата не доступно на сервере, и во внешнем соединении.
Соответственно, обращение к данному свойству, не ограниченное соответствующими директивами
препроцессора, в общих модулях, а также в модулях объектов приводят к ошибкам компиляции
данных модулей на сервере и во внешнем соединении.
Для единообразия используемого кода, а также минимизации установки директив препроцессора,
во всех случаях обращения к свойству РабочаяДата (в том числе и в модулях форм с целью
упрощения выявления ошибок) следует применять функцию ПолучитьРабочуюДату().
Данная функция должна быть определена в одном из общих модулей конфигурации, для которого
установлены признаки компиляции: «Клиент», «Сервер», «Внешнее соединение».
Функция ПолучитьРабочуюДату() Экспорт #Если Клиент Тогда Дата = РабочаяДата; #Иначе Дата = ТекущаяДата(); #КонецЕсли Возврат Дата; КонецФункции // ПолучитьРабочуюДату() |
Пример:
Неправильно: Запрос.УстановитьПараметр("РабочаяДата",КонецДня(РабочаяДата)); |
Правильно: Запрос.УстановитьПараметр("РабочаяДата",КонецДня(ПолучитьРабочуюДату())); |
Копирование строк между таблицами значений (табличными частями и т.п.) произвольной структуры
При копировании строк между различными таблицами значений (табличными частями и т.п.)
со схожим составом колонок следует использовать метод глобального контекста ЗаполнитьЗначенияСвойств().
Алгоритмы, использующие данный метод значительно эффективнее применяемого ранее многократного
перебора колонок таблицы значений, выполняемого для получения их состава.
Неправильно:
Для каждого СтрокаТаблицыИсточника Из ТаблицаИсточник Цикл СтрокаТаблицыПриемника = ТаблицаПриемник.Добавить(); Для каждого Колонка Из ТаблицаПриемник.Колонки Цикл КолонкаТаблицыИсточника = ТаблицаИсточник.Колонки.Найти(Колонка.Имя); Если КолонкаТаблицыИсточника <> Неопределено Тогда СтрокаТаблицыПриемника[Колонка.Имя] = СтрокаТаблицыИсточника[Колонка.Имя]; КонецЕсли; КонецЦикла; КонецЦикла; |
Правильно:
Для каждого СтрокаТаблицыИсточника Из ТаблицаИсточник Цикл СтрокаТаблицыПриемника = ТаблицаПриемник.Добавить(); ЗаполнитьЗначенияСвойств(СтрокаТаблицыПриемника, СтрокаТаблицыИсточника); КонецЦикла; |
Использование объекта "НастройкаПериода"
Для выбора периода рекомендуется использовать объект "НастройкаПериода".
В случае, когда период указывается непосредствено при выполнении действия,например, при заполненении документа, рекомендуется использовать следующий алгоритм для выбора периода:
//////////////////////////////////////////////////////////////////////////////// // ПЕРЕМЕННЫЕ МОДУЛЯ // Диалог настройки периода Перем мНастройкаПериода; //////////////////////////////////////////////////////////////////////////////// // ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ // Процедура - обработчик события "ПриОткрытии" формы // Процедура ПриОткрытии() // Установить настройку периода по умолчанию // Для корректной работы диалога необходимо передовать дату окончания на конец дня мНастройкаПериода.ВариантНастройки = ВариантНастройкиПериода.Период; мНастройкаПериода.УстановитьПериод(НачалоМесяца(ТекущаяДата()), КонецМесяца(ТекущаяДата())); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // ПРОЦЕДУРЫ - ДЕЙСТВИЯ КОМАНДНЫХ ПАНЕЛЕЙ ФОРМЫ // Процедура - обработчик события заполнения документа // Процедура КнопкаВыполнитьНажатие(Кнопка) Если мНастройкаПериода.Редактировать() Тогда // Вызвать функцию заполнения ВыполнитьНашуПроцедуру(мНастройкаПериода.ПолучитьДатуНачала(), мНастройкаПериода.ПолучитьДатуОкончания()); КонецЕсли; КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // ОПЕРАТОРЫ ОСНОВНОЙ ПРОГРАММЫ мНастройкаПериода = Новый НастройкаПериода; |
Пример выбора периода можно посмотреть в обработке ВыборПериодаПередВыполнением.epf (на диске в директории 1CIts\EXE\Razrabotka\ВыборПериодаПередВыполнением)
(скопировать)
В случае, когда период редактируется в форме, например в форме отчета или обработки, рекомендуется использовать следующий алгоритм для выбора периода:
//////////////////////////////////////////////////////////////////////////////// // ПЕРЕМЕННЫЕ МОДУЛЯ // Диалог настройки периода Перем мНастройкаПериода; //////////////////////////////////////////////////////////////////////////////// // ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ // Процедура - обработчик события "ПриОткрытии" формы // Процедура ПриОткрытии() // Установить настройку периода по умолчанию мНастройкаПериода.ВариантНастройки = ВариантНастройкиПериода.Период; ДатаНач = НачалоМесяца(ТекущаяДата()); ДатаКон = КонецМесяца(ТекущаяДата()); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ // Процедура - обработчик события нажатия на кнопку выбора периода Процедура ВыбПериодНажатие(Элемент) мНастройкаПериода.ВариантНастройки = ВариантНастройкиПериода.Период; мНастройкаПериода.УстановитьПериод(ДатаНач, КонецДня(ДатаКон)); Если мНастройкаПериода.Редактировать() Тогда ДатаНач = мНастройкаПериода.ПолучитьДатуНачала(); ДатаКон = мНастройкаПериода.ПолучитьДатуОкончания(); КонецЕсли; КонецПроцедуры // ВыбПериодНажатие() //////////////////////////////////////////////////////////////////////////////// // ОПЕРАТОРЫ ОСНОВНОЙ ПРОГРАММЫ мНастройкаПериода = Новый НастройкаПериода; |
Пример выбора периода можно посмотреть в обработке ВыборПериодаВФорме.epf (на диске в директории 1CIts\EXE\Razrabotka\ВыборПериодаВФорме)
(скопировать)
Дата: 2018-11-18, просмотров: 339.