использоваться для выполнения трех различных задач.
Во-первых, для визуального отображения существующего результата анализа данных.
Во-вторых, для интерактивной настройки параметров анализа данных, выполнения анализа и отображения полученного результата. В-третьих, для настройки параметров модели прогноза.
Отображение существующего результата анализа
О |
бъект ПостроительОтчетаАнализаДанных может быть использован для отображения результата анализа данных, который был получен ранее. Для этого можно с помощью стандартного конструктора создать новый объект ПостроительОтчетаАнализаДанных и в методе Вывести() передать ему существующий результат анализа:
|
Результат анализа
Построитель = Новый ПостроителъОтчетаАнализаДанных; Построитель. Вывести(РезультатАнализа, ТабличныйДокумент);

472
473
Использование основных объектов конфигурации
Анализ и прогнозирование данны>
Настройка параметров и выполнение анализа
О |
бъект ПостроительОтчетаАнализаДанных может быТь использован для выполнения анализа с интерактивной настройкой параметров и последующего отображения результата.
Исходные данные для анализа задаются свойством ИсточникДанных. Свойства НастройкаКолонок и Параметры позволяют интерактивно настраивать колонки анализа (через табличные поля), и задавать параметры для выбранного типа анализа который задается свойством ТипАнализа. Кроме того, построитель отчета анализа данных допускает переопределение стандартного макета отчета путем использования свойства Макет.
В дальнейшем методом Выполнить() можно получить результат анализа данных, который будет доступен через свойство построителя Результат. Таким образом, при необходимости, его можно сохранить в базе данных. Если же сохранения результата не требуется, можно выполнить метод Вывести(), который выведет данные результата анализа, полученного методом Выполнить().
Кроме всего перечисленного,
ПостроительОтчетаАнализаДанных позволяет получить объект АнализДанных, соответствующий всем интерактивным настройкам, выполненным в построителе, методом ПолучитьАнализ():
Настройка параметров модели прогноза
|
|
О |
бъект ПостроительОтчетаАнализаДанных может быть использован для интерактивной настройки параметров модели прогноза (через табличные поля). Для этого следует использовать его свойство МодельПрогноза, в которое передается настраиваемая модель. После того, как настройка модели выполнена, результат прогноза может быть получен методом модели прогноза Выполнить():
|
|
|
474
475
Использование основных объектов конфигурации

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

476
477
Использование основных объектов конфигурации
Создание документа ввода начальных остатков
Раздвинем форму вниз и разместим в ней табличное поле
командной панелью. Зададим имя табличного поля
«ОстаткиМатериалов» и тип значения
«РегистрНакопленияНаборЗаписей. ОстаткиМатериалов»:
Удалим из табличного поля колонки «Регистратор» и «Активность» (они нам не понадобятся), и изменим размеры формы и расположение элементов управления:
|
|

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


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


Таким образом, мы добились поставленной цели: с одной стороны, задавая дату документа, мы можем фиксировать момент внесения изменений в записи регистра, с другой стороны - для каждой создаваемой нами записи регистра, мы можем указать индивидуальное значение поля «Период».
Теперь займемся «ужесточением» требований, предъявляемых к тому, как наш документ формирует записи регистра, и рассмотрим два типичных варианта.
Первое требование, которое мы реализуем, будет заключаться в том, что записи регистра должны формироваться той же датой, что и дата документа. Иначе говоря, синхронизируем дату движений с датой документа.
Для этого в обработчик события «Перед записью» формы документа добавим следующий текст:
Можно сказать, что мы достигли поставленной цели, но лишь в ситуации, когда запись документа выполняется интерактивными средствами.
Если программно вызвать метод Записать() у объекта нашего документа, он будет записан без участия формы документа. Это значит, что событие «При записи» формы документа вызвано не будет, и наш код обработчика не отработает.
Чтобы предусмотреть возможность синхронизации периода движений документа с датой документа и в случае программной записи объекта Документ, следует использовать обработчик события «Перед записью» объекта документ, а не формы документа.
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Для Каждого ЗаписьРегистра Из Движения. ОстаткиМатериалов Цикл
ЗаписьРегистра. Период = Дата; КонецЦикла; КонецПроцедуры


480
481
Использование основных объектов конфигурации
Создание документа ввода начальных остатков
![]()



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

482
483
следует размешать в обработчике события набора записей. Все попытки изменить данные регистра будут сведены, в конечном счете, к записи именно набора записей.
Глава 16. Легким движением брюки превращаются...
Вот мы и создали с вами небольшое прикладное решение, которое позволило автоматизировать работу нашей ремонтной фирмы OOO «На все руки мастер». Теперь настало время для одного чудесного превращения.
Дело в том, что наше прикладное решение настолько понравилось сотрудникам OOO «На все руки мастер», что они рассказали о нем своим соседям - косметическому салону «Королева красоты». Сотрудники салона посмотрели, как работает наше прикладное решение, и обратились к нам с просьбой автоматизировать и их салон тоже.
И мы, конечно же, с радостью согласились, по одной простой причине: мы с вами создали универсальную конфигурацию, подходящую для автоматизации практически любой деятельности, связанной с оказанием услуг.
Все, что нам осталось теперь сделать, чтобы наша конфигурация смогла работать в косметическом салоне, - просто создать новую информационную базу с нашей конфигурацией, и заполнить ее новыми данными, - сотрудниками и новой номенклатурой. Все механизмы учета, которые мы с вами создавали, не были привязаны к какой-либо специфике конкретного предприятия, а потому могут с успехом использоваться на любом другом предприятии, имеющем аналогичную область деятельности.
Таким образом, даже если в косметическом салоне пожелают иметь дополнительную функциональность, нам потребуется всего лишь дописать несколько модулей к нашей конфигурации, что гораздо эффективнее, чем создавать заново индивидуальное решение только для данного предприятия.
484
485
Часть III. Специальные приемы разработки
Третья часть нашей книги будет посвящена некоторым конкретным приемам использования тех или иных объектов конфигурации которые могут потребоваться разработчику в процессе создания и модификации конфигурации.
Глава 1. Общие приемы
Существует ряд приемов использования объектов конфигурации, которые нельзя отнести только к какому-то одному виду объектов. Такие приемы мы собрали в этой главе.

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

В форме документа, в обработчик события нажатия кнопки «Подбор» добавим следующий текст:
• 




когда в форме справочника будет выполнен интерактивный
выбор,
• когда в форме справочника будет вызван метод
ОповеститьОВыборе().
Различные способы подбора мы проиллюстрируем на примере подбора элементов справочника «Номенклатура» в документ «ПриходнаяНакладная».
Одиночный подбор
П |
ри одиночном подборе форма справочника будет закрываться сразу после выбора элемента. Для выбора следующего элемента необходимо будет снова инициировать подбор.
ПроцедураКоманднаяПанель1Подбор(Кнопка)
ФормаПодбора = Справочники. Номенклатура
ПолучитьФормуВыбора( ,ЭлементыФормы. Материалы); ФормаПодбора. Открыть(); КонецПроцедуры
Затем создадим обработчик события «Обработка выбора» табличного поля «Материалы», расположенного в форме документа «ПриходнаяНакладная»:
Процедура МатериалыОбработкаВыбора(Элемент, ВыбранноеЗначение,
СтандартнаяОбработка)
НоваяСтрока = Материалы. Добавить();
НоваяСтрока. Материал = ВыбранноеЗначение;
ЭлементыФормы. Материалы. ТекущаяСтрока = НоваяСтрока; КонецПроцедуры

488
489
Специальные приемы разработки
Общие приемы




Запустите 1С:Предприятие в режиме отладки и проверьте работу одиночного подбора.
Множественный подбор
П |
ри множественном подборе форма справочника будех открыта до тех пор, пока пользователь не закроет ее интерактивно или пока не будет вызван метод формы Закрыть().
Для разнообразия создадим форму списка справочника «Номенклатура» и затем в форме документа «ПриходнаяНакладная», в обработчик события нажатия кнопки «Подбор» внесем следующие изменения:
В форме документа «ПриходнаяНакладная» внесем в обработчик события нажатия кнопки «Подбор» следующие изменения:
Процедура КоманднаяПанельШодбор(Кнопка)
ФормаПодбора = Справочники. Номенклатура
.ПолучитьФормуСписка(, ЭлементыФормы. Материалы);
ФормаПодбора. РежимВыбора = Истина;
//ФормаПодбора. ЗакрыватьПриВыборе = Ложь;
ФормаПодбора. МножественныйВыбор = Истина;
ФормаПодбора. Открыть(); КонецПроцедуры
В обработчик события «Обработка выбора» добавим обход массива переданных элементов:




ПроцедураКоманднаяПанельШодбор(Кнопка)
ФормаПодбора = Справочники. Номенклатура
.ПолучитьФормуСписка( ,ЭлементыФормы. Материалы);
ФормаПодбора. РежимВыбора = Истина; ФормаПодбора. ЗакрыватьПриВыборе = Ложь; ФормаПодбора. Открыть(); КонецПроцедуры
Процедура МатериалыОбработкаВыбора(Элемент, ВыбранноеЗначение,
СтандартнаяОбработка)
Для СчетчикЦикла = 0 по РезультатВыбора. ВГраница() цикл НоваяСтрока = Материалы. Добавить(); НоваяСтрока. Материал = РезультатВыбора[СчетчикЦикла]; КонецЦикла; КонецПроцедуры


Свойство «ЗакрыватьПриВыборе» как раз и будет задавать режим множественного выбора. Установка же свойства «РежимВыбора» понадобилась нам, так как в этом примере для получения подчиненной формы мы используем метод ПолучитьФормуСписка(). Полученная этим методом форма будет иметь свойство «РежимВыбора» установленным в Ложь (в отличие от получения формы методом ПолучитьФормуВыбора(), когда «РежимВыбора» устанавливается в Истина).
Запустите 1С:Предприятие в режиме отладки и проверьте работу множественного подбора.
Подбор с использованием множественного выбора
Е |
ще одним способом организации подбора является
возможность использования свойства формы
«Множественный выбор». Это свойство разрешает множественный выбор в табличных полях формы. В этом случае в форму документа будет возвращен не элемент справочника, а массив элементов, выбранных в табличном поле формы справочника.
Запустите 1С:Предприятие в режиме отладки и проверьте работу множественного подбора (множественный выбор в табличном поле выполняется при нажатой кнопке «Control»).
Теперь, если вы удалите комментарий в обработчике события нажатия кнопки «Подбор», то получите вариант «множественного подбора с использованием множественного выбора».
Использование метода ОповеститьОВыборе()
М |
етод формы ОповеститьОВыборе() используется в тех случаях, когда алгоритм формирования данных подбора сложен, и кроме собственно выбора элемента справочника от пользователя требуется указание некоторой дополнительной информации. В этом случае метод ОповеститьОВыборе() вызывается тогда, когда вся необходимая информация подбора сформирована.
Также метод ОповеститьОВыборе() может использоваться в тех случаях, когда требуется передать в форму документа не только

490
491
О6Щие приемы
выбранный элемент справочника (или массив элементов), а некоторую произвольную структуру данных.
Ввод на основании
М |
еханизм ввода на основании может быть использован для ввода новых объектов различного типа (документы, справочники, планы видов характеристик и т. д.). Мы рассмотрим этот механизм на примере ввода новых документов, как наиболее распространенном.
Для каждого объекта конфигурации Документ можно разрешить его ввод на основании других объектов базы данных и возможность являться основанием для других объектов. Действия по заполнению реквизитов при вводе на основании должны быть описаны в модуле объекта Документ, в обработчике события «Обработка заполнения». Есть возможность использовать конструктор ввода на основании, который позволяет визуальными средствами конструировать текст обработчика.
Рассмотрим пример, когда документ «ОказаниеУслуги» будет вводиться на основании элемента справочника «Клиенты».
Откроем окно редактирования объекта конфигурации Документ «ОказаниеУслуги» и добавим новый реквизит документа -«ОбъектОснование» с типом СправочникСсылка. Клиенты. Создание такого реквизита не является обязательной частью механизма ввода на основании и понадобится нам только для того, чтобы в последствии построить цепочку зависимых документов.
492
493
Специальные приемы разработки
Общие приемы

Перейдем на закладку «Ввод на основании» и определим состав документов, на основании которых может вводиться документ «ОказаниеУслуги», и основанием для которых он может являться:
Затем вызовем конструктор ввода на основании и зададим значения реквизитов документа, создаваемого на основании. Для этого воспользуемся кнопкой «Заполнить выражения»:
![]() |
|
Определим состав объектов и вызовем конструктор ввода на основании...

Обратите внимание, что для заполнения реквизита «ОбъектОснование» конструктор предложил использовать значение Основание. Ссылка. В данном случае такая запись будет избыточной, поскольку в качестве основания будет передана ссылка на элемент справочника. Однако в общем случае событие «Обработка заполнения» возникает при создании нового объекта на основании некоторого переданного значения. Совсем не обязательно, что это значение будет иметь тип ссылки.
Согласимся со всем, что предложил конструктор, и нажмем «ОК».
В модуле документа будет сформирован текст обработчика события «Обработка заполнения»:
ПроцедураОбработкаЗаполненш(Основание) //{{_КОНСТРУКТОР_ВВОД_НА_ОСНОВАНИИ
// Данный фрагмент построен конструктором. II При повторном использовании конструктора, // внесенные вручную изменения будут утеряны!!!


494
495
Специальные приемы разработки
Общие приемы





Если ТипЗнч(Основание) = Тип("СправочникСсылка. Клиенты") Тогда
// Заполнение шапки
Клиент = Основание. Ссылка;
ОбъектОснование = Основание. Ссылка; КонецЕсли;
//} }_KOHCTPyKTOP_BBOД HA_OCHOBAHИИ КонецПроцедуры
Как видите, для каждого типа объекта-основания формируется своя ветка условия Если..., в которой происходит заполнение реквизитов нового документа.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |















