Показаны сообщения с ярлыком . Показать все сообщения
Показаны сообщения с ярлыком . Показать все сообщения

воскресенье, 10 июня 2018 г.

Разбиение файла импорта 1С на сайт на части

Вводная: Есть хостинг, есть сайт у сайта есть импорт товаров из 1С. Из 1С УТ файлы выгружаются, через стандартный механизм обмена с web-сайтом.
Но скрипту импорта периодически не хватает памяти, чтобы загрузить всё. И падает с ошибкой. Было решено "разбивать" файлы на части по 1000 товаров. И загружать последовательно.

Решение:
            Directory.EnumerateFiles(Environment.CurrentDirectory)
                     .Where(file => Path.GetFileName(file).StartsWith("output")).ToList()
                     .ForEach(File.Delete);
            
            XDocument source = XDocument.Load("import.xml");

            int iteration = 0;

            while (iteration * 1000 < source.Descendants("Товар").Count())
            {
                XDocument xdoc = new XDocument(source);

                var allElements = xdoc.Descendants("Товар").OrderBy(a => a.Element("Ид")?.Value);

                var whatToLeave = xdoc
                                    .Descendants("Товар")
                                    .OrderBy(w => w.Element("Ид")?.Value)
                                    .Skip(1000 * iteration).Take(1000);

                allElements.Except(whatToLeave).ToList().ForEach(e => e.Remove());

                iteration++;
                xdoc.Save($"output{iteration}.xml");
            }

четверг, 11 июня 2015 г.

Несколько моментов по настройке сервера 1С

Небольшая памятка "для себя" и чтобы не забыть.


  1. Обязательно ставим ВСЕ обновления (и на систему, и на скуль-сервер). И не в коем случае их не отключаем. Единственное, что допустимо - это отключение автоматической перезагрузки, но и то под вопросом - к нормально настроенному серверу могут месяцами не подключаться и соответственно, он будет не защищён.
  2. Отключение кэширования записи Windows (через оснастку "Управление") - при использовании SQL сервера, у него будет своё кэширование и системное будет лишним.
  3. Firewall - не надо отключать полностью, пропишите нужные программы (если на одном компьютере, то будет достаточно одного сервера 1С, удалённого управления и пинга). Тоже самое относится к антивирусу - указывайте файлы и процессы исключения (у меня к примеру исключения на бэкапер, скульсервер, 1С сервер), отключать не стоит.
  4. Поставьте службы в зависимости от скуля (1С и бэкапа). Через оснастку "Службы". Чтобы порядок загрузки был корректным и в случае чего службы загружались корректно
  5. Настройка перезапуска служб через консоль управления (через оснастку "Службы")
  6. Настройка количества процессов в кластере и настройка их перезапуска (штатными средствами, через настройку кластера)
  7. Профиль электропитания - выставляем чтобы не отключалось ничего (сетевая карта настраивается отдельно). Если есть ИБП, то проверьте, что он подключен и настроен на автовыключение
  8. Если на одном сервере, то использовать протокол Shared Memory. 


вторник, 6 января 2015 г.

Использование телевизора как монитора, через wifi (gemoroi edition)

Вводная: Есть телевизор LG 47LB650V. На него нужно сделать вывод графиков из 1С. в идеале с возможностью управления. То есть использовать телевизор в качестве монитора. Но телевизор подключен к сети через WiFi. Возможности проложить дополнительно провода или установить рядом компьютер-неттоп нет. Из хорошего - частота обновления достаточная для нормальной работы - один раз в минуту, то есть видео не будет.

Поиск решения: Телевизор "умный" - SMART TV, есть магазин приложений и веб-браузер. Но чего-то для удалённого доступа к экрану монитора нет. (VNC, team viewer, RDP и прочее). Заявленный Screen Share также совершенно не работает. Miracast || Intel WiDi также не подошли по причине требования определённого сочетания железа и софта (ну и по невозможности поставить комп рядом). Думал над тем, чтобы выгружать графики в jpeg, а затем транслировать через DLNA - проблема в 1Ске (много графиков + могут меняться). Трансляцию рабочего стола в поток DLNA (к примеру через VLC) не завелась. 

Из за корявого встроенного браузера всевозможные logmein, teamviewer, rdp over web не заработали. Родное VNC over web также не заработало, так как сделано через java, а телек его не поддерживает. То есть не поддерживает вообще ничего - ни джаву, ни флэш, ни activex.

Продолжая гуглинг наткнулся на такой софт ка NoVNC, который работает через Web Sockets, по сути проксируя родной TCP-IP VNC в web-sockets. Далее инструкция по настройке. 

1. Заходим на http://www.tightvnc.com/download.php  и скачиваем TightVNC (в моём случае это был 32 битный инсталлер)

2. Устанавливаем. Я при установке выбрал устанавливать только сервер. Также при установке выбрал устанавливать, как службу и добавить исключение в  файрвол.

3. Затем идём в настройки сервера, вбиваем пароль. Можно отключить встроенный web-доступ (там через джаву). Главное на вкладке Access Control (на вкладе "Administration" в ветке 1.х), установить галочку - "Allow loopback connections"

4. Далее скачиваем websockify https://github.com/downloads/kanaka/websockify/websockify.zip . Данная программа используетя как прокси для доступа к vnc порту через web socket`ы. Распаковываем (в моём примере в папку C:\NoVNC\)

5. Далее скачиваем сервис Windows Websockify Service https://github.com/downloads/kanaka/websockify/Websockify%20Windows%20Service.zip
Распаковываем (в моём примере в папку C:\NoVNC\)

6. Создаём файл install.cmd который сделает установку службы -
sc create "noVNC Websocket Server" binPath= "C:\NoVNC\noVNC Websocket Service.exe" DisplayName= "noVNC Websocket Server"
Запускаем

7. В той же папке создаём файл noVNCConfig.ini и заполняем его примерно так -
:7000 localhost:5900
(7000 порт для вебсокета, localhost - текущий комп, можно сделать перенаправление на другой, но в рамках данной статьи это не рассматривается, 5900 - порт VNC по умолчанию, если вы его меняли установите другой)

8. Далее заходим в оснастку "Управление" запускаем службу  "noVNC Websocket Server" (можно сразу изменить тип запуска на "Авто")

9. Теперь можем заходить на http://novnc.com/ и тестируем соединение указав в качестве хоста наш внешний адрес (можно посмотреть на 2ip.ru, если есть роутер, то нужно настроить перенаправление на порты 5900-5901 и 7000)

10. Если всё работает, то можно копировать novnc на свой сервер - https://github.com/kanaka/noVNC/releases/latest

11. Далее можно настроить прямой доступ на рабочий стол по адресу и добавить в страницу по умолчанию на телевизоре - http://httpserver/noVNC-0.5/vnc_auto.html?autoconnect=true&host=HOSTNAME&port=7000&password=PASSWORD&encrypt=false

Mission complete! 



пятница, 25 января 2013 г.

Чтение списка БД 1С 7.7 на C#

Вводная: Необходимо было получить список БД 7.7 в программе на C#. В седьмой версии список БД и пути к ним хранятся в реестре.

Решение: cbChangeBD - это элемент ComboBox

using Microsoft.Win32;

        private void ListBD()
        {
            cbChangeBD.DisplayMember = "Text";
            cbChangeBD.ValueMember = "Value";

            RegistryKey reg = Registry.CurrentUser.OpenSubKey(@"Software\1C\1Cv7\7.7\Titles\", false);
            foreach (string valueName in reg.GetValueNames())
            {
                cbChangeBD.Items.Add(new { Text = reg.GetValue(valueName).ToString(), Value = valueName }); 
            }
        }

понедельник, 14 января 2013 г.

Неопознанная ошибка HRESULT=80004005

Вводная: При обновлении конфигурации, возникала ошибка "Неопознанная ошибка HRESULT=80004005".
Судя по статье Гилёва проблема связана с нехваткой оперативной памяти (хотя rphost.exe больше 200 метров не потреблял).

Ссылки обязательные к прочтению -
http://www.gilev.ru/1c/memleak/memorymore.htm
http://infostart.ru/public/18771/

1. Рестарт сервера 1С
2. ТиИ со всеми отмеченными галками
3. Рестарт сервера БД
4. Останавливаем сервер 1С и чистим папку "C:\Program Files\1cv82\srvinfo\reg_1541\" (число может отличаться - это порт на котором у вас кластер настроен) - это кэш сервера из-за него тоже могут быть проблемы (необходимо сохранить список БД и настройки 1С сервера, иначе надо будет их придётся забивать заново, так же рекомендую держать наготове дистрибутив - может потребоваться переустановка)
5. Также чистим "C:\temp\" , "C:\WINDOWS\Temp\" и темповую папку пользователя из-под которого запускается сервис 1С. К примеру если пользователь 1cUsr "C:\Documents and Settings\1cUsr\Local Settings\Temp\"

PS: Если проблема осталась то, как вариант
1. Переводим сервер 1С и БД на 64 бита 
2. Временно переносим на другой сервер, где БД будет ЕДИНСТВЕННОЙ (с обязательным отключением фоновых задач)
3. Выгружаем в dt, загружаем в файловую. Пробуем сделать то, что нам надо.
4. Если БД типовая и без правок, то можно попробовать "загрузить конфигурацию" (не объединение) из cf (то есть просто переписывание конфигурация, только надо брать точно такой-же релиз, как и был)
5. Удалением записи больше 120 метров из таблицы config
6. Есть БД на сервере несколько, то может помочь добавление рабочих процессов в консоли
7. Также данная ошибка может возникать, если на одном сервере запущены одновременно 1С и SQL. И при этом не настроено ограничение потребления памяти на скуль-сервере (выжирает всю память и не остаётся для 1С)

вторник, 11 декабря 2012 г.

Не удалялись элементы справочников в 1С

Вводная: Не удалялись элементы из 1С (конкретно обратили внимание при удалении элементов справочника). Удаляли с помощью встроенной, стандартной обработки "Операции - Удаление помеченных объектов". Причём ошибки никакой не было - помеченные на удаления элементы, просто на просто отсутствовали в подборе обработки.

ТиИ со всеми отмеченными галками (помимо тестирования, ещё и реорганизация и пересчёт итогов) - результатов не дало.

Решение:

Заходим в конфигуратор и проверяем, что у роли привязанной к данному пользователю на данном справочнике имеется "Интерактивное удаление помеченных"

PS: Вполне возможно, что галочка может не стоять и для роли "полные права"

понедельник, 12 ноября 2012 г.

Отключить узел от распределенной информационной базы

Вводная: При изменении конфигурации была допущена ошибка, которая не позволяла запускать 1С в режиме предприятия - причем не позволяла только подчинённым узлам, центральная БД запускалась. Но так как периферийная БД не запускалась в режиме предприятия, то и обмен с исправлением ошибки конфигурации не проходил. Проблема в том, что подчинённый узел не даёт изменять конфигурацию вручную - "Изменения конфигурации заблокированы средствами управления распределенной ИБ". Стандартный совет с выполнением "ПланыОбмена.УстановитьГлавныйУзел(Неопределено);" сделать нельзя, так как из-за ошибки не можем зайти в режим предприятия. Версия 1С - 8.1

Решение: Запустить 1С через командную строку в режиме конфигуратора с параметром /ResetMasterNode

Пример для серверной БД, с доменной авторизацией (запускать из под пользователя имеющего полные права в нужной нам БД):
C:\Program Files (x86)\1cv81\bin\1cv8.exe DESIGNER /S SRVname\BDname /ResetMasterNode

Если нужно указывать логин-пароль, то добавляются параметры /NAdmin /PPass

Также убедитесь, через консоль администрирования, что у целевой БД отсутствуют активные соединения.

Во время выполнения не выходит никаких окон или сообщений. Контролировать выполнение можно через диспетчер задач. Выполняется достаточно быстро, 20-30 секунд.

понедельник, 30 апреля 2012 г.

Лаунчер для терминала

Вводная: Есть несколько разных баз данных, запускаемых на терминальном сервере. Для каждого компьютера должна использоваться только одна база. Пользователи могут работать за разными компьютерами, от пользователя выбор базы не зависит. Запускать надо все по одному ярлыку. То есть на рабочем столе один ярлык "1С", который запускает пользователь и в зависимости от имени компьютера, с которого он зашел на терминал, запускается конкретная база.

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

Что должен делать лаунчер -
  1. Узнать имя компьютера
  2. Найти его в списке. 
  3. Выполнить команду прописанную для этого компьютера
  4. Если нет, то выполнить команду "по умолчанию
Немного про готовую программу -
Параметр "Имя компьютера" (ComputerName) - отвечает за полученное "Имя клиента". Работает только в терминале! Не допускается два одинаковых имени. Если ничего не найдено, выполняется команда, привязанная к компьютеру с именем "*" (без кавычек).
Параметр "Программа" (Command) отвечает за выполняему комманду. Рекомендуется указывать полный путь до программы или пользоваться кнопкой "Обзор".
Параметр "Аргумент" (Argument) используется для указания аргумента запуска программы.

Можно использовать 1C_Terminal_launch_Config.exe для создания конфигурационного файла (имя config.xml, должен лежать в одной папке с лаунчером) или сделать его вручную. Если делается руками, то файл должен быть следующего формата -

<?xml version="1.0" standalone="yes"?>
<DataSet1 xmlns="http://tempuri.org/DataSet1.xsd">
  <ConfigTable>
    <ComputerName>SYSADMIN</ComputerName>
    <Command>C:Program Files1cv81bin1cv8.exe</Command>
    <Argument>ENTERPRISE /S SRV-1CTestBD</Argument>
  </ConfigTable>
  <ConfigTable>
    <ComputerName>*</ComputerName>
    <Command>C:Program Files1cv81bin1cv8.exe</Command>
    <Argument />
  </ConfigTable>
</DataSet1>

Не забывайте про параметры для * - это компьютер "по умолчанию", то что будет запускаться, если не находит в списке.

Ссылка на скачивание файла (сам лаунчер, программа-конфигуратор, пример xml-файла и исходные коды) - http://dl.dropbox.com/u/10168286/Programmers/1C_Terminal_launch.rar

вторник, 17 апреля 2012 г.

Порядок действий при проблемах с базами 1С

0. Делаем КОПИЮ БД и копируем куда-нибудь подальше. Теперь делаем ещё одну копию и работаем уже с ней.

1. Если БД серверная, то начинаем с рестарта сервера 1С и SQL сервера

2. Если БД файловая то начинаем с chdbfl.exe, который лежит в папке bin (к примеру, c:\Program Files\1cv82\8.2.14.540\bin\) установленной 1С. Далее просто выбираем имя файла БД, отмечаем галочку "Исправлять обнаруженные ошибки" и ждём (причём периодически даже после сообщения "ошибок не обнаружено" база данных начинает работать если ранее не работала)
3. Заходим в конфигуратор. В меню выбираем "Администрирование"-"Тестирование и исправление". Если надо срочно запустить в работу, то отмечаем "Проверка логической целостности информационной базы" и "Проверка ссылочной целостности информационной базы". Не забываем выделить "Тестирование и исправление"
Но затем (даже если база заработала) нужно будет сделать ТиИ со всеми отмеченными галками.
4. Как последний вариант - через конфигуратор "Администрирование"-"Выгрузить информационную базу" и загрузить полученный файл в новую БД.

х. Если база хоть как-то работает, то можно попробовать использовать универсальную обработку ВыгрузкаЗагрузкаДанныхXML. Иногда помогает, если проблемы затронули не сами данные, а какие-либо служебные области БД.
x. Иногда есть возможность вручную восстановить файл БД (к примеру через  tool_1CD.exe), но нужно понимать, что это очень сложная задача, требующая ручного и профессионального труда. Дать тут какие-нибудь рекомендации невозможно так, как каждый случай индивидуален.
x. Желательно проверять на компьютере где нет посторонних программ (типа антивирусов, файрволов и тому подобных вещей) - в идеале на чистой заведомо рабочей машине.

PS: При данных операциях всегда есть риск часть данных потерять, так что не забывайте о резервных копиях!!!

понедельник, 12 сентября 2011 г.

Ошибка связывания с хранилищем конфигурации по адресу

Если такая ошибка не у всех, а только у некоторых пользователей хранилища 1С, то необходимо сделать следующее -
  1. Рестартим сервис хранилища
  2. Заходим под администратором. Удаляем пользователя и создаём с ТОЧНО ТАКИМ же именем. Он спросит восстановить или нет. Востанавливаем.
  3. Заходим в БД и ОТКЛЮЧАЕМСЯ от хранилища.
  4. Теперь заходим снова и подключаемся к хранилищу
  5. Нажимаем "синию кнопку" - обновления конфигурации
  6. Всё должно заработать