Имя: Пароль:
1C
1С v8
Ошибка кода. Где?
,
0 Tanis
 
18.04.13
12:27
ИначеЕсли СокрЛП(СтрДерева.ТЧПриемник) = "Табличная часть" Тогда
               Если НЕ ПустаяСтрока(СтрДерева.ИдИсточник) Тогда
                   для Каждого стрТчИсточник из ДокИсточник[СтрДерева.ИдИсточник] Цикл //цикл по строкам таб части
                       СтрТчПриемник = ДокПриемник[СтрДерева.ИдПриемник].Добавить();
                       
                       для Каждого стрТч из СтрДерева.Строки Цикл  //цикл по метаданным строки
                           Если стрТч.ВведеноЗначение Тогда
                               СтрТчПриемник[стрТч.ИдПриемник] = стрТч.Источник;
                           ИначеЕсли не ПустаяСтрока(стрТч.формула) Тогда
                               Попытка
                                   ОбъектИсточник = ДокИсточник;
                                   ДанныеСтроки = стрТчИсточник;
                                   Результат = "";
                                   Выполнить(стрТч.формула);
                                    СтрТчПриемник[стрТч.ИдПриемник] = Результат;
                                   //ДокПриемник[стрТч.ИдПриемник] = Результат;
                               Исключение
                                   сообщить("Не удалось выполнить формулу для реквизита :"+СтрДерева.ИдПриемник+" табличной части:"+СтрДерева.ТЧПриемник);
                               КонецПопытки;    
                           Иначе    
                               Если НЕ ПустаяСтрока(стрТч.ИдИсточник) Тогда
                                   СтрТчПриемник[стрТч.ИдПриемник] = стрТчИсточник[стрТч.ИдИсточник];
                               КонецЕсли;    
                           КонецЕсли;    
                       КонецЦикла;    //цикл по метаданным строки


Где здесь ошибка?
1 salvator
 
18.04.13
12:28
Ищи сам
2 ДенисЧ
 
18.04.13
12:28
в ДНК?
3 YF
 
18.04.13
12:28
Пожалуй соглашусь с (2)
4 Wobland
 
18.04.13
12:28
ОбъектИсточник = ДокИсточник;
угадал?
5 palpetrovich
 
18.04.13
12:28
это тест?
6 YF
 
18.04.13
12:29
(4) А не факт, может так и задумано
7 Wobland
 
18.04.13
12:29
(6) может. подождём, когда автор сообщит правильный ответ
8 Tanis
 
18.04.13
12:32
Автор был в 2011г, а мне надо заставить это работать...
9 YF
 
18.04.13
12:32
(8) Гениально
10 SanGvin
 
18.04.13
12:32
вырвано из контекста...  что за ошибка возникает?
11 mikecool
 
18.04.13
12:33
(8) так с 2011 работало - не трожь!
12 Wobland
 
18.04.13
12:33
(8) а что ты для этого сделал?
13 SanGvin
 
18.04.13
12:34
скорее всего  "Выполнить(стрТч.формула);" вызывает бредовый код из стрТч.формула
14 Tanis
 
18.04.13
12:37
(12) В некоторых местах исправил СтрДерево на СтрТч, а то вообще формулу не видел.

(13) Может и бредовый, но какой тогда будет не бредовый?

(10) Ошибка, что не заполняет.

Формулу пишу уже вообще напрямую: Результат=Справочники.Номенклатура.НайтиПоНаименованию(Номенклатура);
15 Tanis
 
18.04.13
12:37
(11) работало ли тогда не знаю.
16 zak555
 
18.04.13
12:38
перепиши это -- сделай по-нормальному
17 Wobland
 
18.04.13
12:38
(14) то есть, даже текст ошибки не анализировал?
18 Tanis
 
18.04.13
12:38
(12) убил день и ночь... около 150 проб, но не удачных. :-(
19 Tanis
 
18.04.13
12:39
Так там ошибка: сообщить("Не удалось выполнить формулу для реквизита :"+СтрДерева.ИдПриемник+" табличной части:"+СтрДерева.ТЧПриемник);

А почему формулу не считает, не знаю.
20 Tanis
 
18.04.13
12:40
формулу писал во внешней обработке, все работает.
21 1Сергей
 
18.04.13
12:40
(18) тяжело быть тобой
22 samozvanec
 
18.04.13
12:40
(19) Сообщить(ПодробноеОписаниеОшибки());
23 Wobland
 
18.04.13
12:40
(19) это из-за попытки. можно выключить попытку и посмотреть, а можно в исключении говорить описание ошибки
24 SanGvin
 
18.04.13
12:42
(10) сделай как в (22) написано и скопипасть результат сюда. Твое "Ошибка что не заполняет" ни о чем не говорит, надо текст проанализировать.
25 Wobland
 
18.04.13
12:43
(24) да там уже всё ясно будет, автор вроде не мистодятел ;)
26 Tanis
 
18.04.13
12:49
Поле объекта не обнаружено (Номенклатура)


Где он его не обнаружевает...
По идеи, должно в Приемник вставляться найденное значение из справочника...
27 Tanis
 
18.04.13
12:51
Для загрузки из таб дока, все нормально проходит через вычислять. Здесь же не хочет....
28 1Сергей
 
18.04.13
12:52
(27) ну, а в момент ошибки что в стрТч.формула ?
29 palpetrovich
 
18.04.13
12:53
(26) а глянуть в отладчике не судьба?, должно быть что-то типа
НайтиПоНаименованию("Болт с левой резьбой");
30 Tanis
 
18.04.13
12:55
Выполнить (Результат=Справочники.Номенклатура.НайтиПоНаименованию(Номенклатура);)

СтрТчПриемник[стрТч.ИдПриемник] = Справочники.Номенклатура.НайтиПоНаименованию(Номенклатура);

Вот такая ситуация в отладчике
31 Wobland
 
18.04.13
12:55
(30) выполнить строку принимает
32 cincout
 
18.04.13
12:55
(0) верни всё как было
33 palpetrovich
 
18.04.13
12:56
(30) а в "Номенклатура" что? ...может там ссылка
34 Tanis
 
18.04.13
12:58
(31) да, строка.

(33) номенклатура = наименование (то которое есть и ищется поиском)
35 Tanis
 
18.04.13
12:59
Если оставить только
Справочники.Номенклатура.НайтиПоНаименованию(Номенклатура);

То ошибка такая
Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(1,1)}: Неопознанный оператор
36 palpetrovich
 
18.04.13
13:00
(35) а тупо Выполнить(ТутСтрокаИзОтладчика) - получается?
37 Tanis
 
18.04.13
13:23
Если вот так:
Выполнить( Строка(Справочники.Номенклатура.НайтиПоНаименованию("Номенклатура")))

То при выделении полностью, и вычислить выражение, то пишет ожидается выражение.

Если выделить без выполнить, и вычислить выражение, то выводит Номеклатура тип строка
38 samozvanec
 
18.04.13
13:31
(37) про такое Выполнить очень хочется что-то сказать, но слово никак не подберу... ты серьезно?
39 Tanis
 
18.04.13
13:31
Эта обработка была под 8.1, сконвертировал под 8.2, без ошибок.

Может весь код выложить, если он что-то даст?
40 samozvanec
 
18.04.13
13:31
остановку по ошибке пробуй, посмотришь, что там
41 Лефмихалыч
 
18.04.13
13:32
(39)  NNOOOOOOOOO
42 Tanis
 
18.04.13
13:33
(38) Тогда скажи как надо?

Я уже не знаю что там еще и где написать...

Говорю, при загрузке из таб дока, все что писал (формулы) все проходили. И объекты новые, и данные из строк в реквизиты, и поиск и подстановка.

Здесь же что-то формулу не получается написать.
43 Tanis
 
18.04.13
13:34
(40) данные из отладчика в (30)
44 Tanis
 
18.04.13
13:38
ДокПриемник[стрТч.ИдПриемник]  Вот это определяется как "Номенклатура" тип строка
45 samozvanec
 
18.04.13
13:40
Выполнить( Строка(Справочники.Номенклатура.НайтиПоНаименованию("Номенклатура")))

вот это - бред голимый. ищешь номенклатуру, которая называется "Номенклатура" и берешь представление. ты наверняка хотел

Выполнить("Справочники.Номенклатура.НайтиПоНаименованию(Номенклатура)");
46 Tanis
 
18.04.13
13:41
Могу скинуть обработку и поковыряете этот ребус
47 samozvanec
 
18.04.13
13:41
и ; там нахер не нужна вроде
48 samozvanec
 
18.04.13
13:42
(46) я сейчас такой ребус ковыряю, хоть самому в окно скинуться
49 mistеr
 
18.04.13
13:47
(46) Давно бы уже автора нашел.
50 Tanis
 
18.04.13
13:47
(45) если Выполнить("Справочники.Номенклатура.НайтиПоНаименованию(Номенклатура)");
то пишет ожидается выражение
51 Tanis
 
18.04.13
13:47
не находится...
52 1Сергей
 
18.04.13
13:51
(50) ну, дык, ссылку на номенклатуру надо ж чему-то присвоить
53 Tanis
 
18.04.13
13:56
(52) И чему?
54 1Сергей
 
18.04.13
13:58
(53) например, переменной Результат
Выполнить("Результат = Справочники.Номенклатура.НайтиПоНаименованию(Номенклатура)");
55 Infsams654
 
18.04.13
14:01
(53) выражение языка 1С в полученном Справочники.Номенклатура.НайтиПоНаименованию(Номенклатура) - это что-то
56 Tanis
 
18.04.13
14:04
Весело....
(54) написал так, и ничего не изменилось
57 Tanis
 
18.04.13
14:04
(55) а как не что-то?
58 Tanis
 
18.04.13
14:06
(55) в (0) кусок кода, вот напиши СтрТч.Формула, чтоб работала?!

Простую без всяких заковырок. Просто найти по наименованию.
59 1Сергей
 
18.04.13
14:07
(58) Всё-таки в переменной номенклатура у тебя что?
60 Tanis
 
18.04.13
14:08
Это я просто написал здесь, а так там наименование написано.
Пусть будет кран. вместо номенклатура
61 palpetrovich
 
18.04.13
14:11
Процедура КнопкаВыполнитьНажатие(Кнопка)
   Перем НайденнаяСсылка;
   Выполнить(СтрокаКода);
   сообщить("НайденнаяСсылка" + НайденнаяСсылка + "  Тип " + ТипЗнч(НайденнаяСсылка));
КонецПроцедуры
НаименованиеНоменклатуры = """Арматура 10  А-3""";   // тут свое наименование
СтрокаКода = "НайденнаяСсылка = Справочники.Номенклатура.НайтиПоНаименованию("+НаименованиеНоменклатуры+");"
62 ЧеловекДуши
 
18.04.13
14:11
Класс... и ни одной попытки отправить автора в отладчик :)
63 samozvanec
 
18.04.13
14:12
(62) он оттуда ни с чем возвратился)
64 1Сергей
 
18.04.13
14:30
у меня вот такой код работает "на ура":

   Результат = "";
   Номенклатура = "Медицинская страховка";
   Выполнить("Результат = Справочники.Номенклатура.НайтиПоНаименованию(Номенклатура)");
   Сообщить(Результат);
65 Tanis
 
18.04.13
14:34
(61) Если таким вариантом, то выходит нормально.
Если Меняю на
Результат = Справочники.Номенклатура.НайтиПоНаименованию("+""Моя ном-ра""+");

То выводит только тип Номенклатура. Ссылку нет.
66 1Сергей
 
18.04.13
14:36
(65) значит не находит по такому наименованию
67 Tanis
 
18.04.13
14:39
ага, а по коду из (61) находит.
68 1Сергей
 
18.04.13
14:40
(67) а так?

Выполнить("Результат = Справочники.Номенклатура.НайтиПоНаименованию(""Моя ном-ра"");");
69 Tanis
 
18.04.13
14:42
С одной "" находит
70 palpetrovich
 
18.04.13
15:05
все дело в кавычках ;)
71 Tanis
 
18.04.13
15:30
Всем СПАСИБО!!!

Теперь дальше буду формулу дописывать.
72 Tanis
 
18.04.13
15:32
Все таки были ошибки в обработке
73 Tanis
 
18.04.13
15:41
Формула готова. :-)))

Номен = ДанныеСтроки.ОсновноеСредство.ПолучитьОбъект();
Ном = Номен.Наименование;
Результат = Справочники.Номенклатура.НайтиПоНаименованию(Ном);

Все таки дело было в обработке, 4 пункта изменил.
74 hhhh
 
18.04.13
16:12
(73) что за глупые понты? Пиши по-человечески

Ном = ДанныеСтроки.ОсновноеСредство.Наименование;
75 palpetrovich
 
18.04.13
16:16
(73) Объект-то тебе зачем? :)
76 Tanis
 
18.04.13
16:23
Хорошо, изменю.

А еще проблема возникла, в некоторых наименованиях, пробелы лишние, в середине наименования.

Как-нибудь можно это учесть? если ставить %наименование%
то он только по бокам отсечет?
77 1Сергей
 
18.04.13
16:24
Пока Найти(ном, "  ")>0 Цикл
   ном = СтрЗаменить(ном, "  ", " ");
КонецЦикла;
78 palpetrovich
 
18.04.13
16:27
(76) что значит "пробелы лишние"? это кто решил что они лишние?

да и вообще - искать по наименованию - моветон, только в крайнем случае можно
79 Tanis
 
18.04.13
16:28
Это заменит, все пробелы больше 1, на 1.
Так?

А если их и должны быть 2, то....
80 Tanis
 
18.04.13
16:29
(78) А там больше не найдешь, так как имеем ОС, а найти надо ном-ру.
81 samozvanec
 
18.04.13
16:30
Результат = Справочники.Номенклатура.НайтиПоНаименованию(ДанныеСтроки.ОсновноеСредство.Наименование);

в одну строку ваще пиши все, так круче
82 Tanis
 
18.04.13
16:33
(81) ;-)))
Можно и так.

Теперь с неправильным наименованием осталось решить.
83 Tanis
 
18.04.13
16:39
кладовщики..... Слов нет...

Нет чтоб копировать название из карточки ОС, они его вручную вбивали, теперь с пробелами накосячили... Привычка у них, вместо 1 два ставить.
84 Tanis
 
18.04.13
17:00
Текст = "Номенклатура 1 слово  Слово 2";
Результат = Найти(Текст, "Каждое значение строки текст");
Если Результат > 0 Тогда
   Сообщить(Результат);
КонецЕсли;


Как можно это использовать? Нужно разбить строку на подстроки, но и перебрать каждое значение, но количество подстрок не известно...
85 Tanis
 
18.04.13
17:40
Почему в УПП происходит задвоение добавления из таб. дока.

Док = Справочники.Номенклатура.СоздатьЭлемент();
Док.Наименование = ТекстыЯчеек[2];
Док.НаименованиеПолное = ТекстыЯчеек[2];
Док.Записать();
//Док.ПолучитьФорму().Открыть();
Результат = Док.Ссылка;