Имя: Пароль:
1C
 
8.3 (УФ): выгрузка в dbf - вместо русских букв знаки вопросов!!!
0 dft2014
 
01.03.15
00:02
8.3 управляемое приложение

Пишу обработку для выгрузки в dbf-файл. Файл формируется, но вместо русских букв вопросительные знаки ?????? Подскажите, где ошибка? Пробовала прописывать разную кодировку (OEM и ANSI), но не помогло. Вот код:


&НаКлиенте
Процедура Выгрузить(Команда)
    Структура = ВыгрузитьДанные();
    ПолучитьФайл(Структура.Адрес,Структура.Имя);
КонецПроцедуры


&НаСервере
Функция ВыгрузитьДанные()
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ВедомостьНаВыплатуЗарплатыВБанкЗарплата.КВыплате,
    |    ВедомостьНаВыплатуЗарплатыВБанкЗарплата.НомерЛицевогоСчета,
    |    ФИОФизическихЛицСрезПоследних.Фамилия
    |ИЗ
    |    Документ.ВедомостьНаВыплатуЗарплатыВБанк.Зарплата КАК ВедомостьНаВыплатуЗарплатыВБанкЗарплата
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФИОФизическихЛиц.СрезПоследних КАК ФИОФизическихЛицСрезПоследних
    |        ПО ВедомостьНаВыплатуЗарплатыВБанкЗарплата.Сотрудник.ФизическоеЛицо = ФИОФизическихЛицСрезПоследних.ФизическоеЛицо
    |ГДЕ
    |    ВедомостьНаВыплатуЗарплатыВБанкЗарплата.Ссылка.Организация = &Организация
    |    И ВедомостьНаВыплатуЗарплатыВБанкЗарплата.Ссылка.ЗарплатныйПроект = &ЗарплатныйПроект";
    
    Запрос.УстановитьПараметр("ЗарплатныйПроект", Проект);
    Запрос.УстановитьПараметр("Организация", Организация);
    
    РезультатЗапроса = Запрос.Выполнить();
    ТаблицаЗапроса=РезультатЗапроса.Выгрузить();
    ТаблицаЗапроса.Свернуть("Фамилия,НомерЛицевогоСчета","КВыплате");
    
    
    БД = Новый XBase;
    БД.Поля.Добавить("CODE", "S", "32");
    БД.Поля.Добавить("SUMMA", "N", "16", "2");
    БД.поля.Добавить("FIO", "S", "40");
    
    Файл=Новый Файл(ПолучитьИмяВременногоФайла("dbf"));
    ИмяТемпФайла=СтрЗаменить(Файл.ПолноеИмя,Файл.Имя,"")+Лев(Файл.ИмяБезРасширения,8)+Файл.Расширение;
    
    БД.СоздатьФайл(ИмяТемпФайла);
    
    //    БД.Кодировка = КодировкаXBase.OEM;  //такая кодировка тоже не помогает
    БД.Кодировка = КодировкаXBase.ANSI;
    БД.АвтоСохранение     = Истина;
    
    Для каждого СтрокаТЗ Из ТаблицаЗапроса Цикл
        БД.Добавить();
        БД.CODE  = СокрЛП(СтрокаТЗ.НомерЛицевогоСчета);
        БД.FIO   = СокрЛП(СтрокаТЗ.Фамилия);
        БД.SUMMA = СтрокаТЗ.КВыплате;
    КонецЦикла;
    
    БД.ЗакрытьФайл();
    
    ДД = Новый ДвоичныеДанные(ИмяТемпФайла);
    Адрес=ПоместитьВоВременноеХранилище(ДД);
    
    возврат Новый Структура("Адрес,Имя",Адрес,ИмяТемпФайла);
    
КонецФункции
1 dft2014
 
01.03.15
00:06
Вот как это выглядит: http://s017.radikal.ru/i421/1502/3a/415be62cbd60.jpg
2 Garykom
 
гуру
01.03.15
00:12
(0) попробовать установить кодовую страницу (БД.Кодировка = КодировкаXBase.OEM) не после создания файла (БД.СоздатьФайл(ИмяТемпФайла)) а до

(1) а может просто кодовая в файле не соответствует содержимому или шрифта нету или не понимает ваш просмотрщик

попробовать http://www.alxsoft.narod.ru/RUS/dbfnav.htm там кнопочку OEM|DOS переключать
3 dft2014
 
01.03.15
00:29
(2) Пробовала переместить выше БД.Кодировка = КодировкаXBase.OEM чтобы она была раньше БД.СоздатьФайл(ИмяТемпФайла) - не помогло.

Установила себе DBFNavigator: пробовала менять кодировку с помощью переключателя. Вопросительные знаки не превратились в буквы, ничего не поменялось...

Что еще можно попробовать???
4 SSSSS_AAAAA
 
01.03.15
00:41
(3) Вопросительные знаки кодировкой не поменяются. Это что-то в системе накосячено. 1С тут не при делах, уже проверено.
5 Garykom
 
гуру
01.03.15
01:01
6 dft2014
 
01.03.15
01:04
(4) Наверное вы правы: при запуске на файловой базе - такой проблемы нет. А какие настройки надо на сервере посмотреть? У нас на сервере 1С везде установлены русские настройки и русский язык. Винда WindowsServer2008R2.
7 Garykom
 
гуру
01.03.15
01:59
XBase (XBase)
Доступность:
Тонкий клиент, сервер, толстый клиент, внешнее соединение.

(6) так что сделайте создание dbf на клиенте и все
8 dft2014
 
01.03.15
02:10
(7) Как???
9 Garykom
 
гуру
01.03.15
02:46
(8) написав над процедурой/функцией &НаКлиенте

еще в нее сразу данные простых типов передавать для записи (число, строка ...) или получая значения простых типов внутри процедуры/функции вызывая серверные функции (которые возвращают простые типы)
10 SadrArt
 
01.03.15
04:35
 Попробуйте заменить в своем коде
        Кодир = "cp866";        // КодировкаТекста.OEM;
или
        Кодир = "windows-1251"; // КодировкаТекста.ANSI;

    
11 Torquader
 
01.03.15
12:19
Проблема в том, что нужно на сервере настраивать кодовую страницу для старых программ в русскую, так как Кодировка.OEM или Кодировка.ANSI как раз применяет именно установленную там кодировку, и, если она неправильная, то будут вопросики.
P.S. конечно, можно быть очень большим Гуру и собрать DBF-Файл через ADO.
12 EvgeniuXP
 
01.03.15
13:53
переустановить сервер и настроить всё заново :)
13 Torquader
 
01.03.15
13:59
(12) Вам бы всё переустанавливать.
Нужно, всего лишь, выбрать правильно языковые настройки.
Основная теорема систематики: Новые системы плодят новые проблемы.