• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Выгрузка В Клиент Банк Из Збу8 На Пластиковую Карту

  • Автор темы Nikolon
  • Дата начала
N

Nikolon

В общем я недавно начал изучать 1с, почти ничего не знаю=) Требуется организовать в ЗБУ8 выгрузку в dbf файл, чтобы тот грузился в клиент банк для начисления зп сотрудников на пластиковую карту.
Не долго думая решил с коммуниздить данный метод из ЗиК 77, там данная возможность уже реализована.
В последней демке ЗБУ нарисовал на второй странице формы документа нужные поля. Я раньше программировал на с++ и немного не понимаю принципа opendlg в 1с, и еще проблема в том что синтекс 7.7 и 8.2 немного отличается. Синтаксис помощник не особо помог-) Напишите плз как реализуется создание файла .dbf
Вот код и 7ки:

Код:
Процедура Выгрузить() 

Если ПустаяСтрока(ФайлВыгрузки)=1 Тогда
Предупреждение("Не указан файл.");
Возврат;
ИначеЕсли ФС.СуществуетФайл(ФайлВыгрузки) = 1 Тогда
Если Вопрос("Файл "+ФайлВыгрузки+" существует!"+РазделительСтрок+"Переписать?","Да+Нет") = "Нет" Тогда
Возврат;
КонецЕсли;
КонецЕсли;


DBF = СоздатьОбъект("XBASE");
// Кодировка DOS
DBF.КодоваяСтраница(1);

DBF.ДобавитьПоле("TAB_N","S",10,0);
DBF.ДобавитьПоле("NAME","S",70,0);
DBF.ДобавитьПоле("SUM_PAY","N",12,2);


DBF.СоздатьФайл(ФайлВыгрузки); 

ВыбратьСтроки();

Пока ПолучитьСтроку()>0 Цикл  

DBF.Добавить(); 

DBF.TAB_N=Сотрудник.Код;
DBF.NAME=СокрЛП(Сотрудник);
DBF.SUM_PAY=Сумма;
DBF.Записать();

КонецЦикла;

Если DBF.Открыта()=1 Тогда
DBF.ЗакрытьФайл();
КонецЕсли;

Предупреждение("Выгрузка завершена ...");

КонецПроцедуры


Получается в файл выгружается ФИО работника, код и сумма зп.
Допустим в 8ке нет метода СоздатьОбъект, ругается еще много на что, но думаю я разберусь...

Заранее спс за помощь, не сильно кидайте в меня камнями за мой дибилизм, сам понимаю что тут дело 5 минут для опытного программера, коим я не являюсь=)
 
U

User1C

Вот пример работы с dbf на 8.2:

Код:
ИмяФайла = "d:\zp.dbf";
ИмяФайлаБазы = Новый Файл(ИмяФайла);
База = Новый XBase;

Если НЕ ИмяФайлаБазы.Существует() Тогда
База.Кодировка = КодировкаXBase.OEM;

База.Поля.Добавить("TAB_N","S",10,0);
База.Поля.Добавить("NAME","S",70,0);
База.Поля.Добавить("SUM_PAY","N",12,2);
База.СоздатьФайл(ИмяФайла);
База.Записать();

КонецЕсли;

Твой код: заполняешь дальше свою dbf

Код:
База.ЗакрытьФайл();

Предупреждение("Выгрузка завершена ...");
 
G

Guest

Код:
Процедура Выгрузить() 

Если ПустаяСтрока(ФайлВыгрузки)=1 Тогда
Предупреждение("Не указан файл.");
Возврат;
ИначеЕсли ФС.СуществуетФайл(ФайлВыгрузки) = 1 Тогда
Если Вопрос("Файл "+ФайлВыгрузки+" существует!"+РазделительСтрок+"Переписать?","Да+Нет") = "Нет" Тогда
Возврат;
КонецЕсли;
КонецЕсли;


DBF = СоздатьОбъект("XBASE");
// Кодировка DOS
DBF.КодоваяСтраница(1);

DBF.ДобавитьПоле("TAB_N","S",10,0);
DBF.ДобавитьПоле("NAME","S",70,0);
DBF.ДобавитьПоле("SUM_PAY","N",12,2);


DBF.СоздатьФайл(ФайлВыгрузки); 

ВыбратьСтроки();

Пока ПолучитьСтроку()>0 Цикл  

DBF.Добавить(); 

DBF.TAB_N=Сотрудник.Код;
DBF.NAME=СокрЛП(Сотрудник);
DBF.SUM_PAY=Сумма;
DBF.Записать();

КонецЦикла;

Если DBF.Открыта()=1 Тогда
DBF.ЗакрытьФайл();
КонецЕсли;

Предупреждение("Выгрузка завершена ...");

КонецПроцедуры

А можешь весь мод скинуть?
 
N

Nikolon

[
А можешь весь мод скинуть?
Пока в процессе, как доделаю скину...
Просто в 7ке и в 8ке разные реквизиты табличной части и я пока не разобрался как взять код и наименование сотрудника, вернее откуда его брать. В табличной есть только физлицо (Справочники.Физлица группа сотрудники). Вот как взять в справочнике наименование и его код пока не понял... Если сегодня не пойму завтра у начальника спрошу...
Кстати вот ссылка на хороший справочник по синтаксису:
 
G

Guest

B) А ну ясно...просто показалось что на 7 у тебя есть готовый.
 
N

Nikolon

мда... я попытался скинуть модуль формы документа, но он не влез)))
объяню более понятно: в 1с77 Зик типовой, уже имеется данная возможность а вот в БГУ8 такого нет, хочу просто перенести. Код сюда не лезит, если выкладывать модуль формы документа.\
 
D

Darlock

Эксперт, возьми пример с Nikolon. Русским по белому сказано, что в типовой ЗиК 77 модуль есть. Вплоть до того, что процедура из того модуля указана. B)
 
N

Nikolon

Есть ПолеВвода1, нарисовано на форме, добавил кнопочку Обзор, нажимаем отрабатывает данная процедура:

Код:
	ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
ДиалогВыбора.Фильтр = "Data Base File(*.dbf)|*.dbf";
ДиалогВыбора.Заголовок = "Выберите каталог для создания файла";
Если НЕ ДиалогВыбора.Выбрать() Тогда
Возврат;
КонецЕсли;	
ПутьКФайлу = ДиалогВыбора.Каталог;

Сама выгрузка отрабатывает, но надо чтобы в ПолеВвода отображался каталог, куда я сохраняю. Тоесть нужно передать переменную ПутьКФайлу в ПолеВвода1, как это можно сделать? И еще один маленький вопросик, как сделать чтобы при сохранении не нужно было указывать имя файла, а оно на автомате было задано... По аналогии у меня в коде создается dbf файл вот так:

Код:
БД.СоздатьФайл(ПутьКФайлу+("start.dbf");
 
N

Nikolon

Ой сори я даун....) Там надо было не поле выбора использовать а поле ввода))) и

Код:
ПутьКФайлу = ДиалогВыбора.ВыбранныеФайлы;

и в процедуре перед открытием задавать имя файла по умолчанию=)
 
D

Darlock

8.2:
Код:
Элементы.ЭлементыФормы.ПолеВвода1.Значение = ПутьКфайлу + ("start.dbf")

8.1
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Выбор файла</div></div><div class="sp-body"><div class="sp-content">
Код:
ДиалогФыбораФайла									  =Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);

ДиалогФыбораФайла.Фильтр						=	"Файл для загрузки (*.dbf)|*.dbf";
ДиалогФыбораФайла.Расширение					=	"dbf";
ДиалогФыбораФайла.Заголовок						=	"Выберите файл";
ДиалогФыбораФайла.ПредварительныйПросмотр		=	Ложь;
ДиалогФыбораФайла.ИндексФильтра					=	0;
ДиалогФыбораФайла.ПолноеИмяФайла				=	Элемент.Значение;
ДиалогФыбораФайла.ПроверятьСуществованиеФайла	=	Истина;
Если ДиалогФыбораФайла.Выбрать() Тогда
Элемент.Значение = ДиалогФыбораФайла.ПолноеИмяФайла;
КонецЕсли;

<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Выбор каталога</div></div><div class="sp-body"><div class="sp-content">
Код:
ДиалогФыбораФайла									  =Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);

Если ДиалогФыбораФайла.Выбрать() Тогда
Элемент.Значение = ДиалогФыбораФайла.ПолноеИмяФайла;
КонецЕсли;
 
N

Nikolon

Разницы никакой, все отличие в доступных изначально кнопках работы с полем.

У полявыбора нельзя менять тип данных, он стоит произвольный, а я все бился как его сделать строковым=) Блин аж стыдно))) Такая легкая задачка а я... Спасибо всем за помощь, буду дальше биться об стену=))) Ибо овны не сдаются=)
 
N

Nikolon

Все сделал, все работает, с dbf файлом проблем не было, а вот с диалогами помучился, зато в будущем будет прок=). Спасибо за помощь. Если кому то надо пишите в личку, скину модуль.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!