Как удалить все элементы справочника? Для удаления всех элементов справочника можно использовать объект СправочникВыборка.<имя>, с помощью которого осуществлять обход и удаление всех элементов справочника. При этом следует учитывать, что если справочник иерархический, то выборка должна быть также иерархической, так как при удалении элемента удаляются и все его подчиненные элементы. Например:
Код 1C v 8.х
Выборка = Справочники.Номенклатура.ВыбратьИерархически();
Пока Выборка.Следующий() Цикл
Выборка.Удалить();
КонецЦикла;
Категория:
Справочники Выгрузка / Загрузка данных посредством DBF файлов? DBF-файл – это файл, в котором данные хранятся в виде таблицы (Database format). Работа с этими файлами происходит по принципу курсора, т.е. по одной строке. Для работы с DBF-файлами существует тип данных XBase. Несмотря на то, что формат DBF считается уже устаревшим, может возникнуть необходимость работы с файлами данного формата, особенно, если вы перегружаете данные из какой-нибудь старой программы!
Код 1C v 8.х // ПРИМЕР 1
// Запись данных справочника в DBF-файл:
БД = Новый XBase;
// проектируется структура таблицы, т.е. имена и типы полей
БД.Поля.Добавить("Code","N",6,0); // числовое поле Код
БД.Поля.Добавить("Name","S",30); // строковое поле Наименование
// создание файла с указанной структурой
БД.СоздатьФайл("C://1.dbf");
Выборка = Справочники.Клиенты.Выбрать();
Пока Выборка.Следующий() Цикл
// создается новая пустая строка таблицы
БД.Добавить();
// заполняем поля новой строки
БД.Code = Выборка.Код;
БД.Name = Выборка.Наименование;
КонецЦикла;
// зафиксировать изменения в файле
БД.ЗакрытьФайл();
// Чтение данных из DBF-файла в справочник:
БД = Новый XBase;
БД.ОткрытьФайл("C://1.dbf");
// считываем файл построчно
Пока БД.Следующая() Цикл
// создаем новый элемент справочника
Спр=Справочники.Клиенты.СоздатьЭлемент();
// переносим в реквизиты данные из текущей строки таблицы
Спр.Код = БД.Сode;
Спр.Наименование = БД.Name;
Спр.Записать();
КонецЦикла;
БД.ЗакрытьФайл();
Код 1C v 8.х // ПРИМЕР 2
// Выгрузка данных в DBF
БД = Новый XBase;
БД.Поля.Добавить("CODE", "S", 5);
БД.Поля.Добавить("NAME", "S", 40);
БД.СоздатьФайл(Путь + "start.dbf", Путь + "index.cdx");
БД.Индексы.Добавить("IDXCODE", "CODE");
ФлИБД = БД.СоздатьИндексныйФайл(Путь + "index.cdx");
БД.АвтоСохранение = Истина;
Выборка = Справочники.Номенклатура.ВыбратьИерархически();
Пока Выборка.Следующий() Цикл
БД.Добавить();
БД.CODE = Выборка.Код;
БД.NAME = Выборка.Наименование;
КонецЦикла;
БД.ЗакрытьФайл();
// Загрузка данных из DBF
БД = Новый XBase;
БД.ОткрытьФайл(Путь + "start.dbf", Путь + "index.cdx");
БД.ТекущийИндекс = БД.Индексы.IDXCODE;
Пока БД.Следующая() Цикл
Сообщить(БД.CODE);
Сообщить(БД.NAME);
КонецЦикла;
БД.ЗакрытьФайл();
Код 1C v 7.x // Выгрузка ТЗ, Таблицы значений в DBF файл
НачВремя = _GetPerformanceCounter(); // Запоминаем время запуска алгоритма
ДБФ = СоздатьОбъект("XBASE");
ДБФ.ДобавитьПоле("IsGroup","N",1,0);
ДБФ.ДобавитьПоле("Level","N",1,0);
ДБФ.ДобавитьПоле("ParentCode","S",8,0);
ДБФ.ДобавитьПоле("Code","S",8,0);
ДБФ.ДобавитьПоле("Descr","S",60,0);
ДБФ.КодоваяСтраница(0); // Windows
ДБФ.СоздатьФайл("c:\export.dbf");
ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку()=1 Цикл
ДБФ.Добавить();
ДБФ.IsGroup= ТЗ.ЭтоГруппа;
ДБФ.Level= ТЗ.Уровень;
ДБФ.ParentCode = ТЗ.КодРодителя;
ДБФ.Code= ТЗ.Код;
ДБФ.Descr= СокрЛП(ТЗ.Наименование);
ДБФ.Записать();
КонецЦикла;
ДБФ.ЗакрытьФайл();
КонВремя = _GetPerformanceCounter(); // Запоминаем время окончания алгоритма
// Рассчитываем продолжительность выполнения алгоритма в секундах
Длительность = Окр((КонВремя-НачВремя)/1000,3);
Сообщить("Время выгрузки в DBF файл: "+Длительность+" с");
// Загрузка ТЗ, Таблицы значений из DBF файла
НачВремя = _GetPerformanceCounter(); // Запоминаем время запуска алгоритма
ДБФ = СоздатьОбъект("XBASE");
ДБФ.КодоваяСтраница(0); // Windows
ДБФ.ОткрытьФайл("c:\export.dbf");
Если ДБФ.Открыта()=0 Тогда
Сообщить("Файл DBF не открыт !","!");
Возврат;
КонецЕсли;
КолСтр = ДБФ.КоличествоЗаписей();
н= 0;
ДБФ.Первая();
ПризнакГруппы = ДБФ.IsGroup;
ТекУровень = ДБФ.Level;
ТекКодРодителя = ДБФ.ParentCode;
ТекКод = ДБФ.Code;
ТекНаименоване = ДБФ.Descr;
н = н+1;
Состояние("В файле прочитано записей "+н+" из "+КолСтр);
Пока ДБФ.Следующая()=1 Цикл
ПризнакГруппы = ДБФ.IsGroup;
ТекУровень = ДБФ.Level;
ТекКодРодителя = ДБФ.ParentCode;
ТекКод = ДБФ.Code;
ТекНаименоване = ДБФ.Descr;
н = н+1;
Состояние("В файле прочитано записей "+н+" из "+КолСтр);
КонецЦикла;
ДБФ.ЗакрытьФайл();
КонВремя = _GetPerformanceCounter(); // Запоминаем время окончания алгоритма
// Рассчитываем продолжительность выполнения алгоритма в секундах
Длительность = Окр((КонВремя-НачВремя)/1000,3);
Сообщить("Время чтения DBF файла: "+Длительность+" с");
Категория:
XML, DBF, TXT, CSV Как сформировать XML-документ в строку? Требуется, чтобы запись XML-документа производилась не в файл, а в строку
Код 1C v 8.х Запись = Новый ЗаписьXML();
Запись.УстановитьСтроку();
Запись.ЗаписатьОбъявлениеXML();
Запись.ЗаписатьНачалоЭлемента("Корневой");
Запись.ЗаписатьАтрибут("Справочник", "Номенклатура");
Запись.ЗаписатьКомментарий("Краткая информация о номенклатуре");
Выборка = Справочники.Номенклатура.ВыбратьИерархически();
Пока Выборка.Следующий() Цикл
Если Выборка.ЭтоГруппа Тогда
Продолжить;
КонецЕсли;
Запись.ЗаписатьНачалоЭлемента("Элемент");
Запись.ЗаписатьАтрибут("Код", Строка(Выборка.Код));
Запись.ЗаписатьАтрибут("Артикул", Строка(Выборка.Артикул));
Запись.ЗаписатьТекст(Выборка.Наименование);
Запись.ЗаписатьКонецЭлемента();
КонецЦикла;
Запись.ЗаписатьКонецЭлемента();
Стр = Запись.Закрыть();
Сообщить(Стр);
Для вывода XML-документа в строку после создания объекта ЗаписьXML необходимо использовать метод УстановитьСтроку(). Только в этом случае метод Закрыть() вернет строку, которая будет содержать сформированный XML-документ.
еще примеры:
Код 1C v 8.х //Выгрузка объекта в XML строку
Функция ОбъектВXML(ДокументОбъект) Экспорт
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
ЗаписатьXML(ЗаписьXML, ДокументОбъект);
Возврат ЗаписьXML.Закрыть();
КонецФункции
//Загрузка объекта из XML строки
Функция ОбъектИзXML(Стр) Экспорт
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(Стр);
Возврат ПрочитатьXML(ЧтениеXML);
КонецФункции
Категория:
XML, DBF, TXT, CSV Как можно сформировать XML-документ произвольной структуры? Используется модель последовательного доступа (работа осуществляется только с одним текущим узлом):
Код 1C v 8.х Запись = Новый ЗаписьXML;
//Путь к формируемому XML-документу указан в переменной ПутьКФайлу
Запись.ОткрытьФайл(ПутьКФайлу);
Запись.ЗаписатьОбъявлениеXML();
Запись.ЗаписатьНачалоЭлемента("Корневой");
Запись.ЗаписатьАтрибут("Справочник", "Номенклатура");
Запись.ЗаписатьКомментарий("Краткая информация о номенклатуре");
Выборка = Справочники.Номенклатура.ВыбратьИерархически();
Пока Выборка.Следующий() Цикл
Если Выборка.ЭтоГруппа Тогда
Продолжить;
КонецЕсли;
Запись.ЗаписатьНачалоЭлемента("Элемент");
Запись.ЗаписатьАтрибут("Код", Строка(Выборка.Код));
Запись.ЗаписатьАтрибут("Артикул", Строка(Выборка.Артикул));
Запись.ЗаписатьТекст(Выборка.Наименование);
Запись.ЗаписатьКонецЭлемента();
КонецЦикла;
Запись.ЗаписатьКонецЭлемента();
Запись.Закрыть();
В результате будет получен файл вида
Код <НачалоЭлемента
ИмяАтрибута = Значение ИмяАтрибута = Значение......>
Текст
<КонецЭлемента>
Создание XML-документа с помощью объекта ЗаписьXML производится путем помещения в строгой последовательности (иначе будет нарушена структура) «частей» узлов.
Категория:
XML, DBF, TXT, CSV Выбрать, перебрать все элементы из определенной группы В терминах 1С:Предприятия
Группа - это
Родитель
Код 1C v 8.х //ПолеВводаРодитель - поле на форме
Выборка = Справочники.Номенклатура.Выбрать(ПолеВводаРодитель);
Пока Выборка.Следующий() Цикл
Наименование = Выборка.Наименование;
КонецЦикла;
Запрос = Новый Запрос("
|ВЫБРАТЬ
| Ссылка,
| Наименование
|ИЗ
| Справочник.Номенклатура
|ГДЕ
| Родитель = &Родитель
|АВТОУПОРЯДОЧИВАНИЕ");
Запрос.УстановитьПараметр("Родитель", ПолеВводаРодитель);
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
Наименование = Результат.Наименование;
КонецЦикла;
Выборка=Справочники.Номенклатура.ВыбратьИерархически(ПолеВводаРодитель);
Пока Выборка.Следующий() Цикл
Наименование = Выборка.Наименование;
КонецЦикла;
Запрос = Новый Запрос("
|ВЫБРАТЬ
| Ссылка,
| Наименование
|ИЗ
| Справочник.Номенклатура
|ГДЕ
| Родитель В ИЕРАРХИИ(&Родитель)
|АВТОУПОРЯДОЧИВАНИЕ");
Запрос.УстановитьПараметр("Родитель", ПолеВводаРодитель);
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
Наименование = Результат.Наименование;
КонецЦикла;
Код 1C v 7.x спр=СоздатьОбъект("Справочник.Материалы");
спрГруппа=СоздатьОбъект("Справочник.Материалы");
спрГруппа.НайтиПоНаименованию("Топливо");
спр.ИспользоватьРодителя(спрГруппа.ТекущийЭлемент());
спр.ВыбратьЭлементы();
Пока спр.ПолучитьЭлемент()=1 Цикл
Сообщить(спр.ТекущийЭлемент().Наименование);
КонецЦикла;
Категория:
Справочники Перебрать, выбрать элементы справочника Код 1C v 8.х Выборка = Справочники.Сотрудники.Выбрать();
//или Выборка = Справочники.Сотрудники.ВыбратьИерархически();
Пока выборка.Следующий() = 1 Цикл
... //действия с очередным элементом
...Сообщить("Сотрудник " + выборка.Наименование);
КонецЦикла;
//А через запрос так:
Запрос = Новый Запрос("
|ВЫБРАТЬ
| Ссылка,
| Наименование
|ИЗ
| Справочник.Номенклатура
|АВТОУПОРЯДОЧИВАНИЕ");
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
Наименование = Результат.Наименование;
КонецЦикла;
Код 1C v 7.x
// Обход элементов справочника
Спр = СоздатьОбъект("Справочник.Материалы");
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент() = 1 Цикл
// Дальнейшие действия с Спр.ТекущийЭлемент()
сообщить("Наименование "+спр.Наименование+" Код "+спр.код);
КонецЦикла;
//А через запрос так:
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса ="
|Период с Дата1 по Дата2;
|Обрабатывать НеПомеченныеНаУдаление;
|Спр = Справочник.Материалы.ТекущийЭлемент;
|Группировка Спр упорядочить по Спр.Наименование;";
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Предупреждение("Запрос по элементам справочника не выполнился!");
Возврат;
КонецЕсли;
// Теперь вся выборка находится в объекте "Запрос"
Категория:
Справочники Выборка (перебор) элементов справочника Код 1C v 8.х
// Выбрать(<Родитель>, <Владелец>, <Отбор>, <Порядок>)
Номенклатура = Справочники.Номенклатура;
Отбор = Новый Структура("ТипНоменклатуры");
Пусто = Перечисления.ТипыНоменклатуры.ПустаяСсылка();
Отбор.ТипНоменклатуры = Пусто;
Выборка = Номенклатура.Выбрать(,,Отбор, "Наименование Убыв");
Пока Выборка.Следующий() Цикл
Объект = Выборка.ПолучитьОбъект();
Объект.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Товар;
Попытка
Объект.Записать();
Исключение
Предупреждение("Не удалось записать объект """ + Объект + """
|" + ОписаниеОшибки(),60);
КонецПопытки;
КонецЦикла;
// Выборка по Иеархии
// ВыбратьИерархически(<Родитель>, <Владелец>, <Отбор>, <Порядок>)
Выборка = Справочники.Должности.ВыбратьИерархически();
Пока Выборка.Следующий() Цикл
//код
КонецЦикла;
Категория:
Справочники