Ошибка:

Происходит хуйчаво, после чего не работает нихуя, а в журнале ошибок Шиndoшs вот эта сраная пидаралестичкая ошибка блядская.

- 
- 
   
  10010 
  0 
  2 
  0 
  0 
  0x80000000000000 
   
  58180 
   
   
  System 
  a37704a1 
   
  
- 
  {82154420-0FBF-11D4-8313-005004526AB4} 
  
  

Как починять:

  1. Запустить regedit, найти там к какому конкретному приложению относится {GUID}. В моем случае это был "Libreoffice Service Manager (Ver 1.0)"
  2. Запустить dcomcnfg
  3. В выпадающем списке слева, т.к. справа, благодаря стараниям LGBT-отдела Windows, нихуя не будет, и это попервой вводит в ступор, открыть "Службы компоненов->Компьютеры->Мой компьютер->Настройка DCOM->{Libreoffice Service Manager (Ver 1.0)}->ПКМ->Свойства"
  4. Помастурбировать настройками этого COM-приложения, поменять права доступа, пользователя, подобавлять групп, и прочее и прочее

Позволю себе процитировать себя же:

В общем, я снова поставил (вы сбрасывали?) пользователя, от имени которого запускается LibreOffice равным "Администратор", перезагрузил сервер, открыл LibreOffice, вылезло окно восстановления LibreofficeWriter документа, сделал восстановление - внутри ничего не было, закрыл LibreOffice, запустил 1С - все сохраняется и отрабатывает без ошибок, в том числе и с клиентских компьютеров.

Пока оно не сломалось где-нибудь еще, моя гипотеза такова: обработка печати договора неким образом крашит LibreOffice, тот при следующем открытии ждет подтверждения восстановления документа, из-за этого COM объект не регистрируется должным образом, и все стопорится (еще и не открывается, а висит в процессах отжирая процессорное время до полной перезагрузки компьютера). В нашем случае ситуацию еще ухудшило то, что LibreOffice, если мне не изменяет память, открывался от другого пользователя, под которым никто никогда не заходил, и восстановление это, наверное, при запуске там будет висеть и до сих пор.
В инструкции к линуксовой версии libreoffice указан флаг --norestore, позволяющий пропускать этап восстановления поврежденных документов. Аналогичный флаг должен существовать и для Windows-версии. Вопросы следующие:
1. возможно ли создавать COM объекты с флагами? Если да, то будет разумно использовать --norestore для автоматических операций.
2. каким образом обработка создает ситуацию, при которой ломается LibreOffice? Быть может там происходит kill процесса вместо нормального его закрытия? Желательно этот момент обнаружить и убрать.

Имеем таблицу, в которой строки ссылаются друг на друга по pid, либо вообще не ссылаются никак (pid=null). Делаем запрос:

SELECT *
FROM `tasks`
WHERE `tasks`.`id` NOT IN (SELECT DISTINCT `pid` FROM `tasks`)

Результат запроса: хуй (0 строк). При этом, результат противоречит здравому смыслу, потомучто данные в таблице есть и только начали вноситься, а сводится он еще более простому запросу:

SELECT *
FROM `tasks`
WHERE `tasks`.`id` NOT IN (496,NULL)

Упрощаем запрос до минимального

SELECT *
FROM `tasks`
WHERE `tasks`.`id` NOT IN (NULL)

Результат запроса: хуй (0 строк). Пишем:

EXPLAIN SELECT *
FROM `tasks`
WHERE `tasks`.`id` NOT IN (NULL)

Получаем:

Array ( [id] => 1 [select_type] => SIMPLE [table] => [type] => [possible_keys] => [key] => [key_len] => [ref] => [rows] => [Extra] => Impossible WHERE noticed after reading const tables )


Теперь необходимо переписать сраные 50 запросов, каджый из которых довольно сложен и в нужных местах повставлять OR IS NULL и OR IS NOT NULL, потомучто раньше вместо NULL был объект-костыль с ID=-1.

UPD:

Ха. Ха. Ха. Пехепе меня решило добить. Данные в выборке есть, а в результате - нет. Ну, об этом гениальном быдлопассаже я уже писал.