falselight
08.05.19
✎
14:09
Ошибка выдается вот на эту строку
Справочники.Номенклатура.НайтиПоНаименованию(«Хлеб»,1)
Из за чего это?
butterbean
08.05.19
✎
14:10
дык та же написано что за ошибка, хотя и так видно, что кривой второй параметр
falselight
08.05.19
✎
14:13
(1) Второй параметр, истина или 1 может же быть?!
1Сергей
08.05.19
✎
14:14
(2) CTRL+F1
falselight
08.05.19
✎
14:20
(3) И что там? Всегдя так пользовался.
Разбираюсь. Гружу большой файл.
sqr4
08.05.19
✎
14:22
(4) вместо булево число пихал?
butterbean
08.05.19
✎
14:23
(4) ты бы хоть описание ошибки озвучил, там же все написано
falselight
08.05.19
✎
14:23
(5) Булево эквивалент 1, 0
falselight
08.05.19
✎
14:24
(6) не тот индекс сувал видимо, гружу далее
Tonik992
08.05.19
✎
14:26
(7) Если сигнатура метода предполагает определенный тип переменной, то он должен быть именно таким.
Не надо искать какие-то другие доводы.
falselight
08.05.19
✎
14:27
Реально ругается!!!! То находит то нет!!!!!!
falselight
08.05.19
✎
14:28
(9) На это такая же ошибка!!!
Справочники.БазовыеЕдиницыИзмерения.НайтиПоНаименованию(МассивКолонок[4], Истина)
sqr4
08.05.19
✎
14:29
(9) а чему будет равно (не 1)
А (не 0) ?
sqr4
08.05.19
✎
14:29
(11) похоже не строка в наименование идет?
sqr4
08.05.19
✎
14:30
Остановка по ошибке все как надо показывает?
falselight
08.05.19
✎
14:31
Вот проверяю
НайденнаяБазоваяЕдиницаИзмерения = Справочники.БазовыеЕдиницыИзмерения.НайтиПоНаименованию(МассивКолонок[4], 1);
Все находит. И идет строка «шт»
И находится элемент. Но на одном месте ломается ((((
Отладчик показывает что так же идет строка «шт»
И там, на родителе тоже.
Tonik992
08.05.19
✎
14:32
(12) Есть сигнатура метода. Лучше придерживаться её.
mikecool
08.05.19
✎
14:32
сборище телепатов
falselight
08.05.19
✎
14:33
(16) Не имеет значения. Дело не в этом. Если писать истина, такая же ошибка.
Я пытаюсь понять в чем причина?!
Tonik992
08.05.19
✎
14:37
(18) такая же, это какая? скрин давайте сюда
mikecool
08.05.19
✎
14:38
(19) не спугни, пусть найдет
sqr4
08.05.19
✎
14:38
(15) кроме как неограниченной строки не могу ничего предположить
falselight
08.05.19
✎
14:41
Гружу файл. Просмотрел как грузятся проблемные места все нормально.
Находятся элементы и прописываются.
Отлавливаю проблему.
Когда функция просто не отрабатывает, поиска по наименованию (((
Хотя так же все нормально передается туда для поиска.
palsergeich
08.05.19
✎
14:42
Потому что может быть не «хлеб»
А «хлеб »
Визуально одно и тоже, но при поиске по полному соответствию это не одно и то же.
Вариантов невидимых символов достаточно много, причем некоторые могут крашить сеанс
falselight
08.05.19
✎
14:44
(23) Я их отлавливаю. Должно быть все нормально, без пробелов!
falselight
08.05.19
✎
14:45
Вот сломалось, —
МассивКолонок[4] = «шт» — как и всегда
Справочники.БазовыеЕдиницыИзмерения.НайтиПоНаименованию(МассивКолонок[4], 1) = Ошибка при вызове метода контекста (НайтиПоНаименованию)
Почему? И на родителе так же.
palsergeich
08.05.19
✎
14:45
А может быть что часть символов не в том языке.
Постоянно такое с буквой с
falselight
08.05.19
✎
14:46
(26) Ну так найдена была бы пустая ссылка, но не ошибка.
То работает то нет. Так же строка передается!
palsergeich
08.05.19
✎
14:47
(27) а там для подчинённых справочников разве не надо владельца указывать?
falselight
08.05.19
✎
14:48
БазовыеЕдиницыИзмерения — независимый справочник!
falselight
08.05.19
✎
14:49
И тут ошибка
Если МассивКолонок[23] <> «» Тогда
ЭлементНоменклатуры.Родитель = Справочники.Номенклатура.НайтиПоНаименованию(МассивКолонок[23], 1);
КонецЕсли;
МассивКолонок[23] = «СЫР» , все должно работать. Или находит элемент или пустую ссылку.
Веть до работало.
А на 2991 элементе ломается!
palsergeich
08.05.19
✎
14:49
Глупый вопрос: зачем тогда для каждой строки делать поиск для справочника?
Сделай соответствие символьного представления и ссылки
falselight
08.05.19
✎
14:50
(31) Это перегрузка. Для каждой строки свои данные. Вопрос не в этом.
sqr4
08.05.19
✎
14:51
(24) все же сомнения терзают, там не пробел будет, а нечитаемый неправильный вызывающий ошибку символ, который СОКРЛП не отловит и СТРЗаменить
falselight
08.05.19
✎
14:52
На этой строке ломается. Ну и что тут не так?
«Эл.»,»00000968″,»Набор для приготовления Адыгейского сыра»,»»,»шт»,»0″,»Товар (пр. ТМЦ)»,»»,»0″,»0″,»»,»шт»,»»,»Набор для приготовления Адыгейского сыра»,»Без НДС»,»Без налога»,»»,»»,»»,»0″,»»,»»,»0″,»СЫР»,»00000975″
falselight
08.05.19
✎
14:52
Все как нужно!
falselight
08.05.19
✎
14:52
(33) «шт» — тут какой может быть пробел?
palsergeich
08.05.19
✎
14:53
(32) Да посрать что это)
Один раз шт. создал, во второй ее точно создавать не будешь. Ну и закешируй.
Это хотя бы с точки зрения оптимизации очевидное решение.
А так как телепатические митохондрии на сегодня у меня устали могу сказать одно.
Или делай устойчивый пример с ошибкой, которую можно воспроизвести на демо, или иди на v8@1c.ru
palsergeich
08.05.19
✎
14:54
(34) Да понятия не имею.
Без кода, без возможности воспроизвести — это шоу «Экстрасенсы»
mikecool
08.05.19
✎
14:54
надо больше восклицательных знаков и меньше рассказывать о проблеме!!!
falselight
08.05.19
✎
14:55
(38)
Если МассивКолонок[4] <> «» Тогда
НайденнаяБазоваяЕдиницаИзмерения = Справочники.БазовыеЕдиницыИзмерения.НайтиПоНаименованию(МассивКолонок[4], 1);
Если НайденнаяБазоваяЕдиницаИзмерения <> Справочники.БазовыеЕдиницыИзмерения.ПустаяСсылка() Тогда
ЭлементНоменклатуры.ЕдиницаИзмерения = НайденнаяБазоваяЕдиницаИзмерения;
КонецЕсли;
КонецЕсли;
НЕА123
08.05.19
✎
14:57
а мне нравится ветка. настоящая пятница.
palsergeich
08.05.19
✎
14:57
(40) И что?
Может У тебя СТРРАЗДЕЛИТЬ(Строка,»,»,Истина)
falselight
08.05.19
✎
14:58
(37) Шт есть в справочнике, не создавал, а просто нахожу
palsergeich
08.05.19
✎
14:58
(42) Ой Может У тебя СТРРАЗДЕЛИТЬ(Строка,»,»,ЛОЖЬ)
Баз кода полного и нормального примера иди на v8@1c.ru
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;
КонецЦикла;
ЗафиксироватьТранзакцию();
Сообщить(«Загружено: » + СТРОКА(СчЭл) + » элементов.»);
КонецПроцедуры
//
mikecool
08.05.19
✎
15:00
(44) не, надо сразув Кремль писать )
falselight
08.05.19
✎
15:02
Вот. Все работает. Но иногда идет эта ошибка и все, на таких же данны!
http://joxi.ru/Vm6GePvf4jOba2
sqr4
08.05.19
✎
15:04
отладка — останавливать по ошибке
trad
08.05.19
✎
15:04
вангую, есть попытка в функции РазложитьСтрокуВМассивПодстрок()
sqr4
08.05.19
✎
15:04
Ты ведь это делал да
lodger
08.05.19
✎
15:04
Если МассивКолонок[4] <> «» Тогда
поменять на
Если ТипЗнч(МассивКолонок[4]) = Тип(«Строка») И НЕ ПустаяСтрока(МассивКолонок[4]) Тогда
kda26
08.05.19
✎
15:05
(47) Добавить в условие проверку на Неопределено
falselight
08.05.19
✎
15:11
(48) я так и останавливаюсь на строке 2000 с лишним
(51)(52) Да можно многого добавить, но я же смотрю в отладчике, в функцию передаются верные данные, а идет ошибка.
Добавлю конечно проверки.
sqr4
08.05.19
✎
15:12
а ну и тестирование исправление, кэш и прочая фигня
falselight
08.05.19
✎
15:13
(54) Даже для пустой базы? Я туда ни разу ещё не загрузил эти элементы номенклатуры.
sqr4
08.05.19
✎
15:15
(55) не знаю. у меня правило, если происходит неведомая херня, нужно сначала делать это, а потом только лезть за бубном
falselight
08.05.19
✎
15:16
(56) Обычно, сколько кэш не чистил не помогало (
sqr4
08.05.19
✎
15:18
(57) ну тогда вперед к админам за снастью если своей нет и вызывать помощника.
Галахад
08.05.19
✎
15:19
(47) Точно останова явно не на ошибке.
sqr4
08.05.19
✎
15:21
(59) кстати да
falselight
08.05.19
✎
15:21
Кэш почищу сейчас догрузится.
Стоит галка останавливаться по ошибке.
Ошибка видимо возникает при записи элемента.
Я смотрю что там в нем, вижу проблему в единицах измерения и родителе.
Но из за чего не пойму.
sqr4
08.05.19
✎
15:23
(61) чё мля
sqr4
08.05.19
✎
15:23
иди накуй…
palsergeich
08.05.19
✎
15:24
(61) платформенная проверка какая то.
Сделай обменДанными.загрузка = истина.
Потом глазами увидишь
falselight
08.05.19
✎
15:24
Стоит галка при отладке останавливаться по ошибке. Вот на ней и вылетает.
falselight
08.05.19
✎
15:24
(64) А это где сделать?
palsergeich
08.05.19
✎
15:25
Спр = создать элемент или ПолучитьОбъект
Спр.обменДанными.загрузка = истина
Спр.записать()
palsergeich
08.05.19
✎
15:26
Ход такой
falselight
08.05.19
✎
15:26
(67) А что именно это даст?
palsergeich
08.05.19
✎
15:26
(69) отключит платформенные проверки
palsergeich
08.05.19
✎
15:27
У тебя ошибка не в найти по наименованию, а некорректная обработка исключения ранее
palsergeich
08.05.19
✎
15:28
Или ошибка заполнения обязательных на уровне платформы полей: наименование, владелец (если справочник подчинённый) и тд
falselight
08.05.19
✎
15:28
(71) У меня же нет попытки исключения?
Да ранее я вижу что в родителе и единицах измерения.
Но туда идут нормальные данные. Буду разбираться.
Видимо энергия ушла.
falselight
08.05.19
✎
15:29
(72) Единицу измерения обязательно заполнять, выдавать ошибку стоит.
palsergeich
08.05.19
✎
15:29
(74) это не валило бы в исключение
palsergeich
08.05.19
✎
15:32
(74) технически это отказ=истина в процедуре ПроверкаЗаполнения, но не исключение
trad
08.05.19
✎
15:34
(73) см (49)
falselight
08.05.19
✎
15:38
(77)
Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = «,»)
МассивСтрок = Новый Массив();
Если Разделитель = » » Тогда
Стр = СокрЛП(Стр);
Пока Истина Цикл
Поз = Найти(Стр,Разделитель);
Если Поз=0 Тогда
МассивСтрок.Добавить(Стр);
Возврат МассивСтрок;
КонецЕсли;
МассивСтрок.Добавить(Лев(Стр,Поз-1));
Стр = СокрЛ(Сред(Стр,Поз));
КонецЦикла;
Иначе
ДлинаРазделителя = СтрДлина(Разделитель);
Пока Истина Цикл
Поз = Найти(Стр,Разделитель);
Если Поз=0 Тогда
МассивСтрок.Добавить(Стр);
Возврат МассивСтрок;
КонецЕсли;
МассивСтрок.Добавить(Лев(Стр,Поз-1));
Стр = Сред(Стр,Поз+ДлинаРазделителя);
КонецЦикла;
КонецЕсли;
КонецФункции
falselight
08.05.19
✎
15:54
palsergeich
08.05.19
✎
15:55
Я ж говорю — платформенные проверки
hhhh
08.05.19
✎
16:01
(79) наверно в поле группа фигачишь элемент. Такое 1с не прощает.
Галахад
08.05.19
✎
16:19
Это какая-то Санта-Барбара…
falselight
08.05.19
✎
16:33
(81) В родителя всмысле??????
hhhh
08.05.19
✎
16:39
(83) в общем пройдись по справочнику номенклатуры где-то есть одинаковое наименование у элемента и группы. Или если самому лень, посади за проверку девочку-восьмиклассницу, пусть проштудирует справочник от и до.
falselight
08.05.19
✎
16:41
(81) Не должно такого быть.
(84) Гружу структуру из другой базы. Я пока не могу записать ни одного элемента. Так как грузится в транзакции.
Мне не лень. Я пытаюсь разобраться. Но такого не могло в принципе быть. Надеюсь докапаться до проблемы.
falselight
08.05.19
✎
16:43
(84) смотрю в файле не нахожу.
Поставил останавливаться по ошибке.
Остановка же будет на проблемном элементе?
Ну вот, пока я в отладчеке не увидел там проблемы.
mikecool
08.05.19
✎
16:44
(82) +100500 серия )
falselight
08.05.19
✎
16:46
(87) Хорошо, у вас в 1с все всегда хорошо работает!
mikecool
08.05.19
✎
16:48
(88) да, как то загрузки из текстовых файлов с одного прохода отладки работают
hhhh
08.05.19
✎
16:49
(85) ну, грузи без транзакции, ну ты чудик.
mikecool
08.05.19
✎
16:49
а ветка больше на бложек похожа
falselight
08.05.19
✎
16:50
(90) Ошибку нужно отловить. Мне нужно что бы все хорошо грузилось. Пока первичные данные.
Потом остальное ещё цеплять.
И так долго грузится. Без транзакции ещё дольше будет.
Я же отлаживаю.
mikecool
08.05.19
✎
16:51
«И так долго грузится.» — сделай примеры покороче, делов то
Масянька
08.05.19
✎
16:53
Лучше день потерять — зато потом за пять минут долететь (С)
sqr4
08.05.19
✎
16:54
(92) без запросов в цикле еще быстрее
Rovan
08.05.19
✎
16:54
(9) привычка писать 1 вместо «истина» выдает «клюшечника» со стажем
falselight
08.05.19
✎
16:55
вот не находится группа сыр и идет ошибка
ошибка из за ошибки что выдает функция, а она должна либо находить элемент или возвращать пустую ссылку
http://joxi.ru/gmvaZ43tqv5b5r
falselight
08.05.19
✎
16:55
(96) Это никакого значения не имеет.
falselight
08.05.19
✎
16:56
Что с этим (97) делать. Реально не вижу в чем проблема?!!!
Rovan
08.05.19
✎
16:59
(97) а полностью ошибка вероятно звучит так
Ошибка при вызове метода контекста (НайтиПоНаименованию): В данной транзакции уже происходили ошибки!
https://downloads.v8.1c.ru/content/Conversion/ErrConversion_2_0_24_1.htm
Rovan
08.05.19
✎
17:00
(+100) весь блок надо поставить а Попытку и поймать Исключение —
там и будет корень зла !
falselight
08.05.19
✎
17:03
(100) Да и такие строки есть.
Только в окне сообщения в режиме предприятия.
Закрыть или перезагрузить с вопросом.
falselight
08.05.19
✎
17:03
(101) Весь код процедуры что ли?
falselight
08.05.19
✎
17:29
Наверное запись элемента нужно заключать в попытку исключение.
falselight
08.05.19
✎
17:34
Похоже, да!!!!! В родителя писался элемент с ЭтоГруппа = Ложь
hhhh
08.05.19
✎
17:45
(105) вообще выкинь НайтиПоНаименованию. Ищи запросом и указывай там ЭтоГруппа = Истина;
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С.
Ошибка при вызове метода контекста(?)
Автор Damates, 18 дек 2012, 20:30
0 Пользователей и 1 гость просматривают эту тему.
Есть такой код:
НайтиТО=Справочники.Тарифы.НайтиПоНаименованию(«ТО»);//находит
ЗначениеТО=РегистрыСведений.Тарифы.ПолучитьПоследнее(КонПериода,НайтиТО);
Сообщить(ЗначениеТО.Ресурс1);//ресурс в регистре сведений
Выдает ошибку:
{Справочник.Лицевые.Форма.ФормаСписка.Форма(79)}: Ошибка при вызове метода контекста (ПолучитьПоследнее)
ЗначениеТО=РегистрыСведений.Тарифы.ПолучитьПоследнее(КонПериода,НайтиТО);
по причине:
Несоответствие типов (параметр номер ‘2’)
Измерение в регистре сведений берется из справочника Тарифы. В чем проблема? Подскажите , пожалуйста!
Второй параметр должен быть: (И снова приходиться цитировать СП… =( , ну неужели клавиша F1 на клавиатуре заблокирована)
ПолучитьПоследнее (GetLast)
Синтаксис:
ПолучитьПоследнее(<КонецПериода>, <Отбор>)
Параметры:
<КонецПериода> (необязательный)
Тип: Дата; МоментВремени; Граница.
Определяет момент времени, по который необходимо получить значения ресурсов. Может задаваться значениями типа Дата, МоментВремени или Граница. Если параметр не указан, то будут возвращены значения ресурсов самой последней записи регистра.
<Отбор> (необязательный)
Тип: Структура.
Структура, содержащая отбор по измерениям регистра. Имя ключа структуры должно совпадать с именем измерения регистра, заданного в конфигураторе, а значение элемента структуры — задает отбираемое по данному измерению значение.
Структура дополнительно может иметь элементы, соответствующие разделителям регистра с уровнем разделения НезависимоИСовместно, в состав которых входит регистр. Если такой элемент структуры задан для используемого в сеансе разделителя, значение для этого элемента должно совпадать со значением разделителя, иначе будет вызвано исключение.
Если параметр не указан, то отбор не используется.
Если долго всматриваться в учебник…то в голову может прийти мысль его открыть!
Спасибо! Все понял Сделал так:
НайтиТО=Справочники.Тарифы.НайтиПоНаименованию(«ТО»);
//Сообщить(НайтиТО);
Тариф = Новый Структура;
Тариф.Вставить(«Тариф», НайтиТО);
ЗначениеТО=РегистрыСведений.Тарифы.ПолучитьПоследнее(КонПериода,Тариф);
Сообщить(ЗначениеТО.Ресурс1);
Фишка: Структура, содержащая отбор по измерениям регистра. Имя ключа структуры должно совпадать с именем измерения регистра, заданного в конфигураторе, а значение элемента структуры — задает отбираемое по данному измерению значение.
|
|
|
Правила раздела:
- Перед тем, как задать вопрос, желательно почитать документацию и воспользоваться поиском.
- Когда задаёте вопрос, то обязательно указывайте платформу (7.7, 8.0, 8.1, 8.2, etc), причем желательно в заголовке. Если речь идёт о типовой конфигурации, то указывайте её название и релиз. Текущие версии можно посмотреть здесь.
- Ещё раз напоминаем о необходимости соблюдать не только правила, но и законы. Уважайте авторские права.
Высказать своё мнение о модераторах раздела можно здесь: evGenius
1С 8.1 Добавление записи в табличную часть справочника
- Подписаться на тему
- Сообщить другу
- Скачать/распечатать тему
|
|
Senior Member Рейтинг (т): 0 |
Как сделать сабж? |
evGenius |
|
НоваяСтрокаТабЧасти = ЭлементСправочника.НазваниеТабличнойЧасти.Добавить(); |
hawk1 |
|
Senior Member Рейтинг (т): 0 |
{Документ.ПриходнаяНакладная.Форма.ФормаДокумента(18)}: Ошибка при вызове метода контекста (Добавить): Объект недоступен для изменения. |
Outlander |
|
что такое СпрСкладыТаблЧасть? |
hawk1 |
|
Senior Member Рейтинг (т): 0 |
СпрСкладыТаблЧасть = Справочники.Склады.НайтиПоНаименованию(Склад).НаличиеМатериалов; |
evGenius |
|
СпрСкладыТаблЧасть = Справочники.Склады.НайтиПоНаименованию(Склад).ПолучитьОбъект().НаличиеМатериалов; |
hawk1 |
|
Senior Member Рейтинг (т): 0 |
СпрСкладыТаблЧасть = Справочники.Склады.НайтиПоНаименованию(Склад).ПолучитьОбъект().НаличиеМатериалов; Для каждого СтрТаблЧасти Из ПереченьМатериалов Цикл НайденнаяСтрока = СпрСкладыТаблЧасть.Найти(СтрТаблЧасти.Материал,»Материал»); Если НайденнаяСтрока = Неопределено Тогда НоваяСтрока = СпрСкладыТаблЧасть.Вставить(1); НоваяСтрока.Количество = СтрТаблЧасти.Количество; НоваяСтрока.Материал = СтрТаблЧасти.Материал; Иначе НайденнаяСтрока.Количество = НайденнаяСтрока.Количество + СтрТаблЧасти.Количество; КонецЕсли; КонецЦикла; Но ниче не добавляется. |
evGenius |
|
А записывать кто будет элемент справочника? |
hawk1 |
|
Senior Member Рейтинг (т): 0 |
Справочники.Склады.НайтиПоНаименованию(Склад).ПолучитьОбъект().Записать(); Так? |
Outlander |
|
не совсем так ты получишь новую версию объекта |
hawk1 |
|
Senior Member Рейтинг (т): 0 |
Как же? |
Outlander |
|
СпрСклад = Справочники.Склады.НайтиПоНаименованию(Склад).ПолучитьОбъект(); СпрСкладыТаблЧасть = СпрСклад.НаличиеМатериалов; …. СпрСклад.Записать(); |
evGenius |
|
Мндаааа… Книжки — наше всё. |
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
- Предыдущая тема
- 1С: Проблемы и решения
- Следующая тема
[ Script execution time: 0,0657 ] [ 15 queries used ] [ Generated: 21.09.23, 05:23 GMT ]