среда, 18 июня 2014 г.

Закрыть бухгалтерский счет в ОСВ

Очень часто главные бухгалтера просят, что бы другим бухгалтерам было не видно оборотов по определенному счету, например зарплат или капитала, да по какому угодно.
Я слышал про такие просьбы, но ни разу не сталкивался по работе с такой ерундой. И вот на днях такая задача пришла и ко мне. Прочитав множество веток на Мисте и Инфостарте, пришел к следующим выводам:
1) Блокировать надо с помощью RLS или переписывать все отчеты.
2) Переписывать все отчеты- это безумие.
3) Блокировать нужно либо План Счетов либо Регистр Бухгалтерии.
4) В регистре бухгалтерии можно накладывать блокировки только на БАЛАНСОВЫЕ измерения. 

Итак, вначале попробовал наложить блокировку на план счетов, и вроде бы даже получилось.
Результат был таким: В ОСВ всё нормально, в ОСВ по счету тоже хорошо, но то ли в карточке счета, то ли в анализе счета, сделанному по корреспондирующему счету вылезают Объект не найден, и все суммы. Т.е. смысла в такой блокировке нету никакого. Но она довольно простая, и если надо заблочить только ОСВ, то в принципе подходит. Делается она довольно просто:
1) Ищем роли, которые дают доступ к чтению и изменению плана счетов.
2) В этих ролях добавляем новое ограничение доступа к данным.
3) В запросе на ограничение я просто перечислил счета:
"Хозрасчетный ГДЕ НЕ (Хозрасчетный.Ссылка = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыСПерсоналомПоПрочимОперациям)
            ИЛИ Хозрасчетный.Ссылка = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыПоПредоставленнымЗаймам)
            ИЛИ Хозрасчетный.Ссылка = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыПоВозмещениюМатериальногоУщерба)
            ИЛИ Хозрасчетный.Ссылка = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыПоПрочимОперациям))"
Это я блокировал предопределенные 73 счета. Если счета не предопределенные, тогда надо делать регистр сведений, и получать эти счета оттуда, или искать по коду, например 
Хозрасчетный.Код= "ххх".

Как я и сказал, этот вариант мне не подошел, и я пошел на кардинальный шаг. Добавил балансовое измерение в регистр бухгалтерии, с типом Булево, и в модуле набора записей прописал код для выставление этого "Флага" в Истину при условие, что счет Дебета или Счет Кредита равен одному из блокируемых счетов.

После этого наложил блокировку в ролях чтения и изменения регистра бухгалтерии на это измерение, условие опять же элементарное "Хозрасчетный ГДЕ НЕ Хозрасчетный.Пометка".
Блокировка только на Чтение, на добавление записей блокировок не устанавливал.

Вот теперь обладатели этих ролей не смогут увидеть нигде записи регистра с блокируемыми счетами, но записать данные они смогут.

Опять же это влечет за собой некорректную ОСВ и всё такое у обладателей этих ролей, ведь блокируется полностью запись регистра бухгалтерии, но у Глав Буха все будет отображаться корректно. 

Объяснять Главному Бухгалтеру, что это неправильно - себе дороже, поэтому я просто сделал то, что попросили.

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

PS: Чтобы у ГБ всё корректно отображалось нужно ей дать роль либо полные права, либо администратора, либо создать копии прав на чтение и добавление данных регистра бухгалтерии, и инвертированным условием "Хозрасчетный ГДЕ Хозрасчетный.Пометка", и дать эти роли ГБ.

среда, 19 июня 2013 г.

Пауза в коде 1С.

Мне понадобилось реализовать паузу в одном алгоритме, и пауза должна была быть не более полусекунды.
Поиски в интернете особо не удались, т.к. варианты либо кривы, либо не совсем оптимальны.



четверг, 4 апреля 2013 г.

Оптимизация работы сервера SQL для 1С

Хочется начать с небольшой истории.
Когда я только начинал работать системным администратором, нам в конторе дали указание. Переходим с файлового варианта базы 1С на SQL вариант. Ну в чем проблема, поставил SQL 2008, запустил его, создал базу какую то, по быстрому настроил резервное копирование и забыл про это. И это была ошибка! Ох какая ошибка.
Где то через три-четыре месяца 1С начала тормозить. Но ведь я ничего не делал, значит проблема не с моей стороны. А вот и нет. База SQL без обслуживание становится всё более и более запутанной растет в размерах, и начинает с каждым днем всё медленнее работать. Таким образом запросы, которые поступают от 1С всё дольше и дольше работают.

пятница, 29 марта 2013 г.

Устройство USB не обнаружено, при подключении мыши


Устройсто USB не обнаружено или не опознано!

Сегодня вместо очередного урока по 1С пришлось пол дня провозится с одной нехитрой проблемой.
Дано: ноутбук с Windows 7, USB мышь, флешка.
Что случилось?
При подключении мыши появляется сообщение windows о том, что USB устройство не опознано.
Обновление Windows, установка драйверов на чипсет, обновление БИОСа не привели к какому-либо положительному результату, мышку не видит. 
Я попробовал флешку вставить, всё работает, попробовал мышку на другом компе - работает, мышку с другого компьютера на этом ноутбуке - не работает. Уже думал устанавливать драйвера для мышки=)
Т.е. Usb в приниципе то работают, так как флешку видит и читает нормально, а вот с мышкой проблемы.

Решение: После чтения огромного количества информации на различных форумах, и каких то страшных сайтах решение нашлось. Оказалось оно до предела простым: 
1)Выключаем ноутбук
2)Вытаскиваем usb устройства
3)Вытаскиваем Батарею
4)Нажимаем кнопку питания и держим около 30 сек. Это действие снимает напряжение с материнской платы.
5)Вставить батарею, включить ноутбук, включить устройство.

PS. Помимо Usb мышки не работал еще и встроенный Bluetooth адаптер. После этих действий он так же начал корректно работать.

пятница, 1 марта 2013 г.

Работа с Обработчиком Ожидания 1с 8.2


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

ПодключитьОбработчикОжидания("Название процедуры", Число(Это интервал выполнения), [Истина/Ложь]);

Всё, готово. Теперь через интервал, указанный во втором параметре будет вызываться процедура, указанная в первом параметре. Третий параметр необязательный, по умолчанию Ложь, и указывает он на то, Однократно ли будет выполняться указанная процедура.

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

Чтобы выключить обработчик ожидания необходимо выполнить следующий метод:

ОтключитьОбработчикОжидания("Название процедуры");

Всё, обработчик выключен. Тут всё просто.

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

Фоновые задания в 1С 8.2


В системе 1С 8 существует такой механизм, как фоновые задания. 

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

ФоновыеЗадания.Выполнить("НазваниеПроцедурыНаСервере",[ПараметрыПроцедуры],[Новый УникальныйИдентификатор],["Название"]);

Параметры процедуры это массив параметров, кторый надо предварительно создать, таким образом мы можем передать параметры в процедуру или функцию.

Процедуру лучше всего описывать в серверном общем модуле, таким образом имя должно выглядить так:"Общиймодуль.НазваниеПроцедуры". Соответственно и вызывать лучше её с сервера, чтобы не ставить галочку общего модуля "Вызов Сервера". 
Процедура, выполняемая "в фоне" ДОЛЖНА быть экспортной. 
Единственное ограничение - это невозможность вывода сообщений из фоновых заданий, поэтому можно либо создавать файлик на где-нибудь, либо служебный элемент справочника или регистра сведений. 
Следующий ньюанс в выполнение фоновых заданий в файловой базе. 
Чтобы, написанный нами ранее код заработал в файловой базе необходимо сделать следующие действия:
1)Создать служебного пользователя с полными правами, например "ФоновыйПользователь".
2)В модуле управляемого приложения при начале работы системы написать следующий код:

Если ИмяПользователя() = "ФоновыйПользователь" Тогда

ПодключитьОбработчикОжидания("ВыполнениеЗаданий",5);

КонецЕсли;

3)Описать процедуру ВыполнениеЗаданий в этом же модуле, не забыть сделать её экспортной.
В процедуре необходимо запускать метод ВыполнитьОбработкуЗаданий() без параметров.

Процедура ВыполнениеЗаданий() Экспорт

ВыполнитьОбработкуЗаданий();

КонецПроцедуры

4)Запустить сеанс пользователя "ФоновыйПользователь".
5)Запустить наш сеанс и выполнить фоновое задание.
6)Задание будет выполняться "в фоне", не в нашем сеансе, но и не на сервере, а в сеансе пользователя "ФоновыйПользователь".

Почему не видно команд?

Бывает такое, что в командном интерфейсе 1С 8.2 не видно некоторых объектов или кнопок или еще чего нибудь. Что бы разобраться с этим можно воспользоваться данной схемкой: