понедельник, 19 февраля 2018 г.

1с 7.7 (dbf) Уникальный идентификатор документа

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

Стал вопрос как правильно определить уникальный идентификатор документа (УИД) в базе Источнике. Посмотрел различный источники.

Вообще решил подитожит все что нашел:

В каталоге с базой лежит файл: 1SUIDCTL.DBF. Он имеет следующие поля:

Поле TYPEID (строка, 4) - это ID вида объекта конфигурации (0 - это документы)
Поле MAXID (строка, 9) - это ID последнего документа в 36ричной системы счисления

Вопрос возник по полю MAXID. Это поле описания как Charecter, 9
Но при просмотре различных конфигураций я обнаружил что оно заполняется максимум на 6 символов. А оставшиеся 3 символа всегда пустые.

Но картина изменилась как только я посмотрел 1SUIDCTL.DBF в базе где был использован УРБД.
Формат MAXID следующий: ZZZZZZPPP, где
ZZZZZZ - это УИД в 36ричной системы счисления
PPP - это код информационной базы


Максимальное количество УИД в базе может быть 36^6 = 2'176'782'336 (~2.2 миллиарда) записей

Много это или мало документов сложно сказать.

В качестве примера могу привезти значение этого поля у организации которая выписывает ~2000 документов в день (без выходных), каждый день.
Он равен = 19DEH, что в 10ричной системы составляет: 2'116'889 документов - документов за 3 года.

Теперь приведу 100% рабочие функции определения УИД :


//************************************************************************************************************
//Возвращает идентификатор (id) объекта, как он хранится в таблицах 1с
//_Объект_ - ТекущийЭлемент()
Функция глПолучитьИд(_Объект_) Экспорт
   Стр = ЗначениеВСтрокуВнутр(_Объект_);
   Возврат _idToStr(Лев(Прав(Стр, 15), 13)) + Сред(Стр, СтрДлина(Стр) - 4, 3);
КонецФункции //глПолучитьИд(_Объект_)

//************************************************************************************************************
//Возвращает ссылку на объект типа элемент справочника или документ
//МетаОбъект - ссылка, полученный через СоздатьОбъект("Справочник[Документ].Вид")
//Ид - значение идентификатора элемента(документа), как он хранится в таблицах 1с
Функция глПолучитьОбъектПоИд(_МетаОбъект_, _Ид_) Экспорт
   МетаОбъект = ЗначениеВСтрокуВнутр(_МетаОбъект_);

   Возврат ЗначениеИзСтрокиВнутр(СтрЗаменить(МетаОбъект, Прав(МетаОбъект, 15), "" + Прав("          " + _StrToId(Лев(_Ид_, СтрДлина(_Ид_) - 3)), 10) + Прав(_Ид_, 3) + Прав(МетаОбъект, 2)));
КонецФункции //глПолучитьОбъектПоИд

эти две функции придумал не я, поэтому указываю источник:
http://aitika.ru/otvety/1799-1c-Kak-v-semerke-poluchit-unikalniy-identifikator-dokumenta?p=1 (c) Матрейя 30.01.06 (00:00)

Для того, чтобы принудительно разблокировать информационную базу, воспользуйтесь консолью кластеров сервера или запустите "1С: Предприятие"

Столкнулся с проблемой блокировки БД, после попытки сделать тяжелый РИБ обмен.

Решил проблему следующим образом (ТОЛЬКО ДЛЯ ФАЙЛОВОЙ БД):

В каталоге БД лежит файле 1Cv8.cgr  со следующим содеражнием:
{1,20130319092834,00010101000000,"Резервное копирование
Для администратора:Для того чтобы принудительно разблокировать информационную базу, воспользуйтесь консолью кластера серверов или запустите ""1С:Предприятие"" с параметрами:ENTERPRISE /F""d:\1C\db"" /CРазрешитьРаботуПользователей /UC<код разрешения>","РезервноеКопирование",""}

, где 20130319092834,00010101000000 - дата начала и конца блокировки БД

я установил дату конца равной дате начала и файл стал выглядеть следующим образом:
{1,20130319092834,20130319092834,"Резервное копирование .....

После этого я смог войти в Конфигуратор

PS. для серверного варианта: в консоли управления сервером нужно открыть свойства БД и снять флаг блокировки.

Ошибка разбора XML: PCDATA invalid Char value

При загрузке данных, появилось сообщение об ошибке:



В красный квадрат я выделил код символа ошибки. В моем случае это символ с кодом 18.
Если два варианта решения данной проблемы:

1. В обработке "Универсальный обмен данными xml" на закладке "Дополнительные настройки" если флаг "Автоматически удалять недопустимые символы из строк для записи в XML".



После включения данного флага у меня загрузка прошла, но загрузилось на 5 объектов меньше чем в варианте 2. (не могу сказать что именно не загрузилось - может весь объект, а может только его свойство, т.к. для себя я сделал по второму варианту).

2. Открываю на редактирование файл загрузки в  Far Manager (кодировка UTF-8). Открываю диалог поиск (F7) и в строку поиска указываю символ с кодом 18 (ALT+18) и поиск. Курсор будет спозиционирован на проблемном символе - заменяем его на подходящий по смыслу. И сохраняем.

Делаем еще раз загрузку. Если есть ошибки то повторяем действие...

воскресенье, 18 февраля 2018 г.

Не обновляется содержимое сетевой папки

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

Изменения в реестре:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer]
"NoSimpleNetIDList"=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer]
"Max Cached Icons"="12000"


Решение взято от сюда: http://forum.oszone.net/thread-104681.html

1с 7.7 + Win2008R2 + Печать + Разобрать по копиям = Есть решение, но не идеальное

После замены сервера и установки на него Win2008R2, при работе в 1с77 начались проблемы с печатью, а точнее печать работала, но не работала функция "Разобрать по копиям" (хотя в Win2003 все было Ок).

Причем эта функция не работала исключительно в 1с77. Из MS Word, блокнота и прочих программ все замечательно печаталось и разбиралось на копии.

Прочитал множество форумов на эту тему (infostart, mista и другие), решение не было найдено, и общая мысль всех обсуждений свелась к тому что эту проблему решить никак не возможно.

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

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

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

Решение не идеально конечно (FinePrint платное решение), но это единственное что удалось сделать для решения данной проблемы.

Развалилсь RAID в Intel Rapid Storage

По какой то причине у меня развалился RAID1 в Intel Rapid Storage. Думал как его поднять...
решение следующее:

В биосе рейда диски нужно перевести в режим NON-RAID
Далее сделать загрузку виндовс (он загрузиться, т.к. в основном биосе raid не выключен, и хотя диске находятся в режиме NON-RAID работать они будут на драйвере iaStor.sys)

После загрузки зайти в настройки Intel Rapid Storage - создать диск RAID1 и сделать инициализацию. Восстановление рейда закончено.

пятница, 16 февраля 2018 г.

Установка и удаление шрифтов без прав администратора (windows 7)

Log on as administrator. Open command prompt as admin.

attrib -r -s %systemroot%\fonts

takeown /f "%systemroot%\fonts" /r /d n

(optional - gives administrators full rights on the fonts folder): icacls "%systemroot%\fonts" /grant administrators:F /t

You can now add or change permissions on the Fonts folder like any regular folder.

Give user(s) modify access to %systemroot%\Fonts

icacls "%systemroot%\fonts" /grant USERNAMEorGROUP:M /t

Give user(s) modify access to %systemroot%\system32\FNTCACHE.dat

icacls "%systemroot%\system32\FNTCACHE.dat" /grant USERNAMEorGROUP:M /t

Give user(s) modify access to HKLM\Software\Microsoft\Windows NT\Current Version\Fonts

Взято отсюда: http://social.technet.microsoft.com/Forums/en-US/winserverGP/thread/fc178004-d0b0-40c3-b41a-da8129c8d3ef