Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: 1с 7.7 Непонятки с диаграммами  (Прочитано 13814 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
KolyaVasya
Участник

ru
Offline 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
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 01-07-2011 08:01 » 

Ты заполнил ТЗ нужными значениями
А потом вызывай
Диаграма_Диаграмма(ТЗ)

В принципе можно и не заполнять ТЗ , а в процедуре Сформировать() выводить диаграмму. ( в цикле пока запрос

зы. ничего не знаю в 1С.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Kivals
Команда клуба

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 01-07-2011 17:40 » 

Sla, не совсем. Диаграма_Диаграмма(Диаграмма) (офигеть названьице) - это callback процедура, которая вызывается когда объект Диаграмма выводится в таблице.
Передать параметры в нее по-моему нельзя - только использовать реквизиты и переменные формы. Т.е. все верно - обращайся к своей ТЗ внутри этой процедуры
Записан
KolyaVasya
Участник

ru
Offline 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
Команда клуба

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 02-07-2011 18:27 » 

1. В 7.7 процедуры/функции можно вызывать только после объявления, т.е. тебе ПострДиаг_Диаграмма() нужно перенести в начало модуля
2. Правила форума, п.3.2 - сленг не приветствуется. В следующий раз удалю пост не читая...
Записан
KolyaVasya
Участник

ru
Offline Offline

« Ответ #5 : 03-07-2011 06:32 » new

В этом случае начинает ругаться на место обращения к процедуре. Не очень понятно почему.

ПострДиаг_Диаграмма(Диаграмма<<?>>, ТЗ);
{Отчет.КД.Форма.Модуль(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
Команда клуба

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 03-07-2011 20:01 » 

Прочитай внимательно:
Диаграма_Диаграмма(Диаграмма) [...] - это callback процедура, которая вызывается когда объект Диаграмма выводится в таблице.
Т.е. тебе не нужно ее вызывать в модуле - она вызовется сама при выводе таблицы. Смотри свойства диагранны в таблице:

* sc-20110703225931.png (28.24 Кб - загружено 3559 раз.)
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines