четверг, 12 декабря 2013 г.

Обновление сервера 1С 8.2

Ну и, раз я снова здесь для себя оставляю заметочки, оставлю ещё такие. Вдруг пригодится.

Обновление 1C сервера проводится легко за 10-15 минут, при нормально проведённой предварительной подготовке, а именно, обновлении клиентов. Хвала Аллаху, в версиях 8.2 1С перестала, как это было в 8.1, заменять клиента и у пользователя спокойно может жить десяток клиентов 8.2 разных версий, а специальный стартер сам выбирает, в зависимости от версии сервера, к которому подключается, какого клиента запустить.

Поэтому, в день перед обновлением мы, с помощью remoteExec обновляем клиентов (об этом я здесь писал), а утром следующего дня, на сервере устанавливаю новую версию (и если кроме 8.2 на нём ничего не крутится, то на этом всё заканчивается - при установке 1С сама пропишет путь к последней установленной версии платформы в ветке реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.2 Server Agent, в параметр ImagePath). Если же есть другие версии 1С, либо просто нужно изменить порты, либо каталог сервера (если запущено несколько серверов 8.2), то в вышеупомянутой ветке всё это редактируется (она должна из себя представлять что-то вроде этого:
"C:\Program Files\1cv82\8.2.10.77\bin\ragent.exe" -srvc -agent -regport 2041 -port 2040 -range 2060:2091 -d "C:\Program Files\1cv82\srvinfo")

Ошибка sql server 8618 при выполнения запроса 1С

После перехода на 1С 8.2.19.76 с 8.2.16.368 столкнулись со странной ошибкой. При выполнении запроса типа

ВЫБРАТЬ поле1, ВЫРАЗИТЬ(Поле1.ПолноеНаименование КАК СТРОКА (1000)) , поле3, поле4

ОБЪЕДИНИТЬ ВСЕ 

 ВЫБРАТЬ поле1, ВЫРАЗИТЬ(Поле1.ПолноеНаименование КАК СТРОКА (1000)), поле3, поле4 

ОБЪЕДИНИТЬ ВСЕ

 ВЫБРАТЬ поле1, ВЫРАЗИТЬ(Поле1.ПолноеНаименование КАК СТРОКА (1000)), поле3, поле4 

УПОРЯДОЧИТЬ ПО поле3, поле4

Вылазит ошибка SQL Server (2005 sp4): Msg 8618, Level 16, State 2

The query processor could not produce a query plan because a worktable is required, and its minimum row size exceeds the maximum allowable of 8060 bytes. A typical reason why a worktable is required is a GROUP BY or ORDER BY clause in the query. If the query has a GROUP BY or ORDER BY clause, consider reducing the number and/or size of the fields in the clause. Consider using prefix (LEFT()) or hash (CHECKSUM()) of fields for grouping or prefix for ordering. Note however that this will change the behavior of the query.

Методом проб и ошибок, было выяснено, что если убрать из запроса поле1 и поле1.ПолноеНаименование, являющиеся реквизитами ТЧ документа с составным типом (два разных справочника с похожей структурой), ошибка пропадает. Так же, ошибка пропадает если убрать сортировку, но, поскольку в печатной форме важен порядок строк, варианты не подходят.

Пока что решили с помощью временных таблиц - результаты выполнения объединений помещаются во временную таблицу и затем уже сортируется выборка из этой временной таблицы.

Это так, чтобы не забыть самому.