К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

7.7 Таблица значений. И в чем я туплю?

Гость
0 - 13.03.2013 - 16:43
Решила тут покодить немного от скуки, чтоб в памяти освежить...
Вопчем есть таблица значений, у которой есть колонка "Сотрудник". Задаю конкретного сотрудника, конкретный номер строки и колонку "Сотрудник". Почему мне НайтиЗначение выдает =1, если в этой строке совсем другой сотрудник? или все-таки он не только по этой строке ищет?



Гость
1 - 13.03.2013 - 17:23
поделись кодом
2 - 13.03.2013 - 17:26
ТЗ.НайтиЗначение(ЗначениеЧто,поз,"ИдентификаторКол онки")
.
если поз = 0 или опущен - ищется по всей ТЗ в указанной колонке.
Гость
3 - 13.03.2013 - 17:29
1-Маус > чуть попозжее, отойти надо
2-Чучундер > я в отладчике туда даже конкретную цифру ставлю, а он все-равно =1 выдает:(
Гость
4 - 13.03.2013 - 17:32
А значение поз после поиска какое?
5 - 13.03.2013 - 17:33
(3) чудес не бывает.. ;-) ты же знаешь...
.
давай на почту ид и пароль для тима, посмотрим тугеза ;-)
Гость
6 - 13.03.2013 - 17:33
В смысле значение переменной куда возвращается номер строки?
Гость
7 - 13.03.2013 - 17:35
так делаешь?
ТЗ = СоздатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("Сотрудник", "Справочник.Сотрудники");
стр=0;
Если ТЗ.НайтиЗначение(РеквизитНаФормеСТипомЗначенияСпра вочникСотрудники, стр, "Сотрудник")=1 Тогда
Сообщить("Ура");
КонецЕсли;
Гость
8 - 13.03.2013 - 17:52
конкретный номер строки и конкретная колонка... как бы "чо искать та?". если координаты известны, просто получи значение.
PS в переменной номера строки после поиска номер не той строки, которая была на входе. готов поспорить на пиво (не проверял, так что по честному).
Гость
9 - 13.03.2013 - 18:42
Вот типа такой код:
ТабДанных=ПолучитьТаблицуДанных();
ТабПериодов=ПолучитьТаблицуПериодов();
Сотр=СоздатьОбъект("Справочник.Сотрудники");
Сотр.ВыбратьЭлементы();
Пока Сотр.ПолучитьЭлемент()=1 цикл
Сотрудник=Сотр.ТекущийЭлемент();
Ном=Ном+1;
ТабУ.ВывестиСекцию("Строка|Основа");

ТабПериодов.ВыбратьСтроки();
Пока ТабПериодов.ПолучитьСтроку()=1 цикл
Стр="";

Период=ТабПериодов.ОтчетныйПериод;
Пока ТабДанных.НайтиЗначение(Сотрудник,Стр,"Сотрудник") =1 цикл
ТабДанных.ПолучитьСтрокуПоНомеру(Стр);
Если ТабДанных.ОтчетныйПериод=Период тогда

ТабУ.ПрисоединитьСекцию("Строка|Период");
КонецЕсли;
Если (Стр+1)<=ТабПринятыхДанных.КоличествоСтрок() тогда
Стр=Стр+1;
Иначе
Прервать;
КонецЕсли;

КонецЦикла;

КонецЦикла;
КонецЦикла;

после того, как находит первого сотра до последней строки сотрудник уже не меняется, т.е. по внешнему циклц не переходит, хотя ТабДанных.Сотрудник = выдает совсем другого сотра...
Гость
10 - 13.03.2013 - 18:47
ищется всегда! первое! вхождение. поэтому обычно ТЗ сначала сортируем, а после нахождения первого значения уходим в перебор пока не получим другого сотра
Гость
11 - 13.03.2013 - 18:48
можно попробовать ещё удалять строку найденную из ТЗ
Гость
12 - 13.03.2013 - 18:50
и про пиво чот не понял... проспорила?
Гость
13 - 13.03.2013 - 18:51
10-Зелёный тролль > переменная "Стр" после первого нахождения должна принять конкретное значение. далее идет Стр=Стр+1 и должно искать уже по конкретному значению строки. таблицы отсортированы
Гость
14 - 13.03.2013 - 18:54
13-Buhta > не должно, если указан номер строки конкретный, тогда обнуляй переменную с именем колонки и проверяй её. а если имя колонки указано, то будет искаться первая строка ТЗ с искомым значением в указанной колонке.
Гость
15 - 13.03.2013 - 18:55
почему у меня выдает тупо
ТабДанных.НайтиЗначение(Сотрудник,20,"Сотрудник") =1
а после перехода к 20-й строке ТабДанных.Сотрудник<>Сотрудник?
Гость
16 - 13.03.2013 - 18:57
"<Строка> - идентификатор переменной, куда возвращается номер найденной строки. Если при вызове метода передать в этот параметр номер строки, то поиск будет осуществляться только по указанной строке." я что-то не так читаю?
Гость
17 - 13.03.2013 - 18:58
чему равен номер строки после того как = 1?
Гость
18 - 13.03.2013 - 19:02
17-Зелёный тролль >тот, который Стр? с Стр все в порядке
Гость
19 - 13.03.2013 - 19:12
Сортировка
Гость
20 - 13.03.2013 - 19:30
Пока ТабДанных.НайтиЗначение(Сотрудник,Стр,"Сотрудник") =1 цикл

Если (Стр+1)<=ТабПринятыхДанных.КоличествоСтрок() тогда
Стр=Стр+1;
Иначе
Прервать;
КонецЕсли;


с меня пиво
Гость
21 - 13.03.2013 - 19:33
19-Helen1986 > на 25 релизе работает
Гость
22 - 13.03.2013 - 19:52
20-Зелёный тролль > ерунда. не исправила при копировании. читай ТабДанных. Стр честно увеличивается. и ситуация (15) никуда не девается...
19-Helen1986 > куда?
Гость
23 - 13.03.2013 - 20:01
а на 27? что-то у мну кажись 25-го уже не найдется... если только однопользовательский. сейчас поищу... хотя мну воткнуть его только в старый комп можно...
Гость
24 - 13.03.2013 - 20:05
мда, нашла аж 20-й:)
Гость
25 - 13.03.2013 - 20:10
19-Helen1986 >22-Buhta > гыы. работает только если отсортирована ТЗ по колонке.
с меня два пива походу.
Гость
26 - 13.03.2013 - 20:11
Перем тз;

//*******************************************
Процедура Сформировать()
зн = 2;
Стр = "";
Пока тз.НайтиЗначение(зн,стр,"Зн") = 1 Цикл
тз.получитьстрокупономеру(стр);
Сообщить("Стр = " + Стр + " зн = " + тз.зн + " номерстроки = " + тз.НомерСтроки);
стр = стр + 1;

КонецЦикла;

КонецПроцедуры
//*******************************************
Процедура ПриОТкрытии()
тз = СоздатьОбъект("ТаблицаЗначений");
тз.НоваяКОлонка("Зн");
тз.НоваяКОлонка("Зн");

тз.новаяСтрока();
тз.зн = 1;

тз.новаяСтрока();
тз.зн = 2;

тз.новаяСтрока();
тз.зн = 1;

тз.новаяСтрока();
тз.зн = 2;

тз.новаяСтрока();
тз.зн = 2;
КонецПроцедуры

Стр = 2 зн = 2 номерстроки = 2
Гость
27 - 13.03.2013 - 20:12
что в общем то логично
Гость
28 - 13.03.2013 - 20:19
25-Зелёный тролль >
ТабДанных.Свернуть("Сотрудник,ОтчетныйПериод","");
ТабДанных.Сортировать("Сотрудник,ОтчетныйПериод") - это не? не подходит?
Гость
29 - 13.03.2013 - 20:31
28-Buhta > значит аура у тебя не та, тренируй ауру. я вот как клиентам захожу так у них сразу всё работать начинает, даже ещё и к компу подойти не успеваю.
Гость
30 - 14.03.2013 - 08:37
Ну не знаю, что у меня с аурой... ну да ладно, есть и обходные пути. а нет ли какого-нить метода, может недокументированного, чтоб соответствие по нескольким колонкам искать? или только через "Ключ"?
ЗЫ: это вообще все к тому, что 1С-ка неправильно понимает многочисленные корректировки данных ПФ по одному и тому-же сотруднику за один и тот же период, т.к. глПереписатьИзТаблицыВТаблицу тупо дополняет таблицу с корректировками...
31 - 14.03.2013 - 08:55
Все корректировки делаю только в специализированных прогах ПФР. А из 1Ски что выгрузилось - то и выгрузилось, сырец, заготовка.
Гость
32 - 14.03.2013 - 09:07
31-Ткачик > да в принципе этим можно пользоваться:) если корректировки не накладываются, то все распределяется вполне прилично. последний год по всем клиентам пользують только типовыми механизмами и никаких проблем не возникало. но вот тут сильно мощщные корректировщики попались:) корректируют и корректируют - не остановить:) у ПФ крыша аж поехала и программа повисла - у них тоже многочисленные корректировки не воспринимаются:) вот и решила проверочку написать и посмотреть куда и как ложится и что с этим теперь делать...
Гость
33 - 14.03.2013 - 09:15
30-Buhta > Если хочешь иметь временную таблицу с полным функционалом по выборке, то придется отказаться от ТЗ, и применить "настоящий" формат временной таблицы. Для скуля, естественно, родные временные таблицы, для дбф-ной базы - дбф, само собой. И здесь можешь насладится всей прелестью составных индексов. Нескольких даже.
Можно даже не цеплять драйверы фокспро: встроенный функционал работы с дбф по выборке и сортировке шире, чем с ТЗ изначально.
P.S. Несложный фокус поможет загнать в поле дбф даже id агрегатного объекта (чтоб легко было достать стандартными способами).
Гость
34 - 14.03.2013 - 09:17
+33 дбф быстрее тз в разы.
Гость
35 - 14.03.2013 - 09:24
33-VZ > да ладно, мне уж не настолько скучно:)))
ЗЫ: наверно пока переписывать механизм заполнения таблицы принятых данных не имеет смысла. но пред. корректировки (или строки с корректируемыми сотрами) из загруженных данных необходимо удалять...
Гость
36 - 14.03.2013 - 09:26
+ а насчет сабжа - я так и не поняла, почему метод не отрабатывается:( багофича 27 релиза или все-таки аура?
37 - 14.03.2013 - 11:26
почему стр = ""?
Должно быть стр = 0
38 - 14.03.2013 - 11:27
И почему упорно игнорируется вопрос типа (4)?
Гость
39 - 14.03.2013 - 11:43
37-victuan > так тоже пробовала - не помогает. Стр после поиска так и остается, как и должно быть, т.е. напр первый раз нашло в Стр=5, потом Стр=Стр+1
ТабДанных.НайтиЗначение(Сотрудник,Стр,"Сотрудник") =1
Стр=6 и т.п.


К списку вопросов






Copyright ©, Все права защищены