Получение данных из 1с.

1. Олег Дмитров (baracuda) 3 06.05.15 12:24 Сейчас в теме
Возникла необходимость тянуть данные из 1с.

Под данными понимаются различные количественные характеристики, отчеты по продажам, прибыль, выручка и т.д.

Данные будут обрабатываться js и визуализироваться в HTML5.
Первое что пришло на ум, это веб-сервисы и http-сервисы 1c. Кстати это не одно и то же???
С первыми немного работал. Со вторыми нет.

Еще как вариант данные можно тянуть напрямую из SQL, или загружать из dbf предварительно подготовленные в 1с.
Так как суть визуализации в том чтоб графы менялись в режиме онлайн то наверное правильно будет брать данные по веб-сервисам.

Вопрос в следующем у кого какие мнения, как будет правильнее, хотя я так понимаю правильнее так как умеешь, но все же возможно уже кто то проходил этот путь и готов поделиться опытом.
Ответы
2. Сергей necropunk (necropunk) 5 06.05.15 12:35 Сейчас в теме
(1) baracuda, на веб-сервисах делал похожую штуку... Планируешь постоянно долбиться в веб-сервис и каждую минуту выполнять запрос в базе? Ну, работать вполне будет, если не завалишь базу и контролить надо, чтобы не заваливался, связь не пропадала, не зависало... Напрямую из скуля хорошо, конечно, но геморройно, имхо, собирать их там.
3. Олег Дмитров (baracuda) 3 06.05.15 12:46 Сейчас в теме
(2) necropunk, Каждую минуту, полчаса или час не принципиально. Главное, чтоб данные изменялись.

Допустим у меня есть отчет ДоходыРасходы в 1С, мне нужно этот самый запрос выполнить серез веб-сервис и получить данные. Пока не совсем представляю как это будет выглядеть. И какие данные я получу. XML или можно сразу цифровые показатели?
4. Олег Дмитров (baracuda) 3 06.05.15 12:47 Сейчас в теме
(2) necropunk, Если поделитесь наработками был бы вам пресильно преблагодарен
5. Denis Bazin (Bazin) 7 06.05.15 13:02 Сейчас в теме
Ксати, отчеты можно быстро сохранять в html: ТабличныйДокумент.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.HTML4);
6. Евгений Климентьев (kudlach) 8 06.05.15 13:07 Сейчас в теме
Недавно озвучивали мне аналогичную задачу. Сбор данных из разных баз и просмотр руководством в веб-форме отчетов.
Думается такая цепочка - выгрузка показателей из баз данных в одну сводную аналитическую, и уже из нее в отчеты.
Не знаю подойдет ли тут "Консолидация".
С отчетами тоже вопрос - то ли веб-возможности 1С использовать, то ли прямые запросы к базе.
Буду следить за темой - вдруг что хорошее люди посоветуют.
7. Олег Дмитров (baracuda) 3 06.05.15 13:13 Сейчас в теме
(6) kudlach, примерно то что описали вы делают люди тут. В моем случае все проще база только 1с, правда базы разные.
Собственно если методологию построить неважно количество баз и тип источников.
8. Евгений Климентьев (kudlach) 8 06.05.15 13:28 Сейчас в теме
(7) baracuda, Спасибище :))) Там есть обоснование и деньги. Тема интересная, думаю, стоит того чтобы поработать с ней.
9. Сергей necropunk (necropunk) 5 06.05.15 13:53 Сейчас в теме
Примеров везде масса.
http://habrahabr.ru/company/dominikana/blog/184756/
http://habrahabr.ru/post/148658/
http://infostart.ru/public/16001/

Я писал веб-сервис, чтобы он вообще произвольный запрос выполнял и возвращал результат. Если пользоваться аккуратно - работает. Надо только помнить, что можно запросом, в общем-то и всю базу вернуть, поэтому лучше навтыкать ограничений, хотя бы уж "ПЕРВЫЕ 50"....
Bukaska; baracuda; +2 Ответить
10. Олег Дмитров (baracuda) 3 11.05.15 16:48 Сейчас в теме
Из 1с хочу тянуть данные. Написал запрос,
ВЫБРАТЬ
	СУММА(ДоходыИРасходы.ДоходУпр) КАК ДоходУпр,
	СУММА(ДоходыИРасходы.РасходУпр) КАК РасходУпр,
	ДоходыИРасходы.ПодразделениеКомпании КАК ПодразделениеКомпании
ИЗ
	РегистрНакопления.ДоходыИРасходы КАК ДоходыИРасходы
ГДЕ
	ДоходыИРасходы.Период МЕЖДУ &Дата1 И &Дата2

СГРУППИРОВАТЬ ПО
	ДоходыИРасходы.ПодразделениеКомпании

УПОРЯДОЧИТЬ ПО
	ПодразделениеКомпании,
Показать


при создании пакета XDTO как правильно описать пакет под этот запрос.
Сделал так будет ли правильно?
Прикрепленные файлы:
11. c+ + (ture) 230 11.05.15 21:48 Сейчас в теме
Веб интерфейс смотрите или прямой доступ к данным на SQL, через вьюхи естественно.
12. Олег Дмитров (baracuda) 3 12.05.15 09:29 Сейчас в теме
Да почти все получил то что надо, единственное не могу осилить отображение подразделения.
Для свойства подразделения указал тип, string.

Модуль вебсервиса такой
Функция PoschitatDoxod(Data1, Data2)
    ВыручкаТип = ФабрикаXDTO.Тип("http://www.sample-package.org", "Viruchka");
    ОтчетТип = ФабрикаXDTO.Тип("http://www.sample-package.org", "Otchet");
    Отчет = ФабрикаXDTO.Создать(ОтчетТип);    
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |	СУММА(ДоходыИРасходы.ДоходУпр) КАК ДоходУпр,
        |	ЕСТЬNULL(ДоходыИРасходы.ПодразделениеКомпании, ""Организация"") КАК ПодразделениеКомпании,
        |	СУММА(ДоходыИРасходы.РасходУпр) КАК РасходУпр
        |ИЗ
        |	РегистрНакопления.ДоходыИРасходы КАК ДоходыИРасходы
        |ГДЕ
        |	ДоходыИРасходы.Период МЕЖДУ &Дата1 И &Дата2
        |
        |СГРУППИРОВАТЬ ПО
        |	ДоходыИРасходы.ПодразделениеКомпании
        |
        |УПОРЯДОЧИТЬ ПО
        |	ПодразделениеКомпании,
        |	ДоходУпр,
        |	РасходУпр
        |ИТОГИ
        |	СУММА(ДоходУпр),
        |	СУММА(РасходУпр)
        |ПО
        |	ОБЩИЕ,
        |	ПодразделениеКомпании";
    Запрос.УстановитьПараметр("Дата1", Data1);
    Запрос.УстановитьПараметр("Дата2", Data2);
    Результат = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = Результат.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл        
        СтрокаОтчета = ФабрикаXDTO.Создать(ВыручкаТип);
        СтрокаОтчета.doxod = ВыборкаДетальныеЗаписи.ДоходУпр;
        СтрокаОтчета.razxod = ВыборкаДетальныеЗаписи.РасходУпр;
        СтрокаОтчета.podrazdelenie = ВыборкаДетальныеЗаписи.ПодразделениеКомпании;
        Отчет.strokaOtcheta.Добавить(СтрокаОтчета);
    КонецЦикла;    
    Возврат Отчет;        
КонецФункции
Показать


На что выдается ошибка
<soap:Text xml:lang="ru_RU">Неизвестная ошибка. {WebСервис.PoschitatDoxod.Модуль(41)}: Ошибка при установке значения атрибута контекста (podrazdelenie)
по причине:
{WebСервис.PoschitatDoxod.Модуль(41)}: Ошибка при установке значения атрибута контекста (podrazdelenie)
по причине:

по причине:
Ошибка отображения типов:
Отображение типа 'Null' в тип '{http://www.w3.org/2001/XMLSchema}string'</soap:Text>



Если закомментировать строку

СтрокаОтчета.podrazdelenie = ВыборкаДетальныеЗаписи.ПодразделениеКомпании;

то остальные данные нормально получаются.
13. Илья Андриянов (StBender) 12.05.15 10:11 Сейчас в теме
(12) baracuda, есть подозрение что вам из запроса тянутся итоговые записи с NULL в нерассчитываемых полях. Либо попробуйте через Попытка исключение обработать это, либо обход по запросу поправить.
14. Олег Дмитров (baracuda) 3 12.05.15 11:32 Сейчас в теме
Вот так выглядит результат запроса в консоли
Прикрепленные файлы:
16. Илья Андриянов (StBender) 12.05.15 11:46 Сейчас в теме
(14) baracuda, пустые поля здесь NULL поля. Либо через попытку, либо не через прямой обход, а обход по группировкам.
15. Олег Дмитров (baracuda) 3 12.05.15 11:46 Сейчас в теме
Я ж для этого поля спецом сделал ЕСТЬNULL в запросе.
Но почему то в консоли это значение "Пусто" не отображается.

Мб причиной всему группировка?
17. Илья Андриянов (StBender) 12.05.15 11:47 Сейчас в теме
(15) baracuda, естьнулл отрабатывает на детальную запись, а не на рассчитанную итоговую.
18. Олег Дмитров (baracuda) 3 12.05.15 12:11 Сейчас в теме
Надо было отключить Итоги в запросе, и выбирать не ссылку на подразделение а Наименование.
Функция PoschitatDoxod(Data1, Data2)
    ВыручкаТип = ФабрикаXDTO.Тип("http://www.sample-package.org", "Viruchka");
    ОтчетТип = ФабрикаXDTO.Тип("http://www.sample-package.org", "Otchet");
    Отчет = ФабрикаXDTO.Создать(ОтчетТип);    
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |	СУММА(ДоходыИРасходы.ДоходУпр) КАК ДоходУпр,
        |	СУММА(ДоходыИРасходы.РасходУпр) КАК РасходУпр,
        |	ДоходыИРасходы.ПодразделениеКомпании.Наименование КАК Наименование
        |ИЗ
        |	РегистрНакопления.ДоходыИРасходы КАК ДоходыИРасходы
        |ГДЕ
        |	ДоходыИРасходы.Период МЕЖДУ &Дата1 И &Дата2
        |
        |СГРУППИРОВАТЬ ПО
        |	ДоходыИРасходы.ПодразделениеКомпании.Наименование";
    
    Запрос.УстановитьПараметр("Дата1", Data1);
    Запрос.УстановитьПараметр("Дата2", Data2);
    Результат = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = Результат.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл        
        СтрокаОтчета = ФабрикаXDTO.Создать(ВыручкаТип);
        СтрокаОтчета.doxod = ВыборкаДетальныеЗаписи.ДоходУпр;
        СтрокаОтчета.razxod = ВыборкаДетальныеЗаписи.РасходУпр;
        СтрокаОтчета.podrazdelenie = ВыборкаДетальныеЗаписи.Наименование;
        Отчет.strokaOtcheta.Добавить(СтрокаОтчета);
    КонецЦикла;    
    Возврат Отчет;        
КонецФункции
Показать
19. Илья Андриянов (StBender) 12.05.15 12:26 Сейчас в теме
(18) baracuda, а, я просто думал вам итоги нужны)
baracuda; +1 Ответить
20. Олег Дмитров (baracuda) 3 12.05.15 12:38 Сейчас в теме
(19) StBender, да нет, на что мне они) Спасибо вам за помощь, на верную мысль навели.
Теперь дело за малым, на стороне PHP эти данные обработать.
21. Илья Андриянов (StBender) 12.05.15 12:42 Сейчас в теме
(20) baracuda, на здоровье) Я раньше, когда в запросах совсем слабо ориентировался, пихал эти итоги куда только можно :)
22. Олег Дмитров (baracuda) 3 21.05.15 09:15 Сейчас в теме
Вот что в итоге получилось. Данные тянутся при каждом вызове страницы. По умолчанию стоит период от начала года до текущего дня, но думаю вывести две формы ввода периода не составит труда.
Хотелось бы отметить прекрасную библиотеку amcharts.com.
Всегда считал что руководству незачем сидеть в 1с, тем более что это в основном люди с маками и айпадами)). Да и наглядность в случае веб-тчетов в разы выше. Поставленной цели достиг благодаря amcharts.com и drupal 7.
Прикрепленные файлы:
23. Кузьмич (Кузьмич) 191 24.12.15 10:04 Сейчас в теме
А почему бы результат отчета не выгрузить в xml? А уже там, где надо получить этот отчет, парсить его.
24. Олег Дмитров (baracuda) 3 24.12.15 16:34 Сейчас в теме
(23) Кузьмич,в вебе удобнее работать с веб-сервисами.
25. Кузьмич (Кузьмич) 191 24.12.15 16:48 Сейчас в теме
(24) а для андроид-устройств тоже?
Оставьте свое сообщение