загрузка файла Excel в 1с, артикул

1. YA_1446545432 02.08.24 12:42 Сейчас в теме
по началу нужно было написать обработку для загрузки excel файла в 1с, потом создать программно папку и подпапку в которую записать номенклатуру с файла. и короче сейчас нужно взять справочник номенклатура где есть реквизит "артикул" и записать туда содержимое колонки ITEMNO(содержимое из загруженного файла).
КОД:


&НаСервере
Процедура ЗаписатьДанныеНаСервере()
	Для Каждого СтрокаДанных Из Объект.ДанныеФайла Цикл 
		Наименование = СтрокаДанных.ITEMNO + " " + СтрокаДанных.GENDER + " " + СтрокаДанных.STORY + " " + СтрокаДанных.DESCRIPTION + " " + СтрокаДанных.COLOUR; 
		Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(Наименование, Истина);
		Если Не ЗначениеЗаполнено(Номенклатура) Тогда
			Номенклатура = Справочники.Номенклатура.СоздатьЭлемент();
			Номенклатура.Наименование = Наименование; 		
			Номенклатура.Родитель = СоздатьГруппу(СтрокаДанных);
			//Функция на возвращение созданной группы. вернуть в переменную номенклатура.родитель
			Номенклатура.Записать();
		Иначе 
			Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(Наименование, Истина);
			Если ЗначениеЗаполнено(Номенклатура) Тогда  
				Номенклатура.Артикул = СтрокаДанных.ITEMNO;
				Номенклатура.Записать();
			КонецЕсли;
		КонецЕсли;	
	КонецЦикла;
	Сообщить("Группы созданы");
	Сообщить("Загрузка выполнена успешно!");
КонецПроцедуры
Показать



Как я поняла нужно было добавить условие , снова обратиться к номенклатуре, присвоить значение и записать. Что не так тут?
По теме из базы знаний
Найденные решения
12. polax 02.08.24 13:00 Сейчас в теме
Если Не ЗначениеЗаполнено(Номенклатура) Тогда
Номенклатура = Справочники.Номенклатура.СоздатьЭлемент();
Номенклатура.Наименование = Наименование;
Номенклатура.Родитель = СоздатьГруппу(СтрокаДанных); //Сколько строк столько и групп?
Номенклатура.Записать();
Иначе //Не надо больше никаких условий. Оно уже поставлено. Значение либо заполнено либо нет
Ном = Номенклатура.ПолучитьОбъект(); //При заполненом значении объект не создается и его нет, пока не получишь
Ном.Артикул = СтрокаДанных.ITEMNO;
Ном.Записать();
КонецЕсли;
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 76 02.08.24 12:46 Сейчас в теме
(1)
Что не так тут?

А если номенклатура не будет найдена, когда она только создается?
4. YA_1446545432 02.08.24 12:50 Сейчас в теме
(2) там ведь условие прописывается если не заполнено значит создать элемент( то бишь номенклатуру с файла) и потом если есть такая номенклатура то записать артикул
8. nomad_irk 76 02.08.24 12:53 Сейчас в теме
(4)
если не заполнено значит создать элемент

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

Не потом, а в случае, если найдена номенклатура, то только тогда установить артикул, но в этом случае вы артикул пытаетесь присвоить напрямую ссылке, как в ошибку не вываливается - не понятно.
9. YA_1446545432 02.08.24 12:55 Сейчас в теме
(8) и как это прописать?
так понимаю условие:
Иначе
Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(Наименование, Истина);
Если ЗначениеЗаполнено(Номенклатура) Тогда
Номенклатура.Артикул = СтрокаДанных.ITEMNO;
Номенклатура.Записать();
КонецЕсли;
тут не подходит?
10. user2033930 02.08.24 12:58 Сейчас в теме
(9) 1. А как у тебя алгоритм зайдет в ветку "Иначе", если он уже зашел в ветку "Если"?
2. Ты реально собрался ссылке присваивать значение? И записывать ссылку?
11. nomad_irk 76 02.08.24 12:58 Сейчас в теме
(9) не подходит.

Найдите отличия самостоятельно:

............
Наименование = СтрокаДанных.ITEMNO + " " + СтрокаДанных.GENDER + " " + СтрокаДанных.STORY + " " + СтрокаДанных.DESCRIPTION + " " + СтрокаДанных.COLOUR;
Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(Наименование, Истина);

Если Не ЗначениеЗаполнено(Номенклатура) Тогда
       Номенклатура = Справочники.Номенклатура.СоздатьЭлемент();
Иначе
       Номенклатура = Номенклатура.ПолучитьОбъект();
КонецЕсли;

Номенклатура.Артикул = СтрокаДанных.ITEMNO;
Номенклатура.Наименование = Наименование;
Номенклатура.Родитель = СоздатьГруппу(СтрокаДанных);
//Функция на возвращение созданной группы. вернуть в переменную номенклатура.родитель
Номенклатура.Записать();
......
Показать
13. YA_1446545432 02.08.24 13:20 Сейчас в теме
(11) вы получаете объект если он существует и записываете туда артикул.
я попробовала ваш код, он мне вывел прошлую ошибку : Реквизит недоступен для группы
16. user2033930 02.08.24 13:30 Сейчас в теме
(13) Так не устанавливай артикул у группы...
19. nomad_irk 76 02.08.24 13:47 Сейчас в теме
(13)
вы получаете объект если он существует и записываете туда артикул.

Нет. Я записываю артикул и для нового элемента.
я попробовала ваш код, он мне вывел прошлую ошибку : Реквизит недоступен для группы

Так это ваш код, исправляйте свои ошибки.
3. user2033930 02.08.24 12:49 Сейчас в теме
Зачем два раза искать по наименованию?
А кто будет создавать объект для артикула? Пушкин?
5. YA_1446545432 02.08.24 12:52 Сейчас в теме
(3) 1. создается
2. а как по другому?
просто нужно обратиться к справочнику , присвоить и записать
6. YA_1446545432 02.08.24 12:52 Сейчас в теме
(3) у меня функция на создание группы и подгруппы прописана ниже процедуры
7. user2033930 02.08.24 12:53 Сейчас в теме
(6) Не заметил комментарий в коде
12. polax 02.08.24 13:00 Сейчас в теме
Если Не ЗначениеЗаполнено(Номенклатура) Тогда
Номенклатура = Справочники.Номенклатура.СоздатьЭлемент();
Номенклатура.Наименование = Наименование;
Номенклатура.Родитель = СоздатьГруппу(СтрокаДанных); //Сколько строк столько и групп?
Номенклатура.Записать();
Иначе //Не надо больше никаких условий. Оно уже поставлено. Значение либо заполнено либо нет
Ном = Номенклатура.ПолучитьОбъект(); //При заполненом значении объект не создается и его нет, пока не получишь
Ном.Артикул = СтрокаДанных.ITEMNO;
Ном.Записать();
КонецЕсли;
Показать
14. YA_1446545432 02.08.24 13:25 Сейчас в теме
(12) но он же выдаст ошибку. на строке
Ном.Артикул = СтрокаДанных.ITEMNO;
15. polax 02.08.24 13:29 Сейчас в теме
17. user2033930 02.08.24 13:31 Сейчас в теме
(15) Человек молчит, но у него в файле присутствуют и группы. Или наименования номенклатур совпадают с наименованиями существующих групп.
18. YA_1446545432 02.08.24 13:33 Сейчас в теме
20. Bukaska 140 02.08.24 13:49 Сейчас в теме
Вот только хотела спросить.. создаете группу.. а если такая группа уже есть? Тогда что?
21. YA_1446545432 02.08.24 13:56 Сейчас в теме
(20) можно выдать сообщение, что такая группа уже существует. но и нужно учитывать, что такая группа может быть в другой группе
Оставьте свое сообщение

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