Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичко.docx
Скачиваний:
47
Добавлен:
13.04.2015
Размер:
4.53 Mб
Скачать

Методичко

Введение

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

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

Конфигурация создается штатными средствами системы. Конфигурация обычно поставляется фирмой «1С» в качестве типовой для конкретной области применения, но может быть изменена, дополнена пользователем системы, а также разработана заново.

Функционирование системы

Функционирование системы делится на два процесса — конфигурирование (описание модели предметной области средствами системы) и исполнение (обработку данных предметной области).

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

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

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

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

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

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

Программные модули системы

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

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

Для размещения текста программы в системе 1C-Предприятие существуют несколько видов программных модулей. Они различаются по месту размещения и доступному контексту.

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

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

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

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

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

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

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

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

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

    Текст программного модуля.

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

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

    Пример:

    // Это - комментарий

    А=В; // Это тоже комментарий

    Имена переменных, процедур и функций

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

    Язык написания программных модулей

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

    Регистры букв при написании программных модулей

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

    Функции сообщить

    Конструкции встроенного языка

    Конструкции встроенного языка могут записываться на русском или английском языке, кроме нескольких слов, для которых нет подходящих русских эквивалентов, например, Null.

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

    Ниже описаны основные конструкции встроенного языка 1C:Предприятия 8.0.

    Условия

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

    Примеры:

    //1-й пример

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

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

    КонецЕсли;

     

    //2-й пример

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

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

    Иначе

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

    КонецЕсли;

     

    //3-й пример

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

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

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

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

    Иначе

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

    КонецЕсли;

    Ключевые слова ИначеЕсли, Иначе и КонецЕсли желательно записывать с новой строки.

    1. Конструкция «?(..., ..., ...)».Данная конструкция позволяет записать условный оператор в одну строку и вычислить его как выражение.

    Пример:

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

    Циклы

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

    Для Месяц = 1 По 12 Цикл

    Сообщить(Месяц);

    КонецЦикла;

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

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

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

    //тело цикла

    Если СтрокаТЗ.Наименование = "" Тогда

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

    Иначе

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

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

    КонецЕсли;

    КонецЕсли;

    КонецЦикла;

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

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

    Н = 0;

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

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

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

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

    КонецЕсли;

    Н = Н + 1;

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

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

    КонецЕсли;

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

    КонецЦикла;

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

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

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

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

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

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

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

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

    Например:

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

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

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

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

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

    ЦенаСоСкидкой = ПолучитьЦенуСоСкидкой();

    Если Цена =10 ИЛИ Цена = ЦенаСоСкидкой Тогда

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

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

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

    Типы данных в системе 1С: Предприятие

    Прикладное решение 1С: Предприятия оперирует различными величинами: числами, символами, объектами. Каждая величина имеет тип. Тип величины определяет возможные значения и набор определенных для них операций.

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

    Примитивные типы данных

    1. Числочисловым типом может быть представлено любое десятичное число. Над данными числового типа определены основные арифметические операции: сложение, вычитание, умножение и деление. Максимально допустимая разрядность числа 38 знаков.Литералы - набор цифр, написанных непосредственно в тексте модуля. В качестве разделителя целой и дробной части используется "." (точка).

    А = 10.53;

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

    • Функции округления:Цел(вычисляет целую часть переданного числа, полностью отсекая дробную часть) иОкр(округляет исходное число до нужной разрядности в соответствии с заданным режимом округления.)

    МожноКупить = Цел(Наличность/Цена);

    А = Цел (3.44); // А=3

    А = Цел (3.99); // А=3

    А = Окр(324.5654 , -2); // А=300 А = Окр(324.5654, 2); // А=324,56

    • Степенные:Sqrt(вычисляет квадратный корень параметра)и Pow(возводит число, переданное в качестве первого параметра в степень, переданную в качестве второго параметра)

    А=Sqrt(25); // A=5

    A=Pow(5,2); // A=25

    A=Pow(5,3); // A=125

    A=Pow(5,4); // A=625

    • Тригонометрические: – Sin, Cos,Tan, ASin, ACos, ATan. При использовании тригонометрических функций углы передаются и возвращаются в радианах.

    • Логарифмические:–Exp, Log, Log10.

    1. Строка – значения данного типа содержат строку в формате Unicode произвольной длины.Литералы строкового типа представляют собой набор символов заключенных в кавычки. Для задания в строке символа " (кавычка) необходимо записать две кавычки подряд. Кроме того, допускаются "многострочные" строковые константы. В исходном тексте многострочные константы могут задаваться двумя способами:

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

    • Каждая отдельная составляющая не замыкается кавычками, а на каждой последующей строке помещен символ переноса строки | (вертикальная черта). В этом варианте комментарии допускаются, если строка начинается с символа комментария //.

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

    Длина = СтрДлина("Иванов Иван Иванович"); //Получить длину строки.

    ФИО = СокрЛ(ФИО); //убрать пробелы слева

    ФИО = СокрП(ФИО); //убрать пробелы справа

    ФИО = СокрЛП(ФИО); //убрать пробелы слева и справа

    АБ = Лев("АБВГДЕ",2); //левая часть строки

    ГДЕ = Прав("АБВГДЕ",3); //правая часть строки

    БВГ = Сред("АБВГДЕ",2,3); //получить часть строки из середины

    БВГДЕ = Сред("АБВГДЕ",2); //получить правую часть строки, зная первую позицию

    НомерСимвола = Найти(ФИО, " "); //найти позицию первого пробела

    НоваяСтрока = СтрЗаменить(ПрежняяСтрока," ", "_"); //Замена одной подстроки на другую.

    //изменение регистра букв

    ФИОЗаглавнымиБуквами = ВРЕГ(ФИО); //заглавные

    ФИОстрочнымиБуквами = нрег(ФИО); //строчные

    // Проверка строки на наличие значащих символов

    ФамилияЗаполнена = ПустаяСтрока(Сотрудник.Фамилия);

    1. Дата – значения данного типа содержит дату григорианского календаря (с 01 января 0001 года) и время с точностью до секунды. Литералы: строка цифр, заключенная в одинарные кавычки вида: 'ГГГГММДДччммсс', где:

    • ГГГГ - четыре цифры года (включая тысячелетие и век);

    • ММ - две цифры месяца;

    • ДД - две цифры даты;

    • чч - две цифры часа (в 24-х часовом формате);

    • мм - две цифры минут;

    • сс - две цифры секунд;

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

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

    СегодняВ1С = РабочаяДата; //дата в параметрах 1С

    СегодняВСистеме = ТекущаяДата(); //дата в операционной системе

    НекаяДата='2010.08.17 15:39:45';

    // получение начала/конца интервала по некой дате

    НачалоМинуты = НачалоМинуты(НекаяДата); // 2010.08.17 15:39:00

    КонецМинуты = КонецМинуты(НекаяДата); // 2010.08.17 15:39:59

    НачалоЧаса = НачалоЧаса(НекаяДата); // 2010.08.17 15:00:00

    КонецЧаса = КонецЧаса(НекаяДата); // 2010.08.17 15:59:59

    НачалоДня = НачалоДня(НекаяДата); // 2010.08.17 00:00:00

    КонецДня = КонецДня(НекаяДата); // 2010.08.17 23:59:59

    НачалоНедели = НачалоНедели(НекаяДата); // 2010.08.15 00:00:00

    КонецНедели = КонецНедели(НекаяДата); // 2010.08.21 23:59:59

    НачалоМесяца = НачалоМесяца(НекаяДата); // 2010.08.01 00:00:00

    КонецМесяца = КонецМесяца(НекаяДата); // 2010.08.31 23:59:59

    НачалоКвартала = НачалоКвартала(НекаяДата);// 2010.07.01 00:00:00

    КонецКвартала = КонецКвартала(НекаяДата); // 2010.09.30 23:59:59

    НачалоГода = НачалоГода(НекаяДата); // 2010.01.01 00:00:00

    КонецГода = КонецГода(НекаяДата); // 2010.12.31 23:59:59

    // Выделить из даты год, месяц, число, час, минуту и секунду.

    Год = Год(НекаяДата); // 2010

    Месяц = Месяц(НекаяДата); // 8

    День = Число(НекаяДата); // 17

    Час = Час(НекаяДата); // 15

    Минута = Минута(НекаяДата); // 39

    Секунда = Секунда(НекаяДата); // 45

    // Получение количества дней с начала периода

    ДеньГода = ДеньГода(НекаяДата);

    ДеньНедели = ДеньНедели(НекаяДата);

    // Прибавление к дате нескольких месяцев.

    // Если число отрицательное, то отсчет ведется назад.

    ДатаЧерезДваМесяца = ДобавитьМесяц(НекаяДата,2); //2010.10.17 15:39:45

    ДатаДваМесяцаНазад = ДобавитьМесяц(НекаяДата,-2); //2010.06.17 15:39:45

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

    А = Неопределено;

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

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

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

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

    Перечислим кратко возможности основных универсальных коллекций:

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

    2. Структура– представляет собой поименованную коллекцию, состоящую из пар Ключ - Значение. Ключ может быть только строковым, значение - произвольного типа. К элементу структуры можно обращаться по значению его ключа, т.е. по имени. Обычно используется для хранения небольшого количества значений, каждое из которых имеет некоторое уникальное имя.

    3. Соответствие– также как и Структура, представляет собой коллекцию пар Ключ - Значение. Однако, в отличие от Структуры, ключ может быть практически любого типа.

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

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

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

    Интерфейсные объекты. Форма

    Прикладные объекты встроенного языка

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

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

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

    Менеджер конкретной информационной структуры - этот вид объектов предоставляет средства для работы с конкретнойинформационной структурой (например, менеджер документа Приходная накладная - ДокументМенеджерЛриходнаяНакладная).

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

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

    Ссылка - объекты этого вида служат для указания ссылки на объект базы данных и кроме этого предоставляют некоторуюинформацию об этом объекте (например, документ - ДокументСсылка.<имя>).

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

    Список - объекты этого вида предназначены для управления списком объекта, отображаемым в табличном поле (перечисление -ПеречислениеСписок.<имя>). Их использование имеет смыл только при выводе информации в табличное поле.

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

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

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

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

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

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

    //Процедура Проверка() в модуле справочника

    Процедура Проверка() Экспорт

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

    //Вызов процедуры как метода объекта Справочник

    Клиент = Справочники.Клиенты.НайтиПоКоду(1).ПолучитьОбъект();

    Клиент.Проверка();

    Таблица 1.1. Работа с данными объектов

    Объект конфигурации

    База данных -

    структура манипулирования данными

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

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

    Константа

    Константа

    КонстантаМенеджерЗначения.<имя>

    Справочник

    Элемент справочника

    СправочникОбъект.<имя>

    Документ

    Документ

    ДокументОбъект.<имя>

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

    Набор записей последовательности

    ПоследовательностьНаборЗаписей.<имя>

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

    Вид характеристики

    ПланВидовХарактеристикОбъект.<имя>

    План счетов

    Счет

    ПланСчетовОбъект.<имя>

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

    Вид расчета

    ПланВидовРасчетаОбъект.<имя>

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

    Набор записей регистра сведений

    РегистрСведенийНаборЗаписей.<имя> (РегистрСведенийМенеджерЗаписи.<имя>)

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

    Набор записей регистра накопления

    РегистрНакопленияНаборЗаписей.<имя>

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

    Набор записей регистра бухгалтерии

    РегистрБухгалтерииНаборЗаписей.<имя>

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

    Набор записей регистра расчета

    РегистрРасчетаНаборЗаписей.<имя>

    Справочники

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

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

    Рис. 1.8. Объекты встроенного языка для работы со справочниками (заливкой выделен объект манипулирования данными)

    Использование объектов:

    1. ГлобальныйКонтекст => СправочникиМенеджер.Доступ к объекту СправочникиМенеджер осуществляется из глобального контекста. Используется для доступа к справочникам вообще.

    //Ключевые слова: Справочники

    // Пример: Вывести все типы ссылок на элементы справочников,

    // существующие в конфигурации

    Массив = Справочники.ТипВсеСсылки().Типы();

    Для Каждого ОчереднойТип из Массив Цикл

    Сообщить(ОчереднойТип);

    КонецЦикла;

    1. СправочникиМенеджер =>СправочникМенеджер. Используется для доступа к необходимому справочнику.

    // Ключевые слова:

    // .<имя справочника>

    // [<имя справочника>]

    // Для Каждого … Из … Цикл … КонецЦикла;

    // Пример:Создать новую группу справочника Номенклатура

    НоваяГруппа = Справочники.Номенклатура.СоздатьГруппу();

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

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

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

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

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

    1. СправочникМенеджер =>СправочникСсылка. Используется для доступа к конкретному элементу конкретного справочника.

    // Ключевые слова:

    // .НайтиПоКоду()

    // .НайтиПоНаименованию()

    // .НайтиПоРеквизиту()

    // .ПустаяСсылка()

    // .ПолучитьСсылку()

    // .<имя предопределенного элемента справочника>

    // Пример:Проверить, помечен ли на удаление элемент справочника Номенклатура с кодом 13

    Если Справочники.Номенклатура.НайтиПоКоду(13).ПометкаУдаления тогда

    Сообщить("Элемент с кодом 13 помечен на удаление");

    КонецЕсли;

    // Пример:Является ли элемент справочника Номенклатура с наименованием Услуги группой

    Если Справочники.Номенклатура.НайтиПоНаименованию("Услуги", Истина).ЭтоГруппа тогда

    Сообщить("Элемент Услуги является группой");

    КонецЕсли;

    // Пример:Проверить, что для всех элементов задан вид номенклатуры

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

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

    Сообщить("Есть элементы для которых не задан вид номенклатуры");

    КонецЕсли;

    // Пример:Передать пустую ссылку в параметр метода

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

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

    // Ключевые слова:

    // .Выбрать()

    // .ВыбратьИерархически()

    // Пример: Вывести список элементов, расположенных в корне справочника

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

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

    Если Не Выборка.ЭтоГруппа тогда

    Сообщить(Выборка);

    КонецЕсли;

    КонецЦикла;

    // Пример: Удалить все элементы иерархического справочника

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

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

    Выборка.Удалить();

    КонецЦикла;

    1. СправочникМенеджер =>СправочникОбъект. Используется для создания новых элементов выбранного справочника.

    // Ключевые слова:

    // .СоздатьГруппу()

    // .СоздатьЭлемент()

    // Пример: Создать новый элемент справочника Сотрудники

    НовыйЭлемент = Справочники.Сотрудники.СоздатьЭлемент();

    НовыйЭлемент.Наименование = "Смирнов Андрей Анатольевич";

    // Заполнить табличную часть.

    НоваяСтрокаТабличнойЧасти = НовыйЭлемент.ТрудоваяДеятельность.Добавить();

    НоваяСтрокаТабличнойЧасти.Организация = "ООО НТЦ";

    НоваяСтрокаТабличнойЧасти.НачалоРаботы = Дата(2003,05,01);

    НоваяСтрокаТабличнойЧасти.ОкончаниеРаботы = Дата(2003,12,31);

    НоваяСтрокаТабличнойЧасти.Должность = "Программист";

    НовыйЭлемент.Записать();

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

    // Ключевые слова:

    // .Владелец

    // .Родитель

    // .Ссылка

    // Пример:запретить изменение подчиненных элементов, если у владельца

    // установлено соответствующее свойствоИзмененияЗапрещены в модуле формы

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

    Процедура ПередЗаписью(Отказ)

    Если Владелец.ИзмененияЗапрещены Тогда

    Отказ = Истина;

    КонецЕсли;

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

    1. СправочникСсылка =>СправочникОбъект. Как правило, доступ к объекту из его ссылки получают с целью изменения этого элемента.

    // Ключевые слова:

    // .ПолучитьОбъект()

    // .Скопировать()

    // Пример:Изменить наименование элемента справочника

    Элемент = Справочники.Номенклатура.НайтиПоКоду(10).ПолучитьОбъект();

    Элемент.Наименование = "Мое новое наименование";

    Элемент.Записать();

    // Пример:Заполнить справочник тестовыми данными

    Элемент = Справочники.Номенклатура.СоздатьЭлемент();

    Элемент.Наименование = "Тестовый элемент";

    Элемент.Записать();

    Для ш = 1 по 1000 Цикл

    НовыйЭлемент = Элемент.Скопировать();

    НовыйЭлемент.Записать();

    КонецЦикла;

    1. СправочникВыборка =>СправочникСсылка. Используется для подстановки ссылки на текущий элемент выборки справочника в реквизит или параметр.

    // Ключевые слова:

    // .Ссылка

    // Пример:Заполнить табличную часть документа ПриходнаяНакладная всеми

    //элементами из указанной группысправочника Номенклатура

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

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

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

    Если СсылкаНаНоменклатуру.ЭтоГруппа тогда

    Продолжить;

    КонецЕсли;

    НоваяСтрока = Материалы.Добавить();

    НоваяСтрока.Материал = СсылкаНаНоменклатуру;

    КонецЦикла;

    1. СправочникВыборка => СправочникОбъект. Используется для доступа к обекту текущего элемента выборки, как правило, для редактирования

    // Ключевые слова:

    // .ПолучитьОбъект()

    // Пример: пометить все элементы неиерархического справочника на удаление

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

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

    Выборка.ПолучитьОбъект().УстановитьПометкуУдаления(Истина);

    КонецЦикла;

    Рис. 1.9. Последовательность событий при записи элемента справочника из формы элемента

    Документы

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

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

    Структура каждого конкретного вида документа определяется при его создании в конфигураторе. У любого вида документа существуют реквизиты, которые создаются автоматически - это "Дата" и "Номер". Номер создается, если при конфигурировании длина номера указана больше 0. Другие реквизиты документа определяются в конфигураторе отдельно для каждого создаваемого вида документа.

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

    Рис. 1.10. Объекты встроенного языка для работы с документами

    *Заливкой выделен объект манипулирования данными

    Использование объектов:

    1. ГлобальныйКонтекст =>ДокументыМенеджер.Доступ к объекту ДокументыМенеджер осуществляется из глобального контекста. Используется для доступа к документам вообще.

    // Ключевые слова:Документы

    // Пример:Вывести все типы ссылок на элементы справочников,

    //существующие в конфигурации

    Массив = Документы.ТипВсеСсылки().Типы();

    Для Каждого ОчереднойТип из Массив Цикл

    Сообщить(ОчереднойТип);

    КонецЦикла;

    1. ДокументыМенеджер =>ДокументМенеджер. Используется для доступа к необходимому документу.

    // Ключевые слова:

    // .<имя документа>

    // [<имя документа>]

    // Для Каждого … Из … Цикл … КонецЦикла;

    // Пример:Открыть форму нового документа ОказаниеУслуги для интерактивного заполнения

    Форма = Документы["ОказаниеУслуги"].ПолучитьФормуНовогоДокумента();

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

    // Пример:Открыть формы списка всех документов, существующих в конфигурации

    Для КаждогоОчереднойДокументИзДокументыЦикл

    Форма = ОчереднойДокумент.ПолучитьФормуСписка();

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

    КонецЦикла;

    1. ДокументМенеджер =>ДокументСсылка. Используется для доступа к конкретному документу конкретного вида документов.

    // Ключевые слова:

    // .НайтиПоНомеру()

    // .НайтиПоРеквизиту()

    // .ПустаяСсылка()

    // Пример:Проверить, проведен ли документ ПриходнаяНакладная с номером 3

    Если Документы.ПриходнаяНакладная.НайтиПоНомеру(3).Проведен тогда

    Сообщить("Документ с номером 3 проведен");

    КонецЕсли;

    // Пример:Проверить, что во всех документах ПриходнаяНакладная заполнен реквизит Склад

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

    Если Не Документы.ПриходнаяНакладная.НайтиПоРеквизиту("Склад",ПустаяСсылкаСклада).Пустая() Тогда

    Сообщить("Есть документы, у которых не заполнен реквизит Склад");

    КонецЕсли;

    1. ДокументМенеджер =>ДокументВыборка. Используется для выборки всех или части документов определенного вида.

    // Ключевые слова:

    // .Выбрать()

    // Пример:Выбрать все документы ПриходнаяНакладная за текущий месяц

    Выборка = Документы.ПриходнаяНакладная.Выбрать(НачалоМесяца(ТекущаяДата()), КонецМесяца(ТекущаяДата()));

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

    Сообщить(Выборка);

    КонецЦикла;

    1. ДокументМенеджер =>ДокументОбъект. Используется для создания новых документов определенного вида.

    // Ключевые слова:

    // .СоздатьДокумент()

    // Пример:Создать новый документ ПриходнаяНакладная

    НовыйДокумент = Документы.ПриходнаяНакладная.СоздатьДокумент();

    НовыйДокумент.Дата = ТекущаяДата();

    НовыйДокумент.Склад = Справочники.Склады.Основной;

    // Заполнить табличную часть.

    НоваяСтрокаТабличнойЧасти = НовыйДокумент.Материалы.Добавить();

    НоваяСтрокаТабличнойЧасти.Материал = Справочники.Номенклатура.НайтиПоКоду(6);

    НоваяСтрокаТабличнойЧасти.Количество = 10;

    НоваяСтрокаТабличнойЧасти.Цена = 22,5;

    НоваяСтрокаТабличнойЧасти.Сумма = 225;

    НовыйДокумент.Записать();

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

    // Ключевые слова:

    // .Ссылка

    // Пример:В модуле объекта вызвать процедуру проверки заполнения реквизитов документа

    Если Не ПроверитьЗаполнениеРеквизитов(ЭтотОбъект.Ссылка) тогда

    Сообщить(«Реквизиты документа не заполнены!»);

    КонецЕсли;

    1. ДокументСсылка =>ДокументОбъект. Как правило, доступ к объекту из его ссылки получают с целью изменения этого документа.

    // Ключевые слова:

    // .ПолучитьОбъект()

    // .Скопировать()

    // Пример: Пометить документ на удаление

    НенужныйДокумент = Документы.ОказаниеУслуги.НайтиПоНомеру(13).ПолучитьОбъект();

    НенужныйДокумент.УстановитьПометкуУдаления(Истина);

    1. ДокументВыборка =>ДокументСсылка. Используется для подстановки ссылки на текущий документ из выборки документов в реквизит или параметр

    // Ключевые слова:

    // .Ссылка

    // Пример:Сформировать список ссылок на все документы ПриходнаяНакладная за текущий месяц

    СписокНакладных = Новый СписокЗначений;

    Выборка = Документы.ПриходнаяНакладная.Выбрать(НачалоМесяца(ТекущаяДата()), КонецМесяца(ТекущаяДата()));

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

    СписокНакладных.Добавить(Выборка.Ссылка);

    КонецЦикла;

    1. ДокументВыборка =>ДокументОбъект. Используется для доступа к обекту текущего элемента выборки, как правило, для редактирования.

    // Ключевые слова:

    // .ПолучитьОбъект()

    // Пример: Удалить все документы ПриходнаяНакладная

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

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

    Выборка.ПолучитьОбъект().Удалить();

    КонецЦикла;

    Рис. 1.11. Последовательность событий при записи документа из формы документа

    Рис. 1.12. Последовательность событий при проведении документа из формы документа

    Рис. 1.13. Последовательность событий при отмене проведения документа из формы документа

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

    Рис. 1.21. Объекты встроенного языка для работы с регистрами сведений

    *Заливкой выделен объект манипулирования данными

    РегистрСведенийМенеджерЗаписи.<имя>. Позволяет читать, записывать и удалять отдельную запись регистра сведений. Используется только для регистров сведений, не изменяемых регистраторами, т. е. для которых в конфигураторе установлен режим записи Независимый.

    РегистрСведенийЗапись.<имя>. Предоставляет доступ к записи регистра сведений. Объект не создается непосредственно, а предоставляется другими объектами, связанными с регистром сведений. Например, данный объект представляет записи регистра в наборе записей.

    РегистрСведенийКлючЗаписи.<имя>. Представляет собой набор значений, однозначно идентифицирующих запись регистра. Объект используется в тех случаях, когда необходимо сослаться на определенную запись. Например, он выступает в качестве значения свойства ТекущаяСтрока табличного поля, отображающего список записей регистра.

    Использование объектов:

    1. Глобальный контекст =>РегистрыСведенийМенеджер

    // Ключевые слова:

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

    // Пример:Получить текущую цену из периодического регистра сведений Цены

    Элемент = Справочники.Номенклатура.НайтиПоКоду(4);

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

    ЗначенияРесурсов = РегистрыСведений.Цены.ПолучитьПоследнее(ТекущаяДата(), Отбор);

    1. РегистрыСведенийМенеджер =>РегистрСведенийМенеджер

    // Ключевые слова:

    // .<имя регистра сведений>

    // [<имя регистра сведений>]

    // Для Каждого … Из … Цикл … КонецЦикла;

    // Пример:Открыть форму списка регистра сведений Цены

    ИмяРегистра = "Цены";

    Форма = РегистрыСведений[ИмяРегистра].ПолучитьФормуСписка();

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

    1. РегистрСведенийМенеджер =>РегистрСведенийКлючЗаписи

    // Ключевые слова:

    // .СоздатьКлючЗаписи()

    // Пример:Активизировать требуемую строку списка регистра сведений

    СтруктураКлючевыхПолей = Новый Структура;

    СтруктураКлючевыхПолей.Вставить("Период", Дата("20040331000000"));

    СтруктураКлючевыхПолей.Вставить("Номенклатура", Справочники.Номенклатура.НайтиПоКоду("0000006"));

    ЭлементыФормы.ТабличноеПоле1.ТекущаяСтрока = РегистрыСведений.Цены.СоздатьКлючЗаписи(СтруктураКлючевыхПолей);

    1. РегистрСведенийМенеджер =>РегистрСведенийНаборЗаписей

    // Ключевые слова:

    // .СоздатьНаборЗаписей()

    // Пример: Показать номенклатуру, цена на которую была установлена в заданную дату и время

    Набор = РегистрыСведений.Цены.СоздатьНаборЗаписей();

    Набор.Отбор.Период.Установить(ЗаданнаяДата, Истина);

    Набор.Прочитать();

    Для Каждого ОчереднаяЗапись Из Набор Цикл

    Сообщить("Номенклатура = " + ОчереднаяЗапись.Номенклатура + ", цена = " + ОчереднаяЗапись.Цена);

    КонецЦикла;

    1. РегистрСведенийКлючЗаписи =>РегистрСведенийМенеджерЗаписи.

    // Ключевые слова:

    // .СоздатьМенеджерЗаписи()

    // Пример:Добавить новое значение цены в регистр Цены

    Запись = РегистрыСведений.Цены.СоздатьМенеджерЗаписи();

    Запись.Период = ТекущаяДата();

    Запись.Номенклатура = Справочники.Номенклатура.НайтиПоКоду("0000005");

    Запись.Цена = 568;

    Запись.Записать();

    1. РегистрСведенийНаборЗаписей =>РегистрСведенийЗапись

    // Ключевые слова:

    // [<индекс элемента коллекции>]

    // Для Каждого … Из … Цикл … КонецЦикла;

    // Пример:Показать номенклатуру, цена на которую была установлена

    //в заданную дату и время

    Набор = РегистрыСведений.Цены.СоздатьНаборЗаписей();

    Набор.Отбор.Период.Установить(ЗаданнаяДата, Истина);

    Набор.Прочитать();

    Для КаждогоОчереднаяЗаписьИзНаборЦикл

    Сообщить("Номенклатура = " + ОчереднаяЗапись.Номенклатура + ", цена = " + ОчереднаяЗапись.Цена);

    КонецЦикла;

    1. РегистрСведенийВыборка =>РегистрСведенийМенеджерЗаписи

    // Ключевые слова:

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

    // Пример:Удалить все записи регистра сведений за текущий месяц

    Выборка = РегистрыСведений.Цены.Выбрать(НачалоМесяца(ТекущаяДата()), КонецМесяца(ТекущаяДата()));

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

    Выборка.ПолучитьМенеджерЗначения().Удалить();

    КонецЦикла;

    1. РегистрСведенийМенеджер => РегистрСведенийВыборка

    // Ключевые слова:

    // .Выбрать()

    // .ВыбратьПоРегистратору()

    // Пример:Показать изменение цен на элемент номенклатуры в течение года

    Отбор = Новый Структура("Номенклатура", Справочники.Номенклатура.НайтиПоКоду("0000005"));

    Выборка = РегистрыСведений.Цены.Выбрать(НачалоГода(ТекущаяДата()),ТекущаяДата(),Отбор);

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

    Сообщить("Дата = " + Выборка.Период + ", цена = " + Выборка.Цена);

    КонецЦикла;

    Рис. 1.22. Последовательность событий при записи из формы записи регистра сведений

    Работа с формой записи регистра сведений осуществляется при помощи объекта РегистрСведенийМенеджерЗаписи.<имя>, который, в свою очередь, использует объект РегистрСведенийНаборЗаписей.<имя>.

    Особенности внутренней реализации объекта РегистрСведенийМенеджерЗаписи.<имя> таковы, что в случае запоминания существующей записи регистра сведений обработчики события ПередЗаписью() и ПриЗаписи() модуля набора записей будут вызваны дважды: сначала для «старого» набора записей (с количеством записей 0) и затем для «нового» (с количеством записей 1).

    Рис. 1.23. Последовательность событий при записи из формы набора записей регистра сведений

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

    Рис. 1.24. Объекты встроенного языка для работы с регистрами накопления

    *Заливкой выделен объект манипулирования данными

    Узнай больше!

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

    РегистрНакопленияЗапись.<имя>. Используется для доступа к записи регистра накопления. Объект не создается непосредственно, а предоставляется другими объектами, отвечающими за регистр накопления. Например, данный объект представляет записи регистра в наборе записей.

    РегистрНакопленияКлючЗаписи.<имя>. Представляет собой набор значений, однозначно идентифицирующих запись регистра. Объект используется в тех случаях, когда необходимо сослаться на определенную запись. Например, он выступает в качестве значения свойства ТекущаяСтрока табличного поля, отображающего список записей регистра.

    Использование объектов:

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

    // Пример: Открыть форму списка регистра ОстаткиМатериалов

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

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

    // .<имя регистра накопления>

    // [<имя регистра накопления>]

    // Для Каждого … Из … Цикл … КонецЦикла;

    // Пример: Рассчитать итоги регистра ОстаткиМатериалов на указанную дату

    ИмяРегистра = ОстаткиМатериалов;

    РегистрыНакопления[ИмяРегистра].УстановитьПериодРассчитанныхИтогов(УказаннаяДата);

    // СоздатьКлючЗаписи()

    // Пример: Активизировать требуемую строку списка регистра накопления

    СтруктураКлючевыхПолей = Новый Структура;

    СтруктураКлючевыхПолей.Вставить("Регистратор", Документы.ПриходнаяНакладная.НайтиПоНомеру("0000002"));

    СтруктураКлючевыхПолей.Вставить("НомерСтроки", 2);

    ЭлементыФормы.ТабличноеПоле1.ТекущаяСтрока = РегистрыНакопления.ОстаткиМатериалов.СоздатьКлючЗаписи(СтруктураКлючевыхПолей);

    // СоздатьНаборЗаписей()

    // Пример: Получить движения документа

    НужныйДокумент = Документы.ПриходнаяНакладная.НайтиПоНомеру(4);

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

    Движения.Отбор.Регистратор.Значение = НужныйДокумент;

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

    // Выбрать()

    // ВыбратьПоРегистратору()

    // Пример: Выбрать все записи регистра ОстаткиМатериалов за текущий месяц

    Выборка = РегистрыНакопления.ОстаткиМатериалов.Выбрать(НачалоМесяца(ТекущаяДата()), КонецМесяца(ТекущаяДата()));

    // [<индекс элемента коллекции>]

    // Для Каждого … Из … Цикл … КонецЦикла;

    // Пример: Получить движения документа

    НужныйДокумент = Документы.ПриходнаяНакладная.НайтиПоНомеру(4);

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

    Движения.Отбор.Регистратор.Значение = НужныйДокумент;

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

    Для КаждогоОчередноеДвижениеИз Движения Цикл

    // Алгоритм обработки движений

    КонецЦикла;

    Рис. 1.25. Последовательность событий при записи набора записей регистра накопления

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

    Рис. 1.26. Объекты встроенного языка для работы с регистрами бухгалтерии

    *Заливкой выделен объект манипулирования данными

    РегистрБухгалтерииЗапись.<имя>. Используется для доступа к записи регистра бухгалтерии. Объект не создается непосредственно, а предоставляется другими объектами, отвечающими за регистр бухгалтерии. Например, данный объект представляет записи регистра в наборе записей.

    РегистрБухгалтерииСубконто.<имя>. Коллекция значений субконто записи регистра бухгалтерии. Установка и получение значения конкретного субконто осуществляется черезоператор[], в качестве параметра которому передается вид субконто, или через имя предопределенного субконто.

    РегистрБухгалтерииКлючЗаписи.<имя>. Набор значений, однозначно идентифицирующий запись регистра. Объект используется в тех случаях, когда необходимо сослаться на определенную запись. Например, он выступает в качестве значения свойства ТекущаяСтрока табличного поля, отображающего список записей регистра.

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

    Рис. 1.27. Последовательность событий при записи набора записей регистра бухгалтерии из формы

    Лабораторная работа №1. Базовые типы данных. Работа с системными процедурами и функциями.

    1. Создать внешнюю обработку «Задание 1.1». По нажатию кнопки «Выполнить» обработка выводит следующий текст:

    Сегодня – 01.09.2010 г.

    Рабочая дата программы – 01.09.2010 г.

    в а) в окно сообщений

    б) в виде предупреждения пользователю

    2. Создать внешнюю обработку «Задание 1.2». Изменить форму обработки следующим образом.:

    По нажатию кнопки «Выполнить» обработка выполняет одну из следующих операций:

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

      2. Выводит в окно сообщений самое длинное слово в тексте

      3. Удаляет из текста все повторяющиеся слова, не начинающиеся на букву «а».

    3. Создать внешнюю обработку «Задание 1.3». Изменить форму обработки следующим образом:

    По нажатию кнопки «Выполнить» обработка преобразует первую букву каждого слова в поле «ФИО» в верхний регистр. Если третье слово в поле «ФИО» оканчивается на «вна», реквизит «Пол» получает значение «жен», в противном случае – «муж». Если в поле «ФИО» введено только одно слово, на экран выводится предупреждение, содержащее текст «Не указаны имя и отчество!»

    Самостоятельная работа

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

    1. X2+Y2+Z2

    2. (X+Y)2-2Z

    3. (X+Y/Z)2

    4. (X+Y)2/(X+Z)2

    5. X/Y+X/Z+(X+Y+Z)2

    2. Разработать обработку, которая по введенной строке выполняет следующие действия:

    1. Удваивает все пробелы

    2. Возводит первую и последнюю букву каждого слова в верхний регистр

    3. Удаляет из текста все буквы «А»

    4. Слово «Да», если оно встречается в тексте, сменяет на «Нет».

    5. Посчитывает количество гласных символов в тексте.

    Лабораторная работа №2. Работа со справочниками

    1. Создать внешнюю обработку «Задание 2.1». При нажатии кнопки «Выполнить» в окно сообщений должен выводиться список подразделений организации, занесенных в базу.

    Пример. Администрация

    Бухгалтерия

    Транспортный отдел

    1. Создать внешнюю обработку «Задание 2.2». При нажатии кнопки «Выполнить» в окно сообщений должен выводиться список контрагентов организации, занесенных в базу и список договоров каждого контрагента

    Пример. 0001 – Фрезер

    0002 - Основной

    0002 – Гарант

    0005 – Основной

    0006 - №231 от 05.05.2010

    0003 – Иванов И. И.

    1. Создать внешнюю обработку «Задание 2.3». Форма обработки представлена на рисунке

    По нажатию кнопки «Добавить» в справочнике «Подразделения»должен создаваться новый элемент с наименованием, внесенным пользователем в соответствующее поле. Если при добавлении на форме установлен флажок «Группа», то новый элемент должен быть группой, если же нет – обычным элементом.

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

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

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

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

    Пример:

    Всего – 10 (из них помечено на удаление 2)

    Групп – 2 (помеченных на удаление нет)

    Элементов – 8 (из них помечено на удаление 2)

    Самостоятельная работа

    1. Создать обработку, которая позволяла бы добавлять в справочник Контрагентов новые записи. Наименование и группа контрагента должны заполняться пользователем в форме обработки. При этом в справочнике «Договоры» должен создаваться один «основной» договор для данного контрагента

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

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

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

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