Задано неправильное имя атрибута структуры при проведении документа.

1. Stanislav1993 06.03.19 10:47 Сейчас в теме
Здравствуйте, коллеги.
Имеется документ, который считывает данные файла с расширением
.html

После считывания, данные были успешно добавлены в табличную часть, но при проведении документа вылезает ошибка.
{Документ.ПриходУход2.МодульОбъекта(30)}: Ошибка при вызове метода контекста (Свойство)
		Если ПредДанные.Свойство(Назв) Тогда
по причине:
Задано неправильное имя атрибута структуры
Задано неправильное имя атрибута структуры

Имеется предположение причина тому , что сотрудника нет в системе.
Ваше мнение?
Спасибо заранее.
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. signum2009 1032 06.03.19 10:53 Сейчас в теме
Надо код видеть, скорее всего проблема в переменной Назв, может в ней значение Неопределено ?
4. Stanislav1993 06.03.19 10:56 Сейчас в теме
(2)

Процедура ОбработкаПроведения(Отказ, Режим)
	ПервЧисНастМесяца = НачалоМесяца(Дата);
	ПослЧисНастМесяца = КонецМесяца(Дата);	
	ПредМесяц =  ДобавитьМесяц(Дата,-1);
	СледМесяц =  ДобавитьМесяц(Дата,1);
	ПервЧисСледМесяца = НачалоМесяца(СледМесяц);
	ПослЧисПРедМесяца = КонецМесяца(ПредМесяц);
	Нов = СортировкаДанных();
	ПредДанные = Новый Структура();
	Колво=0;
	ТабПосещений = Новый ТаблицаЗначений();
	ТабПосещений.Колонки.Добавить("Сотрудник");
	ТабПосещений.Колонки.Добавить("Часы");
	ТабПосещений.Колонки.Добавить("Дата");
	ТабПосещений.Колонки.Добавить("Отдел");
	ТабПосещений.Колонки.Добавить("ДатаД");	
	Для Сч = 0 По Нов.Количество()-1 Цикл
		Назв = УдалитьПробелы(Строка(Нов[сч].Сотрудник));		
		ФИО = Нов[сч].Сотрудник;
		Если ФИО <> Справочники.Сотрудники.ПустаяСсылка() И Лев(СокрЛП(ФИО),18) <> "<Объект не найден>" Тогда 
			Отдел = ФИО.ПолучитьОбъект().Должность;
		Если Отдел = Справочники.Должность.НайтиПоНаименованию("Отдел дизайна") ИЛИ Отдел = Неопределено ИЛИ Отдел = Справочники.Должность.ПустаяСсылка() ИЛИ Отдел = "" Тогда	
			Если Колво<>0 Тогда
				Имя = Строка(Нов[сч-1].Сотрудник);
				ДобавитьВРегистр(ПредДанные,Имя,Колво);
				Колво = 0;
			КонецЕсли;
		Иначе	
		Если ПредДанные.Свойство(Назв) Тогда
				СчПразд = 0;
		Если Нов[сч].ТипДействия = Перечисления.ОперацияСТурникетом.Пришел  И НачалоДня(Нов[сч].ВремяСессии) = ПервЧисСледМесяца  Тогда
			ИначеЕсли Нов[сч].ТипДействия = Перечисления.ОперацияСТурникетом.Пришел       Тогда
				ПредДанные[Назв].Время = Нов[сч].ВремяСессии;
				ПредДанные[Назв].ТипДействия = Нов[сч].ТипДействия;
				ПредДанные[Назв].Бейдж = Нов[сч].НомерБейджика;
			ИначеЕсли Нов[сч].ТипДействия = Перечисления.ОперацияСТурникетом.Ушел И ПредДанные[Назв].ТипДействия=Перечисления.ОперацияСТурникетом.Пришел Тогда	
				МассивПр = НайтиВсеПраздники();
				Если МассивПр <> Неопределено Тогда
					Если Отдел <> Справочники.Должность.НайтиПоНаименованию("Плановый отдел") Тогда

					Для сч2 = 0 По МассивПр.Количество()-1   Цикл 
						Если НачалоДня(Нов[сч].ВремяСессии)  = МассивПр[сч2] Тогда					
							СчПразд = 1;
							Прервать;
						ИначеЕсли НачалоДня(ПредДанные[Назв].Время) = МассивПр[сч2]  Тогда
							Если НайтиТретьюСмену(ПредДанные[Назв].Время) = 1 Тогда
								СчПразд = 0;
							Иначе
								СчПразд = 1;
								Прервать;
							КонецЕсли;
									ИначеЕсли НачалоДня(ПредДанные[Назв].Время) = МассивПр[сч2]+60 * 60 * 24 Тогда
							Если НайтиТретьюСмену(ПредДанные[Назв].Время) = 1 Тогда
								СчПразд = 1;
							Иначе
								СчПразд = 0;
							КонецЕсли;
						Иначе 
							СчПразд = 0;
						КонецЕсли;
					КонецЦикла;  
					Иначе
					КонецЕсли;
				КонецЕсли;
				Если СчПразд = 1 Тогда
					    ЧасКол = НайтиРазностьДат(ПредДанные[Назв].Время,Нов[сч],1);
						Колво = Колво+ЧасКол;
						НовСтр = ТабПосещений.Добавить();
						НовСтр.Сотрудник = Справочники.Сотрудники.НайтиПоНаименованию(Строка(Нов[сч-1].Сотрудник));
						Если НовСтр.Сотрудник <> Справочники.Сотрудники.ПустаяСсылка() Тогда
						НовСтр.Отдел = НовСтр.Сотрудник.ПолучитьОбъект().Должность;         
						КонецЕсли;
						Если ЧасКол < 0 Тогда
							НовСтр.Часы = 0;
						Иначе							
							НовСтр.Часы = ЧасКол;					
						КонецЕсли;
						Если НайтиТретьюСмену(Нов[сч-1].ВремяСессии)= 1 Тогда 
							НовСтр.ДатаД = Нов[сч-1].ВремяСессии - 3600*24;
						Иначе
							НовСтр.ДатаД = Нов[сч-1].ВремяСессии;					
				     	КонецЕсли;
                        НовСтр.Дата = Формат(НовСтр.ДатаД,"ДЛФ=Д");  
					Иначе
						Колво = Колво+НайтиРазностьДат(ПредДанные[Назв].Время,Нов[сч],0);
						ЧасКол1 =  НайтиРазностьДат(ПредДанные[Назв].Время,Нов[сч],0);
						НовСтр = ТабПосещений.Добавить();
						НовСтр.Сотрудник = Справочники.Сотрудники.НайтиПоНаименованию(Строка(Нов[сч-1].Сотрудник));
						Если НовСтр.Сотрудник <> Справочники.Сотрудники.ПустаяСсылка() Тогда
						НовСтр.Отдел = НовСтр.Сотрудник.ПолучитьОбъект().Должность;         
						КонецЕсли;
						Если ЧасКол1 < 0 Тогда
							НовСтр.Часы = 0;
						Иначе		
							НовСтр.Часы = ЧасКол1;			
						КонецЕсли;
							Если НайтиТретьюСмену(Нов[сч-1].ВремяСессии)= 1 Тогда 
							НовСтр.ДатаД = Нов[сч-1].ВремяСессии - 3600*24;
						Иначе
							НовСтр.ДатаД = Нов[сч-1].ВремяСессии;					
				     	КонецЕсли;
                         НовСтр.Дата = Формат(НовСтр.ДатаД,"ДЛФ=Д");  

						КонецЕсли;
					ПредДанные[Назв].Время = Нов[сч].ВремяСессии;
					ПредДанные[Назв].ТипДействия = Нов[сч].ТипДействия;
					ПредДанные[Назв].Бейдж = Нов[сч].НомерБейджика;		
			КонецЕсли;
		Иначе
			Если Колво<>0 Тогда
				Имя = Строка(Нов[сч-1].Сотрудник);
				//ДобавитьВРегистр(ПредДанные,Имя,Колво);
				ТабПосещений.Добавить();
				Колво = 0;
				СчПразд = 0;
			КонецЕсли;
			ПредДанные.Вставить(Назв,Новый Структура());
			ПредДанные[Назв].Вставить("ТипДействия",Нов[сч].ТипДействия);
			ПредДанные[Назв].Вставить("Время",Нов[сч].ВремяСессии);
			ПредДанные[Назв].Вставить("Бейдж",Нов[сч].НомерБейджика);
			СчПразд = 0;
		КонецЕсли;
		КонецЕсли;
	КонецЕсли;
КонецЦикла; 
	ТабПосещений.Сортировать("Сотрудник Возр,Дата Возр");
	ТабПосещений.Свернуть("Сотрудник,Дата","Часы");
    Хранилище = Новый ХранилищеЗначения(ТабПосещений, Новый СжатиеДанных(9));
	Константы.ВременноеХранилище.Установить(Хранилище);
КонецПроцедуры

Показать
6. signum2009 1032 06.03.19 11:04 Сейчас в теме
(4)
Назв = УдалитьПробелы(Строка(Нов[сч].Сотрудник));


Проблема с переменной Назв, т.к. это ключ, то он должен задаваться по правилам

Ключ устанавливаемого элемента. Ключ должен соответствовать правилам, установленным для идентификаторов:
Первым символом ключа должна быть буква или символ подчеркивания (_).
Каждый из последующих символов может быть буквой, цифрой или символом подчеркивания (_).


а он как видно выгружается, может пробел или цифра впереди
RomanIvanov; +1 Ответить
8. Stanislav1993 06.03.19 11:07 Сейчас в теме
(6)Могли бы Вы подсказать как именно исправить?
10. signum2009 1032 06.03.19 11:30 Сейчас в теме
(8) Посмотрите в отладке или выведите в лог значение переменной Назв

Назв = УдалитьПробелы(Строка(Нов[сч].Сотрудник));


Конкретно, чем она записывается в этой строке, а там уже решайте что делать...
11. YannikAlx 27 06.03.19 11:46 Сейчас в теме
(10) А вы не думаете , что если в структуру не добавлено ничего после
 ПредДанные = Новый Структура();

то ошибка будет всегда , при попытке обратится к недобавленному свойству?

Может я не прав?
16. signum2009 1032 06.03.19 12:00 Сейчас в теме
(11)
Вот этот код
	Назв = "КакоеТоСвойство";
	ПредДанные = Новый Структура(); 
    ПредДанные.Свойство(Назв) 


к ошибке не приводит
а этот
	Назв = "1234КакоеТоСвойство";
	ПредДанные = Новый Структура(); 
   ПредДанные.Свойство(Назв) 

приводит

как и этот

	Назв = "";
	ПредДанные = Новый Структура(); 
    ПредДанные.Свойство(Назв) 
RomanIvanov; гвость; +2 Ответить
7. alex-l19041 8 06.03.19 11:06 Сейчас в теме
(4) Чем заполняется ПредДанные ?
между ПредДанные = Новый Структура();
и ПредДанные.Свойство(Назв)
не вижу....
3. SedovSU@mail.ru 298 06.03.19 10:54 Сейчас в теме
Сама ошибка кроется в следующем. У вас ПредДанные - это структура, есть у вас переменная Назв, так вот то значение которое храниться в переменной Назв - ее нету в структуре - поэтому и ошибка
YannikAlx; +1 Ответить
5. Stanislav1993 06.03.19 10:58 Сейчас в теме
(3)Такая ошибка вылезла именно сегодня.
В предыдущих проводках, которые делаются раз в месяц не было такой ошибки.
Суть в чем: выгружается файл с базы проходной.
В 1с есть документ "Приходуход". Данные загружаются через выгруженный файл.
Потом я делаю проводку и на его основе я создаю табеля учета рабочего времени.
9. YannikAlx 27 06.03.19 11:29 Сейчас в теме
(5) А раньше могло работать если выполнялось только это

 Если Отдел = Справочники.Должность.НайтиПоНаименованию("Отдел дизайна") ИЛИ Отдел = Неопределено ИЛИ Отдел = Справочники.Должность.ПустаяСсылка() ИЛИ Отдел = "" Тогда    
            Если Колво<>0 Тогда
                Имя = Строка(Нов[сч-1].Сотрудник);
                ДобавитьВРегистр(ПредДанные,Имя,Колво);
                Колво = 0;
            КонецЕсли;
        Иначе   


А сейчсас ушло в ИНАЧЕ
А там пустая структура без единого ключа ПредДанные
И ясно что выскакивает ошибка при попытке обратиться к несуществующим ключам структуры
12. Stanislav1993 06.03.19 11:52 Сейчас в теме
(9) Даже не знаю, как исправить..
15. YannikAlx 27 06.03.19 12:00 Сейчас в теме
(12) Вам нужно добавить в структуру ПредДанные свойства примерно как в (14)
13. Stanislav1993 06.03.19 11:57 Сейчас в теме
(9)Ошибка выскочила в первые. Раньше такого не наблюдалось.
14. YannikAlx 27 06.03.19 11:58 Сейчас в теме
Вы сами писали этот код?
Что-то мне подсказывает что нет, раз вы не видите вот этого

 ПредДанные.Вставить(Назв,Новый Структура());
            ПредДанные[Назв].Вставить("ТипДействия",Нов[сч].ТипДействия);
            ПредДанные[Назв].Вставить("Время",Нов[сч].ВремяСессии);
            ПредДанные[Назв].Вставить("Бейдж",Нов[сч].НомерБейджика);
17. Stanislav1993 06.03.19 12:01 Сейчас в теме
(14)Этот модуль не я писал.
Того кто писал, уже давно не работает.
19. SedovSU@mail.ru 298 06.03.19 12:04 Сейчас в теме
(17) Вы поставить точку остановки и посмотрите какое значение передается в переменной Назв. Скорее всего у вас или не определено или наименование, например с тире или другим каким то не допустимым символов

Вот тут отладку сделаейте
{Документ.ПриходУход2.МодульОбъекта(30)}: Ошибка при вызове метода контекста (Свойство)
Если ПредДанные.Свойство(Назв) Тогда
по причине:
Задано неправильное имя атрибута структуры
Задано неправильное имя атрибута структуры
18. Stanislav1993 06.03.19 12:04 Сейчас в теме
(14)Этот кусок кода написан в самом конце.
Прикрепленные файлы:
20. YannikAlx 27 06.03.19 12:10 Сейчас в теме
У вас ошибка выскакивает в 30строке
  Если ПредДанные.Свойство(Назв) Тогда  
                СчПразд = 0;


Погорячился насчет совсем...
В отладке посмотрите что в этой строке имеете в Назв
21. singlych 06.03.19 13:06 Сейчас в теме
Делайте ПредДанные соответствием и суйте в ключ прям ссылку на сотрудника.
23. Stanislav1993 06.03.19 13:12 Сейчас в теме
(21)Пока понятия не имею как это сделать
22. Stanislav1993 06.03.19 13:11 Сейчас в теме
Значит проблема может быть все таки в том, что если сотрудника нет в системе?
24. makfromkz 35 09.03.19 06:12 Сейчас в теме
А что пишет отладчик в режиме Остановка по ошибке Включена ?
Он же тогда покажет строку с ошибкой в которой можно всё посмотреть.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот