Разработка в 1С 8.0

АнализПродаж

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



Общую структуру этого прикладного решения можно изобразить следующим образом (стрелки обозначают потоки данных):

АнализПродаж

Поясним основные взаимосвязи между объектами:

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

·Документы регистрируют происходящие события, имеющие смысл с точки зрения экономики, и изменяют состояние регистров.

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

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

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




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









Действия

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



Дерево конфигурации

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



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



Также стоит отметить две полезные команды, доступные через контекстное меню (или по кнопке "

Документы

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

·ПриходнаяНакладная. Осуществляет оприходование товара на склад, добавляет запись о приходе товара в регистр накопления Остатки.

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



В

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


Документы


Хранилище конфигурации

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



Чтобы внести изменения в какой-нибудь объект конфигурации, каждый разработчик должен сначала

Интерфейсы

Представляют собой совокупность панелей интерфейса: меню и панели инструментов, например, интерфейсы Бухгалтер, Руководитель.


Интерфейсы


Языки

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

Поведение объектов конфигурации определяется с помощью установленных свойств и программы на встроенном языке. Например, на встроенном языке задаются действия документа при его проведении, алгоритм формирования печатной формы отчета, процедура определения цены продажи со скидкой и т.д. Разработчик пишет текст программы в строго определенных точках конфигурации ? программных модулях, например, в модуле формы документа ПриходнаяНакладная или в модуле отчета ОстаткиТоваров. Различные типы программных модулей будут рассмотрены в главе "Встроенный язык", а сейчас мы познакомимся с основными инструментами разработки системы 1C: Предприятия 8.0.





Код:

ВЫБРАТЬ Наименование, ЗакупочнаяЦена

ИЗ Справочник.Номенклатура

ГДЕ ЗакупочнаяЦена > 1300

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



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

модифицировать данные в базе данных (например, ДокументОбъект).





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

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

Если Выборка.Оклад > 10000 Тогда

Сообщить(Выборка.Наименование + " имеет оклад " + Выборка.Оклад);

КонецЕсли;

КонецЦикла;





Количество

.

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



Ниже показано окно для редактирования экранной формы документа.



В окне редактирования документа на закладке "Движения" отметьте регистры, по которым он может делать движения. Для приходной накладной нужно отметить регистр Остатки, а для расходной накладной ? регистры Остатки и Продажи.



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



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



Документ РасходнаяНакладная создается аналогичным образом, за исключением того, что он еще делает движения типа "расход" по регистру Остатки и добавляет записи в регистр оборотов Продажи. Мы создадим дополнительные реквизиты

Константы

В константах хранятся редко изменяемые значения, например, название организации, ИНН, ФИО руководителя и т.д.


Константы


Конструктор для элементов управления

Размещает элементы управления в форме и настраивает их основные свойства



Конструктор движений документа

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



Конструктор форм

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



Конструктор меню

Автоматически создает главное пользовательское меню конфигурации на основе списка всех объектов конфигурации.



Конструктор печати

Формирует процедуру и макет для печати информации об объектах, например, списка элементов справочника и сведений об одном элементе.



Конструктор ввода на основании

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



Конструктор выходной формы

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



Конструкторы объектов конфигурации



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



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



Критерии отбора

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


Критерии отбора


Масштабируемость:



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

· В клиент-серверном варианте реализуется трехуровневая архитектура, когда между клиентом и сервером баз данных располагается сервер 1С:Предприятия 8.0. Допускается работа программы на встроенном языке на сервере 1С:Предприятия 8.0.

· В файловом варианте работы 1C: Предприятия 8.0 информационная база хранится в одном файле, который включает в себя конфигурацию, данные и административную информации. Конфигурация (без данных) может быть выгружена в cf-файл (аналог md-файла версии 7.7).

· Введен механизм СОМ-соединения для взаимодействия с другими приложениями, поддерживающими данную технологию.

· Добавлены средства групповой разработки ? хранилище конфигурации с поддержкой истории изменений.





Номенклатура

. Содержит список товаров.

·Контрагенты. Содержит список клиентов и поставщиков, а также всех внешних организаций.

·Склады. Содержит список складов (мест хранения) организации.





Нумераторы

Нумераторы предназначены для единой (сквозной) нумерации документов нескольких видов. Например, нумератор Кадровый используется для присвоения номеров всем кадровым приказам.


Нумераторы


Обработки

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

Ниже дано краткое описание остальных объектов конфигурации, располагающихся в ветви "Общие" дерева конфигурации:



Обработки


Общие формы

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


Общие формы


Общие картинки

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


Общие картинки


Общие макеты

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


Общие макеты


Общие модули

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


Общие модули


Общие отличия:



· Встроенный язык версии 8.0 не совместим с языком версии 7.7. При конвертации информационной базы тексты программных модулей не конвертируются (переносятся в виде комментариев).

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

· Разработан механизм поставки и поддержки конфигураций.

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

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



Основной

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



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



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



Остатки

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





Отчеты

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





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


Отчеты


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

Перечисление ? это набор значений, заданный еще на этапе разработки прикладного решения, он не редактируется в режиме "Предприятие". Главное, что стоит понять, сама конфигурация рассчитана на определенные перечисления, например, на перечисление ТипКлиента со значениями Обычный и ОченьВажнаяПерсона. Для VIP-клиентов в программе может быть предусмотрена скидка.


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


Планы счетов

Содержат список счетов бухгалтерского или управленческо-го учета, например, планы счетов Стандартный, Управленческий, План GААР.


Планы счетов


Планы видов характеристик

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


Планы видов характеристик


Планы видов расчета

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


Планы видов расчета


Подсистемы

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


Подсистемы


Последовательности

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


Последовательности


Разработка:

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

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

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

· Расширен набор элементов управления, их свойств и событий. Теперь в форме могут располагаться ActiveX-компоненты.

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

· Отладчик включен в Конфигуратор. Он умеет показывать список свойств объектов с указанием их значений и типов. Есть возможность просмотреть коллекции, например, массивы и таблицы значений.

· Функциональность внешней компоненты v7plus.dll включена в платформу в виде объектов Почта, СистемнаяИнформация, ИнтернетСоединение, FТРСоединение и т.д. Есть встроенные средства для работы с XML-документами.



Регистрах накопления

хранится информация об остатках или оборотах, связанных с объектами предметной области. Нам понадобятся следующие регистры накопления:

·Остатки. Хранит записи о движении товаров на складе, пре доставляет информацию об остатке товаров на каждом складе.

·Продажи. Хранит записи о продажах, предоставляет информацию об объеме продаж каждого товара в разрезе контрагентов.





Регистры бухгалтерии

Хранят записи (проводки) основанные на определенном плане счетов, например, регистр бухгалтерии Управленческий.


Регистры бухгалтерии


Регистры накопления

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


Регистры накопления


Регистры расчета

Предназначены для хранения учетных записей сложных периодических расчетов, например, регистр расчета Удержания. Каждый регистр расчета основан на каком-либо плане видов расчета.


Регистры расчета


Регистры сведений

Предназначены для хранения любой информации об объектах в разрезе заданных измерений, например, регистр сведений ЦеныТоваров. Если требуется хранить историю изменения информации, то регистр сведений делается периодическим, например, регистр КурсыВалют.


Регистры сведений


Ресурс

Количество. Обратите внимание на то, что при указании типа данных для измерения Товар выбирается справочник Номенклатура. Так в простейшем случае настраиваются связи между объектами.



Ниже показано окно для редактирования структуры регистра Остатки и его свойства.



Регистр Продажи создается таким же способом. В нем будут два

Сумма. Регистр будет хранить объем продаж за период в разрезе контрагентов и товаров, т. е. это будет

Роли

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


Роли


Список пользователей

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


Список пользователей


Справочники

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





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


Справочники


Стили

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


Стили


Сумма

.



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



Заметьте, что все конструкции записаны на русском языке, но их также можно записывать и на английском.



Тестирование и исправление информационной базы

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


Тестирование и исправление информационной базы


Выгрузка и загрузка информационной базы

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

При использовании файлового варианта работы 1С:Предприятия 8.0 резервную копию можно сделать, просто скопировав файл информационной базы. В клиент-серверном варианте можно воспользоваться встроенными средствами MS SQL Server. Механизм выгрузки и загрузки позволяет переносить информационную базу между файловым и клиент-серверным вариантом.





Захватить

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



Журнал регистрации

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


Журнал регистрации


Журналы документов

Журналы ? это средство группировки связанных по смыслу документов, например, журнал Склад объединяет приходные и расходные накладные. Аналогично могут быть созданы журналы Банк, Кадры и т.д.


Журналы документов


Разработка в 1С 8.0

Цикл

//тело цикла

Если СтрокаТЗ.Товар = ПустаяСсылка Тогда



Если Выборка.ПометкаУдаления Тогда

Продолжить; //возьмем следующий элемент

КонецЕсли;

н = н + 1;

Если н > 10 Тогда

Прервать; //досрочный выход из цикла

КонецЕсли;

Сообщить("Товар: " + Выборка.Наименование);



Другой пример:

Если Цена = 10 ИЛИ Цена = ПолучитьЦенуСоСкидкой () Тогда

Сначала проверяется первое условие «Цена = 10». Допустим, оно выполняется (дает значение Истина), тогда следующую часть условия можно не вычислять, поскольку результат всего выражения будет Истина, независимо от второго условия. Обратите внимание, что в этом случае функция ПолучитьЦенуСоСкидкой не будет вызвана! Если по проектной логике она должна вызываться в любом случае, тогда это следует сделать

Функция

ЕстьПравоИспольэования(ИмяОтчета)

//возвращаемое значение функции

Возврат ПравоДоступа("Использование", Отчеты[ИмяОтчета]);

КонецФункции

//_______________________

Процедура КнопкаПечатьНажатие(Элемент)

Если НЕ ЕстьПравоИспользования(ИмяОтчета) Тогда

Возврат; //досрочный выход из процедуры

КонецЕсли



ТабДок = Новый ТабличныйДокумент;



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

доступный во всех остальных контекстах, состоит из следующих частей:

·свойства, методы и события глобального контекста (например, свойство РабочаяДата),

· системные перечисления и системные наборы значений (например, КодВозвратаДиалога и Символы).



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


Группировки конструкций языка

Наверное, вы уже заметили, что слева от слова Процедура есть кнопки «развернуть» и «свернуть» (Big). Эти кнопки позволяют свернуть блок операторов (в данном случае процедуру) и работать с ним, как с единым целом, например, скопировать, перенести или удалить.

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


Группировки конструкций языка


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

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



Кроме того, есть команда ВызватьИсключение, которая может применяться только внутри блока обработки исключения. Хотя программист и обработал ошибку, но он может ее пропустить (передать обработчику вышестоящего уровня), например, если она неисправима:



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


, тогда она обрабатывается внешним обработчиком, а если его нет, выдается системное сообщение об ошибке.








Исключение

//Возникла ошибка деления на ноль.

//Будем считать, что количество равно 1.

Количество = 1;

СредняяЦена = СуммаВсего;

КонецПопытки;

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

Сообщить("Не удалось записать файл!");



Изменения во встроенных функциях, свойствах и методах глобального контекста:



·Добавлены математические функции Sin, Cos, Tan, ASin, ACos,ATan, Exp, Log (натуральный логарифм), LoglO (десятичный логарифм), Pow (возведение в степень), Sqrt (квадратный корень).

·Для получения типа значения используется функция ТипЗнч(), которая возвращает объект специального типа «Тип». Для получения типа по его строковому представлению используется функция Тип().

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

·Расширены возможности форматирования, для чего существуют функции Формат, НСтр, ПредставлениеПериода. Добавлены или изменены события ПередНачаломРаботыСистемы, ПриНачалеРаботыСистемы, ПередЗавершениемРаботыСистемы и ПриЗавершенииРаботыСистемы. Добавлены процедуры ПрекратитьРаботуСистемы и ЗаблокироватьРаботуПользователя.

·Функции КаталогИБ и КаталогПользователя удалены, поскольку теперь эти каталоги существуют не всегда. Изменена функция ПравоДоступа и введена новая функция РольДоступна.

·Функция ЗаголовокСистемы заменена на функции УстановитьЗаголовокСистемы и ПолучитьЗаголовокСистемы.

·Приемы работы с монопольным режимом изменились. Введена функция МонопольныйРежим и процедура УстановитьМонопольныйРежим.

·Для работы с объектами, помеченными на удаление, существуют процедуры и функции НайтиПомеченныеНаУдаление, НайтиПоСсьшкам, УдалитьОбъекты.

·Вместо функции ОбработкаОжидания введены функции ПодключитьОбработчикОжидания и ОтключитьОбработчикОжидания.

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

< ·Функция РабочаяДата() заменена на свойство глобального контекста РабочаяДата, которое доступно для записи в случае, если свойство ИспользованиеРабочейДаты имеет значение РежимРабочейДаты.Назначать.



· Функции ПустоеЗначение больше не существует. Функции ДатаЧисло, ДатаМесяц, ДатаГод заменены на День, Месяц, Год. Так как значения типа «дата» включают в себя время, то добавлены аналогичные функции для извлечения времени из даты: Час, Минута, Секунда.




table width="100%" cellpadding="0" cellspacing="0"><


table width="100%" cellpadding="0" cellspacing="0">

<


table width="100%" cellpadding="0" cellspacing="0">

Экспорт

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


Экспорт


Код:

//экспортируемыепеременные

Перем НачДата Экспорт;

Перем КонДата Экспорт;



Перем мПериодСтрокой; //локальная переменная модуля

...

//далее идут процедуры и функции

...

//а затем раздел основной программы

...

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



Например, ниже приведен модуль документа:



Код:


Перем НачДата Экспорт;

Перем КонДата Экспорт;

Перем мПериодСтрокой;

Процедура Печать(ТабДок=Неопределено) Экспорт

//эта процедура будет доступна как метод объекта ДокументОбъект

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

Функция ПолучитьГруппировку(РезультатЗапроса, ИмяГруппировки)

//это локальная процедура модуля

КонецФункции

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



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






ФункцияСокращенноеЕсли(РезультатУсловия, выражение1,выражение2)

Если РезультатУсловия Тогда //Истина

Возврат выражение1;

Иначе //Ложь

Возврат выражение2;

КонецЕсли;

КонецФункции


Код:



ПустаяСсылка= Справочники.Номенклатура.ПустаяСсылка();


н= 0;

Для Каждого СтрокаТЗ Из тзСостав Цикл

н = н + 1 ;



//действия

КонецЦикла;

Для некоторых коллекций по элементу можно определить его индекс:



Код:



Для Каждого СтрокаТЗ Из тзСостав Цикл

ИндексСтроки = тзСостав.Индекс(СтрокаТЗ);

КонецЦикла;

Если элемент не принадлежит данной коллекции, то метод Индекс возвращает -1 (минус единицу).



Код:



н = 0;

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


н= 0;

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

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

н = н + 1;

Если н <= 10 Тогда

//пропускаем первые 10 элементов справочника



КонецЦикла;

Переменная Меc называется переменной цикла или счетчиком цикла. Не следует изменять значение переменной цикла внутри него. Это нарушает принципы структурного программирования и может привести к трудно обнаруживаемым ошибкам.



КонецЦикла;


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


КонецЦикла;


КонецЕсли


Выполнение фрагмента модуля на сервере 1С: Предприятие 8.0


Эта инструкция позволяет включить возможность использования процедур и функций в сессии СОМ-соединения



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





Конструкция «Для Каждого ... Из ... Цикл»

В 1С:Предприятии 8.0 была введена новая конструкция «Для Каждого», предназначенная для обхода элементов коллекции. В таких циклах в качестве переменной цикла выступает не число, а объект ? элемент коллекции, например, объект СтрокаТаблицыЗначений в следующем примере:


Конструкция «Для Каждого ... Из ... Цикл»


Конструкция «Для ... По ... Цикл»

Цикл «Для...По» применяется для записи циклов с известным числом повторений. Например, следующий цикл 12 раз выведет номер месяца в окно служебных сообщений:

Конструкция «Если ... Тогда»

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


Конструкция «Если ... Тогда»


Конструкция «Попытка...Исключение»

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

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


Конструкция «Попытка...Исключение»


Конструкция «?(..., ..., ...)»

Данная конструкция позволяет записать условный оператор в одну строку и вычислить его как выражение.



Контекстная подсказка

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

Например, после написания строки «Документы.» появляется контекстное меню. Набираем первые буквы имени документа ? «расх» ? и курсор устанавливается на документ Расходная-Накладная.

Остается нажать Enter и имя документа будет подставлено в текст модуля. Затем можно опять ввести точку и появится уже список свойств и методов документа РасходнаяНакладная. Необходимо учитывать, что область действия контекстной подсказки ограничена: она работает не во всех случаях и не для всех объектов.


Контекстная подсказка


Логические выражения

В операторе Если, конструкциях «?(...)», а также в цикле Пока применяются логические выражения, т.е. такие, результат которых имеет тип «булево» с двумя значениями: Истина и Ложь. В логических выражениях могут применяться логические сомножители НЕ, И, ИЛИ (в порядке приоритета). Для задания правильного порядка вычисления рекомендуется расставлять скобки,


Логические выражения


Модуль приложения

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



Модуль внешнего соединения



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



Модули форм



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

На следующем рисунке показано расположение всех этих модулей.







Модули прикладных объектов

У некоторых прикладных объектов конфигурации могут быть собственные модули, например, модуль документа РасходнаяНакладная, модуль справочника Номенклатура. Не следует их путать с модулями форм этих объектов.



Например:

//следующуюконструкцию:

Если НЕ Страна = ВыбСтрана ИЛИ Цена > 100 И Цена < 1000 Тогда

//лучше записать так:

Если (НЕ Страна = ВыбСтрана) ИЛИ (Цена > 100 И Цена < 1000) Тогда


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







Если Цена > 10 И Цена < 20 Тогда

При вычислении результата составного логического выражения проверяется первое условие «Цена > 10». Допустим, цена равна 5, тогда первое условие не выполняется (дает значение Ложь) и следующую часть вычислять уже не нужно, поскольку в любом случае результат всего выражения будет Ложь.






//следующая процедура принимает табличный документ,

//а если ничего не передано,

//то она его создает и показывает на экране

Процедура Печать(ТабДок = Неопределено) Экспорт

Если ТабДок = Неопределено Тогда

ТабДок = Новый ТабличныйДокумент;

флПоказывать = Истина;

Иначе

флПоказывать = Ложь;

КонецЕсли;

Макет = ПолучитьМакет("Основной");

ТабДок.Вывести(Макет.ПолучитьОбласть("Бланк"));



Если флПоказывать Тогда

ТабДок.Показать();

КонецЕсли;

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

Например:Замечание.

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



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

Null

.



Операторы встроенного языка должны разделяться точкой с запятой («;»), но после ключевых слов КонецПроцедуры или КонецФункции точка с запятой не ставится, поскольку это не операторы, а операторные скобки.



Далее описаны основные конструкции встроенного языка 1 С: Предприятия 8.0.



Объявление переменных

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

Общие модули



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



Окно редактора

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

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


Окно редактора


Оператор Новый

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

Ниже показываются различные варианты объявления переменных:


Оператор Новый


Печать

(ТабДок);//вызов процедуры Печать

ТабДок.Показать();

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

//_______________________

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



Печать


Перейти

. Метка может быть у любого исполняемого оператора. Она начинается со знака тильды («~»), далее идет имя метки, а затем двоеточие («:»), например:
function doExpand(paraNum, imageNum) { if (paraNum.style.display=="none") {paraNum.style.display=""; imageNum.src="arrowdn.gif"} else {paraNum.style.display="none"; imageNum.src="arrowrt.gif"} }




Перейти


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



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


будет полезен, если требуется выйти сразу из нескольких циклов.





Перем

.

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

Если переменную модуля объявить с ключевым словом

Поиск и замена текста

Текстовый редактор поддерживает поиск строки по тексту, для чего существуют следующие кнопки на панели инструментов:

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

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


Поиск и замена текста


Пока

предназначено для реализации циклов с неизвестным числом повторений. Цикл выполняется до тех пор, пока логическое выражение истинно. Если на очередном витке Цикла оно перестает выполняться (дает значение Ложь), то цикл прекращается.

Ниже показан пример реализации цикла Пока:



Пока


Попытка

СредняяЦена= СуммаВсего / Количество;



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



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



Попытка


Прервать;

//досрочный выход из цикла

КонецЕсли;

КонецЕсли;



, а для перехода на следующий виток цикла нужно применять оператор

и работает как следующая функция:





Комментарий=?(Количество=0,"Пусто",Строка(Количество)+"шт ." );



Обычно эта конструкция применяется в выражениях и работает как следующая функция:



и работает как следующая функция:


Следующий пример показывает нежелательное форматирование

//1-йпример

Если Состав.Количество()=0 Тогда

Предупреждение("Не указано ни одной строки!");

КонецЕсли;

//2-й пример

Если Сотр.Категория = Перечисления.Категории.Совместитель Тогда

//обработаем как совместителя

Иначе

//обычный сотрудник

КонецЕсли;

//3-й пример

Если выбор = 1 Тогда

Сообщить("Выбран 1-й пункт");

ИначеЕсли выбор = 2 или выбор = 3 Тогда

Сообщить("Выбран 2-й или 3-й пункт");

Иначе

Сообщить("Обработка этого пункта не предусмотрена");

КонецЕсли;

Ключевые слова ИначеЕсли, Иначе и КонецЕсли желательно записывать с новой строки. Следующий пример показывает нежелательное форматирование оператора Если:



//
//явноеобъявление переменной модуля или процедуры/функции

Перем Итог;

//экспортируемая переменная модуля

Перем Количество Экспорт;

//неявное объявление переменных (при первом присвоении значения)

ном = 0;



Следующий пример показывает нежелательное форматирование


Приведение типов

При программировании часто требуется преобразовать значение одного типа в значение другого типа, например, число 10 преобразовать в строку «10».

Приведение типов может быть явное и неявное. Для явного приведения типов существуют следующие функции:

· Число(),

· Строка(),

· Дата(),

· Булево().



Неявное приведение типов производится системой автоматически при вычислении выражений. Например, в следующей конструкции значение числовой переменной НомерМесяца неявно преобразуется в строку и присоединяется к другой строке:


Приведение типов


Процедура

Печать(ТабДок)

Макет = ПолучитьМакет("Основной");

ТабДок.Вывести(Макет.ПолучитьОбласть("Бланк"));

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

//_______________________

Продолжить;

//возьмем следующую строку

Иначе

Если СтрокаТЗ.Товар = ВыбТовар Тогда



Разделение и слияние окон

Текстовый редактор позволяет одновременно работать с разными частями модуля. Для этого предназначено горизонтальное и вертикальное разделение окна, которое включается и выключается из меню «Окна».

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

















Шаблоны

Для ускорения ввода часто используемых конструкций можно использовать шаблоны, например, для блока «Если...КонецЕсли;» или «Процедура...КонецПроцедуры».

Список всех шаблонов можно просмотреть в следующем окне.

Шаблоны можно разделить на группы. Двойной щелчок на шаблоне открывает окно для его редактирования. После набора нескольких символов, заданных в качестве строки замены, можно нажать Ctrl-Q и активизируется соответствующий шаблон, т.е. введенная строка будет заменена на текст шаблона.


Шаблоны


Синтакс-помощник

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


Синтакс-помощник


Синтаксический контроль

По кнопке Синтаксический контроль можно произвести проверку модуля на наличие синтаксических ошибок. Если даже таких ошибок не будет найдено, то это не гарантирует, что программа будет работать правильно, поскольку могут возникать ошибки времени выполнения, которые невозможно обнаружить на этапе синтаксического контроля. Рекомендуется в параметрах включить автоматическую проверку модуля на синтаксические ошибки, которая будет всегда выполняться при его сохранении. Это позволит раньше обнаружить ошибку, и, следовательно, ее исправление обойдется дешевле. В 1С:Предприятии 8.0, как и в версии 7.7, есть возможность проверить все программные модули конфигурации на наличие синтаксических ошибок. Для этого нужно выбрать команду в меню «Конфигурация Синтаксический контроль Синтаксический контроль модулей».


Синтаксический контроль


Системные перечисления и наборы значений

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

Например, ниже используется системное перечисление ОриентацияСтраницы и его значение Портрет:


Системные перечисления и наборы значений


~След

;

КонецЕсли;

Сообщить(Выборка.Наименование);



Так делать не рекомендуется!



Если Состав. Количество () =0 Тогда ... Иначе ... КонецЕсли;



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



Если результат выражения имеет тип «булево» и требуется сравнить его со значением Истина, то следующие конструкции полностью эквивалентны:



Если Выборка.Следующий() = Истина Тогда //так не рекомендуется

Если Выборка.Следующий() Тогда //это рекомендуемый вариант



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



Если ВыбФирма.Пустая() = Ложь Тогда

Если НЕ ВыбФирма.Пустая() Тогда



Так делать не рекомендуется!


В контексте модуля формы

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

Необходимо помнить правила видимости экспортируемых переменных, процедур и функций различных модулей:



· В общем модуле недоступны экспортируемые переменные, процедуры и функции модуля приложения (модуля внешнего соединения).



· В модуле приложения (модуле внешнего соединения) доступ-ны экспортируемые процедуры и функции общих модулей



· В общих модулях доступны экспортируемые процедуры и функции других общих модулей



· В модулях прикладных объектов и модулях форм доступны экспортируемые переменные, процедуры и функции модуля приложения (модуля внешнего соединения), а также экспортируемые процедуры и функции общих модулей.



· Если у формы назначен основной реквизит, то контекст модуля формы содержит дополнительные свойства и методы, свя-занные с основным реквизитом Например, в модуле формы элемента справочника Номенклатура доступны свойства и методы объекта СправочникОбъект.Номенклатура.





В контексте модуля формы

Схематично взаимосвязь контекстов можно изобразить следующим образом

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









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

<
table width="100%" cellpadding="0" cellspacing="0">

<

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




table width="100%" cellpadding="0" cellspacing="0"><

В контексте модуля формы






table width="100%" cellpadding="0" cellspacing="0">

В контексте модуля прикладного объекта

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


В контексте модуля прикладного объекта


В контексте модуля приложения (или модуля внешнего соединения)

доступны экспортируемые переменные, процедуры и функции общих модулей.


В контексте модуля приложения (или модуля внешнего соединения)


В контексте общего модуля

доступны экспортируемые процедуры и функции других общих модулей. В этом контексте недоступны экспортируемые переменные, процедуры и функции модуля приложения.


В контексте общего модуля


В разделе объявления переменных определяются



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

ВызватьИсключение;



КонецПопытки;

Обработчики исключений могут быть вложенными друг в друга. Если ошибка не обработана во внутреннем блоке

Закладки по тексту

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

Механизм закладок по тексту реализуется с помощью следующих кнопок на панели инструментов:

Закладки по тексту
1.Установить / снять закладку (Alt-F2),

2.Перейти к следующей закладке (F2),

3.Перейти к предыдущей закладке (Shift-F2),

4.Убрать все закладки в тексте.



Закладки по тексту



Разработка в 1С 8.0

Автонумерация

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


Автонумерация


Цикл

Цикл

Сообщить("К " + ДокВыборка.Номер + " от " + ДокВыборка.Дата);



//перебор строк табличной части

Для Каждого стр Из ДокВыборка.Состав Цикл

Сообщить(" " + стр.Номенклатура);

КонецЦикла;



КонецЦикла ;

Синтаксическая диаграмма метода Выбрать такова :



Выбрать(<ДатаНачала>, <ДатаОкончания>, <Отбор>, <Порядок>);

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

Ниже поясняется назначение каждого параметра:



Цикл


Длина

Устанавливает максимальную длину номера документа. Самая большая длина номера, которую можно установить, ? 50 символов.


Длина


ДокументМенеджер

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


ДокументМенеджер


ДокументОбъект

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


ДокументОбъект


ДокументСписок

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

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

ДокументСписок

На схеме показаны не все возможные взаимосвязи Например, метод Скопировать существует не только у объекта ДокументСсылка, но и у самого объекта ДокументОбъект.




Рассмотрим на примерах выполнение типичных операций с документами.



ДокументСсылка

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


ДокументСсылка


ДокументВыборка

Предоставляет возможность обхода (перебора) документов определенного вида. Объект этого типа возвращается методом Выбрать объекта ДокументМенеджер.


ДокументВыборка


ДокументыМенеджер

Обеспечивает доступ к менеджерам всех документов конфигурации. Свойства этого объекта совпадают по имени с именами документов и содержат объекты типа ДокументМенеджер.


ДокументыМенеджер


Форма документа

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


Форма документа


Форма группы

Отображает и позволяет редактировать сведения о группе справочника. Группы могут иметь другой состав реквизитов по сравнению с элементами.


Форма группы


Форма элемента

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


Форма элемента


Форма списка

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


Форма списка


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


Форма списка


Форма выбора группы

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


Форма выбора группы


Форма выбора элемента

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


Форма выбора элемента


Форма выбора

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

Если какая-то из форм не была создана разработчиком, то система сгенерирует нужную форму «на лету», когда в ней возникнет необходимость. Конечно, это может быть недостаточно для удобного ввода и просмотра информации, поэтому рекомендуется, когда это необходимо, создавать собственные формы с эргономичным интерфейсом. Особенно это актуально для ежедневно используемых документов Пользователь работает с этими документами каждый день, и малейшая недоработка будет постоянно мешать, снижая его производительность и повышая утомляемость.



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

Форма выбора


Форма выбора

Формы

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


Формы


Графы журнала

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

Элементы и группы

В первом случае все элементы иерархического справочника разделяются на «просто» элементы справочника и группы справочника. Группы могут отличаться по структуре от обычных элементов, т.е. могут содержать другой состав реквизитов. Для каждого реквизита указывается, относится ли он только к элементу, только к группе или к обоим. Примером иерархического справочника с группами может служить справочник Сотрудники, в котором есть группы Штатные, Совместители и Уволенные.


Элементы и группы


Клавиатуры


Клавиатура Apple


Клавиатура


Клавиатура PS/2


Клавиатура PS/2




Код:

//чтение значения из константы

Название = Константы.НазваниеОрганизации.Получить();

// запись нового значения в константу

Константы.НазваниеОрганизации.Установить(НовоеНазвание);

Обратите внимание на слово Константы (а не Константа, как было в версии 7.7). Через такую конструкцию мы обращаемся к объекту КонстантыМенеджер (заметьте, что применяется множественное число), который позволяет затем обратиться к менеджеру конкретной константы по ее имени.

Если расшифровать приведенный выше пример, то станет более понятна взаимосвязь объектов:



Код:


//получаем объект для управления списком констант


Назв= Константы.НазваниеОрганизации.Получить();

СпрСотр = Справочники.Сотрудники;

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

ДокНакл = Документы.РасходнаяНакладная;

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

Ниже дано описание объектов для работы с константами:



Код:



//создаем набор из двух констант

//обратите внимание, что значений констант в наборе еще нет

Набор = Константы.СоздатьНабор("Руководитель,ИНН");

Набор.Прочитать(); //прочитать из базы сразу две константы

//изменить значение констант в наборе (не в базе)

Набор.Руководитель = "Иванов И.И.";

Набор.ИНН = "1234567890";

Набор.Записать(); //записать в базу сразу две константы


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



Константы ? слишком простой объект для полного понимания объектной модели 1С:Предприятия 8.0. Далее на примере справочников мы рассмотрим новую объектную модель во всей ее полноте.







КонстантаМенедже

р = КонстантыМенеджер.НазваниеОрганизации;

//считываем значение константы из базы данных

Значение = КонстантаМенеджер.Получить();

//записываем новое значение константы в базу данных

КонстантаМенеджер.Установить(НовоеЗначение);

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



Существуют свойства глобального контекста, ссылающиеся на объекты типа КонстантыМенеджер, СправочникиМенеджер, ДокументМенеджер и т.д., они называются односложно: Константы, Справочники, Документы. Это позволяет упростить написание программы и следующие примеры это демонстрируют.



КонстантаМенедже


КонстантаМенеджер

Менеджер константы обеспечивает доступ к конкретной константе. Через него можно прочитать и установить ее значение с помощью методов Получить и Установить.


КонстантаМенеджер


КонстантыМенеджер

= Константы;

//получаем объект для управления одной константой


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


КонстантыМенеджер


КонстантыНабор

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

Работу с набором констант продемонстрируем на следующем примере.



КонстантыНабор


Контроль уникальности

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

Макеты

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

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



Например, в модуле отчета объявляется процедура Печать с ключевым словом Экспорт, которая в качестве параметра принимает табличный документ.

Макеты


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



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



Чтобы научиться формировать печатные формы, необходимо прочитать главу «Отчеты». Отчеты часто извлекают информацию из базы данных с помощью запросов. Механизм запросов является очень гибким и описан в отдельной главе Запросы. Во многих случаях отчеты и обработки обращаются к регистрам, работа с которыми описана в главах Регистры сведений, Регистры накопления и др.





Мониторы


Монитор 15' LG


Монитор 15' LG


Монитор 17' Philips


Монитор 17' Philips




Например:

Процедура ПередЗаписью (Отказ, РежимЗаписи, РежимПроведения)

Дата = ПолучитьОперативнуюОтметкуВремени();

....

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

ОбработкаПроведения

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

ОбработкаУдаленияПроведения

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


ОбработкаУдаленияПроведения


ОбработкаЗаполнения

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

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



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



ОбработкаЗаполнения


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


ОбработкаЗаполнения


Общие отличия:



·Справочники могут иметь несколько табличных частей.

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

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

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

·У справочников могут быть предопределенные элементы и группы, задаваемые еще на этапе разработки конфигурации.

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

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

·Элемент справочника может быть введен на основании документа, счета и других объектов, или наоборот.

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

·Максимальная длина наименования увеличена до 150 символов, максимальная длина кода ? 50 символов.

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



Оперативная отметка времени

При оперативном проведении дата документа, как правило, изменяется на текущий момент, что является обычным поведением системы. Но разработчик может взять этот процесс под свой контроль. Он сам может получать очередную оперативную отметку времени и присваивать ее документу при проведении или при записи. Для этого предназначен метод глобального контекста ПолучитьОперативнуюОтметкуВремени. Его возвращаемое значение соответствует текущей дате (с учетом времени), но будет не меньше, чем последняя оперативная отметка времени, полученная каким-либо пользователем в этом сеансе работы с информационной базой. Таким образом, 1С:Предприятие 8.0 предоставляет механизм для получения неповторяющихся отметок времени.


Оперативная отметка времени


Отбор

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


Отбор


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


Отбор


Отличия в свойствах и методах:



·Вместо метода ПометкаУдаления() для объекта типа СправочникОбъект введено свойство ПометкаУдаления, которое имеет тип «булево» и доступно для чтения и записи. Если ему присвоить значение Истина и записать объект, то элемент будет помечен на удаление. Метод Удалить с параметром 0 уже не применяется для установки пометки удаления. Для установки пометки удаления также можно использовать метод УстановитьПометкуУдаления.

·Вместо метода ЭтоГруппа() введено свойство ЭтоГруппа типа «булево», доступное только для чтения.

·Методы Выбрать и ВыбратьИерархически возвращают объект типа СправочникВыборка (см. выше взаимосвязь объектов).

·Методы НайтиПоКоду, НайтиПоНаименованию и НайтиПоРеквизиту возвращают ссылку на найденный элемент или пустую ссылку, если элемент не найден. В любом случае возвращается объект типа СправочникСсылка.

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

·Вместо метода ПринадлежитГруппе введен метод ПринадлежитЭлементу, поскольку иерархические справочники могут состоять только из элементов (без групп).

·Вместо метода Блокировка с разными параметрами нужно применять методы Заблокировать, Разблокировать и Заблокирован. Последний метод проверяет, удалось ли установить блокировку элемента данным объектом СправочникОбъект.

·Для обращения к метаданным у объектов СправочникСсылка и СправочникОбъект существует метод Метаданные, который возвращает объект специального типа для описания метаданного.





Параметр «РежимПроведенияДокумента»:



·Неоперативный (по умолчанию),

·Оперативный.





Параметр «РежимЗаписиДокумента»:

·Запись (по умолчанию),

·ОтменаПроведения,

Проведение (в этом случае имеет смысл указывать второй параметр).



Печать

(ТабДок); //вызывается приведенная выше процедура

ТабДок.Показать();

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

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



Печать


ПередУдалением

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


ПередУдалением


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


ПередУдалением


ПередЗаписью

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


ПередЗаписью


Это событие возникает перед выполнением записи объекта после начала транзакции, но до начала записи документа в базу данных.


ПередЗаписью


Периодичность

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


Периодичность


ПолучитьФормуВыбора

(, ЭтаФорма);

Если НЕ Форма.Открыта() Тогда //если она еще не открыта

Форма.ИмяСохраненияПоложенияОкна = "НоменклатураПодбор";

КонецЕсли;



//установить свойства формы до ее открытия

Форма. РежимВыбора = Истина ;

Форма.ЗакрыватьПриВыборе = Ложь;

Форма. РазрешитьСостояниеПрикрепленное = Истина;



//открыть форму или активизировать уже открытую форму

Форма.Открыть();



Порядок

Строка, задающая условие упорядочивания по реквизиту, например, «Оклад Убыв». Упорядочивание может быть использовано только для индексированных реквизитов (в том числе для кода и наименования).

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



Порядок


Строка, реквизит и направление сортировки выборки документов, например, «Контрагент Возр» или «Оклад Убыв». Может быть указано поле Дата или имя проиндексированного реквизита документа. Если порядок не задан, то выборка упорядочивается по хронологии документов.

Следующий пример выбирает документы по определенному контрагенту за заданный период и сортирует их по убыванию суммы документа ( Для реквизитов Контрагент и СуммаДокумента в конфигураторе установлен флажок «Индексировать»:



Порядок


ПриКопировании

Событие возникает при создании элемента справочника копированием. В обработчике события ПриКопировании можно вмешаться в этот процесс и более интеллектуально заполнить некоторые реквизиты элемента справочника.


ПриКопировании


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

ПриКопировании

ПриУстановкеНовогоКода

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


ПриУстановкеНовогоКода


ПриУстановкеНовогоНомера

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


ПриУстановкеНовогоНомера


ПриЗаписи

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


ПриЗаписи


Программное обеспечение


Windows XP


1С:Бухгалтерия 7.7


Доставка


Windows XP


Инсталляция ПО




Сист. блок ВА410


Сист. блок ВА410


Сист. блок NetVista


Сист. блок NetVista




Произвольная форма

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

Обратите внимание, что в любой экранной форме можно вывести список элементов справочника, поскольку в новой версии 1С:Предприятия экранные формы отделены от объектов конфигурации. Для этого нужно всего лишь расположить в форме элемент управления ТабличноеПоле и в его свойстве ТипЗначения выбрать тип «СправочникСписок.<ИмяСправочника>».



Реквизиты

Реквизиты отчета (обработки) содержат параметры формирования отчета (выполнения обработки). Эти реквизиты отличаются от реквизитов справочников тем, что они не сохраняются в базе данных. Например, реквизиты НачДата и КонДата у отчета АнализПродаж.


Реквизиты


и подчиненный ему справочник РасчетныеСчета

Справочник Контрагенты и подчиненный ему справочник РасчетныеСчета с полями Банк, Номер, КоррСчет.


и подчиненный ему справочник РасчетныеСчета



Справочник Номенклатура и табличная часть ЕдиницыИзмерения с полями ЕдиницаИзмерения и КоэффициентПересчета.


и подчиненный ему справочник РасчетныеСчета



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


и подчиненный ему справочник РасчетныеСчета



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



Режим

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

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


Режим


Родитель

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


Родитель


В базе данных необходимо хранить

В базе данных необходимо хранить список расчетных счетов каждого контрагента. Почти наверняка в платежных документах будет необходимо, кроме контрагента, указывать его расчетный счет. Такая информация имеет четкую объектную природу и может быть идентифицирована как «Расчетный счет».


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


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


Для справочника Сотрудники требуется хранить сведения о составе семьи сотрудника, т.е. вносить информацию о членах семьи и их родственных отношениях к сотруднику (муж, жена, сын, дочь и т.д.). Обычно эта списковая информация полностью подчинена элементу справочника Сотрудники, и возникает мысль о том, чтобы завести табличную часть. Но если подумать, то такая информация имеет четкую объектную природу и может быть идентифицирована как «Член семьи». Для некоторых приложений может потребоваться создавать ссылки на членов семьи сотрудника. Аналогичная ситуация наблюдается со сведениям об образовании и о предыдущих местах работы сотрудника.

СоздатьГруппу

();

НоваяГруппа.Код = 1;

НоваяГруппа.Наименование = "Прочие";

НоваяГруппа.Записать();

НовыйСотрудник = Справочники.Сотрудники.

СоздатьЭлемент

();

НовыйСотрудник.Код = 100;

НовыйСотрудник.Наименование = "Иванов Иван Иванович";

НовыйСотрудник.Родитель = НоваяГруппа.Ссылка;

НовыйСотрудник.Записать();



СправочникиМенеджер

Обеспечивает доступ ко всем справочникам конфигурации. Свойства этого объекта совпадают с именами справочников и содержат объекты типа СправочникМенеджер.


СправочникиМенеджер


СправочникМенеджер

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


СправочникМенеджер


СправочникОбъект

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


СправочникОбъект


СправочникСписок

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

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

СправочникСписок
На схеме показаны не все возможные взаимосвязи.

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






Продемонстрируем на примерах выполнение типичных операций со справочниками.



СправочникСсылка

Данный объект однозначно идентифицирует элемент (группу) справочника и позволяет обращаться к нему в режиме «только чтение». Через свойства и методы этого объекта можно прочитать реквизиты элемента (группы), обратиться к его табличным частям. Значение этого типа хранится в реквизитах, ссылающихся на элементы данного справочника, например, в реквизите Сотрудник документа ПриемНаРаботу хранится ссылка на конкретный элемент справочника Сотрудники.


СправочникСсылка


СправочникВыборка

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


СправочникВыборка


Тип

Здесь выбирается тип значения для номера документа ? числовой или строковый. Выбор строкового типа номера бывает необходим, когда используется сложная система нумерации документов. При этом номер документа может включать, помимо цифр, также буквы и символы-разделители, например «К10-56».


Тип


Только элементы

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

Главное отличие этих двух видов иерархического справочника заключается в следующем:

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

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



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



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

<
table width="100%" cellpadding="0" cellspacing="0">

<

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




table width="100%" cellpadding="0" cellspacing="0"><


table width="100%" cellpadding="0" cellspacing="0">

<


table width="100%" cellpadding="0" cellspacing="0">

Услуги

Инсталляция ПО


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

Синтаксическая диаграмма метода Выбрать и ВыбратьИерархически такова (на примере метода Выбрать):



Выбрать(<Родитель>, <Владелец>, <Отбор>, <Порядок>);



Ниже поясняется назначение каждого параметра:



Услуги


Владелец

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


Владелец


к константам из программы на



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


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



Часто таким образом производится печать документов, например, ниже приведена процедура печати расходной накладной:



к константам из программы на


Разработка в 1С 8.0

ActiveX

Кроме встроенных элементов управления, в 1С:Предприятии 8.0 есть возможность расположить в форме ActiveX-компоненты, написанные на других языках. Из таких компонентов можно назвать Windows Media Player, Microsoft Office Pivot Table и др..





















АвтоКонтекстноеМеню

Если в этом свойстве содержится значение Истина, то для элемента управления будет использовано автоматически сформированное контекстное меню, в противном случае необходимо указать свойство КонтекстноеМеню.


АвтоКонтекстноеМеню


АвтоЗаголовок

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


АвтоЗаголовок


Данные

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


Данные


Диаграмма

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

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


Диаграмма


ИмяСохраненияПоложенияОкна

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


ИмяСохраненияПоложенияОкна


Индикатор

Индикатор показывает ход выполнения длительного процесса. Рекомендуется всегда его использовать во время выполнения процедур, требующих длительного времени. На пользователя это действует благотворно: он видит, что процесс идет, меньше нервничает и не прервет, чего доброго, работу программы. Но всетаки для того, чтобы пользователь мог прервать чрезмерно затянувшийся процесс (или «зависшую» программу), в теле цикла необходимо вызывать процедуру ОбработкаПрерыванияПользователя, подробнее о которой написано в документации.


Индикатор


ИзменениеРазмера

Признак, который разрешает или запрещает изменение размера окна.


ИзменениеРазмера


К центру

правая и левая границы элемента привязываются к центру формы или другого элемента управления;

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

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





К левой границе

элемент целиком перемещается вместе с перемещением левой границы области;


К левой границе


К правой границе

элемент целиком перемещается вместе с перемещением правой границы области;


К правой границе


Как не надо

делать. Для больших динамических списков было бы более рационально спроектировать специальный отчет Остатки с периодическим обновлением.



Любое табличное поле пользователь может вывести в табличный документ для печати или текстовый документ. Это возможно из контекстного меню с помощью пункта «Вывести список». При выводе табличного поля учитываются текущие отбор и сортировка списка. Есть возможность вывести только выделенные строки, а также указать, выводить или нет подчиненные объекты, например, элементы иерархического справочника нижележащих уровней.





Картинка

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

В конфигурации может существовать библиотека картинок, которая располагается в ветви «Общие картинки» в дереве конфигурации. Методику работы с общими картинками можно найти в документации. Здесь отметим, что можно выбирать картинку из файла (поддерживаются все основные графические форматы: bmp, jpg, gif, tif, wmf, ico). Картинки некоторых форматов можно редактировать в специальном Редакторе картинок.


Картинка


Код:

Процедура КонтрагентПриИзменении(Элемент)

Если Не Контрагент.Пустая() Тогда

Если ТипЦен <> Контрагент.ТипЦен Тогда

ТипЦен = Контрагент.ТипЦен;

ПересчетЦен();

КонецЕсли;

КонецЕсли;

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







Процедура ПриОткрытии()

//очищаются все страницы панели со всеми элементами управления,

//после выполнения этого метода

//панель имеет одну страницу и одну закладку

Панель.Страницы.Очистить();



//индекс первой страницы равен 0, изменим для нее имя и заголовок

Панель.Страницы[0]. Имя = "СтраницаОсновные";

Панель.Страницы[0].Заголовок = "Основные";



//добавим вторую страницу, ее индекс будет 1

Панель.Страницы.Добавить("СтраницаКартинка","Картинка",,);



//добавим третью страницу, ее индекс будет 2

Панель.Страницы.Добавить("СтраницаПрочее","Прочее",,);



//сдвигаем третью страницу "Прочее" (с индексом 2)

//на 1 позицию к началу

Панель.Страницы.Сдвинуть(2,-1);



//удалим страницу Прочее

// в метод Удалить может передаваться номер или сама страница Панель Страницы

Удалить(Панель.Страницы["СтраницаПрочее"]);



//для страницы Картинка изменим текст заголовка

//доступ к странице возможен по имени как к свойству коллекции Панель.Страницы.СтраницаКартинка.Заголовок = "Изображение";

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






Процедура СписокПриВыводеСтроки(Элемент,

ОформлениеСтроки, ДанныеСтроки)

//берем текущую валюту из параметра ДанныеСтроки

ТекВалюта = ДанныеСтроки.Ссылка;



//ссылка на регистр сведений

РегКурсы = РегистрыСведений.КурсыВалют;



//ссылка на оформление ячейки Курс

ЯчейкаКурс = ОформлениеСтроки.Ячейки.Курс;



//считываем курс из регистра сведений и выводим в ячейку

Отбор = Новый Структура("Валюта",ТекВалюта);

Курс = РегКурсы.ПолучитьПоследнее(,Отбор).Курс;

ЯчейкаКурс.УстановитьТекст(Курс);

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

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



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



Код:



ПроцедураСписокПриВыводеСтроки(Элемент,ОформлениеСтроки,ДанныеСтроки)

СтруктураОтбора = Новый Структура("Номенклатура");

СтруктураОтбора.Номенклатура = ДанныеСтроки.Ссылка;

РегОстатки = РегистрыНакопления.УчетНоменклатуры;

//считываем остаток из регистра

тзОстатки = РегОстатки.Остатки(,СтруктураОтбора,

"Номенклатура","Количество");

Если тзОстатки.Количество() > 0 Тогда

ОстатокТовара = тзОстатки[0].Количество;

ЯчейкаОстаток = ОформлениеСтроки.Ячейки.Остаток;

ЯчейкаОстаток.ОтображатъТекст = Истина;

ЯчейкаОстаток.Текст = ОстатокТовара;

Если ОстатокТовара < 10 Тогда

ЯчейкаОстаток.ЦветФона = Новый Цвет(255,230,230);

КонецЕсли;

КонецЕсли;

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


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


Кнопка = ЭлементыФормы.КнопкаОК;

Кнопка.ЦветТекстаКнопки = Новый Цвет(100,250,100);//зеленый

Кнопка.ЦветФонаКнопки = Новый Цвет(50,50,50);//серый

Кнопка.Рамка = Новый Рамка (ТипРамкиЭлементаУправления.Двойная,1);

Кнопка.Шрифт = Новый Шрифт (,,Истина,Истина);//жирный и наклонный



//установим также сочетание клавиш Alt-P

Кнопка .СочетаниеКлавиш = Новый СочетаниеКлавиш(Клавиша.Р,Истина);



//назначим процедуру-обработчик события Нажатие

//в модуле должна быть определена

//процедура Сформировать с параметром Элемент

Кнопка.УстановитьДействие("Нажатие",Новый Действие("Сформировать"));

Контекстное меню

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


Контекстное меню


КонтекстноеМеню

Значением свойства является элемент управления типа КоманднаяПанель или одна из его кнопок-подменю.



















Метод ОповеститьОВыборе

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


Метод ОповеститьОВыборе


НачалоВыбора

Событие возникает при нажатии на кнопку выбора у поля ввода или нажатии клавиши F4.


НачалоВыбора


НачалоВыбораИзСписка

Событие возникает при нажатии на кнопку выбора из списка.


НачалоВыбораИзСписка


Например:

ПолеОклад= ЭлементыФормы.ПолеОклад;

ПолеОклад.Видимость = Истина;

ПолеОклад.МаксимальноеЗначение = 10000;

ПолеОклад.МинимальноеЗначение = 500;

ПолеОклад.ОтметкаНезаполненного = Истина;

ПолеОклад.КнопкаОчистки = Истина;

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

Некоторые из этих событий приведены ниже:



Например:


ПроцедураОткрытьФормуПодчиненногоСправочника()

СпрРасчСчета = Справочники.РасчетныеСчета;



//сначала получим основную форму списка справочника

//текущая форма будет являться владельцем для нее

ФормаРС = СпрРасчСчета.ПолучитьФормуСписка(,ЭтаФорма);



//если текущая форма будет закрыта,

//то и дочерние формы тоже закроются

ФормаРС.ЗакрыватьПриЗакрытииВладельца = Истина;



//открыть новую форму или активизировать уже открытую

Если ФормаРС.Открыта() Тогда

ФормаРС.Активизировать();

Иначе

ФормаРС.Открыть();

КонецЕсли;

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

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



Например:


ОбработкаВыбора

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


ОбработкаВыбора


Очистка

Это событие возникает при нажатии кнопки очистки или по комбинации клавиш Shift+F4


Очистка


ОкончаниеВводаТекста

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

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



ОкончаниеВводаТекста


Открытие

Событие возникает при нажатии на кнопку открытия объекта или комбинации клавиш Ctrl-Shift-F4.


Открытие


Палитра свойств

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


Палитра свойств


Панель

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


Панель


Панель «Форматирование»

позволяет редактировать внешний вид элементов управления. Это значительный прогресс по сравнению с версией 7.7, где все свойства настраивались в специальном окне с несколькими закладками. Те же самые свойства можно редактировать напрямую через палитру свойств.Панель «Форматирование» выглядит следующим образом:

Панель «Форматирование»


Панель «Форматирование»


Панель «Элементы управления»

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

Панель «Элементы управления»


Панель «Элементы управления»


Панель «Редактор форм»

позволяет установить порядок обхода элементов управления (по клавише TAB), запустить форму для проверки (Ctrl-R), вызвать конструктор для вставки элемента управления или разместить в форме элементы управления, связанные с реквизитами объекта конфигурации. Ручная настройка порядка обхода доступна, если отключен автоматический порядок обхода. Рекомендуется задавать естественный порядок обхода элементов управления: слева направо сверху вниз. Кнопки панели редактора форм показаны ниже:

Панель «Редактор форм»




Панель «Редактор форм»


Панель «Выравнивание»

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

Панель «Выравнивание»



Панель «Выравнивание»


ПередНачаломИзменения

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

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



ПередНачаломИзменения


ПередОткрытием

Событие возникает перед открытием формы, до показа ее на экране. В обработчике события можно отказаться как от открытия формы, так и от стандартной обработки при открытии объекта.


ПередОткрытием


ПередУдалением

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


ПередУдалением


Поле HTML-документа

Данный элемент управления предназначен для отображения HTML-страниц. Это могут быть как локальные страницы, так и страницы в Интернете. У этого элемента управления есть метод Перейти, который позволяет указать адрес страницы (URL) или HTML-макет, хранящийся в конфигурации.

ЭлементыФормы.ПолеНТМLДокумента.Перейти("http://www.kuban.ru/cgi-bin/forum/forum9.cgi");

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

доступ к HTML-документу как к СОМ-объекту, для чего предназначено свойство Документ.


Поле HTML-документа


Поле календаря

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


Поле календаря


Поле текстового документа

Поле текстового документа позволяет отобразить и редактировать в форме произвольный текст. Для этого элемента управления можно задать свойство «Расширение» из следующих возможных вариантов: HTML, встроенный язык и язык запросов. Тогда при отображении текста будут применены характерная цветовая палитра и другие встроенные возможности для данного содержимого. Например, для языка запросов будут выделяться ключевые слова ВЫБРАТЬ, ИЗ, ГДЕ и т.д., а из контекстного меню можно будет вызвать Конструктор запросов.


Поле текстового документа


Полоса регулирования

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


Полоса регулирования


ПоложениеПрикрепленногоОкна

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


ПоложениеПрикрепленногоОкна


ПриАктивизацииСтроки

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


ПриАктивизацииСтроки


ПриИзменении

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


ПриИзменении


ПриИзмененииФлажка

Возникает при изменении пометки строки поля списка.

















ПриОткрытии

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


ПриОткрытии


ПриПовторномОткрытии

Событие возникает при открытии уже открытой формы. При активизации открытой формы данное событие не возникает.

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



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



ВыбДок = ПолучитьОбщуюФорму("ВыборОснования").ОткрытьМодально();



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



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



ПриВыводеСтроки

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


ПриВыводеСтроки


Пропорционально

при изменении размеров области размеры элемента изменяются так, что соотношение расстояний от правой границы элемента до левой и правой границы области остается постоянным;


Пропорционально


Пунктирная стрелка

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


Пунктирная стрелка


Рамка

Рамка

Рамка предназначена для визуальной группировки логически связанных элементов управления. Для рамки можно установить заголовок, цвет текста, тип и цвет рамки. Эти свойства можно также устанавливать программно. Рамка может также использоваться в качестве линии, что можно задать в ее свойстве «Рамка».



Рамка


Растягивать

при горизонтальном изменении размеров области ширина элемента изменяется так, что расстояние до границ области остается постоянным;


Растягивать


Разделитель

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


Разделитель


Регулирование

Данное событие возникает при нажатии на одну из кнопок регулирования (увеличения или уменьшения значения).


Регулирование


Режим редактирования привязок границ

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


Режим редактирования привязок границ


С помощью мыши

можно размещать элементы управления в форме, передвигать их и изменять их размер.

























Ширина, Высота

Эти свойства определяют ширину и высоту формы в пунктах (логических единицах).


Ширина, Высота


Синие стрелки

идут от элементов управления.

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

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

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



Синие стрелки


Событие ОбработкаВыбора

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





Соединяемое Окно

Разрешает или запрещает соединение данного окна с другими свободными окнами.


Соединяемое Окно


СостояниеОкна

Определяет текущее состояние окна: обычное, прикрепленное свободное или прячущееся. Различные состояния окна могут быть разрешены или запрещены.


СостояниеОкна


Сплошная стрелка

это жесткая привязка к границе. При изменении размеров формы расстояние до границы всегда сохраняется.


Сплошная стрелка


Стиль

Определяет стиль отображения формы.

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



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



Стиль


Свойство МножественныйВыбор

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


Свойство МножественныйВыбор


Свойство НачальноеЗначениеВыбора

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


Свойство НачальноеЗначениеВыбора


Свойство РежимВыбора

определяет поведение формы при выборе элемента из главного списка формы, т.е. списка, связанного с ее основным реквизитом. Если оно установлено в значение Истина, то форма работает в режиме выбора, иначе ? в обычном режиме.


Свойство РежимВыбора


Свойство ЗакрыватьПриВыборе

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


Свойство ЗакрыватьПриВыборе


ТипЗначения

Это свойство описывает допустимые типы значений для элемента управления.


ТипЗначения


можно программно управлять страницами

В 1С: Предприятии 8. 0 можно программно управлять страницами панели, добавляя или удаляя их, изменять порядок их следования и т.д. В следующем примере на панель формы добавляются страницы, а затем меняется их порядок.
table width="100%" cellpadding="0" cellspacing="0">

<

Разработчик может доверить формирование контекстного меню системе (свойство АвтоКонтекстноеМеню) или использовать в качестве контекстного меню командную панель или ее кнопку-подменю.




table width="100%" cellpadding="0" cellspacing="0"><


table width="100%" cellpadding="0" cellspacing="0">

<


table width="100%" cellpadding="0" cellspacing="0">

Выбор

Возникает при двойном щелчке мыши или нажатии клавиши Enter на ячейке табличного поля.


Выбор


ВыборЗначения

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


ВыборЗначения


Заголовок

Содержит текст заголовка формы. Обратите внимание, что это свойство, а не метод, как было в версии 7.7.


Заголовок


Разработка в 1С 8.0

Доход



Иванов

2003

Январь

15000

Иванов

2003

Февраль

14000

Петров

2003

Январь

15000

Петров

2003

Февраль

12000


В следующем примере эта таблица сворачивается по колонкам Сотрудник и Год с подсчетом суммы по колонке Доход:



//подсчитаем годовой доход по каждому сотруднику

тзДоходыСотр.Свернуть("Сотрудник,Год","Доход");



В результате мы получим следующую таблицу значений:



Доход


Иванов

2003

29000

Петров

2003

27000

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



тзДоходыПоГодам = тзДоходыСотр.Скопировать();

тзДоходыПоГодам.Свернуть("Сотрудник,Год","Доход");



Таблица значений позволяет подсчитать итог по колонке числового типа, например:



ВсегоДоход = тзДоходыСотр.Итог("Доход");

ВсегоНДС = тзСостав.Итог("НДС");



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



МассивЦен = тзТовары. ВыгрузитьКолонку ("Цена") ;

тзТовары.ЗагрузитьКолонку("Количество",МассивОстаткиТоваров);



Код:

Маc= Новый Массив; //одномерный массив без элементов

Мас2 = Новый Массив(10); //одномерный массив из 10 элементов

Мас3 = Новый Массив(4,5); //массив с двумя измерениями

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



Код:


Маc = Новый Массив; //одномерный массив без элементов

Маc.Добавить("Иванов"); //элемент будет иметь индекс 0

Маc.Добавить("Петров"); //индекс 1

Маc.Добавить("Сидоров"); //индекс 2



//после вставки нового элемента Иванов и Петров будут сдвинуты ниже

Мас2.Вставить(0,"Сидоров");



//удаляем Сидорова (Иванов и Петров сдвигаются обратно)

Мас2.Удалить(0);

Мас2 = Новый Массив(4,5); //массив с двумя измерениями

Мас2[0][0] = "Иванов";

Мас2[0][1] = "Петров";



//после вставки нового элемента Иванов и Петров будут сдвинуты ниже

Мас2[0].Вставить(0,"Сидоров");



//следующий элемент будет относиться ко 2-му измерению

//и будет являться 6-м (индекс = 5)

//при создании массива во 2-м измерении

//было создано 5 элементов, имеющих значение Неопределено

Мас2[1].Добавить("Петров");

Перебор элементов массива возможен с использованием операто-ра [...] или цикла «Для Каждого»:



Код:



//1-йвариант

Для Каждого эл Из Мас Цикл

Сообщить(эл);

КонецЦикла;

//2-й вариант

Для н = 0 По Мас.ВГраница() Цикл

Сообщить(Мас[н]);

КонецЦикла;

У объекта Массив есть следующие методы:



Код:



Отбор= Новый Структура("Цена", 100);

Выборка = Справочники.Номенклатура . Выбрать (,Отбор);

Структуры можно использовать для передачи списка параметров (в версии 7.7 для этой цели часто применялся список значений и его методы Установить и Получить):



Код:



Параметры = Новый Структура("ДатаНач,ДатаКон");

Параметры.ДатаНач = ВыбДата;

Параметры.ДатаКон = ДобавитьМесяц(ВыбДата,1);

Если ВыбТипОтчета <> 0 Тогда

Параметры.Вставить("ТипОтчета",ВыбТипОтчета);

КонецЕсли;

глСформироватьОбороты(Параметры);

Можно перебрать элементы структуры или соответствия с помощью конструкции «Для Каждого». Каждый элемент коллекции является объектом специального типа КлючИЗначение:



Код:



ДляКаждого парам Из Параметры Цикл

ИмяПараметра = парам.Ключ;

Значение = парам.Значение;

КонецЦикла;

Для структуры можно обращаться к элементам коллекции через точку, поскольку ключи являются свойствами структуры:



Код:



НачДата = парам.ДатаНач;

КонДата = парам.ДатаКон;

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



Код:



ТоварАналог = соотвАналоги[Товар].Значение;






сзСотр= Новый СписокЗначений;

Ниже демонстрируются приемы добавления и удаления элементов списка значений:



Код:



сзСотр. Очистить(); //удалим все элементы



//У следующего элемента индекс 0, представление "Иванов Иван"

сзСотр.Добавить("Иванов","Иванов Иван");



//У следующего элемента будет индекс 1, представление "Петров Петр"

//и установлена пометка

сзСотр.Добавить("Петров","Петров Петр", Истина);



сзСотр.Удалить(1); //удалить 2-й элемент, т.е. Петрова

сзСотр.Вставить(0,"Сидоров"); //Иванов сдвигается ниже

сзСотр.Сдвинуть(1,-1); //сдвинем Иванова обратно к началу

Обращение к элементу списка значений производится по индексу через оператор [...] или с помощью метода Получить,



Код:



//1-й вариант

Для Каждого эл Из сзСотр Цикл

Сообщить(Эл.Значение);

КонецЦикла;



//2-й вариант

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

Сообщить(сзСотр[н].Значение);

КонецЦикла;

В списке значений можно искать заданное значение:



Код:



НайденныйЭлементСписка= сзСотр.НайтиПоЗначению("Иванов");

Если НайденныйЭлементСписка <> Неопределено Тогда

Сообщить("Элемент найден!");

КонецЕсли;

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



Код:



сзСотр = Новый СписокЗначений;

сзСотр.Добавить("Иванов",,Истина);//пометка установлена

сзСотр.Добавить("Петров");//пометка не установлена

сзСотр.Добавить("Сидоров");//пометка не установлена



ВыборПроизведен = сзСотр.ОтметитьЭлементы("Укажите сотрудников");



Если ВыборПроизведен Тогда

Для Каждого эл Из сзСотр Цикл

Если эл.Пометка Тогда

Сообщить("Отмечен сотрудник " + эл.Значение);

КонецЕсли;

КонецЦикла;

КонецЕсли;

Методы ВыбратьЭлемент и ОтметитьЭлементы открывают диалоговое окно для пользователя, в котором он может выбрать один элемент или расставить пометки, тем самым выбрав несколько элементов.



Элементы списка значений могут быть легко отсортированы по значению или по представлению:



Код:



сзСотр.СортироватьПоЗначению(НаправлениеСортировки.Возр);

сзСотр.СортироватьПоПредставлению(НаправлениеСортировки.Убыв);

В список значений можно загрузить значения из массива и выгрузить значения в массив, например:



Код:



мас = Новый Массив;

мас.Добавить("Иванов");

мас.Добавить("Якушин");

мас.Добавить("Сидоров"};



сзСотр.ЗагрузитьЗначения(мас);

сзСотр.СортироватьПоЗначению();

мас2 = сзСотр.ВыгрузитьЗначения();

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






тзТовары= Новый ТаблицаЗначений;

тзТовары.Колонки.Добавить("Ссылка");

тзТовары.Колонки.Добавить("Наименование");

тзТовары.Колонки.Добавить("Цена");

тзТовары.Колонки.Добавить("Количество");

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



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



Код:



Функция СоздатьОписаниеТипов(НазваниеТипа,Длина,Точность="")

мас = Новый Массив;

мас.Добавить(Тип(НазваниеТипа));

Если Точность = "" Тогда

КвалифСтроки = Новый КвалификаторыСтроки(Длина,

ДопустимаяДлина.Переменная);

Иначе

КвалифЧисла = Новый КвалификаторыЧисла(ДопустимыйЗнак.Любой,

Длина,Точность);

КонецЕсли;

Возврат Новый ОписаниеТипов(мас,КвалифСтроки,КвалифЧисла);

КонецФункции



тзТовары = Новый ТаблицаЗначений;

ТипКолСсылка=СоздатьОписаниеТипов("СправочникСписок.Номенклатура");

тзТовары.Колонки.Добавить("Ссылка", ТипКолСсылка,"Товар",5);

ТипКолНаим=СоздатьОписаниеТипов("Строка",50);

тзТовары.Колонки.Добавить("Наименование", ТипКолНаим);

ТипКолЦена = СоздатьОписаниеТипов("Строка",15,2);

тзТовары.Колонки.Добавить("Цена", ТипКолЦена, "Цена",15);

ТипКолКолич = СоздатьОписаниеТипов("Строка",15,4);

тзТовары.Колонки.Добавить("Количество",ТипКолКолич,"Кол-во",15);

При работе со строками таблицы значений необходимо понимать, что строка ? это объект типа СтрокаТаблицыЗначений. Поэтому добавление строк в таблицу значений производится следующим образом:



Код:



//удаляемвсе строки из таблицы (колонки остаются)

тзТовары.Очистить();

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

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




тзТовары.Колонки.Очистить();

По индексу можно удалить строку:



Код:



тзТовары.Удалить(0);//удалить 1-ю строку с индексом 0

тзТовары.Удалить(1); //удалить 2-ю строку с индексом 1

Перебор строк таблицы значений обычно реализуется с помощью конструкции «Для Каждого», при этом в переменной цикла будет содержаться не номер строки, а вся строка целиком как объект СтрокаТаблицыЗначений:



Код:



Для Каждого стр Из тзТовары Цикл

Сообщить(стр.Наименование);

Сообщить(стр.Цена);

КонецЦикла;

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



Код:



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

Сообщить(тзТовары[н].Наименование);

Сообщить(тзТовары[н].Цена);

КонецЦикла;

Часто возникает необходимость найти значение в таблице значений. Для решения этой задачи предназначены методы Найти и НайтиСтроки. В метод Найти передается искомое значение и список колонок, которые нужно просматривать. Если значение найдено, то возвращается строка таблицы значений, иначе ? значение Неопределено.



Код:



НайденнаяСтрока = тзТовары.Найти(100,"Цена");

Если НайденнаяСтрока <> Неопределено Тогда

Сообщить("Товар с такой ценой найден! " + НайденнаяСтрока.Наименование);

КонецЕсли;

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



Код:



Отбор= Новый Структура("Цена",100);

МассивСтрок = тзТовары.НайтиСтроки(Отбор);

Сообщить("Найдено " + МассивСтрок.Количество() + " товаров с такой ценой");

Код:


тзТовары.Сортировать("НаименованиеВозр");

тзТовары.Сортировать("Цена Убыв");

тзТовары.Сортировать("Цена Убыв, Наименование Возр"););

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



Код:



Свернуть(<Колонки группировок>, <Колонки суммирования>)

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

Код:


дзОтделы= Новый ДеревоЗначений;

дзОтделы.Колонки.Добавить("Отдел");

дзОтделы.Колонки.Добавить("Руководитель");

Нов = дзОтделы.Строки.Добавить(); //индекс 0

Нов.Отдел = "Бухгалтерия";

Нов = дзОтделы.Строки.Добавить(); //индекс 1

Нов.Отдел = "Руководство";



//детализируем отдел "Бухгалтерия"

Нов = дзОтделы.Строки[0] .Строки.Добавить();

Нов.Отдел = "Расчет зарплаты";

Нов = дзОтделы.Строки[0].Строки.Добавить();

Нов.Отдел = "Основные средства";



//детализируем руководство

Нов = дзОтделы.Строки[1] .Строки.Добавить();

Нов.Отдел = "Высшее руководство";

Нов = дзОтделы.Строки[1].Строки.Добавить();

Нов.Отдел = "Отдел маркетинга";

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



Код:



НоваяОргСтруктура = ДзОтделы.Скопировать();

Обход строк реализуется с помощью конструкции «Для Каждого» или оператором [...]:



Код:



//1-йвариант: обход строк 1-го уровня

Для Каждого стр Из дзОтделы Цикл

Сообщить(стр.Отдел);

КснецЦикла;



//2-й вариант (индексация строк начинается с 0)

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

стр = дзОтделы.Строки[н];

Сообщить(стр);

КснецЦикла;

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



Код:



Процедура ПоказатьПодчиненные (СтрокаДерева,Уровень=0)

Для Каждого стр Из СтрокаДерева.Строки Цикл

отступ = "";

Для н = 1 По Уровень Цикл

отступ = отступ + " ";

КонецЦикла;

Сообщить(отступ + стр.Отдел);

ПоказатьПодчиненные(стр,Уровень+1);

КонецЦикла;

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



ПоказатьПодчиненные(дзОтделы);



Результат работы программы:



Бухгалтерия

Расчет зарплаты

Основные средства

Руководство

Высшее руководство

Отдел маркетинга


Аналогично таблице значений, дерево значений позволяет искать значение с помощью метода Найти или искать сразу несколько строк методом НайтиСтроки. Принципы работы этих методов полностью идентичны рассмотренным выше для таблицы значений, за исключением последнего параметра ВключатьПодчиненные. Если передать в него значение Истина, то поиск будет производиться в том числе и по подчиненным строкам, иначе ?только по строкам текущего уровня.





Например:

Найдено= парам.Свойство("ТипОтчета",ВыбТипОтчета);

Если Найдено Тогда

СформироватьПользовательскийОтчет(ВыбТипОтчета);

Иначе

СформироватьОтчетПоУмолчанию();

КонецЕсли;

У соответствия нет метода Свойство и обращение производится с помощью оператора [...] или метода Получить:



Например:


сзСотр[0].Значение= "Кузнецов";

Перебор элементов списка значений производится следующим образом:



Например:


Очистить

Удаляет все значения из массива.

В 1С:Предприятии 8.0 в массив можно загружать данные или выгружать данные из него в другие коллекции значений. Это реализуется с помощью соответствующих методов других коллекций значений. Например, объект СписокЗначений имеет методы ВыгрузитьЗначения и ЗагрузитьЗначения, которые работают с массивом. Аналогично действуют методы ВыгрузитьКолонку и ЗагрузитьКолонку объекта ТаблицаЗначений.





Удалить

Удаляет значение из массива по указанному индексу.


Удалить


ВГраница

Возвращает наибольший индекс в массиве, равный количе-ство элементов минус 1. Если количество элементов массива равно 0, возвращается -1 (минус единица).


ВГраница


Вставить

Вставляет значение в массив по указанному индексу.


Вставить


Разработка в 1С 8.0

Автоупорядочивание /AUTOORDER

Ключевое слово АВТОУПОРЯДОЧИВАНИЕ позволяет включить режим автоматического формирования полей для упорядочивания результата запроса. Оно часто используется при построении отчетов.

Автоупорядочивание работает по следующим правилам:

·Если в запросе было указано предложение УПОРЯДОЧИТЬ ПО, то каждая ссылка на таблицу, находящаяся в этом предложении, будет заменена полями, по которым по умолчанию сортируется таблица (для справочников это код или наименование, для документов ? дата документа). Если поле для упорядочивания ссылается на иерархический справочник, то будет применена иерархическая сортировка по этому справочнику.



·Если в запросе отсутствует предложение УПОРЯДОЧИТЬ ПО, но есть предложение ИТОГИ, тогда результат запроса будет упорядочен по полям, присутствующим в предложении ИТОГИ после ключевого слова ПО, в той же последовательности и в случае, если итоги рассчитывались по ссылочным полям, то по полям сортировки по умолчанию таблиц, на которые были ссылки.



·Если в запросе отсутствуют предложения УПОРЯДОЧИТЬ ПО и ИТОГИ, но есть предложение СГРУППИРОВАТЬ ПО, тогда результат запроса будет упорядочен по полям, присутствующим в предложении, в той же последовательности и в случае если группировка велась по ссылочным полям, то по полям сортировки по умолчанию таблиц, на которые были ссылки.



·И наконец, если в запросе отсутствуют предложения УПОРЯДОЧИТЬ ПО, ИТОГИ и СГРУППИРОВАТЬ ПО, результат будет упорядочен по полям сортировки по умолчанию для таблиц, из которых выбираются данные, в порядке их появления в запросе.



ЧАС (<дата>)



Выделяет часы из даты (от 0 до 23).



ДеньГода (<дата>)

Определяет номер дня в году по дате (от 1 до 366).



ДеньНедели (<дата>)



Определяет номер дня недели по дате (от 1 до 7).



Диапазон

Брюки детские

100

100 - 1000

Рубашка «Ковбойка»

1050

1000 и выше

Одежда



Это группа

Джинсы женские

1100

1000 и выше

Свитер детский

0

Не задана

Сантехника

Это группа

Бытовая техника

Это группа

Раковина «Лилия»

0

Не задана

Мойдодыр «Аквариум»

0

Не задана

Смеситель «Ультра»

750

100 - 1000






ДЛЯ ИЗМЕНЕНИЯ

РегистрНакопления.УчетНоменклатуры.Остатки

Необходимо понимать, что в транзакции любые данные защищены от изменения другими пользователями. Опция же ДЛЯ ИЗМЕНЕНИЯ нужна для блокировки от транзакционного чтения. Ее используют, чтобы как можно раньше сказать системе, что данная таблица должна быть заблокирована от чтения. При работе в клиент-серверном варианте блокировка накладывается только на записи, которые задействованы в запросе. Использование данного ключевого слова позволяет в момент обращения к запросу поставить одного из двух конкурирующих пользователей в состояние ожидания, пока другой проведет свой документ. Проще говоря, если не использовать данное ключевое слово, то два пользователя прочитают, что товар есть на складе, и как минимум один из них не сможет провести документ. А если применить ДЛЯ ИЗМЕНЕНИЯ, то в момент чтения данных (выполнения запроса) тот, кто позже начал, будет ждать, пока данные освободятся. Поэтому запрос с этим ключевым словом обычно ставят как можно раньше в процедуре проведения документа, чтобы уменьшить количество бесполезных действий.





Дополнительно

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


Дополнительно


Другие полезные методы

При работе с выборкой из результата запроса будут полезны следующие методы:

Единица измерения

Бумага

130

Пачка

Вилы

1000

Шт

Грабли

1500

Шт


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

Ниже приведен пример того же запроса без ключевого слова КАК:

ВЫБРАТЬ Наименование Товар, Цена, ЕдИзм ЕдиницаИзмерения

ИЗ Справочник.Товары

УПОРЯДОЧИТЬ ПО Товар


Единица измерения


Год

Иванов Иван Иванович

25.12.2003

Ив

25

12

2003

Петров Петр Петрович

05.07.2000

Пе

5

7

2000

Сидоров Иван Николаевич

15.12.1995

Си

15

12

1995






ГОД (<дата>)

Выделяет год из даты. Возвращает число от 1 до 9999.



Группа



1С: Бухгалтерия 7.7

35

Программы

Клавиатура PS/2

3

Клавиатуры

Монитор 15" LG

134,5

Мониторы

Мышь 2-кноп PS/2

1,2

Мыши

Мышь М -S48

0,8

Мыши


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

Следующий запрос эквивалентен предыдущему и использует разыменование полей:

ВЫБРАТЬ Номенклатура,

Номенклатура.ЗакупочнаяЦена КАК Цена,

Номенклатура.Родитель КАК Группа

ИЗ Документ.РасходнаяНакладная.Состав

Возможность разыменования полей в 1С:Предприятии 8.0 допускает обращение к свойствам объектов через несколько точек, например, «Номенклатура.Поставщик.Страна». Это позволяет значительно упростить написание запросов.

Рассмотренное соединение относится к классу внутренних. В языке запросов системы 1С:Предприятие 8.0 существует возможность внешних соединений, которые могут быть левыми (LEFT OUTER), правыми (RIGHT OUTER) и полными (FULL OUTER).


Группа


Группировка

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


Группировка


Возвращает в виде строки имя группировки текущей записи. Если группировки нет, возвращается пустая строка.

Иерархический обход

Рассмотрим другой способ обхода результата запроса ? иерархический. При данном варианте обходятся только записи, находящиеся на одном уровне. Для получения иерархической выборки из результата необходимо вызвать метод Выбрать объекта РезультатЗапроса с параметром ОбходРезультатаЗапроса.ПоГруппировкамСИерархией:



СпособВыборки = ОбходРезультатаЗапроса.ПоГруппировкамСИерархией;

Выборка = РезультатЗапроса.Выбрать(СпособВыборки);



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



Иерархический обход


Используется язык программирования:

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

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

Если Выборка.Оклад > 10000 Тогда

Сообщить(Выборка.Наименование + " имеет оклад " + Выборка.Оклад);

КонецЕсли;

КонецЦикла;


Используется язык программирования:


Используется механизм запросов:

Запрос = Новый Запрос("

| ВЫБРАТЬ * ИЗ Справочник.Сотрудники

| ГДЕ Оклад > 10000");

Выборка = Запрос.Выполнить().Выбрать();

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

Сообщить(Выборка.Наименование + " имеет оклад " + Выборка.Оклад);

КонецЦикла;

Обратите внимание на особенности второго варианта с использованием запроса:



·внутри цикла не нужно фильтровать записи, поскольку запрос выполнил всю работу за нас;

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



В клиент-серверном варианте работы 1С: Предприятия 8.0 запросы будут транслироваться в SQL для выполнения в среде MS SQL Server. Сервер баз данных предпримет необходимые действия для оптимизации запроса.



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



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



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



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

<
table width="100%" cellpadding="0" cellspacing="0"><


table width="100%" cellpadding="0" cellspacing="0">

<


table width="100%" cellpadding="0" cellspacing="0">

Итоги по группировкам

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


Итоги по группировкам


Итоги по иерархии

Если группировочное поле является ссылкой на справочник, то для расчета итогов по группам справочника (или родительским элементам, если справочник состоит из одних элементов) необходимо указать ключевое слово ИЕРАРХИЯ. В этом случае в результат будут добавлены записи с итогами для уровней иерархии справочника.

Например, выберем записи справочника Номенклатура, рассчитаем объем продаж по каждой позиции и по группам справочника:


Итоги по иерархии


На этой закладке определяется, по

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


На этой закладке определяется, по


Клавиатуры



Клавиатура LK-601 КВ-2000 PS/2

Расходная накладная 00032 от 25.07.2002 12:00:00

Клавиатура LK-601 KB-2000 PS/2

Расходная накладная 00011 от 10.05.2002 12:00:00

Клавиатура LK-601 KB-2000 PS/2

Расходная накладная 00020 от 02.08.2002 10:44:45



Ключевое слово МЕЖДУ / BETWEEN

В языке запросов есть вспомогательное ключевое слово МЕЖДУ для задания интервалов. Например, если параметр МинЦена равен 1000, а МаксЦена ? 1500, тогда следующий запрос выберет товары с ценой из указанного интервала:



ВЫБРАТЬ Наименование,

ЗакупочнаяЦена КАК Цена

ИЗ Справочник.Номенклатура

ГДЕ ЗакупочнаяЦена МЕЖДУ &МинЦена И &МаксЦена






Ключевое слово ПЕРВЫЕ / ТОР

Данное ключевое слово позволяет ограничить выборку несколькими первыми записями. Часто это ключевое слово применяется в комбинации с сортировкой (см. предложение УПОРЯДОЧИТЬ ПО).

Допустим, требуется выбрать 3 самых дорогих товара. Это реализуется следующим запросом:



ВЫБРАТЬ ПЕРВЫЕ 3 Наименование, Цена

ИЗ Справочник.Номенклатура

УПОРЯДОЧИТЬ ПО Цена УБЫВ

Результат запроса будет такой:


Ключевое слово ПЕРВЫЕ / ТОР


Ключевое слово РАЗЛИЧНЫЕ/DISTINCT

Ключевое слово РАЗЛИЧНЫЕ позволяет оставить в результате запроса только отличающиеся строки. Например, если мы выбираем контрагентов из документа РасходнаяНакладная, то вполне вероятно, что один и тот же контрагент, может встретиться в нескольких накладных, поэтому без ключевого слова РАЗЛИЧНЫЕ он будет присутствовать в результате запроса несколько раз. Например, в результате приведенного ниже запроса несколько раз встречается контрагент ООО «Новый мир»:

ВЫБРАТЬ Контрагент ИЗ Документ.РасходнаяНакладная


Ключевое слово РАЗЛИЧНЫЕ/DISTINCT


Код:

//создание объекта Запрос

Запрос = Новый Запрос("

|ВЫБРАТЬ Код, Наименование

|ИЗ Справочник.Номенклатура");



//выполнение запроса и получение результата

РезультатЗапроса = Запрос .Выполнить();



//получение выборки из результата запроса

Выборка = РезультатЗапроса.Выбрать();



//обход записей в выборке

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



//обращение к полям

Сообщить(Выборка.Наименование);

КонецЦикла;

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





ВЫБРАТЬНаименование, ДатаПриема

ПОДСТРОКА(Наименование,1,2) КАК Сокращение,

ДЕНЬ(ДатаПриема) КАК Число,

МЕСЯЦ(ДатаПриема) КАК Месяц,

ГОД(ДатаПриема) КАК Год

ИЗ Справочник.Сотрудники


Код:



ВЫБРАТЬ

Наименование,

ЗакупочнаяЦена КАК Цена,

ВЫБОР

Когда ЭтоГруппа = Истина Тогда "Это группа"

Когда ЗакупочнаяЦена >= 1000 Тогда "1000 и выше"

Когда ЗакупочнаяЦена >= 100 Тогда "100 - 1000"

Когда ЗакупочнаяЦена >= 10 Тогда "10 - 100"

Когда ЗакупочнаяЦена > 0 Тогда "0 - 10"

Иначе "Не задана"

КОНЕЦ КАК Диапазон



ИЗ Справочник.Номенклатура


Код:



Запрос= Новый Запрос("ВЫБРАТЬ * ИЗ Документ.ПриходнаяНакладная

|ГДЕ Дата МЕЖДУ &НачДата и &КонДата");



Запрос.УстановитьПараметр("НачДата",ВыбНачалоПериода);

Запрос.УстановитьПараметр("КонДата",ВыбКонецПериода);



Результат = Запрос.Выполнить();

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



Группы справочника и список значений часто применяются с ключевым словом В. Если передается группа справочника (или родительский элемент для справочников из одних элементов), то можно применить конструкцию В ИЕРАРХИИ.



Например, покажем цены на товары из указанного списка:



Код:



//1-й пример: отбор по списку товаров

Запрос = Новый Запрос("

|ВЫБРАТЬ * ИЗ Справочник.Номенклатура

|ГДЕ Ссылка В &СписокТоваров");



Запрос.УстановитьПараметр("СписокТоваров",СписокВыбранныхТоваров);



//2-й пример: отбор по группе товаров

Запрос = Новый Запрос("

| ВЫБРАТЬ * ИЗ Справочник.Номенклатура

| ГДЕ Ссылка В ИЕРАРХИИ &ГруппаТоваров");

Запрос.УстановитьПараметр("ГруппаТоваров",ВыбГруппа);


ВЫБРАТЬ

Док.Номенклатура,Док.Номенклатура.Услуга КАК Услуга,

Док.Номенклатура.ЗакупочнаяЦена КАК ЗакупочнаяЦена,

Док.Количество, Док.Сумма,

ОстаткиСкл.КоличествоОстаток КАК КоличествоСкл,

Остатки.КоличествоОстаток, Остатки.СуммаОстаток

ИЗ

Документ.РасходнаяНакладная.Состав КАК Док

ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ

РегистрНакопления.УчетНоменклатуры.Остатки(,

Номенклатура В (&ПарНоменклатура) И

Склад = &ПарСклад) КАК ОстаткиСкл

ПО

Док.Номенклатура = ОстаткиСкл.Номенклатура

ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ

РегистрНакопления.СтоимостнойУчетНоменклатуры.Остатки(&Момент,

Номенклатура В (&ПарНоменклатура)) КАК Остатки

ПО Док.Номенклатура = Остатки.Номенклатура

ГДЕ Док.Ссылка = &Ссылка

Количество



00001

Мышь LOGITECH M-S48 PS/2

10

00001

Мышь ОК-720 Mouse A4Tech PS/2

2

00002

1C: Аспект 7.7

1

00003

Windows XP Home Edition

1

00003

Доставка

13

00003

Инсталляция ПО

2



Количество





1500000

6000

17000

9000

30


Рассмотрим более подробно функцию КОЛИЧЕСТВО / COUNT. Эта функция подсчитывает количество значений параметра, попавших в выборку.



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

·Позволяет узнать количество строк в результате запроса. Для этого в качестве параметра функции надо указать звездочку («*»). Это наиболее часто встречающийся вариант использования функции КОЛИЧЕСТВО. Даже если в строке все поля содержат NULL, то такая строка тоже будет посчитана.

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

·Позволяет узнать количество различных значений указанного поля. Для этого перед спецификацией поля надо указать ключевое слово РАЗЛИЧНЫЕ / DISTINCT, при этом NULL-значения игнорируются.



Например, с помощью функции КОЛИЧЕСТВО можно ответить на следующие вопросы:



·Сколько сотрудников, у которых оклад больше заданной величины?

ВЫБРАТЬ КОЛИЧЕСТВО(*) КАК Количество

ИЗ Справочник.Сотрудники

ГДЕ Оклад > &ВыбОклад



·Сколько различных клиентов купили хоть что-нибудь за заданный период?

ВЫБРАТЬ КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Контрагент) КАК Количество

ИЗ Документ.РасходнаяНакладная

ГДЕ Дата МЕЖДУ &НачДата И &КонДата






1

Смеситель

Маг. «Гигант»

14

2

Смеситель

Маг. «Хозяйка»

1

3

Смеситель

Мосгорторг

5

4

Кран

Маг. «Гигант»

44

5

Кран

Маг. «Хозяйка»

8

6

Кран

Мосгорторг

10

7

Кран

Мосгорторг

22

8

Стол

Маг. «Гигант»

10

9

Стол

Маг. «Мебель»

15

10

Стол

Мосгорторг

1

11

Стул

Маг. «Гигант»

32

12

Стул

Маг. «Мебель»

55

13

Стул

Маг. «Хозяйка»

5

14

Стул

Мосгорторг

16


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



Количество


КОЛИЧЕСТВО (COUNT)

Подсчитывает количество значений, содержащихся в столбце. Если в качестве параметра данной функции передать звездочку («*»), то функция подсчитает количество строк в таблице результата запроса.

Ниже приведен пример запроса с несколькими агрегатными функциями:



КОЛИЧЕСТВО (COUNT)


КоличествоЧеловек

Бухгалтерия

30000

6000

16000

10000

9

Маркетинг

40000

6500

15000

11000

7

Снабжение

30000

7000

12000

9000

8

Руководство

50000

9000

17000

14000

6



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



КоличествоЧеловек


Консоль запросов





Для системы 1С:Предприятие 8.0 была создана удобная обработка «Консоль запросов», которая поставляется на дисках информационнотехнологического сопровождения (ИТС). Эта обработка позволяет в режиме запуска «Предприятие» написать текст на языке запросов и тут же получить результат.



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



Для написания текста запроса можно задействовать Конструктор запросов, описанный выше. Для этого достаточно щелкнуть правой кнопкой на текстовом поле, в которое вводится запрос, и выбрать пункт «Конструктор запросов».





Конструкция СОЕДИНЕНИЕ...ПО/JOIN...ON

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

ВЫБРАТЬДок.Номенклатура,

Спр.ЗакупочнаяЦена КАК Цена,

Спр.Родитель КАК Группа

ИЗ Документ.РасходнаяНакладная.Состав КАК Док

СОЕДИНЕНИЕ Справочник. Номенклатура КАК Спр

ПО Док.Номенклатура = Спр.Ссылка

Результат этого запроса показан ниже:




Контрагент

ООО Новый мир

ЗАО Стройметмаш

ООО Новый мир

ООО Механика


Если же указать ключевое слово РАЗЛИЧНЫЕ, то повторяющиеся записи из результата запроса будут удалены:

ВЫБРАТЬ РАЗЛИЧНЫЕ Контрагент ИЗ Документ. РасходнаяНакладная


Контрагент


ООО Новый мир

ЗАО Стройметмаш

ООО Механика



Контрагент


Куплено



Автохозяйство №34

10 698,6

Алекс-2002

76 519,2

Завод РТИ

15 007,9

Магазин на ул. Алексеева

63 525,1

Эльбрус

31 084,7


Обратите внимание, что ключевое слово ГДЕ применяется здесь только для отбора записей за нужный период. Затем данные группируются по контрагенту с подсчетом суммы проданных товаров, и к получившимся строкам применяется условие ИМЕЮЩИЕ.



Курс

EUR

30,8717

GBR



USD

31,4568

Рубль

1



Курс


КВАРТАЛ (<дата>)

Определяет номер квартала по дате (от 1 до 4).



ЛЕВОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ

означает, что в результат запроса надо включить комбинации записей из обеих исходных таблиц, которые соответствуют указанному условию. Но, в отличие от внутреннего соединения, в результат запроса надо включить еще и записи из первого источника (указанного слева от слова СОЕДИНЕНИЕ), для которых не найдено соответствующих условию записей из второго источника.

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

Обратите внимание, что NULL-значения не являются нулем или пустой строкой. Это специальные маркеры, обозначающие неуказанные (отсутствующие) значения или значения, не имеющие смысла.

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

ВЫБРАТЬСпр.Наименование, Peг.Курс

ИЗ Справочник.Валюты КАК Спр

ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ

РегистрСведений.КурсыВалют.СрезПоследних КАК Peг

ПО Спр.Ссылка = Peг.Валюта

Результат запроса показан в следующей таблице:




Линейный обход

Первый и самый простой способ обхода ? линейный. При линейном обходе выборка будет выдавать записи в той последовательности, в которой они располагаются в результате запроса. В нашем примере это будут записи с номерами 1, 2, 3, 4, 5 и так далее до записи с номером 20.

Для получения линейной выборки необходимо вызвать метод Выбрать объекта РезультатЗапроса без параметров, либо с параметром ОбходРезультатаЗапроса. Прямой.


Линейный обход


Логические операторы И, ИЛИ, НЕ

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

Например, выберем товары, произведенные в России по цене, меньшей определенного значения:

ВЫБРАТЬ Наименование,

ЗакупочнаяЦена КАК Цена,

СтранаПроисхождения КАК Страна

ИЗ Справочник.Номенклатура

ГДЕ СтранаПроисхождения = "Россия" И ЗакупочнаяЦена < 1000




Лопата



Лопата


Простой запрос с итогами по группировкам выглядит следующим образом:


Лопата


МЕСЯЦ (<дата>)



Выделяет месяц из даты (от 1 до 12).



Мониторы





Монитор 15" LG Studioworks 575N

Расходная накладная 00019 от 06.06.2002 12:00:00

Монитор 15" LG Studioworks 575N

Расходная накладная 00006 от 15.02.2002 12:00:00

Монитор 15" LG Studioworks 575N

Расходная накладная 00018 от 15.06.2002 12:00:00



Мониторы


НачалоПериода ( <дата>, <ТипПериода> )

Возвращает начало периода по заданной дате. В качестве параметра ТипПериода передается Год, Месяц, Неделя, День, Час и т.д.



Наименование

Магазин на ул. Алексеева

Максимус


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

Следующие символы в строке шаблона являются служебными и имеют особый смысл:




00014

1С:Бухгалтерия ПРОФ версия 7.7

00016

1С:Торговля и Склад 7.7 Проф

00009

Windows XP Home Edition Russian CD

00010

Windows XP Home Edition Russian UPG CD

00011

Windows XP Professional Russian CD

00041

Доставка

00042

Инсталляция ПО

00018

Клавиатура Apple Pro Keyboards






Сортировка часто применяется с ключевым словом ПЕРВЫЕ. Например, следующий запрос сортирует товары по убыванию цены и показывает 5 самых дорогих товаров:



ВЫБРАТЬ ПЕРВЫЕ 5 Код, Наименование, ЗакупочнаяЦена КАК Цена

ИЗ Справочник.Номенклатура

УПОРЯДОЧИТЬ ПО Цена УБЫВ



Результат запроса показан в таблице:






НайтиСледующий



Позволяет найти запись с заданными значениями некоторых полей.



Ниже приведен простейший пример обхода выборки с помощью метода Следующий:



НайтиСледующий

НайтиСледующий

(СтруктураПоиска)Цикл

Сообщить("Сотрудник" + Выборка.Наименование);

КонецЦикла;



//2-й вариант: поиск значения по заданной колонке

//выберем всех сотрудников, принятых в 2003 году

Пока Выборка.


(2003, "Год") Цикл

Сообщить("Сотрудник" + Выборка.Наименование);

КонецЦикла;


НайтиСледующий


Например:

ВЫБРАТЬ Справочник.Товары.Наименование, Справочник.Товары.Цена

ВЫБРАТЬ Справочник.Сотрудники.*


Например:


НЕДЕЛЯ (<дата>)



Определяет номер недели в году по дате (от 1 до 53).



Несколько итогов в запросе

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

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


Несколько итогов в запросе


Объединения / Псевдонимы

Здесь можно объединить данные из нескольких таблиц, указав условия объединения. На этой же закладке назначаются псевдонимы полей.


Объединения / Псевдонимы


ОбъемПродаж



1С:Торговля и Склад 7.7 Проф

1540

Windows XP Home Edition Russian CD

1360

Windows XP Home Edition Russian UPG CD

1105

Windows XP Professional Russian CD

2480

Доставка

40

Инсталляция ПО

60

Клавиатура Apple Pro Keyboards

5890

Клавиатура Keyboard PS/2

384



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



ОбъемПродаж


Обход по группировкам

Третий, и последний способ обхода результата ? по группировкам. Он сходен с иерархическим обходом, но с одним различием: записи с иерархическими итогами при обходе в нем рассматриваются как детальные записи, а не как узловые. Для получения выборки по группировкам из результата запроса необходимо вызвать метод Выбрать объекта РезультатЗапроса с параметром ОбходРезультатаЗапроса.ПоГруппировкам:

СпособВыборки= ОбходРезультатаЗапроса.ПоГруппировкам;

Выборка = РезультатЗапроса.Выбрать(СпособВыборки);



Перебрав такую выборку для нашего примера, мы получим записи с номерами 1, 2, 7, 11, 12, 16, например:


Обход по группировкам


Общие итоги

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


Общие итоги


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



% (процент)

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

_ (подчеркивание)

Один произвольный символ. Например, под шаблон «_аша» подходят Маша, Даша, Саша, Паша и т.д.

[...] (в квадратных скобках один или несколько символов)

Любой одиночный символ из перечисленных внутри квадратных скобок. Например, под шаблон <<[МД]аша» подходят Маша или Даша. В перечислении могут встречаться диапазоны, например, А-Я, означающие произвольный символ, входящий в диапазон, включая концы диапазона.

[^...] (в квадратных скобках значок отрицания (крышечка), за

которым следует один или несколько символов

Любой одиночный символ, кроме тех, которые перечислены следом за значком отрицания. Например, под шаблон «[^МД]аша» Маша и Даша уже не подходят, а подходят Паша и Саша.


Если необходимо записать один из перечисленных символов в качестве самого себя, а не в качестве служебного символа, то ему должен предшествовать спецсимвол, который определяется в этом же операторе после ключевого слова СПЕЦСИМВОЛ.

Например, следующая строка обозначает любую строку, начинающуюся со знака подчеркивания «__». Так как знак подчеркивания является служебным, то для его использования в качестве именно знака подчеркивания, необходимо его экранировать другим спецсимволом, например «\»:



ВЫБРАТЬ Наименование ИЗ Справочник.СистемныеФайлы

ГДЕ Наименование ПОДОБНО "\_%" СПЕЦСИМВОЛ "\"

ОсновнойПоставщик

Монитор 19" Hitachi CM715ET



Монитор LCD 22" M8537ZM/A



Мышь GENIUS «EASY» (3 кнопки)



Мышь Ice Mouse MUS-2



Мышь LOGITECH M-S48 PS/2


ОсновнойПоставщик


Параметры в языке запросов

Обычно требуется, чтобы параметры условий пользователь мог указать самостоятельно в каком-либо диалоге. Для этого запрос конструируется с использованием параметров. Обратите внимание, что в следующем запросе параметр МинЦена предваряется знаком «&».

ВЫБРАТЬНаименование, ЗакупочнаяЦена

ИЗ Справочник.Номенклатура

ГДЕ ЗакупочнаяЦена >= &МинЦена

Общая схема выполнения запроса с параметрами выглядит следующим образом:



//создание объекта Запрос с текстом запроса

Запрос = Новый Запрос("Выбрать Наименование, Цена

|ИЗ Справочник.Номенклатура

|ГДЕ Цена >= МинЦена");



//передача параметров в запрос

Запрос.УстановитьПараметр("МинЦена",1000);



//выполнение запроса с установленными параметрами

Результат = Запрос.Выполнить();

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


Параметры в языке запросов


ПОДСТРОКА (<Строка>, <Позиция>, <ЧислоСимволов>)



Данная функция предназначена для выделения подстроки из строки.



ПоГруппировкам

;

Выборка= Результатаапроса.Выбрать(СпособВыборки);

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



//выведем в окно сообщений поля из результата

Сообщить("Группа товаров: " + СокрЛП(Выборка.Наименование)

+ "Количество: "+ СокрЛП(Выборка.Количество));



//выберем дочерние записи линейным способом

ВыборкаДочерних = Выборка.Выбрать();

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

Сообщить(" Товар: " + СокрЛП(Выборка.Наименование)

+ " Количество: " + СокрЛП(Выборка.Количество));

КонецЦикла;

КонецЦикла;


ПоГруппировкам


ПоГруппировкамСИерархией

;

Выборка = Запрос.Выполнить().Выбрать(СпособВыборки);

ВыдатьРекурсивно (Выборка);

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



Процедура ВыдатьРекурсивно(Выборка)

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



//выведем в окно сообщений поля из результата

Товар = Выборка.Наименование;

Количество = Выборка.Количество;

Сообщить("Товар: " + СокрЛП(Товар) +

"Количество: " + СокрЛП(Количество));



//продолжим выборку подчиненных записей

СпособВыборки = ОбходРезультатаЗапроса.ПоГруппировкамСИерархией;

ВыдатьРекурсивно(Выборка.Выбрать(СпособВыборки));

КонецЦикла;

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


ПоГруппировкамСИерархией


Поля из вложенных таблиц

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

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

//требуются все поля из вложенной таблицы

ВЫБРАТЬ Документ.РасходнаяНакладная.Состав

ВЫБРАТЬ Документ.РасходнаяНакладная.Состав.*



//требуется только одно поле из табличной части

ВЫБРАТЬ Документ.РасходнаяНакладная.Состав.Сумма



//требуется несколько полей из табличной части

ВЫБРАТЬ Документ.РасходнаяНакладная.Состав.(Количество,Сумма)



//для полей вложенной таблицы можно указать псевдонимы

ВЫБРАТЬ Документ.РасходнаяНакладная.Состав.(Количество КАК Кол,

Сумма КАК Сум)



ПОЛНОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ

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

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

Порядок

Если требуется, укажите условия сортировки полученной информации.


Порядок


ПРАВОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ

означает, что в результат запроса надо включить комбинации записей из обеих исходных таблиц, которые соответствуют указанному условию. Кроме того, в результат запроса надо включить еще и записи из второго источника (указанного справа от слова СОЕДИНЕНИЕ), для которых не найдено соответствующих условию записей из первого источника.

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

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

ВЫБРАТЬ Спр.Наименование, Peг.Курс

ИЗ РегистрСведений.КурсыВалют.СрезПоследних() КАК Peг

ПРАВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ Справочник.Валюты КАК Спр

ПО Спр.Ссылка = Peг.Валюта


ПРАВОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ


можно построить запрос без

ВЫБРАТЬНаименование, Цена ИЗ Справочник.Товары

ВЫБРАТЬ * ИЗ Справочник.Сотрудники

ВЫБРАТЬ Номер, Дата, Представление ИЗ Документ.РасходнаяНакладная

ВЫБРАТЬ * ИЗ РегистрНакопления.Продажи

В системе 1С:Предприятие 8. 0 можно построить запрос без указания ключевого слова ИЗ, тогда список полей должен содержать полные имена таблиц,



можно построить запрос без


Примеры значений

Булево

ИСТИНА; ЛОЖЬ (других значений не существует)

Строка

«Иванов»; «Петров»

Число

15; 15.2; -10.20

Дата

ДАТАВРЕМЯ(2003,12,23,16,56,00)

ДАТАВРЕМЯ(2003,12,23)






Обратите внимание, что значения типа «дата» задаются с помощью ключевого слова ДАТАВРЕМЯ, после которого в скобках последовательно указываются год, месяц, день, час, минута и секунда.



В запрос также могут передаваться параметры. Эта возможность уже использовалась нами при рассмотрении предложения ГДЕ. Значения параметров могут использоваться в выражениях языка запросов, для этого необходимо указать символ «&» и после него имя параметра.



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

Продано



Клавиатура Apple Pro Keyboards

79

Клавиатура Keyboard PS/2

79

Клавиатура LK-601 KB-2000 PS/2

76

Мышь 2-кноп A4Tech PS/2

102

Мышь Ice Mouse MUS-2

89

Мышь LOGITECH M-S48 PS/2

98


Приведем другой пример, когда отбор групп необходим. Выберем клиентов, купивших за заданный период товаров на сумму 10000 и выше:



Продано


Продажи



1С:Аспект 7.7

Алекс-2002

270

1С:Аспект 7.7

Магазин на ул.Алексеева

270

1С:Аспект 7.7

Эльбрус

180

1С:Бухгалтерия 7.7

Магазин на ул.Алексеева

210

1С:Бухгалтерия 7.7

Эльбрус

140






Проверка пустых значений (ЕСТЬ NULL/IS NULL)

Оператор ЕСТЬ NULL позволяет проверить значение заданного выражения на NULL.

Проверка пустых значений (ЕСТЬ NULL/IS NULL)

Проверка ссылочного значения (ССЫЛКА / REF)

Оператор ССЫЛКА позволяет проверить, является ли значение выражения ссылкой на таблицу, указанную справа от него. Этот оператор полезен для полей, имеющих составной тип данных. Следующий запрос выбирает товары, для которых единица измерения ссылается на справочник ЕдиницыИзмерения, а не является, например, строкой.

ВЫБРАТЬ Наименование, ЕдиницаИзмерения

ИЗ Справочник.Номенклатура

ГДЕ ЕдиницаИзмерения ССЫЛКА Справочник.ЕдиницыИзмерения


Проверка ссылочного значения (ССЫЛКА / REF)


Проверка вхождения значения в список (В / IN)

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

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

//выбираем товары из заданного списка

ВЫБРАТЬ Наименование, ЗакупочнаяЦена

ИЗ Справочник.Номенклатура

ГДЕ Ссылка В (&СписокВыбранныхТоваров)



//выбираем товары, принадлежащие определенной группе

//независимо от уровня, на котором они находятся

ВЫБРАТЬ Наименование, ЗакупочнаяЦена

ИЗ Справочник.Номенклатура

ГДЕ Ссылка В ИЕРАРХИИ (&ВыбраннаяГруппа)

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

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



ВЫБРАТЬ Спр.Наименование, Спр.ЗакупочнаяЦена

ИЗ Справочник.Номенклатура КАК Спр

ГДЕ Спр.Ссылка В (ВЫБРАТЬ РАЗЛИЧНЫЕ Номенклатура

ИЗ Документ.РасходнаяНакладная.Состав)



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



ВЫБРАТЬ РАЗЛИЧНЫЕ Номенклатура, Номенклатура.ЗакупочнаяЦена

ИЗ Документ.РасходнаяНакладная.Состав

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


Проверка вхождения значения в список (В / IN)


Псевдонимы источников КАК/AS

В языке запросов есть возможность указать псевдоним для таблицы-источника с помощью ключевого слова КАК. При этом можно обращаться к источнику через псевдоним, например, в списке полей конструкции ВЫБРАТЬ или при соединении таблиц, которое будет описано ниже.

Ниже приведен пример использования псевдонима таблицы-источника:

ВЫБРАТЬ Спр.Наименование,

Спр.Цена,

Спр.Страна

ИЗ Справочник.Номенклатура

Псевдонимы полей (КАК/AS)

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

В следующем запросе для полей Наименование и ЕдИзм назначаются псевдонимы:

ВЫБРАТЬНаименование КАК Товар, Цена, ЕдИзм КАК ЕдиницаИзмерения

ИЗ Справочник.Товары

УПОРЯДОЧИТЬ ПО Товар

Результат запроса будет следующий:


Псевдонимы полей (КАК/AS)


Сбросить

Отменяет позиционирование. После вызова метода Следующий выборка позиционируется на первую запись.

СЕКУНДА (<дата>)



Выделяет секунды из даты (0 до 59).



Следующий



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





СледующийПоЗначениюПоля

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





Сравнение строк (ПОДОБНО / LIKE)

Ключевое слово ПОДОБНО позволяет сравнить значение строкового выражения, указанного слева от него, со строкой шаблона, указанной справа. Если значение выражения удовлетворяет шаблону, то результатом оператора будет Истина, иначе ? Ложь. Например, следующий запрос выберет всех контрагентов, начинающихся на определенную букву:

ВЫБРАТЬ Наименование ИЗ Справочник.Контрагенты

ГДЕ Наименование ПОДОБНО "М%"




СРЕДНЕЕ (AVG)

Вычисляет среднее арифметическое значение по столбцу.


СРЕДНЕЕ (AVG)


Страна



1С: Бухгалтерия 7.7

35

Россия

1С: Аспект 7.7

45

Россия

Программы





1С: Торговля и Склад 7.7

140

Россия

Windows XP

140

США



Страна




1С: Бухгалтерия 7.7

35

Россия

1С: Аспект 7.7

45

Россия

1С: Торговля и Склад 7.7

140

Россия

1С: Бухгалтерия 7.7

35

Россия


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

часто имеет в виду «меньше или равно», а не «строго меньше».

Возможно, в данном запросе товары с ценой 1000 тоже подойдут, тогда знак «<» надо заменить на «<=».

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

Например, следующие два запроса могут привести к неожиданным для программиста результатам, потому что оператор И имеет больший приоритет, чем ИЛИ (а оператор НЕ имеет еще больший приоритет, чем И):



ВЫБРАТЬ Наименование,

ЗакупочнаяЦена КАК Цена,

СтранаПроисхождения КАК Страна

ИЗ Справочник.Номенклатура

ГДЕ СтранаПроисхождения = "Россия" ИЛИ СтранаПроисхождения = "США"

И ЗакупочнаяЦена < 1000

В результате мы получим следующие записи:





Клавиатура Apple Pro Keyboards

50

США

Лазерный принтер Minolta-QMS

361

США

Лазерный принтер HP LaserJet 2200

720

США

Монитор 19" Hitachi CM715ET

300

Россия

Ноутбук Rover Computers Explorer

1326

Россия


Этот запрос будет интерпретирован системой как «Выбрать все товары из страны Россия, независимо от цены, а также товары

из страны США, которые дешевле 1000». Т.е. условие по цене будет проверяться только для товаров из США, а товары из России будут включены в запрос при любой цене.

Вероятно, программист имел в виду совсем другое: «Выбрать товары из России и США, которые дешевле 1000», что реализовано

вторым запросом. Условие по цене будет проверяться для всех товаров, независимо от страны-производителя:



ВЫБРАТЬ Наименование,

ЗакупочнаяЦена КАК Цена,

СтранаПроисхождения КАК Страна

ИЗ Справочник.Номенклатура

ГДЕ (СтранаПроисхождения = "Россия" ИЛИ СтранаПроисхождения = "США")

И ЗакупочнаяЦена < 1000







Клавиатура Apple Pro Keyboards

50

США

Лазерный принтер Minolta-QMS

361

США

Лазерный принтер HP LaserJet 2200

720

США

Монитор 19" Hitachi CM715ET

300

Россия



Страна



Программное обеспечение



Услуги



Клавиатуры



Принтеры



Мониторы

Обратите внимание, что в результате запроса присутствуют только группы справочника, так как для них поле Страна имеет NULL-значение (вообще не указывается). В результат запроса не попали товары, у которых строковое поле СтранаПроисхождения имеет значение «» (пустая строка). Как уже было сказано выше, ни ноль, ни пустая строка, ни пробел не являются NULL-значением.

Чтобы выбрать товары, у которых не указана страна (строковое поле), нужно применить обычное сравнение на пустую строку:



ВЫБРАТЬ Наименование, СтранаПроисхождения КАК Страна

ИЗ Справочник.Номенклатура

ГДЕ СтранаПроисхождения = ""





Доставка



Инсталляция ПО



Консультации по настройке ОС Windows



Монитор 15" LG Studioworks 575N




Если стоит задача выбрать элементы с неуказанным реквизитом, имеющим ссылочный тип, тогда следует поступать по-другому. Например, требуется выбрать все товары с незаполненным полем ОсновнойПоставщик, которое является ссылкой на справочник Контрагенты.

Предлагается следующая схема для решения этой задачи:



Запрос = Новый Запрос("

|ВЫБРАТЬ Наименование, ОсновнойПоставщик

|ИЗ Справочник.Номенклатура

|ГДЕ ОсновнойПоставщик = &ПустойКонтрагент ");

Запрос.УстановитьПараметр("ПустойКонтрагент",

Справочники.Контрагенты.ПустаяСсылка());

Результат = Запрос.Выполнить();

В условии запроса используется параметр ПустойКонтрагент. Этот параметр до выполнения запроса получает значение пустой ссылки на справочник Контрагенты. Для этого используется метод ПустаяСсылка объекта СправочникМенеджер.

Результат приведенного выше запроса будет следующий:




Сумма

1С: Бухгалтерия 7.7

70

2

144

Клавиатура PS/2

4,5

2

22,5

Монитор 15" LG

150

1

150

Мышь 2-кноп PS/2

1,6

10

16


Если запрос делается к табличной части справочника или документа, то обращение к реквизитам шапки документа или обычным реквизитам справочника производится через поле Ссылка, например:



ВЫБРАТЬ Ссылка.Дата, Ссылка.Номер,

Номенклатура, Цена, Количество, Сумма

ИЗ Документ.РасходнаяНакладная.Состав






10.01.2002 12:00:01

00016

1С: Бухгалтерия 7.7

70

2

140

11.01.2002 12:00:00

00001

Клавиатура PS/2

4,5

5

22,5

10.01.2002 12:00:00

00001

Монитор 15" LG

150

1

150

10.01.2002 12:00:00

00001

Мышь 2-кноп PS/2

1,6

10

16



Сумма





1C: Аспект 7.7

720

1С:Бухгалтерия 7.7 Базовая версия

350

1C:Бухгалтерия 7.7 Стандартная версия

280

1С:Бухгалтерия ПРОФ версия 7.7

1320

1С:Торговля и Склад 7.7 Проф

1540


Можно рассчитать итоги по комбинации группировок, перечислив их через запятую:


Сумма


СУММА (SUM)

Вычисляет сумму всех значений, содержащихся в столбце.


СУММА (SUM)


Связи

Эта закладка появляется, только если в запросе соединяются несколько несколько таблиц. Здесь можно настроить условия соединения.


Связи


Таблица документа

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


Таблица документа
Ссылка

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


Таблица документа
ПометкаУдаления

Признак пометки на удаление документа.


Таблица документа
Номер

Номер документа. Встроенное поле для всех документов.


Таблица документа
Дата

Дата и время документа. Встроенное поле для всех документов.


Таблица документа
Проведен

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


Таблица документа

Далее идут реквизиты шапки документа, как они определены в Конфигураторе, например, Контрагент, Склад и т.д.


Таблица документа

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


Таблица документа
МоментВремени

Таблица документаВиртуальное поле. Содержит момент времени документа, который включает дату и ссылку на документ. Напомним, что тип «дата» включает также и время с точностью до секунды.


Таблица документа
Представление

Таблица документаВиртуальное поле. Содержит строку представление документа, например, «Расходная накладная 0035 от 25.07.2003 12:05:01».

Итак, мы рассмотрели две основные таблицыи-сточники данных для справочников и документов. Таблицы-источники для регистров будут представлены в соответствующих главах. Таблицы-источники для других объектов (констант, журналов документов и т.д.) имеют достаточно простую структуру и в данной книге не рассматриваются.



Таблица документа


Таблица справочника

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


Таблица справочника
Ссылка

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


Таблица справочника
ПометкаУдаления

Признак пометки на удаление элемента справочника. Если равно значению Истина, то элемент помечен на удаление.


Таблица справочника
Родитель

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


Таблица справочника
ЭтоГруппа

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


Таблица справочника
Владелец

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


Таблица справочника
Представление

Таблица справочникаВиртуальное поле. Содержит представление элемента справочника, например, его наименование или код.


Таблица справочника
Код

Код элемента. Встроенное поле для всех справочников.


Таблица справочника
Наименование

Наименование элемента. Встроенное поле для всех справочников.


Таблица справочника

Далее идут реквизиты справочника, как они определены в Конфигураторе, например, Цена, ЕдИзм и т.д.


Таблица справочника

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

Приведем примеры простых запросов к справочнику:

ВЫБРАТЬ Код, Наименование, Цена, Родитель

ИЗ Справочник.Номенклатура

ВЫБРАТЬ *.Представление

ИЗ Справочник.Номенклатура

ВЫБРАТЬ Наименование, ЭтоГруппа, ПометкаУдаления

ИЗ Справочник.Номенклатура

ГДЕ ЭтоГруппа = ИСТИНА И ПометкаУдаления = ЛОЖЬ


Таблица справочника


Таблицы и поля

На этой закладке выбираются нужные объекты путем переноса их из списка «База данных» в списки «Таблицы» и «Поля».


Таблицы и поля


Таблицы-источники данных

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

В 1C:Предприятии 8.0 существуют следующие таблицы-источники данных для запросов:



·Таблица констант,

·Таблица справочника,

·Таблица документов,

·Таблица журнала документов,

·Таблицы последовательностей,

·Таблица плана видов характеристик,

·Таблица критерия отбора,

·Таблица плана видов расчета,

·Таблицы регистров расчета,

·Таблицы регистров сведений,

·Таблицы регистров накопления,

·Таблицы регистров бухгалтерии.



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


Таблицы-источники данных


ТипЗаписи

Этот метод возвращает тип текущей записи запроса, который является одним из значений системного перечисления ТипЗаписиЗапроса: ДетальнаяЗапись, ИтогПоГруппировке, ИтогПоИерархии, ОбщийИтог.

Товар



Клавиатуры

Клавиатура Apple Keyboard

Клавиатура Keyboards PS/2

Клавиатура Linkworld LK-601 PS/2

Клавиатура LK-601 КВ-2000 PS/2

Мониторы

Монитор 15" LG Studioworks 575N

Монитор 17" Philips 107S20

Монитор 19" Hitachi CM715ET

Монитор LCD 22" LG M8537ZM/A


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

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

ВЫБРАТЬ Номенклатура КАК Товар

ИЗ Документ.РасходнаяНакладная.Состав

УПОРЯДОЧИТЬ ПО Номенклатура.Наименование ИЕРАРХИЯ

Для нужного эффекта необходимо организовать левое внешнее соединение со справочником, как сделано в этом запросе:



ВЫБРАТЬ Спр.Ссылка Товар, ДокСоставСсылка Документ

ИЗ Справочник.Номенклатура КАК Спр

ЛЕВОЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная.Состав КАК ДокСостав

ПО ДокСостав.Номенклатура = Спр.Ссылка

УПОРЯДОЧИТЬ ПО Спр.Наименование ИЕРАРХИЯ




Упорядочивание по иерархии

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



Это достигается с помощью ключевого слова ИЕРАРХИЯ, которое используется в следующем запросе:

ВЫБРАТЬ Ссылка КАК Товар

ИЗ Справочник.Номенклатура

УПОРЯДОЧИТЬ ПО Наименование ИЕРАРХИЯ






Упорядочивание во вложенных таблицах

В предложении УПОРЯДОЧИТЬ ПО можно определять также и условия сортировки записей из вложенных таблиц, причем их можно комбинировать с условиями упорядочивания по таблице верхнего уровня.

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

Это делается с помощью следующего запроса:

ВЫБРАТЬНаклСостав.Ссылка.Номер,

Номенклатура, Количество

ИЗ Документ.РасходнаяНакладная.Состав КАК НаклСостав

УПОРЯДОЧИТЬ ПО НаклСостав.Ссылка.Номер,

НаклСостав.Номенклатура.Наименование




Уровень

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

Условия

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


Условия


Вложенные запросы в списке источников

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

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



ВЫБРАТЬ Товары.Номенклатура КАК Товар,

Товары.Номенклатура.ЗакупочнаяЦена КАК Цена

ИЗ (

ВЫБРАТЬ Номенклатура ИЗ Документ.РасходнаяВакладная.Состав

ОБЪЕДИНИТЬ

ВЫБРАТЬ Номенклатура ИЗ Документ.ПриходнаяНакладная.Состав

) КАК Товары

СГРУППИРОВАТЬ ПО Товары.Номенклатура






Выходная форма

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



Все ключевые слова языка запросов



Все ключевые слова языка запросов 1С:Предприятие 8.0 имеют английские эквиваленты, совпадающие там, где это возможно, со стандартным SQL. Например, ключевое слово ВЫБРАТЬ может быть заменено на SELECT, а ключевое слово ИЗ на FROM. Полный перечень английских эквивалентов приведен в документации.



В общем случае текст запроса строится по следующей схеме:




Если проверяемое значение равно NULL, то результатом оператора будет Истина, иначе ? Ложь. Применение логического оператора НЕ изменяет действие оператора на обратное. Любая операция обычного сравнения (=, >, <= и т.д.) значения NULL с чем-либо еще дает результат, аналогичный Ложь.

Следующий запрос выбирает из справочника Номенклатура все товары, для которых строковое поле СтранаПроисхождения имеет NULL-значение:

ВЫБРАТЬНаименование, СтранаПроисхождения КАК Страна

ИЗ Справочник.Номенклатура

ГДЕ СтранаПроисхождения ЕСТЬ NULL




Запросы к табличным частям

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

ВЫБРАТЬ Товар, Цена, Количество, Сумма

И3 Документ.РасходнаяНакладная.Состав






[ИТОГИ [<агрегатные функции>] ПО <Список полей> [,ОБЩИЕ]]





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





Разработка в 1С 8.0

Й способ формирования диаграммы

? на основе источника данных.



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



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



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



Й способ формирования диаграммы


Й способ формирования диаграммы

? с помощью построителя отчета



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



Для кнопки Выполнить создайте



Построитель.Выполнить();

Построитель.Вывести();



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

Для кнопки Выполнить создайте


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



Можно не бояться сложности задачи, это делается несколькими щелчками мыши! В форме необходимо разместить табличные поля и указать им свойство Данные в одно из следующих значений



Формат



Можно задать формат представления значения, например, «БЛ=Нет; БИ=Да».



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





Именование областей

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

Панель «Имена» имеет следующие кнопки:

Именование областей

Любая область уже имеет системное имя, например:

·R5C3 ? ячейка в 5-й строке и 3-й колонке;

·R5 ? 5-я строка;

·СЗ ? 3-я колонка;

·R5C4:R6C5 ? диапазон ячеек;

·СЗ:С5 ? ячейки, входящие с 3-ю по 5-ю колонку;

·R2:R6 ? ячейки, входящие с 2-ю по 6-ю строки;

·Т ? табличный документ в целом;

·D5 ? 5-й рисунок (графический объект).



Разработчик может задать собственное имя для области, например, «Шапка», и использовать его при формировании табличного документа.

Для вывода пересечения горизонтальной и вертикальной секции можно использовать конструкцию с вертикальной чертой, например, «Обл = Макет.ПолучитьОбласть("Строка | Колонка")». Второй вариант ? задать имя для пересечения и работать с этой областью, как с любой другой.


Именование областей


ЭлементУ правления

Содержит элемент управления для редактирования значе-ния, например, флажок.





Код:

Запрос = Новый Запрос("

| ВЫБРАТЬ

| ПродажиОбороты.Контрагент КАК Контрагент,

| ПродажиОбороты.Номенклатура КАК Номенклатура,

| ПродажиОбороты.КоличествоОборот КАК КоличествоОборот,

| ПродажиОбороты.СуммаОборот КАК СуммаОборот

| ИЗ

| РегистрНакопления.Продажи.Обороты(&ПериодС,&ПериодПо,

| Месяц,,(Контрагент, Номенклатура)) КАК ПродажиОбороты

|

| ИТОГИ СУММА(КоличествоОборот) , СУММА(СуммаОборот) ПО

| Контрагент ИЕРАРХИЯ,

| Номенклатура ИЕРАРХИЯ,

| ПродажиОбороты.Период,

| ПродажиОбороты.Номенклатура.СтранаПроисхождения КАК Страна

| АВТОУПОРЯДОЧИВАНИЕ") ;

Запрос.УстановитьПараметр("ПериодС", ПериодC);

Запрос.УстановитьПараметр("ПериодПо", КонецДня(ПериодПо));



Результат = Запрос.Выполнить();

ПолеТабДок = ЭлементыФормы.ПолеТабличногоДокумента;

СводнаяТаблица = ПолеТабДок.ВстроенныеТаблицы.СводнаяТаблица1;

СводнаяТаблица.ИсточникДанных = Результат;

СводнаяТаблица.ОтображатьПоля = Истина;

Если СводнаяТаблица.Колонки.Количество() = 0 И

СводнаяТаблица.Строки.Количество() = 0 И

СводнаяТаблица.Данные.Количество() = 0 Тогда



СводнаяТаблица.Обновление = Ложь;

// Зададим начальное расположение измерений на осях

СводнаяТаблица.Колонки.Добавить("Контрагент");

СводнаяТаблица.Строки.Добавить("Номенклатура");

СводнаяТаблица.Данные.Добавить("КоличествоОборот");

СводнаяТаблица.Данные.Добавить("СуммаОборот");

<
Диаграмма= ЭлементыФормы.Диаграмма;

Диаграмма.Очистить ();

Диаграмма.Обновление = Ложь;

Диаграмма.Серии.Добавить("Серия 1");

Диаграмма.Серии.Добавить("Серия 2");

Диаграмма.Точки.Добавить("Точка 1");

Диаграмма.Точки.Добавить("Точка 2");

Диаграмма.Точки.Добавить("Точка 3");

Диаграмма.УстановитьЗначение(0,0,5);

Диаграмма.УстановитьЗначение(1,0,2);

Диаграмма.УстановитьЗначение(2,0,8);

Диаграмма.УстановитьЗначение(0,1,10);

Диаграмма.УстановитьЗначение(1,1,15);

Диаграмма.УстановитьЗначение(2,1,14);

Диаграмма.Обновление = Истина;




Диаграмма = ЭлементыФормы.Диаграмма;

Диаграмма.Очистить();

Диаграмма.Обновление = Ложь;

Диаграмма.СерииВСтроках = Ложь;

Диаграмма.ИсточникДанных = ТаблицаДанных;

Диаграмма.Обновление = Истина;




ТабДок = Новый ТабличныйДокумент;



//Получение макета

Макет = Документы.РасходнаяНакладная.ПолучитьМакет("Печать");



//получим область как новый табличный документ (!)

Область = Макет.ПолучитьОбласть("Заголовок");



//выведем область в табличный документ

ТабДок.Вывести(Область);



//Шапка

ТабДок.Вывести(Макет.ПолучитьОбласть("Шапка"));

//Состав

Для Каждого СтрСостава Из Состав Цикл

Область = Макет.ПолучитьОбласть("Строка");

ТабДок.Вывести(Область);

КонецЦикла;



//Подвал

Область = Макет.ПолучитьОбласть("Подвал");

ТабДок.Вывести(Область);

ТабДок.Показать(); //покажем на экране

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


Код:



ТабДок= ЭлементыФормы.ПолеТабДок;

ТабДок.Очистить();

Макет = ПолучитьМакет("Основной");



//получим область как объект ТабличныйДокумент

ОбластьТабДок = Макет.ПолучитьОбласть("ЛеваяЧастьШапки");

ТабДок.


ОбластьЯчеек = Макет.Область("НазваниеМесяца") ;

ОбластьЯчеек = Макет.Области[ "НазваниеМесяца" ];

ОбластьЯчеек = Макет.Области.НазваниеМесяца;


Код:



//получим область как новый табличный документ (!)

Область = Макет.ПолучитьОбласть("Заголовок");



//укажем параметры области

Область.Параметры.НомерДокумента = Номер;

Область.Параметры.От = Дата;

Область.Параметры.Кому = Контрагент;



ТабДок.Вывести(Область) ;

ТабДок.Вывести(Макет.ПолучитьОбласть("Шапка"));



Область = Макет.ПолучитьОбласть("Строка");

Для Каждого СтрСостава Из Состав Цикл

Область.Параметры.Заполнить(СтрСостава);

ТабДок.Вывести(Область);

КонецЦикла;

Область = Макет.ПолучитьОбласть{"Подвал");

Область.Параметры.ИтогоКоличество = Состав.Итог("Количество");

Область.Параметры.ИтогоСумма = Состав.Итог("Сумма");

РегОтв = РегистрыСведений.ОтветственныеСотрудники;

Область.Параметры.Директор = РегОтв.ПолучитьПоследнее(Дата).Директор;

ТабДок.Вывести(Область);

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






ТабДок = Новый ТабличныйДокумент;

ТекстЗапроса = "ВЫБРАТЬ

| СпрНоменклатура.Наименование,

| СпрНоменклатура.ЭтоГруппа,

| СпрНоменклатура.Ссылка КАК Ссылка,

| РегОстатки.КоличествоОстаток КАК Остаток

|ИЗ

| Справочник.Номенклатура КАК СпрНоменклатура

| ЛЕВОЕ СОЕДИНЕНИЕ

| РегистрНакопления.УчетНоменклатуры.Остатки КАК РегОстатки

| ПО СпрНоменклатура.Ссылка = РегОстатки.Номенклатура

|ГДЕ ЭтоГруппа = Ложь

|ИТОГИ СУММА(Остаток) ПО Ссылка ТОЛЬКО ИЕРАРХИЯ";

Запрос = Новый Запрос(ТекстЗапроса);

Макет = ПолучитьМакет("Остатки");

Обл = Макет.ПолучитьОбласть("Шапка");

ТабДок.Вывести(Обл);



//зафиксируем шапку для удобного просмотра

ТабДок.ФиксацияСверху = ТабДок.ВысотаТаблицы;



Обл = Макет.Область("Строка");



ОбычныйШрифт = Обл.Шрифт;

ОбычныйЦветТекста = Обл.ЦветТекста;

ОбычныйЦветФона = Обл.ЦветФона;



//один раз получим область Строка

Обл = Макет.ПолучитьОбласть("Строка");



Выборка = Запрос.Выполнить().Выбрать();

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

Остаток = ?(Выборка.Остаток = Null, 0, Выборка.Остаток);

Обл = Макет.Область("Строка");

Обл.Шрифт = ОбычныйШрифт;

Обл.ЦветТекста = ОбычныйЦветТекста;

Обл.ЦветФона = ОбычныйЦветФона;

Если Выборка.ТипЗаписи()<>ТипЗаписиЗапроса.ИтогПоГруппировке Тогда

Если Остаток <= 2 Тогда

<


Процедура тпРезультатОбработкаРасшифровки(Элемент, Расшифровка,

СтандартнаяОбработка)

Если ТипЗнч(Расшифровка)=Тип("СправочникСсылка.Номенклатура") Тогда

СтандартнаяОбработка = Ложь; //отключим стандартную обработку

НовыйТабДок = формаРасшифровки.ЭлементыФормы.ТабДок;

РасшифроватьСтроку(НовыйТабДок, Расшифровка);

ФормаРасшифровки. Открыть ();

КонецЕсли;

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

Обработку расшифровок у ячейки можно отключить, если задать свойство ИспользованиеРасшифровки в значение «Без обработки». Это же свойство позволяет распространить расшифровку ячейки на всю строку, если установить его в значение «Строка».




ТабДок.НачатьАвтоГруппировкуСтрок();

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

ТабДок.Вывести(ОбластьТабДок, Выборка.Уровень(),

Выборка.Наименование, Ложь);

КонецЦикла;

ТабДок.ЗакончитьАвтоГруппировкуСтрок();

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



Для ручного управления группами применяются следующие методы объекта ТабличныйДокумент:






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

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

ОбластьЯчеек = Макет.Область("Номенклатура");

ОбластьЯчеек.Примечание.Текст = Номенклатура.Комментарий;

ОбластьТабДок = Макет.ПолучитьОбласть("Номенклатура ");

ОбластьТабДок.Параметры.Номенклатура = Номенклатура;

ТабДок.Вывести(ОбластьТабДок);

КонецЦикла;

Обратите внимание, что свойство Примечание у объекта ОбластьЯчеек является объектом типа Рисунок, а не простой строкой. Через этот объект можно редактировать внешний вид примечания, шрифт и цвет текста, фон, линии и т.д.





НачатьГруппуКолонок

Начинает новую группу колонок. Можно создавать вложен-ные группы колонок.





НачатьГруппуСтрок

Начинает новую группу строк. Можно создавать вложенные группы строк.





Номенклатура.*,Контрагент.*}



ИТОГИ Сумма(Количество), Сумма(Сумма) ПО ОБЩИЕ



Обратите внимание на параметры «{&ПериодС}» и «{&ПериодПо}». Эти конструкции при обычном выполнении запроса игнорируются, а при установке свойства Текст построителя они распознаются как поля для отбора, т.е. пользователь сможет указать для них условия отбора.



Конструкция «{ИТОГИ ПО ...}» распознается как ресурсы для построителя отчета. Указание точки со звездочкой («.*») говорит о том, что в построителе будет доступно не только само поле, но и все его вложенные поля, например, реквизиты справочника.





Область

Позволяет получить область как объект типа ОбластьЯчеекТабличногоДокумента.


("НазваниеМесяца");

ОбластьЯчеек.Шрифт = Новый Шрифт(,,Истина); //жирный

ОбластьЯчеек.Текст = НомМес;



//получим область как объект ТабличныйДокумент

ОбластьТабДок = Макет.

Общая схема работы

Основные методы формирования печатной формы следующие:

Открыта

Признак того, что выводимая группа будет открыта (развернута).

Следующий пример выводит список товаров с группировками в отчете:



Открыта


ПолучитьОбласть

Позволяет получить область как объект типа ТабличныйДокумент.

Обратите внимание на различие методов Область и ПолучитьОбласть:

·Метод Область() предоставляет доступ к части табличного документа. Он возвращает объект ОбластьЯчеекТабличногоДокумента, предназначенный для установки форматирования области ячеек, установки текста, значения, примечания и расшифровки. Этот объект можно передать в методы ВставитьОбласть и УдалитьОбласть.



·Метод ПолучитьОбласть() создает отдельный табличный до-кумент из указанной области. Он возвращает объект ТабличныйДокумент, который можно передать в методы Вывести и Присоединить.

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


ПолучитьОбласть


Построитель ИзмеренияКолонки

? измерения отчета по ко-лонкам, например, Контрагент.Вид;



Построитель.ИзмеренияСтроки

? измерения отчета по стро-кам, например, Номенклатура;



Построитель.ВыбранныеПоля

? выбранные поля для вывода в отчет.



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



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



Например, сделаем поле Контрагент измерением колонки, а не строки, тогда будет сформирован следующий кросс-отчет:

Построитель.ВыбранныеПоля






Присоединить

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


(ОбластьТабДок);

КонецЦикла;

К области можно обращаться не только через метод Область, но и через свойство-коллекцию Области объекта ТабличныйДокумент.

Следующие примеры эквивалентны друг другу:


Присоединить


Серия

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

Ниже на рисунке показаны основные составные части диаграммы:

Серия


Диаграмма может быть сформирована следующими способами:



1. «Вручную» ? разработчик средствами встроенного языка создает новые серии, добавляет точки, устанавливает их значения.

2. На основе таблицы значений или табличного документа (свойство ИсточникДанных).

3.С помощью построителя отчета .



Точка 1

5

10

Точка 2

2

15

Точка 3

8

14

Приведенный ниже фрагмент устанавливает свойство ИсточникДанных для диаграммы:



Серия


Событие Выбор

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

Событие Выбор

СодержитЗначение



Признак того, что ячейка содержит значение.





ТипЗначения

Объект ОписаниеТипов, определяющий допустимые типы значений, например, типы «булево» и «число».





Точка

? отметка на оси абсцисс, по которой будут установлены значения для каждой серии. Например, конкретная дата, на которую будут отображены курсы всех валют.



Уровень

Этот параметр используется для автоматической группи-ровки строк табличного документа с помощью методов Начать/ЗакончитьАвтоГруппировкуСтрок и Начать/ЗакончитьАвтоГруппировкуКолонок. Соседние строки с одинаковым уровнем будут отнесены к одной группе.


Уровень


в форме которого располагается элемент



Ниже показан отчет, в форме которого располагается элемент управления ПолеТабличногоДокумента на закладке «Таблица».

Рассмотрим на примере, как организовать расшифровку строки. Допустим, необходимо при щелчке на строке выдавать список расходных накладных по данному товару. Это реализуется следующим образом. В форме располагается элемент управления ПолеТабличногоДокумента с именем «ТаблицаРезультат», в свойствах которого указывается процедура-обработчик события ОбработкаРасшифровки.

в форме которого располагается элемент


Рассмотрим, как заполняются параметры у объекта ТабличныйДокумент через его свойство-коллекцию Параметры. Следующий фрагмент демонстрирует задание параметров через это свойство:

Вывести(Диаграмма, ИмяРесурса)



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



СводТаб = ЭлементыФормы.ПолеТабДок.ВстроенныеТаблицы.СводнаяТаблица;

СводТаб.ИсточникДанных = Построитель;

СводТаб.ОтображатьПоля = Истина;



Из построителя можно извлечь результат запроса и сам запрос, с помощью свойства Результат и метода ПолучитьЗапрос:



·Свойство Результат содержит объект типа РезультатЗапроса.Используя этот объект, можно открыть выборку из результата запроса и перебрать ее для своих целей, например, вывести новый отчет.



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



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





Вывести(ТабДок)

Выводит отчет в переданный табличный документ.





Вывести()



Создает и показывает на экране новый табличный документ.





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


(ОбластьТабДок);

Для НомМес = 1 По 12 Цикл



//получим область как объект ОбластьЯчеекТабличногоДокумента

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

ОбластьЯчеек = Макет.

ЗакончитьГруппуКолонок



Заканчивает последнюю из начатых ранее групп колонок.



С помощью свойств ИтогиСнизу и ИтогиСправа разработчик может изменять положение маркера группы (сверху или снизу для строк, слева или справа для колонок). Свойства ЦветТекстаГруппировки и ЦветФонаГруппировки позволяют легко управлять форматированием группировок.



ЗакончитьГруппуСтрок



Заканчивает последнюю из начатых ранее групп строк.





обработчик события анализирует расшифровку, и,

Следующая процедура- обработчик события анализирует расшифровку, и, если это элемент справочника Номенклатура, то вызывается процедура РасшифроватьСтроку, а стандартная обработка расшифровки отключается:

Значение



Собственно значение ячейки (области), например, чис-ло 120 или значение Истина.





Разработка в 1С 8.0

Активность

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





Цена



01.01.2003

Монитор 19"

Розничная

1500,00

01.01.2003

Монитор 19"

Оптовая

1400,00

01.01.2003

Мышь 2х кноп.

Розничная

1,50

01.02.2003

Монитор 19"

Розничная

1350,00

01.02.2003

Монитор 19"

Оптовая

1300,00

01.02.2003

Мышь 2х кноп.

Розничная

1,20








Дата

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





Дата приема



Иванов

Темп плюс

Маркетинг

маркетолог

12.01.2003

Иванов

Темп плюс

Отдел продаж

продавец-консультант

11.01.2003

Иванов

Белый свет

Отдел разработки

программист

11.01.2003




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



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

Для непериодических регистров сведений:

Получить(<структура>)

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



Для непериодического регистра сведений:



Выбрать (<Отбор>, <Порядок>)



Для периодических регистров сведений:

Получить(<Период>, <структура>)

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

Метод Получить возвращает структуру, ключи которой совпадают с именами ресурсов,
Для периодических регистров сведений:


Для периодического регистра сведений:

Выбрать(<Начало интервала>, <Конец интервала>, <Отбор>, <Порядок>)

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

Параметры Начало интервала и Конец интервала позволяют задать границы интервала и могут иметь тип «дата», МоментВремени или Граница.

Приведем пример выборки записей периодического регистра сведений за определенный период по заданной валюте:


Для периодического регистра сведений:


<Имя измерения>



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





<Имя реквизита>

Набор полей, содержащий значения реквизитов регистра.





<Имя ресурса>



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





Источник

01.01.2002

Рубль

1

1

01.01.2002

EUR

26,6172

1

РБК

01.02.2002

EUR

26,4306

1

РБК

01.03.2002

EUR

26,7634

1

РБК

02.04.2002

EUR

27,2497

1

РБК

01.05.2002

EUR

28,1785

1

РБК

01.06.2002

EUR

29,3711

1

РБК

01.06.2002

USD

31,3058

1

РБК

01.05.2002

USD

31,1951

1

ЦБ РФ

01.04.2002

USD

31,1741

1

РБК

01.03.2002

USD

30,9404

1

ЦБ РФ

01.02.2002

USD

30,6797

1

РБК

01.01.2002

USD

30,1372

1

ЦБ РФ


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

Допустим, нам нужны записи за первый квартал по валюте «EUR», тогда для решения этой задачи нам понадобится следующий запрос:

ВЫБРАТЬ * ИЗ РегистрСведений.КурсыВалют

ГДЕ Валюта = &ВыбВалюта И Период МЕЖДУ &НачДата И &КонДата

Результат запроса будет
Источник


01.01.2002

EUR

26,6172

1

РБК

01.02.2002

EUR

26,4306

1

РБК

01.03.2002

EUR

26,7634

1

РБК


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



Измерения:



ФизЛицо

СправочникСсылка.Физлица


Сотрудник

СправочникСсылка.Сотрудники



Организация

СправочникСсылка.Организации

Подразделение

СправочникСсылка.Подразделения






Номенклатура

СправочникСсылка.Номенклатура



ТипЦен

СправочникСсылка.ТипыЦен




Организация

СправочникСсылка.Организация



Физлицо

СправочникСсылка.Физлица

Подразделение

СправочникСсылка.Подразделения

Должность

СправочникСсылка.Должности



Код:

РегЦены = РегистрыСведений.ЦеныКонкурентов;

Отбор = Новый Структура("Конкурент", ВыбКонкурент);

тзЦеныКонкурента = РегЦены.СрезПоследних(ВыбДата,Отбор);

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


Код:


Курс

EUR

30,8717

GBR

49,4375

USD

31,4568

рубль

1




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

ВЫБРАТЬ Период, Валюта, Курс

ИЗ РегистрСведений.КурсыВалют.



01.08.2002

EUR

30,8717






Курс





01.01.2002

EUR

26,6172






Менеджер регистра сведений

Объект РегистрСведенийМенеджер предоставляет доступ к действиям с конкретным регистром. Этот объект позволяет открыть нужную выборку с помощью методов Выбрать и ВыбратьПоРегистратору, создать новый набор записей, создать менеджер записи и ключ записи, через него можно получить форму и макет регистра сведений.


Менеджер регистра сведений


Менеджер регистров сведений

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

РегКурсы= РегистрыСведений.КурсыВалют;

ОтвСотр = РегистрыСведений.ОтветственныеСотрудники;

Объект РегистрыСведенийМенеджер является коллекцией, и для него доступен обход элементов с помощью конструкции «Для Каждого».


Менеджер регистров сведений


Менеджер записи регистра сведений

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

Например, следующая программа удаляет безвозвратно все записи из регистра сведений КурсыВалютРасчетаЗарплаты:



Выборка = РегистрыСведений. КурсыВалютРасчетаЗарплаты.Выбрать();

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

МенеджерЗаписи = Выборка.ПолучитьМенеджерЗаписи();

МенеджерЗаписи.Удалить();

КонецЦикла;



Модуль набора записей

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

В модуле набора записей регистра могут располагаться процедуры-обработчики событий ПередЗаписью и ПриЗаписи:

МоментВремени



Содержит момент времени записи регистра.





Набор записей регистра сведений

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

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


Набор записей регистра сведений


Например:

РегКурсы = РегистрыСведений.КурсыВалют;

Отбор = Новый Структура("Валюта",ВыбВалюта);

СтруктураРесурсы = РегКурсы.Получить(ВыбДата, Отбор);

Сообщить(СтруктураРесурсы.Курс);

Сообщить(СтруктураРесурсы.Кратность);

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

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



·ПолучитьПервое,

·ПолучитьПоследнее,

·СрезПервых,

·СрезПоследних.



Метод ПолучитьПоследнее имеет следующий синтаксис:

ПолучитьПоследнее (<Конец периода>, <структура>)

Если он не находит запись в регистре по данной комбинации измерений точно на заданный период, то возвращается ближайшая более ранняя запись,
Например:


РегКурсы= РегистрыСведений.КурсыВалют;

Отбор = Новый Структура("Валюта",ВыбВалюта);

СтруктураРесурсы = РегКурсы.ПолучитьПоследнее(ВыбДата, Отбор);

Сообщить(СтруктураРесурсы.Курс);

Сообщить(СтруктураРесурсы.Кратность);

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

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



РегКурсы = РегистрыСведений.КурсыВалют;

тзКурсыВалютНаДату = РегКурсы.СрезПоследних(ВыбДата);

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


Например:



Выборка= РегистрыСведений.КурсыВалют.Выбрать();

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

Сообщить(СокрЛП(Выборка.Валюта) + " " +

СокрЛП(Выборка.Период) + " " +

СокрЛП(Выборка.Курс) ) ;

КонецЦикла;

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

Синтаксис метода Выбрать следующий:



НомерСтроки

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





Оптовая цена

Монитор 19"

340,00



Монитор LCD 22"



1999,00

Мышь 2х кноп.

1,70

1.50




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

Оптовая цена

Основная таблица регистра сведений

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

Самый простой случай ? получение всех записей регистра КурсыВалют:

ВЫБРАТЬ* ИЗ РегистрСведений.КурсыВалют



Ниже приведен
Основная таблица регистра сведений


Основная таблица



Предоставляет доступ ко всем записям регистра.





ПередЗаписью

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

Период



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





Периодичность



В пределах дня





Таблица записей этого регистра будет такова:




В пределах дня

Следующий запрос покажет только нужные поля из этого регистра:



ВЫБРАТЬ Период, Организация,

Физлицо, Должность, Состояние

ИЗ РегистрСведений.СведенияОСотрудниках



Периодичность


Создадим новый пустой набор

//создадимновый пустой набор записей, действующий на весь регистр

Набор = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();



//установим отбор по дате и валюте

//если этого не сделать, то весь регистр

//будет переписан новым набором

Набор.Отбор.Валюта.Значение = ВыбВалюта;

Набор.Отбор.Период.Значение = ВыбДата;

Набор.Отбор.Валюта.Использование = Истина;

Набор.Отбор.Период.Использование = Истина;



//добавим запись в набор (не в базу данных)

НовЗапись = Набор.Добавить();

НовЗапись.Валюта = ВыбВалюта;

НовЗапись.Период = ВыбДата;

НовЗапись.Курс = НовыйКурс;



//запишем набор в базу данных

//записи по заданному отбору будут переписаны

Набор.Записать(Истина);

Создадим новый пустой набор
Набор.Прочитать();

тзЗаписи = Набор.Выгрузить();

Набор.Загрузить(тзЗаписи);

Набор.Записать();

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



МассивКурсов = Набор.ВыгрузитьКолонку("Курс");

Набор.ЗагрузитьКолонку(МассивКурсов,"Курс");

Для удаления записей из набора существует два метода: Удалить и Очистить. Первый метод удаляет запись с заданным индексом, хотя в качестве параметра можно передавать и саму запись (объект типа РегистрСведенийЗапись). Второй метод полностью очищает набор, удаляя все записи. Обратите внимание, что записи удаляются из набора, а не из регистра сведений.


Создадим новый пустой набор



Нач = Новый МоментВремени(ВыбДатаВремяНачала);

Кон = Новый Граница(ВыбДатаВремяОкончания,ВидГраницы.Включая);

Отбор = Новый Структура("Валюта", ВыбВалюта);

Выборка = РегистрыСведений.КурсыВалют.Выбрать(Нач,Кон,Отбор);

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

Сообщить(СокрЛП(Выборка.Валюта) + " " +

СокрЛП(Выборка.Период) + " " +

СокрЛП(Выборка.Курс));

КонецЦикла;


Создадим новый пустой набор


непериодического регистра сведений понимаются значения

РегКурсы= РегистрыСведений.КурсыВалют;

Выборка = РегКурсы.Выбрать();

МенеджерЗаписи = РегКурсы.СоздатьМенеджерЗаписи();

Набор = РегКурсы.СоздатьНаборЗаписей();

ФормаСписка = РегКурсы.ПолучитьФормуСписка();

ОсновнойМакет = РегКурсы.ПолучитьМакет("Основной");

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

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

Метод Получить имеет два варианта синтаксиса:

ПриЗаписи

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


ПриЗаписи


Регистратор

Содержит ссылку на документ-регистратор движения.



Приведем пример обращения к одному из регистров, записываемых регистраторами (документами).

Возьмем регистр СведенияОСотрудниках и рассмотрим
Регистратор


РегистрСведенийКлючЗаписи

Этот объект нужен для идентификации записи. Он используется для позиционирования в списке на конкретной записи регистра.



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

Графически эту взаимосвязь можно представить следующим образом:



РегистрСведенийКлючЗаписи




Далее более подробно описаны типичные действия над регистром сведений с помощью этих объектов.

РегистрСведенийМенеджер

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





РегистрСведенийМенеджерЗаписи



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





РегистрСведенийНаборЗаписей



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





РегистрСведенийСписок



Обеспечивает управление списком записей регистра сведений в форме в элементе управления ТабличноеПоле.



РегистрСведенийВыборка

Обеспечивает обход записей регистра сведений (перебор).





РегистрСведенийЗапись

Доступ к одной записи набора регистра сведений. Объект возвращается методами других объектов, например, методом Добавить объекта РегистрСведенийНаборЗаписей.





РегистрыСведенийМенеджер



Предоставляет доступ к объектам РегистрСведенийМенеджер через свои свойства. Свойство глобального контекста РегистрыСведений является объектом именно этого типа.





Реквизиты регистра сведений

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

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

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

Выборка= РегистрыСведений.КурсыВалют.Выбрать();

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

Если Выборка.Источник = ЗаданныйИсточник Тогда

КонецЕсли;

КонецЦикла;


Реквизиты регистра сведений


Режим записи

При редактировании свойств регистра в Конфигураторе можно указать режим записи: «Независимый» и «Подчинение регистратору», что определяет, как будут вноситься записи в регистр: вручную или документами.

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













СрезПервых

(&ВыбДата, Валюта=&ВыбВалюта);



СрезПоследних

(&ВыбДата, Валюта=&ВыбВалюта);



Условие



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



Следующий запрос получает последние актуальные курсы всех валют на заданную дату (или на момент времени):

ВЫБРАТЬ Валюта, Курс

ИЗ РегистрСведений.КурсыВалют.

Виртуальная таблица получения среза первых записей

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

ВЫБРАТЬПериод, Валюта, Курс

ИЗ РегистрСведений. КурсыВалют.

Виртуальная таблица получения среза последних записей

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

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



Виртуальные таблицы

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

Для наглядного представления регистров сведений



Для наглядного представления регистров сведений с тремя измерениями, подошел бы куб или таблица с вложенными группировками. Примером такого регистра может служить регистр сведений МестаРаботыСотрудников с измерениями Сотрудник, Органи-зация, Подразделение и ресурсами Должность, ДатаПриема.

Структура регистра сведений МестаРаботыСотрудников такова:







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


Для наглядного представления регистров сведений


Выборка из регистра сведений

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


Выборка из регистра сведений


Разработка в 1С 8.0

Активность



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





Активность записей

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

Движения

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





ДвиженияИГраницыПериода

(по умолчанию)

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



Пример обращения к этой таблице приведен
ДвиженияИГраницыПериода


<Имя измерения>

Набор полей содержит значения измерений регистра. Имена полей соответствуют именам измерений.





Набор полей содержит значения измерений регистра. Имена полей соответствуют именам измерений.





<Имя реквизита>



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





<Имя ресурса>

Набор полей содержит значения ресурсов регистра.





<Имя ресурса>Оборот



Набор полей содержит обороты по ресурсам регистра. Имена полей соответствуют именам ресурсов с добавлением слова Оборот. Для оборотных регистров оборот подсчитывается как сумма всех движений. Для регистров остатков оборот подсчитывается как сумма всех движений Приход со знаком + (плюс) и Расход со знаком - (минус).





<Имя ресурса>Остаток



Набор полей содержит остатки ресурсов регистра. Имена полей соответствуют именам ресурсов с добавлением слова Остаток.



Следующий запрос показывает остатки по регистру УчетНоменклатуры:

ВЫБРАТЬ * ИЗ РегистрНакопления.УчетНоменклатуры.Остатки



В результате получим следующие записи.

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

Для этого у таблицы получения остатков имеются следующие параметры:



<Имя ресурса>Приход

Набор полей содержит суммы всех движений типа «приход» по ресурсам регистра. Имена полей соответствуют именам ресурсов с добавлением слова Приход. Это поле существует только для регистров остатков.





<Имя ресурса>Расход



Набор полей содержит суммы всех движений типа «расход» по ресурсам регистра. Имена полей соответствуют именам ресурсов с добавлением слова Расход. Это поле существует только для регистров остатков.





Измерения



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





Код:

Выборка= РегистрыНакопления.Остатки.Выбрать();

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

Если СокрЛП(Выборка.Комментарий) = ЗаданнаяСтрока Тогда

...

КонецЕсли;

КонецЦикла;


Код:


РегМенеджер = РегистрыНакопления.СтоимостнойУчетНоменклатуры;

Отбор = Новый Структура("Номенклатура",ВыбТовар);

тзОстатки = РегМенеджер.Остатки(,Отбор);

Если тзОстатки.Количество() > 0 Тогда

КоличествоТовара = тзОстатки[0].Количество;

СтоимостьТовара = тзОстатки[0].Сумма;

КонецЕсли;

Метод Обороты имеет следующий синтаксис:

Обороты(<Начало периода>,<Конец периода>,

<Отбор>,<Измерения>,<Ресурсы>)

Параметры Начало периода и Конец периода могут содержать дату, момент времени или объект типа Граница. Они указывают, за какой период нужно получить обороты. Остальные параметры аналогичны таким же параметрам метода Остатки.

Метод Обороты также возвращает таблицу значений, содержащую колонки с измерениями, указанными в параметре Измерения. Если производится обращение к регистру остатков, то названия колонок для ресурсов формируются следующим образом «<Имя ресурса>Приход» и «<Имя ресурса>Расход». При обращении к регистру оборотов названия колонок совпадают с именами ресурсов, как показано в следующем
Код:


Конец периода

Указывается конец периода расчета итогов.





Менеджер регистра накопления

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


Менеджер регистра накопления


Менеджер регистров накопления

Объект РегистрыНакопленияМенеджер через свои свойства предоставляет доступ к объектам РегистрНакопленияМенеджер. Свойство глобального контекста РегистрыНакопления является объектом именно этого типа, например:



РегОстатки = РегистрыНакопления.ОстаткиТоваров;

РегПродажи = РегистрыНакопления.Продажи;



Менеджер регистров накопления


Модуль набора записей

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

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


Модуль набора записей


Момент времени



Параметр может содержать дату, момент времени или объект типа Граница. Он указывает, на какой момент времени нужно получить остатки регистра.





МоментВремени



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



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

ВЫБРАТЬ Период, Регистратор, Номенклатура, Количество, Сумма

ИЗ РегистрНакопления.Продажи

Результат запроса показан ниже.


МоментВремени


Набор записей регистра накопления

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

У документов есть атрибут Движения, который предоставляет доступ к наборам записей этого документа по каждому регистру, поэтому при проведении документов сначала добавляются записи в набор, а затем набор записывается в базу данных. Можно создать новый набор записей из объекта РегистрНакопленияМенеджер, если вызвать его метод СоздатьНаборЗаписей,
Набор записей регистра накопления


Начало интервала, Конец интервала



Позволяют задать границы интервала и могут иметь тип «дата», МоментВремени или Граница.





Начало периода



Указывается начало периода расчета итогов.





Например:

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

Набор.Отбор.Регистратор.Значение = ВыбДок;

Набор.Прочитать();

Для Каждого движ Из Набор Цикл

Сообщить(движ.Сумма);

КонецЦикла;

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


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

Набор.Отбор.Регистратор.Значение = ВыбДок;

Движ = Набор.Добавить();

Движ.Регистратор = ВыбДок;

Движ.Номенклатура = ВыбТовар;

Движ.Контрагент = ВыбКонтрагент;

Движ.Период = РабочаяДата;

Движ.Количество = Количество;

Движ.Сумма = Сумма;

Набор.Записать(Ложь); //добавить к набору записей по документу

Например:



Выборка= РегистрыНакопления.Остатки.Выбрать();

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

Сообщить(СокрЛП(Выборка.Товар) + " " +

СокрЛП(Выборка.Склад) + " " +

СокрЛП(Выборка.Количество));

КонецЦикла;

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

Синтаксис метода Выбрать следующий:

Выбрать(<Начало интервала>,<Конец интервала>,<Отбор>,<Порядок>)

Назначение параметров метода Выбрать таково:



Ниже

ВЫБРАТЬ

Номенклатура, Склад, Период,

ВЫРАЗИТЬ(КоличествоНачальныйОстаток КАК ЧИСЛО(15,3)) НачОстаток,

ВЫРАЗИТЬ(КоличествоПриход КАК ЧИСЛО(15,3)) Приход,

ВЫРАЗИТЬ(КоличествоРасход КАК ЧИСЛО(15,3)) Расход,

ВЫРАЗИТЬ(КоличествоКонечныйОстаток КАК ЧИСЛО(15,3)) КонОстаток

ИЗ РегистрНакопления.УчетНоменклатуры.ОстаткиИОбороты(

&НачДата,&КонДата, Месяц,,Номенклатура=&ВыбТовар)

ИТОГИ

Сумма(НачОстаток),

Сумма(Приход),

Сумма(Расход),

Сумма(КонОстаток) ПО ОБЩИЕ


Этот запрос показывает остатки и обороты для конкретной номенклатуры по всем складам с разворотом по месяцам. Дополнительно подсчитываются общие итоги, что потребовало приведения данных к числовому типу с помощью конструкции ВЫРАЗИТЬ.

НомерСтроки

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



Следующий простой запрос показывает все поля из таблицы Обороты регистра Продажи:



ВЫБРАТЬ * ИЗ РегистрНакопления.Продажи.Обороты



Для регистра остатков УчетНоменклатуры картина будет немного другая:



ВЫБРАТЬ * ИЗ РегистрНакопления.УчетНоменклатуры.Обороты



Напомним, что для регистра остатков колонка <ИмяРесурса>Оборот рассчитывается как разность между колонками <ИмяРесурса>Приход и <ИмяРесурса>Расход. Таблица получения оборотов для регистра накопления имеет следующие параметры вызова:



Основная таблица регистра накопления

Основная таблица регистра накопления существует для обоих типов регистров (остатков и оборотов) и предоставляет следующие поля:



Отбор

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





Структура только с одним элементом, которая задает фильтр по полю. Ключ структуры описывает имя поля, а значение структуры ? значение отбора по этому полю.



Приведем пример выборки записей регистра накопления за определенный период по заданному
Отбор


ПересчитатьИтоги



Позволяет осуществить полный пересчет итогов регистра накопления.





Период

Содержит период (дату) записи регистра.





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






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





Периодичность



Указывается дополнительный разворот итогов по периодичности. Задается один из следующих вариантов: Период (не разворачивать), Регистратор, День, Неделя, Декада, Месяц, Квартал, Полугодие, Год.





ПолучитьПериодРассчитанныхИтогов

Возвращает дату, по которую рассчитаны итоги регистра накопления.





и загружаются записи, имеющие тот

МассивОстатков= Набор.ВыгрузитьКолонку("Количество");

Набор.ЗагрузитьКолонку(МассивОстатков,"Количество");

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

Для удаления записей из набора существует два метода Удалить и Очистить. Первый метод удаляет запись с заданным индексом, но в качестве параметра можно передавать и саму запись (объект типа РегистрНакопленияЗапись). Второй метод полностью очищает набор, удаляя все записи. Обратите внимание, что записи удаляются из набора, а не из регистра накопления.

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


и загружаются записи, имеющие тот


Менеджер регистра накопления позволяет пересчитывать

//обращениек регистру остатков

Отбор = Новый Структура("Номенклатура",ВыбТовар);

тзОбороты = РегистрыНакопления.УчетНоменклатуры.Обороты(,,Отбор);

Если тзОбороты.Количество() > 0 Тогда

ПриходТовара = тзОбороты[0].КоличествоПриход;

РасходТовара = тзОбороты[0].КоличествоРасход;

КонецЕсли;



//обращение к регистру оборотов

Отбор = Новый Структура("Номенклатура",ВыбТовар);

тзОбороты = РегистрыНакопления.Продажи.Обороты(,,Отбор);

Если тзОбороты.Количество() > 0 Тогда

ОборотТовара = тзОбороты[0].Сумма;

КонецЕсли;

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

к итогам регистра. Под итогами

РегОстатки= РегистрыНакопления.Остатки;

Выборка = РегОстатки.Выбрать();

МенеджерЗаписи = РегОстатки.СоздатьМенеджерЗаписи();

Набор = РегОстатки.СоздатьНаборЗаписей();

ФормаСписка = РегОстатки.ПолучитьФормуСписка();

ОсновнойМакет = РегОстатки.ПолучитьМакет("Основной");

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

Метод Остатки применим только для регистра остатков и не применим для регистра оборотов.Метод Обороты применим как для регистра оборотов, так и для регистра остатков.

Метод Остатки имеет следующий синтаксис:



Остатки(<Момент времени>, <Отбор>, <Измеренмя>, <Ресурсы>)



Ниже описаны параметры метода Остатки:



Регистратор



Содержит ссылку на документ-регистратор движения.







Содержит ссылку на документ-регистратор движения. Существует только в случае, если параметр Периодичность имеет значение Регистратор или Запись.





РегистрНакопленияКлючЗаписи



Этот объект нужен для идентификации записи в списке. Он используется для позиционирования в списке на конкретной записи регистра.

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

РегистрНакопленияКлючЗаписи


Далее более подробно описаны типичные действия над регистром накопления с помощью этих объектов.


РегистрНакопленияМенеджер

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





РегистрНакопленияНаборЗаписей



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





РегистрНакопленияСписок

Обеспечивает управление списком записей регистра накопления в форме в элементе управления ТабличноеПоле.





РегистрНакопленияВыборка



С помощью этого объекта можно организовать обход записей регистра накопления (перебор).





РегистрНакопленияЗапись

Обеспечивает доступ к одной записи набора регистра накопления. Этот объект возвращается методами других объе-тов, например, методом Добавить у объекта РегистрНакопленияНаборЗаписей.





Регистры оборотов

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

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

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

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


Регистры оборотов


Регистры остатки и регистры оборотов

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

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


Регистры остатки и регистры оборотов


Регистры остатков

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


Регистры остатков


РегистрыНакопленияМенеджер



Предоставляет доступ к объектам РегистрНакопленияМенеджер через свои свойства. Свойство глобального контекста РегистрыНакопления является объектом именно этого типа.





Ресурсы

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



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


Совпадают:

Набор.Прочитать();

тзЗаписи = Набор.Выгрузить();

Набор.Загрузить(тзЗаписи);

Набор.Записать();

Можно выгружать в массив и загружать из массива только одну колонку набора записей, для чего предназначены методы ВыгрузитьКолонку и ЗагрузитьКолонку
Совпадают:


Таблица получения оборотов

Таблица получения оборотов существует у регистра остатков и регистра оборотов. Эта таблица включает следующие поля:



Таблица получения остатков и оборотов

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

Таблица ОстаткиИОбороты предоставляет следующие поля:



·<Имя измерения>,

·<Имя ресурса>НачальныйОстаток,

·<Имя ресурса>КонечныйОстаток,

·<Имя ресурса>Оборот,

·<Имя ресурса>Приход,

·<Имя ресурса>Расход,

·Период (поле существует только, если в параметрах указана периодичность, не равная Период),

·Регистратор (если периодичность Регистратор или Запись),

·НомерСтроки (если периодичность Запись)



При вызове данной таблицы есть возможность указать следующие параметры:



·Начало периода,

·Конец периода,

·Периодичность,

·Метод дополнения,

·Условие.

Нуждается в пояснении параметр «Метод дополнения». Он задает один из следующих вариантов:



Таблица получения остатков

Таблица получения остатков существует только у регистра остатков и предоставляет в распоряжение разработчику следующие поля:



Товару:

Нач = Новый МоментВремени(ВыбДатаВремяНачала);

Кон = Новый Граница(ВыбДатаВремяОкончания,ВидГрачицы.Включая);

Отбор = Новый Структура("Товар",ВыбТовар);

Выборка = РегистрыНакопления.ОстаткиТоваров.Выбрать(Нач,Кон,Отбор);

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

Сообщить(СокрЛП(Выборка.Товар) + " " +

СокрЛП(Выборка.Склад) + " " +

СокрЛП(Выборка.Количество));

КонецЦикла;

Условие



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



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



ВЫБРАТЬ *

ИЗ РегистрНакопления.УчетНоменклатуры.Остатки(&ВыбДата,

Номенклатура=&ВыбТовар)




Условие


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



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

ВЫБРАТЬ * ИЗ РегистрНакопления.УчетНоменклатуры.Обороты(

&НачДата,

&КонДата,

Месяц,

Номенклатура=&ВыбТовар)



Условие


УстановитьПериодРассчитанныхИтогов



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



Актуальность итогов регистров можно также установить интерактивно, используя пункт меню «Операции УстановитьПериодРассчитанныхИтогов Управление итогами».


УстановитьПериодРассчитанныхИтогов


ВидДвижения

Значение системного перечисления ВидДвиженияНакопления, которое определяет вид движения записи ? приход или расход





Под итогами понимается сводная информация,



Под итогами понимается сводная информация, выдаваемая регистром накопления. Это могут быть ответы на следующие вопросы:



·остаток конкретного товара на конкретном складе,

·остаток конкретного товара на всех складах,

·стоимость всех товаров на конкретном складе.



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



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



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



Разработчик может использовать реквизиты для отбора нужных записей при обходе выборки или при использовании запроса. Следующий пример перебирает все записи регистра, у которых реквизит равен определенному значению:
function doExpand(paraNum, imageNum) { if (paraNum.style.display=="none") {paraNum.style.display=""; imageNum.src="arrowdn.gif"} else {paraNum.style.display="none"; imageNum.src="arrowrt.gif"} }




Под итогами понимается сводная информация,





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


Выборка из регистра накопления

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

Разработка в 1С 8.0

Движения без субконто

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

Обратите внимание, что для небалансовых измерений и ресурсов, а также для счета существуют поля с добавлением «Дт» и «Кт», например, ВалютаДт:



ВЫБРАТЬ

Период, //дата и время записи

Регистратор, НомерСтроки, //документ и номер строки

Организация, //балансовое измерение Организация

СчетДт, СчетКт, //счета дебета и кредита

Сумма, //балансовый ресурс Сумма

ВалютаДт, ВалютаКт, //небалансовое измерение Валюта

ВалютнаяСуммаДт, ВалютнаяСуммаКт, //небалансовый ресурс

КоличествоДт, КоличествоКт, //небалансовый ресурс Количество

ВалютнаяСумма

ЖО //реквизит записи ЖО

ИЗ РегистрБухгалтерии.Основной

Результат запроса представлен ниже:

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


Движения без субконто


Движения с указанием субконто

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

Это реализуется в следующем запросе:

ВЫБРАТЬ

Период, //дата и время записи

Организация, //балансовое измерение Организация

СчетДт, СчетКт, //счета дебета и кредита

Сумма, //балансовый ресурс Сумма

ВидСубконтоДт1, СубконтоДт1,//вид и значение субконто 1 по дебету

СубконтоДт2, //субконто 2 по дебету

СубконтоКт1 , СубконтоКт2, //субконто 1 и 2 по кредиту

КоличествоДт КолДт, КоличествоКт КолКт, //небалансовый ресурс

Количество

ЖО //реквизит записи ЖО

ИЗ РегистрБухгалтерии.Основной.ДвиженияССубконто

Результат запроса представлен ниже:

Движения с указанием субконто

Движения с указанием субконто


ДвиженияССубконто

Доступ к записям регистра бухгалтерии с учетом субконто.

Является расширением предыдущей таблицы.





Измерения

Организация

балансовый

Тип: СправочникСсылка.Организация

Валюта

небалансовый

Тип: СправочникСсылка.Валюты.

Только для признака учета - Валютный



Корреспонденция

В традиционном для стран СНГ бухгалтерском учете для балансовых счетов поддерживается корреспонденция. Это означает, что каждая проводка имеет дебет и кредит, причем сумма проводки по дебету равна сумме по кредиту, например, проводка Дт20 Кт70 на сумму 1000 руб.

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

В 1С: Предприятии 8.0 есть два типа регистров бухгалтерии:

·с поддержкой корреспонденции (обязательно указывается дебет и кредит каждой проводки),

·без поддержки корреспонденции (у каждой проводки есть вид движения ? дебет или кредит).



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

Оборотно-сальдовая ведомость

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



ВЫБРАТЬ

Счет КАК Счет,

СуммаНачальныйОстатокДт КАК НачОстДт,

СуммаНачальныйОстатокКт КАК НачОстКт,

СуммаОборотДт КАК ОборотДт,

СуммаОборотКт КАК ОборотКт,

СуммаКонечныйОстатокДт КАК КонОстДт,

СуммаКонечныйОстатокКт КАК КонОстКт

ИЗ

РегистрБухгалтерии.Основной.ОстаткиИОбороты(&НачДата,&КонДата)

УПОРЯДОЧИТЬ ПО

Счет.Код

ИТОГИ СУММА(НачОстДт), СУММА(НачОстКт),

СУММА(ОборотДт), СУММА(ОборотКт),

СУММА(КонОстДт), СУММА(КонОстКт)

ПО Счет



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

Результат представлен в виде сводной таблицы:

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

Обороты между счетами

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

ВЫБРАТЬ

ОсновнойОбороты.СчетКАК Счет,

ОсновнойОбороты.КорСчет КАК КорСчет,

ОсновнойОбороты.СуммаОборот КАК СуммаОборот

ИЗ

РегистрБухгалтерии.Основной.Обороты КАК ОсновнойОбороты

УПОРЯДОЧИТЬ ПО

Счет.Код, КорСчет.Код

ИТОГИ СУММА(СуммаОборот) ПО

Счет,

КорСчет

Результат запроса приведен ниже:

Обороты между счетами
Таблица Обороты также предоставляет поля Субконто и КорСубконто для того, чтобы получать обороты по субконто или между субконто.

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


Обороты между счетами


Обороты по счетам

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

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

ВЫБРАТЬ

ОсновнойОбороты.Счет КАК Счет,

ОсновнойОбороты.Организация КАК Организация,

ОсновнойОбороты.СуммаОборотДт КАК ОборотДт,

ОсновнойОбороты.СуммаОборотКт КАК ОборотКт

ИЗ

РегистрБухгалтерии.Основной.Обороты КАК ОсновнойОбороты

УПОРЯДОЧИТЬ ПО Счет.Код

ИТОГИ СУММА(ОборотДт), СУММА(ОборотКт) ПО

Счет,

Организация

Результат представлен в следующей сводной таблице:

Обороты по счетам

Обороты по счетам


Обороты



Получение оборотов по счетам и между счетами, а также по измерениям и субконто.





ОборотыДтКт



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



Каждая таблица-источник предоставляет свой набор полей. Некоторые таблицы имеют параметры, которые позволяют наложить ограничение на выборку, а также задать периодичность. Разберем на примерах, как извлекать из регистра бухгалтерии требуемую информацию. Реализуем некоторые стандартные бухгалтерские отчеты с помощью запросов.
function doExpand(paraNum, imageNum) { if (paraNum.style.display=="none") {paraNum.style.display=""; imageNum.src="arrowdn.gif"} else {paraNum.style.display="none"; imageNum.src="arrowrt.gif"} }




ОборотыДтКт


Основная таблица записей



Доступ к записям регистра бухгалтерии (проводкам). Доступна вся информация о проводке, кроме субконто.





Остатки

Получение остатков по счетам, измерениям и субконто.





Остатки по счетам

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

ВЫБРАТЬ

ОсновнойОстатки.Организация КАК Организация,

ОсновнойОстатки.Счет КАК Счет,

ОсновнойОстатки.СуммаОстаток КАК СуммаОстаток

ИЗ

РегистрБухгалтерии.Основной.Остатки КАК ОсновнойОстатки

УПОРЯДОЧИТЬ ПО

ОсновнойОстатки.Счет.Код

ИТОГИ СУММА(СуммаОстаток) ПО

Организация,

Счет

Результат запроса представлен в виде сводной таблицы:

Остатки по счетам

Остатки по счетам


ОстаткиИОбороты

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





Предопределенные счета

Разработчик может завести счета в плане счетов еще на этапе создания приложения. Такие счета называются предопределенными, и для них недоступны некоторые операции в режиме «Предприятие», например, такой счет нельзя удалить. Любой предопределенный счет имеет имя, по которому к нему будет производиться обращение в программных модулях. Например, счет 60 может иметь имя «Поставщики».

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

Предопределенные счета

Предопределенные виды субконто

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

Ниже показано окно для редактирования предопределенных видов характеристик:

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

Ресурсы



Сумма

балансовый

Тип: Число

Количество

небалансовый

Тип: Число

Только для признака учета - Количественный

ВалютнаяСумма

небалансовый

Тип: Число

Только для признака учета - Валютный



Структура регистра бухгалтерии

Ниже в примерах будет использован регистр бухгалтерии Основной, поддерживающий корреспонденцию и имеющий следующую структуру:




Субсчета

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

В новой версии возможны проводки по родительским счетам. Даже если у счета есть субсчета, то по нему могут делаться проводки, например, допускается проводка Дт20 Кт76, хотя у счетов 20 и 76 могут быть субсчета.

Маска кода счета никак не связана с иерархией счетов. Это означает, что у счета 20 могут быть субсчета «Общехоз» или, например, субсчет 25, однако это может привести к путанице, поэтому рекомендуется назначать код счета в соответствии с уровнем иерархии.


Субсчета


Валютные остатки по счетам

Так как в нашем регистре есть измерение Валюта, то возможно получить остатки по каждой валюте в разрезе счетов и организаций. Это можно сделать следующим запросом:

ВЫБРАТЬ

ОсновнойОстатки.Организация КАК Организация,

ОсновнойОстатки.Счет КАК Счет,

ОсновнойОстатки.Валюта КАК Валюта,

ОсновнойОстатки.ВалютнаяСуммаОстаток КАК Остаток

ИЗ

РегистрБухгалтерии.Основной.Остатки КАК ОсновнойОстатки

УПОРЯДОЧИТЬ ПО

ОсновнойОстатки.Счет.Код

ИТОГИ СУММА(Остаток) ПО

Организация,

Счет,

Валюта



Результат запроса показан ниже в виде сводной таблицы:

Валютные остатки по счетам

Валютные остатки по счетам


ЗначенияСубконто



Доступ к значениям субконто. Обычно эта таблица соединяется в запросе с какой-нибудь другой таблицей.





Разработка в 1С 8.0

Базовые

? это такие виды расчета, результаты которых используются при расчете данного вида расчета. Например, сумма по окладу используется при расчете доплаты к окладу, а основные начисления являются базовыми для расчета НДФЛ.





В каждом регистре выделены измененные

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

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



В каждом регистре выделены измененные


Документы

предназначены для ввода записей в регистры рас-чета. Например, документы Отпуск, Премия.





Графики

Если у регистра установлен флажок «Период действия», то можно заполнить свойства «График», «Значение графика» и «Дата графика». Фактически график представляет собой непериодический регистр сведений, описывающий распределение во времени исходных данных для расчета. Например, это может быть график работы организации с разбивкой по рабочим дням и часам, график продолжительности рабочих смен, расписание лекционных часов и т.д.

Ниже приведен пример регистра сведений, который служит графиком работы.

Графики

Измерения

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





Отчеты

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





Перерасчеты

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

Например, при изменении начислений сотрудника нужно пересчитать налоги. Тогда для вида расчета «НДФЛ» начисления будут являться ведущими видами расчета, что настраивается в плане видов расчета на закладке «Ведущие».

Допустим, у нас есть регистры расчета ОсновныеНачисления, Премии и Удержания. Налоги рассчитываются после всех начислений и премий, так как используют их результаты.

Для автоматического отслеживания актуальности записей о налогах по каждому сотруднику необходимо у регистра Удержания создать перерасчет с измерением Физлицо. В качестве данных базовых регистров назначается измерение Физлицо из регистра ОсновныеНачисления и регистра Премии.

Ниже на примере показана схема работы перерасчета:


Регистр расчета "Основные начисления"




Предопределенные виды расчета

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

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


Предопределенные виды расчета


Регистры сведений

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





Реквизиты

? дополнительная характеристика записи расчета. Реквизиты могут быть почти любого сохраняемого в базе данных типа. Например, реквизиты Дни и Часы для регистра ОсновныеНачисления, реквизит ДокументОснование для регистра Удержания.



Ниже на рисунке показана структура регистра расчета НачисленияСотрудников.


Ресурсы

? результаты расчета, например, ресурс Начислено для регистра ОсновныеНачисления, ресурс Удержано для регистра Налоги и т.д. Ресурсы могут быть только числового типа.





Сложность

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



В новой версии 1С:Предприятия для реализации сложных периодических расчетов предназначены следующие объекты:





Справочниках

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





Ведущие

? это виды расчета, при изменении результатов которых нужно пересчитать данный вид расчета. Например, при изменении оплаты по окладу «задним числом» необходимо пересчитать оплату отпуска, поскольку при расчете отпускных используется средняя зарплата сотрудника за предыдущие месяцы. Список ведущих видов расчета может не совпадать со списком базовых.





Вытесняющие

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



При вытеснении записи с определенным периодом действия ее фактический период действия может измениться, т.е. уменьшится или разделится на несколько интервалов. Например, запись об отпуске с 10 по 20 число месяца вытесняет запись об окладе, у которой период действия ? весь месяц. Тогда фактический период действия записи об окладе будет состоять из двух интервалов: с 1 по 9 число и с 21 по конец месяца.

Взаимосвязь видов расчета

Для каждого вида расчета в следующем окне указываются базовые, ведущие и вытесняющие его виды расчетов:

Взаимосвязь видов расчета
Ниже приведено описание этих взаимосвязей между видами расчета:





Запросы к регистрам расчета

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



·основная таблица записей регистра расчета,

·таблица фактического периода действия,

·таблица перерасчета.



С помощью средств механизма запросов можно группировать результаты расчета в необходимых разрезах, подсчитывать итоги, отбирать только нужные записи расчета. Это позволяет сформировать весь спектр необходимых отчетов, например, РасчетныеЛистки, ЛицевыеСчета, ВедомостьВыплатыЗарплаты и т.д. Механизм запросов был подробно описан в главе «Запросы». Список полей таблиц-источников регистров расчета приведен в документации.

Разработка в 1С 8.0

Чтение DBF-файла

Чтение DBF-файла производится еще проще:



ФайлDBF = Новый XBase;



ФайлDBF.ОткрытьФайл("с:\staff.dbf",,Истина); //только для чтения

ФайлDBF.Первая();



Пока НЕ ФайлDBF.ВКонце() Цикл



НовСотр = Справочники.Сотрудники.СоздатьЭлемент();

НовСотр.Наименование = ФайлDBF.Name;

НовСотр.Подразделение = ФайлDBF.Dер;

НовСотр.Оклад = ФайлDBF.Sum;

НовСотр.Записать() ;

ФайлDBF.Следующая();



КонецЦикла;

ФайлDBF.ЗакрытьФайл();


Чтение DBF-файла


Чтение XML

Чтение XML-документов производится через объект Чтение XML с помощью метода Прочитать:

Чт = Новый ЧтениеXML;

Чт.ОткрытьФайл(ПутьКФайлу);

Пока Чт.Прочитать() Цикл

Рез = "ТипУзла=" + Чт.ТипУзла;

Рез = Рез + " Имя='" + Чт.Имя;

Рез = Рез + "' ЛокальноеИмя='" + Чт.ЛокальноеИмя;

Рез = Рез + "' Префикс='" + Чт.Префикс;

Рез = Рез + "' Значение'" + Чт.Значение;

Рез = Рез + "' " ;

Сообщить(Рез) ;

КонецЦикла

Дополнительно система 1С:Предприятие 8.0 поддерживает преобразование с помощью XSL. Язык XSL или eXtensible Stylesheet Language ? это язык описания стилей отображения для XML-документов. Он позволяет описать способ отображения документов для различных носителей, будь то окно вебобозревателя или устройство печати. Данные в формате XML форматируются с помощью таблицы стилей в формате XSL, в результате создается отображение данных в соответствии с заданными стилями.

Полный список объектов, их свойств и методов для работы с XML-документами приведен в документации.









ДобавитьСтроку



Добавляет строку в конец текстового документа.





Индексы

Для упорядочивания содержимого DBF-файла и поиска в нем по значению одного или нескольких полей применяется механизм индексов. Его применение можно сравнить с сортировкой картотеки по определенному признаку (совокупности признаков). Однако, в отличие от картотеки, файл может иметь сразу несколько индексов, и, соответственно, являться упорядоченным одновременно по нескольким признакам.

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





Интернет-соединение

С помощью объекта ИнтернетСоединение можно устанавливать и разрывать соединение с провайдером через коммутируемые линии (модем). После установления соединения можно отправлять и принимать почту, обращаться к сайтам (веб-серверам) по протоколам HTTP/HTTPS и к FTP-серверам.

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


Интернет-соединение


Электронная почта (e-mail)

Для работы с электронной почтой в 1C:Предприятии 8.0 существуют следующие объекты:





КоличествоСтрок



Получает количество строк в тексте.





КомандаСистемы



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



Объект «ЧтениеТекста»

Объект ЧтениеТекста предназначен для последовательного чтения текстовых файлов. Следующий фрагмент прочитает ранее записанный файл:

Файл = Новый

ЧтениеТекста("с:\test.txt",КодировкаТекста.ANSI,Символы.ПС);

Строка1 = Файл.Прочитать(7);

Строка2 = Файл.ПрочитатьСтроку();

Строка3 = Файл.Прочитать();

Файл.Закрыть();











Объект «ТекстовыйДокумент»

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

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





Объект «ЗаписьТекста»

Объект ЗаписьТекста предназначен для последовательной записи текстовых файлов.

Приведенный ниже фрагмент запишет небольшой текстовый файл:

Файл= Новый

ЗаписьТекста("с:\test.txt",КодировкаТекста.ANSI.Символы.ПС);

Файл.Записать("Строка1");

Файл.ЗаписатьСтроку("Строка2");

Файл.Записать("Строка3");

Файл.3акрыть();

В результате работы программы получится следующий текстовый файл:

Строка1Строка2

Строка3


Объект «ЗаписьТекста»


Поле HTML-документа

Элемент управления ПолеНТМL Документа позволяет отобразить HTML-страницу. Это могут быть как локальные страницы, так и страницы из Интернета.

У данного элемента управления есть метод Перейти, который позволяет указать адрес страницы (URL) или HTML-макет, хранящийся в конфигурации.

Следующий фрагмент демонстрирует, как можно указать адрес сайта (веб-сервера) для данного элемента управления:

ЭлементыФормы.ПолеНТМLДокумента.Перейти("http://www.1c.ru");


Поле HTML-документа


ПолучитьСтроку

Получает строку текстового документа по номеру.



Следующий пример демонстрирует применение этих методов:



Текст = Новый ТекстовыйДокумент;

Текст.Прочитать("catalog.txt", КодировкаТекста.ANSI);

Текст.ЗаменитьСтроку(52, "Установка оборудования " + Стоимость);

Текст.ВставитьСтроку(53, "Замена оборудования... ");

Текст.УдалитьСтроку(10);

Текст.ДобавитьСтроку("Конец файла");

Для н = 1 По Текст.КоличествоСтрок() Цикл

стр = Текст.ПолучитьСтроку(н);

сообщить(стр);

КонецЦикла;

Текст.Записать("catalog2.txt",КодировкаТекста.ANSI);

Текст.ТолькоПросмотр = Истина;

Текст.Показать();

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

стр = ТекстДок. ПолучитьТекст ();

ТекстДок.УстановитьТекст(стр);

Метод Очистить позволяет полностью очистить текстовый документ (удалить все строки). С помощью метода Показать текстовый документ можно отобразить на экране. Если установить свойство ТолькоПросмотр в значение Истина, то пользователь не сможет изменить текстовый документ.


ПолучитьСтроку


Последовательный доступ к тексту

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


Последовательный доступ к тексту


Работа с FTP

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

Ниже показан простой пример, в котором устанавливается соединение с FTP-сервером, скачивается один файл, а на его место помещается другой:



FTP = Новый FTPСоединение

("ftp://ftp.mysite.ru",21,"login","password");

FTP.УстановитьТекущийКаталог("htdocs");

FTP.Получить("index.htm", "с:\old\index.htm");

FTP.Записать("с:\new\index.htm", "index.htm");





Удаленные записи

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


Удаленные записи


Удалить Строку

Удаляет из текстового документа строку с указанным номе-ром.





ВставитьСтроку



Вставляет в текстовый документ строку с указанным номе-ром.





Приведенный ниже пример подключает внешнюю





Приведенный ниже пример подключает внешнюю компоненту Math.dll', содержащую различные математические функции, и использует из нее генератор псевдослучайных чисел:

ЗагрузитьВнешнююКомпоненту("Math.dll");

МФ = Новый("Addln.Math");

//Для инициализации датчика случайных чисел используется процедура MO.SRAND(IOOO);

//параметр может быть от 0 до 32767

Для н = 1 По 10 Цикл

Сообщить(МФ.RAND()); //случайное число в промежутке от 0 до 32767

КонецЦикла;

Разработчик внешней компоненты Math.dll ? внедренческий центр «Чип и Дейл» (Новосибирск)

ЗаменитьСтроку

Заменяет строку с указанным номером на переданную.





Запись DBF-файла

Следующий фрагмент программы создает DBF-файл с тремя полями и выгружает в него справочник Сотрудники:

ФайлDBF = Новый XBase;



ФайлDBF.Поля.Добавить("Name","S",100);

ФайлDBF.Поля.Добавить("Dep","S",50);

ФайлDBF.Поля.Добавить("Sum","N",10,2);



ФайлDBF.Кодировка = КодировкаХВаsе.ОЕМ; //кодировка DOS

ФайлDBF.СоздатьФайл("с:\staff.dbf");

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

Пока Сотрудники.Следующий() Цикл

ФайлDBF.Добавить();

ФайлDBF.Name = Сотрудники.Наименование;

ФайлDBF.Dер = Сотрудники.Подразделение;

ФайлDBF.Sum = Сотрудники.Оклад;

ФайлDBF.Записать();

КонецЦикла;

ФайлDBF.ЗакрытьФайл();


Запись DBF-файла


Запись XML

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

Файл = Новый ЗаписьXML;

Файл.ОткрытьФайл(ПутьКФайлу);

Файл.ЗаписатьОбъявлениеXML();

Файл.ЗаписатьНачалоЭлемента("goods");

Файл.ЗаписатьНачалоЭлемента("good");

Файл.ЗаписатьНачалоЭлемента("name");

Файл.ЗаписатьТекст("Ботинки");

Файл.ЗаписатьКонецЭлемента();

Файл.ЗаписатьНачалоЭлемента("price");

Файл.ЗаписатьТекст(XMLСтрока(600));

Файл.ЗаписатьКонецЭлемента();

Файл.ЗаписатьКонецЭлемента();

Файл.ЗаписатьНачалоЭлемента("good");

Файл.3аписатьНачалоЭлемента("name");

Файл.ЗаписатьТекст("Сапоги");

Файл.ЗаписатьКонецЭлемента();

Файл.ЗаписатьНачалоЭлемента("price");

Файл.ЗаписатьТекст(XMLСтрока(1000)) ;

Файл.ЗаписатьКонецЭлемента();

Файл.ЗаписатьКонецЭлемента();

Файл.ЗаписатьКонецЭлемента() ;

В результате работы программы получился следующий XML-документ:









Ботинки

600





Сапоги

1000






Запись XML


ЗапуститьПриложение



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







    Бухгалтерия: Автоматизация - Система 1С