Прокси-сервер для веб-клиента 1С: Предприятие 8.2

Публикация № 148307

Администрирование - Администрирование данных 1С

Прокси-сервер для веб-клиента 1С:Предприятие 8.2 демонстрирует возможности подключения, управления содержимым, мониторинга и отладки html- и javascript-кодов, возвращаемых сервером 1С. Работу прокси-сервера можно наглядно посмотреть в Интернете по адресу: http://proxy.1csoftware.com

Прокси-сервер для веб-клиента 1С: Предприятие 8.2 демонстрирует возможности подключения, управления содержимым, мониторинга и отладки html- и javascript-кодов, возвращаемых сервером 1С. Работу прокси-сервера можно наглядно посмотреть в Интернете по адресу: http://proxy.1csoftware.com

Введение


Одной из главных функциональных особенностей 1С: Предприятие 8.2 стала возможность получения доступа к данным 1С через Интернет. Но компания 1С делает это в своей традиционной манере, скрывая детали генерации веб-содержимого для браузеров и не обращая внимания на некоторые общепринятые стандарты. Программисту нужно относиться к процессу выдачи веб-содержимого, как к черному ящику, в котором по неизвестным законам происходит преобразование метаданных и данных в html-, json- и jscript-ответы от сервера. Прокси-сервер поможет вмешаться в процесс отображения данных и глубже разобраться с генерацией контента. Он будет находится между браузером и сервером 1С: Предприятие, перехватывать и перенаправлять запросы.


Структура и место прокси сервера между браузером и веб-сервером

Статья ссылается на технологии: Asp.Net MVC 3, .Net framework 4, IIS 7/7.5. Настоятельно рекомендуется запускать решение под IIS, а не в Visual Studio Development Server.
В качестве средства разработки была выбрана технология Asp.Net MVC 3 не случайно. Гибкость и наглядность предоставляемых средств позволяет быстро выполнить разработку и сэкономить на поддержке в будущем. Эту же задачу можно было бы решить на более низком уровне, например, через многопоточные HttpListener, но такое решение сопровождалось бы упомянутыми издержками. Правда, не исключено, что встретившись с нерешаемыми трудностями в будущем, придется переписать прокси-сервер на более низкоуровневых объектах. В случае с 1С: Предприятие такие трудности гарантированно есть всегда, и далеко не факт, что они были все выявлены и устранены. Речь о них пойдет ниже.

Пример опубликован в Интернете, и его можно посмотреть здесь: http://proxy.1csoftware.com

Проект Asp.Net MVC 3


Любой проект Asp.Net MVC начинается с проектирования структуры URL в методе RegisterRoutes, вызываемом в Application_Start из Gloval.asax. Для 1С: Предприятия URL строится так:

///?


Среди параметров одним из самых частых является sysver. Язык присутствует везде, кроме общего запроса к приложению. Соответственно этой структуре будет код, регистрирующий правила ProxyLanguage и Proxy:


        routes.MapRoute(
            "ProxyLanguage",                                              // Route name
            "{application}/{lang}/{*pathInfo}",                      // URL with parameters
            new { lang = System.Globalization.CultureInfo.CurrentUICulture.Name, controller = "Proxy", action = "Transfer", pathInfo = UrlParameter.Optional },
            new { lang = @"\w{2}_\w{2}|\w{2}" }
        );

        routes.MapRoute(
            "Proxy",                                              // Route name
            "{application}/{*pathInfo}",                      // URL with parameters
            new { controller = "Proxy", action = "Transfer", pathInfo = UrlParameter.Optional }
        );
        
        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );

Последняя команда была изначально в проекте и позволит открыть главную страницу с описанием примера, обратившись по адресу без пути. Для этого выделен отдельный контроллер Home, действие Index и вид Index с html-разметкой.
Исходя из кода, запросы для 1С будут перенаправлены на контроллер Proxy с действием Transfer. Контроллер лучше взять сразу асинхронный, наследовав от AsyncController, чтобы увеличить производительность. В этом случае действие Transfer будет состоять из двух методов:

public void TransferAsync(string pathInfo, string sysver)
public ActionResult TransferCompleted(HttpWebResponse response)


Так как приложение Application и язык Language предопределены, их целесообразно вынести в строковые свойства для доступа из любой части класса:       

public string Language { get; set; }
public string Application { get; set; }

И инициализировать в перегруженном методе Initialize так:       

protected override void Initialize(System.Web.Routing.RequestContext requestContext)
        {
            base.Initialize(requestContext);

            if (requestContext.RouteData.Values.ContainsKey("lang"))
                Language = requestContext.RouteData.Values["lang"].ToString();

            if (requestContext.RouteData.Values.ContainsKey("application"))
                Application = requestContext.RouteData.Values["application"].ToString();
            else
                RedirectToAction("Index", "Home");
        }

Метод TransferAsync принимает запрос от клиента, инициализирует объект HttpWebRequest, передавая в него информацию из свойства Request контроллера о методе (GET или POST), заголовках браузера, куки, содержимом POST-запроса. Метод приведен полностью:

        public void TransferAsync(string pathInfo, string sysver)
        {
            AsyncManager.OutstandingOperations.Increment();

            ViewBag.SysVer = sysver;
            ViewBag.PathInfo = pathInfo;

            HttpWebRequest remoteRequest = (HttpWebRequest)HttpWebRequest.Create(new Uri("http://demo-ma.1c.ru/" + Application + (string.IsNullOrEmpty(Language)? "" : "/" + Language) + "/" + pathInfo + Request.Url.Query));
            remoteRequest.Method = Request.HttpMethod;
            remoteRequest.CookieContainer = new CookieContainer();
            if (Request.UrlReferrer != null)
                remoteRequest.Referer = Request.UrlReferrer.ToString();
            remoteRequest.UserAgent = Request.UserAgent;

            for (int i = 0; i < Request.Cookies.Count; i++)
            {
                HttpCookie cookie = Request.Cookies.Get(i);

                Cookie newCookie = new Cookie();

                newCookie.Domain = remoteRequest.RequestUri.Host;

                newCookie.Expires  = cookie.Expires;
                newCookie.Name     = cookie.Name;
                newCookie.Path     = cookie.Path;
                newCookie.Secure   = cookie.Secure;
                newCookie.Value    = cookie.Value;

                remoteRequest.CookieContainer.Add(newCookie);
            }

            foreach(string key in Request.Headers)
            {
                if (key == "Connection")
                {
                    try
                    {
                        remoteRequest.Connection = Request.Headers.Get(key);
                    }
                    catch (Exception)
                    { }
                    continue;
                }
                if (key == "Accept")
                {
                    remoteRequest.Accept = Request.Headers.Get(key);
                    continue;
                }
                if (key == "Host")
                    continue;
                if (key == "User-Agent")
                    continue;
                if (key == "Referer")
                    continue;
                if (key == "Content-Length")
                    continue;
                if (key == "Content-Type")
                {
                    remoteRequest.ContentType = Request.Headers.Get(key);
                    continue;
                }
                remoteRequest.Headers.Add(key, Request.Headers.Get(key));
            }

            if (remoteRequest.Method == "POST")
            {
                using (var inputStream = remoteRequest.GetRequestStream())
                {
                    MemoryStream memoryStream = new MemoryStream();

                    byte[] buffer = new byte[255];
                    int bytesRead;
                    double totalBytesRead = 0;
                    Request.InputStream.Position = 0;
                    while ((bytesRead = Request.InputStream.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        totalBytesRead += bytesRead;
                        memoryStream.Write(buffer, 0, bytesRead);
                    }

                    inputStream.Write(memoryStream.ToArray(), 0, (int)memoryStream.Length);
                    memoryStream.Close();
                }
            }

            remoteRequest.BeginGetResponse(result =>
                {
                    try
                    {
                        WebResponse response = remoteRequest.EndGetResponse(result);
                        AsyncManager.Parameters["response"] = (HttpWebResponse)response;
                    }
                    catch (WebException e)
                    {
                        AsyncManager.Parameters["response"] = (HttpWebResponse)e.Response;
                    }
                    AsyncManager.OutstandingOperations.Decrement();
                },
                null
            );
        }


Код метода TransformCompleted небольшой по размерам и представлен далее. В этом методе целесообразно отдельно получить поток ответа GetResponseStream() и сохранить его содержимое в переменную ViewBag.ResponseContent для повторного использования, так как несколько раз к этому потоку обратиться не получится.
Ответ от сервера может быть любой, необходимо определить свой ActionResult-наследованный класс ContentActionResult, и возвратить его. Он может содержать рисунки, html, json, jscript, текст и другие форматы.       

public ActionResult TransferCompleted(HttpWebResponse response)
        {
            using (var responseStream = response.GetResponseStream())
            {
                MemoryStream memoryStream = new MemoryStream();

                byte[] buffer = new byte[255];
                int bytesRead;
                double totalBytesRead = 0;
                while ((bytesRead = responseStream.Read(buffer, 0, buffer.Length)) > 0)
                {
                    totalBytesRead += bytesRead;
                    memoryStream.Write(buffer, 0, bytesRead);
                }
                ViewBag.ResponseContent = memoryStream.ToArray();
            }

            return new ContentActionResult() { RemoteResponse = response, FilePath = filePath, ResponseContent = ViewBag.ResponseContent };
        }

Класс ContentActionResult преобразует ответ от оригинального сервера 1С и возвратит клиенту куки, заголовки и тело ответа, а также код статуса.

    public class ContentActionResult : ActionResult
    {
        public HttpWebResponse RemoteResponse { get; set; }
        public string FilePath { get; set; }
        public byte[] ResponseContent { get; set; }

        public override void ExecuteResult(ControllerContext context)
        {
            var response = context.HttpContext.Response;
            response.ContentType = RemoteResponse.ContentType;
            response.Charset = RemoteResponse.CharacterSet;
            response.StatusCode = (int)RemoteResponse.StatusCode;

            for (int i = 0; i < RemoteResponse.Cookies.Count; i++)
            {
                Cookie cookie = RemoteResponse.Cookies[i];

                HttpCookie newCookie = new HttpCookie(cookie.Name);

                newCookie.Domain = context.HttpContext.Request.Url.Host;

                if (string.IsNullOrEmpty(newCookie.Domain))
                    newCookie.Domain = context.HttpContext.Request.Url.Host;

                newCookie.Expires = cookie.Expires;
                newCookie.Name = cookie.Name;
                newCookie.Path = cookie.Path;
                newCookie.Secure = cookie.Secure;
                newCookie.Value = cookie.Value;

                response.SetCookie(newCookie);
            }

            
            foreach (string key in RemoteResponse.Headers.AllKeys)
            {
                response.AddHeader(key, RemoteResponse.Headers.Get(key));
            }
            response.BinaryWrite(ResponseContent);
        }
    }

Проблемы реализации



При разработке прокси-сервера было насколько проблем. Все они были связаны с невнимательностью компании 1С к стандартам веб-разработки. Если рассматривать пример статьи как unit-тест, то разработчикам компании 1С следует обратить внимание и зарегистрировать 2 проблемы:

Двоеточие в пути к ресурсу


Сервер от 1С допускает двоеточие в пути к ресурсу. Ответ от него может быть примерно следующим:
http://demo-ma.1c.ru/demoen/en_US/e1cib/pictureCollection/picture/0:dfa91944-c44c-403e-93b5-93d998359611?confver=01bdd81e-8d68-421d-a0e3-a381ab938613&t=false&w=48&h=48

Двоеточие является зарезервированным символом, и по стандарту rfc 3986 не допускается его использование в пути. Эта сложность приводит к невозможности принять запрос через Visual Studio Development Server и необходимости использовать IIS. Для IIS требуется дополнительная настройка в web.config:

<httpRuntime requestValidationMode="2.0" requestPathInvalidCharacters=",*,&,\,?" /> 


Настройка позволяет исключить двоеточие из недействительных символов пути.
Кто знает, может странное поведение тонкого клиента на IIS 7.x версии, отмеченное в сообществе 1С-разработчиков связано тоже с данной проблемой.

Неверный формат JSON



Некоторые ответы от 1С-сервера возвращают JSON-содержимое в виде:
{"root":{"cacheID":undefined, ...
Проблема возникает со значением undefined, которое по общепринятым стандартам должно быть заключено в кавычки. Значение может быть только строкой в двойных кавычках, числом, булевым значением: true или false, массивом в квадратных скобках или значением null.
Такое несоответствие приводит к ошибке: «Invalid JSON primitive: undefined», когда Asp.Net MVC пытается автоматически привести JSON к параметрам действия Transfer. Решается проблема исключением формата JSON из списка фабрик преобразований значений в Global.asax.   

void Application_Start(object sender, EventArgs e)
    {
        //Workaround error Invalid JSON primitive: undefined. when Post data contains {"root":{"cacheID":undefined, ...
        ValueProviderFactories.Factories.Remove(
                    ValueProviderFactories.Factories.OfType().First());

Это некрасивый шаг, лишающий решение некоторой гибкости и расширяемости, но более изящного подобрать не удалось.

Управление веб-страницами



Пример нового html-содержимого в окне инициализации

Прокси-сервер позволяет не только исследовать возвращаемые файлы сервером 1С, но и вмешаться в их генерацию. На рисунке видно простой пример, когда при инициализации показывается баннер в правом верхнем углу. Достигается это в методе TransferCompleted через отдельную сборку AgilityPack так:           

//Add new content
            if (ViewBag.PathInfo != null)
            {
                if (ViewBag.PathInfo == "mainform.html")
                {
                    HtmlDocument html = new HtmlDocument();
                    html.OptionFixNestedTags = true;
                    html.LoadHtml(Encoding.UTF8.GetString(ViewBag.ResponseContent, 0, ViewBag.ResponseContent.Length));

                    var res = html.DocumentNode.SelectSingleNode("//div[@id='preloader']");
                    HtmlNode node = html.CreateElement("img");
                    node.Attributes.Add("id", "1csoftware-powered");
                    node.Attributes.Add("style", "position:absolute;top:10px;right:10px;");
                    node.Attributes.Add("src", VirtualPathUtility.ToAbsolute("~/i/1csoftware.png"));
                    res.ChildNodes.Add(node);

                    ViewBag.ResponseContent = Encoding.UTF8.GetBytes(html.DocumentNode.OuterHtml);
                }
            }


 


За создание страницы загрузки отвечает файл mainform.html. Если в его div-раздел с именем preloader вставить какое-то содержимое, то содержимое появится в браузере при загрузке.
В более сложном варианте можно, например, исследовать работу форм и вмешаться в их логику, добавив свои элементы управления или обработчики, подключить jQuery. Можно поменять таблицу стилей и придать элементам свои цвета. Можно даже исправить самим ошибки Компании 1С, зная ее «оперативность» по борьбе с багами.

 

Заключение



Представленный в статье прокси-сервер находится между веб-браузером и сервером 1С: Предприятие 8.2. Перехватывает все запросы от браузера и передает их серверу. Таким образом, позволяет изучать передаваемые файлы и влиять на передаваемую информацию.
В качестве платформ разработки взяты .Net framework 4 и Asp.Net MVC 3. Решение построено через асинхронный контроллер для увеличения производительности. Кроме перенаправления запросов в прокси-сервер заложена логика обходных путей для 2х проблем: двоеточие в пути к ресурсу и некорректный формат JSON.
Решение обладает достаточной гибкостью и позволяет вмешаться в генерацию исходного кода html-, js- и других файлов.
В решении мало внимания уделялось логике работы 1С и взаимосвязи возвращаемых ответов от 1С-сервера. Это тема отдельной обширной статьи. Нереализованной и неисследованной осталась возможность работы по защищенному протоколу https. Работа тонкого клиента, соединенного через прокси-сервер также не исследовалась, хотя теоретически возможна.
Используя статью, можно написать прокси-сервер не только для узкой области 1С: Предприятие, но и для других своих решений. Случай с 1С: Предприятие более сложный, и кроме обычной трансформации запросов и откликов необходимо искать некоторые обходные пути, чтобы решение заработало.
Пример доступен в Интернете по адресу: http://proxy.1csoftware.com

Скачать файлы

Наименование Файл Версия Размер
Исходный код проекта Asp.Net MVC 3

.zip 506,92Kb
20.08.12
22
.zip 506,92Kb 22 Скачать

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
1. Dimasik2007 412 20.08.12 21:00 Сейчас в теме
На почту вам откатал, продублирую и тут (сначала на хабре статью увидел). Пример не работает под хромом:
Server Error in '/' Application.

Object reference not set to an instance of an object.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source Error:


Line 173: node.Attributes.Add("style", "position:absolute;top:10px;right:10px;");
Line 174: node.Attributes.Add("src", VirtualPathUtility.ToAbsolute("~/i/1csoftware.png"));
Line 175: res.ChildNodes.Add(node);
Line 176:
Line 177: ViewBag.ResponseContent = Encoding.UTF8.GetBytes(html.DocumentNode.OuterHtml);
3. Elisy 929 21.08.12 07:17 Сейчас в теме
(1) Dimasik2007,

Из сообщения не понятно, ошибка у вас возникает при запуске по ссылке http://proxy.1csoftware.com или через запуск исходных кодов?
2. Magister 133 21.08.12 00:11 Сейчас в теме
4. Dimasik2007 412 21.08.12 10:55 Сейчас в теме
Вылет на вашем сайте, по ссылке http://proxy.1csoftware.com/demo_ma/ru_RU/
причем демо от 1с открывается нормально.
6. Elisy 929 21.08.12 11:14 Сейчас в теме
(4) Dimasik2007,
На хабре тоже жалуются на ошибки при открытии. Не могу пока предположить, в чем проблема.
Вот скриншоты для ФФ и ИЕ нормального открытия с моего компьютера:
fotki.yandex.ru/users/ebishkek/album/185477/?p=0
5. Dimasik2007 412 21.08.12 10:56 Сейчас в теме
И кстати, с яндекса вам письмо на суппорт не оптравляется, пишет типа ошибка релея и т.п.
7. Elisy 929 21.08.12 11:22 Сейчас в теме
(5) Dimasik2007,
К сожалению E-mail опубликован был устаревший. Рабочий адрес:
support(а)1csoftware.com
8. Stamper 40 22.08.12 11:09 Сейчас в теме
9. 1977 2 22.08.12 12:09 Сейчас в теме
Принажатии сылки http://proxy.1csoftware.com/trade/ru_RU/
Выкидывает ошибки в хроме?
Server Error in '/' Application.
Object reference not set to an instance of an object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source Error:

Line 173: node.Attributes.Add("style", "position:absolute;top:10px;right:10px;");
Line 174: node.Attributes.Add("src", VirtualPathUtility.ToAbsolute("~/i/1csoftware.png"));
Line 175: res.ChildNodes.Add(node);
Line 176:
Line 177: ViewBag.ResponseContent = Encoding.UTF8.GetBytes(html.DocumentNode.OuterHtml);


Source File: c:\inetpub\vhosts\1csoftware.com\httpdocs\proxy\App_Code\ProxyController.cs Line: 175
10. Elisy 929 22.08.12 12:44 Сейчас в теме
(9) 1977,
к сожалению не могу воспроизвести проблему. Специально установил Хром, открывается страница без ошибок:
11. Dimasik2007 412 22.08.12 12:54 Сейчас в теме
(10 Если что - версия 22.0.1229.12 dev-m, на стабильных 22 тож не работает.
13. Elisy 929 22.08.12 13:04 Сейчас в теме
(11)(12)
На других браузерах ФФ или ИЕ такая же проблема?
12. 1977 2 22.08.12 12:55 Сейчас в теме
Мне не приснилось
Прикрепленные файлы:
14. 1977 2 22.08.12 13:17 Сейчас в теме
15. Elisy 929 22.08.12 13:31 Сейчас в теме
(14)
Получается дело не в конкретном браузере, а, может, в настройке сети.
Код, в котором происходит ошибка пытается в файле mainform.html найти div с id="preloaded".
Вы можете вручную загрузить файл http://proxy.1csoftware.com/trade/ru_RU/mainform.html
и в исходном коде посмотреть есть ли элемент <div id="preloader" ?
Может быть софт какой-нибудь Интернет-объявления обрезает и загрузочный рисунок 1С обрезал?

Вот исходный код:
//Add new content
            if (ViewBag.PathInfo != null)
            {
                if (ViewBag.PathInfo == "mainform.html")
                {
                    HtmlDocument html = new HtmlDocument();
                    html.OptionFixNestedTags = true;
                    html.LoadHtml(Encoding.UTF8.GetString(ViewBag.ResponseContent, 0, ViewBag.ResponseContent.Length));

                    var res = html.DocumentNode.SelectSingleNode("//div[@id='preloader']");
                    HtmlNode node = html.CreateElement("img");
                    node.Attributes.Add("id", "1csoftware-powered");
                    node.Attributes.Add("style", "position:absolute;top:10px;right:10px;");
                    node.Attributes.Add("src", VirtualPathUtility.ToAbsolute("~/i/1csoftware.png"));
                    res.ChildNodes.Add(node);

                    ViewBag.ResponseContent = Encoding.UTF8.GetBytes(html.DocumentNode.OuterHtml);
                }
            }
Показать
16. aprol 10.10.12 16:42 Сейчас в теме
добавил в вебКонфиг
<system.web>
<httpRuntime requestPathInvalidCharacters="<,>,*,&,\,?" />
</system.web>
Но ошибка осталась. Не подскажете с чем еще может быть связана ошибка:

ошибка при работе с ресурсом /e1cib/logForm?cmd=call

?
18. Elisy 929 11.10.12 11:30 Сейчас в теме
(16) aprol,
Добавлять нужно в раздел <system.web>
Привожу образец web.config для рабочего сайта
<?xml version="1.0"?>
<configuration>
  <configSections>
  </configSections>
  <appSettings>
    <add key="ClientValidationEnabled" value="true"/>
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
  </appSettings>
  <system.web>

    <globalization uiCulture="ru-RU" culture="ru-RU" />

    <!-- 
            Set compilation debug="true" to insert debugging 
            symbols into the compiled page. Because this 
            affects performance, set this value to true only 
            during development.
    -->
    <compilation debug="true">
      <assemblies>
        <add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
        <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
      </assemblies>
    </compilation>
    <!--
            The <authentication> section enables configuration 
            of the security authentication mode used by 
            ASP.NET to identify an incoming user. 
    -->
    <authentication mode="Forms">
      <forms loginUrl="~/account/logon" timeout="2880"/>
    </authentication>
    <!--<customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
      -->
    <!--<error statusCode="403" redirect="NoAccess.htm" />
      <error statusCode="404" redirect="FileNotFound.htm" />-->
    <!--
    </customErrors>-->
    <customErrors mode="Off"/>

    <!--Enable % character-->
    <!--<httpRuntime requestPathInvalidCharacters="<,>,*,:,&,\,?" />-->
    <httpRuntime requestValidationMode="2.0" requestPathInvalidCharacters="<,>,*,&,\,?" />

    <pages>
      <namespaces>
        <add namespace="System.Web.Helpers" />
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Web.WebPages"/>
      </namespaces>
    </pages>
  </system.web>
  <system.webServer>
    <defaultDocument />
    <httpErrors errorMode="Detailed"/>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules runAllManagedModulesForAllRequests="true">
    </modules>

  </system.webServer>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>
Показать
17. aprol 10.10.12 18:01 Сейчас в теме
хм, помог казалось бы самый бесполезный совет: "обновить публикацию под администратором"
19. blizz2783 08.04.18 12:40 Сейчас в теме
Оставьте свое сообщение

См. также

Загрузка табелей рабочего времени из файлов Excel Промо

Зарплата Обработка документов Учет рабочего времени Загрузка и выгрузка в Excel v8 v8::СПР ЗУП3.x Россия БУ Абонемент ($m)

Обработка по загрузке в типовой документ «Табель» конфигурации ЗУП 3.1 данных из файлов MS Excel, согласно шаблону.

18.10.2019    7513    5    HostHost    0    

Списание (корректировка) задолженности контрагентов УНФ 1.6

Закрытие периода Дебиторская и кредиторская задолженность Обработка документов Дебиторская и кредиторская задолженность v8 УНФ Украина БУ Абонемент ($m)

Обнуление задолженности контрагентов в конфигурации "Управление небольшой (нашей) фирмой" версии 1.6 с помощью документа "Корректировка регистров".

1 стартмани

24.07.2019    18784    12    DMon    1    

Регистрация документов с измененной суммой

Обработка документов v8 1cv8.cf Абонемент ($m)

Обработка берет информацию из истории изменения документов. Удобна для администраторов, когда документы с измененной суммой по какой-то причине не регистрируются в плане обменов. Можно регистрировать не все документы, а только те, которые были изменены.

1 стартмани

20.04.2019    16265    3    ryan    0    

Блин, мы забыли включить регламентные задания…

Сервисные утилиты v8 Абонемент ($m)

Привет, Инфостарт! Сегодня расскажу, как я решил проблему с выключенными регламентными заданиями в рабочих базах. Желая исключить человеческий фактор и минимизировать количество ошибок, я написал небольшую конфигурацию.  В конфигурации два регламентных задания. Первое периодически подключается к кластеру и сохраняет текущие параметры: имя, Сервер БД, базу СУДБ, блокировки входа и регламентных заданий и т.д. Второе задание периодически проверяет эти параметры на ошибки.

1 стартмани

08.04.2019    14826    14    slozhenikin_com    37    

StartManager 1.4 - Развитие альтернативного стартера Промо

Стартеры 1С v7.7 v8 Абонемент ($m)

Очередная редакция альтернативного стартера, являющегося продолжением StartManager 1.3. Спасибо всем, кто присылал свои замечания и пожелания, и тем, кто перечислял финансы на поддержку проекта. С учетом накопленного опыта, стартер был достаточно сильно переработан в плане архитектуры. В основном сделан упор на масштабируемость, для способности программы быстро адаптироваться к расширению предъявляемых требований (т.к. довольно часто просят добавить ту или иную хотелку). Было пересмотрено внешнее оформление, переработан существующий и добавлен новый функционал. В общем можно сказать, что стартер эволюционировал, по сравнению с предыдущей редакцией. Однако пока не всё реализовано, что планировалось, поэтому еще есть куда развиваться в плане функциональности.

1 стартмани

23.04.2014    116333    774    Alexoniq    1530    

Отчет производства за смену (ОПЗС) - из Комплектаций номенклатуры

Обработка документов Производство готовой продукции (работ, услуг) Производство готовой продукции (работ, услуг) v8 v8::БУ v8::УФ БП3.0 БУ Абонемент ($m)

Отчет производства за смену БП 3.0 - из Комплектаций номенклатуры УТ 10.3 - после обмена УТ-БП. Внешняя обработка.

2 стартмани

01.03.2019    10800    9    Rustig    0    

Валовая прибыль для УПП 1.3, КА 1.1 в режиме РАУЗ (работа типового отчета без доработок конфигурации)

Обработка документов v8 КА1 УПП1 УУ Абонемент ($m)

Простое и мгновенное решение для использования типового отчета "Валовая прибыль" в конфигурациях "Управление производственным предприятием 1.3", "Комплексная автоматизация 1.1" (а также отраслевых решений на их базе) при включенном режиме РАУЗ (расширенная аналитика учета затрат). Не требует настройки или изменения конфигурации, либо может быть, для дополнительного удобства, интегрировано в нее с минимальными доработками.

2 стартмани

21.01.2019    16644    17    stvorl    11    

Легкое и гибкое управление списком доступных баз 1С у пользователей

Стартеры 1С Сервисные утилиты Администрирование СУБД v8 1cv8.cf Россия Абонемент ($m)

Когда в локальной сети много пользователей, а еще большое количество различных баз и при этом каждому нужны свои, то администрирование этого зоопарка превращается в АД! Этот комплекс позволяет централизованно управлять списком доступных баз в разрезе пользователей. За пару кликов можно добавить или убрать базу у всех пользователей.

5 стартмани

05.12.2018    13739    13    RomikR    9    

Правильные аналоги номенклатуры (кроссы запчастей) для 1С / Управляемые формы Промо

Обработка справочников Оптовая торговля Учет ТМЦ Оптовая торговля Учет ТМЦ v8 v8::УФ 1cv8.cf УУ Абонемент ($m)

По опыту работы с запчастями много раз сталкивался с проблемой организации кроссов в разных 1С - от записи артикулов через запятую в текстовом поле до хранения кроссов в документах. Предлагаю одну из простейших и функциональных на мой взгляд схем "одноуровневого" хранения кроссов.

5 стартмани

29.07.2015    30850    7    taurus__    22    

Многопоточная обработка данных

Производительность и оптимизация (HighLoad) Администрирование данных 1С v8 v8::УФ 1cv8.cf Абонемент ($m)

Конфигурация "Универсальные механизмы: пакеты данных". Набор инструментов для быстрой организации отказоустойчивой многопоточной обработки данных.

1 стартмани

23.11.2018    18363    53    _ASZ_    15    

Обнуление остатков регистров бухгалтерии и накопления

Универсальные обработки Чистка базы v8 v8::БУ v8::ОУ v8::УФ КА1 БП2.0 ЗУП2.5 УТ10 УПП1 УНФ БГУ ERP2 БП3.0 УТ11 УХ КА2 ЗУП3.x Россия Абонемент ($m)

Обработка позволяет обнулить остатки по регистру накопления или бухгалтерии на определенную дату. Поддерживается большинство типовых конфигураций (БП 3, БП 2, УТ 11, УТ 10, ЗУП 3, ЗУП 2, БГУ 2, БГУ 1, ERP, УПП, КА 2, КА 1, УХ 3, УХ 1, УНФ). Гибкая настройка (отборы, заполнение реквизитов и любых полей корр. счета, возможность обнулять ресурсы выборочно). Несколько режимов работы. Два интерфейса: простой и с расширенным набором настроек.

2 стартмани

19.11.2018    19889    259    morozov.sv    34    

Очистка кэша 1С 8 (8.0, 8.1, 8.2, 8.3). Грамотная чистка кэша 1С с сохранением настроек.

Чистка базы Сервисные утилиты Администрирование данных 1С v8 1cv8.cf Россия Абонемент ($m)

Эффективное средство для устранения ошибок, возникающих в локальном кэше 1С на клиенте, которым легко сможет воспользоваться пользователь с любым уровнем знаний. Wsf-скрипт, созданный на стандартном языке автоматизации Windows - "WSH JScript", очищает кэш 1С просто, быстро и безопасно. Кроме варианта, очищающего кэш текущего пользователя, имеется также вариант для чистки кэша 1С всех пользователей терминального-сервера.

1 стартмани

04.11.2018    33866    358    Eugen-S    34    

Очистка регистрации обмена Промо

Чистка базы v8 v8::ОУ УТ10 Абонемент ($m)

Данная обработка предназначена для очистки узла. Для очистки необходимо указать период,организацию.

1 стартмани

19.09.2017    15707    5    serg-lom89    0    

Универсальный инструмент для переноса данных через табличный документ (УФ)

Обработка документов Универсальные обработки Обработка справочников v8 v8::УФ 1cv8.cf Абонемент ($m)

Для опытных пользователей, разработчиков, администраторов, консультантов

5 стартмани

15.10.2018    29883    114    json    36    

TextRadar - нечеткий поиск в тексте

Разработка внешних компонент Поиск данных v8 1cv8.cf Абонемент ($m)

В отличие от нечеткого сравнения строк, когда обе сравниваемых строки равнозначны, в задаче нечеткого поиска выделяются строка поиска и строка данных, а вычислить необходимо не степень похожести двух строк, а степень присутствия строки поиска в строке данных. Нормированный коэффициент, находящийся между 0 и 1 позволяет отсечь заведомо низкие результаты, организовать поиск по синонимам и т.д. Наглядное отображение результатов в кратком и детальном виде поможет быстро найти интересующий фрагмент.

1 стартмани

19.09.2018    15371    18    TSSV    18    

Помощник корректировки остатков ЕГАИС в небольшом магазине. Розница 2.2

Розничная торговля Обработка документов Розничная торговля v8 Розница Розничная и сетевая торговля (FMCG) Рестораны, кафе и фаст-фуд Россия УУ Абонемент ($m)

Данная обработка упрощает корректировку остатков алкогольной продукции небольшого магазина, где предполагается передача всей продукции в торговый зал сразу после приемки.

5 стартмани

08.09.2018    28813    82    asdfgcom    46    

Помощник по закрытию месяца для УТ 11.3 Промо

Закрытие периода Обработка документов Закрытие периода Закрытие периода v8 v8::ОУ УТ11 Россия УУ Абонемент ($m)

Помощник по закрытию месяца для УТ 11.3. Имеет две функции: обнуление товаров "К оформлению" в интеркампани и обнуление отрицательных остатков в регистре "Себестоимость товаров".

5 стартмани

10.11.2017    20749    26    Zalipaka    1    

Расширение резервов отпусков

Обработка документов Зарплата Зарплата v8 v8::СПР ERP2 ЗКГУ3.0 ЗУП3.x Россия БУ Абонемент ($m)

Произвольная настройка базы для расчета резервов отпусков.

2 стартмани

10.08.2018    23290    51    СергейКа    16    

Очистка периодических регистров посредством T-SQL (удаление записей, кроме среза последних)

Чистка базы v8 Абонемент ($m)

Обработка для ленивых. Составит вместо Вас запрос для SQL, который удалит все не актуальные записи (т.е все, кроме среза последних)

5 стартмани

22.06.2018    14578    19    Alexander.Shvets    9    

Автоматическое заполнение графиков в ЗУП 3.1

Зарплата Учет рабочего времени Обработка справочников Зарплата Учет рабочего времени v8 v8::СПР ЗУП3.x Россия БУ Абонемент ($m)

Данная разработка будет актуальна для организаций с большим количеством графиков (несколько десятков/сотен).

1 стартмани

05.05.2018    21035    18    notserioussam    2    

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

Чистка базы v8 1cv8.cf Абонемент ($m)

Обработка удаления помеченных объектов с расширенным функционалом. Работает в обычном и управляемом приложении. Монопольный и разделенный режим работы. Отображение и отбор по структуре метаданных. Отборы данных произвольными запросами. Копирование и сохранение отборов. Удаление циклических ссылок (рекурсия). Представление циклических в виде дерева с отображением ключевых ссылок, не позволяющих удалить текущий объект информационной базы. Удаление записей связанных независимых регистров сведений. Групповая замена ссылок. Индикатор прогресса при поиске и контроле ссылочности.

10 стартмани

31.10.2016    48145    566    m..adm    206    

Добавление возможности в конфигурации ЗУП 3.1 работать с фотографиями сотрудников (Зарплата и Управление Персоналом, редакция 3.1)

Обработка справочников Управление персоналом (HRM) Управление персоналом (HRM) v8 v8::СПР ЗУП3.x БУ Абонемент ($m)

Добавление возможности в ЗУП 3.1 работать с фотографиями сотрудников (физических лиц). Расширение тестировалось на релизе ЗУП 3.1.5.129.

1 стартмани

09.04.2018    27266    67    charivnick    3    

Повышение качества разработок и онлайн контроль ошибок

Журнал регистрации v8 Абонемент ($m)

Анализ ошибок и сбор ошибок журнала регистраций из десятков и сотен баз в одном месте.

09.03.2018    25870    8    DitriX    48    

Прыг-Скок...или из MS EXCEL в 1С (8.2) (открытый код) Промо

Обработка документов Обработка справочников Загрузка и выгрузка в Excel v8 1cv8.cf Абонемент ($m)

Универсальная загрузка данных из Microsoft Office Excel. Автоматическая загрузка из любых по форме документов с очень удобным редактором. Почти готовый шаблон для любой конфигурации. Не требует регистрации-бесплатно.

1 стартмани

16.09.2015    59973    351    Tatitutu    48    

Корректировка остатков ЕГАИС, возврат из регистра 2, загрузка ТТН из файлов, другое для УТ10.3

Розничная торговля Обработка документов Розничная торговля v8 v8::ОУ УТ10 Россия БУ Абонемент ($m)

Набор обработок для автоматизации работы с ЕГАИС: Обработка корректировки остатков ЕГАИС для УТ 10.3, аналогичная имеющимся в УТ 11, Рознице 2.2. Автоматически формирует документы "Передача в торговый зал", "Акт постановки на баланс в торговом зале", "Акт списания в торговом зале". Обработка возврата из регистра 2 с подбором справок Б. Обработка формирования ТТН из файлов xml.

1 стартмани

24.01.2018    32219    27    biz-intel    3    

Расчет начисления зарплаты со сложной формулой, по данным из внешнего источника. ЗУП 3.1

Обработка документов Загрузка и выгрузка в Excel Зарплата Зарплата v8 v8::СПР ЗКГУ3.0 ЗУП3.x БУ Абонемент ($m)

Расчет начисления зарплаты со сложной формулой, по данным из внешнего источника по данным экономического отдела. ЗУП 3.1.

3 стартмани

20.12.2017    44443    31    mvv1975    7    

Копирование меню в Трактир Management

Обработка документов Производство готовой продукции (работ, услуг) Производство готовой продукции (работ, услуг) v8 1cv8.cf Рестораны, кафе и фаст-фуд Россия УУ Абонемент ($m)

Механизм копирования меню в Трактир Management. Данная обработка расширяет функционал типового решения Трактир Management, позволяя быстро вводить в эксплуатацию новую точку путём создания нового меню на основании имеющегося.

1 стартмани

28.11.2017    25539    4    integrator1983    0    

Перемещение остатков по счету МЦ04 между материально ответственными лицами для конфигураций (8.2). Промо

Обработка документов Универсальные обработки Учет ТМЦ Учет ТМЦ v8 БП2.0 Россия БУ Абонемент ($m)

Небольшая обработка, которая позволяет перекидывать остатки по счету МЦ04 с одного материально ответственного лица на другое

1 стартмани

22.11.2012    12509    13    niksaf    4    

Быстрое удаление неиспользуемых версий 1С:Предприятие 8, кэша метаданных и информационных баз

Сервисные утилиты v8 Абонемент ($m)

При обновлении платформы 1С:Предприятие 8 предыдущие версии не удаляются. Со временем количество неиспользуемых версий платформы растет. Они занимают место на диске. Для решения этой проблемы предназначена программа OneCleaner. Она позволяет быстро удалить неиспользуемые версии платформы, а также почистить кэш метаданных и удалить ненужные информационные базы данных.

1 стартмани

14.11.2017    20165    87    bonv    15    

Загрузка дополнительных реквизитов и сведений справочника Номенклатура из Excel и таблиц УТ 11, ERP 2

Обработка справочников Загрузка и выгрузка в Excel Учет ТМЦ Учет ТМЦ v8 v8::ОУ ERP2 УТ11 Россия УУ Абонемент ($m)

Внешняя обработка "Загрузка дополнительных реквизитов и сведений справочника Номенклатура"

1 стартмани

07.08.2017    36929    236    Windyhead    32    

Упрощение работы с актами сверки в УТ/КА/УПП - вывод номеров счетов в документе и печатной форме

Обработка документов Печатные формы документов Дебиторская и кредиторская задолженность Дебиторская и кредиторская задолженность v8 КА1 УТ10 УПП1 БУ УУ Абонемент ($m)

Обычно акт сверки с клиентами содержат информацию о документах реализации товаров (накладных) и выполненных платежах. Но платежи делаются на основании счетов, номера которых отсутствуют в актах, что затрудняет собственно сверку. Данная обработка находит соответствующие расходным накладным счета/заказы, показывает их в форме документа и выводит в печатную форму акта.

2 стартмани

12.05.2017    26402    4    denmax    2    

Автокликер для 1С

Сервисные утилиты v8 1cv8.cf Абонемент ($m)

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

1 стартмани

03.04.2017    29043    70    slava_1c    49    

Загрузка номенклатуры по штрихкоду: Управление Торговлей 11.3; Розница 2.2; Розница для Казахстана 2.2

Обработка справочников Оптовая торговля Розничная торговля Ценообразование, анализ цен Ценообразование, прайсы Оптовая торговля Розничная торговля Ценообразование, анализ цен v8 v8::ОУ v8::УФ Розница УТ11 Розничная и сетевая торговля (FMCG) Рестораны, кафе и фаст-фуд Россия УУ Абонемент ($m)

Розница 2.2, Управление Торговлей 11.3. Создание номенклатуры из интернета с помощью сканера штрихкодов либо терминала сбора данных. Варианты создания, автовыбор наилучшей позиции, источники, цены, загрузка картинки - всё это очень гибко и просто настраивается. Текущие открытые источники: barcode-list.ru(на текущий момент не работает); goodsmatrix.ru; ean13.info(может не работать капча); barcodes.olegon.ru. Автор программы не несёт ответственность за информацию, предоставляемую перечисленными выше открытыми источниками, так же не отвечает за их работоспособность. Данные источники принадлежат не автору программы. Данная программа нужна лишь для автоматизированного поиска информации на них.

10 стартмани

30.03.2017    55466    121    myALKleon    40    

DroidRAC2 - консоль администрирования кластера серверов 1С:Предприятие 8.3 под Android

Администрирование данных 1С v8 1cv8.cf Абонемент ($m)

DroidRAC2 - клиент для RAS-сервиса кластера серверов платформы 1С:Предприятие 8.3 под Android.

1 стартмани

24.02.2017    20642    9    user700211_a.straltsou    12    

Статистика базы данных с отбором по подсистемам (кол-во и открытие списков: документов, справочников, регистров) и анализ наличия основных реквизитов: универсальная обработка (два файла - обычный и управляемый режим)

Статистика базы данных v8 v8::УФ 1cv8.cf Россия Абонемент ($m)

Универсальная обработка для статистики базы данных (документы, справочники, регистры, отчеты) с отбором по подсистемам и с анализом наличия основных реквизитов (организации, контрагенты, договора, номенклатура, сотрудники, физлица, валюта). Возможность просмотра списка документов или справочников или регистров при активизации в колонке "Документы, справочники, регистры, отчеты" в текущей строке. Полезная обработка для консультации пользователей, где искать метаданные в каком интерфейсе, т.к. подсистема указывает в каком интерфейсе находятся метаданные (документы, справочники, регистры, отчеты).

1 стартмани

20.02.2017    16553    47    strelec13    11    

Определение ИНН Сотрудника (service.nalog.ru). ЗУП, редакция 3.1 и 2.5 (Проф и Корп)

Обработка справочников Управление персоналом (HRM) Управление персоналом (HRM) v8 v8::СПР ЗУП2.5 Россия БУ Абонемент ($m)

Внешняя печатная форма для справочника "Сотрудники организаций". ЗУП, редакция 3.1 и 2.5 (Проф и Корп)

1 стартмани

03.02.2017    70139    49    Indgo    33    

Редактор движений документа. Сохранение в XML, обмен между базами, замена регистратора.

Обработка документов Универсальные обработки Обмен через XML v8 Абонемент ($m)

Редактор набора записей движений документа. Позволяет сохранить набор записей в XML, в настройки пользователя, прочитать сохраненный XML в другой идентичной базе, заменить регистратор. Можно изменять порядок записей, менять активность, как массово, так и по одной и др. Тонкий клиент, управляемые формы.

1 стартмани

07.09.2016    39049    153    Aphanas    4    

Универсальный поиск объектов по глобальному уникальному идентификатору (ГУИД, GUID)

Универсальные обработки Поиск данных v8 v8::УФ 1cv8.cf Абонемент ($m)

Универсальная обработка поиска объектов информационной базы по глобальному уникальному идентификатору (ГУИД, GUID) или по его части.

1 стартмани

06.09.2016    31162    101    Dzenn    9    

Лекарство на случай, если перестала работать форма списка для сделок. (ERP).

Тестирование и исправление v8 ERP2 Абонемент ($m)

Форма списка справочник сделки стала выпадать с ошибкой?  Или все еще в порядке, но хочется спокойно съездить в отпуск, без паники, что менеджеры устроят бунт.

1 стартмани

28.07.2016    20804    0    milkers    2    

Многопоточное удаление объектов

Чистка базы v8 1cv8.cf Абонемент ($m)

Обработка предназначена для ускорения процедуры удаления объектов

2 стартмани

02.06.2016    24017    53    zzz_natali    20    

Загрузка Счета покупателя из PDF

Обработка документов Файловые протоколы обмена, FTP Оптовая торговля Оптовая торговля v8 v8::БУ БП3.0 Абонемент ($m)

Обработка позволяет загрузить счет покупателя из pdf-файла в документ Счет на оплату покупателю (Бухгалтерия 3.0)

2 стартмани

23.05.2016    16157    19    John_d    0    

Инструкция по установке и настройке SQL Server и 1С

Администрирование данных 1С v8 Россия Абонемент ($m)

Данный мануал позволит практически каждому пользователю пошагово установить и произвести первоначальную настройку SQL Server и 1С (клиент-серверный вариант). Основой для данной инструкции послужил SQL Server 2014 и 1С Предприятие 8.3, также данная инструкция может работать и для других версий SQL Server и 1С Предприятия.

1 стартмани

06.04.2016    85332    1083    LastSoldier    48