четверг, 22 декабря 2016 г.

Как узнать лицензионный ключ Windows

Задача: Узнать ключ установленной Windows
Решение: тут и тут


Частичный ключ продукта командой slmgr.vbs /dlv
Полный ключ продукта: утилита ProduKey от NirSoft
С помощью скрипта на VBS:

четверг, 24 ноября 2016 г.

Настройка Easy Print в Windows Server 2008 R2

Очередная напоминалка: http://blogmax.ru/blog/uroki/item/6-nastrojka-easy-print-windows-server-2008-r2.html

На операционной системе Windows server 2003 администраторы всегда сталкивались с проблемами печати на клиентских машинах, подключенных по протоколу RDP (Remote Desktop Protocol). В версии 2008 R2 microsoft позоботился об этом и внедрил систему печати Easy Print.

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

Печать через Easy Print (мой выбор)
Тут всё просто как ни когда. Технология Terminal Services Easy Print использует формат файла Microsoft XML Paper Specification (XPS), который передается на компьютер пользователя и отправляется на печать, используя локальный драйвера принтера.

вторник, 8 ноября 2016 г.

1С 7.7: удаление строк таблицы значений по условию

Требуется: Из таблицы значений удалить строки по определенному условию.
Решение: Добавляем дополнительную колонку "признак", тип "Число", Длина 1. Проходим по таблице, проверяем условия, и в строки, которые надо удалить, пишем 1, сортируем по-убыванию, выгружаем в временную таблицу только строки с 0 в служебной колонке.
        ...
        тз.Сортировать("-признак");
        НачальнаяСтрока = 0;
        тз.НайтиЗначение(0, НачальнаяСтрока, "признак");
        Если тз.КоличествоСтрок()=0 Тогда
            Сообщить("Пустая таблица!");
            Возврат;
        КонецЕсли;
        врем_тз = СоздатьОбъект("ТаблицаЗначений");
        тз.Выгрузить(врем_тз, НачальнаяСтрока);
        тз = врем_тз;
        ...

понедельник, 7 ноября 2016 г.

Мини-АТС Panasonic KX-TDA100: установка ограничения времени разговора

Для разных внутренних и для разных СО можно поставить свою продолжительность вызова.
п.4.1.1 - смотрим COS абонента
п.2.7.1 - у этого COS есть Ext.-CO Duration Limit. Включить.
п. 10.1 - смотрим транковую группу.
п.3.1.1 - для этой группы ставим Ext.-CO Duration Time, в минутах.

понедельник, 31 октября 2016 г.

Форматы географических координат и их преобразования

Задача: В ПО Мобильная торговля А+ координаты хранятся в виде ГГММ.ММММ, необходимо преобразовать к формату хранения Яндекс/Google, вида ГГ.ГГГГГГ

Решение:
Хорошее описание здесь, в wiki еще одного поставщика решений для мобильной торговли.

Общие понятия о форматах координат
Единого стандарта записи нет, но существует множество вариантов, которые используются на практике. Среди них: 

  • DMS (градусы, минуты, секунды) — наиболее понятная для восприятия запись, в которой раздельно указываются градусы, минуты и секунды (последние обычно указываются с точностью до определенного знака). В этой записи чаще всего полушарие обозначается латинской буквой (N/S и W/E).
  • DD (градусы в десятичном виде) — наиболее простая в числовом выражении запись, в которой целая часть представляет градусы, а дробная (обычно 6 знаков) — все остальное. Полушария обозначаются знаком плюса или минуса (реже буквами). Такая запись менее наглядна, но зато удобна для хранения в информационных системах. Большинство бытовых GPS-устройств и картографических сервисов использует именно это формат.
  • DM, UTM, Geo-Tags и другие менее распространенные и экзотические форматы — используются в различных специализированных системах.

Формат координат в продуктах ST и А+
Как и "А+ Мобильная Торговля 2.0", в программах «ST Чикаго» и «ST Мобильная Торговля» географические координаты в БД хранятся в редко используемом сейчас формате
ГГММ.ММММ.
Где: 
ГГ — градусы; 
ММ.ММММ — минуты и десятитысячные доли минут.
Это одна из GPS-нотаций, иногда обозначаемая как GPS (Dec Min).

ПО фактически получает и использует для своих нужд «нормальный» десятичный формат (DD), в котором снимают данные большинство современных GPS-приемников (в т.ч. в смартфонах и планшетах). Однако в БД координаты записываются уже в формате ГГММ.ММММ .
В интерфейсах, как правило, используется наиболее наглядный формат DMS.

Историческая справка
Формат ГГММ.ММММ был унаследован продуктами А+ и ST от навигатора Garmin в начале 2000-х, когда КПК не имели собственных GPS-приемников.
Этот формат есть упрощенная запись формата ГГ°ММ.СС, рекомендуемый для использования в морском радиообмене. В настоящее время используется реже, чем «нормальный» десятичный формат.

Перевод между форматами
ГГММ.ММММ → ГГ.ГГГГГГ
Для перевода необходимо использовать формулу ГГ + (ММ.ММММ ÷ 60):

ГГ.ГГГГГГ → ГГММ.ММММ
Для перевода необходимо использовать формулу (ГГ × 100) + (0.ГГГГГГ × 60):

Пример для Excel:
В Microsoft® Excel можно использовать формулу: = ЦЕЛОЕ(A1)*100 + ОКРУГЛ((A1-ЦЕЛОЕ(A1))*60;4), где в ячейке A1 находится значение в формате ГГ.ГГГГГГ

Пример для 1С:

// ================================================================================================
// из формата А+ в формат яндекса/гугла (ГГММ.ММММ в ГГ.ГГГГГ)
Функция КонвертироватьКординатуИзАгентПлюс( _коорд )
 
 Градусы = Цел(_коорд / 100);
 Минуты = _коорд - Градусы * 100;
 
 Возврат Окр((Градусы+Минуты/60), 5);
 
КонецФункции


// ================================================================================================
// из формата яндекса/гугла в формат А+ (ГГ.ГГГГГ в ГГММ.ММММ)
Функция КонвертироватьКординатуВАгентПлюс( _коорд )
 
 возврат Цел(_коорд)*100 + Окр((_коорд - Цел(_коорд))*60, 4)
 
КонецФункции


среда, 26 октября 2016 г.

Вывод из 1С 7.7 в Word (OLE, с разбиением страницы на колонки)


Задача: Снова встала задача вывести из 1С в Word немного текста. В этот раз отличительной особенностью стала необходимость вывода шапки на всю ширину страницы, а таблицу - разместить ниже в 2 колонки.

Для небольших таблиц в пару сотен строк кода работает прекрасно. Для больших - лучше формировать не через OLE, иначе можно смело оставлять на пару часов.

Решение: Задача старая, много полезных ссылок:
https://helpf.pro/faq8/view/635.html
http://superadm.net/index.php?name=pages&op=view&id=98
http://infostart.ru/public/67727/ - с готовым примером, много комментариев
http://www.delphimaster.ru/articles/dbtoword/index.html - отличные примеры на Дельфи
Самый лучший и полный  - http://scriptcoding.ru !


Под катом моя версия и копия с инфостарта.


1С 7.7: ошибка "Переменная ... не определена" в запросе

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

Текст ошибки:
Если Запрос.Выполнить(ТекстЗапроса)=0 тогда
{Отчет.Продажи.Форма.Модуль(784)}: Функция РасхСтоимость=Расход( <> Стоимость);
Запрос[35] : Переменная 'Стоимость' не определена

Решение: В Windows Server 2008 R2 с установленной украинской кодировкой 1С работать не будет. Необходимо поменять в региональных настройках системы стандарты на русские, а в 1С установить "Кодовая страница ИБ": "Использовать текущие настройки системы".

понедельник, 17 октября 2016 г.

Общие сведения о спецификации интерфейса IPMI

Цитата отсюда: http://white55.ru/ipmi.html, по ссылке больше и с картинками :)


IPMI (от англ. Intelligent Platform Management Interface) — интеллектуальный интерфейс управления платформой, предназначенный для автономного мониторинга и управления функциями, встроенными непосредственно в аппаратное и микропрограммное обеспечения серверных платформ. Другими словами IPMI – это средство управления, которое реализовано независимо от основного оборудования сервера и обеспечивает его включение, выключение, сброс, удаленное подключение виртуальных мониторов, клавиатур и мышей, наблюдение за работой оборудования и оповещение о важных событиях, связанных с работоспособностью сервера. Спецификация IPMI версии 1.0 была опубликована еще в 1998г. и базировалась на подключении к модулю IPMI через последовательный интерфейс RS-232. Текущая спецификация IPMI опубликована в 2004 г. и базируется на использовании стандартного сетевого интерфейса.

Ядром системы управления серверной платформой является специализированное устройство - Baseboard Management Controller (BMC), который практически является специализированным компьютером, встроенным в серверную платформу, имеющим свои собственные процессор, память, периферийное оборудование и операционную систему. Спецификация IPMI не задает жестких стандартов по реализации IPMI-устройств. Они могут быть выполнены в виде отдельного адаптера, могут быть распаяны непосредственно на материнской плате или выполнены в виде отдельного микроконтроллера. В настоящее время, наиболее распространены интегрированные в серверные материнские платы контроллеры BMC на базе технологии “система на одном кристалле” (System-on-Chip, SoC), позволяющие реализовать как эффективное взаимодействие с управляемой платформой, так и огромное количество функций по удаленному мониторингу, оповещению о важных событиях по e-mail или SNMP, ведению журналов и т.п.

Контроллеры BMC для серверных материнских плат подключаются к ним через системный интерфейс, названный IPMB (Intelligent Platform Management Bus/Bridge) или к другим контроллерам BMC через интерфейс IPMC (Intelligent Platform Management Chassis). Для удаленного управления оборудованием через контроллер BMC может быть использован специальный протокол прикладного уровня Remote Management Control Protocol (RMCP), обеспечивающий работу через обычную локальную сеть. Как правило, современные контроллеры BMC обеспечивают управление серверными платформами через веб-интерфейс, а также обеспечивают удаленное подключение устройств CD/DVD и работу клавиатуры-видео-мыши по сети ( IP KVM ), что позволяет легко выполнять, например изменять настройки BIOS или выполнять установку операционной системы, не имея физического доступа к оборудованию сервера.

Еще немного по теме:
ссылка 1: Пример конфигурирования IPMI на сервере 
ссылка 2: Настраиваем IPMI на Dell PowerEdgeстатья на wiki: Intelligent Platform Management Interface

пятница, 7 октября 2016 г.

Ошибка «Saving changes is not permitted…» в Microsoft SQL Server 2008 Management Studio при изменении структуры таблицы.

Проблема: В таблице есть колонка nvarchar(60), возникла необходимость увеличить до количество знаков до 75.
При попытке сохранения изменений в дизайнере, SQL Server Management Studio выдает следующее сообщение: "Saving changes is not permitted. The change you have made requires the following table to be dropped and re-created. You have either made changes to a table that can't be recreated or enabled the option prevent saving changes that require the table to be re-created."

Решение:

Вариант 1) Снять чекбокс «Prevent saving changes that require table re-creation» (Tools->Options):

Вариант 2) Выполнить на таблице следующий скрипт:
alter table ИмяНашейТаблицы 
alter column ИмяКолонкиКоторуюНадоУвеличить nvarchar(75)

P.S. Перед выполнением скрипта необходимо удалить индекс по этой колонке - пока этого не сделали, получали сообщение об ошибке.

среда, 5 октября 2016 г.

1С 7.7 + OLE часть 3/3

Копия статьи с http://www.softpoint.ru/article_id90.htm под катом

1С 7.7 + OLE часть 1/3


Подробно описано:

Простой пример:
БазаОле = СоздатьОбъект("V77.Application");
КаталогБазыОЛе  = "D:\base";
ПользовательОле = "";
ПарольОле       = "";
МонопольныйРежимOLE = " /m"; // для немонопольного запуска указать пустую строку!
ЗапускБезЗаставки = 0;    // без заставки 1, с заставкой 0
РезультатПодключения = БазаОле.Initialize(БазаОле.RMTrade , "/d" + СокрЛП(КаталогБазыОле) + " /n" + СокрЛП(ПользовательОле) +
 " /p" + СокрЛП(ПарольОле) + МонопольныйРежимOLE,
 ?(ЗапускБезЗаставки = 1, "NO_SPLASH_SHOW", ""));
Если РезультатПодключения = 0 Тогда
    Предупреждение("Не удалось подключится к указанной базе - проверьте вводные!");
КонецЕсли;
 
//
КонтрагентыOLE = БазаОле.CreateObject("Справочник.Контрагенты");
КонтрагентыOLE.ВыбратьЭлементы();
Пока КонтрагентыOLE.ПолучитьЭлемент()=1 Цикл
   Сообщить(КонтрагентыOLE.Наименование);
КонецЦикла;



Возможные проблемы:
http://www.forum.mista.ru/topic.php?id=395287
При использовании работы ИБ через OLE выдается сообщение: "Действие не может быть завершено, так как другая программа занята. (сервер занят)
Для перехода к этой программе воспользуйтесь кнопкой "Переключиться"."

Время до появления диалога "зашито" в 1С:Предприятие и не может быть изменено из встроенного языка или внешними средствами. Однако согласно документации Микрософт данное сообщение появляется только в случае, если пользователь использовал кливиатуру или мышь во время работы OLE-сервера - поэтому можно посоветовать после запуска обработки дождаться ее завершения, и лишь затем продолжить работу.

Вариант решения: Программа для автоматического закрытия окна "Server busy"
Данная утилита выполняет одну единственную функцию - каждые 5 секунд проверяет наличие окна с заголовком "Server busy" и жмет на кнопку "Retry" до тех пор, пока оно не закроется.
При запуске программы необходимо нажать кнопку "Старт" и свернуть в трей. При наведении курсора мыши на значок в трее программа показывает количество "кликов", если они были, т.е. сколько раз программа "нажимала" на "Retry".

понедельник, 3 октября 2016 г.

Использование службы геокодирования Google в 1С 7.7 + чтение динамических страниц

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

Решение: Для получения координат ТТ по адресу используется Google Maps Geocoding API, описание и документация здесь: https://developers.google.com/maps/documentation/geocoding/intro?hl=ru


"Быстрое" решение - использование функций v7plus.dll:

Функция ПолучитьОтветСлужбыГеокодирования(_Адрес)
 
    Попытка
        Соединение = СоздатьОбъект("Addin.V7HttpReader");
        Соединение.КоличествоПопытокАвторизации = 10;
    Исключение
        Сообщить("Не удалось создать объект Addin.V7HttpReader!");
        Возврат 0;
    КонецПопытки;
   
    //
можем указать json или xml
    Адрес = "http://maps.googleapis.com/maps/api/geocode/xml?address=";
    Адрес = Адрес + "ukraine" + "," + СокрЛП(_Адрес);
    Адрес = Адрес + "&components=country:UA";
 
    Стр = ""; // сюда вернется xml или json ответ сервера, который 
    Попытка
        Соединение.Получить(Адрес, Стр, 2); //строка
    Исключение
        Сообщить("Неудачная попытка соединения.");
    КонецПопытки;
   
    Возврат стр;

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

"Быстрое" решение было рабочим, однако, периодически ответ сервера усекался до 1-2 килобайт. При этом если строку запроса вставить в браузер - всегда возвращается нормальный ответ.

Оказалось, проблема известная, рассматривалась неоднократно:

1. V7Plus не полностью выкачивает страничку
"AddIn.V7HttpReader прекрасно работает с любыми страницами и качает всю как надо. Проблема в самих страницах, которые не отдают заголовок "Content-length". Поэтому по-умолчанию используется 1Кб."


2.V7HttpReader метод получить файл
"С помощью метода ПолучитьКакФайл пытаюсь с сайта выгрузить файл xml нужного формата. Проблема - файл не загружается полностью. ... Пробовал по всякому и через ПолучитьКакСтроку и с циклом после получения (типа для докачивания, если оно в фоне).
Все-равно файл загружается не полностью. Если через браузер все скачивается без проблем."

"Это не работает, когда динамически генерируется страница через пост-запрос. ПолучитьКакФайл работает для скачивания ТОЛЬКО статического содержимого."

И приводится код решения:
    Скрипт = СоздатьОбъект("MSScriptControl.ScriptControl");
    Скрипт.language = "vbscript";
          
    x = CreateObject("Microsoft.XMLHTTP");
    x.Open("GET", АдресСтраницы, 0,"","");
    x.Send();
          
    s = CreateObject("ADODB.Stream");
    s.Mode = 3;
    s.Type = 1;
    s.Open();
          
    Скрипт.AddObject("s",s);
    Скрипт.AddObject("x",x);
    Скрипт.Eval("s.Write(x.responseBody)");
          
    s.SaveToFile(ИмяФайлаЗагрузки, 2);
3. Наиболее подробно и полно вопрос рассматривается здесь: Мои опыты чтения динамических WEB-страниц
  • Вариант 1-5 - различные модификации использования V7HttpReader, и делается вывод, что внешняя компонента v7plus.dll и ее объект AddIn.V7HttpReader не годятся для чтения  динамических WEB-страниц.
  • Вариант 6:  ФС.КопироватьФайл(Адрес,Результат) - нерабочий
  • Вариант 7: WinHttp.WinHttpRequest.5.1
  • Вариант 8: InternetExplorer.Application
  • Вариант 9. MSXML2.XMLHTTP
  • Вариант 10. WinHttp.WinHttpRequest.5.1 + MSScriptControl
  • Вариант 11.MSXML2.XMLHTTP +  MSScriptControl  + VBScript
  • Вариант 12. MSXML2.XMLHTTP (http-test.vbs + WScript.Shell)
  • Вариант 13. Microsoft.XMLHTTP+ MSScriptControl+ADODB.Stream

В итоге, пришлось переписать процедуру на вариант с использованием Microsoft.XMLHTTP +
ADODB.Stream + MSScriptControl.ScriptControl.

Код функции под катом:

пятница, 30 сентября 2016 г.

CAD-системы

Бесплатные CAD-системы
 
2D: https://ru.wikipedia.org/wiki/LibreCAD


3D:

http://www.collabcad.com/featuresCollabCAD.html

https://sourceforge.net/projects/brlcad/

http://solvespace.com/index.pl

http://www.salome-platform.org/downloads/current-version

+
https://www.rs-online.com/designspark/home

https://www.onshape.com/cad-features

вторник, 20 сентября 2016 г.

1С 8.х: Ошибка при записи конфигурационного файла

Проблема: В 1С 8.х после установки - пустой список шаблонов баз. Прописываем каталоги шаблонов конфигураций и обновлений, жмём "ОК", получаем сообщение : "Ошибка при записи конфигурационного файла".

Решение: Здесь и здесь.
"В папке C:\Users\Имя пользователя\AppData\Roaming\1C\1CEStart вместо файла 1CEStart.cfg находилась папка с таким же именем."
Удаляем эту папку и платформа сможет создать файл конфигурации без проблем.

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

Мультизагрузочная USB-флэшка

Потребовалось сделать для себя.

Решений множество, большинство на Grub.
Например: GRUB всемогущий, или Делаем загрузочную флешку и Делаем загрузочную флэшку с помощью grub4dos

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

В итоге воспользовался вот этим: YUMI – Multiboot USB Creator
Быстро, просто, удобно, проблем не было.

Под катом копия по Grub4Dos на память:

понедельник, 27 июня 2016 г.

Компьютер не может быть присоединён к домену. На этом домене превышено максимальное допустимое число учётных записей. Обратитесь к системному администратору с просьбой отменить это ограничение или увеличить значение

При присоединении рабочей станции к домену Windows возникает следующая ошибка:
"Компьютер не может быть присоединён к домену. На этом домене превышено максимальное допустимое число учётных записей. Обратитесь к системному администратору с просьбой отменить это ограничение или увеличить значение."

Основная проблема состоит в том, что пользователь домена может подключить ограниченное число компьютеров к домену. Поэтому есть два пути решения:

  1. Использовать запись с правами администратора домена. Он не имеет таких ограничений.
  2. Изменить предел подключаемых машин.
Эти и другие пути решения описаны в базе знаний Microsoft:

четверг, 2 июня 2016 г.

1С 8.х: Использование стандартных периодов в СКД

Отсюда: http://1cskd.ru/2010/07/ispolzovanie-standartnyx-periodov/

Для удобства работы с параметрами типа дата, в системе компоновки данных существует возможность использовать Стандартные периоды.
Как же их использовать?
Мы имеем отчет, в котором 2 параметра: Начало периода и Конец периода. Добавим в параметры третий параметр, назовем его Стандартный период и установим ему тип СтандартныйПериод.
Для параметров Начало периода и Конец периода в Выражение запишем следующее:
&СтандартныйПериод.ДатаНачала
&СтандартныйПериод.ДатаОкончания
Также у этих параметров установим галку Ограничение доступности.

Все. Теперь можно пользоваться возможностями стандартного периода:

Кроме того, стандартная дата окончания содержит время 23:59:59 что избавляет от проблемы, описанной здесь.

понедельник, 18 апреля 2016 г.

Знаки вопросов вместо русского языка (1С 7.7, AIDA64 и т.п.) при запуске под Windows 2008 и выше

Проблема:
Знаки вопроса вместо русских букв

Решение:
1. Через реестр: В разделе HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage\ заменить 1250 -1254 на 1251
2. Через панель управления поправить локализацию: “Панель управления” -> “Язык и региональные стандарты” -> “Дополнительно” -> “Изменить язык системы…” + "Язык для программ не поддерживающих UNICODE.

Источники:
http://www.maxblogs.ru/articles/znaki-voprosov-vmesto-russkogo-yazyka и, конечно, Google.

среда, 24 февраля 2016 г.

Windows Server 2008 R2 x64 + 1С 7.7: проблема с "Разобрать по копиям"

Проблема: После миграции с 2003 R2 на 2008 x64 R2 не работает опция "Разобрать по копиям" при печати из 1С 7.7. Независимо от установки флага, листы идут 1-1, 2-2, 3-3, а не 1-2-3, 1-2-3. 
Из других программ (Word-Excel) - все работает прекрасно!
Проблема проявилась на разных подразделениях, на разных физических принтерах,с разными версиями драйверов.

Источники:
Наиболее обсуждаемые темы тут:
http://forum.ru-board.com/topic.cgi?forum=5&topic=28783
http://citrix.pp.ru/forum/viewtopic.php?p=33552
http://www.forum.mista.ru/topic.php?id=530462
https://bugs.etersoft.ru/show_bug.cgi?id=2843

Цитата с баг-трекера etersoft:
Есть 2 способа печати: напрямую и через спуллер. И зависит это от приложения 1С использует печать напрямую. С помощью функций StartDoc, EndDoc
http://msdn.microsoft.com/en-us/library/dd162865(VS.85).aspx
Чтобы раскладка по копиям начала работать необходимо УДАЛИТЬ СТАРЫЕ НАСТРОЙКИ из реестра: ключ (HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Print\Printers\{Имя принтера}) , нужно удалить DefaultDevMode

Решение: Чтобы не устраивать танцы с бубнами, реализовали со стороны 1С, через собственный диалог печати, посылая задания на принтер в цикле.

четверг, 18 февраля 2016 г.

Использование XML в 1С 7.7

Памятка отсюда, хороший был сайт:
http://web.archive.org/web/20041102064633/http://chin.dataltd.ru/index2.php?id=1c_xml1
http://web.archive.org/web/20041102065411/http://chin.dataltd.ru/index2.php?id=1c_xml2

Создание XML-файла с помощью компоненты v7plus.dll.

XML, как известно, один из языков разметки. Подробно о нем можно прочитать в книге и в Инете. С его помощью легко реализовать древовидную структуру хранения данных , а также задать жесткие правила построения дерева, что уменьшит ошибки, связанные с доступом к данным.


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

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

//Сначала проинициализируем компоненту v7plus, предоставляющую объекты для работы с XML:
Если ЗагрузитьВнешнююКомпоненту(КаталогИБ() + "v7plus.dll") <> 1 Тогда
     Если ЗагрузитьВнешнююКомпоненту(КаталогПрограммы() +
"v7plus.dll") <> 1 Тогда
          Предупреждение(
"Компонента v7plus.dll не найдена!");
     КонецЕсли;
КонецЕсли;
Анализатор = СоздатьОбъект("AddIn.XMLParser");


//Теперь начнем строить дерево документа. Заодно занесем служебную информацию о файле выгрузки в атрибуты корневого элемента
Корень=Анализатор.СоздатьДокумент();
Данные =Корень.СоздатьПодчиненныйЭлемент("Данные");Данные.УстановитьАтрибут("ИБ",КаталогИБ());
Данные
.УстановитьАтрибут("Дата",Строка(РабочаяДата()));
Данные
.УстановитьАтрибут("Оператор",ИмяПользователя());


//И создади две основные ветви Справочники и Документы
Справочники=Данные.СоздатьПодчиненныйЭлемент("Справочники");
Документы=Данные.СоздатьПодчиненныйЭлемент("Документы");
 

// в общей ветке Справочники создадим ветку для справочника Контрагентов
Клиенты=Справочники.СоздатьПодчиненныйЭлемент("Клиенты");


//А вот так заполняются элементы для справочников. Каждый реквизит справочника выносится в отдельный элемент дерева. Т.к. в данном задании выбрана схема синхронизации справочника Контрагентов по ИНН, то в значение элемента записываем ИНН, а для наглядности в атрибут элемента заносим наименование клиента
К=СписокКлиентов.ПолучитьЗначение(х);
Состояние(
"Выгружаются сведения по: " +К.Наименование);
Клиент=Клиенты.СоздатьПодчиненныйЭлемент("Клиент");
Клиент.УстановитьАтрибут("Наименование",К.Наименование);
Клиент.Значение=К.ИНН;

 

// выгружаем все нужные реквизиты контрагента
ПН=Клиент.СоздатьПодчиненныйЭлемент("ПолнНаименование");
ПН.Значение=К.ПолнНаименование;
ВК=Клиент.СоздатьПодчиненныйЭлемент("ВидКонтрагента");
ВК.Значение=К.ВидКонтрагента.Идентификатор();

 

// и так далее по всем необходимым реквизитам, аналогично заполняется информация о документах в соответствии с разработанной схемой обмена с бухгалтерией.

// Завершающие шаги и сохранение файла
ИмяФайла= СтрЗаменить(Строка(ДатаВыгрузки)+Строка(ДатаВыгрузки1),".","") + ".xml";
ПапкаФайла= "C:\1C\Change\Sweet\";
Корень.Записать(ПапкаФайла+ИмяФайла);



Чтение данных. 


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

Инициализацию компоненты опустим. Для чтения она ничем не отличается.
//создадим объект для доступа к xml-файлу, загрузим в него файл и получим ссылку на корневой элемент xml-документа. Напомню, что у нас он назван "Данные"
ФайлДанных=Анализатор.СоздатьДокумент();
ФайлДанных.Загрузить(ФайлЭксп);
ВсеУзлы=ФайлДанных.ВыбратьУзлы("Данные");


// получаем доступ к корневому узлу/элементу и читаем его атрибутыДанные=ВсеУзлы.ПолучитьУзел(0);
Сообщить(
"Идет загрузка данных из базы: " +Данные.ПолучитьАтрибут("ИБ"));
Сообщить(
"Выгрузка производилась: " +Данные.ПолучитьАтрибут("Дата"));
Сообщить(
"Выгрузку произвел/произвела: " +Данные.ПолучитьАтрибут("Оператор"));


// следующими операторами мы получаем доступ к двум основным ветвям: ветки Справочники и ветке Клиенты
Справочники=Данные.ВыбратьУзел("Справочники");
Документы=Данные.ВыбратьУзел("Документы");


// "спускаемся" по иерархии глубже и получаем доступ к элементу Клиенты, Выписки и Приходники
Клиенты=Справочники.ВыбратьУзел("Клиенты");
Выписки=Документы.ВыбратьУзел("Выписки");
Приходники=Документы.ВыбратьУзел("Приходники");


//если очень интересно сколько прийдется загружать Контрагентов, то можно воспользоваться следующей конструкцией 

Сообщить("Количество клиентов: " + Строка(Клиенты.КоличествоПодчиненных()));

// организация перебора всех элементов узла Клиенты
Для х= 1 ПоКлиенты.КоличествоПодчиненных() Цикл
     Клиент=Клиенты.ПолучитьПодчиненныйПоНомеру(х);
     ИНН=Клиент.Значение;
     Если ПустоеЗначение(ИНН) = 1 Тогда
          Сообщить(
"Ошибка. В файле выгрузки не задан ИНН клиента " +Клиент.ПолучитьАтрибут("Наименование"),"!!");
     Продолжить; 

     КонецЕсли;
КонецЦикла;



среда, 17 февраля 2016 г.

1C 7.7 SQL: Доступ к базе данных на сервере возможен только из одного каталога информационной базы


Проблема: При обновлении 1С получаем сообщение "Доступ к базе данных на сервере возможен только из одного каталога информационной базы".
 
Решение: http://www.pokatashkin.com/it/1c/1108

Обычно это происходит из-за некорректного завершения подключения пользователя к базе. В результате остается зависший SQL-процесс и/или открытые по сети файлы *.LCK в каталоге информационной базы и каталогах пользователей.

Если завис SQL-процесс, то можно либо просто перезагрузить SQL сервер, либо убрать зависший SQL-процесс с помощью SQL Enterprise Manager. Для этого в Management\Current Activity\Process Info перейдите к зависшему процессу и в меню «Action» выберите пункт «Kill Process».

Если проблема в открытых по сети файлах *.LCK, то как и в первом случае можно просто перезагрузить файл-сервер с информационной базой, либо зайти на этом сервере в Управление компьютеров (Computer Management) в Общие папки\Открытые файлы и закрыть все файлы с расширением *.LCK в каталоге информационной базы и каталогах пользователей.

P.S. Виновник в блокировке *.LCK в моем случае, как и здесь Зависание сессий в терминальном режиме  - файл hpmup081.bin. Блокировка вылечилась удалением его из процессов.

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

Wake-on-LAN

Материал из Wiki:

Wake-on-LAN (WOL; в переводе с англ.  — «пробуждение по [сигналу из] локальной сети») — технология, позволяющая удалённо включить компьютер посредством отправки через локальную сеть специальной последовательности байтов — пакета данных (так называемого 'magic packet' — «волшебного пакета», см. ниже). Этот пакет может быть вставлен в пакеты любых стандартных протоколов более высоких уровней, например, UDP или IPX.
  
Требования к компьютеру для работы с Wake-on-LAN
  • Компьютер с источником питания, соответствующим стандарту ATX 2.01, и материнской платой, поддерживающей Wake-on-LAN;
  • Сетевая плата (в виде платы расширения либо встроенная в материнскую плату) с поддержкой Wake-on-LAN;
  • Если используется внешняя (не встроенная в материнскую плату) сетевая плата, и хотя бы одна из этих плат не соответствуют стандарту PCI 2.2 или более позднему, то необходим также специальный трёхпроводной кабель для соединения разъёмов Wake-on-LAN на материнской и сетевой платах.
Кроме того, необходима возможность послать magic packet управляемому компьютеру. Это можно сделать, например, с помощью другого компьютера с соответствующей программой (см. примеры ниже). 

Принцип работы 
Управляемый компьютер находится в дежурном режиме (англ. stand-by) и выдаёт питание на сетевой адаптер[1]. Сетевой адаптер находится в режиме пониженного энергопотребления, просматривая все пакеты, приходящие на его MAC-адрес, и ничего не отвечая на них. Если одним из пакетов окажется magic packet, сетевой адаптер выдаст сигнал на включение питания компьютера. 

Magic packet
англ. Magic packet — это специальная последовательность байтов, которую для нормального прохождения по локальным сетям можно вставить в пакеты UDP или IPX. Обычно для Wake-on-LAN пакеты протоколов верхнего уровня рассылают широковещательно, так как в случае динамического присвоения адресов неизвестно, какой IP-адрес соответствует какому MAC-адресу. Однако, для корректного прохождения через маршрутизатор, запрещающий широковещательные пакеты, можно послать пакет по какому-то определённому адресу.
В начале пакета идет так называемая цепочка синхронизации: 6 байт, равных 0xFF. Затем — MAC-адрес сетевой платы, повторённый 16 раз. То есть, если бы адрес платы выглядел как 01:02:03:04:05:06, то магический пакет оказался бы таким:
FFFFFFFFFFFF010203040506
010203040506010203040506
010203040506010203040506
010203040506010203040506
010203040506010203040506
010203040506010203040506
010203040506010203040506
010203040506010203040506
010203040506
 
Программы

Наш выбор - WakeMeOnLan! :)

среда, 6 января 2016 г.

Аудит входа в систему

Источникhttps://technet.microsoft.com/ru-ru/library/cc787567%28v=ws.10%29.aspx

Применяется к:
Windows Server 2003, Windows Server 2003 R2, Windows Server 2003 with SP1, Windows Server 2003 with SP2, Windows Vista

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