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

         

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


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

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

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

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

Пользователи. Откроется список пользователей системы.

Пока что он пуст, поэтому добавим нового пользователя (Действия

Добавить):

Имя пользователя – это идентификатор, который будет появляться в окне выбора пользователей при запуске системы в режиме 1С:Предприятие. [389]

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

Следующие две области окна посвящены способам аутентификации пользователя.

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

Аутентификация Windows подразумевает, что при запуске системы 1С:Предприятие от пользователя не требуется никакой дополнительной информации. Система 1С:Предприятие определяет под каким пользователем запущена операционная система Windows (имеет смысл использовать для NT-подобных операционных систем: NT, 2000, XP), и затем обращается к своему списку пользователей. Если она находит в нем пользователя, которому поставлен в соответствие текущий пользователь Windows, система открывается с правами и интерфейсом, которые указаны для этого пользователя.




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



[390]

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

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



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

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

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


Анализ данных


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



Автоматическое заполнение цены в документе ОказаниеУслуги


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

Найдем в конфигураторе документ "ОказаниеУслуги" и откроем его форму "ФормаДокумента". Откроем свойства поля ввода, расположенного в колонке "Номенклатура" и внизу списка найдем событие "При изменении". Нажмем на кнопку с лупой и в открывшейся заготовке обработчика события напишем следующий текст:

Процедура ПереченьНоменклатурыНоменклатураПриИзменении(Элемент)

//получить текущую строку табличной части

СтрокаТабличнойЧасти = ЭлементыФормы.ПереченьНоменклатуры.ТекущиеДанные;

//установить цену

СтрокаТабличнойЧасти.Цена = РозничнаяЦена(Дата, Элемент.Значение);

//пересчитать сумму строки

РассчитатьСумму(СтрокаТабличнойЧасти);

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

Прокомментируем содержимое обработчика.

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

Во второй мы устанавливаем полученную цену в документе, вызывая нашу процедуру "РозничнаяЦена". Первым параметром мы передаем дату документа, на которую необходимо получить цену, а вторым параметром мы передаем ссылку, которую отображает элемент управления формой, вызвавший это событие (Элемент.Значение), т.е. ссылку на элемент справочника "Номенклатура". [126]

В заключение мы вызываем нашу процедуру "РассчитатьСумму" из общего модуля "РаботаСДокументами" для того, чтобы она пересчитала итоговую сумму в строке нашего документа.

Проверим, как теперь работает наш документ. Запустим 1С:Предприятие в режиме отладки и откроем регистр сведений "Цены". Для транзистора Philips добавим следующим числом новую цену:

Теперь откроем документ ОказаниеУслуги №1. Как вы помните, этим документом мы как раз "израсходовали" один такой транзистор.

Установим дату документа равной той дате, когда было задано первое значение цены транзистора, и повторим выбор транзистора в колонке "Номенклатура" табличной части документа. Автоматически установится первое значение цены:


[127]

Теперь изменим дату документа на следующий день и снова повторим выбор транзистора. Будет установлено новое значение цены:

Таким образом, в документ подбирается актуальная, на момент создания документа, цена услуги. [128]



Часть II. Использование основных объектов конфигурации


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

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

Поэтому все дальнейшее изложение, грубо говоря, будет посвящено тому, как "приблизить" эту систему учета к реальным потребностям ООО "На все руки мастер". [117]



Что нового мы узнали


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



Что нового мы узнали


для чего предназначен объект конфигурации Перечисление
как создать новое перечисление
как с помощью перечисления задать принадлежность элементов справочника к той или иной смысловой группе
как обратиться к значению перечисления средствами встроенного языка [137]



Что нового мы узнали


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



Что нового мы узнали


что такое оборотный регистр накопления
в чем отличие между регистром накопления остатков и оборотным регистром накопления
как выбирать реквизиты и измерения при создании регистров накопления
как создать оборотный регистр накопления
как создать движения документа без использования конструктора движений [161]



Что нового мы узнали


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

if (window.topicInitScriptAvailable) { HMInitToggle('TOGGLE0186A1','hm:type','picture','hm:state','0','hm:src0','118a.png','hm:src1','118.png');}



Что нового мы узнали


как система 1С:Предприятие выполняет обращение к ссылочным данным
как используется кэш объектов
почему для доступа к массивам данных информационной базы предпочтительнее использовать запросы
как запросом получить остатки регистра накопления
когда следует использовать ключевое предложение ДЛЯ ИЗМЕНЕНИЯ
на что следует обращать внимание при задании параметров виртуальных таблиц запросов
почему при неоперативном проведении документов не нужно контролировать остатки
как и зачем можно передать вложенный запрос в параметры виртуальной таблицы[251]



Что нового мы узнали


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



Что нового мы узнали


как использовать план видов характеристик для организации ведения бухгалтерского учета
что такое субконто
для чего предназначен объект конфигурации План счетов
как создать план счетов
для чего предназначен Регистр бухгалтерии
как создать регистр бухгалтерии и настроить параметры учета
как создать движения документа по регистру бухгалтерии при помощи конструктора движений
как создать движения документа по регистру бухгалтерии средствами встроенного языка
как получить данные из регистра бухгалтерии запросом [316]



Что нового мы узнали


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



Что нового мы узнали


как создать движения документа по регистру расчета
как запросом получить записи перерасчета
как работает перерасчет
как рассчитать записи регистра расчета
как запросом получить данные графика и базы
как выполнить перерасчет отдельных записей регистра расчета
как получить запросом записи регистра расчета
как получить запросом фактический период действия записей регистра расчета
для чего используется диаграмма Ганта
как устроена диаграмма Ганта
как заполнить диаграмму Ганта данными [371]



Что нового мы узнали


для чего используется объект конфигурации Подсистема
как описать логическую структуру конфигурации при помощи объектов Подсистема[377]



Что нового мы узнали


для чего предназначен объект конфигурации Роль
как создать роль, используя подсистемы конфигурации
для чего предназначен объект конфигурации Интерфейс
как создать интерфейс, используя подсистемы конфигурации
как создать список пользователей системы и определить их права
чем аутентификация средствами 1С:Предприятия отличается от аутентификации Windows[392]



Что нового мы узнали


какие средства входят в состав механизма универсального обмена данными
для чего предназначен объект конфигурации План обмена
каковы основные составляющие плана обмена
что такое узлы плана обмена
что такое состав плана обмена, и для каких элементов данных возможен обмен данными
что такое авторегистрация
для чего предназначен механизм регистрации изменений
как работает инфраструктура сообщений
каково назначение XML-сериализации
для чего используется запись/чтение документов XML
как создать план обмена
как настроить конфигурацию для обмена данными
как реализовать обмен данными в общем виде
как реализовать обмен данными в распределенной информационной базе
как программно управлять обменом данными в распределенной информационной базе
как изменить структуру дерева распределенной информационной базы [443]



Что нового мы узнали


чем анализ данных отличается от прогнозирования
какие объекты встроенного языка обеспечивают работу механизма анализа данных
какие объекты встроенного языка обеспечивают работу механизма прогнозирования данных
какие типы анализа данных реализованы в платформе
как работать с моделью прогноза
что такое построитель отчета анализа данных
как получить визуальное представление результата анализа данных
как настроить параметры модели прогноза [476]



Дерево решений


Тип анализа АнализДанныхДеревоРешении дерево решений позволяет построить иерархическую структуру классифицирующих правил, представленную в виде дерева.

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

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

Набор параметров анализа позволяет регулировать точность полученного дерева.

Типы колонок источника данных:

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

Параметры:

·МинимальноеКоличествоСлучаев – (Число) – минимальное количество случаев в узле.
·МаксимальнаяГлубина – (Число) – максимальная глубина дерева.
·ТипУпрощения – (не упрощать, упрощать) – тип упрощения дерева решений. Упрощать или не упрощать построенное дерево решений. [463]



Диаграмма


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

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

Значениесерии в точке

Серия

Точка

[196]

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

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

Диаграмма, как объект встроенного языка, имеет три области, которые позволяют управлять оформлением диаграммы – это область построения, область заголовка и область легенды:

Область построения                 Область заголовка

Область легенды

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

Во-первых, можно заполнить диаграмму данными автоматически. Для этого используется свойство диаграммы ИсточникДанных. В качестве источника данных диаграммы может выступать область табличного документа (если диаграмма вставлена в табличный Документ), либо таблица значений. Общее требование к источнику Данных – он должен поставлять диаграмме (кроме самих данных) [197] имена точек и серий. В случае с областью табличного документа имена точек и серий будут браться из верхней строки и левого столбца области; в случае с таблицей значений – из заголовков колонок и первой колонки.

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

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

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



Диаграмма Ганта


Диаграмма Ганта представляет собой диаграмму интервалов на шкале времени и отражает использование объектами (точками) ресурсов (серий). Чтобы проще было представить себе составные части диаграммы Ганта, изучим диаграмму, которая должна получиться в результате работы создаваемого нами отчета. [364]

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

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

Значение диаграммы Ганта представляет собой специальный объект, который формируется системой автоматически на основании того, какие точки и какие серии определены для данной диаграммы. Этот объект является совокупностью (коллекцией) интервалов, т.е. может содержать не один, а несколько интервалов, которые соответствуют паре серия–точка (создаваемый по умолчанию объект ЗначениеДиаграммыГанта не содержит ни одного интервала). Разработчик может получить значение диаграммы, указав [365] интересующую его точку и серию, и затем добавить в коллекцию необходимое количество интервалов.

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

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



Добавление движений по регистру бухгалтерии Управленческий в документ ОказаниеУслуги


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

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

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

Откроем в конфигураторе модуль объекта конфигурации Документ "ОказаниеУслуги" и найдем в нем процедуру обработки проведения. Она должна иметь следующий вид:

Процедура ОбработкаПроведения(Отказ, Режим)

   Запрос = Новый Запрос;

   Запрос.УстановитьПараметр("СкладВДокументе",Склад);

   Если Режим = РежимПроведенияДокумента.Оперативный Тогда

       Запрос.Текст =

       "ВЫБРАТЬ

       |    ОказаниеУслугиПереченьНоменклатуры.Номенклатура,

       |    ОказаниеУслугиПереченьНоменклатуры.Количество,

       |    ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры КАК ВидНоменклатуры,

       |    ОказаниеУслугиПереченьНоменклатуры.Сумма, [307]

       |    ОстаткиМатериаловОстатки.КоличествоОстаток,

       |    СтоимостьМатериаловОстатки.СтоимостьОстаток,




       |    ОстаткиМатериаловОстаткиНаСкладе. КоличествоОстаток КАК КоличествоОстатокНаСкладе

       |ИЗ

       |    Документ.ОказаниеУслуги.ПереченьНоменклатуры КАК ОказаниеУслугиПереченьНоменклатуры

       |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьМатериалов.Остатки(&МоментВремени, Материал В (&СписокНоменклатурыДокумента)) КАК СтоимостьМатериаловОстатки

       |        ПО ОказаниеУслугиПереченьНоменклатуры.Номенклатура = СтоимостьМатериаловОстатки.Материал

       |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.Остатки(

       |        &МоментВремени,

       |        Материал В

       |            (ВЫБРАТЬ РАЗЛИЧНЫЕ

       |                ОказаниеУслугиПереченьНоменклатуры.Номенклатура

       |            ИЗ

       |                Документ.ОказаниеУслуги.ПереченьНоменклатуры КАК ОказаниеУслугиПереченьНоменклатуры

       |            ГДЕ

       |                ОказаниеУслугиПереченьНоменклатуры.Ссылка = &Ссылка)) КАК ОстаткиМатериаловОстатки



       |        ПО ОказаниеУслугиПереченьНоменклатуры.Номенклатура = ОстаткиМатериаловОстатки.Материал

       |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.Остатки(

       |        &МоментВремени,

       |        Материал В (&СписокНоменклатурыДокумента)

       |            И Склад = &СкладВДокументе) КАК ОстаткиМатериаловОстаткиНаСкладе

       |        ПО ОказаниеУслугиПереченьНоменклатуры.Номенклатура = ОстаткиМатериаловОстаткиНаСкладе.Материал

       |ГДЕ

       |    ОказаниеУслугиПереченьНоменклатуры.Ссылка = &Ссылка

       |

       |ДЛЯ ИЗМЕНЕНИЯ

       |    РегистрНакопления.ОстаткиМатериалов.Остатки,

       |    РегистрНакопления.СтоимостьМатериалов.Остатки";

   Иначе

       Запрос.Текст =

       "ВЫБРАТЬ

       |    ОказаниеУслугиПереченьНоменклатуры.Номенклатура,

       |    ОказаниеУслугиПереченьНоменклатуры.Количество,

       |    ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры КАК ВидНоменклатуры,

       |    ОказаниеУслугиПереченьНоменклатуры.Сумма,

       |    ОстаткиМатериаловОстатки.КоличествоОстаток,



       |    СтоимостьМатериаловОстатки.СтоимостьОстаток

       |ИЗ

       |    Документ.ОказаниеУслуги. ПереченьНоменклатуры КАК ОказаниеУслугиПереченьНоменклатуры

       |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьМатериалов.Остатки(&МоментВремени, Материал В (&СписокНоменклатурыДокумента)) КАК [308] СтоимостьМатериаловОстатки

       |        ПО ОказаниеУслугиПереченьНоменклатуры.Номенклатура = СтоимостьМатериаловОстатки.Материал

       |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.Остатки(&МоментВремени, Материал В (&СписокНоменклатурыДокумента)) КАК ОстаткиМатериаловОстатки

       |        ПО ОказаниеУслугиПереченьНоменклатуры.Номенклатура = ОстаткиМатериаловОстатки.Материал

       |ГДЕ

       |    ОказаниеУслугиПереченьНоменклатуры.Ссылка = &Ссылка

       |

       |ДЛЯ ИЗМЕНЕНИЯ

       |    РегистрНакопления.СтоимостьМатериалов.Остатки,

       |    РегистрНакопления.ОстаткиМатериалов.Остатки";

   КонецЕсли;

   Запрос.УстановитьПараметр("МоментВремени", МоментВремени());

   Запрос.УстановитьПараметр("СписокНоменклатурыДокумента", ПереченьНоменклатуры.ВыгрузитьКолонку("Номенклатура"));

   Запрос.УстановитьПараметр("Ссылка",Ссылка);

   ВыборкаРезультатаЗапроса = Запрос.Выполнить().Выбрать();

   Пока ВыборкаРезультатаЗапроса.Следующий() Цикл



       // Проверить остаток при оперативном проведении

       Если Режим = РежимПроведенияДокумента.Оперативный Тогда

           Если ВыборкаРезультатаЗапроса.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Материал Тогда

               Остаток = ?(ВыборкаРезультатаЗапроса.КоличествоОстатокНаСкладе = Null, 0, ВыборкаРезультатаЗапроса.КоличествоОстатокНаСкладе);

               Если Остаток < ВыборкаРезультатаЗапроса.Количество Тогда

                   Сообщить("Материала " + СокрЛП(ВыборкаРезультатаЗапроса.Номенклатура) + " имеется только " + Остаток);

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

                   Возврат;

               КонецЕсли;

           КонецЕсли;

       КонецЕсли;

       //Сформировать движения

       Если ВыборкаРезультатаЗапроса.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Материал Тогда

           // регистр ОстаткиМатериалов Расход

           Движение = Движения.ОстаткиМатериалов.Добавить();

           Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

           Движение.Период = Дата; [309]



           Движение.Материал = ВыборкаРезультатаЗапроса.Номенклатура;

           Движение.Склад = Склад;

           Движение.Количество = ВыборкаРезультатаЗапроса.Количество;

           // регистр СтоимостьМатериалов Расход

           Движение = Движения.СтоимостьМатериалов.Добавить();

            Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

           Движение.Период = Дата;

           Движение.Материал = ВыборкаРезультатаЗапроса.Номенклатура;

           //расчитать стоимость материала

           СтоимостьМатериала = ?(ВыборкаРезультатаЗапроса.КоличествоОстаток = Null, 0,

               ВыборкаРезультатаЗапроса.СтоимостьОстаток / ВыборкаРезультатаЗапроса.КоличествоОстаток);

           Движение.Стоимость = СтоимостьМатериала * ВыборкаРезультатаЗапроса.Количество;

       КонецЕсли;

       // регистр Продажи

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

       Движение.Период = Дата;

       Движение.Номенклатура = ВыборкаРезультатаЗапроса.Номенклатура;

       Движение.Клиент = Клиент;

       Движение.Мастер = Мастер;

       Движение.Количество = ВыборкаРезультатаЗапроса.Количество;

       Движение.Выручка = ВыборкаРезультатаЗапроса.Сумма;



       Если ВыборкаРезультатаЗапроса.ВидНоменклатуры =    Перечисления.ВидыНоменклатуры.Материал Тогда

           Движение.Стоимость = СтоимостьМатериала * ВыборкаРезультатаЗапроса.Количество;

       Иначе

           Движение.Стоимость = 0;

       КонецЕсли;

   КонецЦикла;

   // записать движения регистров

   Движения.ОстаткиМатериалов.Записать();

   Движения.СтоимостьМатериалов.Записать();

   Движения.Продажи.Записать();

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

Поскольку нас интересует только движение материалов, для внесения дополнений подойдет тело условия Если ..., в котором мы формировали движения по регистрам "ОстаткиМатериалов" и "СтоимостьМатериалов". [310]

Добавим движения по регистру бухгалтерии Управленческий:

...

       //Сформировать движения

       Если ВыборкаРезультатаЗапроса.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Материал Тогда

           // регистр ОстаткиМатериалов Расход

           Движение = Движения.ОстаткиМатериалов.Добавить();

           Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

           Движение.Период = Дата;

           Движение.Материал = ВыборкаРезультатаЗапроса.Номенклатура;

           Движение.Склад = Склад;

           Движение.Количество = ВыборкаРезультатаЗапроса.Количество;

           // регистр СтоимостьМатериалов Расход



           Движение = Движения.СтоимостьМатериалов.Добавить();

            Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

           Движение.Период = Дата;

           Движение.Материал = ВыборкаРезультатаЗапроса.Номенклатура;

           // расчитать стоимость материала

           СтоимостьМатериала = ?(ВыборкаРезультатаЗапроса.КоличествоОстаток = Null, 0,

               ВыборкаРезультатаЗапроса.СтоимостьОстаток / ВыборкаРезультатаЗапроса.КоличествоОстаток);

           Движение.Стоимость = СтоимостьМатериала * ВыборкаРезультатаЗапроса.Количество;

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

           //первая проводка:

           //Д 62(ДебиторскаяЗадолженность) - К 90 (Капитал)

           //розничная сумма

           Движение = Движения.Управленческий.Добавить();

           Движение.СчетДт = ПланыСчетов.Основной.ДебиторскаяЗадолженность;

           Движение.СчетКт = ПланыСчетов.Основной.Капитал;

           Движение.Период = Дата;

           Движение.Сумма = ВыборкаРезультатаЗапроса.Сумма;

           Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Клиенты] = Клиент;



           //вторая проводка:

           //Д90 (Капитал) - К 41 (Товары) - себестоимость

           Движение = Движения.Управленческий.Добавить();

           Движение.СчетДт = ПланыСчетов.Основной.Капитал;

           Движение.СчетКт = ПланыСчетов.Основной.Товары;

           Движение.Период = Дата;

           Движение.Сумма = СтоимостьМатериала * ВыборкаРезультатаЗапроса.Количество; [311]

           Движение.КоличествоКт = ВыборкаРезультатаЗапроса.Количество;

           Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Материалы] = ВыборкаРезультатаЗапроса.Номенклатура;

       КонецЕсли;

...

   // записать движения регистров

   Движения.ОстаткиМатериалов.Записать();

   Движения.СтоимостьМатериалов.Записать();

   Движения.Продажи.Записать();

   Движения.Управленческий.Записать();

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

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

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

Запустим 1С:Предприятие в режиме отладки, перепроведем документ ОказаниеУслуги №1 и посмотрим, какие движения он сформировал по регистру бухгалтерии "Управленческий":



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


Доработка документа ПриходнаяНакладная


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

После этого расположим этот реквизит в табличном поле формы документа (правая кнопка мыши– Размещение данных):

Для поля ввода, расположенного в колонке "НаборСвойств" снова воспользуемся свойством "Связь по владельцу" ЭлементыФормы.Материалы.ТекущиеДанные.Материал. Теперь при выборе в этом поле ввода будет всегда открываться список [272] элементов справочника "ВариантыНоменклатуры", подчиненных материалу, выбранному в колонке "Материал".

В заключение откроем процедуру обработки проведения в модуле документа и добавим к формируемым движениям присвоение значения измерению "НаборСвойств":

Процедура ОбработкаПроведения(Отказ, Режим)

//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

   // Данный фрагмент построен конструктором.

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

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

       // регистр ОстаткиМатериалов Приход

       Движение = Движения.ОстаткиМатериалов.Добавить();

       Движение.ВидДвижения = ВидДвиженияНакопления.Приход;

       Движение.Период = Дата;

       Движение.Материал = ТекСтрокаМатериалы.Материал;

       Движение.НаборСвойств = ТекСтрокаМатериалы.НаборСвойств;

       Движение.Склад = Склад;

       Движение.Количество = ТекСтрокаМатериалы.Количество;

   //КонецЦикла;

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




       // регистр СтоимостьМатериалов Приход

       Движение = Движения.СтоимостьМатериалов.Добавить();

       Движение.ВидДвижения = ВидДвиженияНакопления.Приход;

       Движение.Период = Дата;

       Движение.Материал = ТекСтрокаМатериалы.Материал;

       Движение.Стоимость = ТекСтрокаМатериалы.Сумма;

   КонецЦикла;

   // записываем движения регистров

   Движения.ОстаткиМатериалов.Записать();

   Движения.СтоимостьМатериалов.Записать();

   //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

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

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


Доработка объектов конфигурации, участвующих в обмене


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

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

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

Функция ПопучитьПрефиксНомера() Экспорт

Возврат Константы.ПрефиксНумерации.Получить();

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

Как вы видите, эта функция просто возвращает значение константы "ПрефиксНумерации".

Теперь доработаем справочник "Клиенты". В модуль объекта добавим следующий обработчик события "ПриУстановкеНовогоКода":

Процедура ПриУстановкеНовогоКода(СтандартнаяОбработка, Префикс)

   Префикс = ПопучитьПрефиксНомера();

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

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

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

Теперь займемся доработкой документов. В модуль документа "ПриходнаяНакладная" добавим обработчик события "ПриУстановкеНовогоНомера":




Процедура ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс)

   Префикс = ПопучитьПрефиксНомера();

КонецПроцедуры [402]

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

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


Доработка регистра ОстаткиМатериалов


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



Доработка справочника Номенклатура


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

Вставить элемент управления
Панель):


[261]

После того, как мы слегка изменим положение любой из границ панели, появится вопрос:

На этот вопрос мы ответим утвердительно, и все элементы управления переместятся в добавленную панель:


[262]

Теперь мы скорректируем размеры панели и добавим в нее новую страницу (добавление страницы – контекстное меню правой кнопки мыши на поле формы

Добавить страницу...):

Зададим имя и заголовок новой страницы – "Свойства", а первую страницу также переименуем в "Основные" и зададим ей такой же заголовок (группа свойств "Текущая страница" в палитре свойств формы):


[263]

После этого выделим все элементы управления, расположенные на панели, и выполним команду Форма

Центрирование
Центрировать по вертикали:

Теперь перейдем на страницу "Свойства" и добавим надпись "НадписьВариантыНоменклатуры" с заголовком "Варианты номенклатуры:". Укажем для нее начертание шрифта "Жирный".


[264]

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

Установка этого свойства будет обеспечивать нам то, что для источника данных этого поля – реквизита формы "Варианты", имеющего тип СправочникСписок.ВариантыНоменклатуры, – значение отбора по владельцу всегда будет равно ссылке на редактируемый элемент справочника "Номенклатура". Иными словами, список справочника, содержащийся в реквизите формы "НаборСвойств" всегда будет содержать только элементы, подчиненные редактируемому элементу справочника "Номенклатура". А значит и табличное поле "Варианты", для которого этот реквизит является источником данных, будет отображать только элементы, подчиненные редактируемому элементу справочника "Номенклатура".[265]




Ниже разместим аналогичным образом еще одну надпись "НадписьЗначенияСвойств" с заголовком "Значения свойств:" и начертанием шрифта "Жирный".:



[266]

Под ней расположим табличное поле с командной панелью с именем "Свойства" и типом РегистрСведенийСписок.ЗначенияСвойствНоменклатуры. Для колонки "НаборСвойств" снимем флаг "Видимость", а для поля ввода в колонке "Значение" установим связь по типу – ЭлементыФормы.Свойства.ТекущиеДанные.ВидСвойства:



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

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

Поэтому для поля ввода в колонке "Вид свойства" создадим обработчик события "При изменении":

Процедура СвойстваВидСвойстваПриИзменении(Элемент)

ДанныеВидСвойства = ЭлементыФормы.Свойства.ТекущиеДанные.ВидСвойства;

   ЭлементыФормы.Свойства.ТекущиеДанные.Значение = ДанныеВидСвойства.ТипЗначения.ПривестиЗначение(ЭлементыФормы.Свойства.ТекущиеДанные.Значение);

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

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



Поэтому для табличного поля "Варианты" создадим обработчик события "При активизации строки":

Процедура ВариантыПриАктивизацииСтроки(Элемент)

   ЭлементыФормы.Свойства.Значение.Отбор.НаборСвойств.Установить(Элемент.ТекущиеДанные.Ссылка, Истина);

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

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

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

   ЭлементыФормы.Свойства.Значение.Отбор.НаборСвойств.Установить(,Истина);

КонецПроцедуры [268]

Доработка справочника ВариантыНоменклатуры


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

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

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

Откроем основную форму элемента справочника "ВариантыНоменклатуры" и раздвинем форму вниз. На освободившемся пространстве поместим табличное поле с именем "Свойства", типом РегистрСведенийСписок.ЗначенияСвойствНоменклатуры и командной панелью. Для колонки "НаборСвойств" снимем флаг видимости:


[269]

Затем для поля ввода, расположенного в колонке "Значение" зададим связь по типу ЭлементыФормы.Свойства.ТекущиеДанные.ВидСвойства.

Для поля ввода, расположенного в колонке "ВидСвойства" создадим обработчик события "ПриИзменении":

Процедура СвойстваВидСвойстваПриИзменении(Элемент)

   ДанныеВидСвойства = ЭлементыФормы.Свойства.ТекущиеДанные.ВидСвойства;

   ЭлементыФормы.Свойства.ТекущиеДанные.Значение = ДанныеВидСвойства.ТипЗначения.ПривестиЗначение(ЭлементыФормы.Свойства.ТекущиеДанные.Значение);

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

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



Прежде всего, создадим обработчик события




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

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

Прежде всего, создадим обработчик события "ПриИзмененииСсылки", в котором установим требуемый нам отбор:

Процедура ПриИзмененииСсылки(ПутьКДанным)

   Cвойства.Отбор.HaбopCвойств.Установить(Cсылка,"Истина");

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

Затем в тело модуля формы добавим вызов этого обработчика:

ПодключитьОбработчикИзмененияДанных("СправочникОбъект.Ссылка", "ПриИзмененииСсылки"); [270]

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

Поэтому создадим обработчик события табличного поля "ПередНачаломДобавления":

Процедура СвойстваПередНачаломДобавления(Элемент, Отказ, Копирование)

   Если ЭтоНовый() Тогда

       Записать();

   КонецЕсли;

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

Периодический регистр сведений


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

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



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


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

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

В этой главе мы создадим у справочника "Номенклатура" специальный реквизит, тип значения которого образуется новым пока еще для нас объектом конфигурации Перечисление. Это поможет нам в дальнейшем легко определять, чем является элемент справочника "Номенклатура": услугой или материалом. Кроме этого, мы скорректируем процедуру проведения документа ОказаниеУслуги и покажем, как работать с перечислением средствами встроенного языка. [130]



Проведение документа по нескольким регистрам


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

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



Оборотный регистр накопления


В этой главе мы с вами познакомимся с еще одним видом регистра накопления – оборотным регистром накопления.

Вы узнаете о некоторых важных принципах выбора измерений и реквизитов регистров накопления. Мы с вами создадим оборотный регистр накопления и добавим в один из наших документов движения еще и по этому регистру. [152]



Создание отчетов


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

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

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

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

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

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

Мы начнем рассматривать примеры создания отчетов в более простом варианте – без использования объекта встроенного языка ПостроительОтчета, а после того, как будем обладать достаточными знаниями – рассмотрим несколько примеров, в которых будет использован ПостроительОтчета. [162]



Оптимизация процедуры проведения документа ОказаниеУслуги


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

"Зачем это нужно?" – можете спросить вы. Тому есть две причины. Во-первых, руководство OOO "На все руки мастер" решило, наконец-то, завершить "эксперименты" по вводу стоимости расходуемых материалов руками и перейти на автоматический расчет стоимости расходуемых материалов "по среднему".

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

Поэтому, изменения, вносимые нами в документ "ОказаниеУслуги", будут преследовать две цели:

·определение стоимости расходуемых материалов при проведении документа,
·повышение скорости выполнения процедуры.

Прежде, чем мы приступим непосредственно к каким-либо действиям, следует сказать несколько слов об особенностях хранения и использования ссылочных данных в системе 1С:Предприятие 8.0.[232]



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


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



Бухгалтерский учет


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

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

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



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


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

В конце главы мы создадим план видов расчета и регистр расчета, на основе которых в следующих главах продемонстрируем работу механизмов периодических расчетов.[317]



Использование регистра расчета


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

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

В заключение мы познакомимся с новым элементом управления – Диаграмма Ганта, и с его помощью наглядно проиллюстрируем работу некоторых механизмов расчета.[340]



Подсистема


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



Интерфейс, роль, список пользователей


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

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

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

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

Кроме этого, должна существовать возможность ограничить пользователей в выполнении тех или иных действий с объектами базы данных. Например, кладовщик может создавать и изменять приходные накладные, поскольку он отвечает за учет материалов на предприятии. Мастеру может понадобиться просматривать приходные накладные для того, чтобы знать, какие материалы и когда были получены. Однако мастер не должен иметь возможности вносить какие-либо изменения в приходные накладные.[378]



Обмен данными


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



Анализ и прогнозирование данных


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

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

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

На диске информационно- технологического сопровождения, в составе демонстрационной конфигурации "Анализ данных", вы можете найти универсальную обработку "Консоль анализа данных", которая позволит вам работать с анализом данных в любом прикладном решении без какого-либо программирования. [444]



Создание документа ввода начальных остатков


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

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

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

Откроем конфигуратор и создадим новый объект конфигурации Документ с именем "ВводНачальныхОстатковНоменклатуры". На закладке "Движения" запретим проведение документа (поскольку сами будем формировать записи регистра), и отметим, что движения документа будут находиться в регистре накопления "ОстаткиМатериалов". После этого перейдем на закладку "Формы" и создадим основную форму документа. [477]

Раздвинем форму вниз и разместим в ней табличное поле c командной панелью. Зададим имя табличного поля "ОстаткиМатериалов" и тип значения "РегистрНакопленияНаборЗаписей.ОстаткиМатериалов":

В свойствах табличного поля укажем, что источником данных для него будут являться движения документа по регистру "ОстаткиМатериалов":


[478]

Удалим из табличного поля колонки "Регистратор" и "Активность" (они нам не понадобятся), и изменим размеры формы и расположение элементов управления:

Запустим 1С:Предприятие в режиме отладки и проверим работу нашего документа.




Введем в документ следующие данные:

Обратите внимание на то, что дата документа не совпадает с датами отдельных записей, которые мы создаем в движениях документа. [479]
Нажмем "Записать", и из формы списка документа откроем движения нашего документа в регистре "ОстаткиМатериалов" (кнопка "Перейти").
Вы видите, что записи регистра накопления в точности соответствуют тем, которые мы создали в документе:

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


Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
   Для Каждого ЗаписьРегистра Из Движения.ОстаткиМатериалов Цикл
       ЗаписьРегистра.Период = Дата;
   КонецЦикла;
КонецПроцедуры [480]
Снова запустим 1С:Предприятие в режиме отладки, откроем наш документ и нажмем "Записать". Открыв движения документа в регистре "ОстаткиМатериалов" увидим, что значение поля "Период" у всех записей стало равно дате документа:

Можно сказать, что мы достигли поставленной цели, но лишь в ситуации, когда запись документа выполняется интерактивными средствами.
Если программно вызвать метод Записать() у объекта нашего документа, он будет записан без участия формы документа. Это значит, что событие "При записи" формы документа вызвано не будет, и наш код обработчика не отработает.


Чтобы предусмотреть возможность синхронизации периода движений документа с датой документа и в случае программной записи объекта Документ, следует использовать обработчик события "Перед записью" объекта документ, а не формы документа. [481]
Событие "Перед записью", в случае интерактивной записи документа, сначала будет вызвано у формы документа, а затем объекта документа (смотри схему событий в раздел "Последовательность событий при записи документа из форм документа" на странице 581). Поэтому вернемся в конфигуратор удалим из модуля формы добавленный нами текст и создадим обработчик события "Перед записью" в модуле объекта документ:


Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
   //Определить нужно ли обновлять дату в движениях
   ОбновитьДатуДвижений = ЭтоНовый() Или Движения.ОстаткиМатериалов.Модифицированность();
   Если Не ОбновитьДатуДвижений Тогда // Проверить, что дата изменилась
       Запрос = Новый Запрос;
       Запрос.УстановитьПараметр("ТекущийДокумент", Ссылка);
       Запрос.Текст =
       "ВЫБРАТЬ
       |    ВводНачальныхОстатковНоменклатуры.Дата
       |ИЗ
       |    Документ.ВводНачальныхОстатковНоменклатуры КАК ВводНачальныхОстатковНоменклатуры
       |ГДЕ
       |    ВводНачальныхОстатковНоменклатуры.Ссылка = &ТекущийДокумент";
       Выборка = Запрос.Выполнить().Выбрать();
       Выборка.Следующий();
       ОбновитьДатуДвижений = Выборка.Дата <> Дата;
   КонецЕсли;
   //Установить всем новую дату, если нужно


   Если ОбновитьДатуДвижений Тогда
       Если Не Движения.ОстаткиМатериалов.Выбран() И Не Движения.ОстаткиМатериалов.Модифицированность() Тогда
           Движения.ОстаткиМатериалов.Прочитать();
       КонецЕсли;
       Для Каждого ЗаписьРегистра Из Движения.ОстаткиМатериалов Цикл
           ЗаписьРегистра.Период = Дата;
       КонецЦикла;
   КонецЕсли;
КонецПроцедуры
Как вы видите, в этом случае обработчик содержит больше кода за счет дополнительных проверок, которые выполняются в результат того, что возможна как интерактивная, так и программная запись объекта. [482]
Поясним содержание обработчика. Если записывается новый документ или были изменены его движения – следует обновить дату движений. В противном случае мы считываем запросом дату документа из базы данных и сравниваем ее с датой, установленной у записываемого объекта. Если даты разные – также следует обновить дату движений.
Перед установкой даты мы проверяем, был ли прочитан набор записей в свойстве "Движения" объекта и изменялся ли он. Если оба этих условия ложны – это значит, что набор записей в свойстве "Движения" объекта пуст, и это состояние не связано с его изменением. В этом случае, чтобы предотвратить ошибочное удаление записей в регистре (перезапись пустым набором записей), мы предварительно читаем движения из регистра в набор записей в свойстве "Движения". Затем, как и в предыдущем случае, устанавливаем нужную дату для всех записей этого набора. При выполнении записи объекта Документ, этот набор будет записан в регистр накопления.
Запустим 1С:Предприятие в режиме отладки и убедимся, что указав новую дату для нашего документа и записав его, мы получим движения в регистре накопления с новой датой.


В процессе записи нашего документа можно управлять не только периодом записей регистра накопления, но и значениями других полей регистра.
Например, по аналогичному принципу может быть создан документ "Операция", позволяющий вводить ручные операции в регистр бухгалтерии. При этом, вероятно, кроме управления периодом записей регистра, вам потребуется управлять значением поля "Активность" ("включать" и "выключать" проводки документа) и т.д.
В заключение следует сказать, что выбор обработчика, в котором будет размещен текст процедуры, зависит от логики работы создаваемого объекта. Если конфигурация не предусматривает программной записи объекта – можно выбрать обработчик модуля формы. Если предполагается и программная модификация объекта – следует выбирать обработчик модуля объекта.
Заметьте, что оба эти способа не исключают модификацию записей регистра через объект Регистр<...>НаборЗаписей.<имя регистра>. Поэтому, если логика конфигурации подразумевает возможность программной модификации объекта набор записей, код обработки [483] следует размещать в обработчике события набора записей. Все попытки изменить данные регистра будут сведены, в конечном счете, к записи именно набора записей. [484]



Легким движением брюки превращаются...


Вот мы и создали с вами небольшое прикладное решение, которое позволило автоматизировать работу нашей ремонтной фирмы OOO "На все руки мастер". Теперь настало время для одного чудесного превращения.

Дело в том, что наше прикладное решение настолько понравилось сотрудникам OOO "На все руки мастер", что они рассказали о нем своим соседям – косметическому салону "Королева красоты". Сотрудники салона посмотрели, как работает наше прикладное решение, и обратились к нам с просьбой автоматизировать и их салон тоже.

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

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

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



Графическое представление начислений


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



Иллюстрация механизмов вытеснения и зависимости от базы


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

На закладке "Отчет" сбросим флаг "Использовать построитель отчета" и нажмем "OK" – наш отчет готов.

Запустим 1С:Предприятие в режиме отладки, сформируем отчет "Перерасчет" и убедимся, что пока он не содержит никаких данных.

Создадим новый документ Начисление сотрудникам №2, в котором начислим премию за март Гусакову и Деловому:


[345]

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

Теперь снова откроем документ Начисление Сотрудникам №1 и изменим оклад Гусакова с 10 000 на 7 000. Нажмем "ОК". Сформируем отчет "Перерасчет":

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

Вы можете спросить: "почему в перерасчет попали записи как про Делового, так и про Гусакова, хотя оклад мы меняли только Гусакову"? Дело в том, что платформа не отслеживает конкретные изменения, которые пользователь внес в записи документа. Она отслеживает лишь факт изменения набора записей регистра расчета в результате проведения (перепроведения) документа. Поэтому в набор записей перерасчета она включает информацию о ВСЕХ записях регистра, значение ресурсов которых МОЖЕТ измениться в результате перепроведения документа, создавшего базовые записи регистра.




Перепроведем документ Начисления сотрудникам №2 (которым мы начисляли премию) и сформируем отчет "Перерасчет". Он снова не содержит никаких данных – система отметила тот факт, что MЫ "пересчитали" зависимые записи и очистила таблицу перерасчета. [346]

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

Теперь посмотрим, как работает механизм вытеснения по периоду действия. Для этого нам понадобится создать третий документ НачисленияСотрудникам №3:



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

Нажмем "ОК" и сформируем отчет "Перерасчет":



Как вы видите, в перерасчет попала запись о начислении оклада Гусакову. Это явилось результатом работы механизма вытеснения по [347] периоду действия, ведь вид расчета "Невыход" вытесняет у нас вид расчета "Оклад".

Обратите внимание, что в перерасчет попала и запись о начислении премии Гусакову. Если вы помните, при создании предопределенных видов расчета мы указали, что результат вида расчета премия будет зависеть от изменения результата вида расчета "Невыход". Эта зависимость косвенная, но поскольку явно указали такую зависимость платформа ее отследила.

Перепроведем документы Начисление сотрудникам №1 и №2 и убедимся, что таблица перерасчета очистилась. [348]


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


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



Использование регистра бухгалтерии


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



Источники данных запросов


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

Реальные таблицы, в свою очередь, могут быть объектными (ссылочными) или не объектными (не ссылочными):

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

Виртуальные таблицы формируются, в основном, из данных нескольких таблиц базы данных. Например, виртуальной таблицей является таблица "РегистрНакопления.ОстаткиМатериалов.ОстаткиИОбороты", формируемая из нескольких таблиц регистра накопления "ОстаткиМатериалов". Иногда виртуальные таблицы могут [163] формироваться и из одной реальной таблицы (например, виртуальная таблица "Цены.СрезПоследних" формируется на основе таблицы регистра сведений "Цены"). Однако общим для всех виртуальных таблиц является то, что им можно задать ряд параметров, которые будут определять, какие данные будут включены в эти виртуальные таблицы. Набор таких параметров может быть различным для разных виртуальных таблиц, и определяется данными, хранящимися в исходных таблицах базы данных.

Реальные таблицы подразделяются на объектные (ссылочные) и не объектные (не ссылочные).

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

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



Изменение процедуры проведения документа ОказаниеУслуги


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

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

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

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

Процедура ОбработкаПроведения(Отказ, Режим)

//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

// Данный фрагмент построен конструктором.

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

Для Каждого ТекСтрокаПереченьНоменклатуры Из ПереченьНоменклатуры Цикл

Если ТекСтрокаПереченьНоменклатуры.Номенклатура.ВидНоменклатуры <> Перечисления.ВидыНоменклатуры.Материал Тогда

       Продолжить;

   КонецЕсли;

   // регистр ОстаткиМатериалов Расход

   Движение = Движения.ОстаткиМатериалов.Добавить();

   Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

   Движение.Период = Дата;

   Движение.Материал = ТекСтрокаПереченьНоменклатуры.Номенклатура;

   Движение.Склад = Склад; [134]

   Движение.Количество = ТекСтрокаПереченьНоменклатуры.Количество;

КонецЦикла;

// записываем движения регистров




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

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

Для ресурса "Стоимость" выберем значения реквизита табличной части "Сумма":

Добавим в список регистров новый регистр...


[141]

Нажмем "ОК" и посмотрим на текст, который сформировал конструктор:

Процедура ОбработкаПроведения(Отказ, Режим)

//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

// Данный фрагмент построен конструктором.

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

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

// регистр ОстаткиМатериалов Приход

   Движение = Движения.ОстаткиМатериалов.Добавить();

   Движение.ВидДвижения = ВидДвиженияНакопления.Приход;

   Движение.Период = Дата;

   Движение.Материал = ТекСтрокаМатериалы.Материал;

   Движение.Склад = Склад;

   Движение.Количество = ТекСтрокаМатериалы.Количество;

КонецЦикла;

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

   // регистр СтоимостьМатериалов Приход

   Движение = Движения.СтоимостьМатериалов.Добавить();

   Движение.ВидДвижения = ВидДвиженияНакопления.Приход;

   Движение.Период = Дата;

   Движение.Материал = ТекСтрокаМатериалы.Материал;

   Движение.Стоимость = ТекСтрокаМатериалы.Сумма;




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

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

Откроем в конфигураторе окно редактирования объекта конфигурации Документ "ОказаниеУслуги", перейдем на закладку "Данные" и создадим новый реквизит табличной части документа с именем "Стоимость", типом Число, длиной 15 и точностью 2:


[145]

После этого откроем форму "ФормаДокумента" документа "ОказаниеУслуги" и добавим в табличное поле колонку, отображающую новый реквизит "Стоимость", расположив ее после колонки "Номенклатура":

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

Откроем в конфигураторе окно редактирования объекта конфигурации Документ "ОказаниеУслуги" и укажем, что он будет создавать движения по регистру накопления "СтоимостьМатериалов". [146]

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

Нажмем "ОК" и в тексте, сформированном конструктором, восстановим изменения, внесенные нами ранее, а также объединим два цикла обхода табличной части документа в один (изменения выделены жирным шрифтом):




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

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

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

Процедура ОбработкаПроведения(Отказ, Режим)

//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

// Данный фрагмент построен конструктором.

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

Для Каждого ТекСтрокаПереченьНоменклатуры Из ПереченьНоменклатуры Цикл [157]

Если ТекСтрокаПереченьНоменклатуры.Номенклатура.ВидНоменклатуры <> Перечисления.ВидыНоменклатуры.Материал Тогда

       Продолжить;

   КонецЕсли;

   // регистр ОстаткиМатериалов Расход

   Движение = Движения.ОстаткиМатериалов.Добавить();

   Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

   Движение.Период = Дата;

   Движение.Материал = ТекСтрокаПереченьНоменклатуры.Номенклатура;

   Движение.Склад = Склад;

   Движение.Количество = ТекСтрокаПереченьНоменклатуры.Количество;

   //КонецЦикла;

   //Для Каждого ТекСтрокаПереченьНоменклатуры Из ПереченьНоменклатуры Цикл

   // регистр СтоимостьМатериалов Расход

   Движение = Движения.СтоимостьМатериалов.Добавить();

   Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

   Движение.Период = Дата;

   Движение.Материал = ТекСтрокаПереченьНоменклатуры.Номенклатура;

   Движение.Стоимость = ТекСтрокаПереченьНоменклатуры.Стоимость*ТекСтрокаПереченьНоменклатуры.Количество;

КонецЦикла;

Для Каждого ТекСтрокаПереченьНоменклатуры Из ПереченьНоменклатуры Цикл




Движения.ОстаткиМатериалов.Записать();

//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

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

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

Запустим 1С:Предприятие в режиме отладки и проверим работу процедуры проведения документа "ОказаниеУслуги".

Откроем документ Оказание услуги №1 и внесем в него следующие изменения (обратите внимание, что изменен не только состав номенклатуры в табличной части, но и время документа):



Перед тем, как провести документ, откроем список регистра "ОстаткиМатериалов", содержащий движения этого документа. Для этого выполним команду Перейти
Остатки материалов из командной панели документа. [135]

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



[136]



КонецЦикла;

// записываем движения регистров

Движения.ОстаткиМатериалов.Записать();

Движения.СтоимостьМатериалов.Записать();

//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

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

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

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

Процедура ОбработкаПроведения(Отказ, Режим)

//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

// Данный фрагмент построен конструктором.

// При повторном использовании конструктора, [142] внесенные вручную изменения будут утеряны!!!

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

   // регистр ОстаткиМатериалов Приход

   Движение = Движения.ОстаткиМатериалов.Добавить();

   Движение.ВидДвижения = ВидДвиженияНакопления.Приход;

   Движение.Период = Дата;

   Движение.Материал = ТекСтрокаМатериалы.Материал;

   Движение.Склад = Склад;

   Движение.Количество = ТекСтрокаМатериалы.Количество;

//КонецЦикла;

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

   // регистр СтоимостьМатериалов Приход

   Движение = Движения.СтоимостьМатериалов.Добавить();

   Движение.ВидДвижения = ВидДвиженияНакопления.Приход;

   Движение.Период = Дата;

   Движение.Материал = ТекСтрокаМатериалы.Материал;

   Движение.Стоимость = ТекСтрокаМатериалы.Сумма;

КонецЦикла;

// записываем движения регистров

Движения.ОстаткиМатериалов.Записать();

Движения.СтоимостьМатериалов.Записать();

//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

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

Запустим 1С:Предприятие в режиме отладки и перепроведем документ Приходная накладная №1.

Затем откроем его и убедимся, что документ создает желаемые записи в регистрах накопления:

[143]





[144]



Процедура ОбработкаПроведения(Отказ, Режим)

//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

// Данный фрагмент построен конструктором.

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

Для Каждого ТекСтрокаПереченьНоменклатуры Из ПереченьНоменклатуры Цикл

   Если ТекСтрокаПереченьНоменклатуры.Номенклатура.ВидНоменклатуры <> Перечисления.ВидыНоменклатуры.Материал Тогда

       Продолжить;

   КонецЕсли;

   // регистр ОстаткиМатериалов Расход

   Движение = Движения.ОстаткиМатериалов.Добавить();

   Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

   Движение.Период = Дата; [147]

   Движение.Материал = ТекСтрокаПереченьНоменклатуры.Номенклатура;

   Движение.Склад = Склад;

   Движение.Количество = ТекСтрокаПереченьНоменклатуры.Количество;

//КонецЦикла;

//Для Каждого ТекСтрокаПереченьНоменклатуры Из ПереченьНоменклатуры Цикл

   // регистр СтоимостьМатериалов Расход

   Движение = Движения.СтоимостьМатериалов.Добавить();

   Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

   Движение.Период = Дата;

   Движение.Материал = ТекСтрокаПереченьНоменклатуры.Номенклатура;

   Движение.Стоимость = ТекСтрокаПереченьНоменклатуры.Стоимость*ТекСтрокаПереченьНоменклатуры.Количество;

КонецЦикла;

// записываем движения регистров

Движения.ОстаткиМатериалов.Записать();

Движения.СтоимостьМатериалов.Записать();

//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

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

Проверим, как теперь работает проведение документа "ОказаниеУслуги".

Запустим 1С:Предприятие в режиме отладки и укажем стоимость выбранных материалов:



[148]

Проведем документ Оказание услуги №1 и посмотрим на движения этого документа по регистру "СтоимостьМатериалов":



Теперь создадим и проведем еще два документа "ОказаниеУслуги". Эти документы понадобятся нам в дальнейшем, поэтому будьте внимательны и обратите внимание на то, что эти документы созданы другими датами:



[149]



Движения документов Оказание услуги №2 и №3 должны выглядеть, соответственно, следующим образом:





[150]



   //регистр Продажи

КонецЦикла;

// записываем движения регистров

Движения.ОстаткиМатериалов.Записать();

Движения.СтоимостьМатериалов.Записать();

Движения.Продажи.Записать();

//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

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

Теперь в тело созданного нами цикла вставим команды создания движений регистра "Продажи":

Процедура ОбработкаПроведения(Отказ, Режим)

//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

// Данный фрагмент построен конструктором.

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

Для Каждого ТекСтрокаПереченьНоменклатуры Из ПереченьНоменклатуры Цикл

   Если ТекСтрокаПереченьНоменклатуры.Номенклатура.ВидНоменклатуры <> Перечисления.ВидыНоменклатуры.Материал Тогда

       Продолжить;

   КонецЕсли;

   // регистр ОстаткиМатериалов Расход

   Движение = Движения.ОстаткиМатериалов.Добавить();

   Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

   Движение.Период = Дата;

   Движение.Материал = ТекСтрокаПереченьНоменклатуры.Номенклатура;

   Движение.Склад = Склад;

   Движение.Количество = ТекСтрокаПереченьНоменклатуры.Количество;

   //КонецЦикла;

   //Для Каждого ТекСтрокаПереченьНоменклатуры Из ПереченьНоменклатуры Цикл

   // регистр СтоимостьМатериалов Расход

   Движение = Движения.СтоимостьМатериалов.Добавить();

   Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

   Движение.Период = Дата;

   Движение.Материал = ТекСтрокаПереченьНоменклатуры.Номенклатура;

   Движение.Стоимость = ТекСтрокаПереченьНоменклатуры.Стоимость * ТекСтрокаПереченьНоменклатуры.Количество;

КонецЦикла;

Для Каждого ТекСтрокаПереченьНоменклатуры Из ПереченьНоменклатуры Цикл

   //регистр Продажи

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

   Движение.Период = Дата;



   Движение.Номенклатура = ТекСтрокаПереченьНоменклатуры.Номенклатура; [158]

   Движение.Клиент = Клиент;

   Движение.Мастер = Мастер;

   Движение.Количество = ТекСтрокаПереченьНоменклатуры.Количество;

   Движение.Выручка = ТекСтрокаПереченьНоменклатуры.Сумма;

   Движение.Стоимость = ТекСтрокаПереченьНоменклатуры.Стоимость * ТекСтрокаПереченьНоменклатуры.Количество;

КонецЦикла;

// записываем движения регистров

Движения.ОстаткиМатериалов.Записать();

Движения.СтоимостьМатериалов.Записать();

Движения.Продажи.Записать();

//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

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

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

Запустим 1С:Предприятие в режиме отладки и перепроведем все документы "Оказание услуги". Движения этих документов по регистру "Продажи" должны иметь следующий вид:

Движения документа Оказание услуги №1



[159]

Движения документа Оказание услуги №2



Движения документа Оказание услуги №3



Теперь у нас есть практически вся необходимая информация для анализа деятельности OOO "На все руки мастер" и в следующей главе мы займемся с вами тем, что создадим несколько отчетов, которые будут представлять нам итоговую информацию о работе предприятия. [160]


Язык запросов


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

·описание запроса,
·объединение запросов,
·упорядочивание результатов,
·АВТОУПОРЯДОЧИВАНИЕ,
·описание итогов.

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

Описание запроса определяет источники данных, поля выборки, группировки и т.д. [164]

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

Упорядочивание результатов определяет условия упорядочивания строк результата запроса.

АВТОУПОРЯДОЧИВАНИЕ позволяет включить режим автоматического упорядочивания строк результата запроса.

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

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



Кластерный анализ


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

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

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

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

Типы колонок источника данных:

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

Параметры:

·КоличествоКластеров – (Число) – количество искомых кластеров.
·ТипЗаполненияТаблицы – (все поля, используемые поля, ключевые поля, не заполнять) – какие поля выводить в таблицу кластеризации.
·Стандартизация – (не стандартизировать, стандартизировать) – необходимость стандартизации данных. Если необходимо стандартизировать данные, то анализатор предварительно приведет все характеристики объектов к одной весовой категории.
·МераРасстояния – (ЕвклидоваМетрика, ЕвклидоваМетрикаВКвадрате, МетрикаГорода, МетрикаДоминирования) – каким образом вычислять расстояние между объектами.
·МетодКластеризации – (БлижняяСвязь, ДальняяСвязь, КСредних, ЦентрТяжести) – каким методом выполнять кластеризацию.



Логическая связь объектов


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

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

Теперь для того, чтобы узнать остатки материалов, обладающих некоторым значением характеристики, достаточно будет выбрать из Регистра сведений все элементы подчиненного справочника,[257] обладающие таким значением характеристики, и затем по ним и их владельцам получить остатки регистра накопления.[258]



Механизм распределенных информационных баз


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

Механизм распределенных информационных баз реализуется планами обмена. Для этого объект конфигурации План обмена содержит свойство "Распределенная информационная база". Если это свойство установлено, для данного плана обмена включается механизм распределенных информационных баз и разработчик получает возможность создать распределенную базу исключительно интерактивными средствами, без написания кода. Такая возможность не исключает программное управление обменом, которое также доступно при работе с распределенными информационными базами и в ходе создания примера мы рассмотрим оба варианта организации обмена в распределенных информационных базах. [426]



Модель прогноза


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

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

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

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

[470]

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

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

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



Настройка параметров и выполнение анализа


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

Исходные данные для анализа задаются свойством ИсточникДанных. Свойства НастройкаКолонок и Параметры позволяют интерактивно настраивать колонки анализа (через табличные поля), и задавать параметры для выбранного типа анализа который задается свойством ТипАнализа. Кроме того, построитель отчета анализа данных допускает переопределение стандартного макета отчета путем использования свойства Макет.

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

Кроме всего перечисленного, ПостроительОтчетаАнализаДанных позволяет получить объект АнализДанных, соответствующий всем интерактивным настройкам, выполненным в построителе, методом ПолучитьАнализ():

[474]



Настройка параметров модели прогноза


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

[475]



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


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

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

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



Объект конфигурации Перечисление


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

В реальной жизни этому объекту может соответствовать, например, перечисление вариантов указания цены ("включая НДС", "без НДС").

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

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

Для тех, кто работал с версией 7.7

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

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

О структуре объектов встроенного языка, предназначенных для работы с перечислениями можно прочитать в главе "Перечисления" на странице 584. [131]



Объект конфигурации План счетов


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

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

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

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

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

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

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

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



Объект конфигурации План видов характеристик


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

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

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

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

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

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






Для тех, кто работал с версией 7.7

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

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

Работа с планом счетов рассматривается теперь не как основное предназначение плана видов характеристик, а как частный случай, вытекающий из его возможностей. Конечно, как мы увидим далее, взаимодействие плана видов характеристик с планом счетов максимально автоматизировано средствами платформы (no сравнению с взаимодействием с другими объектами конфигурации). Однако основной акцент делается на универсальность механизма, предоставляемого планом видов характеристик. В частности это видно и из названия объекта, где вместо слова субконто (разрез аналитического учета) теперь используется слово характеристика, обозначающее свойство объекта конфигурации, описанное вне его самого (в другом объекте конфигурации).[255]



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

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

Объект конфигурации План видов характеристик


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

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

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



Объект конфигурации План видов расчета


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

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

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

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

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

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




·Базовые – это те виды расчета, результаты которых должны быть использованы при перерасчете этого вида расчета.
·Вытесняющие – это те виды расчета, которые вытесняют этот вид расчета по периоду действия.
·Ведущие – это те виды расчета, изменение результатов которых должно приводить к необходимости перерасчета этого вида расчета.
Здравый смысл подсказывает, что все базовые виды расчета должны быть включены и в категорию ведущих. Кроме того, ведущие виды расчета могут содержать и некоторые другие виды расчета, косвенно влияющие на данный вид расчета. Например, мы имеем три вида расчета: невыход, оклад и премия. Невыход вытесняет оклад по периоду действия, а премия зависит от оклада по базовому периоду.

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

[323]



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

О структуре объектов встроенного языка, предназначенных ^ работы с планом видов расчета можно прочитать в главе "Планы видов расчета" на странице 590. [324]

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


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

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

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

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

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

·КонстантаМенеджерЗначения.<имя>,
·СправочникОбъект.<имя>,
·ДокументОбъект.<имя>,
·ПоследовательностьНаборЗаписей.<имя>,
·ПланВидовХарактеристикОбъект.<имя>,
·ПланСчетовОбъект.<имя>,
·ПланВидовРасчетаОбъект.<имя>,
·РегистрСведенийНаборЗаписей.<имя>,
·РегистрНакопленияНаборЗаписей.<имя>,
·РегистрБухгалтерииНаборЗаписей.<имя>,
·РегистрРасчетаНаборЗаписей.<имя>,
·ПерерасчетНаборЗаписей.<имя>,
·БизнесПроцессОбъект.<имя>,
·ЗадачаОбъект.<имя>,
·УдалениеОбъекта.

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

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




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

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

Так вот, признак "Авторегистрация", устанавливаемый при указании состава данных плана обмена, позволяет указать, что параметры обмена данными будут формироваться каждый раз самим механизмом регистрации изменений на основании информации, содержащейся в плане обмена. После автоматического заполнения параметров обмена, разработчик все же имеет возможность внести изменения в сформированные таким образом параметры. Для этого следует использовать обработчики событий объектов, участвующих в обмене – "ПередЗаписью" и "ПередУдалением", в которых можно модифицировать список узлов-получателей (т.е. тех узлов, для которых регистрируются изменения). Кроме этого, существует возможность отключить авторегистрацию изменений, и тогда параметры обмена данными нужно будет формировать полностью средствами встроенного языка. Гипотетически делать это можно в любом фрагменте кода, но для того, чтобы конфигурация была легко читаема, рекомендуется использовать для этих целей все те же обработчики событий "ПередЗаписью" и "ПередУдалением". В этом случае код формирования параметров обмена данными будет сосредоточен в логически понятных точках, а не разбросан по всей конфигурации.



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

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

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

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

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


Объект конфигурации Регистр бухгалтерии


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

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

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

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

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

О структуре объектов встроенного языка, предназначенных для работы с регистрами бухгалтерии можно прочитать в главе "Регистры бухгалтерии" на странице 603.[301]



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


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

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

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

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

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

·День,
·Месяц,
·Квартал,
·Год.

Периодичность регистра расчета определяет промежуток времени, к которому будет относиться каждая запись регистра. Если указана периодичность "День", то каждая запись регистра будет относиться к какому либо дню, если периодичность "Месяц" – то к какому либо месяцу и т.д. Для указания факта принадлежности записи к какому либо периоду, регистр имеет служебный реквизит [327] "ПериодРегистрации" типа Дата. При записи данных в регистр платформа всегда приводит значение этого реквизита к началу того периода, в который он попадает.

Например, если в регистр расчета с периодичностью месяц записать данные, где "ПериодРегистрации" задан как 08.04.2004, то регистр сохранит эти данные со значением поля "ПериодРегистрации" 01.04.2004:




[328]

Если в этой же ситуации периодичность регистра будет год, сохраненное значение периода регистрации будет 01.01.2004:

[329]

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



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



[330]

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



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

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

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



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

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

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



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

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

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

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

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

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





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

О структуре объектов встроенного языка, предназначенных для работы с регистром расчета, можно прочитать в главе "Регистры расчета" на странице 606. [334]

Объект конфигурации регистр сведений


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

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

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

Периодичность регистра сведений можно определить одним из следующих значений:

·в пределах секунды,
·в пределах дня,
·в пределах месяца,
·в пределах квартала,
·в пределах года,
·в пределах регистратора (если установлен режим записи – "Подчинение регистратору").

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

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




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

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



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

О структуре объектов встроенного языка, предназначенных для работы с регистрами сведений можно прочитать в главе "Регистры сведений" на странице 593. [121]

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


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

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

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

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



Общая статистика


Тип анализа АнилизДанныхОбщаяСтатистика позволяет получать общестатистические показатели выборки, которую представляют исходные данные.

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

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

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

Для непрерывных и дискретных данных рассчитываются различные статистические показатели.

Для непрерывных данных рассчитывается:

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

Для дискретных данных рассчитывается:




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

·частота – количество вхождений уникального значения в выборку,
·относительная частота – частота, выраженная в процентах от общего количества значений выборки,
·накопленная частота – сумма частоты значения и частот всех предыдущих значений выборки,
·накопленная относительная частота – сумма относительной частоты и относительных частот всех предыдущих значении выборки. [452]
При выводе отчета при помощи построителя отчета анализа данных, будет создана круговая диаграмма по относительной частоте значений в выборке.

Типы колонок источника данных:

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