На виртуальном сервере установлена CentOS 6.5 и сервер 1С 8.3 - все 64 бит.
Нужно опубликовать 1С на веб сервере , инструкция примерно такая:
1) Ставишь httpd.
2) Создаешь папки, где будут хранится конф. файлы, например /var/www/html/baza
3) Прописываешь базу штатной утилиткой:
* заходим в папку с 1с (для х32): cd /opt/1c/v8.2/i386
* ./webinst -apache22 -wsdir baza -dir '/var/www/html/baza/' -connStr 'Srvr="1c.mydomain.com";Ref="baza"' -confPath /etc/httpd/conf/httpd.conf
* проверям, что в созданном файлике /var/www/html/baza/default.vrd и нет лишних (двойных) "/" . У меня они каждый раз появлялись и каждый раз мне проще было их удалить чем вникать, где в команде я напортачил. (также стоит проверить /etc/httpd/conf/httpd.conf, база прописывается в самый конец конфига).
4) ставишь на папку права для пользователя apache: chown apache:apache /var/www/html/baza и перезагружаешь апач.
Вот, в общем то и все.
Делаем публикацию 1С на веб сервере:
Код Batch File (DOS, CMD, BAT) ./webinst -apache22 -wsdir base -dir '/var/www/html/base/' -connStr 'Srvr=5.101.113.142;Ref=tur;' -confPath /etc/httpd/conf/httpd.conf Публикация прошла успешно.
В файл httpd.conf добавляется
LoadModule _1cws_module "/opt/1C/v8.3/i386/wsap22.so"
# 1c publication
Alias "/base" "/var/www/html/base/"
<Directory "/var/www/html/base/">
AllowOverride All
Options None
Order allow,deny
Allow from all
SetHandler 1c-application
ManagedApplicationDescriptor "/var/www/html/base/default.vrd"
</Directory>
содержимое default.vrd
<?xml version="1.0" encoding="UTF-8"?>
http://v8.1c.ru/8.2/virtual-resource-system"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"
base="/base"
ib="Srvr=5.101.113.142;Ref=tur;"/>
Перезапускам Апач и apache2: Syntax error on line 202 of /etc/apache2/apache2.conf: Syntax error on line 1 of /etc/apache2/httpd.conf:
Cannot load /opt/1C/v8.3/i386/wsap22.so into server: /opt/1C/v8.2/i386/wsap22.so: wrong ELF class: ELFCLASS32
Т.е. ему не нравится вот это
LoadModule _1cws_module "/opt/1C/v8.2/i386/wsap22.so"
Выглядит это так:
Проблема в том, что 64-битный апач не хочет работать ( нужно заменить его на 32-битный!
Порядок действий такой:
1. Нужно подкорректировать файлы репозитария, чтобы он загружал 32-битные версии: Открываем /etc/yum.repos.d/, копируете эти файлы для архива и исправляете в текущих $basearch на i686.
2. чистим кэш так: yum clean all или в папке /var/cache/yum/
3. yum install httpd.i686
4. reboot
После перезапуска
./webinst -apache22 -wsdir base -dir '/var/www/html/base/' -connStr 'Srvr=5.101.113.142;Ref=tur;' -confPath /etc/httpd/conf/httpd.conf
Задаем владельца для файла default.vrd:
chown apache:apache /var/www/html/base/default.vrd
Перезагрузим сервера 1с и апач:
/etc/init.d/httpd restart
/etc/init.d/srv1cv82 restart
Еще раз перезагружаем
проверяем - Все будет ОК
Да в 1С8 есть отладка web-сервисов и она работает для внешних не 1с систем. Это очень здорово.
Для локального web-сервиса необходимо:
1. Положить на клиент где запускаю конфигуратор и предприятие файлик webservicecfg.xml:
Код VBS <config xmlns="http://v8.1c.ru/v8/webservicecfg">
<debugconfig debug="true">
</config>
2. В файл default.vrd добавить строку <debug enable=”true” url=”tcp://localhost” />
Пример файла:
Код VBS <?xml version="1.0" encoding="UTF-8"?>
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" base="/Base" ib="File="D:\work\Base";">
<ws>
<point name="Files" alias="files.1cws" enable="false"/>
<point name="myservice" alias="myservice.1cws"/>
</ws>
<debug enable="true" url="tcp://localhost" />
</point>
3. Выбрать в конфигураторе подключать Web-сервисы автоматически
Для серверного варианта надо еще сервер 1с запускать в режим отладки с ключом /debug
Оригинал статьи
http://www.sql.ru/forum/actualthread.aspx?tid=839056
Пример с картинками для 1С 8.1[url= http://infostart.ru/public/86791/] http://infostart.ru/public/86791/[/url]
Для внешней отладки пользуюсь хорошим дополнением для Firefox:
https://addons.mozilla.org/en-US/firefox/addon/soa-client/?src=api
Сайт
sikuda.ru Код 1C v 7.x Перем ИмяПути,ИмяФайла;
Перем xmlParser;
//пример чтения xml файла.
Функция УстановитьКомпоненту()
Если ЗагрузитьВнешнююКомпоненту(КаталогИБ()+"ExtFormsv7plus.dll")=0 Тогда
Если ЗагрузитьВнешнююКомпоненту("v7plus.dll")=0 Тогда
Сообщить("Не удалось обнаружить компоненту V7Plus.dll!");
Возврат 0;
КонецЕсли;
КонецЕсли;
Попытка
xmlParser = СоздатьОбъект("Addin.XmlParser") ;
Исключение
Сообщить("Не удалось создать объект Addin.XmlParser!");
Возврат 0;
КонецПопытки;
Возврат 1;
КонецФункции // УстановитьКомпоненту
Процедура Выполнить()
стрИмяФайла=ИмяПути+ИмяФайла;
таб=СоздатьОбъект("ТаблицаЗначений");
таб.НоваяКолонка("Ф","Строка",50,0);
таб.НоваяКолонка("И","Строка",50,0);
таб.НоваяКолонка("О","Строка",50,0);
таб.НоваяКолонка("ДатаР","Дата");
таб.НоваяКолонка("_01","Число",16,2);
таб.НоваяКолонка("_02","Число",16,2);
таб.НоваяКолонка("_03","Число",16,2);
таб.НоваяКолонка("_04","Число",16,2);
таб.НоваяКолонка("_05","Число",16,2);
таб.НоваяКолонка("_06","Число",16,2);
таб.НоваяКолонка("_07","Число",16,2);
таб.НоваяКолонка("_08","Число",16,2);
таб.НоваяКолонка("_09","Число",16,2);
таб.НоваяКолонка("_10","Число",16,2);
таб.НоваяКолонка("_11","Число",16,2);
таб.НоваяКолонка("_12","Число",16,2);
таб.НоваяКолонка("СумГод","Число",18,2);
таб.НоваяКолонка("ОблГод","Число",18,2);
таб.НоваяКолонка("УдерГод","Число",18,2);
таб.НоваяКолонка("Индекс","Строка",6,0);
таб.НоваяКолонка("Регион","Строка",2,0);
таб.НоваяКолонка("Город","Строка",20,0);
таб.НоваяКолонка("Улица","Строка",20,0);
таб.НоваяКолонка("Дом","Строка",5,0);
таб.НоваяКолонка("Корпус","Строка",5,0);
таб.НоваяКолонка("Квартира","Строка",5,0);
Документ=xmlParser.СоздатьДокумент();
Документ.Загрузить(стрИмяФайла);
Данные=Документ.ПолучитьПодчиненныйПоНомеру(2);
Для Сч=1 По Данные.КоличествоПодчиненных() Цикл
таб.НоваяСтрока();
Элем=Данные.ПолучитьПодчиненныйПоНомеру(Сч);
УзелПолучДох=Элем.ВыбратьУзлы("ПолучДох");
Для Сч3=0 По УзелПолучДох.КоличествоУзлов-1 Цикл
// Сообщить(УзелПолучДох.ПолучитьУзел(Сч3).ПредставлениеXML);
// Сообщить(УзелПолучДох.ПолучитьУзел(Сч3).КоличествоПодчиненных());
ФИО=УзелПолучДох.ПолучитьУзел(Сч3).ПолучитьПодчиненныйПоНомеру(1);
таб.Ф=ФИО.ПолучитьПодчиненныйПоНомеру(1).Текст;
таб.И=ФИО.ПолучитьПодчиненныйПоНомеру(2).Текст;
таб.О=ФИО.ПолучитьПодчиненныйПоНомеру(3).Текст;
таб.ДатаР=УзелПолучДох.ПолучитьУзел(Сч3).ПолучитьПодчиненныйПоНомеру(3).Значение;
адр=УзелПолучДох.ПолучитьУзел(Сч3).ПолучитьПодчиненныйПоНомеру(6);
Для Сч4=1 По адр.КоличествоПодчиненных() Цикл
Если адр.ПолучитьПодчиненныйПоНомеру(Сч4).Наименование="Индекс" Тогда
таб.Индекс=адр.ПолучитьПодчиненныйПоНомеру(Сч4).Текст;
ИначеЕсли адр.ПолучитьПодчиненныйПоНомеру(Сч4).Наименование="КодРегион" Тогда
таб.Регион=адр.ПолучитьПодчиненныйПоНомеру(Сч4).Текст;
ИначеЕсли адр.ПолучитьПодчиненныйПоНомеру(Сч4).Наименование="Город" Тогда
таб.Город=адр.ПолучитьПодчиненныйПоНомеру(Сч4).Текст;
ИначеЕсли адр.ПолучитьПодчиненныйПоНомеру(Сч4).Наименование="Улица" Тогда
таб.Улица=адр.ПолучитьПодчиненныйПоНомеру(Сч4).Текст;
ИначеЕсли адр.ПолучитьПодчиненныйПоНомеру(Сч4).Наименование="Дом" Тогда
таб.Дом=адр.ПолучитьПодчиненныйПоНомеру(Сч4).Текст;
ИначеЕсли адр.ПолучитьПодчиненныйПоНомеру(Сч4).Наименование="Корпус" Тогда
таб.Корпус=адр.ПолучитьПодчиненныйПоНомеру(Сч4).Текст;
ИначеЕсли адр.ПолучитьПодчиненныйПоНомеру(Сч4).Наименование="Кварт" Тогда
таб.Квартира=адр.ПолучитьПодчиненныйПоНомеру(Сч4).Текст;
Иначе
///////
КонецЕсли;
КонецЦикла;
КонецЦикла;
УзелСвДохСтав=Элем.ВыбратьУзлы("СвДохСтав");
Для Сч3=0 По УзелСвДохСтав.КоличествоУзлов-1 Цикл
//ел=УзелСвДохСтав.ПолучитьУзел(Сч3);
УзелДохВыч=УзелСвДохСтав.ПолучитьУзел(Сч3).ВыбратьУзлы("ДохВыч");
Для Сч4=0 По УзелДохВыч.КоличествоУзлов-1 Цикл
МесДоход=УзелДохВыч.ПолучитьУзел(Сч4);
ИмяМес="";
СумМес=0;
Если МесДоход.ПолучитьПодчиненныйПоНомеру(1).Наименование="НомМес" Тогда
ИмяМес=МесДоход.ПолучитьПодчиненныйПоНомеру(1).Текст;
КонецЕсли;
Если МесДоход.ПолучитьПодчиненныйПоНомеру(3).Наименование="СумДоход" Тогда
СумМес=МесДоход.ПолучитьПодчиненныйПоНомеру(3).Значение;
КонецЕсли;
Если ПустоеЗначение(ИмяМес)=0 Тогда
Если ИмяМес="01" Тогда
таб._01=СумМес;
ИначеЕсли ИмяМес="02" Тогда
таб._02=СумМес;
ИначеЕсли ИмяМес="03" Тогда
таб._03=СумМес;
ИначеЕсли ИмяМес="04" Тогда
таб._04=СумМес;
ИначеЕсли ИмяМес="05" Тогда
таб._05=СумМес;
ИначеЕсли ИмяМес="06" Тогда
таб._06=СумМес;
ИначеЕсли ИмяМес="07" Тогда
таб._07=СумМес;
ИначеЕсли ИмяМес="08" Тогда
таб._08=СумМес;
ИначеЕсли ИмяМес="09" Тогда
таб._09=СумМес;
ИначеЕсли ИмяМес="10" Тогда
таб._10=СумМес;
ИначеЕсли ИмяМес="11" Тогда
таб._11=СумМес;
ИначеЕсли ИмяМес="12" Тогда
таб._12=СумМес;
КонецЕсли;
КонецЕсли;
КонецЦикла;
УзелНалПер=УзелСвДохСтав.ПолучитьУзел(Сч3).ВыбратьУзлы("СГДНалПер");
НалПер=УзелНалПер.ПолучитьУзел(0);
Если НалПер.Наименование="СГДНалПер" Тогда
таб.СумГод=НалПер.ПолучитьПодчиненныйПоНомеру(1).Значение;
таб.ОблГод=НалПер.ПолучитьПодчиненныйПоНомеру(2).Значение;
таб.УдерГод=НалПер.ПолучитьПодчиненныйПоНомеру(3).Значение;
КонецЕсли;
//тут еще берем данные
КонецЦикла;
Состояние(Сч);
КонецЦикла;
Т=СоздатьОбъект("Таблица");
Т.ИсходнаяТаблица("Таблица");
таб.выбратьСтроки();
Т.ВывестиСекцию("Шапка");
нпп=1;
Пока таб.ПолучитьСтроку()=1 Цикл
Т.ВывестиСекцию("Текст");
нпп=нпп+1;
КонецЦикла;
Т.ТолькоПросмотр(1);
Т.Опции(0, 0, 1, 0);
// Т.ОбластьПечати(2);
Т.ПараметрыСтраницы(2,,,5,5,5,5,,, 1);
Т.Показать("Прочитали из XML");
КонецПроцедуры
Процедура Выбрать()
ФС.ВыбратьФайл(0,ИмяФайла,ИмяПути,"Выберите файл","xml файлы (*.xml) |*.xml|Все файлы (*.*) |*.*","xml", );
Если ПустоеЗначение(ИмяФайла)=0 Тогда
PathSbitn=ИмяПути+ИмяФайла;
КонецЕсли;
КонецПроцедуры //Выбрать
Процедура ПриОткрытии()
ИмяФайла ="";
ИмяПути = "P:";
res=УстановитьКомпоненту();
// Сообщить(res);
КонецПроцедуры //ПриОткрытии
Пример файла XML :
Код
<?xml version="1.0" encoding="windows-1251"?>
<НДФЛ2 xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" ВерсФорм="4.00001" ВерсПрог="НП 10.31" ИдФайл="ДОХОД_2НДФЛ">
<Справка>
<ОбщСвИЧ>
<ГодДох>2006</ГодДох>
<НомСпр>1</НомСпр>
<ДатаСпр>26.03.2007</ДатаСпр>
<ИФНСНА>7777</ИФНСНА>
</ОбщСвИЧ>
<ИстДох>
<СвНАЮЛ>
<ИННЮЛ>1234567890</ИННЮЛ>
<КПП>12345678</КПП>
<НаимОрг>ООО Рога и Копыта</НаимОрг>
<ОКАТО>12345678901</ОКАТО>
</СвНАЮЛ>
</ИстДох>
<ПолучДох>
<ФИО>
<Фамилия>Иванов</Фамилия>
<Имя>Иван</Имя>
<Отчество>Иванович</Отчество>
</ФИО>
<Статус>1</Статус>
<ДатаРожд>24.01.1973</ДатаРожд>
<Гражданство>643</Гражданство>
<УдЛичн>
<КодУдЛичн>21</КодУдЛичн>
<СерНомДок>12 01 012345</СерНомДок>
</УдЛичн>
<АдрМЖРФ>
<Индекс>123456</Индекс>
<КодРегион>77</КодРегион>
<Город>Энн г</Город>
<Улица>Ленина ул</Улица>
<Дом>99</Дом>
<Корпус>5</Корпус>
<Кварт>12</Кварт>
</АдрМЖРФ>
</ПолучДох>
<СвДохСтав>
<Ставка>35</Ставка>
<ДохВыч>
<НомМес>02</НомМес>
<КодДоход>2610</КодДоход>
<СумДоход>252.15</СумДоход>
</ДохВыч>
<ДохВыч>
<НомМес>07</НомМес>
<КодДоход>2760</КодДоход>
<СумДоход>100.00</СумДоход>
<КодВычет>503</КодВычет>
<СумВычет>100.00</СумВычет>
</ДохВыч>
<ДохВыч>
<НомМес>10</НомМес>
<КодДоход>2760</КодДоход>
<СумДоход>100.00</СумДоход>
<КодВычет>503</КодВычет>
<СумВычет>100.00</СумВычет>
</ДохВыч>
<СГДНалПер>
<СГДСумм>252.15</СГДСумм>
<ОблСумм>252.15</ОблСумм>
<НИОблСумм>88</НИОблСумм>
<НУОблСумм>88</НУОблСумм>
<ВозврСуммПЛ>0</ВозврСуммПЛ>
<ЗачСуммПЛ>0</ЗачСуммПЛ>
<УдСуммПЛ>0</УдСуммПЛ>
<ДолгНП>0</ДолгНП>
<ДолгНА>0</ДолгНА>
<ВзыскИФНС>0</ВзыскИФНС>
</СГДНалПер>
</СвДохСтав>
</Справка>
</НДФЛ2>