1С-Предприятие 8.0. Практическое пособие разработчика

Общие вопросы


Я указываю период (дату начала, дату окончания), но последний день в него не попадает. Почему?

Дело в том, что в версии 8.0 значения типа Дата включают в себя время с точностью до секунд. По умолчанию, если время в явном виде не задается, оно устанавливается равным 00:00:00. Поэтому, если нужно указать период по какую-то дату включительно, следует указывать конец суток, т.е. определенную дату со временем 23:59:59, либо использовать функцию КонецДня(), если время в явном виде не задается.

В качестве примера можно посмотреть процедуру "ДействияФормыРейтингУслугСформировать" в модуле формы отчета "РейтингУслуг" в разделе "Отчет Рейтинг услуг" на странице 173.

Преобразую число из 4 цифр в строку и получаю количество символов в строке – 5. Это почему так?

Дело в том, что в версии 8.0 получение строкового представления числа выполняется на основе региональных настроек, установленных на компьютере.

В случае, когда установлены стандартные региональные настройки для России, при приведении числа к строке между группами разрядов чисел вставляется неразрывный пробел (Символы.НПП), например:

Год = 2004;

СтроковоеПредставление = Строка(Год);



// СтроковоеПредставление = "2 004"

// длина строки - 5 символов, включая неразрывный пробел [635]

Чтобы преобразовать число к строке без вставки символа-разделителя групп (неразрывного пробела), нужно использовать функцию Формат() с параметром "ЧГ" равным нулю:

Год = 2004;

СтроковоеПредставление = Формат(Год,"ЧГ = 0");

// СтроковоеПредставление = "2004"

// длина строки - 4 символа

Чтобы изменить преобразование чисел к строке по умолчанию, нужно для информационной базы установить региональные настройки (например, параметр "Группировка" установить в ноль). Для этого следует воспользоваться командой меню Администрирование

Региональные настройки ИБ ...

Если стоит задача получения строкового представления текущего года, можно воспользоваться встроенной функцией формат, указав в ее параметре соответствующую форматную строку:




СтроковоеПредставление = Формат(ТекущаяДата(), "ДФ = гггг");

Более подробную информацию можно найти на диске ИТС в статье "Особенности форматирования значений".

Допускает ли версия 8.0 два сеанса работы для одного пользователя одновременно?

Да, в версии 8.0 одновременно может быть запущено два и более сеансов работы с одним пользователем системы. Наличие такой возможности весьма полезно. Например, пользователь, может запустить выполнение длительной операции в одном сеансе и, запустив второй сеанс, продолжать работать с системой.

Что будет результатом вычитания двух значений типа Дата?

В версии 8.0 значение типа Дата содержит как дату, так и время с точностью до секунды. Поэтому результатом вычитания двух значений типа Дата будет число – разница в секундах.

Для получения следующей даты нужно прибавить к дате количество секунд в дате. [636]

У меня есть реквизит составного типа, включающий ссылки на два справочника. Когда я пытаюсь получить через точку наименование справочника, система выдает ошибку. Почему?

В 1С:Предприятии 8.0 для реквизитов имеющих составной тип (боле одного типа) независимо от того какие типы в него включены, значением по умолчанию является значение Неопределено.

Поэтому выражение Реквизит.Наименование будет выдавать ошибку, если реквизиту "Реквизит" не присвоено значение ссылки на один из двух справочников, выбранных в типе этого реквизита.

Какие особенности имеют общие модули в 8.0?

В общих модулях конфигурации могут использоваться только процедуры и функции общих модулей.

В них не могут использоваться процедуры, функции и переменные модуля приложения и модуля внешнего соединения. Кроме того, в общих модулях допускается определение только процедур и функций и не допускается определение переменных.

Таким образом, общие модули представляют собой набор доступных в конфигурации процедур и функций и не имеют хранимого состояния. Это позволяет использовать их не только в клиентском приложении и внешнем соединении, но и на сервере 1С:Предприятия.



Чем отличается значение типа Неопределено и значение типа Null?

Значение типа Неопределено используется, прежде всего, как значение по умолчанию (незаданное значение) для полей с составным типом. Например, если есть реквизит, который имеет составной тип, включающий СправочникСсылка.Сотрудники и СправочникСсылка.Клиенты, то значением этого реквизита по умолчанию будет Неопределено. Также это значение используется и в других случаях для обозначения неуказанного значения.

Значение типа Null используется при работе с таблицами прикладных объектов. Оно обозначает отсутствие значения поля в выборке. Прежде всего, оно используется в результатах запросов выполняющих левое или правое соединение. Поля невыбранных записей таблиц участвующих в таких соединениях будут иметь значение Null. Кроме того, значение типа Null будет иметь, например, [637] реквизит иерархического справочника для элементов-групп, если в метаданных указано, что этот реквизит используется только для элементов, не являющихся группами.

Почему дата отображается со временем?

В 1С:Предприятии 8.0 значение типа Дата всегда включает в себя время с точностью до секунды. Если в конкретных полях прикладных объектов или форм задается хранение даты без времени, то это описывает только область допустимых значений поля. To есть при присвоении устанавливается значение со временем 00:00:00. Само значение не содержит информации о том, может ли поле, где оно хранится, содержать время или нет.

Также как и число не хранит информации о том, может ли поле, где оно хранится, содержать дробные числа. Оно может быть только фактически целым или дробным. Точно так же и дата может фактически содержать время отличное от 00:00:00 или содержать время равное 00:00:00.

При отображении реквизита объекта в табличном поле и в поле ввода система использует имеющуюся информацию о допустимом типе значений и отображает дату без времени. Однако если отображение значения происходит без непосредственной связи с объектом, то используется стандартное форматирование значения типа Дата. При этом отображается и дата и время.



Например, это происходит при заполнении табличного документа или при выводе значения в окно сообщений. Чтобы установить желаемое форматирование, можно или использовать функцию Формат() или установить форматную строку, если эта возможность предусмотрена там, где отображается значение. Свойство Формат может быть, задано, например, для ячейки табличного документа, для элемента управления Надпись и т.д. [638]

Можно ли обращаться к переменным, процедурам и функциям модуля объекта "снаружи" объекта?

В версии 8.0 любая переменная, процедура и функция модуля объекта (документа, справочника, обработки, формы и т.д.) может быть объявлена как экспортируемая. Для этого достаточно в ее объявлении указать слово Экспорт:

Процедура Печать(ТабличныйДокумент) Экспорт

   ...

КонецПроцедуры

После этого к таким переменным, процедурам и функциям можно обращаться так же, как и к системным свойствам и методам объектов:

ДокументОбъект.Записать(); //Записать документ

ДокументОбъект.Печать(ТабличныйДокумент); //Сформировать печатную форму

Следует помнить о том, что, поскольку такие переменные, процедуры и функции описаны в модуле объекта, обращение к ним возможно только как к свойствам и методам объекта встроенного языка, вида "Объект". Объекты встроенного языка других видов ("Ссылка", "Выборка", "Список" и т.д.) не будут иметь аналогичных свойств и методов:

ДокументОбъект.Печать(ТабличныйДокумент); //правильно

ДокументСсылка.Печать(ТабличныйДокумент); //ошибка!

Более подробную информацию можно найти в главе "Манипулирование данными объектов" на странице 561.

Почему журнал регистрации пустой?

По умолчанию журнал регистрации в системе 1С:Предприятия 8.0 отключен. Для его включения нужно выполнить следующее:

·запустить конфигуратор
·открыть меню Администрирование
Настройка журнала регистрации...
·настроить параметры регистрируемых событий [639]
·нажать "ОК".
В каком порядке обходятся элементы соответствия циклом Для каждого.

При использовании конструкции Для Каждого ... Из ... Цикл ... КонецЦикла элементы соответствия обходятся в произвольном порядке.

Можно ли программно "выгонять" пользователей из 1С:Предприятия 8.0?

Да, можно.

Для этого следует использовать процедуру глобального контекста ПрекратитьРаботуСистемы(). Ее выполнение приведет к тому, что работа системы будет завершена независимо от наличия модальных диалогов, открытых редактируемых форм документов, справочников и т.д. При этом не будут вызваны процедуры-обработчики событий завершения работы системы.


Содержание раздела