Имя: Пароль:
1C
1C 7.7
v7: пересчет справочника
0 kouki
 
14.07.11
10:28
В справочнике рабочие есть реквизит тариф типа справочника тарифы и разряды. Если меняю в справочнике тарифы тариф (к примеру 3400 на 3450), то в справочнике рабочие калонка тариф тоже должна изменяться. пишу процедуру:
спрР = создатьобъект("справчник.рабочие");
СпрТ = Создатьобъект("справочник.тарифы");
спрР.выбратьэлементы();
спрТ.ВыбратьЭлементы();
Пока СпрР.получитьэлемент() = 1 Цикл
пока СпрТ.получитьэлемент()=1 Цикл
Если (СпрТ.текущийэлемент().тариф = спрР.текущийэлемент().тариф)И (спрТ.текущийэлемент().Разряд = спрР.текущийэлемент.разряд) тогда
СпрР.текущийэлемет().тариф= спрР.текущийЭлемент().тариф
конецесли;
ну и так далее .. КОроче элементы выборки все нули.. почему????
1 povar
 
14.07.11
10:30
""почему?..." как обычно
3 floody
 
14.07.11
10:32
во первых ошибок до и больше, Ctrl-C Ctrl-V из пофигуратора не пробовал?
4 Denp
 
14.07.11
10:32
это вообще убило: СпрР.текущийэлемет().тариф= спрР.текущийЭлемент().тариф
5 floody
 
14.07.11
10:33
похоже нас тонко троллят :)
8 kouki
 
14.07.11
10:35
Извините.. первый раз здесь вручную пишу))))  счас скинунормальный код)
9 filh
 
14.07.11
10:35
(0) это не ваше, бегите от туда...
10 filh
 
14.07.11
10:35
(8) вот это уже пугает:
>>счас скинунормальный код)
12 ZDenis
 
14.07.11
10:37
(0) " Если меняю в справочнике тарифы тариф (к примеру 3400 на 3450), то в "

насколько я понимаю после такой замены условие -

"СпрТ.текущийэлемент().тариф = спрР.текущийэлемент().тариф"

не выполниться, т.к в одном ты уже поменял, а второе только хочешь поменять ))
13 kouki
 
14.07.11
10:38
Процедура ПерезаписатьТарифы()
СпрР = СоздатьОбъект("Справочник.Рабочий");
СпрТ = СоздатьОбъект("Справочник.Тариф");
Н = 1 ;// номер строки
СпрТ.ВыбратьЭлементы();
пока СпрР.НайтиПоКоду(Н) = 1 Цикл
   Пока СпрТ.ПолучитьЭлемент() = 1 Цикл
       Если СпрТ.ТекущийЭлемент().Наименование = СпрР.ТекущийЭлемент().НазвТариф Тогда
           Если СпрТ.ТекущийЭлемент().Разряд = СпрР.ТекущийЭлемент().Разряд1 Тогда
               СпрР.Разряд1 = СпрТ.ТекущийЭлемент().Разряд;
           КонецЕсли;
       КонецЕсли;
   КонецЦикла;
Н=Н+1;
КонецЦикла;
КонецПроцедуры
14 kouki
 
14.07.11
10:39
(12) там ошибка . не усмотрел)))
15 kouki
 
14.07.11
10:40
(10). Я бы с удовольствием убежал. Но есть такая вещь как распределение((. ТАк что придется учить. в универе не преподавали. В городе курсов нету блин((
16 ЧеловекДуши
 
14.07.11
10:41
(13)Не пробовал делать вместо "СпрТ.ТекущийЭлемент().Наименование"
ТекЭлемТ = СпрТ.ТекущийЭлемент()
И далее работаешь только с переменной "ТекЭлемТ"
18 andrewks
 
14.07.11
10:42
прекратите флуд в тематической ветке
19 povar
 
14.07.11
10:43
(18) помоги автору и флуда не будет ))
20 kouki
 
14.07.11
10:44
Скажите только почему эл-ты выборки равны 0.
21 ZDenis
 
14.07.11
10:45
(0) Условие задачи еще раз изложи.
"В справочнике рабочие есть реквизит тариф типа справочника тарифы и разряды. Если меняю в справочнике тарифы тариф (к примеру 3400 на 3450), то в справочнике рабочие калонка тариф тоже должна изменяться. пишу процедуру: "

В справочнике "Рабочие" есть реквизит "Тариф", тип (Справочник.Тарифы)

В справочнике "Тарифы" ты изменил тариф и хочешь чтобы он изменился в справочнике "Рабочие"? Так?

Если все так, то он уже у тебя изменился.
22 kouki
 
14.07.11
10:50
(21). тобишь я правильно написал????
СпрР.ТекущийЭлемент().НазвТариф постоянно пустой.
23 Godofsin
 
14.07.11
10:51
+(21) >то в справочнике рабочие калонка тариф тоже должна изменяться.

Шо это за "калонка" в справочнике? У справочников нет табличной части.
24 kouki
 
14.07.11
10:52
в форме списка.
25 Godofsin
 
14.07.11
10:52
(22) В 21 говорится о том, что если ты меняешь значенив спр тарифов, эти значения поменяются и в спр рабочие. Слово "Ссылка" тебе о чем нибудь говорит?
26 kouki
 
14.07.11
10:55
(25).Т-ю Мать!!!!!!!!! Блин а тут числа стоят. Блин!!!!! И кто  ж их туда поставил????!!!!!!!
27 Godofsin
 
14.07.11
10:56
+(25) То есть никаких процедур не надо. Это исходя из твоего топика. Но может ты чего неправильно объяснил?
28 kouki
 
14.07.11
11:00
(27). Ну может и не правильно... Значит Есть справочник рабочие. ТАм идет ФИО работника его разряд и тариф. Ну и работников там есть около 1000. ну кто-то может при одинаковом разряде иметь одинаковый тариф.
Ну и поменяли мы тариф В справочнике тарифы. И не спорю по идее должно меняться.
В справочниике рабочие  тариф и разряд типа числ. Ну и какя тут ссылка может быть??!!
29 kouki
 
14.07.11
11:03
И что самое прикольное тот кто делал эту конфигурацию даже не придусмотрел чтобы поля в справочнике автозаполнялись привыборе названия тарифа..
30 vladko
 
14.07.11
11:04
(13) убери .ТекущийЭлемент() = он в данном случае лишний, когда ты работаешь с реквизитами справочников.
И УЧИСЬ ПОЛЬЗОВАТЬСЯ ОТЛАДЧИКОМ, чтобы не задавать вопрсы, типа, почему у меня не выполняется цикл
31 Godofsin
 
14.07.11
11:04
(28) А ты в (0) пишешь:
>В справочнике рабочие есть реквизит тариф типа справочника тарифы и разряды.

Точнее описывай в следующий раз.

(29) Ты выбираешь в спр. рабочие название тарифа из спр. Тарифы?
32 palpetrovich
 
14.07.11
11:08
убиться ап стену
33 kouki
 
14.07.11
11:10
(31)
Да название.
34 alkov
 
14.07.11
11:10
Может просто забыл СпрР.Записать() ?
35 kouki
 
14.07.11
11:11
(30). ТекущийЭлемент() при поиске только????
36 alkov
 
14.07.11
11:12
(35) Везде. В этом коде ТекущийЭлемент() не нужен вообще нигде
37 Godofsin
 
14.07.11
11:13
(33) Б**дь, вот тебе и ссылка! От нее и пляши!
38 kouki
 
14.07.11
11:49
Сделал!!!!
вот что надо было походу)
Процедура ПерезаписатьТарифы()
СпрР = СоздатьОбъект("Справочник.Рабочий");
СпрТ = СоздатьОбъект("Справочник.Тариф");
Н = 0 ;// номер строки
СпрР.ВыбратьЭлементы();
СпрТ.ВыбратьЭлементы();
пока СпрР.ПолучитьЭлемент()= 1 Цикл
   СпТариф = СпрР.НазвТариф;
   Если СпрТ.НайтиПоКоду(СпТариф.Код) = 1 Тогда
       Если СпрТ.ТекущийЭлемент().Разряд = СпТариф.Разряд Тогда
           СпрР.Разряд1 = СпрТ.ТекущийЭлемент().Разряд;
           СпрР.Тариф1 = СпрТ.ТекущийЭлемент().Тариф;
           СпрР.Записать();
       КонецЕсли;
   КонецЕсли;    
КонецЦикла;
Предупреждение("ЗАкончено !!!!");
КонецПроцедуры
39 kouki
 
14.07.11
11:50
Н удалить . ненужная переменная))
40 ZDenis
 
14.07.11
12:01
(38) У тебя СпрР.НазвТариф это ничто иное как твой тариф и все что надо было сделать это
СпрР.ВыбратьЭлементы();
пока СпрР.ПолучитьЭлемент()= 1 Цикл
   СпрР.Разряд1 = СпрР.НазвТариф.Разряд;
   СпрР.Тариф1 = СпрР.НазвТариф.Тариф;
   СпрР.Записать();
КонецЦикла;
41 kouki
 
14.07.11
12:15
Блин...( Да а я навернул то(((  Но кстати скорость и того и другого не радует.