вторник, 2 августа 2011 г.

1С 7.7 Нарушена структура индексов таблицы

Нарушена структура индексов таблицы CJ1196
Нарушена структура индексов таблицы CJ1238
Нарушена структура индексов таблицы CJ447
Нарушена структура индексов таблицы CJ757

Пришлось столкнуться с этой ошибкой. Честно говоря, я был поражен отсутствием подробной инструкции по решению данной проблемы в интернете. Эта ошибка возникает на платформе 7.7 при использовании компоненты "расчет" (или проще говоря, когда есть расчет зарплаты) при работе с Microsoft SQL Server 2000. Причем при входе в монопольном режиме ошибка исчезает, но при попытке входа нескольких пользователей появляется опять. Причиной появления такой ошибки является смена платформы 1С Предприятия на более новую версию (в моем случае это был 27 релиз платформы), а база данных на SQL сервере была загружена более старой версией. У меня она возникла при не значительном изменении конфигурации. А именно, в состав конфигурации был добавлен один дополнительный отчет, который никак не был связан с зарплатной частью. По данным найденным, в сети я понял, что проблема связана с несоответствием файла 1cv7.dds и фактической структурой данных на SQL Server-е. Обычно файл 1cv7.dds можно перегенерировать. Для этого его нужно переместить из папки базы данных 1с, сделать незначительные изменения в конфигурации и сохранить их. Один из вариантов это зайти в конфигуратор и добавить пробел в название конфигурации или еще один Конфигуратор-Конфигурация-Открыть конфигурацию-Развернуть ветку конфигурации "Виды расчетов"-Встать на любой вид расчета-Нажать на нем правую кнопку мышки-В выпавшем меню выбрать Упорядочить.-После этого в заголовке окна после слова Конфигурация должная появиться Звездочка "*". Затем нажимаем Ctrt+S или нажимаем на дискетку. Соглашаемся со всеми вопросами. Пробуем закрыть конфигуратор и запустить предприятие в "не монопольном" режиме. Если не помогло. Заходим еще раз конфигуратор. В меню администрирование выбираем выгрузить данные. Затем в заходим в Enterprise manager SQL сервера. Отключаем базу данных (Detach database). Создаем новую базу в SQL с тем же именем. Можно и в той же папке, но тогда нужно убрать файлы базы SQL. Но и в конце концов снова зайти в конфигуратор и загрузить данные. При этом стоит обновить все Платформы 1С предприятия до последней версии.

среда, 27 июля 2011 г.

Контроль переписки в Postfix или Big Brother watching you

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

Для доставки копии ВСЕХ сообщений (входящих и исходящих) на указанный адрес (поддерживается с Postfix v.2.1) добавляем в /etc/postfix/main.cf добавляем вот такой вот параметр:

always_bcc = address

где address - мыло ящика, куда необходимо дублировать ВСЕ месаджи от ВСЕХ

Для контроля определенных сотрудников необходимо использовать таблицы соответствия отправителя/получателя с адресами доставки копий сообщений sender_bcc_maps = type:table и recipient_bcc_maps = type:table

Рассмотрим 2 варианта реализации - на основе файлов (индексированных карт hash) и базы данных MySQL.

Способ с использованием индексированных hash карт

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

Для копирования исходящих сообщений:

Создаем файл /etc/postfix/sender_bcc. Внутрь помещаем правило о том с чьего мала и куда слать копию:
user@mydomain.ru backup@mydomain.ru
user2@mydomain.ru backup@mydomain.ru

Добавляем в main.cf мапу на этот файл:
sender_bcc_maps = hash:/etc/postfix/sender_bcc

Индексируем:
#>postmap /etc/postfix/sender_bcc

Перезагружаем постфикс и любуемся копированием исходящей почты :).

По аналогии в /etc/postfix/recipient_bcc создаем правило для копирования входящей почты:
user@mydomain.ru backup@mydomain.ru
user2@mydomain.ru backup@mydomain.ru

И опять же добавляем в main.cf мапу на этот файл:
recipient_bcc_maps = hash:/etc/postfix/recipient_bcc

Индексируем:
#>postmap /etc/postfix/recipient_bcc

ВАЖНО!!! Если в последствии в файлы /etc/postfix/recipient_bcc и /etc/postfix/sender_bcc вносятся изменения - необходимо перестраивать их хэш (периндексировать):

#>postmap /etc/postfix/recipient_bcc
#>postmap /etc/postfix/sender_bcc


Способ с использованием MySQL

Подразумевается, что уже используется MySQL совместно с Postfix для хранения учетных записей, транспорта и т.д.

Создаем таблицу bcc-ей в базе данных:

#>mysql -p mail

mysql>CREATE TABLE IF NOT EXISTS bcc (
id int(10) unsigned NOT NULL auto_increment,
sender varchar(128) NOT NULL default '',
recipient varchar(128) NOT NULL default '',
copy varchar(128) NOT NULL default '',
PRIMARY KEY (id)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8;

В /etc/postfix/ создаем файлы sender_bcc.cf:

user = mail_admin
password = mailadminpass
dbname = mail
query = SELECT copy FROM bcc WHERE sender = '%s'
hosts = 127.0.0.1

и recipient_bcc.cf:

user = mail_admin
password = mailadminpass
dbname = mail
query = SELECT copy FROM bcc WHERE recipient = '%s'
hosts = 127.0.0.1

В /etc/postfix/main.cf добавляем:

sender_bcc_maps = mysql:/usr/local/etc/postfix/sender_bcc.cf
recipient_bcc_maps = mysql:/usr/local/etc/postfix/recipient_bcc.cf

Перезапускам Postfix для применения изменений. Изменения данных в таблице MySQL bcc применяются без перезапуска Postfix.

Избавляемся от дублирования сообщений bcc_maps

Чтобы не происходило дублирования почты при использовании bcc_maps в /etc/postfix/master.cf следует добавить строчку перед conten_filter. Т.е. должно быть где-то так:

smtp      inet  n       -       n       -       -       smtpd
-o content_filter=
-o receive_override_options=no_address_mappings

Замечание! Если на серваке крутится несколько виртуальных доменов, и надо "копировать" переписку только с одного домена, то в качестве sender или recipient необходимо указывать маску. Например, @mydomen1.com

Жопиздан:)

среда, 20 июля 2011 г.

Подключение принтеров HP в Ubuntu

Есть замечательная приблуда HPLIP (можно качнуть с оф. сайта HP). Вроде и подключаются через нее принтера, и вроде даже работать должны, но есть нюанс: HPLIP не умеет подключать расшаренные принтера. Поэтому предлагаю использовать foo2zjs.

Это замечательный Linux драйвер для принтеров, работающих по протоколу ZjStream. Его работой очень доволен...

ВАЖНО!!! НЕ надо ставить foo2zjs из стандартных репозиториев. Необходимо качать свежую сборку с оф сайта. Приступим-с:

Get:
$wget -O foo2zjs.tar.gz http://foo2zjs.rkkda.com/foo2zjs.tar.gz

Unpack:
$tar zxf foo2zjs.tar.gz
$cd foo2zjs

Compile:
$make

Get extra files from the web, such as .ICM profiles for color correction, and firmware. Select the model number for your printer:
$./getweb cpwl # Get Minolta Color PageWorks/Pro L .ICM files
$./getweb 2200 # Get Minolta 2200 DL .ICM files
$./getweb 2300 # Get Minolta 2300 DL .ICM files
$./getweb 2430 # Get Minolta 2430 DL .ICM files

$./getweb 1000 # Get HP LaserJet 1000 firmware file
$./getweb 1005 # Get HP LaserJet 1005 firmware file
$./getweb 1018 # Get HP LaserJet 1018 firmware file
$./getweb 1020 # Get HP LaserJet 1020 firmware file

$./getweb 1025 # Get HP LaserJet Pro CP1025nw .ICM files

Install driver, foomatic XML files, and extra files:
$su OR $sudo make install
#make install

(Optional) Configure hotplug (USB; HP LJ 1000/1005/1018/1020):
#make install-hotplug OR $sudo make install-hotplug

(Optional) If you use CUPS, restart the spooler:
#make cups OR $sudo make cups

Все! Запускаем system-config-printer и подключаем принтера (как локальные, так и шаровые).
Жопиздан:)

четверг, 14 июля 2011 г.

Организация VPN сервера в Ubuntu

Устанавливаем VPN сервер:
$sudo apt-get install pptpd

Ок. Демон установился и запустился. По-умолчанию, демон слушает TCP-порт 1723 и использует протокол GRE (он же протокол 47) . Разрешаем на фаерволе входящие подключения на этот порт по этому протоколу (IPTABLES =/sbin/iptables, если кто забыл:)) ):

$IPTABLES -A INPUT -p gre -s 0/0 -j ACCEPT
$IPTABLES -A OUTPUT -p gre -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 0/0 --dport 1723 j ACCEPT
или через shorewall, /etc/shorewall/rules добавляем:
ACCEPT           net    fw    tcp 1723
GRE(ACCEPT)   net    fw



Далее ковыряем конфиг /etc/pptpd.conf, чтобы получилось вот такое:


option /etc/ppp/pptpd-options
#noipparam
logwtmp
bcrelay eth0
localip 10.177.36.3
remoteip 10.177.36.10-15
options - путь, где лежит конфиг опций; ВАЖНО!!! должно быть закаментировано! noipparam - если опция активна, то клиенту не будет передаваться его IP; logwtmp - позволяет передавать PPTP-серверу лог аутентификации пользователей через стандартную функцию logwtmp (нужна для отладки); bcrelay - разрешить передачу VPN-клиентам широковещательных пакетов с внутреннего интерфейса eth0; localip - ip нашего VPN сервера; remoteip - диапазон ip, выдаваемых клиентам.

Теперь ковырнем конфиг опций /etc/ppp/pptpd-options:

name pptpd
auth
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
proxyarp
nodefaultroute
logfile /var/log/pptpd.log
lock
nobsdcomp 
name - имя сервера (должно совпадать с параметром server в /etc/ppp/chap-secrets см. описание ниже); auth - требовать от клиента обязательной аутентификации; refuse-pap,refuse-chap,refuse-mschap - не принимать подключения от клиентов использующих ненадежные протоколы проверки пароля (pap, chap, ms chap v1); require-mschap-v2 - требовать от клиентов наиболее (на сегодняшний день) надежный протокол проверки пароля; require-mppe-128 - использовать механизм шифрования с 128-битным ключем; proxyarp - директива серверу работать с локальной сетью не используя маскарадинг (используется если клиентам выдаются ip-адреса из локальной подсети); nodefaultroute - не менять клиентам маршрут по-умолчанию (что б при установки соединения не отваливались интернеты) ВАЖНО!!!!! Не смотря на nodefaultroute, под Windows при установке VPN все равно маршрут по-умолчанию становиться на VPN, чтобы этого не происходило идем в свойства VPN соединения → Сеть → Протокол TCP/IP → Свойства → Дополнительно, там снимаем галку "Использовать основной шлюз в удаленной сети". logfile - куда писать логи; nobsdcomp - явное указание серверу, что компьютер работает под осью отличной от BSD (OpenBSD, FreeBSD).


Добавляем пользователей в /etc/ppp/chap-secrets:

# client        server                     secret                  IP addresses
test               pptpd                      testpass
test1             pptpd                      test1pass           10.177.36.10

Таким образом мы создали пользователя "test" с паролем "testpass" и пользователя "test1" с паролем "test1pass" c явным указанием ему получать ip-адрес "10.177.36.10".

Перезапускаем демона:

$sudo /etc/init.d/pptpd restart

Все! VPN-сервер готов к работе.

Если VPN-сервер работает за NAT-том, то еще необходимо организовать к нему проброс. На VPN-сервере разрешаем форвард пакетов:

$sudo mcedit /proc/sys/net/ipv4/ip_forward
и туда пишем:
net.ipv4.ip_forward=1

потом выполняем:
$sudo sysctl -p

Ну и, собственно проброс... На шлюзе в /etc/shorewall/rules добавляем:

DNAT   net    loc:10.177.36.3    tcp 1723
DNAT   net    loc:10.177.36.3    47

На этом настройка завершена...

А если все подключается, но ничего не работает, то вполне возможно нужно изменить размер MTU, таким образом, чтобы он был меньше MTU соединения с провайдером. Например, вы подключаетесь к провайдеру с MTU=1400 (см. в настройках роутера), тогда для своего VPN сервера нужно задать меньшее значение, например 1300. Для этого идем в /etc/ppp/pptpd-options и дописываем:

mru 1300
mtu 1300

ПОЛЕЗНЫЕ ССЫЛКИ:


Жопиздан:) (с) Job Is Done

четверг, 14 апреля 2011 г.

Установка принтера Canon LBP 3010 в ubuntu 9.04 +



Качаем необходимые дрова для принтера вот отсюда http://software.canon-europe.com/

Ставим драйвера в таком порядке (версия драйвером может отличаться):
1. cndrvcups-capt_2.20-1_i386.deb
2. cndrvcups-common_2.20-1_i386.deb

Далее рестартуем CUPS:

$sudo /etc/init.d/cups restart

Регистрируем принтер в системе. Смотрим какой ppd файл соответствует нашему принтеру https://help.ubuntu.com/community/HardwareSupportComponentsPrinters/CanonPrinters?highlight=%28%28CanonCaptDrv190%29%29 и
собственно регистрируем его:

$sudo /usr/sbin/lpadmin -p LBP3010 -m CNCUPSLBP3050CAPTK.ppd -v ccp:/var/ccpd/fifo0

Теперь в "Система -> Администрирование -> Печать" - должен появиться принтер LBP 3010.

Регистрируем usb - соединение принтера:

$sudo /usr/sbin/ccpdadmin -p LBP3010 -o /dev/usb/lp0

в ответ должны получить что то типа:

значит все гуд.

Вот теперь для нормальной работы принтера нужно подправить файл ccpd:

$sudo mcedit /etc/init.d/ccpd

файл должен содержать только:
# startup script for Canon Printer Daemon for CUPS (ccpd)

### BEGIN INIT INFO
# Provides: ccpd
# Required-Start: $local_fs $remote_fs $syslog $network $named
# Should-Start: $ALL
# Required-Stop: $syslog $remote_fs
# Default-Start: 2 3
# Default-Stop: 0 1 4 5 6
# Description: Start Canon Printer Daemon for CUPS
### END INIT INFO


DAEMON=/usr/sbin/ccpd
LOCKFILE=/var/lock/subsys/ccpd
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
NAME=ccpd
DESC="Canon Printer Daemon for CUPS"

test -f $DAEMON || exit 0

. /lib/lsb/init-functions

case $1 in
start)
log_begin_msg "Starting $DESC: $NAME"
start-stop-daemon --start --quiet --exec $DAEMON
log_end_msg $?
;;
stop)
log_begin_msg "Stopping $DESC: $NAME"
start-stop-daemon --stop --quiet --oknodo --exec $DAEMON
log_end_msg $?
;;
status)
echo "$DESC: $NAME:" `pidof $NAME`
;;
restart)
log_begin_msg "Restarting $DESC: $NAME"
start-stop-daemon --stop --quiet --oknodo --exec $DAEMON
sleep 1
start-stop-daemon --start --quiet --exec $DAEMON
log_end_msg $?
;;
*)
echo "Usage: ccpd {start|stop|restart|status}"
exit 1
;;
esac

exit 0

сохраняем и перезапускаем canon`вского демона:

$sudo /etc/init.d/ccpd restart

Теперь, чтобы принтер работал и после перезагрузки системы, выполняем:

$sudo update-rc.d ccpd defaults 50

Валим, напоследок, стандартный принтер, найденый системой.
Жопиздан (с) Job Is Done

вторник, 12 апреля 2011 г.

Сохранить установленный deb пакет из системы

Иногда, необходимо сохранить установленный deb пакет из системы. Делается это просто. Ставим dpkg-repack:

$sudo apt-get install dpkg-repack

и выполняем команду:

$sudo dpkg-repack <имя необходимого пакета>

На выходе имеем свежесобранный пакет в текущем каталоге.

Жопиздан (с) Job Is Done

среда, 16 марта 2011 г.

Запретить apt-get обновлять конкретный пакет Ubuntu

Иногда возникает необходимость отказаться от обновления некоторых пакетов. Через ГУЙ это не составляет никаких проблем. например, через sinaptic. Но, часто, обновление и установка пакетов проходит в терминале. Захолдить пакет для apt-get можно так:


$ echo "<полное название пакета> hold" | sudo dpkg --set-selections


<полное название пакета> — можно узнать так:

$ dpkg --get-selections | grep <название пакета>


Чтобы снова разблокировать пакет, необходимо выполнить туже команду, только параметр hold заменить на install