Проблема: После обновления на 1С:Бухгалтерию предприятия 3-й версии, при нажатии на закладку командного интерфейса 1С:предприятие, выскакивает ошибка:
Aboutsecurity_1cv8c.exe или Aboutsecurity_1cv8.exe
«Содержимое указанного ниже веб-узла в этом приложении блокировано конфигурацией усиленной безопасности Internet Explorer».
Ошибка исчезает после многократного нажатия на «Закрыть», что несколько мешает работать, мягко говоря. Похожая ошибка бывает и в конфигураторе, при обновлении конфигурации или сравнении/объединении конфигураций. Чаще всего, мне попадалась эта проблема в серверных ОС, в частности Windows 2008 r2.
Решение: нужно добавить исключение в настройках безопасности Internet Explorer (далее & IE).
Это делается просто, если у вас один или несколько компьютеров & просто открываете IE/Свойства обозревателя/Безопасность/Надёжные узлы/Сайты, добавляете Aboutsecurity_1cv8c.exe и Aboutsecurity_1cv8.exe, нажимаете Ок, и наслаждаетесь результатом.
Но вот если у вас терминал-сервер и 40/60 пользователей, или еще хуже & пользователей 150 и они ходят в SQL версию 1С с локальных рабочих станций, то бегать по всем корпусам и добавлять эту настройку весьма накладно по времени, да и отвлекать пользователей лишний раз от работы не порядочно.
В этом случае, нужно пользоваться групповыми политиками домена (который у вас должен быть настроен, если вы не офисный спортсмен-бегун).
Вариант №1. Неудавшийся.
Первое решение & прописать настройки через Group Polices (Административные шаблоны/Компоненты Windows/Internet explorer/Вкладка «Безопасность»/Список назначений зоны для веб-сайтов) & не увенчалось успехом. Настройки пользователей, как и обещалось в статьях по данному методу, перестали работать, а вот зоны, описанные в этих настройках, работать не начали. При этом, я пробовал добавлять настройки и в локальные политики, и в доменные и в политики контроллера домена. Скорее всего из-за этих экспериментов с разными зонами действия групповых политик и появилась проблема.
И так, после этих манипуляций, в настройках безопасности IE появилась надпись «Некоторыми параметрами управляет системный администратор» и добавлять/удалять сайты узлов безопасности стало невозможно. От этой надписи, почему-то, оказалось не так просто избавиться. Удаление проделанных настроек GPO не разблокировали вкладку «Безопасность», а манипуляции с реестром привели к появлению ошибок «В параметрах зоны есть ошибка. Не удалось добавить сайт.» (IE 10) или «При установке параметров безопасности зоны произошла ошибка. Добавить узел не удается.» (IE 9) & все дальнейшие действия сходили на нет.
Исправить косяк удалось следующим путём:
Обновил Internet Explorer до версии 10 (был 9-й).
Предварительно экспортировав разделы реестра в файл, на случай восстановления, удалил из следующие ключи:
Восстановил настройки Internet Explorer (Свойства обозревателя/Дополнительно/Сброс).
Проверить, что проблема не вернётся можно введя команду gpupdate /force в командной строке. После обновления политики запустите IE и проверьте, что настройки остались на месте. Если настройки опять слетели и добавление сайтов в узлы безопасности стало опять невозможно, то, скорее всего вы забыли отключить параметр «Список назначений зоны для веб-сайтов» в какой-то из зон групповой политики.
Чтобы определить в какой из зон групповых политик засела настройка (в локальных, доменных или контроллера домена), удобно пользоваться мастером отчётов «Результаты групповой политики», который находится в консоли «Диспетчер сервера», в разделе «Компоненты/Управление групповой политикой» (в Windows 2008 r2, по крайне мере он там).
Так что, здесь стоит быть осторожным, чтобы не создать себе дополнительной работы.
Вариант №2. Через GPO и реестр.
Этот метод делается через те же групповые политики, но через прямые записи в реестр, а не манипулирование стандартными настройками.
Что делать:
Удаляем узлы Aboutsecurity_1cv8 из настроек IE, если вы их туда уже добавили вручную & это нужно для чистоты эксперимента. Проверьте, что в 1С ошибка сохранилась.
Небольшая ремарка: подраздел EscDomains используется в режиме расширенной настройки безопасности, если же этот режим отключен по какой-то причине, то нужно использовать раздел Domains вместо EscDomains (подробнее о записях реестра IE см. в базе знаний Microsoft).
И пробуем добавить его в реестр & если срабатывает, и в тонком клиенте 1С ошибка Aboutsecurity_1cv8c.exe исчезает, делаем дальше.
Снова открываем Default Domain Policy в диспетчере управления сервером, далее Конфигурация пользователя/Настройка/Конфигурация Windows/Реестр.
Добавляем туда две записи, где поле «Путь раздела»:
в первой записи это «Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\EscDomains\security_1cv8c.exe» (для тонкого клиента 1С),
во второй записи «Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\EscDomains\security_1cv8.exe» (для толстого клиента).
В остальном запись содержит те же данные, что и на картинке.
После этого, как положено, перелогиниваемся и проверяем результат. В толстом и тонком клиенте 1С:предприятие, ошибка должна исчезнуть.
В моём случае, для надёжности избавления от проделанных в Варианте №2 настроек, были добавлены ещё три записи в реестр:
Обновить: HKCU\Software\Policies\Microsoft\Windows\CurrentVersion\Internet Settings; параметр: ListBox_Support_ZoneMapKey; значение 0 (тип DWORD десятичный)
Есть ещё вариант, который переключит работу программы в режим интерфейса «Такси» : Администрирование/Настройки программы/Интерфейс & здесь включаем «Интерфейс «Такси»" & в этом режиме данная ошибка не появляется, но пользователям может не понравиться работать с этим вариантом интерфейса, т. к. он предназначен для мобильных устройств и планшетов (например, для работы через Web).
Формат JSON в 1С до версии 8.3.6 не реализован, но нижет я приведу примеры функций которые можно использовать для полноценной работы JSON в 1С предыдущий версий.
JSON (JavaScript Object Notation) это текстовый формат обмена данными, широко используемый в веб-приложениях. По сравнению с XML он является более лаконичным и занимает меньше места. Кроме этого все браузеры имеют встроенные средства для работы с JSON.
Необходимость работы с этим форматом на уровне платформы обусловлена не только тем, что это «модный современный» формат, который прикладные решения 1С:Предприятия сами по себе могут использовать для интеграции со сторонними приложениями. Другая причина заключается ещё и в том, что JSON активно используется в HTTP интерфейсах. А в 1С:Предприятии как раз есть такие механизмы, в которых хочется использовать этот формат. Это REST интерфейс приложения, автоматически генерируемый платформой, и HTTP-сервисы, которые вы можете создавать самостоятельно.
В платформе с версии 8.3.6:
Потоковое чтение и запись JSON:
Объекты потоковой работы - это общие объекты ЧтениеJSON и ЗаписьJSON. Они последовательно читают JSON из файла или строки, или последовательно записывают JSON в файл или строку. Таким образом, чтение и запись JSON происходят без формирования всего документа в памяти.
В качестве иллюстрации потокового чтения JSON можно привести следующий пример:
Результат такой записи:
Сериализация примитивных типов и коллекций в JSON
Вторая группа средств работы с JSON хороша тем, что избавляет вас от рутинной работы по чтению/записи каждого отдельного значения или свойства. При чтении документы JSON отображаются в фиксированный набор типов платформы: Строка, Число, Булево, Неопределено, Массив, ФиксированныйМассив, Структура, ФиксированнаяСтруктура, Соответствие, Дата. Соответственно, в обратную сторону, композиция объектов этих типов позволяет сформировать в памяти и быстро записать в файл структуру JSON. Таким образом, чтение и запись небольшого объема JSON заранее известной структуры можно производить немногими строчками кода.
Основное назначение этих средств мы видим в обмене информацией с внешними системами, чтении конфигурационных файлов в формате JSON.
Сериализацию вы можете выполнять с помощью методов глобального контекста ПрочитатьJSON() и ЗаписатьJSON(). Они работают в связке с объектами ЧтениеJSON и ЗаписьJSON.
В качестве примера десериализации JSON можно рассмотреть чтение массива из двух объектов:
Полностью автоматизировали работу с JSON и реализовали в платформе третью группу средств. Они позволяют сериализовать в JSON прикладные типы 1С:Предприятия: ссылки, объекты, наборы записей и вообще любые типы, для которых поддерживается XDTO сериализация. Конечно же, мы обеспечили и обратную операцию - десериализацию. Зачем это нужно!?
Прежде всего, и в основном, XDTO сериализацию в JSON мы рекомендуем использовать при обмене данными между двумя прикладными решениями 1С:Предприятия. По сравнению с XML формат JSON более компактный, сериализация/десериализация в/из JSON выполняется быстрее. Кроме этого мы предприняли дополнительные меры для того, чтобы сократить объём передаваемых данных.
Кроме обмена между приложениями 1С:Предприятия этот механизм можно использовать и для обмена с внешними системами, готовыми принимать типы данных 1С:Предприятия. Например, XDTO сериализацию в JSON можно использовать для организации собственного HTTP интерфейса прикладного решения. Сервис на платформе 1С:Предприятия будет формировать ответ в памяти в виде строки JSON. А затем передавать её при помощи объекта HTTPСервисОтвет. Реализованный нами механизм сериализации полностью соответствует стандарту JSON. Поэтому внешняя система не должна испытывать каких-либо трудностей с десериализацией.
Использование XDTO сериализации в JSON для других задач видится нам маловероятным. Потому что если внешняя система не готова работать с прикладными типами 1С:Предприятия, то зачем их ей передавать? А если предполагается обмениваться только примитивными типами и коллекциями, то для этой задачи хорошо подходят методы ПрочитатьJSON() и ЗаписатьJSON(). Подробнее здесь
ПереместитьФайл(<ИмяФайлаИсточника>, <ИмяФайлаПриемника>) Параметры:
<ИмяФайлаИсточника> (обязательный) - Полное имя файла-источника (полное исходное имя файла).
<ИмяФайлаПриемника> (обязательный) - Полное имя файла-приемника (полное новое имя файла). Описание: Выполняет перемещение (переименование) указанного файла. Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер). Примечание: Допускается использование схем http, https и ftp для адресации файлов. При использовании этих схем в адресах необходимо указывать прямые слеши '/', а не обратные '\'.
Для работы метода на веб-клиенте необходимо предварительно подключить расширение работы с файлами.
На веб-клиенте метод работает только с локальными файлами.
Пример:
Программные лицензии представляют собой файл, который в зашифрованном виде содержит параметры лицензии и характеристики компьютера, для которого данная лицензия получена. Доступ к этому файлу определяется правами доступа файловой системы. Если файл лицензии находится в каталоге, к которому нет доступа у пользователя, от имени которого работает экземпляр 1С:Предприятия, пытающегося получить лицензию - значит лицензия не будет получена!
2. Как работает программная лицензия?
Приложение 1С:Предприятия (клиентское или серверное) при необходимости получения лицензии выполняет поиск файлов по всем доступным путям. Далее из файлов получаются параметры самой лицензии и характеристики компьютера, для которого лицензия получена. Если параметры текущего компьютера не совпадают с полученными - файл лицензии отвергается. В противном случае выполняются проверки, связанные с количеством пользователей и типом лицензии (клиентская или серверная).
3. Что есть что в диалоге получения лицензии.
В диалоге получения лицензии есть два момента, которые вызывают наибольшие трудности - такое ощущение складывается по этому форуму.
Это страницы помощника с выбором компьютера, для которого должна быть установлена лицензия и выбор доступности лицензии (текущему пользователю или всем пользователям).
При получении программных лицензий необходимо выбрать, характеристики какого компьютера будут использоваться при привязке лицензии. От вида лицензии и компьютера, на котором запущен Конфигуратор, зависит, какой пункт следует выбирать при получении лицензии.
"На компьютер сервера 1С:Предприятия" имеет смысл выбирать в случае получения любых программных лицензий, если использование полученной лицензии предполагается на компьютере, где расположен сервер "1С:Предприятия" и это не тот компьютер, на котором выполняется получение программной лицензии. В этом случае файл с полученной программной лицензией всегда будет размещаться в каталоге профиля того пользователя, от имени которого работает сервер "1С:Предприятия" (по умолчанию — USR1CV82) на том компьютере, на котором работает сервер "1С:Предприятия".
"На этот компьютер" имеет смысл выбирать во всех остальных случаях. Исключением является многопользовательская программная лицензия, для которой выбирать пункт "На этот компьютер" имеет смысл только при запуске Конфигуратора на терминальном сервере или в терминальной сессии. Также в этом случае можно будет выбирать, куда будет помещен файл с активированной лицензией — в каталог профиля текущего пользователя или в каталог, доступный всем пользователям системы. Это будет каталог того компьютера, на котором выполняется активация программной лицензии.То, какой набор лицензий будет доступен для использования, зависит от того, куда будут размещены файлы с активированными лицензиями. Если они размещены в каталоге профиля пользователя, от имени которого выполняется активация лицензии, то другие пользователи этого же компьютера не получат доступ к этим лицензиям. Например, если на терминальном сервере активирована однопользовательская программная лицензия, и она размещена в каталоге профиля текущего пользователя (например, User1), то другой пользователь (например, User2) не сможет работать в то время, когда пользователь User1 не работает. Для того чтобы активированная лицензия была доступна всем пользователям компьютера, ее надо размещать в каталоге, предназначенном для всех пользователей системы. Тогда однопользовательская лицензия из примера, приведенного выше, будет доступна любому пользователю терминального сервера, при условии, что другие пользователи не используют данную лицензию (т.к. она однопользовательская).
4. Как активировать дополнительную программную лицензию?
Если требуется активировать дополнительную клиентскую программную лицензию на компьютере, на котором уже активирована программная лицензия, то делать это необходимо в точности так, как и при первой активации программной лицензии на выбранном компьютере.
Если выполняется получение серверной и многопользовательской программной лицензии и существует возможность запустить Конфигуратор на компьютере с установленным сервером "1С:Предприятия", то рекомендуется выполнять получение обеих лицензий на компьютере сервера, при этом получать лицензию следует "На этот компьютер" и "Всем пользователям данного компьютера".
ВНИМАНИЕ! Не рекомендуется размещать один файл программной лицензии одновременно в нескольких различных каталогах, доступных приложениям "1С:Предприятия". Это может привести к тому, что файл с лицензией станет непригодным для использования, т. к. является одним из вариантов нарушения лицензионного соглашения.
5. Рекомендации по получению программных лицензий
5.1. Файловый вариант информационной базы
5.1.1. Лицензия получается на клиентском компьютере
Однопользовательскую лицензию рекомендуется получать "На этот компьютер" и "Всем пользователям данного компьютера".Многопользовательскую лицензию активировать не имеет смысла.
5.1.2. Лицензия получается на терминальном сервере
Программную лицензию (любую) рекомендуется получать "На этот компьютер" и "Всем пользователям данного компьютера".
5.2. Файловый вариант информационной базы через веб-сервер
5.2.1. На компьютере, где получается лицензия, возможно запустить Конфигуратор
Рекомендуется установить на компьютер с веб-сервером толстый клиент и с помощью Конфигуратора получить лицензию (любую) "На этот компьютер" и "Всем пользователям данного компьютера". Так можно поступить, если веб-сервер развернут на ОС Windows.
5.2.2. На компьютере, где получается лицензия, невозможно запустить Конфигуратор
Установить на этот компьютер сервер необходимой разрядности и получить лицензию для компьютера сервера с любого компьютера в сети, на котором установлен толстый клиент. Серверное приложение позволит получать программную лицензию даже в том случае, если отсутствует серверная лицензия. Рекомендуется получать лицензию (любую) "На компьютер сервера 1С:Предприятия". С помощью этого способа можно получить, например, многопользовательскую программную лицензию для работы с файловой информационной базой через веб-сервер, развернутый на ОС Linux.
5.3. Клиент-серверный вариант информационной базы
5.3.1. Лицензия получается на клиентском компьютере
Однопользовательскую лицензию рекомендуется получать "На этот компьютер" и "Всем пользователям данного компьютера".
Многопользовательскую лицензию рекомендуется получать "На компьютер сервера 1С:Предприятия".
Получать многопользовательскую лицензию "На этот компьютер" не имеет смысла.
5.3.2. Лицензия получается на терминальном сервере
Программную лицензию (любую) рекомендуется получать "На этот компьютер" и "Всем пользователям данного компьютера".
5.3.3. Лицензия получается на компьютере сервера "1С:Предприятия"
Программную лицензию (любую) рекомендуется получать "На этот компьютер" и "Всем пользователям данного компьютера".
5.4. Серверная лицензия
5.4.1. Лицензия получается на клиентском компьютере
Рекомендуется получать программную лицензию (любую) "На компьютер сервера 1С:Предприятия".
5.4.2. Лицензия получается на компьютере сервера "1С:Предприятия"
Рекомендуется получать программную лицензию (любую) "На этот компьютер" и "Всем пользователям данного компьютера".
Часто при ведении учета в различных конфигурациях 1с возникает необходимость выполнения обмена данных. Для решения этой задачи принято использовать Универсальный обмен данными XML или другие внешние обработки, общим у которых является использование текстовых файлов посредников.
Я предлагаю использовать Web-сервисы 1с. В чем необходимость обмена: Обмен данными между базами требуется для исключения дублирующих вводов одних и тех же данных в различных учетных системах. В чем необходимость обмена в режиме online: Обмен в онлайн режиме требуется когда функции учета комплекса учетных систем выполняются в разных учетных системах.
1. Например компания использует: CRM систему учета, для ведения учета взаимоотношений с клиентами; БП 2.0 для ведения взаиморасчетов с клиентами в разрезе счетов; Счета выставляемые клиентам создаются в торговой базе, а оформление заказов поставщикам исходя из потребности клиентов в базе ориентированной на работу с пайсами поставщиков. При таком разделенном построении учета, для выставления счета в одной из баз к примеру требуется завести карточку клиента в другой базе с тем чтобы данные о контрагенте так же были доступны в базе со счетами.
2. Помимо синхронизации первичных данных, может возникнуть необходимость построения сводного отчета по данным из нескольких баз, что тоже потребует обращения к внешним данным в online режиме.
Вариант автоматизации данного процесса с использованием файлов обмена, потребует подключения обработчика ожиданий, что сможет обеспечить обмен данными только с установленной задержкой времени обмена, кроме того любая обработка ожидания будет не эффективно использовать машинное время.
Обращение к Web сервисам, возможно при возникновении любых событий (ПриЗаписи, ПриПроведении, при нажатии кнопки и т.д.). при этом не возникнет ни какой задержки реакции информационной базы к которой происходит обращение, (в отличие от запуска еще одного приложения 1с в качестве com объекта).
Итак рассмотрим вариант реализации синхронизации элементов справочников, начнем с наиболее простого со справочника "Товары" в базах "Продажи" и "Закупки". Синхронизация для начала будет односторонней, предположим что перечень товаров заводится в базе "Продажи", а в "Закупки" он передается.
Что нам потребуется для того чтобы задача возникла и могла быть решена.
1. Сервер 1с, с установленной web компонентой;
2. веб-сервер (например IIS 6.0);
3. Две или более конфигурации учетных систем.
Что нам потребуется для решения задачи.
1. Создадим в базе "Закупки" Web-сервис "Синхронизация", и добавим ему Операцию "СинхронизироватьТовар", со строковыми параметрами.
1. "GuidТовара" - сюда будем передавать уникальный идентификатор товара присвоенный в базе Продаж.
2. "GuidРодителя" - уникальный идентификатор родителя данного товара.
3. "стрСтруктураРеквизитов" - Структура реквизитов товара в виде примитивных типов (число,строка,дата,булево) преобразованная в строку.
4. "этоГруппа" - реквизит котрый позволит нам не раскрывая всей структуры реквизитов товара узнатья явлется ли товар группой и соответственно его обработать.
5. "стрТаблицаЕденицИзмерения" - Таблица содержащая описание доступных единиц измерения для товара
Далее потребуется опубликовать данный сервис на веб сервере. для этого нужно будет создать текстовый файл "wssinhron.1cws", в каталоге сайта опубликованном на веб сервере. Библиотека wsisapi.dll, должна быть подключена. Проще всего корректную настройку работы веб сервера с 1с можно провести опубликовав веб приложение через конфигуратор Администрирование->"Публикация на веб сервере". Единственным минусом является, то что в версии 8.2 файлы веб сервисов *.1cws, сами не создаются. Возможно просто мне не хватает знаний по этому вопросу но для публикации веб сервисов я пользуюсь блокнотом.
Также следует учесть что на серверах 64x следует использовать wsisapi.dll из поставки 1с 64x, даже если сам сервер 1с у вас 86x.
Итак создаем файл "wssinhron.1cws" с текстом.
{Название вашего сервера 1с}";Ref="{Назваение базы. у нас это "Market"}";"/>
Далее перейдем в модуль обработки нашего Сервиса, для наглядности я приведу пример кода своей разработки
Теперь, как вызвать веб сервис не зациклив при этом систему.
в нашем справонике "Товары" в базах "Продажи" и "Закупки" нам потребуются служебные реквизиты. 1. "GUIDтовара" - строковый реквизит (50)
2. "ВремяСинхронизации" - Реквизит с типом Дата и Время
3. "Синхронизирован" - тип булево.
В модуль объекта Справочника добавим предопределенные обработчики событий "ПередЗаписью()", "ПриЗаписи()" функцию "Синхронизация()" и общую переменную "передавать", и под текстом модуля присвоим этой переменной значение Истина. Перем передавать Экспорт;
Процедура ПередЗаписью(Отказ)
Процедура ПриЗаписи(Отказ)
Функция Синхронизация()
передавать = истина;
Таким образом получится что при любой инициализации модуля наша переменная всегда имеет значение истина.
Рассмотрим наши процедуры:
Таким образом остается добавить в событие формы элемента "ПриЗаписи()"
И мы сможем записывать наш элемент сколько угодно раз не вызывая зацикливания.
Для варианта двусторонней синхронизации, (когда элемент справочника может редактироваться в обоих базах) нам потребуется скопировать наш веб сервис из базы закупок в базу продаж переименовав имя файла публикации и URI пространство имен и внести соответствующие изменения в вызов веб сервиса из базы продаж в базу закупок и опубликовать его. Важно: При успешном срабатывание вызванного сервиса из базы "Продажи", в качестве результата работы должен быть возвращен уникальный идентификатор элемента справочника из базы "Продажи". Данный результат необходимо будет присвоить соответсвующиму реквизиту справочника из базы закупок.
Аналогично приведенному примеру можно синхронизировать данные любого справочника или документа.
Построение сводных отчетов
Для получения сводного отчета нам также потребуется вызов веб сервиса из какой - либо базы. Данный веб сервис должен будет возвращать преобразованною в строку, таблицу с данными которые мы хотим использовать в нашем отчете (Например таблицу содержащую "Код товара" и "Актуальную цену поставщика на данный товар"). Далее можно преобразовать эту строку в таблицу и использовать в качестве вложенной временной таблицы любом запросе к базе "Продажи" с соединением по Коду. Исключением является использование данной таблицы в Построителе отчетов, для случая построителя нам понадобится создание, дополнительного справочника с предопределенным элементом и табличной частью, с реквизитами соответствующими полям таблицы.
Автор: allert73
Все чаще и чаще встречаются обмены, используя технологию Web-Сервисов. Это удобно, т.к для хостовой базы данных достаточно установить расширение Web-Сервиса и обработчик данных, а для клинтского решения подключиться к Web-Сервису. Технология является мультиплатформенной и на данный момент ее использование весьма актуально.
Примерами таких веб-сервисов можно назвать:
http://www.cbr.ru/scripts/Root.asp?Prtid=DWS веб-сервис Центробанка, для получения ежедневных данных.
http://api.yandex.ru/speller/doc/dg/concepts/api-overview.xml веб-сервис Яндекса проверки правописания.
https://www.flightstats.com/developers/bin/view/Web+Services/WSDL ряд веб сервисов авиастатистики, для мониторинга полетов, сведений о погоде, и.т.п.
WSDL (Web Services Description Language) — язык описания веб-сервисов и доступа к ним, основанный на языке XML. (спецификация http://www.w3.org/TR/wsdl).
SOAP (Simple Object Access Protocol — простой протокол доступа к объектам) — протокол обмена структурированными сообщениями в распределенной вычислительной среде. SOAP используется для обмена произвольными сообщениями в формате XML и удалённого вызова процедур (RPC). (спецификация http://www.w3.org/TR/soap/).
XDTO (XML Data Transfer Objects) — механизм объектного моделирования данных, описываемых с помощью схемы XML (подробнее http://v8.1c.ru/overview/xdto.htm).
Большинство примитивных типов сериализованных объектов разработана компание W3 и их описание находится в пространстве имен «http://www.w3.org/2001/XMLSchema».
 
и так: Задание 1: Установка платформы 1С: Предприятие, установка компоненты IIS сервера, связь Web-Расширения 1С с сервером IIS.
При установке платформы 1С: Предприятие необходимо установить Web-Расширение.
Рис. 1. Выбранные компоненты в момент установки 1С
В меню «Панель управленияВсе элементы панели управленияПрограммы и компоненты» Необходимо выполнить установку дополнительных компонентов Windows «Включение или отключение компонентов Windows» где указать все компоненты IIS (за исключением FTP, для текущей работы он не требуется). После установки рекомендуется перезапустить операционную систему.
Рис. 2. Выбранные компоненты в момент установки IIS
В меню «Панель управленияВсе элементы панели управленияАдминистрирование» запустить консоль «Диспетчер служб IIS», где открыть элемент «Пулы приложений» открыть пул «DefaultAppPool» в контекстном меню выбрать «Дополнительные параметры…» где элемент «Разрешены 32-рязрядные приложения» надо установить «True». Это необходимо для работы Web-Расширения 1С, т.к. оно является 32-битным прилодением.
В той же консоли «Диспетчер служб IIS», выбрать элемент «Default Web Site», выбрать действие «Проверка подлинности» где необходимо включить варианты: «Анонимная проверка подлинности», «Обычная проверка подлинности», «Проверка подлинности Windows».
Теперь возможна публикация Web-Сервисов 1С на сервере IIS. Но для того, чтобы было возможно выполнить эту публикацию, необходимо запустить Конфигуратор 1С: Предприятия от имени пользователя «Администратор».
Задание 2: Создание простой конфигурации 1С.
Считаем, что в базе данных есть информация информации обо всех заказах, содержащая количество и тип номенклатуры, который был заказан, в одном заказе может быть список, содержащий номенклатуру и количество, заказ так же имеет свой номер и дату его создания. Информацию обо всех заказах надо передать через Web-Сервис.
Для описания этого необходимо создать объекты базы данных:
Рис. 3. Структура данных в созданной конфигурации 1С
Справочник «Номенклатура», без дополнительных реквизитов. В реквизитах «по умолчанию» содержится информацию о наименовании и коде номенклатуры.
Документ «Заказ покупателя», который будет содержать табличную часть «Товары», каждая строка которой будет иметь информацию о номенклатуры (элемент типа «СправочникСсылка.Номенклатура») и количестве (элемент «Количество» типа «Число» беззнаковое с 15 знаками до запятой и 3 после).
Далее можно запустить 1С в режиме предприятия и создать несколько документов, заполненных созданными нами же номенклатурами и соответствующим количеством.
Задание 3: Создание и публикация Веб-Сервиса 1С.
В группировке «Общие» конфигурации создать новый элемент типа «XDTO-пакеты», первоначально для передачи номенклатуры. Его можно назвать, например «NomenclatureXDTO». URL пространство имен, в соответствии со спецификацией WSDL необходимо назначить в виде URL адреса спецификации данного пакета, например
«company.com/1C/Nomenclature». В этом пакете необходимо создать тип объекта, например «Nomenclature», в котором есть реквизиты «Code» и «Name», с соответствующим типом «string (http://www.w3.org/2001/XMLSchema)».
Теперь надо создать второй XDTO пакет, который будет содержать информацию о заказах покупателей, его можно назвать «ClientOrderXDTO» в пространсте имен «company.com/1C/ClientOrder». В первую очередь необходимо подключить директиву импорта «company.com/1C/Nomenclature», для того, чтобы можно было использовать созданный нами пакет сериализации номенклатуры. Это необходимо для передачи номенклатуры, содержащейся в табличной части документа «Заказы покупателей».
Теперь надо создать тип объекта «ClientOrderRow», содержащий одну строку табличной части. Этот тип будет состоять из совокупности реквизитов «Nomenclature» и «Count», соответственно для номенклатуры необходимо указать тип объекта «Nomenclature (http://company.com/1C/Nomenclature)», а для количества, «double (http://www.w3.org/2001/XMLSchema)».
Тип объекта, содержащий сам заказ можно назвать «ClientOrder» должен содержать номер заказа, дату создания и массив элементов из табличной части заказа. «Number» типа строка, «Date» типа «dateTime (http://www.w3.org/2001/XMLSchema)» и «Products» типа «ClientOrderRow (http://company.com/1C/ClientOrder)», при этом необходимо указать, что минимальное количество «0», а максимальное количество «-1», это говорит о том, что этот объект будет массивом.
Но, поскольку необходимо возвращить список заказов, то необходимо создать тип объекта, содержащий этот массив, потому надо создать еще один элемент, называемый «ArrayOfClientOrders», у которого будет всего один реквизит, называемый «ClientOrder» типа «ClientOrder (http://company.com/1C/ClientOrder)».
Рис 4. Структуры XDTO пакетов в 1С
На этом создание описания передаваемых значений можно считать оконченным. Необходимо описать сам веб сервис и его методы.
В группировке «Общие» конфигурации надо создать объект, Web-Сервиса. Его можно назвать «Service». Во вкладке «Прочее» надо указать пространство имен, которому принадлежит веб-сервис, например «company.com/1C», а так же список XDTO пакетов, содержащий только что созданные пакеты «company.com/1C/Nomenclature, company.com/1C/ClientOrder». Во вкладке «Операции» создать метод «GetClientOrders», который будет возвращать значения «ArrayOfClientOrders (http://company.com/1C/ClientOrder )», при этом установить возможность возвращать пустые значения и нажать на поле с лупой, называемое «Имя метода», тем самым в модуле веб-сервиса будет создана функция, который будет вызвана при обращении к данному методу веб-сервиса.
Для того, чтобы корректно описать функцию, получающую из базы данных и возвращающую список заказов покупателей, необходимо знать внутренний язык 1С, потому код этой функции находится в приложении 1. В пояснении нуждается то, что «ФабрикаXDTO», это некоторый менеджер, который выполняет сериализацию объектов, и этот сериализованный объект необходимо возвратить. При этом происходит выборка всех заказов, содержащихся в базе данных, сериализация полей номера, даты, и строк табличной части, при этом номенклатура, нуждается в дополнительной сериализации, и уже упакованный объект вставляется в общую структуру. Собирается массив упакованных объектов, сериализуется в пакет массива. И отправляется клиенту, как результат вызванной функции.
Для публикации веб-сервиса в меню конфигуратора 1С выбрать «АдминистрированиеПубликация на веб-сервере…», после чего указать название публикации веб-сервиса, например «Company», имя сервиса, например «Service» и адрес «service.1cws», а так же указать путь для публикации, например «C:\inetpub\www\root\Company».
После этого WSDL структура Web-Сервиса будет доступна по адресу «localhost/Company/ws/service.1cws?wsdl»
Задание 4: Создание клиента на C# платформы .NET 4.0.
В Visual Studio создать новое консольное приложение C#.
Далее вызвать контекстное меню над элементом проекта «Reference», и выполнить действие «Add service reference…», в открывшемся меню нажать на кнопку «Advanced…», откроется окно, где необходимо нажать на кнопку «Add Web Reference…».
Откроется меню, в которое необходимо вставить ссылку на WSDL описание веб-сервиса.
Рис. 5. Подключение веб-сервиса к проекту на C#
Для созданного в 1С веб-сервиса эта ссылка будет иметь вид «localhost/Company/ws/service.1cws?wsdl», после корректного получения описания веб-сервиса надо указать название пространства имен .NET, из под которого будет доступно обращение к веб-сервису, например «CompanyService», затем нажать на кнопку «Add Reference…», Visual Studio автоматически сгенерирует классы по этому описанию. В проекте достаточно будет вызывать методы сгенерированного класса, при этом сериализация и вызов будут выполнять платформой .NET.
Далее необходимо написать программу, которая будет обращаться к веб сервису, и выводить пользователю полученные данные. Для этого необходимо знать язык C#, код программы представлен в приложении 2. Из этого кода надо пояснить, то, что создание объекта «Service», есть не что иное, как создание менеджера обращения к сервису. От этого имени будут вызывать методы веб-сервиса.
«_1CWebServiceClientConsole» — это общее пространство имени проекта, оно выбирается при создании. Пространство имени веб-сервиса, полученное из WSDL структуры полностью включено в пространство имени проекта, что позволяет вызывать удаленные методы «как свои».
Построение такой архитектуры является прозрачной для программистов, но при этом необходимо понимать в какие моменты и что проходит сериализацию для последующей передачи. Подобная архитектура клиент-серверных приложений на данный момент самая популярная.
Приложение 1: код функции GetClientOrders на языке 1С
Приложение 2: код программы на C# осуществляющий обращение к веб-сервису
Возникла необходимость отладить небольшую конфигурацию 1С:Предприятие 8.2 под веб-клиентом. Веб сервером был выбран IIS, являющийся самым родным для ОС Windows. Опыт использования этого сервера в Windows XP подсказывал, что с ним будет меньше проблем чем с Apache, но на недавно установленной Windows 7 x64 все оказалось не так просто. Мелкие проблемы начались с момента попытки публикации веб приложения, а после их устранения коснулись уже веб сервера, настройкой которого платформа 1С:Предприятие 8.2 не занимается.
Героически победив все свалившиеся напасти, решил скомпоновать и выложить на всеобщее обозрение свои шаги в достижении цели.
Шаг 1. Доустановка компонентов IIS.
Для работы веб-клиента 1С:Предприятия необходимы службы IIS, которые небыли установлены по умолчанию при установке Windows 7 x64.
Для их установки следует перейти "Пуск - Панель управления - Программы и компоненты - Включение или отключение компонентов Windows". В появившемся дереве, в ветке "Службы IIS – Компоненты разработки приложений" отметить все компоненты, как показано на рисунке. Затем нажать кнопку "Ок".
Шаг 2. Разрешение 32-разрядных приложений в пуле приложений.
Веб-клиент 1С:Предприятия 8.2 является 32-разрядным приложением. Поэтому для 64-разрядной ОС необходимо разрешить работу оных в пуле приложений сервера IIS. Для этого необходимо перейти "Пуск - Панель управления – Администрирование – Диспетчер служб IIS". В диспетчере служб выбрать "Пулы приложений – DefaultAppPool – Дополнительные параметры". В списке дополнительных параметров переменной "Разрешены 32-разрядные приложения" установить значение "True".
Шаг 3. Установка удостоверения пула приложений в качестве удостоверения анонимного пользователя.
По умолчанию в качестве анонимного пользователя установлен пользователь IUSR, которого нет в системе. Дабы не создавать оного можно просто включить удостоверение пула приложений в качестве удостоверения анонимного пользователя. Для этого необходимо перейти "Пуск - Панель управления – Администрирование – Диспетчер служб IIS". В диспетчере служб перейти в "Проверка подлинности – Анонимная проверка подлинности". В открывшемся диалоге отметить "Удостоверение пула приложений". Закрыть диалог, нажав кнопку "ОК".
Вроде бы ничего не забыл. Ну а дальше публикуем веб-клиента (в конфигураторе "Администрирование – Публикация на веб-сервере") и наслаждаемся результатом, запустив отладку (в конфигураторе "Отладка – Начало отладки – Веб клиент: начать отладку").
Оповещение пользователей в 1с в управляемом приложении могут быть вызваны как самой платформой, например, при записи документа, так и разработчиком, если он применит метод глобального контекста ПоказатьОповещениеПользователя().
Оповещения появляются в отдельном не модальном окне, по умолчанию привязанному к панели задач операционной системы, и затухают через несколько секунд после появления.
Если вывести несколько оповещений подряд, то пользователь сможет увидеть только последнее.
Последние несколько оповещений можно увидеть на панели истории.
При программном формировании оповещений важно помнить, что метод ПоказатьОповещениеПользователя()доступен только в контексте клиентской части, то есть при работе тонкого, толстого клиента или веб-клиента.
В качестве параметров метода ПоказатьОповещениеПользователя() передается строка с текстом оповещения, навигационная ссылка, текст с пояснением и картинка.
Навигационная ссылка будет представлена в области пояснения как гиперссылка, а в том случае если текст с пояснением не задан, то именно представление навигационной ссылки будет отображено в области пояснения. Получить навигационную ссылку можно для любого объекта базы с помощью глобального метода ПолучитьНавигационнуюСсылку().
Проиллюстрируем вывод оповещения при открытии документа, редактирование которого запрещено.
В приведенном примере производится проверка даты запрета редактирования, установленной в константе, и в том случае если открывается документ, попадающий в период запрета, пользователю выводится оповещение. В оповещении установлена навигационная ссылка на открываемый документ, однако в окне оповещения ссылка будет установлена к тексту «Разрешен только просмотр документа».
еще пример:
Для Толстого клиента kojinandrej предложил следующий механизм:
1. В модуле обычного приложения в процеду ПриНачалеРаботыСистемы добавляем текст
2. Создаем ОбщийМодуль под названием "опМодуль" в модуле вставляем текст
4. Добавляем в конфигурацию необходимые Обработки и формы - пользуемся.
Принцип Работы:
При запуске 1с справой стороны в трее открыто оповещение пользователей. Открываем обработку Оповестить, пишим текст сообщения и отметив получателей отправляем сообщение.
Когда сообщение приходит получателю, то форма оповещени появляется с правой стороны. Что бы сообщение считалось прочитаным, его необходимо открыть двойным щелчком правой клавиши мыши и оно откроется в новом окне как показао на третем изображении. В дальнейшем эти сообщения можно будет просматривать во вкладке "Просмотреные"
При обмене данными с веб-сайтами зачастую используется формат JSON. К сожалению, в 1С нет стандартных процедур для работы с данным форматом. В процессе реализации одного из проектов мной был разработан ряд процедур и функций облегчающих жизнь программисту 1С при работе с данными в формате JSON.
По сути, при работе с JSON требуется две операции: сформировать строку JSON (например, для передачи параметров на веб-сервер в формате JSON из 1С) и прочитать данные из строки JSON (например, когда мы получаем ответ от веб-сервера в формат JSON). Так как формат JSON в упрощенном виде представляет собой набор параметров в виде <ИмяПараметра>:<ЗначениеПараметра> то для работы с JSON в 1С мной был использован тип "Структура". Т.е. процедура чтения данных из формата JSON преобразует строку JSON в тип 1С "Структура". Так же и строка JSON в 1С формируется из структуры. Т.о. чтобы сформировать строку JSON сначала необходимо заполнить структуру необходимыми значениями, а потом вызвать функцию, преобразующую структуру в JSON. Позднее функционал функции формирования строки JSON был расширен - теперь в JSON может быть преобразован массив и таблица значений. При желании можно доработать функцию так, чтобы она "понимала" и другие типы. Такие как "Cоответствие", "ДеревоЗначений" и др. На практике это редко может пригодиться, поэтому сам я этого делать не стал.
А теперь подробней о том, как работать с функциями преобразования JSON.
Преобразование строки JSON в структуру 1С.
Для преобразования строки JSON в структуру 1С служит функция ЗаполнитьСтруктуруИзJSON().
<ТекстJSON> (обязательный) - строка в формате JSON,
которую необходимо преобразовать в структуру.
Возвращаемое значение.
Тип Структура.
Имя значения задается в структуре как Ключ, а само значение, соответственно, как значение. Поддерживаются также вложенные значение ("{}" в "{}") и массивы. В таких случаях тип значения будет Структура и Массив соответственно. Если у в JSON задан только массив, то сформируется структура с одним элементом с ключом "Значение" и типом "Массив". Ниже приведены поясняющие примеры:
Следует заметить, что все значения заполняются как строковые (тип "Строка"). Последующее преобразование (например, к числу) лежит на самом разработчике.
Формирование строки JSON в 1С.
Для формирования строки в формате JSON в 1С предназначена функция СформироватьСтрокуJSON().
<Объект> (обязательный) - объект, который необходимо
преобразовать в формат JSON. Может иметь тип "Структура",
"Массив" или "ТаблицаЗначений".
Если Объект имеет тип "ТаблицаЗначений", то она рассматривается как массив из структур, соответствующих колонкам ТЗ. Все значения приводятся к строковому типу, дата приводится в формат unixtime, значение типа булево "Истина" преобразуется в строку "true", а "Ложь" - в "false, прочие объекты просто преобразуются как "Строка(Объект)".
Форматированный документ предназначен для оформление текста. Его можно выделить жирным, подчеркнуть, увеличить/уменьшить шрифт, центрировать и т.д. Также можно добавить картинку. Т.е. в 1С теперь можно отформатировать текст, примерно, как в MS Word и др. подобным программам. Это может быть удобно при оформлении различных договоров или, например, при редактировании электронного письма. Таким образом, у нас есть возможность привести текстовый документ в тот вид, который мы пожелаем.
В синтакс-помощнике есть описание. Объект ФорматированныйДокумент (FormattedDocument) имеет одноименный тип данных, который поддерживает функционирование данного объекта и имеет следующие методы: Вставить (I_nsert)
Добавить (Add)
Записать (Write)
ПолучитьHTML (GetHTML)
ПолучитьЗакладкуКонца (GetEndBookmark)
ПолучитьЗакладкуНачала (GetBeginBookmark)
ПолучитьЗакладкуПоПозиции (GetPositionBookmark)
ПолучитьПозициюПоЗакладке (GetBookmarkPosition)
ПолучитьТекст (GetText)
Удалить (Delete)
УстановитьHTML (SetHTML)
Доступен во всех типах приложения: Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение. Нельзя указать новый тип данных в качестве типа реквизита.
Есть одна важная особенность этого типа. Нельзя задавать тип «Форматированный документ» для реквизита объекта (справочника, документа и др.). Но есть возможность указывать его для реквизитов формы.
Возникает вопрос, как же нам сохранить те изменения при форматировании текста, которые сделал пользователь? Для этого применяется специальный объект «ХранилищеЗначения», который может содержать в себе любой тип данных, в том числе и «форматированный документ». Таким образом, в базе данных сам объект будет храниться как «Хранилище значения», далее при открытии формы необходимо будет извлечь объект из хранилища, отобразить его на форме используя тип «ФорматированныйДокумент». Если пользователь решит сохранить изменения, то при записи объекта нужно снова взять объект «форматированный документ» и записать его в хранилище.
Пример работы
Возьмем за основу каркасную конфигурацию, создадим в ней справочники «Контрагенты» и «Договоры». Установим справочник «Договоры» подчиненным справочнику «Контрагенты» и создадим реквизит «Текст» с типом ХранилищеЗначения.
Создадим форму элемента справочника «Договоры» и добавим на нее новый реквизит, который назовем «ТекстДоговора», укажем тип данных «ФорматированныйДокумент». Обратите внимание, что реквизит «Текст» с типом «ХранилищеЗначения» на форму поместить нельзя.
Создадим также командную панель (меню) содержащую необходимые кнопки для управления форматированным документом. Для этого надо добавить в форму «Группа – Командная панель» и указать в свойстве «Источник команд» реквизит формы «ТекстДоговора» с типом ФорматированныйДокумент.
Запускаем отладчик, проверяем, что у нас получилось…
Все бы хорошо, но есть некоторые проблемы:
Во-первых, если ввести текст и отформатировать его должным образом, то признак модифицированности для формы не возникает. Таким образом, случайно нажав на кнопку закрытия формы, система не задавая вопросов закрывает ее без всякого сохранения.
Для того чтобы подобные неприятности не случались, необходимо установить флаг у свойства «Сохраняемые данные» реквизита формы «ТекстДоговора». В результате, при любом изменении данных в реквизите «ТекстДоговора», будет устанавливаться признак модифицированности формы, а при ее закрытии система спросит: «Сохранить изменения?».
Во-вторых. Попытаемся закрыть форму и сохранить введенные данные. Заново открыв сохраненный договор, видим что текст введенный в форму договора отсутствует. Почему так происходит?
Все дело в том, что мы делаем изменения в реквизите формы, который у нас никак не связан с реквизитом объекта. Давайте настроим связь между реквизитом формы «Текст договора» с типом данных «ФорматированныйДокумент» и реквизитом объекта «Текст» с типом «ХранилищеЗначения».
Пропишем эту связь программно в модуле формы. Опишем алгоритм.
1. При открытии формы, необходимо будет обратиться к реквизиту объекта «Текст», чтобы прочитать из него данные и записать их в форматированный документ «Текст договора».
2. При записи объекта, берем содержимое форматированного документа и помещаем его в реквизит объекта «Текст» с типом «ХранилищеЗначения».
Таким образом у нас будет возникать эффект, что все изменения производимые пользователем, будут сохраняться в базе данных.
Нам понадобятся следующие обработчики событий:
- событие ПриЧтенииНаСервере(ТекущийОбъект)
оно удобно тем, что при ошибочном внесении изменений в данные формы, можно нажать кнопку «Перечитать» и вернутся к исходным данным.
Т.к. реквизит Текст у нас имеет тип «ХранилищеЗначений», надо учесть нюансы работы с ним… В случае чтения объекта используем метод Получить(), а в случае записи используем конструктор объекта Новый ХранилищеЗначения(<Значение>, <АлгоритмСжатияДанных>).
На этом пока всё. В следующий раз попробую рассказать про использование шаблонов для вставки параметров в текст форматированного документа, например, вместо %Контрагент% вставлять наименование контрагента. Сергей (SirYozha)
В Конфигураторе, нажимаем правой кнопкой на конфигурацию:
Модуль управляемого приложения
Модуль управляемого приложения является аналогом модуля приложения, но используется для управляемого приложения. 1С:Предприятие 8 исполняется в режиме управляемого приложения, если запущен тонкий клиент, Веб-клиент или толстый клиент и при этом установлен режим управляемого приложения либо на всю конфигурацию, либо у конкретного пользователя. В модуле управляемого приложения могут располагаться объявления переменных, процедуры, функции и тело модуля.
Кроме того, в модуле управляемого приложения могут располагаться предопределенные процедуры ПередНачаломРаботыСистемы, ПриНачалеРаботыСистемы, ПередЗавершениемРаботыСистемы, ПриЗавершенииРаботыСистемы, ОбработкаВнешнегоСобытия. Все процедуры и функции отрабатывают на клиенте. В процедурах и функциях модуля управляемого приложения доступны экспортные процедуры и функции общих модулей управляемого клиента, а также общих неглобальных серверных модулей. Процедуры, функции и переменные модуля управляемого приложения доступны из клиентской части модулей форм и команд.
Столкнулся с задачей отправки sms из 1С. Спасибо Якову за напутствие в решении данной задачи и указание сервиса avisosms.ru.
На сайте сервиса предоставлена документация по работе с ним. В частности сервис предлагает следующие варианты работы:
* JSON протокол
* email2SMS протокол
* HTTP GET протокол
* Удаленный доступ к телефонной книге
* XML протокол
После проб и ошибок с протоколом email2sms (ну не любит мой провайдер через smtp слать письма на не очень красивые адреса относя их к спаму и блокируя) был выбран вариант решения с JSON протоколом. Для краткой демонстрации работы сервера приведена небольшая конфигурация. Конфигурация написана на 1С Предприятие 8.2 с поддержкой работы веб-клиента. Для работы конфигурации необходимо заполнить константы:
* ПользовательСМС – Ваш логин в систему;
* ПарольСМС – Ваш пароль в систему;
* ПодписьСМС – Ваш адрес отправителя, который был создан в личном кабинете.
Конфигурация позволяет:
* Отправлять смс контрагенту, номер которого записан в соответствующем реквизите (номер пишем в формате 380ХХХХХХХХХХ);
* Получать статусы отправленных смс.
Ниже приведу код формирования запроса на отправку смс
Microsoft Internet Explorer
Для работы с веб-клиентом в операционной системе Windows XP SP 2 требуется наличие системной библиотеки jscript.dll версии 5.6.0.8834 или выше. Библиотека находится в каталоге system32 операционной системы. Если на вашем компьютере установлена более раняя версия библиотки, то возможно значительное замедление работы веб-клиента. Для обновления версии необходимо скачать пакет обновлений. Находящийся по адресу http://support.Microsoft.com/kb/942840/en-us.
Для начала работы необходимо выполнить следующие настройки подключения:
· открыть браузер, в меню Сервис (Tools) выбрать пункт Свойства обозревателя (Internet Options).
· в открывшемся окне перейти на закладку Безопасность (Security).
· нажать кнопку Другой (Custom level…).
· в открывшемся окне в разделе Сценарии (Scripting) для параметра Активные сценарии (Active scripting) установить Разрешить или Включить (Enable) и нажать ОК.
· перейти на закладку Конфиденциальность (Privacy) и с помощью регулятора выбрать уровень использования cookies умеренный или Средний (Medium) (рекомендуется не выше Умеренно высокий (Medium High).
· на этой же закладке в разделе Блокирование всплывающих окон (Pop-up Bloker) снять флажок Блокировать всплывающие окна или Включить блокирование всплывающих окон (Blok Pop-ups или Turn on Pop-up Blocker).
Mozilla Firefox - Настройки подключения
Для начала работы необходимо выполнить следующие настройки:
· Открыть браузер. В меню Инструменты (Tools) выбрать пункт Настройки (Options).
· В открывшемся окне перейти в раздел Содержимое (Content).
· Снять флажок Блокировать всплывающие окна (Block pop-up Windows).
· Установить флажок Использовать JavaScript (Enable JavaScript).
· Перейти в раздел Приватность (Privacy) и установить флажок Принимать cookies с сайтов (Assept cookies from sites).
Автоматическая аутентификация
Для браузера Mozilla Firefox имеется возможность сконфигурировать веб-браузер для использования автоматической аутентификации ОС. Для этого необходимо выполнить следующие настройки:
· в адресной строке браузера набрать Aboutconfig
· затем на странице настроек в строке фильтра ввести название параметра.
Данная настройка осуществляется для трех параметров:
a) network.automatic-ntlm-auth.trusted-uris,
b) network.negotiate-auth.delegation-uris,
c) network.negotiate-auth.trusted-uris.
· Далее задать список веб-серверов, через которые будет осуществляться работа с базой «1С-Предприятия».
В современном мире люди используют Интернет не только для поиска информации, но и для приобретения каких либо товаров и услуг. Поэтому организации, например имеющие статус среднего бизнеса, стараются разместить свои прайс-листы в интернете или даже создать Интернет-магазин. Создать его не так-то просто. Если вы имеете «реальный» бизнес и используете определенную систему учета товаров (или услуг), нужно учитывать несколько немаловажных факторов:
* Каждый уважающий себя Интернет-магазин должен показывать остаток товара на складе, а также не показывать тот товар, которого уже нет в наличии. (а может быть что товар есть на разных региональных складах)
* Цены не должны расходиться с ценами в реальном магазине. Не учитывая доставку, хотя и это уже давно стало бесплатным практически везде.
Я привел только 2 факта, в действительности их может быть гораздо больше, всё зависит от того, какую цель вы ставите перед своим Интернет-проектом.
Многие организации для ведения учета товаров или оказанных услуг используют ПО «1С» и как показывает практика, большая часть организаций работает с версией 7.7, и не торопятся перейти на 8.х. так как это влечет за собой накладные расходы.
Для Реализации работы с WEB в 1С7.7 есть прекрасное решение - WEB-расширение, но оно работает только с Microsoft Internet Information Server (IIS). IIS используют не все хостинг – провайдеры, да и те кто использует вряд ли разрешат подключить свой сервер к чужой БД.
А держать «у себя» IIS сервер достаточно накладно для организаций среднего бизнеса (оборудование + интернет канал + лицензии ОС и ПО = увеличение стоимости товара).
Другое дело «свободное» ПО и ОС: Linux, Apache, PHP, MySQL. Эти четыре продукта использует большинство хостинг – провадеров, поэтому их использование как платформы для создания Интернет-проектов наиболее оптимально.
Как связать 1С 7.7 с MySQL? Можно использовать внешнюю компоненту MySQL,dll, но её использование не всегда возможно, особенно если ваш Веб-сервер находиться удаленно или вы покупаете хостинг у сторонней организации, так как не безопасно открывать доступ к БД из Интернета.
Для решения этой задачи я использовал технологию передачи данных через URL.
Возможно, звучит это немного дико, и многие подумают, что это неправильное решение. Однако эта система работает и работает достаточно хорошо и корректно.
И сейчас я бы хотел поделиться с коллегами приобретенным опытом реализации это технологии.
Кратко о принципе:
Выглядит это так: из 1С вызывается url и через него же передаются данные PHP-скрипу, который в свою очередь делает с ними все, что необходимо.
Например, нам нужно передать остаток товара на складе: из 1С должен будет сформироваться url: http://www.server.com/script.php?good=201&count=302&date=2009-06-09, где:
* http://www.server.com – адрес сервера
* script.php – исполняющий скрипт
* good=201 – переменная и код товара
* count=302 – переменная и количество остатка
* date=2009-06-09 – дата на которую передается остаток
причем для работы данной схемы достаточно лишь иметь доступ в Интернет с того компьютера на котором выполняется операция по передачи данных. (сервер БД нет необходимости подключать к Интернету)
Встреча с возможными ошибками:
Для начала хотелось бы рассказать о тех проблемах, с которыми я столкнулся и о том, как можно их наиболее эффективно решить:
1. Проблема передачи дробных чисел, а именно трудности, возникающие при использовании символа «точка» (.)
Если необходимо передать любое дробное число, то в 1С оно будет храниться виде 1.1. При передаче числа через url точка, отделяющая целую часть от дробной, вызывает ошибку, так как символ «точка» служит для разделения доменов. Следовательно, необходимо преобразовать эту самую «точку» в другой символ наиболее подходящий для этого. И этот символ - «запятая» (,). Для того чтобы осуществить это преобразование, я написал функцию, листинг которой приведен ниже:
Эта функция возвращает строку в которой все символы «.» заменены на «,» в строковой переменной Стр. Применимо это не только к числам, но и к текстовым данным.
Теперь при передаче число 1.1 будет иметь формат 1,1. Далее при получении мы должны привести это число обратно в «привычный» вид, это можно сделать на стороне PHP-скрипта функцией strtr() . краткое её описание я привел ниже:
Описание функции string strtr ( string $str , string $from , string $to ):
Эта функция возвращает строку str , в которой каждое вхождение любого символа из перечисленных в from заменено на соответствующий символ из строки to . (www.php.net)
Т.е. в нашем случае функция будет иметь вид strtr("1,1", ",", ".") и результатом её работы будет: 1.1
2. Проблема передачи даты. В 1С дата имеет вид «ДД.ММ.ГГГГ» например, 01.01.2009. При передаче такого вида данных будет вызвана такая же ошибка, как и при передаче числовых данных. Конечно, для решения и этой проблемы можно использовать указанную выше функцию ЧислоURL, но я решил пойти другим путём и конвертировал дату в формат MySQL, то есть «ГГГГ-ММ-ДД». Для этого я написал функцию МуДата, вот ее листинг:
Функция работает следующим образом – опять же выделяет из переменной Стр, Год, Месяц, Число и выстраивает их в формате ГГГГ-ММ-ДД, наиболее привычным при работе с MySQL. Об ошибках все.
Подготовка 1С:
Теперь расскажу о том, как заставить 1С работать с WEB.
Для того, чтобы иметь возможность работать с протоколом HTTP в 1С, я использовал библиотеку V7+, которая поставляется фирмой 1С и служит для расширения возможностей 1С 7.7.
Для начала необходимо подключить внешнюю компоненту (подробнее здесь), используя функцию «ЗагрузитьВнешнююКомпоненту("v7plus.dll")». Далее необходимо создать объект addin.v7httpreader, для этого я использовал переменную НТТР. А для передачи и получения данных используется метод ПолучитьКакСтроку(адрес, СтрокаДляПриёма); который получает данные в переменную СтрокаДляПриёма с адреса указанного в переменной адрес. В целом все это будет выглядеть примерно так:
Выше указанная процедура выведет в окно сообщений HTML-код заглавной страницы сайта http://www.google.ru
Таким образом, теперь мы знаем, как, из 1С, обратиться к нужному сайту, и получить его HTML-код.
Немного о PHP:
Теперь напишем PHP-скрипт, который просто будет выводить данные полученные методом GET. (ознакомиться с тем, как PHP получает данные можно здесь) Листинг такого скрипта:
Назовем его test.php и поместим в корневую папку web-сервера. Далее для проверки работы скрипта введем в адресную строку браузера http://localhost/test.php?text=hello%20wolrd В том случае, если все сделано верно, на экране появиться страница с текстом hello world.
«Соединяем» 1С и PHP:
Далее создаем в 1С внешнюю обработку и вставим в её модуль следующий код:
Отличается она от алгоритма, который мы создавали выше лишь значением в переменной адрес.
И так в случае успешной работы 1С и РНР-скпипта в окне сообщений 1С мы увидим надпись hello world.
Теперь очевидно, что с помощью 1C можно передать данные PHP-скриптам, а они в свою очередь делают с ними все что необходимо, например, записывают их в БД.
Пример записи данных в БД MySQL:
Запись в БД MYSQL будет производиться средствами PHP, об этом сказано уже не мало. Поэтому чтобы не повторяться, опишу пример из собственной практики.
Для начала создадим обработку в 1С:
На форму положим поле ввода и присвоим ему идентификатор текст, далее немного переделаем процедуру описанную в разделом выше:
Теперь необходимо создать БД в MySQL (как это сделать описано здесь). Создадим БД и присвоим ей имя TESTDB. Далее создадим таблицу с именем TEST:
Как видно из запроса, в таблице всего 2 поля:
* id – уникальный номер сроки;
* text – текстовое поле, куда будут помещаться данные из 1С.
Теперь необходимо написать PHP-скрипт, который и будет записывать данные из 1С в MySQL. Листинг данного скрипта приведен ниже:
Все готово! Теперь открываем Внешнюю обработку в 1С и пишем в поле ввода слово Hello! Нажимаем кнопку «Сформировать». Если все сделано правильно, то в созданной нами таблице появится запись со словом Hello! В противном случае, в окне сообщений 1С появится текст ошибки.
Заключение:
Весь тот опыт, которым я поделился в этой статье, можно использовать не только в Интернет-торговли, но и в корпоративных целях, например для того, чтобы:
* Консолидировать данные в единую БД MySQL;
* Предоставлять отчеты компетентным лицам, где бы они не находились.
И это еще далеко не весь перечень, ведь WEB-технологии - очень гибкий инструмент с неограниченным спектром возможностей, при условии умелого их использования.
В общем-то, мной был не только реализован механизм отправки данных, но и приема через HTTP, но вот это уже совсем другая история!
Как вызвать стандартную проверку заполнения реквизитов?
Возвращаемое значение:
Тип: Булево. Истина - ошибок не обнаружено, Ложь - в противном случае.
Описание:
Проверяет заполнение реквизитов. Для реквизитов, у которых свойство "Проверка заполнения" установлено в значение "Показывать ошибку" и реквизит не заполнен, будет сформировано сообщение об ошибке.
У прикладных объектов на платформе 1С Предприятие 8.2 появился новый обработчик события ОбработкаПроверкиЗаполнения, где теперь рекомендуется делать все проверки на заполненность реквизитов объекта. Рассмотрим работу с этим обработчиком. Обработчик должен быть расположен в модуле объекта (для констант в модуле менеджера значений) и имеет следующий синтаксис:
Здесь параметр Отказ (тип Булево) отвечает за возможность дальнейшей работы программы после проверки заполнения, а в параметре ПроверяемыеРеквизиты(тип Массив) содержатся реквизиты объекта, которые система будет проверять на заполненность. Напомним, что в версии 1С Предприятие 8.2 появилось возможность на уровне свойств реквизитов объекта устанавливать свойство Проверка заполнения. Так вот в массив ПроверяемыеРеквизиты по умолчанию система помещает реквизиты с установленным свойством «Выдавать ошибку». Однако разработчик может сам некоторые реквизиты добавить в массив или удалить из него в зависимости от каких-либо условий:
Как видно из примера в качестве элементов массива выступают строковые наименование реквизитов, как они заданы в конфигураторе. Для того чтобы полностью отказаться от системной проверки, необходимо очистить массив. При этом разработчик может проводить проверку реквизитов по произвольным алгоритмам, система же проверяет только на заполненность/незаполненность:
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
Далее рассмотрим, когда вызывается данный обработчик. Это зависит от типа объекта и его свойств. Так для, например, для справочника обработчик вызывается перед записью объекта; для документа: если разрешено проведение - при проведении, иначе при записи; для обработки : при вызове стандартных команд "OK", Да". Подробно это описано во встроенной справке. Но также есть возможность вызвать данный обработчик в произвольный момент, используя метод объекта ПроверитьЗаполнение(). Например, определить команду Проверить в форме документа: