Имя: Пароль:
1C
1С v8
подсчет количества
,
0 Vasus55
 
17.01.12
15:49
подскажите пожалуйста как можно реализовать следующую задачку??
создаю обычным способом отчет, в нем несколько колонок, в том числе ТипКонтакта
мне необходимо в цикле (я так думаю) найти колонку типконтакта, найти в ней значения "Встреча" подсчитать их количество и вывести его в поле ввода
1 GROOVY
 
17.01.12
15:51
Это же надо так формулировать задачу... Вроде и слова русские...
2 AAlexandra
 
17.01.12
15:53
(0) А "Обычным способом" - это, простите, как?
Для меня "обычным способом" - это СКД. А там есть вкладочка "Ресурсы"..
3 Shurjk
 
17.01.12
15:54
КоличествоРазличных
4 Vasus55
 
17.01.12
15:55
через конструктор выходной формы
мне кажется это самый обычный для чайников способ))
5 Vasus55
 
17.01.12
16:02
(3) делаю так не пашет
6 AAlexandra
 
17.01.12
16:04
(5) чего конкретно делаешь и что конкретно не получается?

И вообще, тебя не смущает, что ты сначала запросом данные из БД получаешь, а потом их же собираешься "считать в цикле"..
Может сразу в запросе и посчитать все, что тебе нужно?
(3) это имел ввиду..
7 Vasus55
 
17.01.12
16:06
(6)
вот основной костяк

Процедура ЭтапыРаботыСКлиентомИнициализация()
   //{{КОНСТРУКТОР_ВЫХОДНЫХ_ФОРМ_ПОСТРОИТЕЛЬОТЧЕТА_ИНИЦИАЛИЗАЦИЯ(ЭтапыРаботыСКлиентом)
   // Данный фрагмент построен конструктором.
   // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

   ПостроительОтчетаЭтапыРаботыСКлиентом.Текст =
   "ВЫБРАТЬ
   |    ОбслуживаемыеКлиенты.Дата,
   |    ОбслуживаемыеКлиенты.Менеджер,
   |    ОбслуживаемыеКлиенты.Контрагент КАК Организация,
   |    ОбслуживаемыеКлиентыКонтакты.ТипКонтакта КАК ТипКонтакта,
   |    ОбслуживаемыеКлиентыКонтакты.Комментарии
   |ИЗ
   |    Документ.ОбслуживаемыеКлиенты.Контакты КАК ОбслуживаемыеКлиентыКонтакты
   |        ПОЛНОЕ СОЕДИНЕНИЕ Документ.ОбслуживаемыеКлиенты КАК ОбслуживаемыеКлиенты
   |        ПО ОбслуживаемыеКлиентыКонтакты.Ссылка = ОбслуживаемыеКлиенты.Ссылка
   |ГДЕ
   |    ОбслуживаемыеКлиенты.Дата МЕЖДУ &НачПериода И &КонПериода
   |    И ОбслуживаемыеКлиентыКонтакты.ТипКонтакта = &ТипКонтакта
   |    И ОбслуживаемыеКлиенты.Менеджер = &Менеджер
   |    И ОбслуживаемыеКлиенты.Контрагент = &Контрагент
   |ИТОГИ
   |    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ТипКонтакта)
   |ПО
   |    Организация";
   ПостроительОтчетаЭтапыРаботыСКлиентом.ЗаполнитьНастройки();
   ПостроительОтчетаЭтапыРаботыСКлиентом.ЗаполнениеРасшифровки = ВидЗаполненияРасшифровкиПостроителяОтчета.ЗначенияГруппировок;
   ПостроительОтчетаЭтапыРаботыСКлиентом.ТекстЗаголовка = "Этапы работы с клиентом";
   Настройка = ВосстановитьЗначение("НастройкаОтчетыЭтапыРаботыСКлиентомЭтапыРаботыСКлиентом_b8b0ac67-889a-4a10-bce2-1d92b0677d6b");
   Если Настройка <> Неопределено Тогда
       ПостроительОтчетаЭтапыРаботыСКлиентом.УстановитьНастройки(Настройка);
   КонецЕсли;

   //}}КОНСТРУКТОР_ВЫХОДНЫХ_ФОРМ_ПОСТРОИТЕЛЬОТЧЕТА_ИНИЦИАЛИЗАЦИЯ
КонецПроцедуры
8 1с-кин
 
17.01.12
16:11
(0) из самого отчеты вы не получите ничего. Отчет - он сам получает, но ничего не отдает.
Вам нужно:
- на основе условий запроса (7) сделать свой запрос,
- отдельно обработать реквизит документов "ТипКонтакта = Встреча" и подсчитать их количество здесь, в запросе,
- вывести результат в поле ввода.
9 GROOVY
 
17.01.12
16:11
Чего сделать то надо? Подсчитать количество "Встреч"? Или подсчитать количество разных типов контактов? Или посчитать количество каждого из типов контактов? Куда эту информацию выводить? В итоги в макете? В поле ввода на форме?
10 1с-кин
 
17.01.12
16:11
(1) похоже, вы отвыкли работать с с не-пользователями 1С :)
11 GROOVY
 
17.01.12
16:12
(8) Из табличного документа можно спокойно брать данные после того как он сформирован.
12 1с-кин
 
17.01.12
16:14
(11) как вы будете обращаться к области памяти из 1С, где находится отчет? :)
либо внутри самого отчета (а зачем?), либо - сделать аналогичный запрос, но получить нужные данные.
13 1с-кин
 
17.01.12
16:15
(9) >Куда эту информацию выводить? В итоги в макете? В поле ввода на форме?
это может совсем пеменять все обсуждение :)
14 1с-кин
 
17.01.12
16:15
*поменять
15 Vasus55
 
17.01.12
16:22
ТипКОнтакта может принмиать разные значения, но мне нужно посчитать конкретно количество значений "встреча" и вы вести его в поле ввода, который находится в на форме отчета
понятно изъснился?
16 AAlexandra
 
17.01.12
16:25
(15) а отчет тут причем? нужно только одно число получить? Никакую итоговую таблицу рисовать не надо?
17 Vasus55
 
17.01.12
16:28
(16) это одной из действий
просто в отчете я выбираю контрагента и выводится сотрудничество с ним, в этом же отчете выводится ТипКонтакта с ним(встреча, звонок, факс....)и нужно посчитать сколько раз происходила с ним встреча....
18 1с-кин
 
17.01.12
16:29
(17) контрагента выбираете ПОСЛЕ того, как отчет сформирован?
19 Vasus55
 
17.01.12
16:30
(18) нет до
20 Vasus55
 
17.01.12
16:33
данные выводятся в ПолеТабличногоДокумента
21 1с-кин
 
17.01.12
16:39
(19) тогда добавьте:
Результат = ПостроительОтчетаЭтапыРаботыСКлиентом.Выполнить().Выгрузить()
и считайте количество либо по ТЗ, либо запросом к ТЗ, либо через Выборку (...Выполнить().Выбрать()).
22 1с-кин
 
17.01.12
16:39
+ ТЗ - это Результат.
23 1с-кин
 
17.01.12
16:41
Добавить (21) можно там, где выполняется запрос (7)
24 AAlexandra
 
17.01.12
16:44
"ВЫБРАТЬ
   |    ОбслуживаемыеКлиенты.Дата,
   |    ОбслуживаемыеКлиенты.Менеджер,
   |    ОбслуживаемыеКлиенты.Контрагент КАК Организация,
   |    ОбслуживаемыеКлиентыКонтакты.ТипКонтакта КАК ТипКонтакта,
   |    ОбслуживаемыеКлиентыКонтакты.Комментарии,
|    ВЫБОР КОГДА ОбслуживаемыеКлиентыКонтакты.ТипКонтакта = &ТипКонтактаВстреча ТОГДА 1 ИНАЧЕ 0 КОНЕЦ КАК КоличествоВстреч
   |ИЗ
   |    Документ.ОбслуживаемыеКлиенты.Контакты КАК ОбслуживаемыеКлиентыКонтакты
   |        ПОЛНОЕ СОЕДИНЕНИЕ Документ.ОбслуживаемыеКлиенты КАК ОбслуживаемыеКлиенты
   |        ПО ОбслуживаемыеКлиентыКонтакты.Ссылка = ОбслуживаемыеКлиенты.Ссылка
   |ГДЕ
   |    ОбслуживаемыеКлиенты.Дата МЕЖДУ &НачПериода И &КонПериода
   |    И ОбслуживаемыеКлиенты.Менеджер = &Менеджер
   |    И ОбслуживаемыеКлиенты.Контрагент = &Контрагент";
   |ИТОГИ
   |    СУММА(КоличествоВстреч)
   |ПО
   |    Организация";

Например, можно так посчитать количество встреч в запросе.. На уровне группировки по контрагенту получишь число, не придется в цикле повторно записи обходить..

А вообще, почему ты делаешь запрос к документам? И раз уж делаешь, то пометку удаления проверять надо..
По регистрам нет движений?
25 Vasus55
 
17.01.12
17:01
(21)уже выдает ошибку
Результат = ПостроительОтчетаЭтапыРаботыСКлиентом.Выполнить();
обращение к процедуре как к функции
26 AAlexandra
 
17.01.12
17:07
(25) есть же синтаксис-помощник, там можно посмотреть, что делать дальше.. И как из ПостроителяОтчета получить РезультатЗапроса, а из него ТаблицуЗначений.
27 Vasus55
 
17.01.12
17:16
воще забыл про него)))
28 Vasus55
 
17.01.12
17:51
(26) че то синтаксис-помощник не особо мне помогает(((
29 vmv
 
17.01.12
17:54
(28) его назначение подсказать
30 Vasus55
 
17.01.12
17:56
(29) да нет вроде сам догадываюсь))
31 AAlexandra
 
17.01.12
17:58
(28) Это печально, без скилла Пользования синтаксис помощником писать что-то самому практически нереально..

1) ПостроительОтчета (ReportBuilder)
Метод Выполнить (Execute)
Описание:
Выполняет запрос, построенный для отчета.
Пример:
ПостроительОтчета = Новый ПостроительОтчета;
ПостроительОтчета.Текст = ТекстЗапроса;
ПостроительОтчета.Выполнить();

2) ПостроительОтчета (ReportBuilder)
Свойство Результат
Тип: РезультатЗапроса.
Результат выполнения запроса для формирования отчета.

3) РезультатЗапроса (QueryResult)
Методы Выгрузить (Unload)
Описание:
Создает таблицу значений (или дерево значений) и копирует в нее все записи набора.
Пример:
ТаблицаРезультатов = РезультатЗапроса.Выгрузить();

ИТОГ:
ПостроительОтчетаЭтапыРаботыСКлиентом.Выполнить();
МояТЗ = ПостроительОтчетаЭтапыРаботыСКлиентом.Результат.Выгрузить();

Как-то так должно работать..
Еще где-то между
ПостроительОтчетаЭтапыРаботыСКлиентом.Текст = "..."
и
ПостроительОтчетаЭтапыРаботыСКлиентом.Выполнить();
Должны параметры заполняться.. ;)
32 Vasus55
 
17.01.12
18:42
AAlexandra
(17)
Программист всегда исправляет последнюю ошибку.