Имя: Пароль:
1C
1C 7.7
v7: Использование таблицы значений несколько раз за процедуру
0 JuixyJes
 
20.05.19
11:39
Для заполнения данных макета используется несколько разных ТЗ. Можно ли использовать перезаполнение 1й ТЗ и брать данные из перезаполненной тз, если да, то как?
1 JuixyJes
 
20.05.19
11:40
кл=ТекущийЭлемент();
    ТЗ = СоздатьОбъект("ТаблицаЗначений");
    ТЗ.НоваяКолонка("ФИО");
    ТЗ.НоваяКолонка("РодственнаяСвязь");
    ТЗ.НоваяКолонка("ПолныхЛет");
    ТЗ.НоваяКолонка("ДатаРождения");
    спрдети=СоздатьОбъект("Справочник.Проживающие");
    спркл=СоздатьОбъект("Справочник.Клиенты");
    спрдети.ИспользоватьВладельца(кл);
    спрдети.ВыбратьЭлементы();  
    Пока спрдети.ПолучитьЭлемент()=1  Цикл
        возраст = (РабочаяДата() - спрдети.ТекущийЭлемент().ФизЛицо.ДатаРождения)/365;
        Если возраст < 14 Тогда
            ТЗ.НоваяСтрока();
            ТЗ.ФИО=спрдети.ТекущийЭлемент().ФизЛицо;    
            ТЗ.РодственнаяСвязь= спрдети.ТекущийЭлемент().Принадлежность ;
            возраст = (РабочаяДата() - спрдети.ТекущийЭлемент().ФизЛицо.ДатаРождения)/365;
            ТЗ.ПолныхЛет = Цел(возраст);
            ТЗ.ДатаРождения = спрдети.ТекущийЭлемент().ФизЛицо.ДатаРождения;
        КонецЕсли;
    КонецЦикла;
    стр=0;    
    Если ТЗ.ВыбратьСтроку(стр,"Выберите регистрируемого ребёнка") = 0 тогда
        Предупреждение("Не выбран ребенок") ;
        Возврат ;
    КонецЕсли;
    ТЗ.УдалитьСтроки();
    
    ТЗ.НоваяСтрока();
    ТЗ.ФИО= кл.ФизЛицо;
    ТЗ.РодственнаяСвязь=кл.ФизЛицо.Родств;
    возрасткл = (РабочаяДата() - кл.ФизЛицо.ДатаРождения)/365;
    ТЗ.ПолныхЛет = Цел(возрасткл);
    ТЗ.ДатаРождения = кл.ФизЛицо.ДатаРождения;
    Пока спрдети.ПолучитьЭлемент()=1  Цикл
        возраст = (РабочаяДата() - спрдети.ТекущийЭлемент().ФизЛицо.ДатаРождения)/365;
        Если (возраст > 18)   тогда
            ТЗ.НоваяСтрока();
            ТЗ.ФИО=спрдети.ТекущийЭлемент().ФизЛицо;    
            ТЗ.РодственнаяСвязь=спрдети.ТекущийЭлемент().Принадлежность;
            ТЗ.ПолныхЛет = Цел(возраст);
            ТЗ.ДатаРождения = спрдети.ТекущийЭлемент().ФизЛицо.ДатаРождения;
        КонецЕсли;
    КонецЦикла;
    стр1=0;    
    Если ТЗ.ВыбратьСтроку(стр1,"Выберите законного предтавителя") = 0 тогда
        Предупреждение("Не выбран законный представитель.") ;
        Возврат ;
    КонецЕсли;
2 JuixyJes
 
20.05.19
11:41
В обоих случаях результат одинаковый

ТЗ.ПолучитьЗначение(стр,1).ПолнНаименование =
ТЗ.ПолучитьЗначение(стр1,1).ПолнНаименование =
3 mikecool
 
20.05.19
11:42
1. можно
2. так же, как и до перезаполнения, изменения тз идет по ссылке
4 JuixyJes
 
20.05.19
11:43
(3) а можно по подробнее?
5 mikecool
 
20.05.19
11:45
(4)
ТЗ.ПолучитьЗначение(стр,1).ПолнНаименование = здесь старое значение
ТЗ.УстановитьЗначение(стр,1, "Новое значение")
теперь будет новое значение
только с синтаксисом я не помню
6 HawkEye
 
20.05.19
11:48
(0) что в итоге то надо, в первой ТЗ все кто младше 14 во второй все кто старше 18?
7 JuixyJes
 
20.05.19
11:50
(6) в первой тз выбирается младше 14 лет, во второй родитель этого младше, и как мне заполнить в макете и того и того используя перезаполнение тз, я не понимаю
8 Mikeware
 
20.05.19
11:53
1с:инцест
9 JuixyJes
 
20.05.19
12:00
(8) еще остроты будут? или Вы поможете?
10 HawkEye
 
20.05.19
12:05
(7) т.е. ты сначала хочешь в макет засунуть все данные из ТЗ1, а потом в этот-же макет, под данными ТЗ1 добавить данные из ТЗ2, так?
11 hhhh
 
20.05.19
12:05
(9) в твоем тексте вообще нет такого слова ПолнНаименование. Ты наверно хохмишь, произвольный кусок текста сюда фигакнула.
12 JuixyJes
 
20.05.19
12:08
(11) ПолнНаименоваие - реквизит который имеется и у СПРКЛ и у СПРДЕТИ
13 JuixyJes
 
20.05.19
12:09
(10) Ну тоесть сначала выбираю данные в ТЗ1 , выбираю данные в ТЗ2 а потом они заполняют макет.
14 Bigbro
 
20.05.19
12:10
мой мозг взрывается от таких формулировок.
"брать данные из перезаполненной" - те что были до перезаполнения - нет нельзя. те что оказались после перезаполнения - разумеется можно, какая разница что там было раньше, создана была новая ТЗ или перезаполнена существующая.
не понимаю
15 hhhh
 
20.05.19
12:11
(13) вам надо выбросить эту дебильную мысль из головы. Про одну ТЗ и так далее. Это наверно после выходных у вас. Используйте 2 ТЗ  - это гораздо кошернее.
16 HawkEye
 
20.05.19
12:11
(13) ты имела ввиду, что выбираешь данные ИЗ ТЗ?
17 JuixyJes
 
20.05.19
12:14
(16) Происходит это дело так:
1.Открывается ТЗ, заполненное данными, выбирается нужная строка.
2.ТЗ перезаполняется новыми данными, снова выбирается новая строка.
3.Макет заполняется значением первого выбора и значением второго выбора.
18 Bigbro
 
20.05.19
12:16
(17) я бы предложил один раз перебрать справочник, и лучше запросом. выбираете жео дно и то же только с двумя условиями <14 или >18.
выборка выгружается в два списка (или ТЗ) для выбора значения с фильтром.
19 JuixyJes
 
20.05.19
12:17
+ (17) и возможно ли это сделать используя одну ТЗ или все таки новую создавать надо?
20 JuixyJes
 
20.05.19
12:19
(18) в две разных тз уже было сделано, но был предложен вариант использовать одну с перезаполнением, но как реализовать не сказали(
21 Bigbro
 
20.05.19
12:21
судя по 3 пункту - в момент вывода соответствующей области макета ТЗ должна быть еще не испорчена. если перезаполняем ТЗ то надо вывести ту часть где использовались данные ТЗ, затем перезаполнить и выводить дальше области с данными из новой ТЗ.
потом показать()
22 Bigbro
 
20.05.19
12:23
а если заполняется только значением выбора то ТЗ вообще не нужны - значения выбора запоминаем и их а не ТЗ используем для вывода. и все.
23 JuixyJes
 
20.05.19
12:23
(21) сейчас попробую
24 JuixyJes
 
20.05.19
12:25
(22) господи, гениально! Сама что-то не додумалась, предполагала, но не попробовала..
25 Ёпрст
 
гуру
20.05.19
12:25
(0)
ТЗ.УдалитьСтроки();
зачет..
всё что делали первый раз - коту под хвост
26 HawkEye
 
20.05.19
12:32
(17) ок. после первого цикла выбора что происходит? снова выбираем из первых данных?
если да, то откуда выбирать, если ты ТЗ перезаполнила другими данными?
27 JuixyJes
 
20.05.19
12:43
(26) (25) Проблему решила, спасибо Bigbro!
28 hhhh
 
20.05.19
12:43
(26) ну, в принципе (22) прав. Зачем вообще заполнять эти тз, если просто можно выбрать ребенка из справочника дети.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший