Имя: Пароль:
1C
1C 7.7
v7: Не могу понять НайтиДокумент
0 1Сергей
 
13.07.11
10:24
Иногда работает, иногда нет:

Док=СоздатьОбъект("Документ");
Док.НайтиДокумент(...);

сейчас пишет
Док.НайтиДокумент(СписокСуществующийДокументов.ПолучитьЗначение(Идн));
{Обработка.ПереносДокументовИзТиС.Форма.Модуль(682)}: Недопустимая операция
1 ДенисЧ
 
13.07.11
10:24
Сообщить(СписокСуществующийДокументов.ПолучитьЗначение(Идн));
?
2 Ms Test
 
13.07.11
10:25
а что внутри НайтиДокумент()?
3 Ёпрст
 
13.07.11
10:25
(1) "Реализация"
4 ДенисЧ
 
13.07.11
10:26
(3) Раздуваешь огонь :-)
5 1Сергей
 
13.07.11
10:27
(1) сек. обработка долго делается
6 1Сергей
 
13.07.11
10:29
Заполняется так:
   СписокСуществующийДокументов=СоздатьОбъект("СписокЗначений");
   Док.ВыбратьДокументы(НачДата,КонДата);
   Пока Док.ПолучитьДокумент()=1 Цикл
       Если СписокВидовДокументовТут.НайтиЗначение(Док.Вид())=0 Тогда
           Продолжить;
       КонецЕсли;
       Если (Док.Фирма = Фирма) И (Док.Проведен()=1) Тогда
           СписокСуществующийДокументов.ДобавитьЗначение(Док.ТекущийДокумент());
       КонецЕсли;
   КонецЦикла;
7 1Сергей
 
13.07.11
10:32
(1)  вроде нормальная ссылка на документ
Производство 4 (31.01.07)
8 1Сергей
 
13.07.11
10:33
Если
Док=СоздатьОбъект("Документ.Производство");
то работает нормально. А так:
Док=СоздатьОбъект("Документ");
ошибка
9 Ёпрст
 
13.07.11
10:34
(7) переменную Док поди где-то переопределил на документ с типом, а не просто Документ
Или есть такой реквизит формы.
10 Рэйв
 
13.07.11
10:35
(0)Если инд выходит за размер списка, то ругаться не будет, но и вернет фиг с маслом, по которому естессно и получишь ругань как в сабже
11 1Сергей
 
13.07.11
10:35
(9) блин, точно. переопределил.
Сорри за то, что потратили время :)
12 Ёпрст
 
13.07.11
10:36
(10) еще как будет - "индекс выходит за размеры списка"
13 Рэйв
 
13.07.11
10:37
(12)В табло проверил, просто пусто, ошибкой не ругается
14 1Сергей
 
13.07.11
10:40
(13) врёшь
15 Рэйв
 
13.07.11
10:41
+(13)ТипЗначенияСтр() дает  ""
16 Рэйв
 
13.07.11
10:46
17 Рэйв
 
13.07.11
10:50
(14)Это на массив бы оно ругнулось на индекс.
18 andrewks
 
13.07.11
10:51
(16) а ч/з Сообщить()? :)
19 Рэйв
 
13.07.11
10:54
(18)Ругнулся, но тем не менее вывел полученную пустую строку:)
20 Ёпрст
 
13.07.11
10:54
(16) враньё!!!!!!!!!!!!!!!
Процедура Сформировать()
   СЗ = СоздатьОбъект("СписокЗначений");
   СЗ.ДобавитьЗначение(1);
   Сообщить(СЗ.ПолучитьЗначение(2));

КонецПроцедуры


Сообщить(СЗ.ПолучитьЗначение(2));
{_СЗ.ERT(5)}: Индекс не входит в границы списка значений.
21 andrewks
 
13.07.11
10:54
(19) вот!
22 Рэйв
 
13.07.11
10:55
(20)Ну ты же не хочешь сказать, что (16) я в фотошопе рисовал?:))

Видимо это фича отладчика:)
23 Ёпрст
 
13.07.11
10:56
(22) жуколов еще и не то умеет, а ошибка есть была и будет.
24 Рэйв
 
13.07.11
10:56
(23)Да, но не критическая тем не менее.програма продолжает отрабатывать.Просто ставят в извесность:)
25 andrewks
 
13.07.11
10:58
(24) нифига она не продолжает отрабатывать
26 Ёпрст
 
13.07.11
10:58
(24) еще раз - врешь. Это критическая ошибка и код прекратит своё выполнение.
27 Рэйв
 
13.07.11
10:58
(25)Проверь. Сообщить у меня вывело вполне нормально и открыло форму
28 andrewks
 
13.07.11
10:58
(26) возможно, он имеет в виду в отладчике?
29 Рэйв
 
13.07.11
10:59
(25)Сообщить в оттладчике?:))

может вам обработку выложить?:)  Или сами проверите?
30 andrewks
 
13.07.11
11:01
(29) я и так вижу твой код, просто у тебя эта строчка - последняя в обработчике открытия. ты после неё что-нить поставь, и увидишь, что выполнение кода прекращается
31 Ёпрст
 
13.07.11
11:01
(27) не тупи да ?
Где у тебя в коде строчка сп.ПолучитьЗначение(3) перед ОткрытьФорму ?

То что ты там в табло пишешь - никакого отношения к выполняемому коду не имеет, если что..
Можешь там что угодно писать.
В Предприятии - в том числе.
32 Рэйв
 
13.07.11
11:01
(30)(31) Сообщить идет ПОСЛЕ получения зн

http://s55.radikal.ru/i148/1107/94/1a5ba5c2e97c.jpg
33 Рэйв
 
13.07.11
11:02
форма тоже открывается ПОСЛЕ
34 Ёпрст
 
13.07.11
11:03
(32) может быть, надо поглядеть.
:)
35 andrewks
 
13.07.11
11:03
() етить... а что ей помешает открыться-то? тебе про прекращение выполнения кода говорят
36 andrewks
 
13.07.11
11:03
(35) к (33)
37 Рэйв
 
13.07.11
11:04
(34)
Код:
Процедура ПриОткрытии()

   
   сп=СоздатьОбъект("СписокЗначений");
   сп.ДобавитьЗначение("1");
   сп.ДобавитьЗначение("2 ");
   Зн=сп.ПолучитьЗначение(3);
   Сообщить("Вот вам : '"+Зн+"'")

КонецПроцедуры  

:-)
38 Рэйв
 
13.07.11
11:04
(35)Если  бы прекратилось выполнение кода, Сообщить бы не отработало
39 andrewks
 
13.07.11
11:05
(38) погодь, щаз затестю
40 Ёпрст
 
13.07.11
11:07
(37) работает, видать работает так же как и ошибки в шаблоне или в формуле ячеек таблицы - ошибки показывает, но код не прерывает.
41 andrewks
 
13.07.11
11:08
(38) твоя взяла, не останавливается.
42 Рэйв
 
13.07.11
11:09
(40)Причем значение то какое то все равно в зн загоняет.
   Наверное обработка ошибки в самом методе .ПолучитьЗначение() и в случае выхода за размер возвращает пустую строку
43 Рэйв
 
13.07.11
11:09
(41):-)
44 andrewks
 
13.07.11
11:10
(42) видимо, отрабатывает, как в Получить(), только там сообщения не возникает вообще, если нет такого значения
45 trdm
 
13.07.11
11:16
(0) пе
вДокИзСписка = СписокСуществующийДокументов.ПолучитьЗначение(Идн)
Док=СоздатьОбъект("Документ."+вДокИзСписка.Вид());
Док.НайтиДокумент(вДокИзСписка);
46 trdm
 
13.07.11
11:18
+(45) Док - должен быть именно того вида, документ которого ищется тут Док.НайтиДокумент(вДокИзСписка);
47 ДенисЧ
 
13.07.11
11:18
(46) не обязательно
48 1Сергей
 
13.07.11
12:41
(47)+1
Закон Брукера: Даже маленькая практика стоит большой теории.