Обработка, представляющая из себя веб-проводник, наделенный всеми возможностями современного браузера, которые удалось реализовать в 1С: вкладки, история, рейтинг посещений, просмотр информации о странице, код HTML-документа, куки, выбор сайта из списка, избранное, сохранение настроек пользователя, а также управление этими настройками и другое.
В главном окне отображается просматриваемая страница, URL которой можно ввести вручную, выбрать из списка, либо открыть избранное и в открывшемся окне нажать "перейти". Текущую страница сохраняется в виде вкладки, её можно дублировать, либо создать пустую. Текущую страницу можно закрыть либо закрыть все, кроме текущей. Соответствующие кнопки находятся в области поля ввода URL.
В меню Настройки-информация, выбором соответствующего пункта можно посмотреть HTML-код документа, всю информацию, которую предоставляет объектная модель ie. В пункте История-полный отчет о посещенных страницах с указанием точной даты последнего посещения с градацией по сессиям и датам. В пункте Рейтинг выводится отчет, в котором отображаются сайты в порядке частоты их посещения. Пункт Настройки позволяет указать для конкретного пользователя: сохранять ли список вкладок при выходе, сохранять ли список переходов, вести ли историю, здесь же можно очистить историю и список переходов. В подгруппе избранное настраивается управление сохранения URL в отдельные папки, чтобы удобно в последствии можно было выбирать нужные сайты. Здесь можно настроить ,чтобы URL сохранялся в одно нажатие в папку по умолчанию(снят флаг "Спрашивать папку"), указать саму эту папку или создать новую. Причем возможно создание сложной иерархии этих папок.
Скачать (пароль ищите в правилах): [attachment=423:brauzer_1s.zip]
Я когда-то сделал возможность добавления видео с ютуба прям нам на сайт. Но не афишировал, т.к. это немного неудобно с точки зрения пользователя, т.е. не просто копи паст . Но, в принципе, как бы то ни было, большого ума для этого не надо. Спасибо за внимание.
Работа через COM с фйлами MS Excel используя OpenOffice/LibreOffice.
Есть ситуации, когда нет возможности установить Excel на стороне клиента, а нужно загружать в базу данные *.xls файлов. Спасением является бесплатный OpenOffice (либо LibreOffice, т.к. работа через COM с ними абсолютно одинакова).
Ниже привожу процедуры загрузки и выгрузки.
Функция ЗагрузитьТЗизФайла(ПутьКФайлу)
//OpenOffice Calc////////////////////////////////////////////////////////////////////////////////////////////// Попытка ServiceManager = Новый COMОбъект("com.sun.star.ServiceManager"); Исключение Предупреждение(ОписаниеОшибки() + Символы.ПС + "программа OpenOffice\LibreOffice не установлена на данном компьютере!"); Возврат Неопределено; КонецПопытки; Desktop = ServiceManager.createInstance("com.sun.star.frame.Desktop"); Свойства = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue"); Свойства.Name = "AsTemplate"; Свойства.Value = Истина; Args = Новый COMSafeArray("VT_VARIANT", 2); Args.SetValue(0, Свойства); Свойства1 = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue"); Свойства1.Name = "Hidden"; Свойства1.Value = Истина; Args.SetValue(1,Свойства1); Document = Desktop.LoadComponentFromURL(ПривестиФайлКУРЛ(ПутьКФайлу), "_blank", 0, Args); Sheets = Document.getSheets(); Sheet = Sheets.getByIndex(текЛист-1); локТабЗнач = Новый ТаблицаЗначений; begCol = 0; begRow = 0; endCol = Sheet.Data.GetLength(6) - 1; endRow = Sheet.Data.GetLength() - 1; нКол = 0; локТабЗнач.Колонки.Очистить();
КС = Новый КвалификаторыСтроки(50); Массив = Новый Массив; Массив.Добавить(Тип("Строка"));
ОписаниеТиповСтрока = Новый ОписаниеТипов(Массив, , КС);
Пока нКол <= endCol Цикл ИмяКол = "К"+Строка(нкол+1); локТабЗнач.Колонки.Добавить(ИмяКол,ОписаниеТиповСтрока); нКол = нКол + 1; КонецЦикла; Range = Sheet.getCellRangeByPosition(begCol, begRow, endCol, endRow); МассивКом = Новый COMSafeArray("VT_VARIANT", Range.Columns.Count, Range.Rows.Count); МассивКом = Range.getDataArray(); тмпПростойМассив = МассивКом.Выгрузить(); Для каждого массив из тмпПростойМассив Цикл ит = 0; НовСтрока = локТабЗНач.Добавить(); Для каждого ЭлементМассива из массив цикл НовСтрока[ит] = ЭлементМассива; ит = ит + 1; КонецЦикла; КонецЦикла; Возврат локТабЗнач;
КонецФункции
Как видно из функции ЗагрузитьТЗизФайла - читается сразу вся область данных файла, поэтому с быстродействием все отлично. На выходе имеем готовую таблицу значений. В данном случае каждой колонке опреден тип Строка(50), но можна этого и не делать, просто это нужно если собираетесь, например, помещать ее во временную таблицу.
Процедура ВыгрузитьТЗвФайл(ТаблицаРезультата)
//OpenOffice Calc/////////////////////////////////////////////////////////////////////////// Попытка ServiceManager = Новый COMОбъект("com.sun.star.ServiceManager"); Исключение Предупреждение(ОписаниеОшибки() + Символы.ПС + "программа OpenOffice не установлена на данном компьютере!"); Возврат; КонецПопытки; Desktop = ServiceManager.createInstance("com.sun.star.frame.Desktop"); Свойства = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue"); Свойства.Name = "AsTemplate"; Свойства.Value = Истина; Args = Новый COMSafeArray("VT_VARIANT", 3); Args.SetValue(0, Свойства); Свойства1 = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue"); Свойства1.Name = "Hidden"; Свойства1.Value = Истина; Args.SetValue(1, Свойства1); Document = Desktop.LoadComponentFromURL("private:factory/scalc", "_blank", 0, Args); Sheets = Document.getSheets(); Sheet = Sheets.getByIndex(0); мИтКол = 0; Для каждого кол из ТаблицаРезультата.Колонки Цикл Sheet.getCellByPosition(мИтКол,0).setString(кол.Имя); мИтКол = мИтКол + 1; КонецЦикла
Для каждого стр из ТаблицаРезультата Цикл Для каждого кол из ТаблицаРезультата.Колонки Цикл стрРез = СокрЛП(стр[кол.Имя]); МассивКОМ.SetValue(итстр,иткол,стрРез); иткол = иткол+1; КонецЦикла; иткол = 0; итстр = ?(итстр=ВсегоСтрок,0,итстр+1); КонецЦикла; begCol = 0; begRow = 1; endCol = ВсегоКолонок-1; endRow = ВсегоСтрок; Range = Sheet.getCellRangeByPosition(begCol, begRow, endCol, endRow); Range.setDataArray(МассивКОМ); //Document.storeToURL(ПривестиФайлКУРЛ(ПутьКФайлу),Args); Свойства2 = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue"); Свойства2.Name = "FilterName"; Свойства2.Value = "MS Excel 97"; Args.SetValue(2,Свойства2); Document.GetCurrentController().GetFrame().GetContainerWindow().SetVisible(Истина); //Document.storeToURL(ПривестиФайлКУРЛ(ФайлКартотеки),Args);
КонецПроцедуры
Процедура ВыгрузитьТЗвФайл сохраняет любую таблицу значений в файл MS Excel. В текущем примере откроется OpenOffice/LibreOffice Calc c данными переданной таблицы значений. Если раскомментировать строки:
при этом добавив Параметр ПутьКФайлу, то данные запишутся в файл без открытия Calc`a. Если обратить внимание на сохранение, то сразу бросается двойной вызов Document.storeToURL - это необходимо для корректного сохранения в формате MS Excel.
Пару возможностей 1с, которые спасёт от неуёмных расходов времени и денег на программистов.
Многие пользователи 1с и программисты не знают о такой простой, но мощной функции 1с, как СРАВНЕНИЕ ФАЙЛОВ. Что это и зачем оно простому пользователю? Данная функция позволяет находить отличия практически в любых отчетах и списках, как в одной базе, так и в разных базах. Без программирования. Без COM. Без OLE. Как же достигается такая универсальность простого метода? Всё благодаря встроенной в 1с v8 возможности выводить практически любые списки в табличные документы, а табличные документы (в т.ч. и отчеты) сохранять во внешние файлы. Вот, например, для сравнения планов счетов 2х конфигураций написали целую обработку, хотя можно было обойтись всего лишь СРАВНЕНИЕМ ФАЙЛОВ. Итак. Как это делать по пунктам.
1. *Если нужно сравнить результаты отчетов или уже готовые табличные или текстовые документы, то пропускаем этот пункт.* Вывести на экран нужный нам список и нажать на нем правой кнопкой мыши, чтобы появилось контекстное меню. И выбрать в нём пункт Вывести список.
После этого появится окно в котором можно настроить в Табличный или Текстовый документ выводить, а также можно настроить список выводимых полей
После нажатия на ОК на экране появится табличный (или текстовый) документ со списком.
2. Сохраним Табличный (Текстовый) документ в файл. 3. Повторим пункты 1 и 2 для данных, с которыми хотим сравнивать, чтобы получить второй сохраненный Табличный (Текстовый) документ. 4. Теперь можно выполнять собственно сравнение. Для это открываем пункт главного меню Файл и нажимает на Сравнить файлы
Откроется окно в котором нужно указать сравниваемые файлы Табличный (Текстовых) документов.
После нажатия на ОК откроется окно, в котором будут построчно сравниваться файлы. Переход по различающимся строкам осуществляется специальными кнопками
В результате никакого программирования и возможность сравнивания практически любых данных!
Мне уже не в первой имеется надобность имея строку вида "20.07.2011" привести её к типу значения Дата (ну чтоб в запросе вставить куда-то, или записать в какой-то объект или... или...). К сожалению нету в 1С встроенной функции, которая могла бы помочь в этом деле. "А что же делать?", - спросят новички. А сделать надо следующее:
Функция ПривестиКТипуДата(СтрДата) День = Сред(СтрДата, 1, 2); Месяц = Сред(СтрДата, 4, 2); Год = Сред(СтрДата, 7, 4); Возврат(Дата(Год+Месяц+День)); КонецФункции
У меня программисты никогда не лезут в бухгалтерию, если что-то надо исправить то бухгалтер пишет бумажку с подписью, которую еще и ГБ заверят - с четкими указания чиво-куда и какими проводками надо сделать, программист только выполняет корректировочные действия которые недоступны бухгалтеру.
Далеко не везде такой процесс налажен. Я пару лет назад работал в организации, где не о каких бумажках речь не шла, всё решалось обычным или телефонным разговором. И действительно было:
Суть задачи. Пользователи в 1с ведут описание объектов, которые редактируются в объекте ФорматированныйДокумент. Необходимо обеспечить выгрузку форматированного документа на фтп.
Для решения этой задачи воспользуемся методом форматированного документа ПолучитьHTML(). Этот метод вернет нам сам текст html документа и структуру картинок. После выполнения данного метода нам следует выгрузить картинки на наш сайт. Во время выгрузки картинок определяем тип картинки и на основании этого определяем расширение файла. Поэтому нам надо и подкорректировать сам текст html, так как источник картинки в нем по умолчанию прописывается в виде «image001″ (без расширения). Эта корректировка не критична для нас, страница будет отображаться нормально, но отдельно по ссылке открыть рисунок будет проблематично.
Код функции:
&НаСервере Функция ВыгрузитьОбъект(ТекОбъект) Экспорт РезультатВыгрузки = "";
//проверим есть ли описание объекта в базе ФорматированныйДокумент = ТекОбъект.Описание.Получить(); Если ФорматированныйДокумент = Неопределено Тогда РезультатВыгрузки = " У данного объекта не определено описание. Выгрузка объекта остановлена"; Возврат РезультатВыгрузки; КонецЕсли;
//Определяем настройки подключения к фтп Сервер = ХранилищеНастроек.ФТПСервер; Порт = ХранилищеНастроек.ФТПпорт; ИмяПользователяФТП = ХранилищеНастроек.ФТПИмяПользователя; ПарольПользователяФТП = ХранилищеНастроек.ФТППароль; ТекущийКаталогFTP = ХранилищеНастроек.ФТПТекущийКаталог;
ФТП = Новый FTPСоединение(Сервер,,ИмяПользователяФТП,ПарольПользователяФТП);
Попытка ФТП.УстановитьТекущийКаталог(ТекущийКаталогFTP); Исключение РезультатВыгрузки = "Невозможно подключиться к фтп"; Возврат РезультатВыгрузки; КонецПопытки;
Надумал когда-то задачу себе: выгрузить содержимое табличного документа в Google Document. Одним из вариантов использования данного функционала может быть выгрузка состояния заказов пользователей из базы в 1с в google spreadsheet. Если клиент знает адрес данного документа, то они могут ознакомиться с состоянием дел не звоня менеджеру. Может кто еще придумает варианты использования – пишите в комментарии, буду рад.
Последовательность выгрузки документа такова: сначала получаем список таблиц, которые есть у пользователя в системе Google Document. Затем после определения таблицы выгрузки пользователю предлагаем выбрать лист, в который будет выгружаться содержимое. Во время выбора всех этих параметров так же предоставляется возможность создания новых элементов (таблиц, листов). Уже после определения листа выгрузки обходим все ячейки документа и их содержимое переносим в таблицу на соответствующее место. Вопрос сохранения форматирования табличного документа в данной задаче не рассматривался.
Для написания функционала использовалась информация про google document API. Для того чтобы получить доступ к данным необходимо чтобы 1с сначала прошла аутентификацию. Про аутентификацию приложений можно почитать в соответствующем документе. Для того чтобы пройти аутентификацию мы должны сначала получить маркер, затем этот маркер прописывать каждый раз при обращении к серверу.
Функция получения маркера следующая:
Функция ПолучитьМаркер(ВидСервиса,Пользователь = Неопределено) Экспорт ПараметрыПользователя = ПолучитьПараметрыПользователя();
Если ПараметрыПользователя = Неопределено Тогда Возврат Неопределено; КонецЕсли;
АдресКлиентЛогин = "https://www.google.com/accounts/ClientLogin"; Если ВидСервиса = "Таблица" Тогда Сервис = "wise"; ИначеЕсли ВидСервиса = "Документ" Тогда Сервис = "writely"; КонецЕсли;
Функция получения маркера в качестве входного параметра получает вид службы, для которой будет проходить аутентификация. Это очень важный момент. Например, полученный маркер для Календаря не даст возможности работать с документами.
Для получения списка таблиц отправляется GET запрос по адресу «https://spreadsheets.google.com/feeds/spreadsheets/private/full». В запросе параметр «Authorization» определяется значением полученного маркера аутентификации. В результате выполнения запроса в ResponseText мы получаем xml, который для удобство дальнейшего разбора перегоняется в ДеревоЗначений.Функция получения списка таблиц имеет следующий вид:
&НаСервере Функция ПолучитьСписокТаблиц(Пользователь = Неопределено) Экспорт
ПараметрыПользователя = ПолучитьПараметрыПользователя(); Если ПараметрыПользователя = Неопределено Тогда Возврат Ложь; КонецЕсли;
Маркер = ПолучитьМаркер("Таблица"); Если Маркер = Неопределено Тогда Возврат Ложь; КонецЕсли;
Если ХМЛХТТП.Status = 200 Тогда ОтветСервера = ХМЛХТТП.ResponseText; ДеревоXML = ПрочитатьResponseTextXML(ОтветСервера); СписокТаблиц = Новый СписокЗначений; ТаблицаСсылка = ""; НазваниеТаблицы = "";
Для Каждого Строка Из ДеревоXML.Строки[0].Строки Цикл Если Строка.ИмяXMLЭлементаДанных = "entry" Тогда Для Каждого ТекАтрибут Из Строка.Строки Цикл Если ТекАтрибут.ИмяXMLЭлементаДанных = "link" Тогда ТекРел = ТекАтрибут.СписокАтрибутов.НайтиПоЗначению("rel"); Если ТекРел.представление = "http://schemas.google.com/spreadsheets/2006#worksheetsfeed" Тогда ТекСсылка = ТекАтрибут.СписокАтрибутов.НайтиПоЗначению("href"); ТаблицаСсылка = ТекСсылка.Представление; ТаблицаСсылка = СтрЗаменить(ТаблицаСсылка,"https://","http://"); КонецЕсли; КонецЕсли;
Если ТекАтрибут.ИмяXMLЭлементаДанных = "title" Тогда НазваниеТаблицы = ТекАтрибут.ЗначениеXMLЭлементаДанных; КонецЕсли; КонецЦикла; Если ЗначениеЗаполнено(ТаблицаСсылка) И ЗначениеЗаполнено(НазваниеТаблицы) Тогда СписокТаблиц.Добавить(ТаблицаСсылка,НазваниеТаблицы); КонецЕсли; КонецЕсли; КонецЦикла;
Теперь остановимся на самой выгрузке значения в ячейку google таблицы. Для определения значения в ячейке выполняется POST запрос по адресу листа таблицы, который пользователь определил до этого. Успешность выполнения обновления контролируется по значению Status, в случае удачного обновления он должен быть равен 201. Функция обновления значения ячейки на листе Google таблицы имеет следующий вид:
Милиция повязала группу мошенников, продающих дипломы в метро. - Нам пришлось их отпустить, - заявил доктор экономических наук сержант Иванов.
Дорогая, я назвал нашего ребенка Лексус. - Ты долбоеб? - Зато у нас теперь в семье есть Лексус. - И долбоеб!
Крошка — сын к отцу пришел, а отец — буханка.
Театр. Свет притушен. Полная тишина, идёт спектакль. Вдруг ряда из третьего раздаётся возглас: - Доктор! Есть в зале доктор?! Где то с балкона отвечают: - Я доктор. Что случилось? - Коллега! Что за х...ю нам показывают?!
"1С: Предприятие" - универсальная система для автоматизации деятельности предприятия, которая может применяться при решении широкого круга задач учета и управления. На данный момент на платформе "1С: Предприятия" создано множество как типовых, так и специализированных решений, они способны работать в сочетании с другими решениями на этой же платформе или с ПО сторонних производителей. Для того чтобы работа была результативной, большое значение имеет возможность организовать обмен между разными информационными системами. Платформа "1С: Предприятия" обладает различными инструментами, которые позволяют осуществлять обмен данными и интегрировать решения прикладного характера. В книге В. Э. Бояркина и А. И. Филатова "1С: Предприятие 8. Конвертация данных. Обмен данными между прикладными решениями" детально описан обмен данными в формате XML, который на данный момент является общепринятым для представления данных. Кроме того, в книге рассмотрены процедуры по разработке правил, применяя которые возможно перенести данные из одной из одной информационной системы в другую, а также обеспечивать обмен информацией между типовыми конфигурациями "1С: Предприятия". Полезным приложением к книге служит CD-диск с демонстрационными информационными базами, примерами правил обмена, а также конфигурацию "1С: Предприятие. Конвертация данных".
НачатьТранзакцию(); Попытка // здесь например формируется какой-то документ и возникает ошибка блокировки данных // выполнение перейдет в исключение ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); ВызватьИсключение(); КонецПопытки;
В начале освоения системы компоновки данных не понятно, во что превращается запрос написанный в ней. Особенно это касается параметров. Включив ”Выводить текст запроса” мы увидим привычный запрос.
Возможность увидеть время выполнение запроса + вывод в табличный документ положительно влияет на качество кода
Были времена, сидел без работы, разработал курс по СКД, думал преподавать его в онлайн-режмие через инет. Сейчас времени не стало, преподавать его возможности нет. Увидел ваш проект, думаю, вам может это пригодиться
С уважением, Дмитрий Салихов.
В данном курсе присутствует как теоретическая, так и практическая сторона основ (и не только их) работы с компоновкой. По сути, в небольшом методическом пособии Дмитрия, собрано почти все, с чем сталкиваются программисты при использовании СКД.
Что представляет из себя курс?
Курс состоит из методического пособия в формате pdf на 63 листах. Главы пособия оформлены подобно статьям на данном ресурсе. Т.е. теореитеческая часть, подкрепленная скриншотами. Также к курсу прилагается выгрузка тестовой базы (формат .dt) и внешние отчеты, примеры которых рассмотрены в методическом пособии.
Какие вопросы рассмотрены в курсе?
Как я уже говорил, в курсе рассмотрено все то, что обязан знать программист, использующий СКД. Рассмотрены примеры от простого отчета без программирования, до программной работы с расшифровкой и т.д.
Содержание: - Шаг первый. Простой отчет без кодирования; - Немного теории. Устройство системы компоновки данных; - Шаг второй. Работа с параметрами и отборами; - Шаг третий. Работа с различными наборами данных. Внешние наборы данных; - Шаг четвертый. Макеты компоновки данных. Создание собственных макетов; - Шаг пятый. Использование характеристик. Условное оформление. Вычисляемые поля; - Шаг шестой. Расшифровка
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!