![]() |
![]() |
|
Метод: найти документ по номеру | ☑ | ||
---|---|---|---|---|
0
Табуретка
18.11.06
✎
10:19
|
Подскажите в чем ошибка... Перепробовал всяко, заездил уже все дебагером, перерыл кучу доков... код - проще некуда, но результата не дает!!! На форме два числовых поля НомерНач и НомерКон замысел преребрать доки по заданному диапазону номеров, в базе они есть но процедура их не находит :(
Процедура Сформировать() Док=СоздатьОбъект("Документ.Реализация"); Док.ВыбратьДокументы(); Для Номер=НомерНач ПО НомерКон Цикл Если Док.НайтиПоНомеру(Строка(Номер))=1 Тогда //тут пробовал и просто Номер и СокрЛП(Номер) и Число(Номер) - никак :( Предупреждение("Найден: "+Док.ТекущийДокумент(),1); КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
1
ТелепатБот
гуру
18.11.06
✎
10:19
|
||||
2
Табуретка
18.11.06
✎
10:27
|
хехе, порылся в базе, нашел свойже код давнишний...
Док=СоздатьОбъект("Документ.ТС_Квитанция"); Док.ВыбратьДокументы(); ... Если Док.НайтиПоНомеру(Строки.ПолучитьЗначение(Н+1))=1 тогда ТЗ.Док = Док.ТекущийДокумент(); ТЗ.Номер = Док.НомерДок; КонецЕсли; тут работает, а тут(0) - нет... в чём проблема, ума не приложу... |
|||
3
FreeFin
18.11.06
✎
10:38
|
Код то рабочий, у меня находит.)
Номера доков не содержат префиксов и числовые? НайтиПоНомеру = найти полное/точное соответствие, если номер типа РА-00001 то на 1 не откликнется. |
|||
4
Табуретка
18.11.06
✎
10:41
|
нет, без всяких префиксов... обычный числовой номер...
|
|||
5
Залетный
18.11.06
✎
10:43
|
Длину номера полностью указываешь (с учетом нолей)?
|
|||
6
Табуретка
18.11.06
✎
10:45
|
так номерже не строковой а числовой... все ноли по левую сторону отпадают...
|
|||
7
Smitt
18.11.06
✎
10:45
|
Попробуй
Док.НайтиПоНомеру(Строка(Номер),ТекущаяДата()); А вообще, сделай следующее: 1) Посмотри в конфигураторе скажи нам тип номера, длину номера. 2) Покажи пример номера какого нить документа |
|||
8
Табуретка
18.11.06
✎
10:48
|
(5)хотя и это уже тоже предвидел... забивал перед номером в строку нули до 6 знаков - результата 0
(7) пробовал и так Док.НайтиПоНомеру(Строка(Номер),Дата(0)); в ЖКК написано... и ваш метод... результата 0 Тип - числовой 6 знаков пример: Реализация 2792 (03.10.06) |
|||
9
Табуретка
18.11.06
✎
10:52
|
переписал всю обработку заново с нуля на три раза... (бывало, иногда, что код нехотел работать, может глюк, после того как создавал обработку заново и вбивал теже самые строки, все шло по маслу, но это в других обработках)
|
|||
10
Smitt
18.11.06
✎
10:56
|
На кой там "Док.ВыбратьДокументы();" ? Убирай...
И давай так попробуем: Добавь на форму реквизит ВыбДок типа документ.реализация дальше пишем: Процедура Сформировать() Док=СоздатьОбъект("Документ.Реализация"); Для Номер=НомерНач ПО НомерКон Цикл Если Номер = ВыбДок.НомерДок тогда Сообщить("Номер формируется правильно"); КонецЕсли; КонецЦикла; КонецПроцедуры Выбираем в реквизит "выбДок" самый первый по порядку документ, запускаем, смотрим, выполнилось ли условие. Если нет, тогда тормозим в отладчике и ищем, чем переменная "номер" отличается от "ВыбДок.НомерДок " |
|||
11
Табуретка
18.11.06
✎
11:05
|
(10)ха!!! Есть контакт :)
дебагером вынул вот что: ВыбДок.НомерДок = " 2792" какогото демона он вместо нолей ставит пробелы... |
|||
12
Скользящий
18.11.06
✎
11:06
|
СокрЛП()
|
|||
13
Лошадка в пальто
18.11.06
✎
11:07
|
СокрЛВП()
|
|||
14
Скользящий
18.11.06
✎
11:08
|
(13) Жжошь. А эта команда что обрезает? Старые баяны? :-)
|
|||
15
Табуретка
18.11.06
✎
11:10
|
не совсем понял, как мне к Док.НайтиПоНомеру прикрутить СокрЛП???
сам Номер у меня и так урезан до некуда... |
|||
16
Скользящий
18.11.06
✎
11:14
|
Включи крышу.
Процедура Сформировать() Док=СоздатьОбъект("Документ.Реализация"); Для Номер=НомерНач ПО НомерКон Цикл Если СокрЛП(Номер) = СокрЛП(ВыбДок.НомерДок) тогда Сообщить("Номер формируется правильно"); КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
17
Табуретка
18.11.06
✎
11:17
|
(16)Это был тока пример для того чтобы выявить в чем причина не состыковки номеров... куда прикручивается СокрЛП в (0)?
Если Док.НайтиПоНомеру(Строка(Номер))=1 Тогда //тут пробовал и просто Номер и СокрЛП(Номер) и Число(Номер) - никак :( |
|||
18
Smitt
18.11.06
✎
11:18
|
думается мне, что номер у тебя ниразу не числовой... ща я у себя проверю, а то прям сомнения берут...
|
|||
19
Табуретка
18.11.06
✎
11:19
|
либо загонять всю нумерацию доков в таблицу и перебирать там с обрезанием пробелов... либо одно из двух...
(18) да проверь... |
|||
20
Табуретка
18.11.06
✎
11:20
|
при строковом номере - номер отображается(как и записывается) вот таким образом "002792"
числовой - " 2792" |
|||
21
Табуретка
18.11.06
✎
11:29
|
(18)Ну так что там оказалось, числовой или строковой???
|
|||
22
Smitt
18.11.06
✎
11:32
|
Всё верно, при обращении к "НомерДок" возвращатся, действительно, строка.
Однако, по номеру обязан искать, именно по числовому значению Попробуем написать "в трупую" : Док=СоздатьОбъект("Документ.Реализация"); Сообщить(Док.НайтиПоНомеру(2792)); |
|||
23
Smitt
18.11.06
✎
11:33
|
И в твоём коде должно работать
Док.НайтиПоНомеру(Номер); без вляких СокрЛВП() и т.п. |
|||
24
Табуретка
18.11.06
✎
11:37
|
(22)непоможет... уже пробовал, результат 0
Выйдет тока вот так Док.НайтиПоНомеру(" 2792") |
|||
25
Smitt
18.11.06
✎
11:40
|
Док.НайтиПоНомеру(" 2792") - так находит?
|
|||
26
Табуретка
18.11.06
✎
11:41
|
У самого номера документа стоит два пробела перед числом,
сгенеренный же Номер получается без пробелов и соответственно не совпадает с номерами доков... пример: Док.НайтиПоНомеру(Номер); не проходит... работает вот так: Док.НайтиПоНомеру(" "+Номер); но по ламерски ето както пробелы приплюсовывать... да и работать будет тока с четырехзначным номером... переводить нумерацию в строку уже поздно... до конца года ещё полтара месяца а жить и работать както надо... :) |
|||
27
Табуретка
18.11.06
✎
11:42
|
(25) да находит...
|
|||
28
Smitt
18.11.06
✎
11:44
|
Странно, честно говоря. Специально попробовал на своей конфе, благополучно находит числовые номера по, собственно, числу...
Ну пиши тогда с пробелами: НомерДляПоиска = Прав(" " + строка(Номер),6); //там 5 пробелов Док.НайтиПоНомеру(НомерДляПоиска); |
|||
29
Smitt
18.11.06
✎
11:46
|
+28 работать будет не только с четырехзначным номером, но с любым количеством знаков (в пределах длины номера, ес-сно :)))
|
|||
30
Табуретка
18.11.06
✎
11:47
|
(28) хехе, тоже вариант... :)
лана всем спасибо, главно хоть нашли в чем ошибка. |
|||
31
Smitt
18.11.06
✎
11:49
|
(30) не-а, ошибку не нашли :) Нашли - как работает :)
|
|||
32
Скользящий
18.11.06
✎
11:51
|
(30) Тупой вариант. Самое оптимальное, алгоритм выстроить так, чтобы при сравнении с помощью СокрЛП отсекать пробелы не хрен, ИМХО.
|
|||
33
Табуретка
18.11.06
✎
11:53
|
(32)Кто запрещает выстроить такой алгоритм в моем примере?
Буду тока рад примеру!!! |
|||
34
Скользящий
18.11.06
✎
11:54
|
(33) Тебе еще и пример подавай? :-)
|
|||
35
Табуретка
18.11.06
✎
11:56
|
(34)без обид, можеш даже не выставлять его на форум, чиста так для себя, напиши лучше...
|
|||
36
Табуретка
18.11.06
✎
11:57
|
Уверен на 90% что без выгрузки всего списка доков в ТЗ или СЗ не обойдется...
|
|||
37
Табуретка
18.11.06
✎
11:58
|
опа, платформа скопытилась... :(
|
|||
38
Smitt
18.11.06
✎
12:05
|
(32) ты не фтеме :)
Автор не делает сравнение. Автор делает "найтиПоНомеру()" А номер, который "найти" имеет ведущие пробелы. Только вот откуда - не понятно. Перечитай посты с начала. |
|||
39
Хряк
18.11.06
✎
12:05
|
Правильный ответ был в 7.
С тех пор так и не увидел Док.НайтиПоНомеру(НомерДок, ДатаДок); Например из 8 Док.НайтиПоНомеру(2792, НачГода("03.10.06")); Если периодичность номера в конфигураторе год - дата любое число из етого года. |
|||
40
Smitt
18.11.06
✎
12:05
|
(37) насмерть?
|
|||
41
Smitt
18.11.06
✎
12:08
|
(39) не, дата не при чем. Не понятно, почему ЧИСЛОВОЙ номер находится по строке:
Док.НайтиПоНомеру(" 2792") = 1! Что-то не так... |
|||
42
Скользящий
18.11.06
✎
12:09
|
(38) Ну, тогда я бы просто перебором загнал бы все доки в ТЗ, и номер бы очистил от пробелов. Это все равно более изящное решение, чем добавлять 5 пробелов.
|
|||
43
Табуретка
18.11.06
✎
12:10
|
(40) почти, отладчик свернулся в процессе тока сидит и весит напроч...
(42) хехе см (19,36) %))) |
|||
44
Табуретка
18.11.06
✎
12:12
|
(+43) это хорошо когда их загод не переваливает больше 3-5 тыс. а если за тотже год их будет скажем 999'999 Тогда как? тоже через ТЗ?
|
|||
45
Smitt
18.11.06
✎
12:26
|
(42) почему?
Дано: Переменная "Номер", тип "Число" Документы, с номерами вида " " + Номер, общая длина номера - 6 символов. Задача: найти документ Моё решение: Док.НайтиПоНомеру(Прав(" " + строка(Номер),6); ); Напиши элегантнее? |
|||
46
Табуретка
18.11.06
✎
12:31
|
(45)Ээээ... хоть это уже и не поддается моей логике... но вариант
Док.НайтиПоНомеру(Прав(" " + строка(Номер),6)) тоже не проходит... |
|||
47
Табуретка
18.11.06
✎
12:33
|
Я уже совсем ничего не понимаю... только что определили что в номере пробелы, подставили и результата 0!!! :( пойдука я спать...
|
|||
48
Smitt
18.11.06
✎
12:33
|
(47) Как? Тыж говорил, 25,28 работает?
|
|||
49
Smitt
18.11.06
✎
12:34
|
+48 хотя, по логике, если номер числовой, должно работать без пробелов, конечно
|
|||
50
Скользящий
18.11.06
✎
15:05
|
Надо бы сначала разобраться, почему
"Документы, с номерами вида " " + Номер, общая длина номера - 6 символов. " Не должно по идее такого быть вообще, чЁ то автор видно в ГлПрисвоитьНомер намудрил. |
|||
51
Табуретка
18.11.06
✎
19:35
|
(50) Вот это для меня самого загадка - из-за чего номер документа принимает вид как пробелы с числом...
Конфигурация Бух.УСН ред1.3 (7.70.148) Правленная мной неоднократно, ГлПрисвоитьНомер - ненайдена вообче... Документ - Реализация, нумератор не назначен, периодичность в пределах года, автоматическая нумерация, тип числовой, длина 6 знаков, контроль уникальности... да что я говорю... возьмите любой документ с такимиже параметрами номера и посмотрите повнимательней как он будет отображатся на самом деле... |
|||
52
Таня
18.11.06
✎
19:43
|
праблему то решили нет?
|
|||
53
Табуретка
18.11.06
✎
19:51
|
нет... точнее да... точнее незнаю я...
вобчемто нашли изза чего непрокатывало то что было задумано: Док.НайтиПоНомеру(Строка(Номер)); где Номер - число сгенеренное в цикле, а номер документа оказывается содержит пробелы перед числом, отсюда несостыковка искомова :( вариант решения проблемы найден: загнать все номера документов в ТЗ либо в СЗ и перебирать их там СокрЛП(ТЗ.Ном), но както не нравится мне это... не по кулхацкерски чтоли... :) |
|||
54
Скользящий
18.11.06
✎
19:55
|
(53) От решения требуется только чтобы оно работало. :-) Во-вторых, если сделать запрос по справочнику, а потом выгрузить в ТЗ, получится вполне даже шустро.
|
|||
55
Табуретка
18.11.06
✎
19:57
|
(54)По какому справочнику? у меня доки!
|
|||
56
Таня
18.11.06
✎
20:04
|
попробуй так:
ИначеЕсли (ПустоеЗначение(Начало)=0) и (ПустоеЗначение(Конец)=0) Тогда Док.ВыбратьДокументы(); Пока Док.ПолучитьДокумент()=1 Цикл Если (Число(Док.НомерДок)>=Число(Начало)) и (Число(Док.НомерДок)<=Число(Конец)) Тогда Действие(Док.ТекущийДокумент()); КонецЕсли; КонецЦикла; КонецЕсли; |
|||
57
Табуретка
18.11.06
✎
20:10
|
(56) Опять все доки в цикле перелопачивать... :-/
Всем спасибо! Просьба сильно не заморачиваться, попытаюсь сделать сам... |
|||
58
Скользящий
18.11.06
✎
21:21
|
(55) Бля, ну доки. Оговорился я. Проблема вселенского масштаба, млиню
|
|||
59
Табуретка
18.11.06
✎
22:36
|
(58) Это как закон подлости: сам запрос наваял за полчаса, все работает, все класс, а понадобилось ещё добавить выборку доков в диапазоне и млин вот такая жопа с номерами....
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |