Здравствуйте, хочу выгрузить справочник номенклатуры в дбв для дальней загрузки в другую базу.
Решил так, все правильно работает. Но потом понял, что не правильно все делаю. И что каждая номеклатура находится в своей подразделе. То есть Раздел Материал а уже в нем Молоток, Доска, гвозди. И так же раздел услуги а в нем Установка дивана, и тд.
Так же в некоторых разделах есть подразделы. т.е Услуги ---> услуги за 2015 год.
Подскажите пожалуйста Можно ли как нибудь это сделать?
Я хотел сделать так
Получаю ошибку. Хотя в консоле работало. На сколько в правильном направлению думаю?
Процедура ВыгрузитьВДбф ()
Счетчик = 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)}: Переменная не определена (Наименование)
Запрос.УстановитьПараметр("Наименование", <<?>>Наименование); (Проверка: Сервер)
Получаю ошибку. Хотя в консоле работало. На сколько в правильном направлению думаю?
По теме из базы знаний
Найденные решения
Путь = "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 Тогда
Родитель = Справочники.Тест.НайтиПоНаименованию(ВыборкаДетальныеЗаписи.РодительНаименование, Истина);
НоваяГруппа.Наименование = ВыборкаДетальныеЗаписи.Наименование;
НоваяГруппа.Родитель = Родитель;
НоваяГруппа.Записать();
КонецЕсли;
Если ВыборкаДетальныеЗаписи.ЭтоГруппа = ЛОЖЬ Тогда
НоваяГруппа = Справочники.Тест.НайтиПоНаименованию(ВыборкаДетальныеЗаписи.РодительНаименование, Истина);
НовыйОбъект = Справочники.Тест.СоздатьЭлемент();
НовыйОбъект.Наименование = ВыборкаДетальныеЗаписи.Наименование;
НовыйОбъект.Родитель = НоваяГруппа.Ссылка;
НовыйОбъект.Записать();
КонецЕсли
КонецЦикла;
ПоказатьРешил проблему так, если кому нужно
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Еще вот мысль появилась
И передать в значение параметра Наименование уже нужное наименование группы
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЕСТЬNULL(Номенклатура.Родитель.Наименование, 0) КАК Поле1
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|
|СГРУППИРОВАТЬ ПО
| Номенклатура.Родитель.Наименование";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
СоздатьМассив = Новый Массив();
СоздатьМассив.
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
СоздатьМассив.Добавить(ВыборкаДетальныеЗаписи.Поле1);
КонецЦикла;
ПоказатьИ передать в значение параметра Наименование уже нужное наименование группы
(8) Если тебе нужны еще и группы, тогда так сделай:
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Родитель.Код КАК РодительКод,
| Номенклатура.ЭтоГруппа КАК ФлагГруппы,
| Номенклатура.Код КАК Код,
| Номенклатура.Наименование КАК Наименование
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|
|СГРУППИРОВАТЬ ПО
| Номенклатура.Родитель.Код,
| Номенклатура.Код,
| Номенклатура.Наименование,
| Номенклатура.ЭтоГруппа";
Показать Путь = "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 Тогда
Родитель = Справочники.Тест.НайтиПоНаименованию(ВыборкаДетальныеЗаписи.РодительНаименование, Истина);
НоваяГруппа.Наименование = ВыборкаДетальныеЗаписи.Наименование;
НоваяГруппа.Родитель = Родитель;
НоваяГруппа.Записать();
КонецЕсли;
Если ВыборкаДетальныеЗаписи.ЭтоГруппа = ЛОЖЬ Тогда
НоваяГруппа = Справочники.Тест.НайтиПоНаименованию(ВыборкаДетальныеЗаписи.РодительНаименование, Истина);
НовыйОбъект = Справочники.Тест.СоздатьЭлемент();
НовыйОбъект.Наименование = ВыборкаДетальныеЗаписи.Наименование;
НовыйОбъект.Родитель = НоваяГруппа.Ссылка;
НовыйОбъект.Записать();
КонецЕсли
КонецЦикла;
ПоказатьРешил проблему так, если кому нужно
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот