Запись периодического реквизита в справочнике! 1С 7.7 не типовая

Внимание! Тема закрыта. Добавлять сообщения в закрытую тему запрещено.
1. Nikkkkk 25.09.15 15:11 Сейчас в теме
Добрый день! Помогите записать периодический реквизит справочника!!!
Что не так делаю?
Excel = СоздатьОбъект("Excel.Application");  
	
	НазваниеФайла = ФАЙЛ;
	
	Excel.Workbooks.Open(НазваниеФайла); 
	
	Книга = Excel.ActiveWorkbook;
	
	Строк = Excel.Cells.CurrentRegion.Rows.Count;
	
	СпрОС = СоздатьОбъект("Справочник.ОсновныеСредства");  
	СпрСотрудники  = СоздатьОбъект("Справочник.Сотрудники"); 
	
	Для х = 1 По Строк Цикл
		
		НаименованиеТМЦ		    = СокрЛП(Строка(Excel.Cells(х, 1).Value));
		КодОС          			= СокрЛП(Строка(Excel.Cells(х, 2).Value));  
		ИнвНомер 				= СокрЛП(Строка(Excel.Cells(х, 3).Value));
		ВидОС       	        = СокрЛП(Строка(Excel.Cells(х, 4).Value));
		Подразделение 			= СокрЛП(Строка(Excel.Cells(х, 5).Value));
		ОтветственноеЛицо       = СокрЛП(Строка(Excel.Cells(х, 6).Value)); 
		КодМОЛ                  = СокрЛП(Строка(Excel.Cells(х, 7).Value));
		//Сначала ищем товар по коду, если не нашли по наименованию  
		Если СпрОС.НайтиПоКоду(КодОС) = 1 Тогда 
			НайдТовар = СпрОС.ТекущийЭлемент(); 
			Сообщить("Код " + НайдТовар + "" + КодОС);
			
			//******************************************************************************
			
			Если СпрСотрудники.НайтиПоКоду(СокрЛП(КодМОЛ)) = 1 Тогда
				  
				 СпрОС.ИспользоватьДату(ТекущаяДата()); 
			     СпрОС.МОЛ = ОтветственноеЛицо; 
				
				
				//Периодич = СоздатьОбъект("Периодический");
				//Периодич.ИспользоватьОбъект("МОЛ", НайдТовар); 
				//Сообщить("Код " + КодМОЛ + "" + СпрСотрудники);
				//Периодич.Значение= СпрСотрудники.Наименование;
				//Периодич.ДатаЗнач = ТекущаяДата();
				//Периодич.Записать();
				СпрОС.Записать();	
			Конецесли;
			//******************************************************************************
			
			//СпрОС.ИспользоватьДату(ТекущаяДата()); 
			//СпрОС.МОЛ = ОтветственноеЛицо; 
		Иначе
			
			Продолжить;
		Конецесли;
		
	Конеццикла;
	
	Excel.Workbooks.Close();
	
Показать
+
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Nikkkkk 25.09.15 15:11 Сейчас в теме
Записываю обработкой!
+
3. ditp 91 25.09.15 15:15 Сейчас в теме
спр.ПериодическийРеквизит.Установить(дата, значение)


Ну или (значение, дата), точно не помню.
+
9. Nikkkkk 25.09.15 15:29 Сейчас в теме
(3) ditp, Спасибо! Все получилось!!!
	СпрОС.МОЛ.Установить(ТекущаяДата(), СпрСотрудники.ТекущийЭлемент());

Вот так надо было!!!
+
4. MaxDavid 127 25.09.15 15:16 Сейчас в теме
А обработка находит МОЛ по коду?
+
5. Nikkkkk 25.09.15 15:17 Сейчас в теме
(4) MaxDavid, Да, находит!
СпрОС.МОЛ = СпрСотрудники.ТекущийЭлемент(); так тоже не прокатило...
+
6. jack19 148 25.09.15 15:24 Сейчас в теме
(5) Nikkkkk, Надо четко представлять, какой тип реквизита "МОЛ", чтобы что-то советовать.
+
7. Nikkkkk 25.09.15 15:26 Сейчас в теме
(6) jack19, МОЛ - Тип Справочник.Сотрудники
СпрОС.МОЛ = СпрСотрудники.ТекущийЭлемент(); - определяет но не записывает, пустой реквизит остается и не ругается.
+
10. Frogger1971 25.09.15 15:30 Сейчас в теме
(7) Nikkkkk, СпрОС.МОЛ.Установить(ТекущаяДата(), СпрСотрудники.ТекущийЭлемент())
+
8. warlock 25.09.15 15:28 Сейчас в теме
Может там периодический который меняется только документами? Нужно в свойствах реквизита посмотреть
+
11. warlock 25.09.15 15:32 Сейчас в теме
Вариант с ИспользоватьДату() тоже должен был отработать
+
12. Shaddie 25.09.15 15:39 Сейчас в теме
Да, только в таком случае нужно присваивать через: УстановитьАтрибут(<ИмяРеквизита>,<Значение>)
СпрОС.УстановитьАтрибут("МОЛ",ОтветственноеЛицо);
+
13. ditp 91 25.09.15 15:45 Сейчас в теме
(12) Shaddie, не обязательно.
+
14. Nikkkkk 25.09.15 16:41 Сейчас в теме
(13) ditp, Только что работало, а сейчас не находит СпрОС, (Если СпрОС.НайтиПоКоду(СокрЛП(КодОС)) = 1 Тогда ), что не так?
Процедура ВыбратьФайл()

   ИмяВыбрФайла = "";
   ИмяПути="";
   Если ФС.ВыбратьФайл(0, ИмяВыбрФайла, ИмяПути, "Выберите файл для загрузки",
           "Все файлы (*.*)!*.*", , ) = 1 Тогда
      Путь = ИмяПути + ИмяВыбрФайла;
   КонецЕсли;
	
КонецПроцедуры

//*******************************************
Процедура Сформировать()
	
	//Создаем ОЛЕ подключение к Excel
	Excel = СоздатьОбъект("Excel.Application");  
	
    НазваниеФайла = Путь;
	//Открываем файл
	Excel.Workbooks.Open(НазваниеФайла); 
	
	//Открываем активную книгу
	Книга = Excel.ActiveWorkbook;
	
	//Получааем количество строк в книге
	Строк = Excel.Cells.CurrentRegion.Rows.Count;
	
	//Создадим заранее объект справочника ТМЦ
	СпрОС = СоздатьОбъект("Справочник.ОсновныеСредства");  
	СпрСотрудники  = СоздатьОбъект("Справочник.Сотрудники"); 
	
	
	//Перебираем строки и обрабатываем данные
	Для х = 1 По Строк Цикл
		//Зная типы значений в колонках и перебирая строки получаем
		//необходимые значения и обрабатываем их   
		НаименованиеТМЦ		    = СокрЛП(Строка(Excel.Cells(х, 1).Value));
		КодОС          			= СокрЛП(Строка(Excel.Cells(х, 2).Value));  
		ИнвНомер 				= СокрЛП(Строка(Excel.Cells(х, 3).Value));
		ВидОС       	        = СокрЛП(Строка(Excel.Cells(х, 4).Value));
		Подразделение 			= СокрЛП(Строка(Excel.Cells(х, 5).Value));
		ОтветственноеЛицо       = СокрЛП(Строка(Excel.Cells(х, 6).Value)); 
		КодМОЛ                  = СокрЛП(Строка(Excel.Cells(х, 7).Value));
		//Сначала ищем товар по коду, если не нашли по наименованию  
		Если СпрОС.НайтиПоКоду(СокрЛП(КодОС)) = 1 Тогда 
			НайдТовар = СпрОС.ТекущийЭлемент(); 
			Сообщить("Код " + НайдТовар + "" + КодОС);
		
			Если СпрСотрудники.НайтиПоКоду(СокрЛП(КодМОЛ)) = 1 Тогда
				СпрОС.МОЛ.Установить(ТекущаяДата(), СпрСотрудники.ТекущийЭлемент());
				СпрОС.Записать();
				Сообщить();
			Конецесли;
		Иначе
			//Не нашли, продолжаем 
			//здесь можно создавать товар если надо
			Продолжить;
		Конецесли;
		
	Конеццикла;
	
	//После загрузки зарываем соединение с Excel
	Excel.Workbooks.Close();
	
КонецПроцедуры
Показать
+
15. ditp 91 25.09.15 16:46 Сейчас в теме
(14) Nikkkkk, без понятия.

Может, код кривой в екселе, может еще что-то, без исходных данных не понять.
+
16. MaxDavid 127 25.09.15 16:58 Сейчас в теме
(14) Nikkkkk, делай так
Если СпрСотрудники.НайтиПоКоду(СокрЛП(КодМОЛ)) = 1 Тогда
                СпрОС.МОЛ.Установить(ТекущаяДата(), СпрСотрудники.ТекущийЭлемент());
                СпрОС.Записать();
                Сообщить();
Иначе
Сообщить(КодМОЛ);
            Конецесли;
и разбирайся, что за данные приходят из экселя ))
+
17. Nikkkkk 25.09.15 17:09 Сейчас в теме
(16) MaxDavid, так он вот тут падает, тупо не видит что этот код есть в 1С.
Если СпрОС.НайтиПоКоду(СокрЛП(КодОС)) = 1 Тогда
+
35. vasyak319 150 25.09.15 18:01 Сейчас в теме
(16) MaxDavid, Сообщить(); в 7.7 не выводит пустую строку. Надо Сообщить(" "); или типа того (уже точно не помню - давно это было).
+
36. MaxDavid 127 25.09.15 18:25 Сейчас в теме
(35) vasyak319,
Сообщить(); в 7.7 не выводит пустую строку. Надо Сообщить(" "); или типа того (уже точно не помню - давно это было).
Спасибо, конечно, но именно эту строку я скопипастил у ТС ))
+
18. Frogger1971 25.09.15 17:15 Сейчас в теме
Если СпрСотрудники.НайтиПоКоду(СокрЛП(КодМОЛ)) = 1 Тогда

Поставь перед этим
Сообщить("+" + СокрЛП(КодМОЛ) + "+");

и будешь знать, где у тебя глюк
+
19. Nikkkkk 25.09.15 17:18 Сейчас в теме
(18) Frogger1971, так он не доходит сюда, выше падает
+
20. MaxDavid 127 25.09.15 17:20 Сейчас в теме
(19) Nikkkkk, значит, ОС по коду не находит ))
Что значит падает? С ошибкой, что ли?
+
21. Nikkkkk 25.09.15 17:22 Сейчас в теме
(20) MaxDavid, значит, ОС по коду не находит )) - а он есть, копирую КОД из Эксель в 1С и находит(((
+
24. MaxDavid 127 25.09.15 17:27 Сейчас в теме
(21) Nikkkkk,
       Если СпрОС.НайтиПоКоду(СокрЛП(КодОС)) = 1 Тогда 
            НайдТовар = СпрОС.ТекущийЭлемент(); 
            Сообщить("Код " + НайдТовар + "" + КодОС);
        
            Если СпрСотрудники.НайтиПоКоду(СокрЛП(КодМОЛ)) = 1 Тогда
                СпрОС.МОЛ.Установить(ТекущаяДата(), СпрСотрудники.ТекущийЭлемент());
                СпрОС.Записать();
                Сообщить();
            Конецесли;
        Иначе
            Сообщить("Не найдено ОС по коду " + КодОС);
            Продолжить;
        Конецесли;
Показать
+
22. Frogger1971 25.09.15 17:25 Сейчас в теме
КодОС = СокрЛП(Строка(Excel.Cells(х, 2).Value));

проверь, что у тебя здесь приходит из Экселя
+
23. Nikkkkk 25.09.15 17:26 Сейчас в теме
(22) Frogger1971, приходит нужное значение "0001851", есть в Ексель и 1С
+
25. MaxDavid 127 25.09.15 17:29 Сейчас в теме
(23) Nikkkkk,
приходит нужное значение "0001851", есть в Ексель и 1С
Сообщить("Код " + НайдТовар + "" + КодОС);
Вот эта строчка отрабатывает? ))
+
27. Nikkkkk 25.09.15 17:34 Сейчас в теме
(25) MaxDavid, Нет, эта отрабатывает
Сообщить("Не найдено ОС по коду " + КодОС);
+
29. MaxDavid 127 25.09.15 17:38 Сейчас в теме
(27) Nikkkkk, ну так что ж ты хочешь? ОС не найдено, МОЛ не присвоен ))
Может, вместо нуля О стоит?
Может, код в 1с числовой, а не текстовый?
Какая длина кода в 1С?
+
30. Nikkkkk 25.09.15 17:41 Сейчас в теме
(29) MaxDavid, Длина 7, Текстовый, я из экселя копирую в поисковую строку в 1С и все нормал, находит, может комп рестарнуть?))
+
32. Frogger1971 25.09.15 17:42 Сейчас в теме
(30) Nikkkkk, "если ничего не помогает, попробуйте перезагрузить компьютер!"
+
26. Frogger1971 25.09.15 17:33 Сейчас в теме
(23) Nikkkkk,
приходит нужное значение "0001851", есть в Ексель и 1С

в 1С есть ТриНуля1851? или ЧетыреНуля1851, или ПятьНулей1851
поиск идет по полному коду. а не по его части
+
28. Nikkkkk 25.09.15 17:37 Сейчас в теме
(26) Frogger1971, Сообщает то он нормальный код "Не найдено ОС по коду 0001851", тогда бы этот то нашел бы "Не найдено ОС по коду s000001"
+
31. Frogger1971 25.09.15 17:41 Сейчас в теме
НайтиПоКоду(<?>,);
Синтаксис:
НайтиПоКоду(<Код>,<ФлагПоиска>)
Назначение:
Найти элемент справочника по коду.
Возвращает: 1 - если действие выполнено;
0 - если действие не выполнено (элемент не найден).
Параметры:
<Код> - выражение со значением искомого кода,
<ФлагПоиска> - флаг поиска (необязателен):
0 - поиск во всем справочнике вне зависимости от родителя;
1 - поиск внутри установленного подчинения (родителя);
2 - поиск по полному коду через разделитель.
Значение по умолчанию:
0 - если код уникален во всем справочнике;
2 - если код уникален только в группе.
Замечание:
Метод можно использовать только для объектов, созданных функцией СоздатьОбъект.
Показать


Если СпрОС.НайтиПоКоду(СокрЛП(КодОС,0)) = 1 Тогда
+
33. Nikkkkk 25.09.15 17:45 Сейчас в теме
(31) Frogger1971, Вот оно, вот что нужно было!
Если СпрОС.НайтиПоКоду(СокрЛП(КодОС,0)) = 1 Тогда
помогло!!! Спасибо!
+
34. Nikkkkk 25.09.15 17:46 Сейчас в теме
(31) Frogger1971, тут
Если СпрСотрудники.НайтиПоКоду(СокрЛП(КодМОЛ)) = 1 Тогда
так же сделать?
+
37. Shreki2015 2 01.10.15 17:45 Сейчас в теме
СпрСотрудники.ТекущийЭлемент()
это что такое? что ты присваиваешь? не открыта выбора справочника сотрудников и на найден нужный элемент.
а остальное все правильно.
+
38. warlock 02.10.15 09:59 Сейчас в теме
(37) Shreki2015, там же есть
СпрСотрудники.НайтиПоКоду(СокрЛП(КодМОЛ))
+
39. Shreki2015 2 05.10.15 12:45 Сейчас в теме
(38) warlock, проверь открыта ли выборка справочника перед поиском
и... поиск может не отработать. может не найтись элемент
+
40. akita 05.10.15 17:28 Сейчас в теме
(39) Shreki2015, для поиска выборка не нужна, нужно только правильно указать как искать, во всём справочнике или в зависимости от родителя...
+
41. Nikkkkk 12.10.15 12:43 Сейчас в теме
Всем спасибо! Тему закрываю!
+
Внимание! Тема сдана в архив

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