KolyaVasya
Участник
Offline
|
|
« : 01-07-2011 07:45 » |
|
Приветы. Пытаюсь научиться работать с диаграммами, в одной процедуре формируется запрос, группируем количество доков в неделю, другая процедура по логике должна рисовать диаграмму. Трабл в том что незнаю как передать данные из процедуры запроса\подсчета в процедуру формирования диаграммы. Приходит на ум только выгрузить в файл или ТЗ. результат вывода: ошибки, слюни, мат. Очень хочется понять принцип. //******************************************* // Процедура генерации запроса Сформировать. // Перем КолДок, Интервал, ТЗ; Процедура Сформировать() Перем Запрос, ТекстЗапроса, Таб; //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с ВыбНачПериода по ВыбКонПериода; |Обрабатывать НеПомеченныеНаУдаление; |Перем = Документ.Перемещение.ТекущийДокумент, Документ.ПриходнаяНакладная.ТекущийДокумент, Документ.РасходнаяНакладная.ТекущийДокумент; |Фирма = Документ.Перемещение.Фирма, Документ.ПриходнаяНакладная.Фирма, Документ.РасходнаяНакладная.Фирма; |Группировка Неделя все ВошедшиеВЗапрос; |Группировка Перем упорядочить по Перем.НомерДок, Перем.ДатаДок, Перем.Автор без групп все; |Условие(Фирма = ВыбФирма); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли;
// Подготовка к заполнению выходных форм данными запроса Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Сформировать"); // Заполнение полей "Заголовок" Таб.ВывестиСекцию("Заголовок"); Состояние("Заполнение выходной таблицы..."); Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0); ТЗ=СоздатьОбъект("ТаблицаЗначений"); Интервал=Запрос.Неделя; КолДок=0; Пока Запрос.Группировка(1) = 1 Цикл // Заполнение полей Неделя Таб.ВывестиСекцию("Неделя"); Пока Запрос.Группировка(2) = 1 Цикл КолДок=КолДок+1; // Заполнение полей Перем Таб.ВывестиСекцию("Перем"); КонецЦикла; Сообщить(КолДок); Сообщить(Интервал); Сообщить("Таблица"); Сообщить(ТЗ); КонецЦикла; // Вывод заполненной формы Таб.ТолькоПросмотр(1); Таб.Показать("Сформировать", ""); КонецПроцедуры
//Конструкции <<...>> необходимо заменить на реальные логические условия и значения переменных Процедура Диаграма_Диаграмма(Диаграмма) Диаграмма.Обновление(0); Серия = 1; Точка = 1; // Пока Серия < 10 Цикл Диаграмма.УстановитьИмяСерии(1,Серия); Точка = 1; Пока Точка < 10 Цикл Диаграмма.УстановитьЗначение(Точка,Серия,Точка); Если Серия = 1 Тогда Диаграмма.УстановитьИмяТочки(Точка,Точка); КонецЕсли; Точка = Точка + 1; КонецЦикла; Серия = Серия + 1; // КонецЦикла; Диаграмма.Обновление(1); КонецПроцедуры
Процедура Диаграма() Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Диаграма"); Таб.ВывестиСекцию("Диаграмма"); Таб.ВывестиСекцию("Шапка"); Таб.Опции(0,0,0,0); Таб.ТолькоПросмотр(1); Таб.Показать("Диаграма",""); КонецПроцедуры
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #1 : 01-07-2011 08:01 » |
|
Ты заполнил ТЗ нужными значениями А потом вызывай Диаграма_Диаграмма(ТЗ)
В принципе можно и не заполнять ТЗ , а в процедуре Сформировать() выводить диаграмму. ( в цикле пока запрос
зы. ничего не знаю в 1С.
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Kivals
|
|
« Ответ #2 : 01-07-2011 17:40 » |
|
Sla, не совсем. Диаграма_Диаграмма(Диаграмма) (офигеть названьице) - это callback процедура, которая вызывается когда объект Диаграмма выводится в таблице. Передать параметры в нее по-моему нельзя - только использовать реквизиты и переменные формы. Т.е. все верно - обращайся к своей ТЗ внутри этой процедуры
|
|
|
Записан
|
|
|
|
KolyaVasya
Участник
Offline
|
|
« Ответ #3 : 02-07-2011 16:46 » |
|
Приветы посоны. Чот ваще труба с этими диаграммами, мб подскажите где я не прав. Решил реализовать через флаг выбора на форме формирование диаграммы, после чего сформировал процедуру построения самой диаграммы, и при условии фл =1 скармливать процедуре ТЗ. вроде все складно, но чего то материЦо.... а именно: ПострДиаг_Диаграмма<<?>>(Диаграмма,ТЗ) {Отчет.КД.Форма.Модуль(64)}: Процедура не обнаружена (ПострДиаг_Диаграмма) При проверке модуля обнаружены синтаксические ошибки! а в чем ошибка никак не пойму, все перепроверял .... подскажите плз если не леностно. //******************************************* // Процедура генерации запроса Сформировать. // Перем КолДок, Интервал,ТЗ; Процедура Сформировать() Перем Запрос, ТекстЗапроса, Таб; //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с ВыбНачПериода по ВыбКонПериода; |Обрабатывать НеПомеченныеНаУдаление; |Докум = Документ.ПриходДен.ТекущийДокумент, Документ.ЗанесЗАрп.ТекущийДокумент, Документ.Новый1.ТекущийДокумент; |фирма = Документ.ПриходДен.Фирма, Документ.ЗанесЗАрп.Фирма; |Группировка Неделя; |Группировка Докум упорядочить по Докум.ДатаДок, Докум.НомерДок без групп все; |Условие(Фирма = ВыбФирма); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли;
// Подготовка к заполнению выходных форм данными запроса ТЗ = СоздатьОбъект("ТаблицаЗначений"); ТЗ.ВставитьКолонку(Интервал,1,,,,,,,1); ТЗ.ВставитьКолонку(КолДок,2,,,,,,,2); Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Сформировать"); // Заполнение полей "Заголовок" Таб.ВывестиСекцию("Заголовок"); Состояние("Заполнение выходной таблицы..."); Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0); Стр=0; Пока Запрос.Группировка(1) = 1 Цикл Стр=Стр+1; Интервал=Запрос.Неделя; КолДок=0; // Заполнение полей Неделя Таб.ВывестиСекцию("Неделя"); Пока Запрос.Группировка(2) = 1 Цикл КолДок=КолДок+1; // Заполнение полей Докум Таб.ВывестиСекцию("Докум"); КонецЦикла; Сообщить(""+Стр+","+Интервал+","+КолДок); //Сообщить(Интервал); КолСтр=ТЗ.КоличествоСтрок(); Сообщить(КолСтр); ТЗ.НоваяСтрока(Стр); КолСтр1=ТЗ.КоличествоСтрок(); Сообщить(КолСтр1); ТЗ.УстановитьЗначение(Стр,1,Интервал); ТЗ.УстановитьЗначение(Стр,2,КолДок); КонецЦикла; Если ФлДиаг = 1 Тогда Сообщить("Построить Диаграмму"); ПострДиаг_Диаграмма(Диаграмма,ТЗ) Таб.ВывестиСекцию("Диаграмма"); КонецЕсли; // Вывод заполненной формы Таб.ТолькоПросмотр(1); Таб.Показать("Сформировать", ""); КонецПроцедуры
//Конструкции <<...>> необходимо заменить на реальные логические условия и значения переменных Процедура ПострДиаг_Диаграмма(Диаграмма,ТЗ) Диаграмма.Обновление(0); Серия = 1; Точка = 1; ТЗ.ВыбратьСтроки(); Пока ТЗ.ПлучитьСтроку()=1 Цикл Диаграмма.УстановитьИмяСерии(Серия,КолДок); Точка = 1; Пока ТЗ.ПолучитьСтроку()=1 Цикл Диаграмма.УстановитьЗначение(Точка,Серия,КолДок); Если Серия = 1 Тогда Диаграмма.УстановитьИмяТочки(Точка,Интервал); КонецЕсли; Точка = Точка + 1; КонецЦикла; Серия = Серия + 1; КонецЦикла; Диаграмма.Обновление(1); КонецПроцедуры
Процедура ПострДиаг() Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("ПострДиаг"); Таб.ВывестиСекцию("Заголовок"); Таб.ВывестиСекцию("Диаграмма"); Таб.Опции(0,0,0,0); Таб.ТолькоПросмотр(1); Таб.Показать("ПострДиаг",""); КонецПроцедуры
Добавлено через 4 минуты и 36 секунд:В ТЗ заношу просто имя недели и кол-во доков за эту неделю. 31.01.11 1 30.05.11 2 27.06.11 2 примерно такого вида
|
|
« Последнее редактирование: 02-07-2011 16:50 от KolyaVasya »
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #4 : 02-07-2011 18:27 » |
|
1. В 7.7 процедуры/функции можно вызывать только после объявления, т.е. тебе ПострДиаг_Диаграмма() нужно перенести в начало модуля 2. Правила форума, п.3.2 - сленг не приветствуется. В следующий раз удалю пост не читая...
|
|
|
Записан
|
|
|
|
KolyaVasya
Участник
Offline
|
|
« Ответ #5 : 03-07-2011 06:32 » |
|
В этом случае начинает ругаться на место обращения к процедуре. Не очень понятно почему. ПострДиаг_Диаграмма(Диаграмма<<?>>, ТЗ); {Отчет.КД.Форма.Модуль(79)}: Переменная не определена (Диаграмма) При проверке модуля обнаружены синтаксические ошибки! Перем КолДок, Интервал,ТЗ; Процедура ПострДиаг_Диаграмма(Диаграмма,ТЗ) Экспорт Диаграмма.Обновление(0); Серия = 1; Точка = 1; ТЗ.ВыбратьСтроки(); Пока ТЗ.ПлучитьСтроку()=1 Цикл Диаграмма.УстановитьИмяСерии(Серия,КолДок); Точка = 1; Пока ТЗ.ПолучитьСтроку()=1 Цикл Диаграмма.УстановитьЗначение(Точка,Серия,КолДок); Если Серия = 1 Тогда Диаграмма.УстановитьИмяТочки(Точка,Интервал); КонецЕсли; Точка = Точка + 1; КонецЦикла; Серия = Серия + 1; КонецЦикла; Диаграмма.Обновление(1); КонецПроцедуры
//******************************************* // Процедура генерации запроса Сформировать. // Процедура Сформировать() Перем Запрос, ТекстЗапроса, Таб; //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с ВыбНачПериода по ВыбКонПериода; |Обрабатывать НеПомеченныеНаУдаление; |Докум = Документ.ПриходДен.ТекущийДокумент, Документ.ЗанесЗАрп.ТекущийДокумент, Документ.Новый1.ТекущийДокумент; |фирма = Документ.ПриходДен.Фирма, Документ.ЗанесЗАрп.Фирма; |Группировка Неделя; |Группировка Докум упорядочить по Докум.ДатаДок, Докум.НомерДок без групп все; |Условие(Фирма = ВыбФирма); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли;
// Подготовка к заполнению выходных форм данными запроса ТЗ = СоздатьОбъект("ТаблицаЗначений"); ТЗ.ВставитьКолонку(Интервал,1,,,,,,,1); ТЗ.ВставитьКолонку(КолДок,2,,,,,,,2); Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Сформировать"); // Заполнение полей "Заголовок" Таб.ВывестиСекцию("Заголовок"); Состояние("Заполнение выходной таблицы..."); Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0); Стр=0; Пока Запрос.Группировка(1) = 1 Цикл Стр=Стр+1; Интервал=Запрос.Неделя; КолДок=0; // Заполнение полей Неделя Таб.ВывестиСекцию("Неделя"); Пока Запрос.Группировка(2) = 1 Цикл КолДок=КолДок+1; // Заполнение полей Докум Таб.ВывестиСекцию("Докум"); КонецЦикла; Сообщить(""+Стр+","+Интервал+","+КолДок); //Сообщить(Интервал); КолСтр=ТЗ.КоличествоСтрок(); Сообщить(КолСтр); ТЗ.НоваяСтрока(Стр); КолСтр1=ТЗ.КоличествоСтрок(); Сообщить(КолСтр1); ТЗ.УстановитьЗначение(Стр,1,Интервал); ТЗ.УстановитьЗначение(Стр,2,КолДок); КонецЦикла; Если ФлДиаг = 1 Тогда Сообщить("Построить Диаграмму"); ПострДиаг_Диаграмма(Диаграмма, ТЗ); Таб.ВывестиСекцию("Диаграмма"); КонецЕсли; // Вывод заполненной формы Таб.ТолькоПросмотр(1); Таб.Показать("Сформировать", ""); КонецПроцедуры
Процедура ПострДиаг() Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("ПострДиаг"); Таб.ВывестиСекцию("Заголовок"); Таб.ВывестиСекцию("Диаграмма"); Таб.Опции(0,0,0,0); Таб.ТолькоПросмотр(1); Таб.Показать("ПострДиаг",""); КонецПроцедуры
По поводу правил форума, критика принята, учту.
|
|
« Последнее редактирование: 03-07-2011 06:42 от KolyaVasya »
|
Записан
|
|
|
|
Kivals
|
|
« Ответ #6 : 03-07-2011 20:01 » |
|
Прочитай внимательно: Диаграма_Диаграмма(Диаграмма) [...] - это callback процедура, которая вызывается когда объект Диаграмма выводится в таблице.
Т.е. тебе не нужно ее вызывать в модуле - она вызовется сама при выводе таблицы. Смотри свойства диагранны в таблице:
|
|
|
Записан
|
|
|
|
|