Имя: Пароль:
1C
1С v8
Как рассчитать количество в справочнике?
,
0 Свободный ник
 
06.05.16
13:21
Доброго времени суток!

У меня есть иерархический справочник. В нем идут группы, а в них соответственно элементы. Есть реквизиты "количество студентов" и "всего студентов". "Количество студентов" относится к одной записи в справочнике, а "всего студентов" должно показывать сумму всех "количество студентов". Как это выполнить программно? и в каком модуле (формы, элемента или др.) прописать?
1 Звездец
 
06.05.16
13:23
запрос тебе в помощь
2 Jonny_Khomich
 
06.05.16
13:25
непонятно.
Где эти реквизиты?
"Количество студентов" относится к одной записи в справочнике - что это? Запить = группа?
3 FIXXXL
 
06.05.16
13:27
(2) вангую в папке он хочет выводить сумму по подчиненным
4 Свободный ник
 
06.05.16
13:28
Звездец, поподробней можно? Где запрос запилить в модуле формы списка?

fixxxl, да, именно.
5 Jonny_Khomich
 
06.05.16
13:28
Всего студентов понятно. выбрать количетсво(ссылка) из справочник.студенты как С где не С.пометкаудаления и не С.ЭтоГруппа
Я не думаю что студенты будут учиться всю жизнь и их придётся выпустить или отчислить. Нужны учащиеся студенты? Есть для этого нужные данные?
6 Свободный ник
 
06.05.16
13:32
В справочнике только учащиеся студенты. Остальных руками своевременно убирают.
7 Sabbath
 
06.05.16
13:32
(2) > Запить = группа
Групповые запои на дому

(0) Разберись с запросами, в запросе группируй и суммируй поле количество студентов.

(5) он хочет просуммировать реквизит количество студентов, а не посчитать количество ссылок в справочнике

Поэтому СУММА(КоличествоСтудентов)

з.ы.: Запрос пиши, где тебе хочется (для начала)
8 FIXXXL
 
06.05.16
13:32
(4) если не часто меняются(записываются) элементы справочника, можно повесить процедуру ПриЗаписи на элемент справочника, в ней запросом получитьколичество по элементам, которые входят в ЭтотОбъект.Родитель и переписать Родителя
но это не сильно правильно

если тебе нужно только для отображения на форме, делай запрос ПриПолученииДанных и выводи в свою колонку на форме
9 Свободный ник
 
06.05.16
13:32
Кажется я понял. Если заработает, то скину листинг.Всем спасибо
10 Jonny_Khomich
 
06.05.16
13:38
(7) в универе милое дело запить группой
11 Jonny_Khomich
 
06.05.16
13:39
(9) итоги будешь использовать?
12 b_ru
 
06.05.16
13:39
(6) Похоже на велосипед с квадратными колесами
13 Jonny_Khomich
 
06.05.16
13:46
ВЫБРАТЬ
    Студенты.Родитель КАК Родитель,
    Студенты.Ссылка КАК Ссылка
ИЗ
    Справочник.Студенты КАК Студенты
ГДЕ
    (НЕ Студенты.ЭтоГруппа)
    И (НЕ Студенты.ПометкаУдаления)
ИТОГИ
    КОЛИЧЕСТВО(Ссылка)
ПО
    ОБЩИЕ,
    Родитель
14 Dmitry77
 
06.05.16
13:54
можно еще вывести форму в mxl  там вроде строчки нумеруются
15 Свободный ник
 
06.05.16
16:27
Сделал запрос. Видимо неверный. Ну или не в том модуле...

Запрос = Новый Запрос(
     "ВЫБРАТЬ
     |    Факультеты.КоличествоСтудентов КАК КоличествоСтудентов,
     |    Факультеты.ВсегоСтудентов КАК ВсегоСтудентов
     |ИЗ
     |    Справочник.Факультеты КАК Факультеты
     |ИТОГИ
     |    СУММА(ВсегоСтудентов)
     |ПО
     |    КоличествоСтудентов");
    
     Элементы.Список.ТекущиеДанные.ВсегоСтудентов = Запрос.Выполнить().Выбрать();
16 FIXXXL
 
06.05.16
16:59
(15) все нетак и все не там

где эта процедура вызывается? при каком событии?
запрос неправильный даже по логике
у тебя в элементе справочника и КоличествоСтудентов  и ВсегоСтудентов присутствуют?
17 Timon1405
 
06.05.16
17:06
Как понять что скоро сессия? на мисте создаются вопросы на отвлеченные темы, практическая польза от которых ноль без палки
18 Свободный ник
 
06.05.16
17:15
(16) при открытии. присутствую. (17) откуда тебе знать, ноль не ноль. Может это будет супер система.
19 Свободный ник
 
06.05.16
17:16
(16) при открытии формы списка
20 Sabbath
 
06.05.16
18:09
(10) были времена :'(
21 Sabbath
 
06.05.16
18:18
(15) У меня стойкое ощущение, что сама постановка задачи не очень, да и решение не комментирую. Но будем исходить из того, что есть.

Запрос = Новый Запрос(
     "ВЫБРАТЬ
     |    СУММА(Факультеты.КоличествоСтудентов) КАК КоличествоСтудентов
     |ИЗ
     |    Справочник.Факультеты КАК Факультеты;
    
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
     Элементы.Список.ТекущиеДанные.ВсегоСтудентов = Выборка.КоличествоСтудентов;
КонецЕсли;

Я написал, как выбрать все факультеты и просуммировать КоличествоСтудентов.

Часть кода Элементы.Список.ТекущиеДанные.ВсегоСтудентов похоже на хрень какую-то, но тебе виднее :)
22 Yuri 83
 
06.05.16
18:24
Просто чтобы поднять градус...
Делаем подписку на событие ПередЗаписью этого справочника
В подписке рекурсивно для каждого родителя обрабатываемого элемента вызываем функцию с таким запросом:

ВЫБРАТЬ СУММА(Спр.КоличествоСтудентов) КАК ВсегоСтудентов
ИЗ Справочник.Факультеты КАК Спр
ГДЕ Спр.Ссылка В ИЕРАРХИИ (&ТекГруппа)

Тогда все запишется
23 singlych
 
06.05.16
18:26
Все бы вам формы списков в отчеты превращать.
24 Yuri 83
 
06.05.16
18:45
Чтобы раскрыть тему. Используем подписку на событие ПриЗаписи

Процедура ПодпискаНаСобытиеПриЗаписиФакультета(Источник, Отказ) Экспорт
    Если Источник.ОбменДанными.Загрузка Тогда Возврат КонецЕсли;
    
    Если Источник.ЭтоГруппа Тогда
    
        УстановитьВсегоСтудентов(Источник.Ссылка);
        
    Иначе
        
        УстановитьВсегоСтудентов(Источник.Родитель);
    
    КонецЕсли;
КонецПроцедуры

Процедура УстановитьВсегоСтудентов(Папка)
    Если НЕ ЗначениеЗаполнено(Папка) Тогда Возврат КонецЕсли;
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    СУММА(Спр.КоличествоСтудентов) КАК ВсегоСтудентов
    |ИЗ
    |    Справочник.Факультеты КАК Спр
    |ГДЕ
    |    Спр.Ссылка В ИЕРАРХИИ(&ТекГруппа)"
    ;
    Запрос.УстановитьПараметр("ТекГруппа", Папка);
    
    Выборка = Запрос.Выполнить().Выбрать();
    Если Выборка.Следующий() Тогда
    
        СпрОбъект = Папка.ПолучитьОбъект();
        СпрОбъект.ОбменДанными.Загрузка = Истина;
        СпрОбъект.ВсегоСтудентов = Выборка.ВсегоСтудентов;
        СпрОбъект.Записать();
        
        УстановитьВсегоСтудентов(Папка.Родитель);
    
    КонецЕсли;

КонецПроцедуры
25 Свободный ник
 
11.05.16
12:11
(21) Почему хрень?) Элементы.Список.ТекущиеДанные.ВсегоСтудентов это путь к реквизиту. какой был указан в свойствах, тот я написал
26 Свободный ник
 
11.05.16
12:16
(21) Такой код я писал. какая ошибка там была - не помню. но 1с ругалась на путь к реквизиту.
27 Свободный ник
 
11.05.16
12:36
(25) Ошибку пишет - Переменная "Элементы" не определена.
28 Свободный ник
 
11.05.16
12:40
(27) код писал в модуле формы списка справочника на сервере без контекста. Если делать на сервере, то пишет ошибку - Ошибка при получении значения атрибута контекста (Текущие данные)