Просмотрщик файлов DBF (DBFViewer), переделанный для управляемых форм

15.12.14

Разработка - Разработка внешних компонент

Просмотр содержимого DBF файла с возможностью печати его структуры.
Поддержка как DOS, так и Windows кодировки.

Скачать файлы

Наименование Файл Версия Размер
DBFViewer8_3
.erf 10,55Kb
41
.erf 10,55Kb 41 Скачать

По роду своей деятельности часто приходится иметь дело с форматом "DBF". Причем работа ведется на управляемых формах.

Т.к. для модального режима внешний отчет уже написан, то чтобы каждый раз не менять режим, я переделал его для управляемых форм.

Надеюсь, кому - либо пригодится.

Отчет в прикреплении.

Исходный код:

&НаКлиенте
Перем База;

&НаКлиенте
Функция ДиалогОткрытияФайлаDBF()
	СтандартнаяОбработка = Ложь;
	ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    ДиалогОткрытияФайла.Фильтр = "Файлы DBF(*.dbf)|*.dbf|";
	ДиалогОткрытияФайла.ПроверятьСуществованиеФайла = Истина;
	ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
	ДиалогОткрытияФайла.Заголовок = "Выберите файл dbf (Формат - Data Base III)";
 
	Если ДиалогОткрытияФайла.Выбрать() Тогда
		Возврат ДиалогОткрытияФайла.ПолноеИмяФайла;
	Иначе
		Возврат Неопределено;
	КонецЕсли;
КонецФункции

&НаКлиенте
Процедура ДиалогСВопросом(ТекстВопроса, ЗаголовокВопроса, РежимДиалога)
    Оповещение = Новый ОписаниеОповещения("ПослеЗакрытияВопроса", ЭтотОбъект);
 
    ПоказатьВопрос(Оповещение,
        ТекстВопроса,
        РежимДиалога,
        0,
        КодВозвратаДиалога.Да,
        ЗаголовокВопроса
    );
КонецПроцедуры
 
&НаКлиенте
Процедура ПослеЗакрытияВопроса(Результат, Параметры) Экспорт		
    Если Результат = КодВозвратаДиалога.Да Тогда
        ЗагрузкаДанных();
    КонецЕсли;	
КонецПроцедуры

&НаСервере
Процедура ДобавитьПоляВТЗ(МассивСтруктур)
	/////////////////////////////////////////////////////////
	//Преобразуем массив структур в исходную таблицу значений	
	ИсхТЗ = Новый ТаблицаЗначений;
	Для Каждого ЭлементМассива Из МассивСтруктур Цикл
	    //Если еще не добавили, добавляем колонки
	    Если ИсхТЗ.Колонки.Количество() = 0 Тогда
	        Для Каждого ЗначениеСтруктуры Из ЭлементМассива Цикл
	            ИсхТЗ.Колонки.Добавить(ЗначениеСтруктуры.Ключ);
	        КонецЦикла;
	    КонецЕсли;
	    //Добавляем данные в таблицу
	    НоваяСтрока = ИсхТЗ.Добавить();
	    Для Каждого ЗначениеСтруктуры Из ЭлементМассива Цикл
	        НоваяСтрока[ЗначениеСтруктуры.Ключ] = ЗначениеСтруктуры.Значение;
	    КонецЦикла;
	КонецЦикла;
	/////////////////////////////////////////////////////////
	
	/////////////////////////////////////////////////////////
	//Почистим таблицу на форме
	ТЗНаФорме.Очистить();
	МассивУдаляемыхРеквизитов = Новый Массив;
    РеквизитыТЗ = ПолучитьРеквизиты("ТЗНаФорме");
	Если РеквизитыТЗ.Количество() > 0 Тогда
		Для Каждого Реквизит Из РеквизитыТЗ Цикл
	 		МассивУдаляемыхРеквизитов.Добавить("ТЗНаФорме." + Реквизит.Имя);
		КонецЦикла;
		ЭтаФорма.ИзменитьРеквизиты(,МассивУдаляемыхРеквизитов);
		
		Для Каждого Реквизит Из РеквизитыТЗ Цикл
			УдаляемыйЭлемент = Элементы.Найти("ТЗНаФорме_" + Реквизит.Имя);
			Если УдаляемыйЭлемент <> Неопределено Тогда
				Элементы.Удалить(УдаляемыйЭлемент);
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;
	/////////////////////////////////////////////////////////
	
	/////////////////////////////////////////////////////////
	//Создаем массив реквизитов - колонок для таблицы значений на форме
	МассивРеквизитов = Новый Массив;
	Для Каждого Колонка Из ИсхТЗ.Колонки Цикл
    	МассивРеквизитов.Добавить(Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения, "ТЗНаФорме", Колонка.Заголовок)); 
	КонецЦикла;
	/////////////////////////////////////////////////////////
	
	/////////////////////////////////////////////////////////
	//Выводим добавленные колонки на форму
	ЭтаФорма.ИзменитьРеквизиты(МассивРеквизитов);
    ЗначениеВРеквизитФормы(ИсхТЗ, "ТЗНаФорме");
	Таблица = Элементы.ТЗНаФорме;
	Таблица.Отображение = ОтображениеТаблицы.Список;
    Для Каждого Колонка Из ИсхТЗ.Колонки Цикл
       НовыйЭлемент = Элементы.Добавить("ТЗНаФорме_" + Колонка.Имя, Тип("ПолеФормы"), Таблица); 
       НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода; 
       НовыйЭлемент.ПутьКДанным = "ТЗНаФорме." + Колонка.Имя;
   КонецЦикла;
   /////////////////////////////////////////////////////////
КонецПроцедуры

&НаКлиенте
Процедура ОсновныеДействияФормыОткрыть(Кнопка)	
	ИмяФайла = ДиалогОткрытияФайлаDBF();
	Если ИмяФайла = Неопределено Тогда
		Возврат;
	КонецЕсли;
	База = Новый XBase;
	Попытка
    	База.ОткрытьФайл(ИмяФайла);
    Исключение
        Сообщить("Произошла ошибка при обращение к файлу dbf:" + Символы.ПС + ОписаниеОшибки());
        Возврат;
	КонецПопытки;
		
	Если ФДОС=Истина Тогда
		База.Кодировка=КодировкаXBase.OEM;
	Иначе
		База.Кодировка=КодировкаXBase.ANSI;
	КонецЕсли;
		
	База.ОтображатьУдаленные = Истина;	
	Записей = База.КоличествоЗаписей();
	
	Если (Записей > 10000) И (Ф100 = Ложь) Тогда
		Режим = РежимДиалогаВопрос.ДаНет;
		ТекстВопроса = "Количество записей в файле " + Записей + ". Продолжить?";
		ДиалогСВопросом(ТекстВопроса, "Длительная загрузка данных!", РежимДиалогаВопрос.ДаНет);
	Иначе
		ЗагрузкаДанных();
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ЗагрузкаДанных()
	Записей = База.КоличествоЗаписей();
	МассивСтруктур = Новый Массив;
	Для А=1 По Записей Цикл		
		Состояние("Выводится запись "+А+" из "+Записей, Цел(А/Записей*100));
		Если Ф100 И (А>100) Тогда
			Прервать;
		КонецЕсли;
		База.Перейти(А); 
		
		СтруктураКолонок = Новый Структура;
		
		Если База.ЗаписьУдалена()=Истина Тогда
			СтруктураКолонок.Вставить("Удален","•");
		Иначе
			СтруктураКолонок.Вставить("Удален"," ");
		КонецЕсли;
		СтруктураКолонок.Вставить("N", А);
		Для Каждого Поле из База.Поля Цикл
			СтруктураКолонок.Вставить(Поле.Имя, База.ПолучитьЗначениеПоля(Поле.Имя));
		КонецЦикла;
		МассивСтруктур.Добавить(СтруктураКолонок);
	КонецЦикла;
	ДобавитьПоляВТЗ(МассивСтруктур);
	База.ЗакрытьФайл();
КонецПроцедуры

&НаСервере
Функция ПолучитьМакетНаСервере(ИмяМакета)
	ТекОбъект = РеквизитФормыВЗначение("Отчет");
	Возврат ТекОбъект.ПолучитьМакет(ИмяМакета);
КонецФункции

&НаКлиенте
Процедура ОсновныеДействияФормыСтруктура(Кнопка)	
	Если ИмяФайла = "" Тогда 
		Возврат;
	КонецЕсли;	
	База = Новый XBase;		
    База.ОткрытьФайл(ИмяФайла);
	МассивПолей = Новый Массив;
	Для Каждого Поле Из База.Поля Цикл
		МассивПолей.Добавить(Новый Структура("Имя, Тип, Длина, Точность", Поле.Имя, Поле.Тип, Поле.Длина, Поле.Точность));
	КонецЦикла;
	Таб = Новый ТабличныйДокумент;
	ОсновныеДействияФормыНаСервере(МассивПолей, Таб);
	База.ЗакрытьФайл();
	Таб.Показать("Структура файла DBF");
КонецПроцедуры

&НаСервере
Процедура ОсновныеДействияФормыНаСервере(МассивПолей, Таб)	
	Макет  = ПолучитьМакетНаСервере("Структура");
	Секция = Макет.ПолучитьОбласть("Шапка");
	Секция.Параметры.ИмяФайла = ИмяФайла;
	Таб.Вывести(Секция);
	Секция = Макет.ПолучитьОбласть("Повтор");	
	Для Каждого Поле Из МассивПолей Цикл
		Секция.Параметры.Заполнить(Поле);
		Таб.Вывести(Секция);
	КонецЦикла;
КонецПроцедуры

&НаКлиенте
Процедура ЗакрытьФорму(Команда)
	ЭтаФорма.Закрыть();
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	ИмяФайла="";
	ФДОС = Истина;
КонецПроцедуры

DBF

См. также

SALE! 10%

[ED3] Обмен для ERP 2.5, КА 2.5, УТ 11.5 БП 3.0, Розница, УНФ и других с EnterpriseData (универсальный формат обмена), правила обмена

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

25080 руб.

12.06.2017    134605    718    291    

387

Перенос данных из УПП 1.3 в БП 3.0. Переносятся документы (обороты за период), справочная информация и остатки

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.223.x) и БП 3.0 (3.0.149.x). Правила подходят для версии ПРОФ и КОРП.

28000 руб.

15.12.2021    20091    132    38    

90

SALE! 10%

Перенос данных из ERP 2 / КА 2 в ЗУП 3

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Управленческий учет Платные (руб)

Обработка позволяет не только перенести все документы, справочную информацию и начальные остатки из ERP 2 или КА 2 в ЗУП 3, но и организовать регулярный перенос данных между программами 1С:ERP 2 / КА 2 и 1С:ЗУП 3. Вы можете выбрать период отбора данных и установить фильтр по организациям, чтобы выгружать только необходимую информацию. Более того, перенос оперативно обновляется при выходе новых релизов программы 1С, так что вы всегда будете иметь самую актуальную версию обработки.

48278 43450 руб.

03.12.2020    34034    80    57    

78

SALE! 10%

Перенос данных из ERP 2 / КА 2 / УТ 11 в БП 3.0

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос позволяет настроить собственный обмен данными между указанными программами, альтернативный предлагаемому фирмой 1С. Перенос данных осуществляется из 1С:ERP 2 / 1С:КА 2 / 1С:УТ 11 в 1С:БП 3.0. Правила обмена оперативно обновляются при выходе новых релизов программы 1С, так что вы всегда будете иметь самую актуальную версию обработки.

38500 34650 руб.

15.04.2019    68199    176    136    

108

Перенос данных из Парус 10 в ЗГУ ред.3

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Обмен между базами 1C Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 10 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

60000 руб.

05.10.2022    9155    9    8    

10

Перенос данных из УТ 10.3 в УТ 11.5. Переносятся документы (обороты за период), справочная информация и остатки

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 1С:Управление торговлей 11 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.87.x) и УТ 11.5 (11.5.16.x).

28000 руб.

23.07.2020    46021    194    64    

153

SALE! 10%

Перенос данных из БП 3.0 в УНФ 3.0 / УНФ 1.6

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Обработка позволяет начать вести учет в программе "1С:Управление нашей фирмой" редакции 3.0 или 1.6, то есть перенести в нее из существующей базы "1С:Бухгалтерия предприятия, ред. 3.0" начальные остатки на выбранную дату, документы за период времени и также всю необходимую справочную информацию. По вашему запросу мы можем бесплатно добавить в правила переноса дополнительные виды объектов (например, новые виды документов). Обработка по переходу на новую программу 1С включает в себя правила конвертации в формате XML, обработку для выгрузки и загрузки данных, а также инструкцию по работе.

50722 45650 руб.

10.07.2018    67277    41    118    

46

Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2

Загрузка и выгрузка в Excel Логистика, склад и ТМЦ Ценообразование, анализ цен Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)

Эволюция не стоит на месте - новая удобная версия функциональной обработки для Вашего бизнеса! Что же Вы получаете? Удобный и интуитивно понятный интерфейс с 3-мя этапами работы. 2 режима - автоматический и ручной. Чтение XLSX, XLSM, CSV, XML/YML форматов без офиса, на любом сервере! Визуальное связывание колонок файла и реквизитов простым перетаскиванием колонок. Создание или обновление номенклатуры с иерархией, характеристик, доп. реквизитов, упаковок, загрузка практически неограниченного количества картинок на одну номенклатуру (с возможностью загрузки в несколько потоков одновременно), с хранением в томах или в базе. Загрузка номенклатуры поставщиков или поиск по их данным номенклатуры. Загрузка доп. реквизитов в характеристики. Загрузка штрихкодов с генерацией новых. Создание элементов справочников и ПВХ "на лету" для выбранных реквизитов. (Обновление от 11.12.2023, версия 9.5 - 9.9)

13200 руб.

20.11.2015    150383    365    375    

499
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. AleksSF 222 17.12.14 08:12 Сейчас в теме
Было бы хорошо, чтобы можно было редактировать и сохранять. Просто смотреть можно и в Excel.
2. cheiser1982 209 17.12.14 12:40 Сейчас в теме
(1) AleksSF, спасибо за совет, я думаю в ближайшее время добавлю и сохранение. Просто пока со временем туго.
3. ufedor 58 23.12.14 13:50 Сейчас в теме
Есть несколько комментариев:

1. Загрузка всего файла в память не всегда может быть нужна (и не всегда возможна). Особенно для отображения в управляемой форме. Нужно копать в сторону загрузки частями.
2. Всю обработку можно (и нужно) выполнять на клиенте. Зачем нужна передача на сервер, зачем массив структур?
3. Почему табличный документ? Вывод в виде таблицы на форму был бы логичнее.
4. Не проверяли скорость работы через ADO?
4. cheiser1982 209 24.12.14 06:14 Сейчас в теме
(3) ufedor, вся проблема в использовании таблицы значений - ее создание и редактирование полей на клиенте не поддерживается, так-же из-за этого я использую передачу массива структур. Насчет способов вывода (в качестве табличного документа или в виде таблицы), признаюсь, особо не заморачивался - что первым пришло в голову, то и применил.
По поводу загрузки частями полностью с Вами согласен.
Скорость не проверял.
Оставьте свое сообщение