Код 1C v 8.х ВЫБРАТЬ
ХозрасчетныйОбороты.Организация КАК Организация,
ХозрасчетныйОбороты.Счет КАК Счет,
ХозрасчетныйОбороты.Валюта,
ХозрасчетныйОбороты.СуммаОборотДт,
ХозрасчетныйОбороты.ВалютнаяСуммаОборотДт,
ХозрасчетныйОбороты.СуммаОборотКт,
ХозрасчетныйОбороты.ВалютнаяСуммаОборотКт
ИЗ
РегистрБухгалтерии.Хозрасчетный.Обороты(&ДатаНач, &ДатаКон, , Счет.Валютный, , , , ) КАК ХозрасчетныйОбороты
УПОРЯДОЧИТЬ ПО
Организация,
ХозрасчетныйОбороты.Счет.Код
Код 1C v 8.х "ВЫБРАТЬ
| ХозрасчетныйОстатки.Счет,
| ПРЕДСТАВЛЕНИЕ(ХозрасчетныйОстатки.Счет),
| ХозрасчетныйОстатки.ВалютнаяСуммаОстатокДт КАК ВалютнаяСуммаОстатокДт,
| ХозрасчетныйОстатки.Счет.Порядок КАК СчетПорядок,
| ХозрасчетныйОстатки.Валюта КАК Валюта,
| ПРЕДСТАВЛЕНИЕ(ХозрасчетныйОстатки.Валюта)
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата, Счет.Валютный И Счет.Вид = &Активный, ,) КАК ХозрасчетныйОстатки
|УПОРЯДОЧИТЬ ПО
| СчетПорядок
|ИТОГИ
| СУММА(ВалютнаяСуммаОстатокДт)
|ПО
| Валюта";
Запрос.УстановитьПараметр("Активный", ВидСчета.Активный);
Запрос.УстановитьПараметр("Дата", Дата);
В основе работы с XML-файлами лежит технология доступа SAX, которая осуществляет считывание по одному тегу. Для этого существует два типа данных –
ЗаписьXML и
ЧтениеXML .
Запись данных справочника в XML-файл:
Код 1C v 8.х Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл(ПутьКФайлу);
Запись.ЗаписатьОбъявлениеXML();
// формируем корневой элемент
Запись.ЗаписатьНачалоЭлемента("Клиенты");
Выборка = Справочники.Клиенты.Выбрать();
Пока Выборка.Следующий() Цикл
// для каждого клиента формируем свой элемент
Запись.ЗаписатьНачалоЭлемента("Клиент");
// запишем код клиента в атрибут тега
Запись.ЗаписатьАтрибут("Код", Строка(Выборка.Код));
// Наименование клиента запишем в текст элемента
Запись.ЗаписатьТекст(Выборка.Наименование);
// закрываем элемент клиента
Запись.ЗаписатьКонецЭлемента();
КонецЦикла;
// закрываем корневой элемент xml-документа
Запись.ЗаписатьКонецЭлемента();
// закрыть файл
Запись.Закрыть();
Чтение данных из XML-файла в справочник:
Код 1C v 8.х Чтение = Новый ЧтениеXML;
Чтение.ОткрытьФайл(ПутьКФайлу);
Спр="";
// чтение осуществляется по одному тегу
Пока Чтение.Прочитать() Цикл
// анализируем тип элемента и его имя
Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
Если Чтение.Имя="Клиент" Тогда
// создаем новый элемент справочника
Спр = Справочники.Клиенты.СоздатьЭлемент();
// читаем атрибуты
Пока Чтение.ПрочитатьАтрибут() Цикл
Если Чтение.Имя="Код" Тогда
Спр.Код = Число(Чтение.Значение);
КонецЕсли;
КонецЦикла;
КонецЕсли;
ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.Текст Тогда
// заполняем наименование созданного ранее элемента
Спр.Наименование = Чтение.Значение;
ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
// требуется записать информацию про клиента
Спр.Записать();
КонецЕсли;
КонецЦикла;
Создадим обработку в типовой конфигурации для экспорта плана счетов. Структура xml-файла должна быть такой. Корневой элемент xml-документа соответствует плану счетов в целом. В нем располагаются подчиненные элементы с именем Счет, содержащие информацию о счетах. В качестве содержимого элементов указывается наименование счета. Остальные данные записываются в качестве атрибутов (код, признаки валютного, количественного учета и пр.). В качестве подчиненных элементов для элемента Счет задаются элементы, обозначающие его субсчета с теми же атрибутами. Приведем код процедуры экспорта плана счетов.
Код 1C v 7.x Процедура Выполнить()
Если ЗагрузитьВнешнююКомпоненту(КаталогПрограммы()+"v7plus.dll")<>1 Тогда
Предупреждение("Компонента не обнаружена");
Возврат;
КонецЕсли;
Анализатор=СоздатьОбъект("AddIn.XMLParser");
Корень=Анализатор.СоздатьДокумент();
План=Корень.СоздатьПодчиненныйЭлемент("ПланСчетов");
Счет=СоздатьОбъект("Счет.Основной");
Родитель=СоздатьОбъект("Счет.Основной");
Счет.ВыбратьСчета();
Пока Счет.ПолучитьСчет()=1 Цикл
// если это счет, а не субсчет
Если Счет.Уровень()=1 Тогда
Родитель.НайтиПоКоду(Счет.Код);
СчетXML=План.СоздатьПодчиненныйЭлемент("Счет");
СчетXML.УстановитьАтрибут("Код", Счет.Код);
СчетXML.УстановитьАтрибут("Валютный", Счет.Валютный);
СчетXML.УстановитьАтрибут("Количественный", Счет.Количественный);
СчетXML.УстановитьАтрибут("Забалансовый", Счет.Забалансовый);
Если Счет.Активный=1 Тогда
СчетXML.УстановитьАтрибут("вид","активный");
ИначеЕсли Счет.Активный=2 Тогда
СчетXML.УстановитьАтрибут("вид","пассивный");
Иначе
СчетXML.УстановитьАтрибут("вид","активно-пассивный");
КонецЕсли;
СчетXML.Значение=Счет.Наименование;
Иначе
Если Счет.ПринадлежитГруппе(Родитель)=1 Тогда
СубсчетXML=СчетXML.СоздатьПодчиненныйЭлемент("Субсчет");
СубсчетXML.УстановитьАтрибут("Код", Счет.Код);
// аналогично устанавливаем все атрибуты на элемент СубсчетXML
СубсчетXML.Значение=Счет.Наименование;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Корень.Записать(КаталогПрограммы()+"plan.xml");
КонецПроцедуры
В результате будет получен файл, вот его фрагмент:
Код
<?xml version="1.0" encoding="windows-12Sl" ?> - <ПланСчетов>
<Счет Код="00" Валютный="0" Количественный="0" Забалансовый="0" вид="активно-пассивный">Вспомогательный</Счет>
- <Счет Код="01" Валютный="0" Количественный="0" Забалансовый="0" вид="активный">
Основные средства
<Субсчет Код="01.1" Валютный="0" Количественный="0" Забалансовый="0"
вид="активный">ОС в организации</Субсчет> <Субсчет Код="01.2" Валютный="0" Количественный="0" Забалансовый="0"
вид="активный">Выбытие ОС</Субсчет> </Счет>
- <Счет Код="02" Валютный="0" Количественный="0" Забалансовый="0" вид="пассивный">
Амортизация ОС
А теперь приведем код для импорта плана счетов из xml-файла в новую конфигурацию. Код модуля соответствующей обработки должен содержать процедуру Выполнить(), которая имеет такой вид.
Код 1C v 7.x Процедура Выполнить()
Если ЗагрузитьВнешнююКомпоненту(КаталогПрограммы()+"v7plus.dll")<>1 Тогда
Предупреждение("Внешняя компонента не найдена");
Возврат;
КонецЕсли;
Анализатор=СоздатьОбъект("AddIn.XMLParser");
Файл=Анализатор.СоздатьДокумент();
Файл.Загрузить(КаталогПрограммы()+"plan.xml");
План=Файл.ВыбратьУзел("ПланСчетов");
кол=План.КоличествоПодчиненных();
Счет=СоздатьОбъект("Счет.Основной");
Для инд=1 по кол Цикл
СчетXML=План.ПолучитьПодчиненныйПоНомеру(инд);
КолСубсчетов=СчетXML.КоличествоПодчиненных();
// подчиненным элементом является и содержимое элемента
Если КолСубсчетов>1 Тогда
Счет.Новый(1);
Иначе
Счет.Новый(0);
КонецЕсли;
Счет.Код=СчетXML.ПолучитьАтрибут("Код");
Счет.Наименование=СчетXML.Значение;
Счет.Валютный=СчетXML.ПолучитьАтрибут("Валютный");
Счет.Количественный=СчетXML.ПолучитьАтрибут("Количественный");
Счет.Забалансовый=СчетXML.ПолучитьАтрибут("Забалансовый");
Если СчетXML.ПолучитьАтрибут("вид")="активный" Тогда
Счет.Активный=1;
ИначеЕсли СчетXML.ПолучитьАтрибут("вид")="пассивный" Тогда
Счет.Активный=2;
Иначе
Счет.Активный=3;
КонецЕсли;
Счет.Записать();
Если КолСубсчетов>1 Тогда
Счет1=СоздатьОбъект("Счет.Основной");
Для инд1=2 По кол_субсчетов Цикл
Субсчет=СчетXML.ПолучитьПодчиненныйПоНомеру(инд1);
Счет1.Новый(0);
Счет1.Код=Субсчет.ПолучитьАтрибут("Код");
// аналогично устанавливаются все атрибуты создаваемого субсчета
Счет1.Записать();
КонецЦикла;
КонецЕсли;
КонецЦикла;
Код 1C v 8.х // Код получает валютные счета и их субконто!
// с отбором по счетам (только валютные счета, исключая забалансовые, авансовые и те, которые переоцениваются
// особым способом.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Хозрасчетный.Ссылка КАК Счет,
| ХозрасчетныйВидыСубконто.ВидСубконто,
| ПРЕДСТАВЛЕНИЕ(ХозрасчетныйВидыСубконто.ВидСубконто.ТипЗначения)
|ИЗ
| ПланСчетов.Хозрасчетный КАК Хозрасчетный
| ЛЕВОЕ СОЕДИНЕНИЕ ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконто
| ПО (ХозрасчетныйВидыСубконто.Ссылка = Хозрасчетный.Ссылка)
|ГДЕ
| Хозрасчетный.Валютный
| И (НЕ Хозрасчетный.Забалансовый)
| И (НЕ Хозрасчетный.Ссылка В
| (ВЫБРАТЬ
| СчетаСОсобымПорядкомПереоценки.Счет
| ИЗ
| РегистрСведений.СчетаСОсобымПорядкомПереоценкиБУ КАК СчетаСОсобымПорядкомПереоценки))
| И (НЕ Хозрасчетный.Ссылка В (&СписокАвансовыхСчетов))";
СписокАвансовыхСчетов = Новый СписокЗначений;
СписокАвансовыхСчетов.Добавить(ПланыСчетов.Хозрасчетный.РасчетыПоАвансамВыданнымВал);
СписокАвансовыхСчетов.Добавить(ПланыСчетов.Хозрасчетный.РасчетыПоАвансамВыданнымУЕ);
СписокАвансовыхСчетов.Добавить(ПланыСчетов.Хозрасчетный.РасчетыПоАвансамПолученнымВал);
СписокАвансовыхСчетов.Добавить(ПланыСчетов.Хозрасчетный.РасчетыПоАвансамПолученнымУЕ);
Запрос.УстановитьПараметр("СписокАвансовыхСчетов",СписокАвансовыхСчетов);
ТЗСчетаВидыСубконтоИЗначения = Запрос.Выполнить().Выгрузить();