Выгрузка справочника Номенклатура в Dbf

1. user645801_yyyuuu123q 01.08.18 08:42 Сейчас в теме
Здравствуйте, хочу выгрузить справочник номенклатуры в дбв для дальней загрузки в другую базу.
Процедура ВыгрузитьВДбф ()
	Счетчик = 0;
	Объект.Путь = "C:\1c\upload";
	Путь = "C:\1c\";
	БД = Новый XBase;
	БД.Кодировка = КодировкаXBase.ANSI;
	БД.Поля.Добавить("Code", "S", 8);
	БД.Поля.Добавить("Name", "S", 40);
	Бд.СоздатьФайл(Путь + "upload" + ".dbf", Путь + "index.cdx");
	Бд.Индексы.Добавить("IDXCODE", "CODE");
	ФлИБД = БД.СоздатьИндексныйФайл(Путь + "Index.cdx");
	БД.АвтоСохранение = Истина;
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	Номенклатура.Наименование,
		|	Номенклатура.Код
		|ИЗ
		|	Справочник.Номенклатура КАК Номенклатура";
	
	РезультатЗапроса = Запрос.Выполнить();
	
	Выборка = РезультатЗапроса.Выбрать();
	
	Пока Выборка.Следующий() Цикл
		
		БД.Добавить();
		БД.CODE = Выборка.Код;
		БД.NAME = Выборка.Наименование;
		Счетчик = Счетчик + 1;
		Сообщить("Выгруженно " + Выборка.Наименование); 
		
	КонецЦикла;

	Сообщить("Общее количество выгруженных элементов равно " + Счетчик);
	Сообщить("Путь выгрузки C:\1c\upload");
	БД.ЗакрытьФайл();
	
КонецПроцедуры
Показать

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

	КонецЦикла;
Показать


{Обработка.Обработка124.Форма.Форма.Форма(20,44)}: Переменная не определена (Наименование)
	Запрос.УстановитьПараметр("Наименование", <<?>>Наименование); (Проверка: Сервер)

Получаю ошибку. Хотя в консоле работало. На сколько в правильном направлению думаю?
По теме из базы знаний
Найденные решения
13. user645801_yyyuuu123q 02.08.18 08:32 Сейчас в теме
	Путь = "C:\1c\";
	БД = Новый XBase;
	БД.Кодировка = КодировкаXBase.ANSI;
	БД.Поля.Добавить("Code", "S", 10);
	БД.Поля.Добавить("RoditeMain", "S",40);
	БД.Поля.Добавить("Roditel", "S", 40);
	БД.Поля.Добавить("Name", "S", 40);
	Бд.СоздатьФайл(Путь + "upload1" + ".dbf", Путь + "index.cdx");
	Бд.Индексы.Добавить("IDXCODE", "CODE");
	ФлИБД = БД.СоздатьИндексныйФайл(Путь + "Index.cdx");
	БД.АвтоСохранение = Истина;
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
        "ВЫБРАТЬ
        |	Номенклатура.Родитель.Код КАК РодительКод,
        |	Номенклатура.Родитель.Родитель.Наименование КАК РодительРодительНаименование,
        |	Номенклатура.Родитель.Наименование КАК РодительНаименование,
        |	Номенклатура.Наименование КАК Наименование,
        |	Номенклатура.Код КАК Код,
        |	Номенклатура.ЭтоГруппа
        |ИЗ
        |	Справочник.Номенклатура КАК Номенклатура
        |
        |УПОРЯДОЧИТЬ ПО
        |	РодительРодительНаименование";
	
	//Запрос.УстановитьПараметр("Наименование", Наименование);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
			
		БД.Добавить();
		БД.CODE = ВыборкаДетальныеЗаписи.Код;
		БД.RoditeMain = ВыборкаДетальныеЗаписи.РодительРодительНаименование;
		БД.Roditel = ВыборкаДетальныеЗаписи.РодительНаименование;
		БД.Name = ВыборкаДетальныеЗаписи.Наименование;
		//БД.Group3 = ВыборкаДетальныеЗаписи.Код;
		//Если  НЕ БД.Group Тогда
		//	БД.Group2 = ВыборкаДетальныеЗаписи.НаименованиеГруппы;
		//Иначе 
		//	БД.Group2 = "Главный";	
		//КонецЕсли;
		
		НоваяГруппа = Справочники.Тест.СоздатьГруппу();
		
		Если ВыборкаДетальныеЗаписи.РодительРодительНаименование = Null И ВыборкаДетальныеЗаписи.РодительНаименование = Null Тогда
			НоваяГруппа.Наименование = ВыборкаДетальныеЗаписи.Наименование;
			НоваяГруппа.Записать();
		КонецЕсли;
		
		Если ВыборкаДетальныеЗаписи.РодительРодительНаименование = Null  И ВыборкаДетальныеЗаписи.РодительНаименование <> Null  Тогда
			 Родитель = Справочники.Тест.НайтиПоНаименованию(ВыборкаДетальныеЗаписи.РодительНаименование, Истина);			
			 НоваяГруппа.Наименование = ВыборкаДетальныеЗаписи.Наименование;
			 НоваяГруппа.Родитель = Родитель;
			 НоваяГруппа.Записать();	
		КонецЕсли;
		 
		Если ВыборкаДетальныеЗаписи.ЭтоГруппа = ЛОЖЬ Тогда
			НоваяГруппа = Справочники.Тест.НайтиПоНаименованию(ВыборкаДетальныеЗаписи.РодительНаименование, Истина);
			НовыйОбъект = Справочники.Тест.СоздатьЭлемент();
			НовыйОбъект.Наименование = ВыборкаДетальныеЗаписи.Наименование; 
			НовыйОбъект.Родитель = НоваяГруппа.Ссылка;
			
			НовыйОбъект.Записать();
			
		КонецЕсли		
	КонецЦикла;
Показать

Решил проблему так, если кому нужно
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. qazaas 01.08.18 09:09 Сейчас в теме
(1) Так а где у тебя переменная "Наименование" ? В консоли-то она автоматом создается и ты ей значение прописываешь, а в твоем, выше приведенном, тексте данной переменной нет как таковой, кроме попытки передать ее в качестве параметра...
3. user645801_yyyuuu123q 01.08.18 09:23 Сейчас в теме
(2) точно, это что то проглядел).
А как мне тогда в общем сделать задуманное мною? Я думаю вообще в верном направлении?
4. qazaas 01.08.18 09:26 Сейчас в теме
(3) Если я правильно понимаю, то
// Это убрать
 |    ЕСТЬNULL(Номенклатура.Родитель.Наименование, 0) КАК РодительНаименование

// Это добавить
 | ГДЕ
 |    Номенклатура.ЭтоГруппа = Ложь
7. user645801_yyyuuu123q 01.08.18 09:52 Сейчас в теме
(3) Но если
В дб выгруженно все одним список, мне бы как нибудь флаг какой нибудь поставить, чтобы отличать, что раздел что подраздел
Прикрепленные файлы:
5. user645801_yyyuuu123q 01.08.18 09:41 Сейчас в теме
Еще вот мысль появилась

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

И передать в значение параметра Наименование уже нужное наименование группы
6. qazaas 01.08.18 09:51 Сейчас в теме
(5) У тебя нигда нету условия (секция "ГДЕ"), поэтому, даже вот это предложение
Запрос.УстановитьПараметр("Наименование", Наименование);


не имеет никакого смысла...
8. user645801_yyyuuu123q 01.08.18 09:54 Сейчас в теме
(5) на счет этого знаю, думаю как обыграть это. Пока много разных мыслей появилось для решения
9. qazaas 01.08.18 09:59 Сейчас в теме
(8) Если тебе нужны еще и группы, тогда так сделай:
Запрос.Текст = 
        "ВЫБРАТЬ
        |    Номенклатура.Родитель.Код КАК РодительКод,
        |    Номенклатура.ЭтоГруппа КАК ФлагГруппы,
        |    Номенклатура.Код КАК Код,
        |    Номенклатура.Наименование КАК Наименование
        |ИЗ
        |    Справочник.Номенклатура КАК Номенклатура
        |
        |СГРУППИРОВАТЬ ПО
        |    Номенклатура.Родитель.Код,
        |    Номенклатура.Код,
        |    Номенклатура.Наименование,
        |    Номенклатура.ЭтоГруппа";
Показать
10. user645801_yyyuuu123q 01.08.18 10:10 Сейчас в теме
Гениально, спасибо) все было проще. А если есть подгруппа в Группе а в это группе уже значения?
11. user645801_yyyuuu123q 01.08.18 10:15 Сейчас в теме
Да и все немного в разнаброс получается немного, хотел бы материалы записались в группе где только материалы.
12. user645801_yyyuuu123q 01.08.18 10:33 Сейчас в теме
Так же Я не вижу общую группу, почему подгруппу в котороый материал определили записал, а группу в которой подгруппы нет
13. user645801_yyyuuu123q 02.08.18 08:32 Сейчас в теме
	Путь = "C:\1c\";
	БД = Новый XBase;
	БД.Кодировка = КодировкаXBase.ANSI;
	БД.Поля.Добавить("Code", "S", 10);
	БД.Поля.Добавить("RoditeMain", "S",40);
	БД.Поля.Добавить("Roditel", "S", 40);
	БД.Поля.Добавить("Name", "S", 40);
	Бд.СоздатьФайл(Путь + "upload1" + ".dbf", Путь + "index.cdx");
	Бд.Индексы.Добавить("IDXCODE", "CODE");
	ФлИБД = БД.СоздатьИндексныйФайл(Путь + "Index.cdx");
	БД.АвтоСохранение = Истина;
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
        "ВЫБРАТЬ
        |	Номенклатура.Родитель.Код КАК РодительКод,
        |	Номенклатура.Родитель.Родитель.Наименование КАК РодительРодительНаименование,
        |	Номенклатура.Родитель.Наименование КАК РодительНаименование,
        |	Номенклатура.Наименование КАК Наименование,
        |	Номенклатура.Код КАК Код,
        |	Номенклатура.ЭтоГруппа
        |ИЗ
        |	Справочник.Номенклатура КАК Номенклатура
        |
        |УПОРЯДОЧИТЬ ПО
        |	РодительРодительНаименование";
	
	//Запрос.УстановитьПараметр("Наименование", Наименование);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
			
		БД.Добавить();
		БД.CODE = ВыборкаДетальныеЗаписи.Код;
		БД.RoditeMain = ВыборкаДетальныеЗаписи.РодительРодительНаименование;
		БД.Roditel = ВыборкаДетальныеЗаписи.РодительНаименование;
		БД.Name = ВыборкаДетальныеЗаписи.Наименование;
		//БД.Group3 = ВыборкаДетальныеЗаписи.Код;
		//Если  НЕ БД.Group Тогда
		//	БД.Group2 = ВыборкаДетальныеЗаписи.НаименованиеГруппы;
		//Иначе 
		//	БД.Group2 = "Главный";	
		//КонецЕсли;
		
		НоваяГруппа = Справочники.Тест.СоздатьГруппу();
		
		Если ВыборкаДетальныеЗаписи.РодительРодительНаименование = Null И ВыборкаДетальныеЗаписи.РодительНаименование = Null Тогда
			НоваяГруппа.Наименование = ВыборкаДетальныеЗаписи.Наименование;
			НоваяГруппа.Записать();
		КонецЕсли;
		
		Если ВыборкаДетальныеЗаписи.РодительРодительНаименование = Null  И ВыборкаДетальныеЗаписи.РодительНаименование <> Null  Тогда
			 Родитель = Справочники.Тест.НайтиПоНаименованию(ВыборкаДетальныеЗаписи.РодительНаименование, Истина);			
			 НоваяГруппа.Наименование = ВыборкаДетальныеЗаписи.Наименование;
			 НоваяГруппа.Родитель = Родитель;
			 НоваяГруппа.Записать();	
		КонецЕсли;
		 
		Если ВыборкаДетальныеЗаписи.ЭтоГруппа = ЛОЖЬ Тогда
			НоваяГруппа = Справочники.Тест.НайтиПоНаименованию(ВыборкаДетальныеЗаписи.РодительНаименование, Истина);
			НовыйОбъект = Справочники.Тест.СоздатьЭлемент();
			НовыйОбъект.Наименование = ВыборкаДетальныеЗаписи.Наименование; 
			НовыйОбъект.Родитель = НоваяГруппа.Ссылка;
			
			НовыйОбъект.Записать();
			
		КонецЕсли		
	КонецЦикла;
Показать

Решил проблему так, если кому нужно
Оставьте свое сообщение

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