Говоря о системе 1С:Предприятие в широком смысле, можно сказать, что она представляет собой совокупность четырех составляющих (рисунок 2.18):
· технологической платформы;
· прикладных решений различного масштаба и различной направленности, созданных на основе технологической платформы;
· методологии создания прикладных решений;
· информационно-технологической поддержки пользователей и
разработчиков.
Рисунок 2.18 - Структура 1С:Предприятия
Такая архитектура продиктована, прежде всего, теми задачами, которые призвана решать система 1С:Предприятие.
Во-первых, система должна обеспечивать высокий уровень адаптируемости прикладных решений под требования заказчика.
Во-вторых, система должна обеспечивать изменение готового прикладного решения разработчиком, не участвовавшим в его создании. Это особенно важно для прикладных решений в сфере экономических задач, где существенная часть разработчиков, не создает собственные прикладные решения, а дорабатывает и развивает существующие типовые решения.
В-третьих, система должна обеспечивать эффективное использование компьютерных технологий и платформ, не требуя, при этом, глубоких специальных знаний от разработчика.
В-четвертых, система должна обеспечивать стандартизацию разработки.
Система обладает достаточно широкими возможностями, однако ее архитектура и конкретная реализация механизмов и технологий платформы продиктована, прежде всего, необходимостью решения специализированных задач по созданию бизнес-приложений и требованиями, предъявляемыми к самой системе.
Платформа и прикладные решения
Основным концептуальным решением, отличающим систему 1С:Предприятие 8. от универсальных средств программирования, является четкое разделение на платформу и прикладное решение.
Прикладное решение 1С:Предприятия является самостоятельной сущностью и может выступать в качестве отдельного программного продукта. Однако создание, модификация и собственно функционирование прикладного решения невозможны без использования технологий и механизмов платформы. Поэтому платформа поставляется с каждым комплектом 1С:Предприятия (рисунок 2.19).
Средства разработки в составе платформы
Рисунок 2.19 - Структура технологической платформы 1С: Предприятия
Прикладные решения 1С:Предприятия являются открытыми. Благодаря этому клиент с помощью разработчика, или собственными силами, может модифицировать и настраивать любое прикладное решение "под себя".
Для модификации прикладных решений не требуется использовать какие-либо отдельные программные продукты - все средства разработки входят в состав технологической платформы.
Можно сказать, что платформа состоит из двух составляющих:
- среда исполнения;
- среда разработки.
Таким образом, обеспечивается высокий уровень адаптируемости прикладных решений под требования заказчика.
Программные продукты (ПП) клиентов предприятия ООО "Компьютерный аудит" должны учитываться в разрезе наименований программных продуктов, регистрационных номеров, даты регистрации или даты приобретения лицензии, текущих версий программных продуктов и версий программных продуктов клиентов. Для учёта данной информации используется программа 1С Предприятие 8.2. В явном виде подходящих документов и форм в программе нет. Для удовлетворения потребностей предприятия в учете необходимо определить структуру хранимой информации, разработать форму для ввода информации и форму отчётных документов.
Разработка формы ввода
Форма создавалась в конфигураторе в несколько этапов. Первоначально был создан объект "реестр сведений" (рисунок 2.24) и осуществлено его конфигурирование, затем сконструирован внешний вид формы (рисунок 2.26) и была разработана программа обработки формы.
Форма ввода содержит следующую информацию о клиенте:
· контрагент;
· программный продукт;
· стоимость;
· агентское вознаграждение
· оплачено;
· владелиц ЭЦП;
· начало периода;
· конец периода;
· вариант установки;
· носитель;
· программы шифрования;
· тип подключения;
· тарифный план;
· ПФР;
· ИФНС;
· ФСС;
· РосСтат;
· подключение;
· продление;
· установка;
· самостоятельно;
· дискета;
· Ru-token;
· E-Token;
· уполномоченная организация.
В пункте меню "основные" записываем имя нашей формы (рисунок 2.20).
В пункте "данные" добавляем название пунктов сведений, которые будут отображаться в форме (рисунок 2.21).
Для обеспечения наилучшего ввода сведений сконфигурируем нашу форму.
Внешний вид полученной формы в конфигураторе приведен на рисунке 2.22.
Рисунок 2.20 - Конфигуратор 1с (вкладка Основные)
Рисунок 2.21 - Конфигуратор 1с (вкладка Данные)
Рисунок 2.22 - Конфигуратор 1с форма для ввода сведений
После конфигурирования внешнего вида формы необходимо разработать программный модуль, обеспечивающий корректный ввод информации. Программа обработки на внутреннем языке 1С приведена ниже.
Текст программы обработки:
&НаКлиенте
Процедура ПрограммныйПродуктНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ЗначениеОтбора = Новый Структура ("Родитель", ПапкаЭлектроннойОтчетности());
ПараметрыВыбора = Новый Структура ("Отбор", ЗначениеОтбора);
ФормаСписка = ПолучитьФорму ("Справочник._ПрограммныеПродукты.ФормаВыбора", ПараметрыВыбора);
ФормаСписка.Элементы.Список.Отображение = ОтображениеТаблицы.Список;
Запись.ПрограммныйПродукт = ФормаСписка.ОткрытьМодально();
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПапкаЭлектроннойОтчетности()
Возврат Справочники._ПрограммныеПродукты.НайтиПоКоду("000000015");
КонецФункции // ПапкаЭлектроннойОтчетности()
&НаСервереБезКонтекста
Функция ПапкаПоставщики()
Возврат Справочники.Контрагенты.НайтиПоКоду("00000919");
КонецФункции
&НаКлиенте
Процедура ПрограммаШифрованияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ЗначениеОтбора = Новый Структура("Родитель", ПапкаЭлектроннойОтчетности());
ПараметрыВыбора = Новый Структура("Отбор", ЗначениеОтбора);
ФормаСписка = ПолучитьФорму("Справочник._ПрограммныеПродукты.ФормаВыбора", ПараметрыВыбора);
ФормаСписка.Элементы.Список.Отображение = ОтображениеТаблицы.Список;
Запись.ПрограммаШифрования = ФормаСписка.ОткрытьМодально();
КонецПроцедуры
&НаКлиенте
Процедура СДОНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ЗначениеОтбора = Новый Структура("Родитель", ПапкаПоставщики());
ПараметрыВыбора = Новый Структура("Отбор", ЗначениеОтбора);
ФормаСписка = ПолучитьФорму("Справочник.Контрагенты.Форма.CRM_ФормаВыбораУправляемая", ПараметрыВыбора);
ФормаСписка.Элементы.Список.Отображение = ОтображениеТаблицы.Список;
Запись.СДО = ФормаСписка.ОткрытьМодально();
КонецПроцедуры
&НаКлиенте
Процедура СтоимостьПриИзменении(Элемент)
Если Запись.ТипПодключения = НовоеПодключение() Тогда
Запись.АгентскоеВознаграждение = Запись.Стоимость * 0.5;
ИначеЕсли Запись.ТипПодключения = Продление() Тогда
Запись.АгентскоеВознаграждение = Запись.Стоимость * 0.3;
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция НовоеПодключение()
Возврат Перечисления._ТипыПодключенияЭЦП.Подключение;
КонецФункции
&НаСервереБезКонтекста
Функция Продление()
Возврат Перечисления._ТипыПодключенияЭЦП.Продление;
КонецФункции
&НаКлиенте
Процедура КонтактныеЛицаПриАктивизацииСтроки(Элемент)
Если Элементы.КонтактныеЛица.ТекущиеДанные <> Неопределено Тогда
Телефоны.Параметры.УстановитьЗначениеПараметра("Объект",Элементы.КонтактныеЛица.ТекущиеДанные.Наименование);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура КонтрагентПриИзменении(Элемент)
КонтактныеЛица.Параметры.УстановитьЗначениеПараметра("Владелец", Запись.Контрагент);
КонецПроцедуры
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Телефоны.Параметры.УстановитьЗначениеПараметра("Объект", Справочники.КонтактныеЛицаКонтрагентов.ПустаяСсылка());
Если ЗначениеЗаполнено(Запись.Контрагент) Тогда
КонтактныеЛица.Параметры.УстановитьЗначениеПараметра("Владелец", Запись.Контрагент);
Иначе
КонтактныеЛица.Параметры.УстановитьЗначениеПараметра("Владелец", Справочники.Контрагенты.ПустаяСсылка());
КонецЕсли;
Элементы.ДатаОплаты.ТолькоПросмотр = (НЕ Запись.Оплачено);
Если НЕ Запись.Оплачено Тогда
Запись.ДатаОплаты = Дата('00010101');
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
Если ЗначениеЗаполнено(Запись.ДатаСобытия) и ЗначениеЗаполнено(Запись.Ответственный) И ЗначениеЗаполнено(Запись.Контрагент) и ЗначениеЗаполнено(Запись.ВладелецЭЦП) Тогда
Если ЗначениеЗаполнено(Запись.Событие) Тогда
Если Вопрос("Событие уже создано, Вы желаете обновить событие?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да Тогда
УдалениеСобытия();
СоздатьСобытие();
КонецЕсли;
Иначе
СоздатьСобытие();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УдалениеСобытия()
Если ЗначениеЗаполнено(Запись.Событие) Тогда
Объект = Запись.Событие.ПолучитьОбъект();
Запись.Событие = Документы.Событие.ПустаяСсылка();
Объект.УстановитьПометкуУдаления(Истина);
Объект.Удалить();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура СоздатьСобытие()
НовоеСобытие = Документы.Событие.СоздатьДокумент();
НовоеСобытие.CRM_Автор = ПараметрыСеанса.ТекущийПользователь;
НовоеСобытие.CRM_ДатаИзменения= Запись.ДатаСобытия;
НовоеСобытие.CRM_Организация= Справочники.Организации.НайтиПоКоду("000000001");
НовоеСобытие.CRM_Подразделение= Справочники.Подразделения.НайтиПоКоду("000000003");
НовоеСобытие.CRM_Трудозатраты= 1;
НовоеСобытие.Важность= Перечисления.Важность.Средняя;
НовоеСобытие.ВалютаДокумента= Справочники.Валюты.НайтиПоКоду("643");
НовоеСобытие.ВидОбъекта= Перечисления.ВидыОбъектовСобытия.Контрагент;
НовоеСобытие.ВидСобытия= Перечисления.ВидыСобытий.ЛичнаяВстреча;
НовоеСобытие.ГруппаСобытия= Справочники.ГруппыСобытий.НайтиПоКоду("000000019");
НовоеСобытие.Дата= Запись.ДатаСобытия;
Если ЗначениеЗаполнено(Запись.Контрагент.ОсновноеКонтактноеЛицо) Тогда
НовоеСобытие.КонтактноеЛицо = Запись.Контрагент.ОсновноеКонтактноеЛицо;
Иначе
НовоеСобытие.КонтактноеЛицо = Запись.ВладелецЭЦП;
КонецЕсли;
НовоеСобытие.Контрагент= Запись.Контрагент;
НовоеСобытие.КратностьДокумента= 1;
НовоеСобытие.КурсДокумента= 1;
НовоеСобытие.мВалютаРегламентированногоУчета = Справочники.Валюты.НайтиПоКоду("643");
НовоеСобытие.мИмяОбъекта= "ДокументОбъект.Событие_НастройкиМастераПечатиСобытия";
НовоеСобытие.НачалоСобытия= Дата(Формат(Запись.ДатаСобытия, "ДФ=ггггММдд") + "083000");
НовоеСобытие.ОкончаниеСобытия= Дата(Формат(Запись.ДатаСобытия, "ДФ=ггггММдд") + "173000");
НовоеСобытие.ОписаниеСобытия= "Услуги технического специалиста";
НовоеСобытие.Основание= Неопределено;
НовоеСобытие.Ответственный= Запись.Ответственный;
НовоеСобытие.СостояниеСобытия= Перечисления.СостоянияСобытий.Запланировано;
НовоеСобытие.ТипСобытия= Перечисления.ВходящееИсходящееСобытие.Исходящее;
НовоеСобытие.СодержаниеСобытия= "Установка ЭЦП";
Попытка
НовоеСобытие.Записать(РежимЗаписиДокумента.Проведение);
Исключение
Сообщить(ОписаниеОшибки()+"Событие не проведено");
КонецПопытки;
Запись.Событие = НовоеСобытие.Ссылка;
КонецПроцедуры // СоздатьСобытие()
&НаКлиенте
Процедура ОплаченоПриИзменении(Элемент)
Элементы.ДатаОплаты.ТолькоПросмотр = (НЕ Запись.Оплачено);
Если НЕ Запись.Оплачено Тогда
Запись.ДатаОплаты = Дата('00010101');
КонецЕсли;
КонецПроцедуры
Вид готовой к использованию формы для ввода сведений об ЭЦП приведен на
рисунке 2.23.
Рисунок 2.23 - Форма ввода сведений в 1С
Создание отчёта
Отчет по используемым программным продуктам, лицензиям, ЭЦП создавался с помощью конфигуратора в несколько этапов.
Первоначально был создан объект "отчёт" (рисунок 2.24) и осуществлена его настройка на требуемый набор данных (рисунок 2.25).
После конфигурирования внешнего вида отчета необходимо разработать
программный модуль, обеспечивающий корректное формирования отчета по различным
условиям запроса. Программа обработки на внутреннем языке 1С приведена ниже.
Рисунок 2.24 - Конфигуратор 1с (вкладка Основные)
Рисунок 2.25 - Конфигуратор 1с (программирование отчёта)
Текст программы обработки:
ВЫБРАТЬ
_ЭЦП.Период КАК Период,
_ЭЦП.Контрагент КАК Контрагент,
_ЭЦП.ПрограммныйПродукт КАК ПрограммныйПродукт,
_ЭЦП.Стоимость КАК Стоимость,
_ЭЦП.АгентскоеВознаграждение КАК АгентскоеВознаграждение,
_ЭЦП.Оплачено КАК Оплачено,
_ЭЦП.ВладелецЭЦП КАК ВладелецЭЦП,
_ЭЦП.НачалоПериода КАК НачалоПериода,
_ЭЦП.КонецПериод КАК КонецПериод,
_ЭЦП.СДО КАК СДО,
_ЭЦП.ВариантУстановки КАК ВариантУстановки,
_ЭЦП.Носитель КАК Носитель,
_ЭЦП.ПрограммаШифрования КАК ПрограммаШифрования,
_ЭЦП.ТипПодключения КАК ТипПодключения,
_ЭЦП.ТарифныйПлан КАК ТарифныйПлан,
_ЭЦП.ПФР КАК ПФР,
_ЭЦП.ИФНС КАК ИФНС,
_ЭЦП.ФСС КАК ФСС,
_ЭЦП.РосСтат КАК РосСтат,
_ЭЦП.ДатаСобытия КАК ДатаСобытия,
_ЭЦП.Событие КАК Событие,
_ЭЦП.Ответственный КАК Ответственный,
_ЭЦП.Комментарий КАК Комментарий,
_ЭЦП.НомерАкта КАК НомерАкта,
_ЭЦП.ДатаАкта КАК ДатаАкта,
_ЭЦП.ДатаОплаты,
_ЭЦП.УполномоченнаяОрганизация,
_ЭЦП.Аннулирован
ИЗ
РегистрСведений._ЭЦП КАК _ЭЦП
{ГДЕ
_ЭЦП.Период,
_ЭЦП.Контрагент.*,
_ЭЦП.ПрограммныйПродукт.*,
_ЭЦП.Стоимость,