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

1. baracuda 2 06.05.15 12:24 Сейчас в теме
Возникла необходимость тянуть данные из 1с.

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

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

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

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

Допустим у меня есть отчет ДоходыРасходы в 1С, мне нужно этот самый запрос выполнить серез веб-сервис и получить данные. Пока не совсем представляю как это будет выглядеть. И какие данные я получу. XML или можно сразу цифровые показатели?
4. baracuda 2 06.05.15 12:47 Сейчас в теме
(2) necropunk, Если поделитесь наработками был бы вам пресильно преблагодарен
5. Bazin 5 06.05.15 13:02 Сейчас в теме
Ксати, отчеты можно быстро сохранять в html: ТабличныйДокумент.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.HTML4);
6. kudlach 12 06.05.15 13:07 Сейчас в теме
Недавно озвучивали мне аналогичную задачу. Сбор данных из разных баз и просмотр руководством в веб-форме отчетов.
Думается такая цепочка - выгрузка показателей из баз данных в одну сводную аналитическую, и уже из нее в отчеты.
Не знаю подойдет ли тут "Консолидация".
С отчетами тоже вопрос - то ли веб-возможности 1С использовать, то ли прямые запросы к базе.
Буду следить за темой - вдруг что хорошее люди посоветуют.
7. baracuda 2 06.05.15 13:13 Сейчас в теме
(6) kudlach, примерно то что описали вы делают люди тут. В моем случае все проще база только 1с, правда базы разные.
Собственно если методологию построить неважно количество баз и тип источников.
8. kudlach 12 06.05.15 13:28 Сейчас в теме
(7) baracuda, Спасибище :))) Там есть обоснование и деньги. Тема интересная, думаю, стоит того чтобы поработать с ней.
9. necropunk 9 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 2 11.05.15 16:48 Сейчас в теме
Из 1с хочу тянуть данные. Написал запрос,
ВЫБРАТЬ
	СУММА(ДоходыИРасходы.ДоходУпр) КАК ДоходУпр,
	СУММА(ДоходыИРасходы.РасходУпр) КАК РасходУпр,
	ДоходыИРасходы.ПодразделениеКомпании КАК ПодразделениеКомпании
ИЗ
	РегистрНакопления.ДоходыИРасходы КАК ДоходыИРасходы
ГДЕ
	ДоходыИРасходы.Период МЕЖДУ &Дата1 И &Дата2

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

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


при создании пакета XDTO как правильно описать пакет под этот запрос.
Сделал так будет ли правильно?
Прикрепленные файлы:
11. ture 606 11.05.15 21:48 Сейчас в теме
Веб интерфейс смотрите или прямой доступ к данным на SQL, через вьюхи естественно.
12. baracuda 2 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 2 12.05.15 11:32 Сейчас в теме
Вот так выглядит результат запроса в консоли
Прикрепленные файлы:
16. StBender 12.05.15 11:46 Сейчас в теме
(14) baracuda, пустые поля здесь NULL поля. Либо через попытку, либо не через прямой обход, а обход по группировкам.
15. baracuda 2 12.05.15 11:46 Сейчас в теме
Я ж для этого поля спецом сделал ЕСТЬNULL в запросе.
Но почему то в консоли это значение "Пусто" не отображается.

Мб причиной всему группировка?
17. StBender 12.05.15 11:47 Сейчас в теме
(15) baracuda, естьнулл отрабатывает на детальную запись, а не на рассчитанную итоговую.
18. baracuda 2 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 2 12.05.15 12:38 Сейчас в теме
(19) StBender, да нет, на что мне они) Спасибо вам за помощь, на верную мысль навели.
Теперь дело за малым, на стороне PHP эти данные обработать.
21. StBender 12.05.15 12:42 Сейчас в теме
(20) baracuda, на здоровье) Я раньше, когда в запросах совсем слабо ориентировался, пихал эти итоги куда только можно :)
22. baracuda 2 21.05.15 09:15 Сейчас в теме
Вот что в итоге получилось. Данные тянутся при каждом вызове страницы. По умолчанию стоит период от начала года до текущего дня, но думаю вывести две формы ввода периода не составит труда.
Хотелось бы отметить прекрасную библиотеку amcharts.com.
Всегда считал что руководству незачем сидеть в 1с, тем более что это в основном люди с маками и айпадами)). Да и наглядность в случае веб-тчетов в разы выше. Поставленной цели достиг благодаря amcharts.com и drupal 7.
Прикрепленные файлы:
23. Кузьмич 188 24.12.15 10:04 Сейчас в теме
А почему бы результат отчета не выгрузить в xml? А уже там, где надо получить этот отчет, парсить его.
24. baracuda 2 24.12.15 16:34 Сейчас в теме
(23) Кузьмич,в вебе удобнее работать с веб-сервисами.
25. Кузьмич 188 24.12.15 16:48 Сейчас в теме
(24) а для андроид-устройств тоже?
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)