PDA

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



Kuis
17.11.2018, 12:00
есть внешний отчет вот его код


//************************************************** ************************************************** ********
Перем Периоды, Таблоид, КолФормат;

//************************************************** ************************************************** ********
Процедура ПриОткрытии()
КолФормат = "Ч-18.4";
НачДата = НачГода(ТекущаяДата());
КонДата = КонМесяца(ТекущаяДата());

КонецПроцедуры // ПриОткрытии()
//************************************************** ************************************************** ********
Процедура ПериодФормула()

ВвестиПериод(НачДата,КонДа та);
НачДата = НачМесяца(НачДата);
КонДата = КонМесяца(КонДата);

КонецПроцедуры // ПериодФормула()
//************************************************** ************************************************** ********
Процедура ОбработкаПодбора(перЭлеме� �т)

Если перЭлемент.ПометкаУдалени� �() = 0 Тогда
Если СписокНоменклатуры.НайтиЗ� �ачение(перЭлемент) = 0 Тогда
СписокНоменклатуры.Добави� �ьЗначение(перЭлемент);
КонецЕсли;
КонецЕсли;

КонецПроцедуры // ОбработкаПодбора(перЭлеме� �т)
//************************************************** ************************************************** ********
Процедура ДобавитьФормула()

перЗначение = ПолучитьПустоеЗначение("Справочник.Номенклатура");
Если СписокНоменклатуры.Размер� �писка() > 0 Тогда
текЗначение = СписокНоменклатуры.Текуща� �Строка();
перЗначение =СписокНоменклатуры.Получи тьЗначение(текЗначение);
КонецЕсли;
ОткрытьПодбор("Справочник.Номенклатура", "ДляВыбора", перЗначение);

КонецПроцедуры // ДобавитьФормула()
//************************************************** ************************************************** ********
Процедура УдалитьФормула()

Количество = СписокНоменклатуры.Размер� �писка();
Если Количество = 0 Тогда Возврат; КонецЕсли;

ТекСтрока = СписокНоменклатуры.Текуща� �Строка();
СписокНоменклатуры.Удалит� �Значение(ТекСтрока);
Если Количество > 1 Тогда
СписокНоменклатуры.Текуща� �Строка(?(ТекСтрока=Количес� �во, ТекСтрока-1, ТекСтрока));
КонецЕсли;

КонецПроцедуры // УдалитьФормула()
//************************************************** ************************************************** ********
Процедура ОчиститьФормула()

СписокНоменклатуры.Удалит� �Все();

КонецПроцедуры // ОчиститьФормула()
//************************************************** ************************************************** ********
Процедура ОпределТаблиц()

Периоды = СоздатьОбъект("ТаблицаЗначений");
Периоды.НоваяКолонка("НачДата", "Дата");
Периоды.НоваяКолонка("КонДата", "Дата");
Периоды.НоваяКолонка("Колонка", "Строка");
Периоды.НоваяКолонка("Название", "Строка");

текДата = НачДата;
Пока текДата < КонДата Цикл
Периоды.НоваяСтрока();
Периоды.НачДата = текДата;
Периоды.КонДата = КонМесяца(текДата);
Периоды.Колонка = "Период" + СокрЛП(Периоды.НомерСтроки );
Название = ПериодСтр(Периоды.НачДата, Периоды.КонДата);
Пробел = Найти(Название, " ");
Периоды.Название = Лев(Название, Пробел-1) + РазделительСтрок + Сред(Название, Пробел+1);
текДата = ДобавитьМесяц(текДата, 1);
КонецЦикла;

Таблоид = СоздатьОбъект("ТаблицаЗначений");
Таблоид.НоваяКолонка("Номенклатура", "Справочник.Номенклатура");
Таблоид.НоваяКолонка("Количество", "Число", 18, 4);
Периоды.ВыбратьСтроки();
Пока Периоды.ПолучитьСтроку() = 1 Цикл
Таблоид.НоваяКолонка(Перио ды.Колонка, "Число", 18, 4);
КонецЦикла;

КонецПроцедуры // ОпределТаблиц()
//************************************************** ************************************************** ********
Функция ОпределКолонки(перДата)

Периоды.ВыбратьСтроки();
Пока Периоды.ПолучитьСтроку() = 1 Цикл
Если перДата > Периоды.КонДата Тогда
Продолжить;
КонецЕсли;
Возврат Периоды.Колонка;
КонецЦикла;
Возврат "";

КонецФункции // ОпределКолонки(перДата)
//************************************************** ************************************************** ********
Процедура ВыборкаВозвратов()

Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса = "
|ОбрабатыватьДокументы Проведенные;
|Период с НачДата по КонДата;
|Док = Документ.ВозвратОтПокупат� �ля.ТекущийДокумент;
|Номенклатура = Документ.ВозвратОтПокупат� �ля.Товар;
|Условие(СписокНоменклатур ы.НайтиЗначение(Номенклату ра)>0);
|Количество = Документ.ВозвратОтПокупат� �ля.Количество;
|Функция Возвращено = Сумма(Количество);
|Группировка Номенклатура Без Групп;
|Группировка Док;
|";

Если Запрос.Выполнить(ТекстЗапр оса) = 1 Тогда
Пока Запрос.Группировка("Номенклатура") = 1 Цикл
Таблоид.НоваяСтрока();
Таблоид.Номенклатура = Запрос.Номенклатура;
Таблоид.Количество = Запрос.Возвращено;
Пока Запрос.Группировка("Док") = 1 Цикл
Таблоид.УстановитьЗначени� �(Таблоид.НомерСтроки, ОпределКолонки(Запрос.Док.� �атаДок),Запрос.Возвращено);
КонецЦикла;
КонецЦикла;
КонецЕсли;

КонецПроцедуры
//************************************************** ************************************************** ********
Процедура ВыборкаОтгруженных()

Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса = "
|ОбрабатыватьДокументы Проведенные;
|Период с НачДата по КонДата;
|Док = Документ.РасходнаяНакладн� �я.ТекущийДокумент;
|Номенклатура = Документ.РасходнаяНакладн� �я.Товар;
|Условие(СписокНоменклатур ы.НайтиЗначение(Номенклату ра)>0);
|Количество = Документ.РасходнаяНакладн� �я.Количество;
|Функция Отгружено = Сумма(Количество);
|Группировка Номенклатура Без Групп;
|Группировка Док;
|";
Если Запрос.Выполнить(ТекстЗапр оса) = 1 Тогда
Пока Запрос.Группировка("Номенклатура") = 1 Цикл
Таблоид.НоваяСтрока();
Таблоид.Номенклатура = Запрос.Номенклатура;
Таблоид.Количество = Запрос.Отгружено;
Пока Запрос.Группировка("Док") = 1 Цикл
Таблоид.УстановитьЗначени� �(Таблоид.НомерСтроки, ОпределКолонки(Запрос.Док.� �атаДок), Запрос.Отгружено);
КонецЦикла;
КонецЦикла;
КонецЕсли;

КонецПроцедуры
//************************************************** ************************************************** ********
Процедура ОбработкаЗначений()

СуммаКолонки = "Количество";
Периоды.ВыбратьСтроки();
Пока Периоды.ПолучитьСтроку() = 1 Цикл
СуммаКолонки = СуммаКолонки + "," + Периоды.Колонка;
КонецЦикла;

КонецПроцедуры
//************************************************** ************************************************** ********
Процедура ПечатьОтчета()

Печатник = СоздатьОбъект("Таблица");
Печатник.ИсходнаяТаблица("Отгружено");
_Заглавие = "Отгрузка номенклатуры по РБ " + ПериодСтр(НачДата, КонДата);
Печатник.ВывестиСекцию("Шапка|Основа");
Периоды.ВыбратьСтроки();
Пока Периоды.ПолучитьСтроку() = 1 Цикл
_Период = Периоды.Название;
Печатник.ПрисоединитьСекц� �ю("Шапка|Период");
КонецЦикла;

Таблоид.ВыбратьСтроки();
Пока Таблоид.ПолучитьСтроку() = 1 Цикл
_Номенклатура = СокрЛП(Таблоид.Номенклатур а);
_Количество = Формат(Таблоид.Количество, КолФормат);
Печатник.ВывестиСекцию("Наименование|Основа");
Периоды.ВыбратьСтроки();
Пока Периоды.ПолучитьСтроку() = 1 Цикл
_Количество =Таблоид.ПолучитьЗначение(� �аблоид.НомерСтроки, Периоды.Колонка);
Печатник.ПрисоединитьСекц� �ю("Наименование|Период");
КонецЦикла;
КонецЦикла;

_Колонтитул = _Заглавие;
Печатник.ПовторятьПриПеча� �иСтроки(5, 6);
Печатник.ПараметрыСтраниц� �(2, , , 7, 7, 15, 7, 7, 7, 1);
Печатник.КоличествоЭкземп� �яров(1);
Печатник.ТолькоПросмотр(1);
Печатник.Показать(_Колонти� �ул);

КонецПроцедуры // ПечатьОтчета()
//************************************************** ************************************************** ********
Процедура Сформировать()

ОчиститьОкноСообщений();

ОпределТаблиц();
ВыборкаОтгруженных();
ВыборкаВозвратов();

Если Таблоид.КоличествоСтрок() = 0 Тогда
Предупреждение("Данные не обнаружены! Попробуйте ещё раз =)");
Иначе
ОбработкаЗначений();
ПечатьОтчета();
КонецЕсли;

КонецПроцедуры // Сформировать()
//************************************************** ************************************************** ********
Как сделать чтобы из этого отчёта рисовалась диаграмма и выводила название номенклатуры и количество её?