image_pdfimage_print

Моя «Доминикана» или Я и Рафаэль.

Доброго времени суток!

Привет ‘Доминикане’ в Тайланде (http://infostart.ru/dominikana/) из пыльной и грязной Москвы.

dominicana1C-2

Конечно черепашка здесь не причем. А Вы о ком подумали? Я подумал вместе со статистикой. Нет сегодня мы попробуем использовать очень интересную библиотеку на JavaScript. Называется она Raphaël [‘ræfeɪəl] . Она достаточно популярна, имеет хорошую документацию и самое главное выводит графики внутри 1С. Спасибо создателю библиотеки Dmitry Baranovskiy за его открытую лицензию и незабываем его благодарить.

Видео с разработчиком:

http://events.yandex.ru/events/yac/2012/talks/371/

 

Кто не хочет копаться во внутренностях представляем готовые обработки работающие с этим сайтом:

http://infostart.ru/public/190734/

http://infostart.ru/public/191306/

http://infostart.ru/public/191307/

 

А тех, кто засучил рукава и не боиться javascript кода. Прошу. Обработка на infostart.ru http://infostart.ru/public/191248/.

Пример анимации

Смотрим. Нравиться? Есть поле для изменения кода на javascript, начнем экспериментировать…

 

Примеры кода для экспериментов. Вставляйте в поле для кода и нажимайте обновить:

Пример 1: Начало

raphaeljs1

Пример 2: Анимация

raphaeljs2
Пример 3: Отслеживание событий

raphaeljs3
Пример 4: Псевдотрехмерность

raphaeljs4
Библиотека достаточно маленькая, это хорошо. Но примеры в ней я бы назвал слишком низкоуровневыми. Поэтому автор развивает дополнительный проект http://g.raphaeljs.com/

Р.S. Вот так незаметно для себя я стал поклонником этой библиотеки…

 

HTML5 Canvas в 1С 8.3 или Google нам поможет.

Доброго времени суток!

Добрался я для написания маленьких тестов для 1С в плане web графики. Версии 1С 8.2.61 и 8.3.3.641.

Зайдем на http://www.w3schools.com/html/html5_canvas.asp и перенесем примеры в обработку 1С.

Скачать обработкe можно на инфостарте http://infostart.ru/public/174856

Результаты не радуют. 1С в Internet Explorer, как и в тонком клиенте Windows не работает ничего. Видно проверка в 1С идет именно на IE и все замещается и не работает. Без библиотеки excanvas.js она просто ругается, но и она не спасает. Все остальные браузеры показывают правильный результат. Видно руки 1С туда не дошли, как и в тонком клиенте на Linux.

HTML51CIE9
Меня 1C научила никогда не отступать от решения задачи, насколько сложной она не казалась с первого раза. Для этого надо понять, а как работает библиотека excanvas. Посмотреть на пример в http://infostart.ru/public/57648/. Да вспомнить, что до html5 Microsoft усиленно толкала свою систему VML (http://msdn.microsoft.com/en-us/library/ee384217%28v=vs.85%29.aspx). Вот она и прекрасно работает со старыми версиями движков IE. И excanvas это эмуляция функций обрисовки графиков html5 через эту систему. Значит 1С надо немного помочь. Посмотрев как эта библиотека работает в старых IE, получилось решение что нужно добавить в для 1С. Делаем дополнительный флаг «Довесок для 1С». Тестируем обработку HTML5-1С-min (см. вложение к статье). Ура, заработало. Делаем 1С ближе к HTML5.

Любителям «Такси» тоже сделаем картинку, пусть проверяютHTML51CThinkTaxiGood

Но таким методом не получиться протащить видео и звук в HTML5. Здесь мы отсылаем читателя к дальнейшим разработкам:  Звук и Видео на Windows.

 

И из дополнительного, что очень хочется сделать — показ катринок заменяя значение src в поле image.

СтраницаНТML = »
|< html >
|< head >
|< /head >
|< body >
|< div > Тест страницы < /div >
|< div > < img src='»+СсылкаНаКартинку+»‘/ > Тест картинки < / div >
|< / body >
|< / html > «;

А переменной СсылкаНаКартинку можно получить с помощью функций:

  • ПолучитьНавигационнуюСсылку
  • ПоместитьВоВременноеХранилище

И для полноты картины посмотрим как сама 1С выводит свои графики:

 

 

 

 

Просто делает динамически картинку во временном хранилище и ее показываем.

Ajax в 1C или переделываем универсальный отчет в 1С.

Доброго времени суток!

Одно время я долго работал в фирме оптовой торговли. На тот момент это была доработанная Управления торговлей 10.3. В частности много и долго дорабатывал отчеты, а в управлении торговлей 10.3 большинство отчетов сделана через так называемый универсальный отчет. Мощная штука, основанная на построителе отчетов. Сейчас он в последних версиях 1С оно преобразовался в СКД, но не в это суть. Основное в том, что он тесно связан с визуальными элементами самой 1С. ПостороительОтчеты.Вывести(ТабличныйДокумент) делает практически все за Вас. Остальное заключается в правильной настройке, установке параметров и прочем обвесе.

Это конечно замечательно, но покопаться внутри очень хочется. И поможет нам в этом то,  что в большинстве случаев универсальном отчетом пользуются с достаточно простыми отборами и группировками. Тогда появилась идея реализовать при таких простых условиях работоспособный отчет с выводом данных в стандартную HTML таблицу. Вот такая коза с бояном. И если Вас не смущает следующая картинка, то данная статья точно для Вас.

Внутри самой 1С такой отчет будет не интересен. Слишком урезанные возможности, плохая поддержка стилевого оформления CSS, возможности  ПолеHTML урезаны по сравнения с Табличным документом. Но мы сделаем для полноты картины. А вот снаружи из браузера, используя вэб-сервис этот отчет мог бы оказаться очень привлекательным. См. картинки:

Опишем работу этого отчета:

Используем виртуальную таблицу ОстаткиИОбороты по одному регистру. Динамически создаем текст запроса, по подобию как он сделан в универсальном отчете 1С. Что выводим в Представлениях. Поля это наши группировки по строкам и ресурсы. Для расчета ресурсов используем раздел запроса ИТОГИ. Отборы делаем в условиях виртуальной таблицы.

Так как посттроитель отсчета завязан на элементы вывода самой 1С, его придется вырезать. Мы многое по теряем, и практически получим новый отчет.

Пока не работает (о грусном):

  • Реквизиты полей выбираются толко на нулевом уровне.
  • Отбор простейшие, через реквизит Наименование.
  • Нет группировок колонок
  • Показать скрыть группировки строк, колонок +/-, расшифровок
  • Дополнительное оформление
  • Простейшая печать

Если у Вас еще не пропала охота все это попробовать, прошу:

Попробовать тест (готовиться).

Установить себе:

  1. Скачиваем архив. [wpdm_file id=9]
  2. В архиве файл sikudaUnireport.cf — надо добавить в вашу конфигурация УТ 10.(Там 1 вэбсервис и один отчет).
  3. Пользователь 1С под которым у Вас вэб сервис, должен иметь права на чтение к регистрам накопления и добавленному отчету.
  4. Публикуем вебсервис c адресом sikudaws (получается путь типа http://localhost/[Директория публикации])
  5. Положить index.html в папку sikuda на вебсервер (у меня IIS C:inetpubwwwrootsikuda )
  6. Заходим на http://localhost/sikuda и тестируем.

Главное чтобы база 1С и адрес захода в index.html были на одном сервере.

Обработки на инфостарте http://infostart.ru/public/180203

 

Р.S.

Если отработать такой универсальный отчет, то можно легко сделать блок отчетов основанных на новом универсальном отчете. И сделать довесок к конфигурации, который легко добавляется в любую базу УТ10. Вы спросите зачем все это УТ10, уже есть УТ11, выходит УТ11.1. А если у вас все отлажено в УТ10 и вы еще не готовы к переходу, просто даем дополнительную возможность остаться на отлаженной схеме.

Об истории появления фирмы 1С.

Интерьвью Бориса Нуралиева. 1999 год. http://sikuda.ru/1c_1999/

Интервью с Борисом Нуралиевым: «Нестандартный Нуралиев» http://infostart.ru/public/16906/

Борис Нуралиев ответил на вопросы сообщества “Инфостарт” 2013 год: http://infostart.ru/public/194059/

 

И нашел несколько интересных видео:

 

О названии фирмы 1С:

Здесь честно рассказано о появлении столь агресивных цветов как красный и желтый

 

История создания фирмы 1С:

 

О выходе на IPO:

 

О франчайзе:

 

Добавим документы ODF (OpenOffice/LibreOffice) в стандартную обработку Загрузки Табличного документа из 1С.

Доброго времени суток!

Обработку ЗагрузкаданныхизТабличногоДокументаконечно должен знать каждый 1С-ник. И сколько бы обработок такого плана не появлялось, эта остается классикой. Даже претензии можно предъявлять если вы в ней что-то не понимаете к самой 1С. Хотя какие претензии, исходный код открыть — изучай, не хочу…

Еще чем мне нравится эта обработка — тем что вы читаете данные из внешнего источника, показываете их с помощью объекта табличное поле и только затем выбираете алгоритм загрузки в 1С. При чем загрузка у Вас происходит в среде 1С без привлечения дополнительных компонентов. Без всяких выпадов в неизвестный объект OLE, полей которые не прочитались в обработке загрузки. Если вы видете данные в табличном поле, то они и будут грузиться по вашему алгоритму.

Но что-то в ней не хватает. Конечно стандарта офисных документов ODF (Open Document Format и между прочим ГОСТ Р ИСО/МЭК 26300-2010). Как говаривал мой начальник — есть чем себя занять. Из всех внешних загрузок, которые сейчас есть к сожалению самыми распостраненными являются OLE(Com+) технологии. Возможно что-то еще появиться, но пока примемся за них.

Залезаем в код и видим несколько однотипных функуций

Функция мПрочитатьТабличныйДокументИзExcel(ТабличныйДокумент, ИмяФайла, НомерЛистаExcel = 1) Экспорт

Функция мПрочитатьТабличныйДокументИзТекста(ТабличныйДокумент, ИмяФайла, НомерЛистаExcel = 1) Экспорт

Пора добавить свою:

// Функция считывает в табличный документ данные из файла в формате ODF Calc(ods)
//
// Параметры:
// ТабличныйДокумент — ТабличныйДокумент, в который необходимо прочитать данные
// ИмяФайла — имя файла в формате ODF, из которого необходимо прочитать данные
// НомерЛистаCalc — номер листа книги Calc, из которого необходимо прочитать данные
//
// Возвращаемое значение:
// Истина, если файл прочитан, Ложь — иначе
//
Функция мПрочитатьТабличныйДокументИзCalc(ТабличныйДокумент, ИмяФайла, НомерЛистаCalc = 1) Экспорт

ВыбФайл = Новый Файл(ИмяФайла);
Если НЕ ВыбФайл.Существует() Тогда
Сообщить(«Файл не существует!»);
Возврат Ложь;
КонецЕсли;

Попытка
ServiceManager = Новый COMОбъект(«com.sun.star.ServiceManager»);
Desktop = ServiceManager.CreateInstance(«com.sun.star.frame.Desktop»);
Desktop.getCurrentFrame().getContainerWindow().setVisible(Ложь); //сделаем невидимым основное окно.

//установим параметры — не показывать таблицу Calc
Параметры = Новый COMSafeArray(«VT_DISPATCH», 1);
Свойство = ServiceManager.Bridge_GetStruct(«com.sun.star.beans.PropertyValue»);
Свойство.Name = «Hidden»;
Свойство.Value = true;
Параметры.SetValue(0,Свойство);

Document = Desktop.LoadComponentFromURL(«file:///» + ИмяФайла, «_blank», 0, Параметры);
Состояние(«Обработка файла Office Calc …»);
Листы = Document.getSheets();
Лист = Листы.getByIndex(НомерЛистаCalc-1);
Исключение
Сообщить(«Ошибка загрузки данных. Возможно неверно указан номер листа книги Calc.»);
Возврат ложь;
КонецПопытки;

ТабличныйДокумент.Очистить();

//Определение максимум ячейки с данными…
НульЯчейка = Лист.GetCellbyPosition(0,0);
НульКурсор = Лист.createCursorByRange(НульЯчейка);
НульКурсор.GotoEndOfUsedArea(1);
НульАдрес = НульКурсор.RangeAddress;
ПослСтрока = НульАдрес.EndRow;
ПослКолонка = НульАдрес.EndColumn;

//Для Column = 1 По ПослКолонка + 1 Цикл
// ТабличныйДокумент.Область(«C» + Формат(Column, «ЧГ=»)).ШиринаКолонки = Лист.getColumns.getByIndex(Column-1).Width;
//КонецЦикла;

Для Row = 1 По ПослСтрока + 1 Цикл

Если Лист.getCellByPosition(Column-1,Row-1).getType() = 0 Или Лист.getCellByPosition(Column-1,Row-1).getType() = 1 Тогда ТабличныйДокумент.Область(«R» + Формат(Row, «ЧГ=») +»C» + Формат(Column, «ЧГ=»)).Текст = Лист.getCellByPosition(Column-1,Row-1).value;
ИначеЕсли Лист.getCellByPosition(Column-1,Row-1).getType() = 2 Тогда ТабличныйДокумент.Область(«R» + Формат(Row, «ЧГ=») +»C» + Формат(Column, «ЧГ=»)).Текст = Лист.getCellByPosition(Column-1,Row-1).string;
КонецЕсли;
КонецЦикла;

//ServiceManager.quit();
Document.Dispose();
Document = 0;
Параметры = 0;
Desktop = 0;
ServiceManager = 0;

Возврат Истина;

КонецФункции

И добавим в форму выбора файла ods по тексту.

ДиалогВыбораФайла.Фильтр = «Табличный документ (*.mxl)|*.mxl|Лист Calc (*.ods)|*.ods|Лист Excel (*.xls)|*.xls|Текстовый документ (*.txt)|*.txt|dBase III (*.dbf)|*.dbf|»;

И выбор функции для ods

ИначеЕсли нРег(ФайлНаДиске.Расширение) = «.ods» Тогда
мПрочитатьТабличныйДокументИзCalc(ТабличныйДокумент,ДиалогВыбораФайла.ПолноеИмяФайла);

Вот так лучше.

Скачать обработку можно с Инфостарта http://infostart.ru/public/158951/

 

Другие подобные ссылки:

http://help1c.com/faq82/view/1225.html

Запросница 1С. Получить результат запроса в web таблицу.

Доброго времени суток!

Медитируя на тему почему нет нормальной «Консоли запросов в управляемом приложении» захотелось покопаться в этих внутренностях 1С.

Как ставить и настраивать вэб-сервис в 1С, я не буду расказывать. Вы это легко найдете.

Идея такая: почему бы нам не создать вэб-сервис, который на строку запроса 1С выдаст web таблицу(с тэгами…). Заморачиваться с XTDO не советую, капризный он. Выдаем ответ сервера в виде строки. Данные в таблице для простоты тоже сделаем текстовыми (html).

Сделаем конфигурацию в которой один вэб-сервис (Прикреплен к статье). И распишем функцию подробно,чтобы ее можно было подключить к любой конфигурации вручную. Все парамеры в функции строковые

Request1C — текст запроса

TableData — html строка ответа.

Возвращаем истина или ложь;

//Возврат результата запроса в web table

Функция Request1CWebTable(Request1C, ТableData)

Запрос = Новый Запрос;
ТableData = «»;
Сериализатор = Новый СериализаторXDTO(ФабрикаXDTO);
ТекстЗапроса = Сериализатор.ПрочитатьXDTO(Request1C);
Запрос.Текст = ТекстЗапроса;

//Результат — таблица значений
Попытка
ТабЗапроса = Запрос.Выполнить().Выгрузить();
Исключение
ЗаписьЖурналаРегистрации(«Request1C»,,,,Строка(Request1C) + » !!! «+ОписаниеОшибки());
Возврат Ложь;
Конецпопытки;

//строка заголовка
ТableData = ««;
Для каждого
колонка Из ТабЗапроса.Колонки Цикл
ТableData = ТableData + «»+ СокрЛП(колонка.Заголовок) + «»;
КонецЦикла;
ТableData = ТableData + «»;

//таблица данных
ТableData = ТableData + «»;
Для
строка=0 По ТабЗапроса.Количество()-1 Цикл
ТableData = ТableData + «»;
Для
кол=0 По ТабЗапроса.колонки.Количество()-1 Цикл
ТableData = ТableData + «»+ Строка(ТабЗапроса[строка][кол]) + «»;
КонецЦикла;
ТableData = ТableData + «»;
КонецЦикла;
ТableData = ТableData + «»;
ТабЗапроса = 0;
Возврат Истина;

КонецФункции

Публикуем web-сервис c именем testws. Для тестирования уберем из базы всех пользователей, включаем анонимную идентификацию и смотрим чтобы ресурс htp://localhost/testws/ws/testws?wsdl был доступен из браузера. Если показывает в браузере описание вэб-сервиса, значит все нормально.

Это все хорошо, но как все это показать? Сделаем страницу входа для обработки в вашем любимом Web-сервере. Или просто бросьте папку test1C в папку C:inetpubwwwroot для MS IIS(Internet Information Server)

Вы не разбираетесь в Web программировании — не беда. Главное усвоить основы. Мы посылаем специально подготовленный post запрос в Web-сервер, он передает его 1С и возращает ответ. И нам в браузере необходимо обработать ответ сервера.

Запрос:

var soapEnv = ; soapEnv += »;

soapEnv += $(‘#textRequest’).val(); soapEnv += »;

#textRequest — поле нашего запроса.

Вырезаем из ответа сервера необходимое и преобразуем назад спец символы < и > на < и >.

var strBegin = «< ; table id=’result_table'»;
var
strEnd = «</m:TableData>»;
dataResponce = dataResponce.substring(dataResponce.indexOf(strBegin), dataResponce.indexOf(strEnd));
$(‘#result’).html(htmlspecialchars_decode(dataResponce));

Спасибо авторам библиотек jquery.com и tablesorter.com и их лицензиям(GPL, MIT) за их открытость. С помощью jquery не надо писать разный код под разные браузеры(они к сожалению различаются). А tablesorter используем для просоты вывода…

Заходим в браузер http://localhost/test1C и пишем запрос… Правильно написать запрос у меня не получается, я всегда копирую его из консоли запросов.

Нажимаем кнопку. И приходит к нам счастье.

Запросница 1С

Дополнительно скажу, что для слишком больших результатов запросов данная схема может не работать. У меня где-то начинала не выводить или выводить неправильно к 10000-100000 записям. Скорее всего ответ сервера посто не залезает в один пакет soap.  А если отключить сжатие пакетов я думаю будет еще хуже. Так, что будьте осторожны.

 

P.S.

Ну очень грубо говоря так и работает 1С тонкий и web-клиент

Обработку можно скачать  с сайта Инфостарта http://infostart.ru/public/167093