ИзучениеWEB - сервисов в системе «1С:Предприятие»

Изучать возможности Web-сервисов в системе «1С:Предприятие» предлагаю по следующей схеме:

1. Ознакомиться и проанализировать «Руководство разработчика «1С:Предприятие 8», глава 16 «Механизм XDTO» и глава 17 «Механизмы интернет-сервисов».

2. Установить и изучить функционал демонстрационной конфигурация «Web-сервисы» (http://its.1c.ru/ «Главная → Разработка и администрирование → Методическая поддержка для разработчиков и администраторов → Демонстрационные конфигурации → Web-сервисы»

3. Попробовать реализовать свой Web-сервис в системе «1С:Предприятие».

Практическая часть

Динамика цены товара (комплектующего) за период. Строиться диаграмма изменения цены за период.

В 1С при построении диаграмм используются такие термины, как «серии» и «точки». Понятие серии в данном случае совпадает с «рядом данных» в Excel, ну а «точки» - это, скажем так, значения оси Х, или просто "значения" в терминах Excel. Так вот, чтобы механизм был более-менее универсальным, условимся, что таблица значений имеет следующую структуру: первая колонка - наименование серии, последующие колонки - это значения точек, причем заголовок колонки и будет являться наименованием точки. Ну а для заполнения таблицы значений существует множество методов, например, для реализации неких алгоритмов в цикле хорошо использовать метод УстановитьЗначение(<Строка>,<Колонка>,<Знач>). Однако формирование таблицы значений мы в рамках данной статьи оставим все же за кадром и сосредоточимся на выводе диаграммы. Допустим также, что перед диаграммой необходимо выводить таблицу, по которой эта самая диаграмма построена.

Начну с «рисования» макета. Укажем ячейки с основным и дополнительным заголовками диаграммы (пусть для определенности это будут выражения ЗаголовокДиаграммы и Заголовок Дополнительно) и нарисуем таблицу из 4х ячеек. В первой ячейке можно написать, например, «Серия / Точка», во 2-м столбце первой строки - выражение НаименованиеТочки, во 2-й строке 1-го столбца - выражение НаименованиеСерии, и, наконец, в последней ячейке - выражение Значение. Определю горизонтальные секции: «Шапка», куда войдут заголовки и первая строка таблицы, и «Серия» - вторая строка таблицы. Определю вертикальные секции – «Боковик», куда войдет 1-й столбец таблицы, и «Точка», содержащая второй столбец таблицы.

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

Код

СформироватьДиаграмму(Таб.ТекущийОбъект, Параметры)


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

Примерный вид макета приведен на рисунке (Рисунок 2):

ИзучениеWEB - сервисов в системе «1С:Предприятие» - student2.ru

Рисунок 2 – Диаграмма динамики цены на услугу за период

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

– КоличествоСерий - устанавливаем количество серий;

– КоличествоТочек - устанавливаем количество точек;

– УстановитьИмяСерии - назначаем имя серии;

– УстановитьИмяТочки - аналогично;

– УстановитьЗначение - основной метод, собственно говоря, указываю, какое значение соответствует комбинации серия/точка.

Также мы использую следующие методы объекта ТаблицаЗначений:

– КоличествоСтрок, КоличествоКолонок - получение размера таблицы;

– ПолучитьЗначение - получение значения из таблицы значений по номеру строки и колонки;

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

Процедура СформироватьДиаграмму(Диаграмма, Параметры)

Диаграмма.Обновление(0);

// Устанавливаем количество серий и точек
КолСтрок = Параметры.КоличествоСтрок();
КолКолонок = Параметры.КоличествоКолонок();
Диаграмма.КоличествоСерий(КолСтрок);
Диаграмма.КоличествоТочек(КолКолонок-1);
// Цикл по значениям таблицы
Для Сч = 1 По КолСтрок Цикл
Диаграмма.УстановитьИмяСерии(Сч, СокрЛП(Параметры.ПолучитьЗначение(Сч, 1)));
Для Сч2 = 2 По КолКолонок Цикл

Если Сч = 1 Тогда
НаименованиеТочки = "";

// Наименование точки возьмем из заголовка колонки
Параметры.ПолучитьПараметрыКолонки(Сч2, , , ,

НаименованиеТочки);

Диаграмма.УстановитьИмяТочки(Сч2 - 1, НаименованиеТочки);
КонецЕсли;
Диаграмма.УстановитьЗначение(Сч2 - 1, Сч, Параметры.ПолучитьЗначение(Сч, Сч2));
КонецЦикла;
КонецЦикла;
Диаграмма.Обновление(1);
КонецПроцедуры

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

Код

Процедура ВывестиРасшифровкуДиаграммы(Таб, ЗаголовокДиаграммы, ЗагДополн, Параметры)

Таб.ВывестиСекцию("Шапка|Боковик");

Для Сч2 = 2 По Параметры.КоличествоКолонок() Цикл

НаименованиеТочки = "";
Параметры.ПолучитьПараметрыКолонки(Сч2, , , , НаименованиеТочки);
Таб.ПрисоединитьСекцию("Шапка|Точка");
КонецЦикла;
Для Сч = 1 По Параметры.КоличествоСтрок() Цикл
НаименованиеСерии = СокрЛП(Параметры.ПолучитьЗначение(Сч, 1));
Таб.ВывестиСекцию("Canon");
Для Сч2 = 2 По Параметры.КоличествоКолонок() Цикл
Значение = Параметры.ПолучитьЗначение(Сч, Сч2);
Таб.ПрисоединитьСекцию("Серия|Точка");
КонецЦикла;
КонецЦикла;
КонецПроцедуры:

ИзучениеWEB - сервисов в системе «1С:Предприятие» - student2.ru

Рисунок 3 – Модуль отчета динамики цены на услугу

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

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

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

Код

Процедура Сформировать()
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Таблица");
Таб.Опции(0,0,0,0);
Параметры = СоздатьОбъект("ТаблицаЗначений");
Параметры.НоваяКолонка("Серия", "Строка", 100);
Параметры.НоваяКолонка("Canon", "Число", 10);
Параметры.НоваяКолонка("Samsung", "Число", 10);
Параметры.НоваяКолонка("Sony", "Число", 10);
Параметры.НоваяКолонка("Hitachi", "Число", 10);
Параметры.НоваяСтрока();
Параметры.Серия = "май";
Параметры.Алмалинский = 3739;
Параметры.Бостандыкский = 3922;
Параметры.Жетысуский = 3476;
Параметры.Турксибский = 2790;
Параметры.НоваяСтрока();
Параметры.Серия = "июнь";
Параметры.Canon = 3805;
Параметры.Samsung = 3852;
Параметры.Sony = 3438;
Параметры.Hitachi = 2859;

Параметры.НоваяСтрока();
Параметры.Серия = "июль";
Параметры.Canon = 3853;
Параметры.Samsung = 3786;
Параметры.Sony = 3398;
Параметры.Hitachi = 2927;
ВывестиРасшифровкуДиаграммы(Таб, "Динамика цены на услуги по ремонту сотовых телефонов за период", "За период май - июль 20014 года", Параметры);
Таб.ВывестиСекцию("Гистограмма");
Таб.ТолькоПросмотр(1);
Таб.Показать("Динамика цены на услуги по ремонту по ремонту сотовых телефонов за период ");
КонецПроцедуры

Наши рекомендации