Имя: Пароль:
1C
1С v8
Как узнать количество по владельцам в ТЧ?
,
0 Kamich
 
07.04.13
17:34
Добрый день.

Есть две ТЧ
1)ТЧ Клиенты, с колонками Клиенты(Справочник.Кдиенты),КоличествоДетей(Число)
2)ТЧ ДетиКлиентов, с колонками Клиенты(Владелец-Справочник.Кдиенты)

Как узнать сколько детей в ТЧ Клиенты принадлежат Из ТЧ ДетиКлиентов,для каждой строки Клиенты?

Написал вот такую процедуру:

Шаг=0;
Для Каждого СтрокаДети Из Дети Цикл
   Для Каждого СтрокаКлиент Из Клиент Цикл
       Если СтрокаДети.Клиент.Владелец=СтрокаКлиент.Клиент Тогда
           Шаг=Шаг+1;
           СтрокаКлиент.КоличествоДетей=Шаг;
       КонецЕсли;
       
       КонецЦикла;    
КонецЦикла;  

Выводит в колонке КоличествоДетей=НомерСтроки ТЧ Дети.
Подскажите,пожалуйста
1 cw014
 
07.04.13
17:38
"сколько детей в ТЧ Клиенты принадлежат Из ТЧ ДетиКлиентов,для каждой строки Клиенты?" - а на русском можешь написать?
2 Kamich
 
07.04.13
17:42
(1)
Т.е. к примеру в :
1)ТЧ Клиенты есть 3 заполненных строчек;
2)ТЧ Дети есть 10 заполненных строчек

И к примеру в ТЧ Клиенты в первой строке к примеру у "Иванова И.И." есть трое детей из ТЧ ДетиКлиентов.
Как это число вписать программно в колонку КоличествоДетей ?
3 shuhard
 
07.04.13
17:43
(2)[Как это число вписать программно в колонку ]
отменная трава
4 cw014
 
07.04.13
17:44
Ты хоть связи какие нибудь сделай. Посмотри как в УТ связь с серийными номерами по "КлючСтроки" сделано
5 Kamich
 
07.04.13
17:46
(4) Я новичок,
В УТ я уж точно запутаюсь)
Если есть какие нибудь предложение,буду рад)
Можно использовать для примера код в (0)
6 cw014
 
07.04.13
17:47
(5) 10.3 найди - там все просто и лекго
7 Kamich
 
07.04.13
17:48
(6) Документ какой ?
8 2S
 
07.04.13
17:50
ключ -айди по уникальному щначеню клиента. Или отбор во второй ТЧ с помощью структуры.
9 cw014
 
07.04.13
17:50
(7) Реализация товаров и услуг
10 cw014
 
07.04.13
17:50
(7) ЧекККМ
11 Kamich
 
07.04.13
17:54
(10) (8)

   Если ДокументОбъект[ИмяТЧ].Количество() = 0 Тогда
       МаксКлюч = 1;
   Иначе
       // Если в табл. части уже присутствуют строки, то новое «свободное» значение ключа
       // рассчитывается от максимального существующего значения.
       СписокКлючей = Новый СписокЗначений;
       СписокКлючей.ЗагрузитьЗначения(ДокументОбъект[ИмяТЧ].ВыгрузитьКолонку("КлючСтроки"));
       СписокКлючей.СортироватьПоЗначению(НаправлениеСортировки.Убыв);
       МаксКлюч = СписокКлючей[0].Значение + 1;
   КонецЕсли;

   Возврат МаксКлюч;
12 2S
 
07.04.13
17:54
А вообще запрос тут рулит с группировкой по клиенту и значением количества второй ТЧ
13 Kamich
 
07.04.13
17:54
(10) Я верно смотрю?
14 Kamich
 
07.04.13
17:55
(12) Предлагаете запорсом?
15 Kamich
 
07.04.13
17:55
*запросом
16 cw014
 
07.04.13
17:57
(15) Ну впринципе верно, только нужно такую выборку делать один раз, и хранить значение глобально для формы и потом его и инкрементровать
17 Kamich
 
07.04.13
17:57
(12)
Разве из этого ничего не выйдет?:

Шаг=0;
Для Каждого СтрокаДети Из Дети Цикл
   Для Каждого СтрокаКлиент Из Клиент Цикл
       Если СтрокаДети.Клиент.Владелец=СтрокаКлиент.Клиент Тогда
           Шаг=Шаг+1;
           СтрокаКлиент.КоличествоДетей=Шаг;
       КонецЕсли;
       
       КонецЦикла;    
КонецЦикла;
18 cw014
 
07.04.13
17:59
(17) Не чуешь, попахивает быдлокодом?
19 2S
 
07.04.13
18:00
Семерочник? Не кошерно так. Запросом и быстрее будет. Я с мобилы, не айс запросы писать. Сам дерзай...
20 Kamich
 
07.04.13
18:11
(18) (19)
Вот теперь проблема над запросом...
21 cw014
 
07.04.13
18:12
(20) Ну давай уже придумывай сам, тебе толчок дали... Взрослый же человек
22 Kamich
 
07.04.13
18:14
(21)
Я уже дней 4 наверное мачаюсь...все никак.
Если конечно есть у Вас время на помощь в моем вопросе,то было бы здорово)
23 cw014
 
07.04.13
18:15
(22) Если у тебя есть финансы на оплату помощи, я потрачу на тебя 1 час
24 Kamich
 
07.04.13
18:23
(23) Средств нет,если времени нет,все равно спасибо!

P.S. Я за свой опыт деньги не беру,ведь когда я и сам был "таким".
25 cw014
 
07.04.13
18:25
(24) Тебе просто подсказали в какую сторону смотреть. У тебя на выбор несколько путей. Дерзай, все получится у тебя
26 Kamich
 
07.04.13
18:28
(25)
Т.е. делать запрос и использовать в запросе "СГРУППИРОВАТЬ ПО"?
27 kosts
 
07.04.13
18:31
(26) Запрос применяют для получения данных из базы. Для расчета данных на форме запрос не катит.
28 cw014
 
07.04.13
18:32
(26) Ну подумай сам, как лучше для тебя сделать
29 Kamich
 
07.04.13
18:32
(27)
Тогда как быть в такой процедуре (0) ?
30 kosts
 
07.04.13
18:40
В (0) в принципе рабочее направление.
Поменять местами циклы, присваивание и обнуление перенести в правильные места.


Для Каждого СтрокаКлиент Из Клиент Цикл
   КоличествоДетей = 0;
   Для Каждого СтрокаДети Из Дети Цикл
       Если СтрокаДети.Клиент.Владелец = СтрокаКлиент.Клиент Тогда
           КоличествоДетей = КоличествоДетей + 1;
       КонецЕсли;
   КонецЦикла;    
   СтрокаКлиент.КоличествоДетей = КоличествоДетей;
КонецЦикла;


И переименуй уже реквизит "Клиент" на "Ребенок в таблице "Дети"...
31 Kamich
 
07.04.13
18:41
(28) (27)
Все разобрался я поменял местами:

  Шаг=Шаг+1;
  СтрокаКлиент.КоличествоДетей=Шаг;

На

 СтрокаКлиент.КоличествоДетей=Шаг;
 Шаг=Шаг+1;
32 Kamich
 
07.04.13
18:41
(31)
И получилось:
       Шаг=0;
       Для Каждого СтрокаДети Из Дети Цикл
               Для Каждого СтрокаКлиент Из Клиент Цикл
               Если СтрокаДети.Клиент.Владелец=СтрокаКлиент.Клиент Тогда
            СтрокаКлиент.КоличествоДетей=Шаг;
            Шаг=Шаг+1;
       КонецЕсли;        
       КонецЦикла;    
   КонецЦикла;
33 Kamich
 
07.04.13
18:44
(30) Вот вот )))
Спасибо ))))
34 kosts
 
07.04.13
18:48
Если структуру БД еще можно менять, то практичнее было не использовать связь по владельцу (Клиент-Ребенок), а добавить в таблицу Дети реквизит "КлиентВладелец".
Т.е. сделать таблицу дети такую.
Ребенок|Клиент|Сумма

А то теоретически возможно, что в одном документе у ребенка будет один владелец, а в другом документе другой владелец...
(Мало ли, один раз ребенка привез один человек, второй раз другой человек).
35 Kamich
 
07.04.13
18:53
(34) Логично)))
Да еще самое время менять)))
36 Kamich
 
07.04.13
18:53
(34) Спасибо)Спасибо)И Еще раз Спасибо)
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший