понедельник, 12 января 2009 г.
Маленькие хитрости в 1С 7.7
Объект.УстановитьАтрибут("ИмяАтрибута",ЗначениеАтрибута)
Например:
Док = СоздатьОбъект("Документ.РасходнаяНакладная");
Док.УстановитьАтрибут("Контрагент",Константа.ОсновнойПоставщик);
четверг, 30 октября 2008 г.
WMI,1C,Синхронизация часть вторая
В дереве AD подразделения были сделаны как элементы OU. И немного поштудировав MSDN я нашел, что AD для любой записи представляет интересный реквизит objectGuid. Значение которого для каждого обьекта в дереве уникально.
Из этих двух положений и станцевался кусочек кода.
P.S. Надо учитывать, что objectGuid на выходе предоставляет собой массив байт.
- Домен=ПолучитьCOMОбъект("LDAP://OU=YYYY,DC=ХХХ,DC=loc")
- // Проверка по подразделениям
- Для каждого объекта из Домен Цикл
- Для каждого класса из объекта.ObjectClass Цикл
- Если НРег(класса)<>"organizationalunit" Тогда
- Продолжить;
- КонецЕсли;
- НаименованиеДепартамента = СтрЗаменить(объекта.Name,"OU=","");
- // Получим ГУИД
- _ГуидДепартамента = объекта.objectGuid;
- // Теперь переведем массив байт в более понятный текстовый вид
- _Гуид = "";
- _Длина = _ГуидДепартамента.GetLength(0);
- Для Счетчик = 1 по _Длина-1 Цикл
- _Гуид = _Гуид + "_"+Строка(_ГуидДепартамента.GetValue(Счетчик-1)));
- КонецЦикла;
- // Ну а дальше уже имея на руках название подразделения и его уникальный
- // текстовый код, проблем быть не должно.
- КонецЦикла;
- КонецЦикла;Syhi-подсветка кода
Примерчик работы с WMI через ADO
Ниже кратенький и вполне достойный пример, опроса WMI на предмет активных аккаунтов (сиречь пользователей).
P.S. А после дело синхронизации становиться легким и простым как два байта переслать. :)
- objConnection = ПолучитьCOMОбъект("","ADODB.Connection");
- objConnection.Open("Provider=ADsDSOObject");
- objCommand = ПолучитьCOMОбъект("","ADODB.Command");
- objCommand.ActiveConnection = objConnection;
- objCommand.CommandText =
- "<GC://OU=XXX,dc=YYY,dc=loc>;objectCategory=User);displayName,sAMAccountName,
- telephoneNumber,userAccountControl,objectGuid,distinguishedName,mail;subtree";
- objRecordSet = objCommand.Execute();
- Пока НЕ(objRecordset.EOF) Цикл
- Логин = objRecordset.Fields("sAMAccountName").Value;
- Почта = objRecordset.Fields("mail").Value;
- Имя = objRecordset.Fields("displayName").Value;
- Если ПустаяСтрока(Имя) Тогда
- objRecordset.MoveNext();
- Продолжить;
- КонецЕсли;
- КонецЦикла;Syhi-подсветка кода
четверг, 16 октября 2008 г.
1C: Комплект универсальных отчетов
КонсольЗаданий
КонсольЗапросов
КонсольКластераСерверов
НастройкаТехнологическогоЖурнала
вторник, 14 октября 2008 г.
1C 8.1: Регламентные задания, маленькие хитрости
При некоторой заскорузлости описания в учебнике 1С. Документация мне так и не дала мне ответа, почему я сделал все как написано, но задание так и не запускается. Моя проблема оказалась в том, что регламентное задание запускается как внешнее соединение и в этом режиме все обращения к визуальным элементам считаются "ошибка выполнения" при этом консоль сервера не дает ответа, что случилось с запускаемым заданием. Ответ на этот вопрос дала универсальная обработка с диска ИТС "КонсольСервера", с помошью которой можно не только просматривать статистику работы запущенных задач (имхо по крайней мере, сообщение о том, что выполнение задачи было прервано на строке Х и произошла ошибка Ч, было для меня большущим подспорьем). Кроме того, ошибка может быть даже и не в процедуре регламентного задания, а в какой либо другой и увидеть это без обработки крайне сложно.
В общем подитожу:
1. Модули помеченные галочкой внешние соединение, должны содержать только те процедуры и функции которые необходимы для функционирования регламентной процедуры.
2. Обязательно иметь под руками обработку "Консоль сервера", чтобы иметь возможность контролировать ход выполнения заданий.
3. Помнить, что в случае клиент-сервера, планировщиком выступит сервер приложений, а для случая файл-сервера должен функционировать отдельное приложение, которое должно заниматься опросом:
Процедура ОбработкаЗаданий()ВыполнитьОбработкуЗаданий();
КонецПроцедуры
ПодключитьОбработчикОжидания("ОбработкаЗаданий", 3);
* This source code was highlighted with Source Code Highlighter.
После запуска данной обработки, при открытии ее формы, выполняется подключение в качестве обработчика ожидания процедуры "ОбработкаЗаданий", которая будет вызываться каждые 3 секунды и, в свою очередь, вызывать метод "ВыполнитьОбработкуЗаданий()". Данный метод проверяет, пришло ли время выполнять задания согласно их расписанию. Если да - то он запускает эти задания на выполнение. Открытие созданной обработки по запуску регламентных заданий не рекомендуется осуществлять в том же соединении, где выполняется основная работа с информационной базой. Для подобной задачи лучше использовать отдельное соединение с той же базой. Более подробно данный вопрос освещен, например, в книге М.Радченко "1С:Предприятие 8.1. Практическое пособие разработчика. Примеры и типовые приемы", глава 12, стр.288.
вторник, 23 сентября 2008 г.
CodePlex запускает поддержку TortoiseSVN
Оригинал статьи здесь
CodePlex теперь предлагает услуги сервера поддерживающего SvnBridge, который позволит использовать TortoiseSVN использовать для работы с Team Foundation Server. Поддержка SubVersion была одной из запрошенной пользователями фич, и поэтому хостинг SvnBridge, позволит пользователям использовать их любимые клиенты Subversion для работы с любимы проектами.
Subversion один из популярных репозитарией проектов в сообществе open source. TortoiseSVN - клиентский модуль для Subversion (так же как Team Explorer клиент для Team Foundation Server) широко распространен среди разработчиков open source. Мы хотим чтобы пользователи TortoiseSVN включились в сообщество CodePlex, и поэтому мы разработали SvnBridge, чтобы позволить TortoiseSVN работать с Team Foundation Server.
Наша первая версия SvnBridge требует инсталляции специального клиентского программного обеспечения, что подразумевает, что пользователи TortoiseSVN вначале инсталлируют и запустят SvnBridge прежде чем начать взаимодействовать с репозитарем CodePlex. Наличие стартовавшего SvnBridge в начале каждой сессии работы есть главный и самый раздражающий минус нашей поддержки TortoiseSVN.
Но сегодня мы с радостью сообщаем, что отныне TortoiseSVN может работать с CodePlex напрямую.
воскресенье, 21 сентября 2008 г.
C# Visual Inheritance
Мое огорчение не знает границ. Оказывается разработчики ограничили наследование не только в WPF, но и в С#. Если мы наследуем форму от базового класса, то большинство свойств таких компонентов как StatusStripPanel и ToolStripPanel становятся рид-онли.
Как показали раскопки на форумах МСДН и прочая блоги приближенных к особе матушке микрософт. Ограничение на фукнциональность унаследованных обьектов сделано специально, чтобы избежать некой прорвы ошибок которые при этом возникали.... Хотя при этом, если добавлять нужную функциональность через код то все работает.
P.S. Пути Майкрософт неисповедимы. В томже любимом и родном борладне еще даным давно визуальное наследование работало нормально.Будем надеяться, что спецы из майкрософта все таки справяться с этой задачкой.
