Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   7.7 Таблица значений. И в чем я туплю? (http://forums.kuban.ru/f1040/7_7_tablica_znachenij_i_v_chem_ya_tuplyu-3863001.html)

Buhta 13.03.2013 16:43

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

Маус 13.03.2013 17:23

поделись кодом

Чучундер 13.03.2013 17:26

ТЗ.НайтиЗначение(ЗначениеЧто,поз,"ИдентификаторКолонки")
.
если поз = 0 или опущен - ищется по всей ТЗ в указанной колонке.

Buhta 13.03.2013 17:29

1-Маус > чуть попозжее, отойти надо
2-Чучундер > я в отладчике туда даже конкретную цифру ставлю, а он все-равно =1 выдает:(

real 13.03.2013 17:32

А значение поз после поиска какое?

Чучундер 13.03.2013 17:33

(3) чудес не бывает.. ;-) ты же знаешь...
.
давай на почту ид и пароль для тима, посмотрим тугеза ;-)

real 13.03.2013 17:33

В смысле значение переменной куда возвращается номер строки?

p etrovich 13.03.2013 17:35

так делаешь?
ТЗ = СоздатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("Сотрудник", "Справочник.Сотрудники");
стр=0;
Если ТЗ.НайтиЗначение(РеквизитНаФормеСТипомЗначенияСправочникСотрудники, стр, "Сотрудник")=1 Тогда
Сообщить("Ура");
КонецЕсли;

qweqwe123123 13.03.2013 17:52

конкретный номер строки и конкретная колонка... как бы "чо искать та?". если координаты известны, просто получи значение.
PS в переменной номера строки после поиска номер не той строки, которая была на входе. готов поспорить на пиво (не проверял, так что по честному).

Buhta 13.03.2013 18:42

Вот типа такой код:
ТабДанных=ПолучитьТаблицуДанных();
ТабПериодов=ПолучитьТаблицуПериодов();
Сотр=СоздатьОбъект("Справочник.Сотрудники");
Сотр.ВыбратьЭлементы();
Пока Сотр.ПолучитьЭлемент()=1 цикл
Сотрудник=Сотр.ТекущийЭлемент();
Ном=Ном+1;
ТабУ.ВывестиСекцию("Строка|Основа");

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

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

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

КонецЦикла;

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

после того, как находит первого сотра до последней строки сотрудник уже не меняется, т.е. по внешнему циклц не переходит, хотя ТабДанных.Сотрудник = выдает совсем другого сотра...

qweqwe123123 13.03.2013 18:47

ищется всегда! первое! вхождение. поэтому обычно ТЗ сначала сортируем, а после нахождения первого значения уходим в перебор пока не получим другого сотра

qweqwe123123 13.03.2013 18:48

можно попробовать ещё удалять строку найденную из ТЗ

qweqwe123123 13.03.2013 18:50

и про пиво чот не понял... проспорила?

Buhta 13.03.2013 18:51

10-Зелёный тролль > переменная "Стр" после первого нахождения должна принять конкретное значение. далее идет Стр=Стр+1 и должно искать уже по конкретному значению строки. таблицы отсортированы

qweqwe123123 13.03.2013 18:54

13-Buhta > не должно, если указан номер строки конкретный, тогда обнуляй переменную с именем колонки и проверяй её. а если имя колонки указано, то будет искаться первая строка ТЗ с искомым значением в указанной колонке.

Buhta 13.03.2013 18:55

почему у меня выдает тупо
ТабДанных.НайтиЗначение(Сотрудник,[b]20[/b],"Сотрудник") [b]=1[/b]
а после перехода к 20-й строке ТабДанных.Сотрудник<>Сотрудник?

Buhta 13.03.2013 18:57

"<Строка> - идентификатор переменной, куда возвращается номер найденной строки. Если при вызове метода передать в этот параметр номер строки, то поиск будет осуществляться только по указанной строке." я что-то не так читаю?

qweqwe123123 13.03.2013 18:58

чему равен номер строки после того как = 1?

Buhta 13.03.2013 19:02

17-Зелёный тролль >тот, который Стр? с Стр все в порядке

Helen1986 13.03.2013 19:12

Сортировка

qweqwe123123 13.03.2013 19:30

[em]Пока [b]ТабДанных[/b].НайтиЗначение(Сотрудник,Стр,"Сотрудник") =1 цикл

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

с меня пиво

qweqwe123123 13.03.2013 19:33

19-Helen1986 > на 25 релизе работает

Buhta 13.03.2013 19:52

20-Зелёный тролль > ерунда. не исправила при копировании. читай [b]ТабДанных[/b]. Стр честно увеличивается. и ситуация (15) никуда не девается...
19-Helen1986 > куда?

Buhta 13.03.2013 20:01

а на 27? что-то у мну кажись 25-го уже не найдется... если только однопользовательский. сейчас поищу... хотя мну воткнуть его только в старый комп можно...

Buhta 13.03.2013 20:05

мда, нашла аж 20-й:)

qweqwe123123 13.03.2013 20:10

19-Helen1986 >22-Buhta > гыы. работает только если отсортирована ТЗ по колонке.
с меня два пива походу.

qweqwe123123 13.03.2013 20:11

Перем тз;

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

КонецЦикла;

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

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

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

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

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

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

Стр = 2 зн = 2 номерстроки = 2

qweqwe123123 13.03.2013 20:12

что в общем то логично

Buhta 13.03.2013 20:19

25-Зелёный тролль >
ТабДанных.Свернуть("Сотрудник,ОтчетныйПериод","");
ТабДанных.Сортировать("Сотрудник,ОтчетныйПериод") - это не? не подходит?

qweqwe123123 13.03.2013 20:31

28-Buhta > значит аура у тебя не та, тренируй ауру. я вот как клиентам захожу так у них сразу всё работать начинает, даже ещё и к компу подойти не успеваю.

Buhta 14.03.2013 08:37

Ну не знаю, что у меня с аурой... ну да ладно, есть и обходные пути. а нет ли какого-нить метода, может недокументированного, чтоб соответствие по нескольким колонкам искать? или только через "Ключ"?
ЗЫ: это вообще все к тому, что 1С-ка неправильно понимает многочисленные корректировки данных ПФ по одному и тому-же сотруднику за один и тот же период, т.к. глПереписатьИзТаблицыВТаблицу тупо дополняет таблицу с корректировками...

Ткачик 14.03.2013 08:55

Все корректировки делаю [b]только[/b] в специализированных прогах ПФР. А из 1Ски что выгрузилось - то и выгрузилось, сырец, заготовка.

Buhta 14.03.2013 09:07

31-Ткачик > да в принципе этим можно пользоваться:) если корректировки не накладываются, то все распределяется вполне прилично. последний год по всем клиентам пользують только типовыми механизмами и никаких проблем не возникало. но вот тут сильно мощщные корректировщики попались:) корректируют и корректируют - не остановить:) у ПФ крыша аж поехала и программа повисла - у них тоже многочисленные корректировки не воспринимаются:) вот и решила проверочку написать и посмотреть куда и как ложится и что с этим теперь делать...

VZ 14.03.2013 09:15

30-Buhta > Если хочешь иметь временную таблицу с полным функционалом по выборке, то придется отказаться от ТЗ, и применить "настоящий" формат временной таблицы. Для скуля, естественно, родные временные таблицы, для дбф-ной базы - дбф, само собой. И здесь можешь насладится всей прелестью составных индексов. Нескольких даже.
Можно даже не цеплять драйверы фокспро: встроенный функционал работы с дбф по выборке и сортировке шире, чем с ТЗ изначально.
P.S. Несложный фокус поможет загнать в поле дбф даже id агрегатного объекта (чтоб легко было достать стандартными способами).

VZ 14.03.2013 09:17

+33 дбф быстрее тз в разы.

Buhta 14.03.2013 09:24

33-VZ > да ладно, мне уж не настолько скучно:)))
ЗЫ: наверно пока переписывать механизм заполнения таблицы принятых данных не имеет смысла. но пред. корректировки (или строки с корректируемыми сотрами) из загруженных данных необходимо удалять...

Buhta 14.03.2013 09:26

+ а насчет сабжа - я так и не поняла, почему метод не отрабатывается:( багофича 27 релиза или все-таки аура?

victuan 14.03.2013 11:26

почему [b]стр = ""[/b]?
Должно быть [b]стр = 0[/b]

victuan 14.03.2013 11:27

И почему упорно игнорируется вопрос типа (4)?

Buhta 14.03.2013 11:43

37-victuan > так тоже пробовала - не помогает. Стр после поиска так и остается, как и должно быть, т.е. напр первый раз нашло в Стр=5, потом Стр=Стр+1
ТабДанных.НайтиЗначение(Сотрудник,Стр,"Сотрудник") =1
Стр=6 и т.п.


Текущее время: 17:06. Часовой пояс GMT +3.