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

"Черная книга менеджера". Слава Панкратов.

Рекомендую для прочтения не только руководителям проектов но и рядовым программистам - в книге в доходчивой форме объясняются основные моменты возникновения конфликтных ситуаций, отбрасывается меланхолия, предрассудки и прочие тараканы. Так же, перейдя от часного к общему, содержимое книги можно применить почти в любой из форм трудовых, и не только трудовых отношений. В книге мало букв, но все они концентрированые и много с них матерных, но, говорят что матерится полезно для психики.

Прочтениние займет максимум один час времени, но оно того стоит.
http://www.it4business.ru/mbb

суббота, 16 апреля 2011 г.

1с v8.2 ХранилищеЗначений в Табличной части объекта

В табличных частях объектов 8.2 имеется возможность создавать реквизиты типа ХранилищеЗначений но сохранеие этих реквизитов в тонком клиенте отрабатывается некорректно, разве что каждый раз после присваивания вызывать метод записи объекта Записать(), что не очень то удобно использовать каждый раз при изменении отдельной строки. Для корректной работы с реквизитами такого типа предлагаю сохранять значения в соответствия, которое в свой черед помещается в реквизит формы типа ХранилищеЗначения. Ключем соответствия является идентификатор строки табличной части.

////////////////////////////////////////////////////////////////////////
/////////////////////// Обработчик событий на клиенте

&НаКлиенте
Процедура ПрикрепленныеФайлыПередУдалением(Элемент, Отказ)
    ТекущаяСтрока = Элементы.ПрикрепленныеФайлы.ТекущаяСтрока;
    ДанныеСтроки = Элементы.ПрикрепленныеФайлы.ДанныеСтроки(ТекущаяСтрока);

    УдалитьДанныеИзСоответствия(ДанныеСтроки.НомерСтроки);
КонецПроцедуры

////////////////////////////////////////////////////////////////////////
/////////////////////// Обработчик событий на сервере

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Хранилище = Новый ХранилищеЗначения(Новый Соответствие);

    Индекс = -1;
    Для Каждого Строка Из Объект.ПрикрепленныеФайлы Цикл
        Индекс = Макс(Индекс, Строка.ПолучитьИдентификатор());
    КонецЦикла;
КонецПроцедуры

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    Соответствие = Хранилище.Получить();

    Для Каждого Строка Из Объект.ПрикрепленныеФайлы Цикл
        ИндексТекущейСтроки = Строка.ПолучитьИдентификатор();
        Если Не Соответствие[ИндексТекущейСтроки] = Неопределено Тогда
            // Записать файл
            ТекущийОбъект.ПрикрепленныеФайлы[Строка.НомерСтроки-1].Файл = Соответствие[ИндексТекущейСтроки];
            // Удаление соответствия
            Соответствие.Удалить(ИндексТекущейСтроки);
        КонецЕсли;
    КонецЦикла;

    Хранилище = Новый ХранилищеЗначения(Соответствие);
КонецПроцедуры

////////////////////////////////////////////////////////////////////////
/////////////////////// Серверные процедуры и функции

&НаСервере
Процедура ПоместитьФайлыИзВременногоХранилищаВТЗ(МассивФайлов)
    СправочникОбъект = РеквизитФормыВЗначение("Объект");
    // ... тело модуля
    Индекс = Индекс + 1;
    НоваяСтрокаВложения = СправочникОбъект.ПрикрепленныеФайлы.Добавить();

    Соответствие = Хранилище.Получить();
    Соответствие.Вставить(Индекс, Новый ХранилищеЗначения(Файл));
    Хранилище = Новый ХранилищеЗначения(Соответствие);

    ЗначениеВРеквизитФормы(СправочникОбъект, "Объект");
КонецПроцедуры

&НаСервере
Процедура УдалитьДанныеИзСоответствия(ТекущаяСтрока);
    ИндексТекущейСтроки = Объект.ПрикрепленныеФайлы[ТекущаяСтрока-1].ПолучитьИдентификатор();

    Соответствие = Хранилище.Получить();
    Соответствие.Удалить(ИндексТекущейСтроки);
    Хранилище = Новый ХранилищеЗначения(Соответствие);
КонецПроцедуры

пятница, 8 апреля 2011 г.

Ограничение доступности параметра СКД

 В запросах СКД часто встречаются конструкции типа "... Когда &Параметр = Значение(Справочник.ИмяСправочника.ПустаяСсылка)..." при выводе параметров не совсем красиво отображать пустое значение, а когда запретить вывод параметра поставив ограничение доступности не будут отображатся заполненые значения. Решением есть устанавливать ограничение доступности в СКД при компоновке в зависимости от заполнения параметра пользовательских настроек.

Настройки = ЭтотОбъект.КомпоновщикНастроек.Настройки;
Параметр = Настройки.ПараметрыДанных.Элементы.Найти(ИмяПараметра);
ПараметрСКД = ЭтотОбъект.СхемаКомпоновкиДанных.Параметры.Найти(ИмяПараметра);
Если Не (Параметр = Неопределено Или ПараметрСКД = Неопределено) Тогда
    ПараметрСКД.ОграничениеИспользования = Не ЗначениеЗаполнено(Параметр.Значение)
КонецЕсли;

Дата рождения - 08 апреля

В блоге буду публиковатся интересные методы решения задач и описание нестандартного поведения платформы :)