Имя: Пароль:
1C
1С v8
Как правильно записать алгоритм использую связь по владельцу?
0 Kamich
 
04.04.13
17:40
Добрый день.
В документе есть
1)Реквизит Заявка
2)Реквизит Всего
3)Две ТЧ: Клиенты(Колонки: Клиент,Сумма),Дети(Колонки: Клиент,Сумма).
При выборе заявки Происходит следующая процедура:
Процедура ЗаявкаПриИзменении(Элемент)

Клиент.Очистить();
Для Каждого Строка Из Заявка.Клиенты Цикл
   НоваяСтрока=Клиент.Добавить();
   НоваяСтрока.Клиент=Строка.Клиент;
КонецЦикла;

Дети.Очистить();
Для Каждого Строка Из Заявка.Дети Цикл
   НоваяСтрока=Дети.Добавить();
   НоваяСтрока.Клиент=Строка.Клиент;
КонецЦикла;

КонецПроцедуры


В этом же документе есть кнопка1 при нажатии которой происходит следующая процедура:
Процедура Кнопка1Нажатие(Элемент)
   
   Для Каждого Строка Из Клиент Цикл
       Строка.Сумма=Всего;
   КонецЦикла;
   
   Для Каждого Строка Из Дети Цикл
       Строка.Сумма=Всего;
   КонецЦикла;
   
   Стр=ЭлементыФормы.Дети.ТекущиеДанные;
   Стр2=ЭлементыФормы.Клиент.ТекущиеДанные;
   
   Если Стр.Клиент.Владелец.Ссылка=Стр2.Клиент Тогда
           Для каждого Строчка Из Дети Цикл
           Для Каждого Строка Из Клиент Цикл                
           Строка.Сумма=Строчка.Сумма+Строка.Сумма;            
   КонецЦикла;        
   КонецЦикла;    
   КонецЕсли;          
   КонецПроцедуры

У Справочника Дети есть владелец Клиент.

Вопрос такой: К примеру в реквизите Всего указано значение "100".

Какой алгоритм следует сделать чтобы при нажатии по кнопка1 происходила проверка ТЧ Дети, по владельцу и если находился владелец то в ТЧ Клиент в найденной строке по колонке "Клиент" в колонке Сумма добавлялась сумма и суммировалась из ТЧ Дети?
1 zak555
 
04.04.13
17:42
> У Справочника Дети есть владелец Клиент.

неправильный подход

я могу заплатить за ребёнка, который не мой
2 Kamich
 
04.04.13
17:44
(1) ...
А что предложите?
3 zak555
 
04.04.13
17:46
(2) в БУ нет привязки кто за кого платит
там просто делаются движения через 76 счет
4 Kamich
 
04.04.13
17:48
(3) P.S. Конфигурация написана с нуля
5 zak555
 
04.04.13
17:48
так я про принципы говорю
6 Kamich
 
04.04.13
17:50
(5) Т.е. предлагаете через движения по регистру?
7 kosts
 
04.04.13
17:51
(0) Опиши какой бизнес процесс должна решать эта форма.
А то что-то сложно накручено.
8 zak555
 
04.04.13
17:51
ты лучше расскажи зачем нужен клиенты и дети
9 Kamich
 
04.04.13
17:52
(8) (7)
Оплата за тур.
10 kosts
 
04.04.13
17:55
Возможно оплату нужно вносить по каждому клиенту отдельно.
11 kosts
 
04.04.13
17:56
(10)+ разными документами
12 Kamich
 
04.04.13
17:59
(11) Т.е. делать движения по регистрам по всем клиентам...
А если делать по другому,т.е в движения попадает только клиент(без детей) с сумой (за клиента+за ребенка).а детей не фиксировать в движения.
Тогда какой должен быть алгоритм (0)
13 zak555
 
04.04.13
18:01
(9) зачем тогда связываешь плательщика и ребёнка ?
14 Kamich
 
04.04.13
18:04
(13) у ребенка при расчета могут быть другие цены.Значит лучше всего дети движения по регистрам по всем клиентам?
15 zak555
 
04.04.13
18:05
(14) наверное разные цены зависит не от ребёнка, а от того, кто платит ? =)
16 kosts
 
04.04.13
18:08
(14) Мало информации о твоей задаче, только гадать можно...
17 Kamich
 
04.04.13
18:10
(15) )
На самом деле такую волокиту создали....
Писал писал,а про детей забыл,
Такая проблема,что к примеру в каждой гостинице имеется определенные условия к примеру если ребенку семь лет, то платить за него не нужно,если от 7-10 до 50 % оплаты от стоимость за человека.
Соответственно цена зависит не (15) ,а от ребенка.
18 zak555
 
04.04.13
18:11
кстати, банковскую карты своему ребёнку можно открыть с 4х лет
19 zak555
 
04.04.13
18:12
=> при оплате инфы, кто держит счет не будет
20 Kamich
 
04.04.13
18:15
(18) (16) (15) (11) Ребят что посоветуете?
21 kosts
 
04.04.13
18:26
Возможно не нужно выделять отдельно детей в справочник.

В шапке плательщик, сумма оплаты всего.
Одна табличная часть жильцы.
ФИО|Возраст|Процент оплаты|сумма
22 Kamich
 
04.04.13
18:30
(21) По архитектуре не подойдет
23 Kamich
 
04.04.13
18:32
(21) А как быть с алгоритмом,как правильно его прописать (0)
24 kosts
 
04.04.13
18:36
>Сумма добавлялась сумма и суммировалась из ТЧ Дети
Вот это не правильный подход, что произойдет если кнопка дважды будет нажата...
Или как понять что в сумме рядом с клиентом уже прибавилась сумма за ребенка или еще не прибавилась...
25 Kamich
 
04.04.13
18:39
(24)
Тогда какой алгоритм должен быть?
26 kosts
 
04.04.13
18:42
(25) Три колонки можно
Сумма клиент|Сумма за детей|Сумма всего
27 kosts
 
04.04.13
18:46
(26) Причем пересчитывать сразу по вводу данных, без специальных кнопок.
28 Kamich
 
04.04.13
18:46
(26)(27) То же вариант)
А как это прописать в виде кода,чтобы соответствовал по владельцу,а то как я понимаю сейчас уменя не идет отбор по клиенту в ТЧ Клиенты, и в колонке сумма ТЧ Клиенты рассчитывается на все клиента в независимости от владельца.
29 Kamich
 
04.04.13
18:59
(27) ?
30 kosts
 
04.04.13
19:02
(28) Поиск по владельцу тоже как-то не очень, т.к. не очевидна связь клиент-ребенок при вводе данных на форме.
Хорошо бы как-то обозначить какому клиенту соответствуют какие дети (тут же на форме).

Что-то в этом роде

Проц СуммаРебенокПриИзменении()
   КлиентВладелец = эф.Дети.ТекущаяСтрока.Ребенок.Владелец;
   СуммаПоДетямДляВладельца = 0;
   Для каждого т из Дети цикл
       Если т.Ребенок.Владелец = КлиентВладелец Тогда
           СуммаПоДетямДляВладельца = СуммаПоДетямДляВладельца + т.Сумма;
       КонецЕсли;
   КонецЦикла;
   Строка = Клиенты.Найти(КлиентВладелец, "Клиент");
   Если Строка <> неопределено Тогда
       Строка.Клиент.СуммаПоДетям = СуммаПоДетямДляВладельца;
       ПересчитатьИтогВСтроке(Строка);
   Иначе
       сообщить("ошибка")
   КонецЕсли;


PS на ошибки ввода данных нужно тщательно проверять. Что бы у детёнка обязательно был владелец в этом документе, а то его сумма никуда не войдет...
31 Kamich
 
05.04.13
10:40
(30) отлично)
Правда он у меня выводит итоги только по выделенной строке,как тогда нужно сделать чтобы по всем строкам прошелся?
Вот код:
   КлиентВладелец = ЭлементыФормы.Дети.ТекущаяСтрока.Клиент.Владелец;
   СуммаПоДетямДляВладельца = 0;
   Для каждого т из Дети цикл
       Если т.Клиент.Владелец = КлиентВладелец Тогда
           СуммаПоДетямДляВладельца = СуммаПоДетямДляВладельца + т.Сумма;
       КонецЕсли;
   КонецЦикла;
   Строка = Клиент.Найти(КлиентВладелец, "Клиент");
   Если Строка <> неопределено Тогда
       Для Каждого ЭлементСписка Из Клиент Цикл
           Строка.СуммаПоДетям = СуммаПоДетямДляВладельца;
   КонецЦикла;
   
Иначе
       сообщить("ошибка");
 
   КонецЕсли;
32 Kamich
 
05.04.13
10:58
Так как сделать что бы не по выделенной строке,а чтобы по всем строкам прошелся???
33 kosts
 
05.04.13
11:15
(32) Помести (31) в процедуру типа "пересчитать по строке".
34 Kamich
 
05.04.13
11:23
(33) Он ее выводит как неопознанный объект
P.S. 1с 8.1
35 kosts
 
05.04.13
11:26
(34) что именно не опознано?
36 Kamich
 
05.04.13
11:34
(35) ПересчитатьИтогВСтроке(Строка);
37 kosts
 
05.04.13
11:37
(36) ну так создай её. перенеси в нее код из (31) (ну почти весь). передавай в процедуру или владельца по которому нужно пересчитать или ребенка.
38 Kamich
 
06.04.13
17:25
(37)
Я её создал
Процедура ПересчитатьИтогВСтроке(Строка)
       
   КлиентВладелец = ЭлементыФормы.Дети.ТекущаяСтрока.Клиент.Владелец;
   СуммаПоДетямДляВладельца = 0;
   Для каждого т из Дети цикл
       Если т.Клиент.Владелец = КлиентВладелец Тогда
           СуммаПоДетямДляВладельца = СуммаПоДетямДляВладельца + т.Сумма;
       КонецЕсли;
   КонецЦикла;
   Строка = Клиент.Найти(КлиентВладелец, "Клиент");
   Если Строка <> неопределено Тогда
       Для Каждого ЭлементСписка Из Клиент Цикл
           Строка.СуммаПоДетям = СуммаПоДетямДляВладельца;
       КонецЦикла;
       Иначе
       сообщить("ошибка");
   КонецЕсли;    
       
   КонецПроцедуры


Все равно считает только по выделенной колонке....
39 Kamich
 
06.04.13
17:28
(37) Спасибо))
Разобрался сделал следующее:

       Для каждого ТЧ ИЗ Клиент Цикл
           Для Каждого ТЧД Из Дети Цикл
               Если ТЧД.Клиент.Владелец=ТЧ.Клиент Тогда
                   ТЧ.СуммаПоДетям=ТЧД.Сумма;
               КонецЕсли;
           КонецЦикла
       КонецЦикла;
40 mistеr
 
06.04.13
18:26
Насчет архитектуры.
Я так понимаю, есть справочник клиентов, а есть документ - расчет конкретного тура. Я бы сделал так. В документе ТЧ Участники/Места вида
Категория | Цена  | Количество | Сумма
где Категория это взрослые, дети до 7 лет, и т.д. Перечисление или справочник.
По команде Заполнить ТЧ заполняется с учетом детей из справочника. Но можно добавить и вручную (на случай чужого ребенка).

Стремится все рассчитывать только автоматически не нужно, всегда могут быть нюансы.
41 Kamich
 
07.04.13
17:36
(40)
Это точно)):
"Стремится все рассчитывать только автоматически не нужно, всегда могут быть нюансы.")))
Спасибо))