1с ошибка при вызове метода контекста найтипонаименованию

{(1)}: Ошибка при вызове метода контекста (НайтиПоНаименованию) ☑ 0

falselight

08.05.19

14:09

Ошибка выдается вот на эту строку

Справочники.Номенклатура.НайтиПоНаименованию(«Хлеб»,1)

Из за чего это?

1

butterbean

08.05.19

14:10

дык та же написано что за ошибка, хотя и так видно, что кривой второй параметр

2

falselight

08.05.19

14:13

(1) Второй параметр, истина или 1 может же быть?!

3

1Сергей

08.05.19

14:14

(2) CTRL+F1

4

falselight

08.05.19

14:20

(3) И что там? Всегдя так пользовался.

Разбираюсь. Гружу большой файл.

5

sqr4

08.05.19

14:22

(4) вместо булево число пихал?

6

butterbean

08.05.19

14:23

(4) ты бы хоть описание ошибки озвучил, там же все написано

7

falselight

08.05.19

14:23

(5) Булево эквивалент 1, 0

8

falselight

08.05.19

14:24

(6) не тот индекс сувал видимо, гружу далее

9

Tonik992

08.05.19

14:26

(7) Если сигнатура метода предполагает определенный тип переменной, то он должен быть именно таким.

Не надо искать какие-то другие доводы.

10

falselight

08.05.19

14:27

Реально ругается!!!! То находит то нет!!!!!!

11

falselight

08.05.19

14:28

(9) На это такая же ошибка!!!

Справочники.БазовыеЕдиницыИзмерения.НайтиПоНаименованию(МассивКолонок[4], Истина)

12

sqr4

08.05.19

14:29

(9) а чему будет равно (не 1)

А (не 0) ?

13

sqr4

08.05.19

14:29

(11) похоже не строка в наименование идет?

14

sqr4

08.05.19

14:30

Остановка по ошибке все как надо показывает?

15

falselight

08.05.19

14:31

Вот проверяю

НайденнаяБазоваяЕдиницаИзмерения = Справочники.БазовыеЕдиницыИзмерения.НайтиПоНаименованию(МассивКолонок[4], 1);

Все находит. И идет строка «шт»

И находится элемент. Но на одном месте ломается ((((

Отладчик показывает что так же идет строка «шт»

И там, на родителе тоже.

16

Tonik992

08.05.19

14:32

(12) Есть сигнатура метода. Лучше придерживаться её.

17

mikecool

08.05.19

14:32

сборище телепатов

18

falselight

08.05.19

14:33

(16) Не имеет значения. Дело не в этом. Если писать истина, такая же ошибка.

Я пытаюсь понять в чем причина?!

19

Tonik992

08.05.19

14:37

(18) такая же, это какая? скрин давайте сюда

20

mikecool

08.05.19

14:38

(19) не спугни, пусть найдет

21

sqr4

08.05.19

14:38

(15) кроме как неограниченной строки не могу ничего предположить

22

falselight

08.05.19

14:41

Гружу файл. Просмотрел как грузятся проблемные места все нормально.

Находятся элементы и прописываются.

Отлавливаю проблему.

Когда функция просто не отрабатывает, поиска по наименованию (((

Хотя так же все нормально передается туда для поиска.

23

palsergeich

08.05.19

14:42

Потому что может быть не «хлеб»

А «хлеб »

Визуально одно и тоже, но при поиске по полному соответствию это не одно и то же.

Вариантов невидимых символов достаточно много, причем некоторые могут крашить сеанс

24

falselight

08.05.19

14:44

(23) Я их отлавливаю. Должно быть все нормально, без пробелов!

25

falselight

08.05.19

14:45

Вот сломалось, —

МассивКолонок[4] = «шт»   — как и всегда

Справочники.БазовыеЕдиницыИзмерения.НайтиПоНаименованию(МассивКолонок[4], 1) = Ошибка при вызове метода контекста (НайтиПоНаименованию)

Почему? И на родителе так же.

26

palsergeich

08.05.19

14:45

А может быть что часть символов не в том языке.

Постоянно такое с буквой с

27

falselight

08.05.19

14:46

(26) Ну так найдена была бы пустая ссылка, но не ошибка.

То работает то нет. Так же строка передается!

28

palsergeich

08.05.19

14:47

(27) а там для подчинённых справочников разве не надо владельца указывать?

29

falselight

08.05.19

14:48

БазовыеЕдиницыИзмерения — независимый справочник!

30

falselight

08.05.19

14:49

И тут ошибка

                Если МассивКолонок[23] <> «» Тогда

                    ЭлементНоменклатуры.Родитель = Справочники.Номенклатура.НайтиПоНаименованию(МассивКолонок[23], 1);

                КонецЕсли;

МассивКолонок[23] = «СЫР» , все должно работать. Или находит элемент или пустую ссылку.

Веть до работало.

А на 2991 элементе ломается!

31

palsergeich

08.05.19

14:49

Глупый вопрос: зачем тогда для каждой строки делать поиск для справочника?

Сделай соответствие символьного представления и ссылки

32

falselight

08.05.19

14:50

(31)  Это перегрузка. Для каждой строки свои данные. Вопрос не в этом.

33

sqr4

08.05.19

14:51

(24) все же сомнения терзают, там не пробел будет, а нечитаемый неправильный вызывающий ошибку символ, который СОКРЛП не отловит и СТРЗаменить

34

falselight

08.05.19

14:52

На этой строке ломается. Ну и что тут не так?

«Эл.»,»00000968″,»Набор для приготовления Адыгейского сыра»,»»,»шт»,»0″,»Товар (пр. ТМЦ)»,»»,»0″,»0″,»»,»шт»,»»,»Набор для приготовления Адыгейского сыра»,»Без НДС»,»Без налога»,»»,»»,»»,»0″,»»,»»,»0″,»СЫР»,»00000975″

35

falselight

08.05.19

14:52

Все как нужно!

36

falselight

08.05.19

14:52

(33) «шт» — тут какой может быть пробел?

37

palsergeich

08.05.19

14:53

(32) Да посрать что это)

Один раз шт. создал, во второй ее точно создавать не будешь. Ну и закешируй.

Это хотя бы с точки зрения оптимизации очевидное решение.

А так как телепатические митохондрии на сегодня у меня устали могу сказать одно.

Или делай устойчивый пример с ошибкой, которую можно воспроизвести на демо, или иди на v8@1c.ru

38

palsergeich

08.05.19

14:54

(34) Да понятия не имею.

Без кода, без возможности воспроизвести — это шоу «Экстрасенсы»

39

mikecool

08.05.19

14:54

надо больше восклицательных знаков и меньше рассказывать о проблеме!!!

40

falselight

08.05.19

14:55

(38)  

                Если МассивКолонок[4] <> «» Тогда

                    НайденнаяБазоваяЕдиницаИзмерения = Справочники.БазовыеЕдиницыИзмерения.НайтиПоНаименованию(МассивКолонок[4], 1);

                    Если НайденнаяБазоваяЕдиницаИзмерения <> Справочники.БазовыеЕдиницыИзмерения.ПустаяСсылка() Тогда

                        ЭлементНоменклатуры.ЕдиницаИзмерения = НайденнаяБазоваяЕдиницаИзмерения;

                    КонецЕсли;

                КонецЕсли;

41

НЕА123

08.05.19

14:57

а мне нравится ветка. настоящая пятница.

42

palsergeich

08.05.19

14:57

(40) И что?

Может У тебя СТРРАЗДЕЛИТЬ(Строка,»,»,Истина)

43

falselight

08.05.19

14:58

(37) Шт есть в справочнике, не создавал, а просто нахожу

44

palsergeich

08.05.19

14:58

(42) Ой Может У тебя СТРРАЗДЕЛИТЬ(Строка,»,»,ЛОЖЬ)

Баз кода полного и нормального примера иди на v8@1c.ru

45

falselight

08.05.19

14:59

(44) Сейчас отлаживаю эту процедуру, по нажатию кнопке. Ошибки в ней.

&НаСервере

Процедура ЗагрузитьНоменклатуруНаСервере()

    СчЭл  = 1;

    Текст = Новый ТекстовыйДокумент;

    Текст.Прочитать(ИмяФайлаЗагрузкиНоменклатуры);

    НачатьТранзакцию();

    Для НомерСтроки = 1 по Текст.КоличествоСтрок() Цикл

        Строка        = Текст.ПолучитьСтроку(НомерСтроки);

        МассивКолонок = РазложитьСтрокуВМассивПодстрок(Строка, Разделитель);

        //

        Для Индекс = 0 По МассивКолонок.Количество() — 1 Цикл

            МассивКолонок[Индекс] = СтрЗаменить( МассивКолонок[Индекс], «»»», «» );

        КонецЦикла;

        //

        Если МассивКолонок[0] = «Гр.» Тогда

            //

            // Группа                  // 1.  [0]

            // Код                     // 2.  [1]

            // Наименование            // 3.  [2]

            //

            // Артикул                // 4.  [3]

            // БазоваяЕдиница         // 5.  [4]

            // Весовой                // 6.  [5]

            // ВидНоменклатуры        // 7.  [6]

            // Комментарий            // 8.  [7]

            // МинОстаток             // 9.  [8]

            // НеВключатьВпрайс       // 10. [9]

            // НомерГТД               // 11. [10]

            // ОсновнаяЕдиница        // 12. [11]

            // ОсновноеСвойство       // 13. [12]

            // ПолнНаименование       // 14. [13]

            // СтавкаНДС              // 15. [14]

            // СтавкаНП               // 16. [15]

            // СтранаПроисхождения    // 17. [16]

            // Производитель          // 18. [17]

            // Импортер               // 19. [18]

            // АлкогольнаяПродукция   // 20. [19]

            // ВидПродукции           // 21. [20]

            // ВидЛицензии            // 22. [21]

            // КоэффПересчетаДал      // 23. [22]

            //                              

            // Родитель.Наименование  // 24. [23]        

            // Родитель.Код           // 25. [24]        

            //

            НайденнаяГруппа = Справочники.Номенклатура.НайтиПоНаименованию(МассивКолонок[2],1);

            Если НайденнаяГруппа = Справочники.Номенклатура.ПустаяСсылка() Тогда

                ГруппаНоменклатуры                       = Справочники.Номенклатура.СоздатьГруппу();

                ГруппаНоменклатуры.Наименование       = МассивКолонок[2];

                //ГруппаКонтрагентов.НаименованиеПолное = МассивКолонок[2];

                //ГруппаНоменклатуры.Наименование       = СтрЗаменить( МассивКолонок[2], «»»», «» );

                Если МассивКолонок[11] <> «» Тогда

                    ГруппаНоменклатуры.Родитель = Справочники.Номенклатура.НайтиПоНаименованию(МассивКолонок[23], 1);

                КонецЕсли;

                ГруппаНоменклатуры.Записать();

                Сообщить(«Создана группа » + ГруппаНоменклатуры.Наименование);

            Иначе

                Сообщить(«Пропущена группа » + МассивКолонок[2]);

            КонецЕсли;

        ИначеЕсли МассивКолонок[0] = «Эл.» Тогда

            //

            // Элемент                  // 1.  [0]

            // Код                     // 2.  [1]

            // Наименование            // 3.  [2]

            //

            // Артикул                // 4.  [3]

            // БазоваяЕдиница         // 5.  [4]

            // Весовой                // 6.  [5]

            // ВидНоменклатуры        // 7.  [6]

            // Комментарий            // 8.  [7]

            // МинОстаток             // 9.  [8]

            // НеВключатьВпрайс       // 10. [9]

            // НомерГТД               // 11. [10]

            // ОсновнаяЕдиница        // 12. [11]

            // ОсновноеСвойство       // 13. [12]

            // ПолнНаименование       // 14. [13]

            // СтавкаНДС              // 15. [14]

            // СтавкаНП               // 16. [15]

            // СтранаПроисхождения    // 17. [16]

            // Производитель          // 18. [17]

            // Импортер               // 19. [18]

            // АлкогольнаяПродукция   // 20. [19]

            // ВидПродукции           // 21. [20]

            // ВидЛицензии            // 22. [21]

            // КоэффПересчетаДал      // 23. [22]

            //                              

            // Родитель.Наименование  // 24. [23]        

            // Родитель.Код           // 25. [24]        

            //

            НайденныйЭлемент = Справочники.Номенклатура.НайтиПоНаименованию(МассивКолонок[2],1);

            Если НайденныйЭлемент = Справочники.Номенклатура.ПустаяСсылка() Тогда

                ЭлементНоменклатуры              = Справочники.Номенклатура.СоздатьЭлемент();

                // Наименование            // 3.  [2]

                ЭлементНоменклатуры.Наименование = МассивКолонок[2];

                // Артикул                // 4.  [3]

                Если МассивКолонок[3] <> «» Тогда

                    ЭлементНоменклатуры.Артикул = МассивКолонок[3];

                КонецЕсли;

                // БазоваяЕдиница         // 5.  [4]

                Если МассивКолонок[4] <> «» Тогда

                    НайденнаяБазоваяЕдиницаИзмерения = Справочники.БазовыеЕдиницыИзмерения.НайтиПоНаименованию(МассивКолонок[4], 1);

                    Если НайденнаяБазоваяЕдиницаИзмерения <> Справочники.БазовыеЕдиницыИзмерения.ПустаяСсылка() Тогда

                        ЭлементНоменклатуры.ЕдиницаИзмерения = НайденнаяБазоваяЕдиницаИзмерения;

                    КонецЕсли;

                КонецЕсли;

                // Весовой                // 6.  [5]

                Если МассивКолонок[5] <> «» Тогда

                    Если МассивКолонок[5] = «Истина» или МассивКолонок[5] = «1» Тогда

                        ЭлементНоменклатуры.Весовой = Истина;

                    Иначе

                        ЭлементНоменклатуры.Весовой = Ложь;

                    КонецЕсли;

                КонецЕсли;

                // ВидНоменклатуры        // 7.  [6]

                Если МассивКолонок[6] <> «» Тогда

                    НайденныйВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию(МассивКолонок[6], 1);

                    Если НайденныйВидНоменклатуры <> Справочники.ВидыНоменклатуры.ПустаяСсылка() Тогда

                        ЭлементНоменклатуры.ВидНоменклатуры = НайденныйВидНоменклатуры;

                    КонецЕсли;

                КонецЕсли;

                // Комментарий            // 8.  [7]

                //Если МассивКолонок[7] <> «»»»»» и МассивКолонок[7] <> «»»0″»» Тогда

                //    ЭлементНоменклатуры.Комментарий = МассивКолонок[7];

                //КонецЕсли;

                // МинОстаток             // 9.  [8]

                // НеВключатьВпрайс       // 10. [9]

                // НомерГТД               // 11. [10]

                
                // ОсновнаяЕдиница        // 12. [11]

                //Если МассивКолонок[11] <> «»»»»» Тогда

                //    ЭлементНоменклатуры. = МассивКолонок[11];

                //КонецЕсли;

                // ОсновноеСвойство       // 13. [12]

                // ПолнНаименование       // 14. [13]

                Если МассивКолонок[13] <> «» Тогда

                    ЭлементНоменклатуры.НаименованиеПолное = МассивКолонок[13];

                КонецЕсли;

                // СтавкаНДС              // 15. [14]

                Если МассивКолонок[14] <> «» Тогда

                    Если МассивКолонок[14] = «Без НДС» Тогда

                        ЭлементНоменклатуры.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;

                    ИначеЕсли МассивКолонок[14] = «НДС 18» Тогда

                        ЭлементНоменклатуры.СтавкаНДС = Перечисления.СтавкиНДС.НДС18;

                    ИначеЕсли МассивКолонок[14] = «НДС 20» Тогда

                        ЭлементНоменклатуры.СтавкаНДС = Перечисления.СтавкиНДС.НДС20;

                    КонецЕсли;

                КонецЕсли;

                // СтавкаНП               // 16. [15]

                // СтранаПроисхождения    // 17. [16]

                Если МассивКолонок[16] <> «» Тогда

                    НайденнаяСтранаПроисхождения = Справочники.СтраныМира.НайтиПоНаименованию(МассивКолонок[16], 1);

                    Если НайденнаяСтранаПроисхождения <> Справочники.СтраныМира.ПустаяСсылка() Тогда

                        ЭлементНоменклатуры.СтранаПроисхождения = НайденнаяСтранаПроисхождения;

                    КонецЕсли;

                КонецЕсли;

                // Производитель          // 18. [17]

                Если МассивКолонок[17] <> «» Тогда

                    НайденныйПроизводитель = Справочники.Контрагенты.НайтиПоНаименованию(МассивКолонок[17], 1);

                    Если НайденныйПроизводитель <> Справочники.Контрагенты.ПустаяСсылка() Тогда

                        ЭлементНоменклатуры.Производитель = НайденныйПроизводитель;

                    КонецЕсли;

                КонецЕсли;

                // Импортер               // 19. [18]

                // АлкогольнаяПродукция   // 20. [19]

                Если МассивКолонок[19] <> «» Тогда

                    Если МассивКолонок[19] = «Истина» Тогда

                        ЭлементНоменклатуры.АлкогольнаяПродукция = Истина;

                    Иначе

                        ЭлементНоменклатуры.АлкогольнаяПродукция = Ложь;

                    КонецЕсли;

                КонецЕсли;

                // ВидПродукции           // 21. [20]

                Если МассивКолонок[20] <> «» Тогда

                    НайденныйВидАлкПродукции = Справочники.ВидыАлкогольнойПродукции.НайтиПоНаименованию(МассивКолонок[20], 1);

                    Если НайденныйВидАлкПродукции <> Справочники.ВидыАлкогольнойПродукции.ПустаяСсылка() Тогда

                        ЭлементНоменклатуры.ВидАлкогольнойПродукцииЕГАИС = МассивКолонок[20];

                    КонецЕсли;

                КонецЕсли;

                // ВидЛицензии            // 22. [21]

                // КоэффПересчетаДал      // 23. [22]

                //                              

                // Родитель.Наименование  // 24. [23]        

                Если МассивКолонок[23] <> «» Тогда

                    ЭлементНоменклатуры.Родитель = Справочники.Номенклатура.НайтиПоНаименованию(МассивКолонок[23], 1);

                КонецЕсли;

                // Родитель.Код           // 25. [24]        

                //

                ЭлементНоменклатуры.Записать();                

                Сообщить(«Создан элемент » + ЭлементНоменклатуры.Наименование);

            Иначе

                Сообщить(«Пропущен элемент » + МассивКолонок[2]);

            КонецЕсли;

        КонецЕсли;

        СчЭл = СчЭл + 1;

    КонецЦикла;

    ЗафиксироватьТранзакцию();

    Сообщить(«Загружено: » + СТРОКА(СчЭл) + » элементов.»);

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

//

46

mikecool

08.05.19

15:00

(44) не, надо сразув Кремль писать )

47

falselight

08.05.19

15:02

Вот. Все работает. Но иногда идет эта ошибка и все, на таких же данны!

http://joxi.ru/Vm6GePvf4jOba2

48

sqr4

08.05.19

15:04

отладка — останавливать по ошибке

49

trad

08.05.19

15:04

вангую, есть попытка в функции РазложитьСтрокуВМассивПодстрок()

50

sqr4

08.05.19

15:04

Ты ведь это делал да

51

lodger

08.05.19

15:04

Если МассивКолонок[4] <> «» Тогда

поменять на

Если ТипЗнч(МассивКолонок[4]) = Тип(«Строка») И НЕ ПустаяСтрока(МассивКолонок[4]) Тогда

52

kda26

08.05.19

15:05

(47)  Добавить в условие проверку на Неопределено

53

falselight

08.05.19

15:11

(48) я так и останавливаюсь на строке 2000 с лишним

(51)(52) Да можно многого добавить, но я же смотрю в отладчике, в функцию передаются верные данные, а идет ошибка.

Добавлю конечно проверки.

54

sqr4

08.05.19

15:12

а ну и тестирование исправление, кэш и прочая фигня

55

falselight

08.05.19

15:13

(54) Даже для пустой базы? Я туда ни разу ещё не загрузил эти элементы номенклатуры.

56

sqr4

08.05.19

15:15

(55) не знаю. у меня правило, если происходит неведомая херня, нужно сначала делать это, а потом только лезть за бубном

57

falselight

08.05.19

15:16

(56) Обычно, сколько кэш не чистил не помогало (

58

sqr4

08.05.19

15:18

(57) ну тогда вперед к админам за снастью если своей нет и вызывать помощника.

59

Галахад

08.05.19

15:19

(47) Точно останова явно не на ошибке.

60

sqr4

08.05.19

15:21

(59) кстати да

61

falselight

08.05.19

15:21

Кэш почищу сейчас догрузится.

Стоит галка останавливаться по ошибке.

Ошибка видимо возникает при записи элемента.

Я смотрю что там в нем, вижу проблему в единицах измерения и родителе.

Но из за чего не пойму.

62

sqr4

08.05.19

15:23

(61) чё мля

63

sqr4

08.05.19

15:23

иди накуй…

64

palsergeich

08.05.19

15:24

(61) платформенная проверка какая то.

Сделай обменДанными.загрузка = истина.

Потом глазами увидишь

65

falselight

08.05.19

15:24

Стоит галка при отладке останавливаться по ошибке. Вот на ней и вылетает.

66

falselight

08.05.19

15:24

(64) А это где сделать?

67

palsergeich

08.05.19

15:25

Спр = создать элемент или ПолучитьОбъект

Спр.обменДанными.загрузка = истина

Спр.записать()

68

palsergeich

08.05.19

15:26

Ход такой

69

falselight

08.05.19

15:26

(67) А что именно это даст?

70

palsergeich

08.05.19

15:26

(69) отключит платформенные проверки

71

palsergeich

08.05.19

15:27

У тебя ошибка не в найти по наименованию, а некорректная обработка исключения ранее

72

palsergeich

08.05.19

15:28

Или ошибка заполнения обязательных на уровне платформы полей: наименование, владелец (если справочник подчинённый) и тд

73

falselight

08.05.19

15:28

(71) У меня же нет попытки исключения?

Да ранее я вижу что в родителе и единицах измерения.

Но туда идут нормальные данные. Буду разбираться.

Видимо энергия ушла.

74

falselight

08.05.19

15:29

(72) Единицу измерения обязательно заполнять, выдавать ошибку стоит.

75

palsergeich

08.05.19

15:29

(74) это не валило бы в исключение

76

palsergeich

08.05.19

15:32

(74) технически это отказ=истина в процедуре ПроверкаЗаполнения, но не исключение

77

trad

08.05.19

15:34

(73) см (49)

78

falselight

08.05.19

15:38

(77)

Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = «,»)

    МассивСтрок = Новый Массив();

    Если Разделитель = » » Тогда

        Стр = СокрЛП(Стр);

        Пока Истина Цикл

            Поз = Найти(Стр,Разделитель);

            Если Поз=0 Тогда

                МассивСтрок.Добавить(Стр);

                Возврат МассивСтрок;

            КонецЕсли;

            МассивСтрок.Добавить(Лев(Стр,Поз-1));

            Стр = СокрЛ(Сред(Стр,Поз));

        КонецЦикла;

    Иначе

        ДлинаРазделителя = СтрДлина(Разделитель);

        Пока Истина Цикл

            Поз = Найти(Стр,Разделитель);

            Если Поз=0 Тогда

                МассивСтрок.Добавить(Стр);

                Возврат МассивСтрок;

            КонецЕсли;

            МассивСтрок.Добавить(Лев(Стр,Поз-1));

            Стр = Сред(Стр,Поз+ДлинаРазделителя);

        КонецЦикла;

    КонецЕсли;

КонецФункции

79

falselight

08.05.19

15:54

80

palsergeich

08.05.19

15:55

Я ж говорю — платформенные проверки

81

hhhh

08.05.19

16:01

(79) наверно в поле группа фигачишь элемент. Такое 1с не прощает.

82

Галахад

08.05.19

16:19

Это какая-то Санта-Барбара…

83

falselight

08.05.19

16:33

(81) В родителя всмысле??????

84

hhhh

08.05.19

16:39

(83) в общем пройдись по справочнику номенклатуры где-то есть одинаковое наименование у элемента и группы. Или если самому лень, посади за проверку девочку-восьмиклассницу, пусть проштудирует справочник от и до.

85

falselight

08.05.19

16:41

(81) Не должно такого быть.

(84) Гружу структуру из другой базы. Я пока не могу записать ни одного элемента. Так как грузится в транзакции.

Мне не лень. Я пытаюсь разобраться. Но такого не могло в принципе быть. Надеюсь докапаться до проблемы.

86

falselight

08.05.19

16:43

(84) смотрю в файле не нахожу.

Поставил останавливаться по ошибке.

Остановка же будет на проблемном элементе?

Ну вот, пока я в отладчеке не увидел там проблемы.

87

mikecool

08.05.19

16:44

(82) +100500 серия )

88

falselight

08.05.19

16:46

(87) Хорошо, у вас в 1с все всегда хорошо работает!

89

mikecool

08.05.19

16:48

(88) да,  как то загрузки из текстовых файлов с одного прохода отладки работают

90

hhhh

08.05.19

16:49

(85) ну, грузи без транзакции, ну ты чудик.

91

mikecool

08.05.19

16:49

а ветка больше на бложек похожа

92

falselight

08.05.19

16:50

(90) Ошибку нужно отловить. Мне нужно что бы все хорошо грузилось. Пока первичные данные.

Потом остальное ещё цеплять.

И так долго грузится. Без транзакции ещё дольше будет.

Я же отлаживаю.

93

mikecool

08.05.19

16:51

«И так долго грузится.» — сделай примеры покороче, делов то

94

Масянька

08.05.19

16:53

Лучше день потерять — зато потом за пять минут долететь (С)

95

sqr4

08.05.19

16:54

(92) без запросов в цикле еще быстрее

96

Rovan

08.05.19

16:54

(9) привычка писать 1 вместо «истина» выдает «клюшечника» со стажем

97

falselight

08.05.19

16:55

вот не находится группа сыр и идет ошибка

ошибка из за ошибки что выдает функция, а она должна либо находить элемент или возвращать пустую ссылку

http://joxi.ru/gmvaZ43tqv5b5r

98

falselight

08.05.19

16:55

(96) Это никакого значения не имеет.

99

falselight

08.05.19

16:56

Что с этим (97) делать. Реально не вижу в чем проблема?!!!

100

Rovan

08.05.19

16:59

(97) а полностью ошибка вероятно звучит так

Ошибка при вызове метода контекста (НайтиПоНаименованию): В данной транзакции уже происходили ошибки!

https://downloads.v8.1c.ru/content/Conversion/ErrConversion_2_0_24_1.htm

101

Rovan

08.05.19

17:00

(+100) весь блок надо поставить а Попытку и поймать Исключение —

там и будет корень зла !

102

falselight

08.05.19

17:03

(100) Да и такие строки есть.

Только в окне сообщения в режиме предприятия.

Закрыть или перезагрузить с вопросом.

103

falselight

08.05.19

17:03

(101) Весь код процедуры что ли?

104

falselight

08.05.19

17:29

Наверное запись элемента нужно заключать в попытку исключение.

105

falselight

08.05.19

17:34

Похоже, да!!!!! В родителя писался элемент с ЭтоГруппа = Ложь

106

hhhh

08.05.19

17:45

(105) вообще выкинь НайтиПоНаименованию. Ищи запросом и указывай там ЭтоГруппа = Истина;

107

falselight

08.05.19

17:50

(106) Ок, спасибо. Сделаю!

Используется кусок кода(про убиться об стену за поиск — не надо): в результате: Ошибка при выполнении обработчика — ‘ОбработкаЗаполнения’ по причине: {Документ.ПоступлениеТоваровУслуг.МодульОбъекта(6020)}: Ошибка при вызове метода контекста (НайтиПоНаименованию) по причине: Несоответствие типов (параметр номер ‘2’) читаю СП: ПланСчетовМенеджер.<Имя плана счетов> (ChartOfAccountsManager.<Имя плана счетов>) НайтиПоНаименованию (FindByDescription) Синтаксис: НайтиПоНаименованию(<Наименование>, <ТочноеСоответствие>, <Родитель>) Параметры: Тип: Строка. Строка, содержащая искомое наименование. Тип: Булево. Определяет режим поиска по полному соответствию. Поиск будет успешным, если строка поиска: в случае значения параметра Ложь — будет соответствовать левой части наименования; в случае значения параметра Истина — будет полностью совпадать с наименованием (за исключением «хвостовых» пробелов в наименовании). Значение по умолчанию: Ложь <Родитель> (необязательный) Тип: ПланСчетовСсылка. Родитель, в пределах которого нужно выполнять поиск. Если не указан, то поиск будет проводиться по всем счетам. Что же я делаю не так?

да, так получается но сам факт интересен :)

Жесть… Про предопределенные элементы когда-нибудь слышали?

епт, ну прочитай первую строку… я переписываю то что досталось, вот и наткнулся

может потому..что внутри искомого значения используются скобки — (от поставщиков)? может попробовать как то убрать их?

+6 а хотя..вообще какое то странное наименование Плана счетов.. Нельзя ли вручную как то его откорректировать?

Пиши в 1Ц. Родитель обязателен, не верь СП. Указывай родителя и заработает. Вот так работает: ПланыСчетов.Хозрасчетный.НайтиПоНаименованию(«Товары в пути от поставщи»,Ложь, ПланыСчетов.Хозрасчетный.ПустаяСсылка)

тогда не понятен посыл на параметр 2

Он не указан, т.е. Неопределено. А 1С ссылку ждет.

по СП 2 параметр — точное соответствие и также как и 3 — необязателен я все таки читаю иногда СП и стараюсь ему верить :)

Что курил? «Точное соответствие» — это про первый параметр.

неа, еще нет :) чего то много начинаю спотыкаться после перехода

НайтиПоНаименованию(<Наименование>, <ТочноеСоответствие>, <Родитель>) счет идет с нуля?

Байты с нуля, ножки с единицы. Перепутал. Но не важно — Неопределено и Булево — разные типы, как ни крути

ВСЕ 3 параметра обязательны в текущем (11м) релизе платформы, это баг, одицказлы. Тебе написал как сделать чтобы работало. Что еще нужно?

Тэги:

Комментарии доступны только авторизированным пользователям

В платформе 1С сообщения об ошибках бывают достаточно запутаны, и без должных навыков разобраться в причинах достаточно сложно. Вот и сообщение об ошибке при вызове контекста может ввести в ступор начинающего разработчика. Однако в подавляющем большинстве случаев мы видим подобное сообщение, если разработчик допустил ошибку в своем коде. Причем речь зачастую идет не об орфографических ошибках, а о логических.

Исправляем ситуацию

Чтобы избавиться от этого неприятного сообщения об ошибке при вызове метода контекста, следует понимать, что контекстом называют методы платформы 1С. Значит в определенной строке кода воспользовались методом с неверными параметрами или вызвали его не от того владельца. Всегда внимательно и полностью читайте сообщения об ошибках – часто в них содержится указание на строку и метод, вызвавший ошибку. Это поможет сэкономить время на отладку и поиск проблемного места в коде.

Рассмотрим действия разработчика на примере со специально допущенной ошибкой. Мы запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора. Компилятор 1С пропускает такую процедуру, так как орфографических ошибок в написании команд мы не допустили. Однако в режиме предприятия нас ждет такое сообщение об ошибке:


	 Запрос = Новый Запрос;
	 Запрос.Текст =
	         "ВЫБРАТЬ
	          |        Номенклатура.Ссылка КАК Ссылка,
	          |        Номенклатура.ВерсияДанных КАК ВерсияДанных,
	          |        Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
	          |        Номенклатура.Родитель КАК Родитель,
	          |        Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
	          |        Номенклатура.Код КАК Код,
	          |        Номенклатура.Наименование КАК Наименование,
	          |        Номенклатура.Артикул КАК Артикул,
	          |        Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
	          |        Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
	          |        Номенклатура.Предопределенный КАК Предопределенный,
	          |        Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
	          |ИЗ
	          |        Справочник.Номенклатура КАК Номенклатура
	          |ГДЕ
	          |         ";
	 РезультатЗапроса = Запрос.Выполнить();
	 ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	 Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
	 КонецЦикла;
Запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора
Запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора

Приведенный текст ошибки программисту 1С скажет, что в модуле формы обработки «ЧтениеЗаписьXML на 152 строчке кода не может выполниться запрос. Причина в том, что на 17 строчке запроса нет чего-то, что ждал компилятор. Таким образом, чтобы убрать подобное сообщение, необходимо выяснить, что там должно быть и написать недостающий код.

Увидев вышеприведенный кусок кода, разработчик заметит, что в запросе есть служебное слово «ГДЕ», дающее сигнал 1С, что дальше будет условие. Но мы забыли дописать его и, естественно, система с помощью сообщения об ошибке спрашивает нас – «а где условие?». Чтобы исправить эту ситуацию необходимо либо убрать оператор «ГДЕ» из запроса, либо добавить условие.

Но ошибки могут быть не только в текстах запросов. Допустим, мы хотим выбрать всю номенклатуру и узнать, входит ли она в определенную группу. Проверка происходит с помощью метода «ПринадлежитЭлементу» и его параметра, который должен быть типа СправочникСсылка. Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной.


	 Запрос = Новый Запрос;
	            Запрос.Текст =
	                       "ВЫБРАТЬ
	                        |          Номенклатура.Ссылка КАК Ссылка,
	                        |          Номенклатура.ВерсияДанных КАК ВерсияДанных,
	                        |          Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
	                        |          Номенклатура.Родитель КАК Родитель,
	                        |          Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
	                        |          Номенклатура.Код КАК Код,
	                        |          Номенклатура.Наименование КАК Наименование,
	                        |          Номенклатура.Артикул КАК Артикул,
	                        |          Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
	                        |          Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
	                        |          Номенклатура.Предопределенный КАК Предопределенный,
	                        |          Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
	                        |ИЗ
	                        |          Справочник.Номенклатура КАК Номенклатура
	                        |ГДЕ
	                        |          НЕ Номенклатура.ЭтоГруппа ";
	 НужнаяГруппаЭлементов = Справочники.Номенклатура.НайтиПоНаименованию("Мебель");
	 РезультатЗапроса = Запрос.Выполнить();
	 ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	 Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
	 Сообщить(ВыборкаДетальныеЗаписи.Ссылка.ПринадлежитЭлементу("НужнаяГруппаЭлементов"));
	 КонецЦикла;
Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной
Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной

1С выдает настолько же информативное сообщение, из которого мы понимаем, что на 158 строке у 1 параметра неправильный тип. Но что же делать, если мы не знаем, какой тип должен быть? В этом нам поможет Синтакс-помощник, встроенный в платформу 1С.

Синтакс-помощник
Синтакс-помощник

В конфигураторе находим строку и метод, на который указывало сообщение об ошибке, и нажимаем на него правой кнопкой мыши. Выбираем пункт «Поиск в синтакс-помощнике» и платформа самостоятельно ищет справочную информацию по выделенному методу. В справке мы видим не только подробное описание параметров и самого метода, но и пример. Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает.

Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает
Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает

Чаще всего причиной подобных ошибок выступают следующие факторы:

  1. Невнимательность;
  2. Отсутствие опыта или знаний;
  3. Несогласованность действий разработчиков друг с другом;
  4. Изменения в методах контекста в новых версиях платформы.

Но ошибки при разработке ПО случаются постоянно, поскольку иногда ошибаются даже специалисты с многолетним опытом. Самое главное – уметь исправлять их и учиться на них. Постепенно вы будете видеть сообщения об ошибках все реже и научитесь замечать подобные «опечатки» еще до запуска 1С.

Ошибка при вызове метода контекста(?)

Автор Damates, 18 дек 2012, 20:30

0 Пользователей и 1 гость просматривают эту тему.

Есть такой код:

НайтиТО=Справочники.Тарифы.НайтиПоНаименованию(«ТО»);//находит
ЗначениеТО=РегистрыСведений.Тарифы.ПолучитьПоследнее(КонПериода,НайтиТО);
Сообщить(ЗначениеТО.Ресурс1);//ресурс в регистре сведений

Выдает ошибку:
{Справочник.Лицевые.Форма.ФормаСписка.Форма(79)}: Ошибка при вызове метода контекста (ПолучитьПоследнее)
      ЗначениеТО=РегистрыСведений.Тарифы.ПолучитьПоследнее(КонПериода,НайтиТО);
по причине:
Несоответствие типов (параметр номер ‘2’)

Измерение в регистре сведений берется из справочника Тарифы. В чем проблема? Подскажите , пожалуйста!


Второй параметр должен быть: (И снова приходиться цитировать СП… =( , ну неужели клавиша F1 на клавиатуре заблокирована)
ПолучитьПоследнее (GetLast)
Синтаксис:

ПолучитьПоследнее(<КонецПериода>, <Отбор>)
Параметры:

<КонецПериода> (необязательный)

Тип: Дата; МоментВремени; Граница.
Определяет момент времени, по который необходимо получить значения ресурсов. Может задаваться значениями типа Дата, МоментВремени или Граница. Если параметр не указан, то будут возвращены значения ресурсов самой последней записи регистра.
<Отбор> (необязательный)

Тип: Структура.
Структура, содержащая отбор по измерениям регистра. Имя ключа структуры должно совпадать с именем измерения регистра, заданного в конфигураторе, а значение элемента структуры — задает отбираемое по данному измерению значение.
Структура дополнительно может иметь элементы, соответствующие разделителям регистра с уровнем разделения НезависимоИСовместно, в состав которых входит регистр. Если такой элемент структуры задан для используемого в сеансе разделителя, значение для этого элемента должно совпадать со значением разделителя, иначе будет вызвано исключение.
Если параметр не указан, то отбор не используется.

Если долго всматриваться в учебник…то в голову может прийти мысль его открыть!


Спасибо! Все понял Сделал так:

НайтиТО=Справочники.Тарифы.НайтиПоНаименованию(«ТО»);
      //Сообщить(НайтиТО);
      Тариф = Новый Структура;
      Тариф.Вставить(«Тариф», НайтиТО);
      ЗначениеТО=РегистрыСведений.Тарифы.ПолучитьПоследнее(КонПериода,Тариф);
      Сообщить(ЗначениеТО.Ресурс1);
Фишка: Структура, содержащая отбор по измерениям регистра. Имя ключа структуры должно совпадать с именем измерения регистра, заданного в конфигураторе, а значение элемента структуры — задает отбираемое по данному измерению значение.


    msm.ru

    Нравится ресурс?

    Помоги проекту!

    !
    Правила раздела:

    • Перед тем, как задать вопрос, желательно почитать документацию и воспользоваться поиском.
    • Когда задаёте вопрос, то обязательно указывайте платформу (7.7, 8.0, 8.1, 8.2, etc), причем желательно в заголовке. Если речь идёт о типовой конфигурации, то указывайте её название и релиз. Текущие версии можно посмотреть здесь.
    • Ещё раз напоминаем о необходимости соблюдать не только правила, но и законы. Уважайте авторские права.

    Высказать своё мнение о модераторах раздела можно здесь: evGenius

    >
    1С 8.1 Добавление записи в табличную часть справочника

    • Подписаться на тему
    • Сообщить другу
    • Скачать/распечатать тему



    Сообщ.
    #1

    ,

      Senior Member

      ****

      Рейтинг (т): 0

      Как сделать сабж?


      evGenius



      Сообщ.
      #2

      ,

        ExpandedWrap disabled

          НоваяСтрокаТабЧасти = ЭлементСправочника.НазваниеТабличнойЧасти.Добавить();


        hawk1



        Сообщ.
        #3

        ,

          Senior Member

          ****

          Рейтинг (т): 0

          {Документ.ПриходнаяНакладная.Форма.ФормаДокумента(18)}: Ошибка при вызове метода контекста (Добавить): Объект недоступен для изменения.
          НоваяСтрока = СпрСкладыТаблЧасть.Добавить();
          по причине:
          Объект недоступен для изменения.


          Outlander



          Сообщ.
          #4

          ,

            что такое СпрСкладыТаблЧасть?


            hawk1



            Сообщ.
            #5

            ,

              Senior Member

              ****

              Рейтинг (т): 0

              ExpandedWrap disabled

                СпрСкладыТаблЧасть = Справочники.Склады.НайтиПоНаименованию(Склад).НаличиеМатериалов;


              evGenius



              Сообщ.
              #6

              ,

                ExpandedWrap disabled

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


                hawk1



                Сообщ.
                #7

                ,

                  Senior Member

                  ****

                  Рейтинг (т): 0

                  ExpandedWrap disabled

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

                        Для каждого СтрТаблЧасти Из ПереченьМатериалов Цикл

                            НайденнаяСтрока = СпрСкладыТаблЧасть.Найти(СтрТаблЧасти.Материал,»Материал»);

                            Если НайденнаяСтрока = Неопределено Тогда

                                НоваяСтрока = СпрСкладыТаблЧасть.Вставить(1);

                                НоваяСтрока.Количество = СтрТаблЧасти.Количество;

                                НоваяСтрока.Материал = СтрТаблЧасти.Материал;

                            Иначе

                                НайденнаяСтрока.Количество = НайденнаяСтрока.Количество + СтрТаблЧасти.Количество;

                            КонецЕсли;

                        КонецЦикла;

                  Но ниче не добавляется.


                  evGenius



                  Сообщ.
                  #8

                  ,

                    А записывать кто будет элемент справочника?


                    hawk1



                    Сообщ.
                    #9

                    ,

                      Senior Member

                      ****

                      Рейтинг (т): 0

                      ExpandedWrap disabled

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

                      Так?


                      Outlander



                      Сообщ.
                      #10

                      ,

                        не совсем так ты получишь новую версию объекта ;)


                        hawk1



                        Сообщ.
                        #11

                        ,

                          Senior Member

                          ****

                          Рейтинг (т): 0

                          Как же?


                          Outlander



                          Сообщ.
                          #12

                          ,

                            ExpandedWrap disabled

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

                              СпрСкладыТаблЧасть = СпрСклад.НаличиеМатериалов;

                              ….

                              СпрСклад.Записать();


                            evGenius



                            Сообщ.
                            #13

                            ,

                              Мндаааа… Книжки — наше всё.

                              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

                              0 пользователей:

                              • Предыдущая тема
                              • 1С: Проблемы и решения
                              • Следующая тема

                              Рейтинг@Mail.ru

                              [ Script execution time: 0,0657 ]   [ 15 queries used ]   [ Generated: 21.09.23, 05:23 GMT ]  

                              Понравилась статья? Поделить с друзьями:

                              Интересное по теме:

                            • 1с ошибка субд ошибка выделения памяти 80004005
                            • 1с ошибка при вызове метода контекста индекс
                            • 1с ошибка создания информационной базы native client
                            • 1с ошибка совместного доступа к файлу temp
                            • 1с ошибка совместного доступа к файлу как исправить

                            • Добавить комментарий

                              ;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: