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

  35790931     

Документ


В версии 7.7 была предопределенная процедура ВводНового(). Что-то не могу найти ее в версии 8.0...

Теперь факт интерактивного ввода нового объекта (элемента справочника, документа и т.д.) не выделяется в отдельное событие.

В версии 8.0 для анализа аналогичного факта следует использовать событие объекта Форма – "При открытии". Для того чтобы в обработчике этого события проанализировать, выполняется ли ввод нового объекта, или открыт уже существующий, нужно вызвать метод прикладного объекта ЭтоНовый(). Метод вернет значение Истина, если вводится новый объект, и Ложь – в противном случае.

В качестве примера можно посмотреть процедуру "СвойстваПередНачаломДобавления" формы элемента справочника "ВариантыНоменклатуры" в разделе "Доработка справочника ВариантыНоменклатуры" на странице 269, или обработчик события "Перед записью" формы узла плана обмена "Филиалы" в разделе "Создание плана обмена Филиалы" на странице 403.

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

Есть ли какой-нибудь аналог для метода ПриЗаписиПерепроводить() в версии 8.0?

Есть.

Режим перепроведения при записи проведенного документа устанавливается с помощью свойства ПриЗаписиПерепроводить, которое существует у расширения формы документа. Если это свойство установить, то при вызове стандартных команд записи в форме, запись проведенного документа будет автоматически выполняться с проведением.

Более подробно о том, что такое расширения формы, можно прочитать в разделе "Данные и элементы управления" на странице 502. [627]

Как сохранить документ без проведения (в 7.7 можно было написать в кнопке #Записать Закрыть)?

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




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

Процедура ЗаписатьБезПроведенияИЗакрыть(Кнопка)

   Записать(РежимЗаписиДокумента.Запись);



   Закрыть();

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

Как перебрать строки табличной части документа?

Табличная часть документа (так же, как и любого другого объекта конфигурации, обладающего табличными частями) представляет собой коллекцию значений, элементами которой являются строки табличной части. Поэтому перебор строк табличной части (так же, как и любой другой коллекции значений) проще всего реализовать с помощью цикла Для Каждого ... Из ... Цикл ... КонецЦикла:

Для Каждого ТекСтрокаМатериалы Из Материалы Цикл

   ОчереднаяСтрока = ТекСтрокаМатериалы;

   ...

КонецЦикла;

При этом переменной цикла "ТекСтрокаМатериалы" будет являться не номер строки, а вся строка как объект. Для получения номера строки следует использовать свойство НомерСтроки или добавить переменную и увеличивать ее в теле цикла. [628]

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

Для СчетчикЦикла = 0 По Материалы.Количество() - 1 Цикл

   ОчереднаяСтрока = Материалы[СчетчикЦикла];

   ...

КонецЦикла;

В качестве примера можно посмотреть главу "Способы работы с коллекцией" на странице 550, или обработчик события "ОбработкаПроведения" в модуле документа "ПриходнаяНакладная" в разделе "Создание движений документа ПриходнаяНакладная" на странице 89.

Есть ли в версии 8.0 подчиненные документы?

Нет, специального понятия "Подчиненные документы" в версии 8.0 не существует.

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



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

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

Однако следует учитывать, что критерий отбора не позволяет выполнять динамический просмотр найденных данных. В список будут включаться все найденные объекты. Соответственно, нецелесообразно использовать этот механизм, если количество [629] найденных объектов по значениям критерия отбора будет достаточно велико.

Примеры работы с зависимыми объектами можно посмотреть в разделах "Ввод на основании" на странице 493 и "Объекты, введенные на основании" на странице 497.

Как добавить строку в табличную часть документа?

Табличная часть документа представляет собой коллекцию значений, элементами которой являются строки табличной части.

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

СтрокаСостава = ДокументОбъект.Состав.Добавить();

СтрокаСостава.Количество = 10;

Не могу найти метод Провести() у документа...?

В версии 8.0 у документа нет метода Провести().

Это связано с тем, что проведение документа не выделяется теперь в отдельное действие. В версии 8.0 проведение рассматривается как один из режимов записи документа.

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



ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);

Как теперь обрабатывать во встроенном языке ввод на основании и копирование?

В версии 8.0 при вызове стандартной команды ввода на основании выполняется создание нового объекта и вызов в модуле этого объекта обработчика события "Обработка заполнения". [630]

В этом обработчике и должен быть реализован алгоритм заполнения данных объекта исходя из данных объекта-основания. Если вы воспользуетесь конструктором ввода на основании, то он сгенерирует обработчик именно этого события.

Надо помнить, что событие "Обработка заполнения" возникает не только при вводе на основании. Это событие будет возникать и при вызове метода объекта Заполнить().

Таким образом, обработчик события "Обработка заполнения" является стандартным местом, в котором реализуется заполнение данных объекта из данных объекта основания без учета того, откуда и зачем вызывается это заполнение.

Поэтому обратите внимание на то, что в этом обработчике следует выполнять только заполнение данных, и не следует делать каких-либо дополнительных действий связанных с интерфейсом системы.

Аналогичным образом выполняется копирование. При копировании вызывается обработчик события объекта "При копировании", в котором можно дополнить стандартное заполнение данных выполняемое системой при копировании объекта. Этот обработчик вызывается, как при интерактивном копировании, так и при вызове метода Скопировать().

Кроме того, расширения форм объектов (форма документа, форма элемента справочника и т.д.) предоставляют свойства ПараметрОснование и ПараметрОбъектКопирования, которые заполняются системой при выполнении стандартных команд ввода на основании и копирования. Значения этих свойств можно использовать в обработчиках событий формы для определения того, что при открытии формы выполнялся ввод на основании или копирование.

Примеры обработки ввода одних объектов на основании других можно посмотреть в разделах "Ввод на основании" на странице 493 и "Объекты, введенные на основании" на странице 497.



Как прочитать движения документа по определенному регистру?

Существует два способа, которыми можно это сделать.

Во-первых, можно "пойти от документа". Для этого следует воспользоваться свойством объекта ДокументОбъект.<имя> – Движения. Это свойство содержит коллекцию пустых наборов записей документа по каждому из регистров, которые указаны для [631] этого документа в конфигураторе. Чтобы получить движения документа по конкретному регистру, нужно обратиться к набору записей этого конкретного регистра (указав имя регистра в качестве свойства через точку), и затем прочитать этот набор записей:

ДокументОбъект = Документы.ПриходнаяНакладная.НайтиПоНомеру(1).ПолучитьОбъект();

Движения = ДокументОбъект.Движения.ОстаткиМатериалов;

Движения.Прочитать();

Во-вторых, можно "пойти от регистра". Для этого следует создать набор записей требуемого регистра, установить для него отбор по регистратору, равному ссылке на интересующий нас документ, и затем прочитать этот набор записей:

Движения = РегистрыНакопления.ОстаткиМатериалов.СоздатьНаборЗаписей();

Движения.Отбор.Регистратор.Значение = Документы.ПриходнаяНакладная.НайтиПоНомеру(1);

Движения.Прочитать();

В 7.7 были общие реквизиты. В версии 8.0 их нет?

Да. Было принято решение в версии 8.0 отказаться от общих реквизитов документов. Вместе с этим в версии 8.0 нет и общего журнала документов.

Теперь, если у всех документов нужно иметь аналогичные реквизиты, например, "Автор" и "Редактор", эти реквизиты следует создать вручную у каждого документа.

При необходимости использовать аналог общего журнала версии 7.7, следует просто создать журнал документов, в котором будут регистрироваться все существующие документы.

Однако в этом случае следует иметь в виду, что при интенсивной работе пользователей в файловом варианте информационной базы, высока вероятность возникновения коллизий. Добиться ее уменьшения можно путем исключения из состава этого журнала документов, которые проводятся наиболее часто. [632]


Глобальный контекст


Сериализация объектов 1С:Предприятия – процедуры "ЗаписатьСообщениеСИзменениями" и "ПрочитатьСообщениеСИзменениями" в модуле узла плана обмена "ОбменСФилиалами" в разделе "Создание процедуры записи данных" на странице 407.



Глобальный модуль


Как "отловить" интерактивную пометку на удаление?

В версии 8.0 изменена реакция на снятие и установку пометки на удаление объекта.

В отличие от версии 7.7, где пометка на удаление обрабатывалась соответствующим событием удаления ("ПриУдаленииЭлемента", "ПриУдаленииДокумента" и т.д.), в версии 8.0 реакция на снятие и установку пометки на удаление приведена в соответствие физическому смыслу выполняемых действий.

При установке пометки удаления не происходит непосредственного удаления элемента из базы, а выполняется всего лишь сохранение его измененного свойства ПометкаУдаления. Поэтому реакцией на это действие в версии 8.0 являются события "Перед записью" и "При записи" (это справедливо и в случае снятия пометки на удаление).

Событие "Перед удалением" возникает теперь только при непосредственном удалении объекта из базы данных.

Таким образом, для того, чтобы отследить интерактивную или программную пометку объекта на удаление, необходимо в обработчике события "ПередЗаписью" проанализировать свойство объекта ПометкаУдаления: значение Истина будет говорить о том, что пометка на удаление устанавливается, Ложь – снимается.

Если в обработчике события "Перед записью" есть необходимость анализировать то состояние объекта, которое было до наступления этого события, нужно считывать данные из базы данных при помощи запроса. [618]



Интерфейсные объекты


Чем в 1С:Предприятии 8.0 отличаются формы справочников, документов и других объектов?

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

Функциональность формы определяется исключительно реквизитами формы и связанными с ними элементами управления. В большинстве случаев функциональность формы обеспечивается за счет выбора основного реквизита формы. Он определяет наличие расширения формы и обеспечивает специфическое поведение формы для конкретного прикладного объекта. [640]

Например, форма документа будет поддерживать функциональность, ориентированную на редактирование документа, если в качестве ее основного реквизита выбрано значение типа ДокументОбъект.<имя>.

Таким образом, при выборе соответствующих типов реквизитов любая форма может использоваться для редактирования и просмотра любых данных.

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

Более подробную информацию можно найти в разделах "Данные и элементы управления" на странице 502 и "Механизм основных форм" на странице 542.

Выполняется ли автоматическое обновление списков в формах?

Да, выполняется, но не всегда.

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

Если пользователь хочет видеть в списках изменения, вносимые другими пользователями, то ему необходимо нажимать кнопку обновления в командной панели списка или установить режим автоматического обновления списка с определенной периодичностью. Этот режим устанавливается в окне настройки списка.




Вычисляемое значение в поле ввода строки табличного поля – процедура "МатериалыКоличествоПриИзменении" в модуле формы документа "ПриходнаяНакладная" в разделе "Создание процедуры обработки события в модуле формы" на странице 74.

Создание обработчиков событий элементов управления – процедура "МатериалыКоличествоПриИзменении" в модуле формы документа "ПриходнаяНакладная" в разделе "Создание процедуры обработки события в модуле формы" на странице 74.

Обработка нескольких событий одной процедурой – модуль формы документа "ПриходнаяНакладная" в разделе "Создание процедуры обработки события в общем модуле" на странице 77.

Использование макета для вывода в табличный документ – процедура "РеестрДокументовОказаниеУслуги" в модуле формы отчета "РеестрДокументовОказаниеУслуги" в разделе "Отчет РеестрДокументовОказаниеУслуги" на странице 166.

Управление группировками при выводе в табличный документ – процедура "ВыручкаМастеров" в модуле формы отчета "ВыручкаМастеров" в разделе "Отчет ВыручкаМастеров" на странице 183.

Работа с элементом управления Список выбора – модуль формы отчета "РейтингКлиентов" в разделе "Создание отчета РейтингКлиентов" на странице 198.

Заполнение диаграммы данными – процедура "Сформировать" в модуле формы отчета "РейтингКлиентов" в разделе "Создание отчета РейтингКлиентов" на странице 198. [649]

Использование сводной таблицы – модуль отчета "Универсальный" в разделе "Создание универсального отчета" на странице 211.

Вывод данных в сводную диаграмму – отчет "ВыручкаМастеров2" в разделе "Отчет ВыручкаМастеров2" на странице 227.

Заполнение диаграммы Ганта данными – процедура "КнопкаСформироватьНажатие" в модуле отчета "ДиаграммаНачислений" в разделе "Создание отчета ДиаграммаНачислений" на странице 366.




Наличие параметра "Элемент" позволяет реализовывать один обработчик для событий нескольких элементов управления и анализировать, какой элемент вызвал событие. В частности, это необходимо, если элементы управления создаются средствами встроенного языка. [642]

Рекомендуется создавать обработчики в модуле нажатием кнопки с изображением лупы в соответствующем событии в палитре свойств. В этом случае будет создан обработчик с необходимым составом параметров.

Почему при активизации элемента управления не вызывается автоматически выбор из списка, как это было в 7.7?

В версии 8.0 появился новый режим ввода ссылочных значений путем набора на клавиатуре первых символов кода, наименования или номера требуемого объекта.

Такой режим позволяет существенно ускорить ввод информации. Чтобы этот режим мог эффективно использоваться, изменено типовое поведение автоматического открытия списка выбора.

Оно выполняется теперь не при активизации элемента управления, а при нажатии клавиши "Enter", если значение не заполнено. Таким образом, после активизации элемента управления пользователь может либо ввести несколько первых символов и нажать "Enter" для выполнения поиска по символам, либо сразу нажать "Enter" чтобы инициировать выбор из списка. Такое решение позволяет эффективно сочетать обе возможности.

Для включения режима выбора незаполненного значения нужно установить свойство АвтоВыборНезаполненного. Кроме того, с помощью свойства РежимВыбораНезаполненного можно установить вариант открытия списка при активизации элемента управления.

Однако это рекомендуется делать только в отдельных случаях, так как открытие списка при активизации поля ввода не позволит использовать режим ввода значения по первым буквам.

Почему поиск по первым символам в списке справочника работает только по колонке Наименование?

Это не так.

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



Чтобы выполнять поиск по другой колонке, нужно сменить текущее упорядочивание списка.

Следует сказать, что поиск в динамическом списке выполняется среди десятков и сотен тысяч записей базы данных. Он выполняется не сразу, а с некоторой задержкой, таким образом, чтобы не выполнять поиск при каждом нажатии символа.

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

Не отображается новое содержимое табличного поля при программном изменении источника данных.

Элемент управления табличное поле имеет особенное от других поведение при смене источника данных.

Если источник данных меняется интерактивно, в конфигураторе, платформа автоматически создает в табличном поле колонки, соответствующие новому источнику данных. Этот процесс разработчик может наблюдать своими глазами.

Однако если происходит программное изменение источника данных табличного поля, платформа не создает колонки самостоятельно. Создание колонок перекладывается на плечи разработчика, поскольку подразумевается, что разработчик может желать создать собственный набор колонок табличного поля.

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

Пример смены источника данных у табличного поля можно посмотреть в процедуре "ОстаткиМатериаловПриИзменении" в модуле формы документа "ПриходнаяНакладная" в разделе "Изменение источника данных табличного поля" на странице 516.

Более подробную информацию можно найти на диске ИТС в статье "Программное изменение источника данных, отображаемых в табличном поле". [644]


Контекст формы


Куда вписать выражение, чтобы его результат отображался в текстовой колонке табличного поля?

В версии 8.0 нет возможности задавать для колонок текстового поля выражения, которые будут автоматически рассчитываться при отображении этого табличного поля.

Такая возможность не реализована, поскольку весь текст программы в версии 8.0 располагается только в программных модулях.

Поэтому теперь, для вывода вычисляемого значения в колонку табличного поля следует использовать обработчик события "При выводе строки" табличного поля. Это событие возникает каждый раз при формировании очередной строки табличного поля, которая будет отображена на экране.

В качестве примера можно посмотреть процедуру "СправочникСписокПриВыводеСтроки" в модуле формы списка справочника "Номенклатура" в разделе "Вычисляемые колонки в списках" на странице 524.

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

В 8.0 в формах нет слоев. А как теперь создавать закладки в форме?

В версии 8.0 вместо механизма слоев в формах используются панели.

Одна панель может содержать несколько страниц. Поддерживается большое количество вариантов отображения закладок, режим прокручиваемых страниц, использование закладок без распределения по страницам.

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

Пример использования страниц формы можно посмотреть в форме элемента справочника "Номенклатура" в разделе "Доработка справочника Номенклатура" на странице 261, а также в форме [619] документа "ОказаниеУслуги" в разделе "Отбор объектов, введенных на основании" на странице 497.

Как в формах 1С:Предприятия 8.0 сохранить настройки пользователя (по аналогии с сохранением настроек форм отчетов и обработок в 1С:Предприятии 7.7)?




Чтобы задействовать сохранение настроек в версии 8.0, необходимо в палитре свойств формы установить значения свойств "Сохранять значения" и "Сохраняемые значения". В командной панели формы можно использовать стандартные кнопки сохранения и восстановления настроек.

Следует иметь в виду, что сохранение настроек возможно, только если в качестве основного объекта формы выбраны значения типа ОтчетОбъект.<имя> или ОбработкаОбъект.<имя>, поскольку эту функциональность обеспечивают соответствующие расширения формы.

Более подробно о том, что такое расширения формы, можно прочитать в разделе "Данные и элементы управления" на странице 502.

Есть ли в 1С:Предприятии 8.0 аналог метода АктивизироватьОбъект(), чтобы активизировать нужную строку табличного поля?

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

К примеру, если речь идет о списке справочника, то это будет ссылка на элемент справочника.

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

Как правило, для установки текущей строки в некоторой форме списка из другой формы, нужно использовать свойство формы НачальноеЗначениеВыбора, а также свойства ПараметрТекущаяСтрока соответствующих расширений форм списков. [620]

Более подробно о том, что такое расширения формы, можно прочитать в разделе "Данные и элементы управления" на странице 502.

Никак не могу заставить работать элемент управления Переключатель! В чем дело?

В версии 8.0 работа с переключателем ведется таким же образом, как и в версии 7.7, за исключением одного отличия.

Теперь для каждого переключателя в группе можно задать значение, которое будет помещаться в данные при выборе этого переключателя. Это значение задается в свойстве ВыбираемоеЗначение. По умолчанию выбираемое значение имеет тип Число и значение равное нулю. Таким образом, если при создании переключателя не определить его выбираемое значение, то в данные всегда будет помещаться нулевое значение.



Возможность задания значения, которое будет выбираться конкретным переключателем, позволяет сделать алгоритм обработки работы переключателя независимым от порядка следования элементов управления, расположенных в форме.

Примеры использования переключателя можно посмотреть в разделах "Изменение источника данных табличного поля" на странице 516, и "Изменение данных табличного поля путем установки типа значения" на странице 520.

Как настроить порядок обхода в форме?

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

Для того чтобы стала доступна ручная настройка порядка обхода, нужно в палитре свойств панели формы сбросить флаг "Автопорядок обхода".

Также нужно помнить, что порядок обхода задается не для всей формы целиком, а для каждой панели, расположенной в форме, поэтому и свойство "Автопорядок обхода" нужно регулировать для каждой панели отдельно. [621]

Как в иерархическом списке программно установить отбор по конкретному родителю?

Так как табличное поле поддерживает стандартную механику работы с иерархическими списками, то поле "Родитель" не используется в стандартной механике отборов, а управляется специальным способом. Свойство ТекущийРодитель табличного поля позволяет получить и установить текущего родителя, а свойство ИзменятьТекущегоРодителя позволяет запретить пользователю переход по родителям.

Как работать с элементом управления ПолеВыбора?

В 1С:Предприятии 8.0 значением поля выбора является собственно само выбираемое значение, а не список выбора.

Список выбора, соответствующий полю выбора, задается в свойстве СписокВыбора элемента управления.

Заполнять список выбора рекомендуется в теле модуля, а не в обработчиках событий "Перед открытием" и "При открытии".

Это связано с тем, что значение, устанавливаемое для поля выбора, сохраняется, если оно найдено в списке выбора этого поля. Если же устанавливаемое значение не найдено в списке выбора – сохраняется значение Неопределено.



Таким образом, поскольку установка значения поля выбора в открываемой форме производится в процессе создания формы (до вызова событий "Перед открытием" и "При открытии") – список выбора поля выбора должен быть заполнен в теле модуля формы.

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

Например:

ЭлементыФормы.ПолеВыбора1.СписокВыбора.Добавить( 1,"Один");

ЭлементыФормы.ПолеВыбора1.СписокВыбора.Добавить( 2,"Два");

ЭлементыФормы.ПолеВыбора1.СписокВыбора.Добавить( 3,"Три"); [622]

После этого, используя значение реквизита формы, связанного с полем выбора, можно устанавливать текущее и получать выбранное значение в поле выбора.

Пример работы с полем выбора можно посмотреть в модуле формы отчета "РейтингКлиентов" в разделе "Создание отчета РейтингКлиентов" настранице 198.

Не могу найти аналог "семерочного" Активизировать(<имя реквизита>). Нужно периодически программно активизировать элемент формы.

Для указания текущего активного элемента управления, расположенного в форме, следует использовать свойство объекта Форма – ТекущийЭлемент.


Общие объекты


Использование объекта ПостроительОтчета – модуль отчета "Универсальный" в разделе "Создание универсального отчета" на странице 211.

Чтение и запись XML документов – процедура "ЗаписатьСообщениеСИзменениями" в модуле узла плана обмена "ОбменСФилиалами" в разделе "Создание процедуры записи данных" на странице 407.

Работа с объектом Файл – процедуры "ЗаписатьСообщениеСИзменениями" и "ПрочитатьСообщениеСИзменениями" в модуле узла плана обмена "ОбменСФилиалами" в разделе "Создание процедуры записи данных" на странице 407.

Работа с объектом ДиалогВыбораФайла – процедуры модуля формы обработки "ОбменСОтделениями" в разделе "Программный обмен в распределенной информационной базе" на странице 433.

Использование объекта ОписаниеТипов – список документа "ОказаниеУслуги" в разделе "Изменение данных табличного поля путем установки типа значения" на странице 520. [648]



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


Я изменил конфигурацию, но когда запускаю 1С:Предприятие – там нет моих изменений. Почему мои изменения не видны?

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

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

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

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

Обновить конфигурацию базы данных). При этом выполняются дополнительные проверки конфигурации, реструктуризация базы данных (если изменилась структура данных) и замена конфигурации базы данных на редактируемую конфигурацию.

В меню Конфигурация

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

Использование команды Конфигурация

Обновить конфигурацию базы данных (клавиша F7) позволяет сохранять редактируемую конфигурацию сразу с обновлением конфигурации базы данных. [612]

Использование команды Отладка

Начать отладку (клавиша F5) позволяет начинать отладку с сохранением редактируемой конфигурации и обновлением конфигурации базы данных.

Для сохранения редактируемой конфигурации без обновления конфигурации базы данных следует использовать команду Сохранить конфигурацию или Сохранить (клавиша Ctrl+S).

Более подробную информацию можно прочитать в разделе "Основная конфигурация и конфигурация базы данных" на странице 52, и в главе "Немного о конфигурациях" на странице 535.

Как прервать работу модуля? Esc не работает...

В версии 8.0 прерывание длительных действий выполняется клавишей Ctrl+Break.




Пользователь может прервать работу модуля, только если в процессе выполнения модуля выполняется вызов процедуры глобального контекста "ОбработкаПрерыванияПользователя". Эта процедура проверяет, была ли нажата пользователем клавиша Ctrl+Break и прерывает работу модуля.

Следует отметить, что работа модуля будет прервана не всегда, а только в тех случаях, когда работа модуля была инициирована следующими действиями пользователя:

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

Почему в типовой конфигурации я не могу отредактировать полученную печатную форму документа?

Печатные формы первичных документов в типовых конфигурациях защищены от изменений пользователем. Режим "Защита" установлен [613] средствами встроенного языка, и типовые конфигурации содержат настройку, позволяющую регулировать установку этого режима.

Следует заметить, что при включенной защите невозможно не только внесение изменений, но и копирование ячеек данного табличного документа.

Аналогичный подход использовался и в типовых конфигурациях версии 7.7 (например, в девятой редакции "Торговля и склад").

В программных модулях у меня не выделяется цветом все, что относится к глобальному контексту (свойства, методы...)?

Да, в версии 8.0 выделяются цветом только конструкции встроенного языка:

Процедура ... КонецПроцедуры,

Функция ... КонецФункции,

Возврат,

Попытка ... Исключение ... КонецПопытки,

Для ... По ... Цикл ... КонецЦикла,

Для Каждого ... Из ... Цикл ... КонецЦикла,

Пока ... Цикл ... КонецЦикла,

Если ... Тогда ... ИначеЕсли ... Иначе ... КонецЕсли,

Перейти,

Прервать,

Продолжить,

Новый,

Перем,

Выполнить,

конструкция "?".

Встроенные функции языка, свойства и методы глобального контекста не являются конструкциями встроенного языка и поэтому не выделяются цветом. [614]



Я не могу внести никаких изменений в типовую конфигурацию. Почему?

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

Естественно, что для всех типовых конфигураций, выпускаемых фирмой "1С" по умолчанию включен режим, позволяющий производить обновления автоматически. Поэтому вся конфигурация защищена от изменений, и вы не имеете возможности что-либо редактировать.

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

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

О том, какие существуют конфигурации, можно прочитать в главе "Немного о конфигурациях" на странице 535.

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


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


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

Дело в том, что в версии 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?

Да, можно.

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


Перечисление


Как получить имя значения перечисления, которое задано в метаданных?

Чтобы определить имя значения перечисления, которое задано в метаданных, можно поступить следующим образом.

Допустим, у нас есть значение типа ПеречислениеСсылка.<имя>. Сначала нужно получить имя объекта метаданных, описывающего само перечисление (при помощи метода Метаданные() и свойства Имя).

Затем, зная имя перечисления и конкретное значение перечисления, нужно получить индекс этого значения.

В заключение, по имени перечисления и индексу нужного значения перечисления можно получить объект метаданных, описывающий интересующее нас значение перечисления, и в свойстве Имя получить имя значения перечисления, как оно задано в метаданных.

Следующий пример иллюстрирует описанную методику:

ЗначениеПеречисления = Перечисления.ВидыКонтрагентов.Организация;

ИмяПеречисления = ЗначениеПеречисления.Метаданные().Имя;

ИндексЗначенияПеречисления = Перечисления[ИмяПеречисления].Индекс(ЗначениеПеречисления);

ИмяЗначенияПеречисления = Метаданные.Перечисления[ИмяПеречисления].ЗначенияПеречисления[ИндексЗначенияПеречисления].Имя; [626]



Права


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

В версии 8.0 в информационной базе хранится несколько конфигураций, в том числе основная конфигурация (которую редактирует разработчик), и конфигурация базы данных (которая соответствует структуре базы данных, и с которой работают пользователи в режиме 1С:Предприятие). [615]

При редактировании пользователей доступны только те объекты конфигурации (роли, интерфейсы и языки), которые содержатся в конфигурации базы данных.

Поэтому, чтобы созданную роль можно было назначить пользователю, нужно сначала выполнить обновление конфигурации базы данных (меню Конфигурация

Обновить конфигурацию базы данных).

О том, какие существуют конфигурации, можно прочитать в главе "Немного о конфигурациях" на странице 535.



Прикладные объекты


Как узнать (проверить) тип значения документа, справочника?

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

Чтобы узнать тип значения переменной нужно определить ее тип функцией ТипЗнч() сравнить с результатом функции Тип():

Если ТипЗнч(Основание) = Тип("ДокументСсылка.ПриходнаяНакладная") Тогда

   //Переменная Основание имеет тип значения ДокументСсылка.ПриходнаяНакладная

   ...

КонецЕсли;

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

Как в форме списка справочника получить ссылку на текущий элемент?

Для получения ссылки на текущий элемент справочника можно обратиться к свойству ТекущаяСтрока элемента управления ТабличноеПоле. Например:

Сообщить("Текущий элемент:" + ЭлементыФормы.СправочникСписок.ТекущаяСтрока);

Другой способ – обратиться к полю Ссылка текущих данных табличного поля:

Сообщить("Текущий элемент:" + ЭлементыФормы.СправочникСписок.ТекущиеДанные.Ссылка);

Для списков объектных данных (Справочников, Документов,...) эти способы равнозначны, так как поле Ссылка является идентификатором записи. [645]

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

Таким образом, свойство ТекущаяСтрока для всех типов данных выдает значение, идентифицирующее текущую строку.

Для чего служит флажок "Автопорядок по коду" у плана счетов?

Свойство "Автопорядок по коду" используется для того, чтобы указать системе, что упорядочивание по полю "Порядок" должно всегда подставляться в тех случаях, когда пользователь или разработчик выбирает упорядочивание по коду. Его нужно использовать, прежде всего, тогда, когда с точки зрения пользователя нужно упорядочивать план счетов по коду с учетом разделителей кода счета. Например, если упорядочивать по коду счета, то счета будут располагаться так:




"10.11"

"10.2"

Это правильно с точки зрения сортировки строк, но не соответствует логическому смыслу кодов.

Но если заданы значения поля "Порядок": "10.11" и "10. 2" и установлено свойство "Автопорядок по коду", то при выборе упорядочивания по коду пользователь будет, фактически, получать порядок, учитывающий разделители:

"10.2"

"10.11".

Если свойство не установить, то нужно будет в явном виде выбирать упорядочивание по полю "Порядок".

После записи в регистр сведений набора записей в нем пропадают все данные, которые были до этого, остается только тот набор, который я записываю. В чем дело?

Так происходит потому, что у вашего набора записей не был установлен отбор. Если отбор не установлен, то такой набор записей распространяется на весь регистр и, конечно, это приведет к перезаписи всего регистра сведений новым набором. [646]

Для получения более подробной информации можно посмотреть главу "Объект конфигурации регистр сведений" на странице 120, а также статьи на диске ИТС: "Периодические регистры сведений" и "Проектирование структуры периодических регистров сведений".

Почему в 8.0 нет возможности интерактивно открыть форму элемента справочника только для просмотра?

В версии 8.0 при открытии формы объекта (документа, элемента справочника и т.д.) не выполняется (как раньше) блокировка объекта от изменения другими пользователями. Поэтому два пользователя могут, например, открыть один и тот же документ одновременно. Блокировка устанавливается при начале редактирования данных объекта в форме. Если объект уже заблокирован другим пользователем, то при попытке начала редактирования будет выдано соответствующее сообщение.

Таким образом, нет необходимости в специальном режиме открытия форм объектов для просмотра. Форма объекта может быть открыта из любого режима программы (из списка, из отчета в качестве расшифровки и т.д.) без указания того, предполагается ли выполнять редактирование или нет. [647]






Прикладные объекты


Обращение к табличной части и данным строки табличной части в форме документа – процедура "МатериалыКоличествоПриИзменении" в модуле формы документа "ПриходнаяНакладная" в разделе "Создание процедуры обработки события в модуле формы" на странице 74.

Обход табличной части документа – процедура "ОбработкаПроведения" в модуле документа "Приходная накладная" в разделе "Создание движений документа ПриходнаяНакладная" на странице 89.

Формирование и запись движений документа в модуле документа – процедура "ОбработкаПроведения" в модуле документа "Приходная накладная" в разделе "Создание движений документа ПриходнаяНакладная" на странице 89.

Формирование движений по регистру накопления остатков – процедура "ОбработкаПроведения" в модуле документа "Приходная накладная" в разделе "Создание движений документа ПриходнаяНакладная" на странице 89. [655]

Формирование движений по оборотному регистру накопления – процедура "ОбработкаПроведения" в модуле документа "ОказаниеУслуги" в разделе "Изменение процедуры проведения документа ОказаниеУслуги" на странице 157.

Формирование движений документа по регистру бухгалтерии – процедура "ОбработкаПроведения" в модуле документа "ПриходнаяНакладная" в разделе "Создание движений документа ПриходнаяНакладная" на странице 303.

Формирование движений документа по регистру расчета – смотри процедуру "ОбработкаПроведения" документа "НачисленияСотрудникам" в разделе "Создание документа НачисленияСотрудникам" на странице 341.

Ручное редактирование набора записей регистра в документе – смотри документ "ВводНачальныхОстатковНоменклатуры" в главе "Создание документа ввода начальных остатков" на странице 477.

Получение последних значений ресурсов периодического регистра сведений на указанную дату – процедура "РозничнаяЦена" в общем модуле "РаботаСоСправочниками" в разделе "Создание функции РозничнаяЦена()" на странице 124.


Обращение к значению перечисления – процедура "ОбработкаПроведения" в модуле документа "ОказаниеУслуги" в разделе " Изменение процедуры проведения документа ОказаниеУслуги" на странице 134.

Расчет записей регистра расчета – раздел "Создание процедуры расчета записей регистра Начисления" на странице 349.

Перерасчет записей регистра расчета – процедура "ПерерасчитатьНачисления" в общем модуле "ПроведениеРасчетов" в разделе "Выполнение перерасчета записей регистра" на странице 359.

Организация обмена данными на основе механизма универсального обмена данными – раздел "Универсальный механизм обмена данными" на странице 400.

Организация обмена данными на основе механизма распределенных информационных баз – раздел "Механизм распределенных информационных баз" на странице 426.

Ввод на основании – документ "ОказаниеУслуги" в разделе "Ввод на основании" на странице 493.

Использование объекта КритерийОтбора – в разделе "Отбор объектов, введенных на основании" на странице 497. [656]








Работа с запросами


Использование ключевого слова ВЫБРАТЬ – процедура "РеестрДокументовОказаниеУслуги" в модуле формы отчета "РеестрДокументовОказаниеУслуги" в разделе "Отчет РеестрДокументовОказаниеУслуги" на странице 166. [651]

Использование ключевого слова ИЗ – процедура "РеестрДокументовОказаниеУслуги" в модуле формы отчета "РеестрДокументовОказаниеУслуги" в разделе "Отчет РеестрДокументовОказаниеУслуги" на странице 166.

Использование ключевого слова КАК – процедура "РеестрДокументовОказаниеУслуги" в модуле формы отчета "РеестрДокументовОказаниеУслуги" в разделе "Отчет РеестрДокументовОказаниеУслуги" на странице 166.

Использование ключевого предложения УПОРЯДОЧИТЬПО – процедура "РеестрДокументовОказаниеУслуги" в модуле формы отчета "РеестрДокументовОказаниеУслуги" в разделе "Отчет РеестрДокументовОказаниеУслуги" на странице 166.

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

Использование ключевого слова ГДЕ – процедура "РейтингУслуг" в модуле формы отчета "РейтингУслуг" в разделе "Отчет Рейтинг услуг" на странице 173.

Использование ключевого слова ИТОГИ – процедура "РейтингУслуг" в модуле формы отчета "РейтингУслуг" в разделе "Отчет Рейтинг услуг" на странице 173.

Использование ключевого слова ИЕРАРХИЯ – процедура "ПереченьУслуг" в модуле формы отчета "ПереченьУслуг" в разделе "Отчет ПереченьУслуг" на странице 191.

Использование ключевого предложения ДЛЯ ИЗМЕНЕНИЯ – процедура "ОбработкаПроведения" документа "ОказаниеУслуги" в разделе "Оптимизация документа ОказаниеУслуги" на странице 238.

Получение данных документов запросом – процедура "РеестрДокументовОказаниеУслуги" в модуле формы отчета "РеестрДокументовОказаниеУслуги" в разделе "Отчет РеестрДокументовОказаниеУслуги" на странице 166.




Получение данных справочника запросом – процедура "РейтингУслуг" в модуле формы отчета "РейтингУслуг" в разделе " Отчет Рейтинг услуг" на странице 173. [652]

Получение данных регистра накопления запросом – процедура "РейтингУслуг" в модуле формы отчета "РейтингУслуг" в разделе "Отчет Рейтинг услуг" на странице 173.

Получение данных регистра сведений запросом – процедура "ПереченьУслуг" в модуле формы отчета "ПереченьУслуг" в разделе "Отчет ПереченьУслуг" на странице 191.

Получение данных регистра бухгалтерии запросом – отчет "ОборотноСальдоваяВедомость" в разделе "Создание отчета ОборотноСальдоваяВедомость" на странице 312.

Получение данных плана счетов запросом – отчет "ОборотноСальдоваяВедомость" в разделе "Создание отчета ОборотноСальдоваяВедомость" на странице 312.

Получение данных перерасчета запросом – отчет "Перерасчет" в разделе "Иллюстрация механизмов вытеснения и зависимости от базы" на странице 345, и процедура "ПерерасчитатьНачисления" в общем модуле "ПроведениеРасчетов" в разделе "Выполнение перерасчета записей регистра" на странице 359.

Получение данных графика регистра расчета запросом – процедура "РасчитатьНачисления" в общем модуле "ПроведениеРасчетов" в разделе "Создание процедуры расчета записей регистра Начисления" на странице 349.

Получение данных базы регистра расчета запросом – процедура "РасчитатьНачисления" в общем модуле "ПроведениеРасчетов" в разделе "Создание процедуры расчета записей регистра Начисления" на странице 349.

Получение данных регистра расчета запросом – отчет "НачисленияСотрудникам" в разделе "Создание отчета НачисленияСотрудникам" на странице 357.

Получение данных фактического периода действия записей регистра расчета запросом – процедура "КнопкаСформироватьНажатие" в модуле отчета "ДиаграммаНачислений" в разделе "Создание отчета ДиаграммаНачислений" на странице 366.



Задание параметров виртуальной таблицы источника – процедура "РейтингУслуг" в модуле формы отчета "РейтингУслуг" в разделе "Отчет Рейтинг услуг" на странице 173. [653]

Как выбрать данные из нескольких таблиц – процедура "РейтингУслуг" в модуле формы отчета "РейтингУслуг" в разделе "Отчет Рейтинг услуг" на странице 173.

Как выбрать данные, входящие в указанный период – процедура "РейтингУслуг" в модуле формы отчета "РейтингУслуг" в разделе "Отчет Рейтинг услуг" на странице 173.

Получение данных регистра накопления периодами – процедура "ВыручкаМастеров" в модуле формы отчета "ВыручкаМастеров" в разделе "Отчет ВыручкаМастеров" на странице 183.

Вычисляемое поле в источнике запроса – процедура "Сформировать" в модуле формы отчета "РейтингКлиентов" в разделе "Создание отчета РейтингКлиентов" на странице 198.

Передача списка значений в параметры виртуальной таблицы – процедура "ОбработкаПроведения" документа "ОказаниеУслуги" в разделе "Оптимизация документа ОказаниеУслуги" на странице 238, и процедура "ОстаткиМатериаловПоСвойствам" в форме отчета "ОстаткиМатериаловПоСвойствам" в разделе "Отчет ОстаткиМатериаловПоСвойствам" на странице 277.

Передача результата запроса в параметры виртуальной таблицы – процедура "ОбработкаПроведения" документа "ОказаниеУслуги" в разделе "Оптимизация документа ОказаниеУслуги" на странице 238.

Динамическое формирование текста запроса – процедура "ОстаткиМатериаловПоСвойствам" в форме отчета "ОстаткиМатериаловПоСвойствам" в разделе "Отчет ОстаткиМатериаловПоСвойствам" на странице 277.

Вывод результата запроса в табличный документ – процедура "РеестрДокументовОказаниеУслуги" в модуле формы отчета "РеестрДокументовОказаниеУслуги" в разделе "Отчет РеестрДокументовОказаниеУслуги" на странице 166.



Получение промежуточных итогов – процедура "ВыручкаМастеров" в модуле формы отчета "ВыручкаМастеров" в разделе "Отчет ВыручкаМастеров" на странице 183.

Управление порядком вывода итогов в результате запроса – процедура "ВыручкаМастеров" в модуле формы отчета "ВыручкаМастеров" в разделе " Отчет ВыручкаМастеров" на странице 183. [654]

Обход многоуровневых группировок в результате запроса – процедура "ВыручкаМастеров" в модуле формы отчета "ВыручкаМастеров" в разделе "Отчет ВыручкаМастеров" на странице 183.

Получение итогов по всем датам в выбранном периоде – процедура "ВыручкаМастеров" в модуле формы отчета "ВыручкаМастеров" в разделе "Отчет ВыручкаМастеров" на странице 183.

Вычисляемое поле в результате запроса – смотри процедуру "Сформировать" в модуле формы отчета "РейтингКлиентов" в разделе "Создание отчета РейтингКлиентов" на странице 198.

Выгрузка результата запроса в таблицу значений – смотри модуль формы отчета "РейтингКлиентов" в разделе "Создание отчета РейтингКлиентов" на странице198.

Выгрузка результата запроса в список значений – смотри обработчик события "ОбработкаПроведения" документа "НачисленияСотрудникам" в разделе "Создание процедуры расчета записей регистра Начисления" на странице 349.


Системные константы, процедуры и функции


В версии 7.7 была функция КаталогИБ, а как теперь определить каталог информационной базы, чтобы хранить в нем свои файлы?

Системная функция 1С:Предприятия 7.7 КаталогИБ() не реализована в версии 8.0.

Это связано с тем, что в версии 8.0 вся информационная база физически является одним файлом, независимо от используемого файлового или клиент-серверного варианта работы. Таким образом подразумевается, что понятие каталога, как некоей совокупности файлов, относящихся к данной информационной базе, отсутствует. Теперь все нужные файлы должны размещаться внутри информационной базы. Для этого в 1С:Предприятии 8.0 введен новый тип реквизитов и ресурсов – ХранилищеЗначения.

Функция СтатусВозврата(). Есть аналог в 8.0?

Нет, в версии 8.0 метод СтатусВозврата() не используется.

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

Есть ли аналог процедуры ОбработкаОжидания()?

Есть. [616]

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

Более подробно о событиях, связанных с формой, можно прочитать в главе "События, связанные с формой" на странице 547.

Что использовать вместо разделителя строк, который был в 7.7?

Вместо системной константы РазделительСтрок версии 7.7, в версии 8.0 следует использовать системный набор значений Символы. В частности, для указания символа перевода строки следует использовать значение этого набора – "ПС":




Сообщить("Первая строка"+Символы.ПС+"Вторая строка");

Есть ли аналог в 8-ке – ПериодСтр() в 7.7?

Да, в версии 8. 0 есть аналог системной функции ПериодСтр().

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

ОписаниеПериода = "Период:" + ПредставлениеПериода(ДатаНачала, ДатаКонца, "ФП = Истина");

Как узнать текущее время в сеансе работы? РабочаяДата предлагает только дату.

Свойство глобального контекста РабочаяДата служит для отображения или установки рабочей даты, используемой в текущем сеансе конфигурации. Поэтому оно содержит дату в виде 44:MM:CC 00:00:00, указывающую на начало дня. [617] Для получения текущего времени следует использовать встроенную функцию ТекущаяДата(), которая возвращает системную дату и время, установленные на компьютере:

ДатаВремя = ТекущаяДата();

Сообщить("Текущее время = " + Формат(ТекущаяДата(),"ДФ='дд.мм.гг чч:мм:сс'"));

Список значений


Раньше (в 7.7) можно было сделать выбор из списка значений в виде маленького списка или меню, которое подстраивалось по элементу управления формы... А как то же самое сделать в 8.0?

В версии 8.0 для реализации такой возможности следует использовать методы формы (а не списка значений, как это было в 7.7): ВыбратьИзСписка() и ВыбратьИзМеню().

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

Пример вызова:

Выбор = ВыбратьИзСписка(СписокЗначений, ЭлементФормы, НачальноеЗначение);



Справочник


Есть ли в версии 8.0 аналог методу формы справочника ИспользоватьСписокЭлементов()?

Нет.

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

При использовании динамических списков документов, справочников и т.д., также можно программно установить отбор по полю Ссылка, и указать, что в качестве вида сравнения будет использовано вхождение в список значений. Такой прием тоже позволяет отображать в списке только определенные объекты. Однако такой способ может иметь только ограниченное применение, потому что динамический список обладает большим количеством универсальных возможностей (установка отбора пользователем, переходы по уровням в иерархических списках и т.д.), и сложно совместить в прикладных решениях эти механизмы с отбором по конкретным значениям ссылок. [623]

Говорят, что в версии 8.0 нет периодических реквизитов справочников. А как же теперь хранить историю изменения их значений?

Действительно, в версии 8.0 нет возможности создавать периодические реквизиты объектов. На смену им пришел новый, более универсальный механизм, представленный регистрами сведений. Регистры сведений позволяют хранить информацию любого типа на пересечении комбинации значений измерений.

Регистр сведений можно сделать периодическим, и тогда он будет хранить историю изменения этих значений, с заданной точностью (имеется возможность задать различную периодичность регистра сведений – месяц, день, позиция документа и пр.).

В качестве примера можно посмотреть периодический регистр сведений "Цены", хранящий историю изменения цен номенклатуры, в главе "Периодический регистр сведений" на странице 118.

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




Написал процедуру ПриОткрытии() в модуле формы, но она не вызывается, когда я открываю форму. В чем дело?

Дело в том, что в версии 8.0 любому событию формы может быть назначена процедура, которая будет обрабатывать это событие. Имя такой процедуры может не совпадать (а в большинстве случаев и не совпадает) с именем события, поэтому для того, чтобы ваша процедура "ПриОткрытии" стала обрабатывать событие формы "При открытии" необходимо в конфигураторе, в палитре свойств формы, явным образом назначить ее обработчиком этого события.

Для упрощения работы, в версии 8.0 можно создавать шаблоны обработчиков событий формы. Для этого следует выбрать нужное событие в палитре свойств и нажать на символ лупы в конце поля ввода. Система создаст объявление процедуры в модуле формы и свяжет ее с выбранным событием.

Подробнее можно прочитать об этом в главе "Обработчики событий" на странице 546, и на диске ИТС в статье "Процедуры - обработчики событий". [624]

У меня не получается программно изменить элемент справочника. Почему?

По всей видимости, вы пытаетесь изменять элемент справочника, используя объект СправочникСсылка.<имя>. Объекты этого типа позволяют обращаться к реквизитам и табличным частям справочника в режиме "только чтение".

Для того чтобы изменить данные элемента справочника следует получить объект СправочникОбъект.<имя>, который позволяет как читать, так и записывать данные. Это возможно с помощью метода ПолучитьОбъект().

Более подробную информацию можно найти в главах "Виды объектов встроенного языка, предназначенные для работы с данными прикладных объектов конфигурации" на странице 551, "Манипулирование данными объектов" на странице 561, а также в статьях на диске ИТС: "Работа с прикладными объектами средствами встроенного языка" и "Типы значений, связанные с прикладными объектами".

У прикладных объектов нет методов ПолучитьАтрибут() и УстановитьАтрибут(). Как теперь обращаться к атрибутам объектов, если имя атрибута формируется в процессе вычислений?



Встроенный язык версии 8. 0 поддерживает универсальную возможность обращения к свойствам объектов, используя конструкцию [<имя свойства>], где <имя свойства> – строка или строковая переменная, содержащая имя требуемого свойства:

ИмяСвойства = "Наименование";

Объект[ИмяСвойства] = Объект[ИмяСвойства] + " Новый";

В 7.7 были методы ТекущийДокумент() и ТекущийЭлемент() для получения позиционированного элемента справочника или документа. А как теперь это сделать в 8.0?

В версии 8.0 была введена унифицированная объектная структура данных. Теперь значение ссылки на объект базы данных хранится в поле Ссылка, и во всех случаях (при использовании объекта, выборки, [625] запроса и т.д.) значение ссылки на объект можно получить по имени этого поля:

Выборка = Справочники.Склады.Выбрать();

Пока Выборка.Следующий() Цикл

   Склад = Выборка.Ссылка;

   ...

КонецЦикла;

Таблица (табличный документ)


В 7.7 была процедура НоваяСтраница(). А что в 8.0?

Для того, чтобы в версии 8.0 вставить в табличный документ разделитель страниц, следует использовать метод объекта ТабличныйДокумент – ВывестиГоризонтальныйРазделительСтраниц().

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

Как сохранить табличный документ в формате Excel? У меня ничего не получается...

В версии 8.0 для сохранения табличного документа в формате, отличающемся от его исходного формата, следует использовать пункт меню Файл

Сохранить копию...

Команда меню Файл

Сохранить как... позволяет сохранять табличный документ только в "родном" формате. [633]



Универсальные коллекции значений


Использование объекта Структура – процедура "РозничнаяЦена" в общем модуле "РаботаСоСправочниками" в разделе "Создание функции РозничнаяЦена()" на странице 124.

Использование объекта Массив – список документа "ОказаниеУслуги" в разделе "Изменение данных табличного поля путем установки типа значения" на странице 520.



Встроенный язык


Использование функции КонецДня() – процедура "РейтингУслуг" в модуле формы отчета "РейтингУслуг" в разделе "Отчет Рейтинг услуг" на странице 173.



Запрос


В запросах версии 7.7 была опция "все вошедшие в запрос". Как сделать то же самое в 8.0?

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

В версии 8.0 для решения такой задачи следует использовать параметр "Группировки для значений группировок" методов Выбрать() результата запроса и выборки из результата запроса. Если в качестве этого параметра указать "Все", то будут выбраны все значения этой группировки в запросе. Если же указать конкретную вышестоящую группировку, то будут выбраны все значения группировки для текущих значений указанных вышестоящих группировок.

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

Наряду с описанным выше параметром, для группировок типа Дата существует возможность указать в тексте запроса способ дополнения результата запроса значениями группировки в указанном интервале с заданной периодичностью. Для этого в описании формирования итогов используется ключевое слово ПЕРИОДАМИ.

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

В качестве примера можно посмотреть отчет "Выручка мастеров" в разделе "Отчет ВыручкаМастеров" на странице 183. [634]