Библиотека Интернет Индустрии I2R.ru |
|||
|
Некоторые ошибки 1С:Предприятия 7.7 различных релизовГлюк при использовании сортировки в таблице значений.
Ссылки по теме:Процедура Сформировать() ТЗ =СоздатьОбъект("ТаблицаЗначений"); ТЗ.НоваяКолонка ("Колонка","Число" ); ТЗ.НоваяСтрока (); ТЗ .Колонка =0; ТЗ.НоваяСтрока (); ТЗ .Колонка =0; ТЗ.НоваяСтрока (); ТЗ .Колонка =1; ТЗ.Сортировать ("Колонка"); Сообщить(ТЗ .НайтиЗначение(1 ,1,"Колонка" )); КонецПроцедуры ... если ТЗ.Сортировать ("Колонка") закомментировать, то все нормально. При использовании метода Сортировать( ) метод НайтиЗначение (Знач ,Строка,Колонка ) игнорирует параметр "Строка" и соответственно ищет не в заданной строке, а по всем строкам. Причем позиционирование после сортировки на первую строку ТЗ ничего не дает... В данном случае были установлены параметры поиска в первой строке и первой колонке. До исполнения метода Сортировать() все отлично работает и метод ТЗ .НайтиЗначение(1 ,1,"Колонка" ) возвращает 0 (т.е. значение не найдено). После же сортировки тот же метод возвращает 1. Явно прослеживается глюк исполнения какого-то из вышеупомянутых методов. Причина такого поведения метода НайтиЗначение(), по моему мнению, связано с неправильным индексированием таблицы значений после исполнения метода Сортировать(). Хотя до конца не понятно, что же все-таки глючит, метод НайтиЗначение() или метод Сортировать() ? В любом случае, все вышесказанное указывает на ошибки работы с массивами. Таким образом к совместному использованию методов Сортировать() и НайтиЗначение() нужно подходить довольно аккуратно. Если все же необходимо использовать поиск по явно заданным строкам отсортированной таблице значений, тогда следует перегрузить эту таблицу в другой массив. Т.е в вышеизложенную процедуру нужно добавить следующее... ТЗ_2=СоздатьОбъект("ТаблицаЗначений");
Глюк исполнения метода объекта XBase. В процессе работы с объектом XBase была обнаружена ошибка работы метода этого объекта НайтиПоКлючу(<Режим>). Назначение этого метода поиск записи по индексу. Перед вызовом метода устанавливаются значения всех атрибутов агрегатного объекта типа ''Ключ'', которые участвуют в вычислении выражения текущего индекса. В данной версии статьи я не буду приводить пример, иллюстрирующий неправильную работу этого метода, а ограничусь лишь описанием случая при котором проявляется эта ошибка. Впервые эта ошибка возникла в 15-м релизе (заметьте, в 14-ти предыдущих все было нормально). Фирма "1С" в очередной раз исправила одни ошибки, а наплодила еще больше других. Так как объект XBase не позволяет использовать мемо-поля, то иногда требуется использование строковых полей довольно большой длины. В такие поля, например удобно упаковывать агрегатные объекты с помощью метода ЗначениеВСтрокуВнутр(КакойТоОбъект). Теперь собственно к главному, метод НайтиПоКлючу(<Режим>) всегда возвращает 0, если длина поля превышает 200 символов. В итоге мы получаем дополнительный приступ гемороя при разбитии таких полей на не превышающие 200.
Глюк при конфигурировании списка и прав пользователей. Глюк обнаружил Петр и опубликовал в коференции на Кубани "Территория 1С". Здесь можно посмотреть текст ветки. Вот цитата из текста письма, который он мне прислал.
"Метод обломный и слегка позорный - я сообразил, что такое возможно, сам налетел на баг.
1 - заводишь набор прав с полными правами ППП. Если попытаться просто удалить последнего юзера с правом администрирования, система заорет и не пропустит, а так - запросто. То есть юзера с администрированием просто не останется. Тогда и зайти с правами администрирования нельзя. Никуда не пустит. Как оказалось, снимается с использованием всем известного метода - убрать User.usr при запуске, затем подложить назад и отредактировать. Там права доступа - по барабану..."
Форма. Баг метода Видимость. Прислал Моисеенко П.П. (c) - взято с Бурги. Автор разыскивается. Хотя я и знаю про данный глюк, я его не публиковал. Глюк проявляется в том, что при запуске формы поле не видно, только если установить видимость=0 и доступность=0 ОДНОВРЕМЕННО (по крайней мере на 12, 15 и 17 релизах). Совет с Бурги - Необходимо устанавливать флаг Доступность(0) а потом Видимость (0), если их переставить реквизит будет виден.
Форма. Фича многострочной части документа. Прислал Моисеенко П.П. Заключается в том, что видимостью многострочной части документа можно на самом деле управлять (я проверял на 10, 14,15,17 релизах). Делается это так -
План счетов, субконто. Разрешение редактирования операции Прислал Моисеенко П.П. Имеется такая возможность в Операции - Редактировать операции документов. Из собственного опыта могу сказать, что любого, кто разрешает ручное редактирование операций, следует расстреливать на месте без суда и следствия, как особо злостного вредителя - ибо перепроведение бухгалтерских документов эти изменения затирает. В отличие от Расчета, где ручной режим правки особо помечается и не изменяется. После перепроведения (на ситуацию, когда было разрешено изменение, я натыкался 2 раза, причем оба раза с граблями) практически ни один бухгалтер никогда не может вспомнить, чем он руководствовался, когда правил. Соответственно и восстановить это нельзя. Пусть вводят корректирующие ручные операции - так хоть следы останутся.
План счетов, субконто. Программное создание и удаление субконто Прислал Моисеенко П.П. (c) - взято с Бурги. Автор разыскивается.
Оказывается, в 1С, программно, конструкцией следующего вида Так вот, таким можно изменить вид субконто для счета, созданного в режиме информационной базы, т.е. вручную пользователем, и после этого нормально работать (нужно только пересчитать итоги, вся прежняя аналитика при этом, естественно, накроется). Замечание - при попытке изменить аналитику на счете, заданном в конфигураторе, нас посетит Обломов - выдается сообщение "Изменение настроек счета, введенного в режиме конфигуратора, запрещено!". Ну хоть это нормально. По крайней мере, у меня на локальном 15 и 17 релизах так.
В итоге имеем: юзер ввел при создании счета одно субконто, а реально имеем совершенно другое
после программного изменения! При этом все прекрасно и никаких конфликтов. Аналитика ушла
в пампасы. Ну по документам после восстановления субконто можно восстановить аналитику перепроведением, а с ручными операциями как? После изменения субконто потребуется полный пересчет итогов, и вся аналитика в ручных операциях исчезнет. Данный баг (иначе не назовешь) дает очень неприятную возможность - на ходу обработкой удалить всю аналитику на счетах, созданных не в конфигураторе (программа попросит пересчет итогов) и естественно, потерять всю аналитику ручных операций в базе - кому она нужна без утраченной аналитики. При использовании в обработке от недоброжелателя можно получить злобную диверсию (если внешняя обработка удалена - доказать ничего невозможно). Возможно использование данного факта при возникновении необходимости срочного глобального изменения данных в базе. Однако необходимо протестировать возможность работы на сети при числе пользователей больше одного, т.е. не в монопольном режиме, для DBF и SQL баз (работоспособность в сетевом немонопольном режиме не проверялась). Возможна также удаленная настройка плана счетов, но это весьма проблематично, т.е. чисто в теории - документы тоже менять нужно. Либо делать их самонастраивающимися, что просто сложно и увеличивает временные затраты. Выводы - запретить создавать счета не в конфигураторе.
Изменение проводок документа без перепроведения Прислал Моисеенко П.П. И(c) - взято с Бурги. Автор разыскивается. Было только 1 раз.
Ошибка при добавлении проводки (c) - Белов Сергей aka Soaron
Последовательность представления субконто Прислал Моисеенко П.П. (c) - взято с Бурги. Автор разыскивается. Было только 1 раз
SQL.Не работает условие в запросе
(c) http://1csql.udmnet.ru - toypaul
SQL.Группа справочника в запросе
(c) http://1csql.udmnet.ru - toypaul
SQL.Ошибки при формировании SQL запроса в 1С
(c) http://1csql.udmnet.ru - toypaul
SQL.Метод РассчитатьИтоги
(c) http://1csql.udmnet.ru - toypaul
Дыра в защите - формульный калькулятор Прислал Моисеенко П.П.
Дыра номер 1 - если пользователю запретить использовать внешние и общие отчеты и обработки (см. настройку Прав), то тем не менее можно запустить внешний отчет и обработку.
Для этого необходимо выполнить следующие действия:
Внедрение вставок во внешние отчеты и обработки Прислал Моисеенко П.П. Дыра номер 2 - если пользователю запретить использовать внешние и общие отчеты и обработки (см. настройку Прав), то грамотный юзер (знакомый с программированием), тем не менее, может запустить внешний отчет и обработку. Для этого можно воспользоваться хранящимися в каталоге ExtForm стандартными отчетами. Нужно просто немного подредактировать любой стандартный отчет. Например, найти процедуру ПриОткрытии и в ней поставить ОткрытьФорму. Так как проверки прав в программном режиме нет, то данный оператор будет выполнен и открытие одной формы откроет и еще одну или несколько. Как закрыть дыру? Для локальных вариантов 1С , если база на локальном диске - никак. Для сетевых вариантов и локальных, при расположении базы на сетевом диске - закрыть дыру можно администрированием прав пользователя на сервере. Для пользователя должно быть установлена защита ТОЛЬКО ЧТЕНИЕ. Тогда он не сможет изменить файлы стандартных отчетов на диске сервера.
Внедрение вставок в модули документов Прислал Моисеенко П.П. Дыра номер 3 - аналогична дыре номер 2, однако чуть иная. Как известно, существует оператор ЗагрузитьИзФайла. Довольно часто он применяется при эксплуатации системы при достаточно большом числе пользователей. Это позволяет программисту отлаживать логику загружаемого модуля прямо на ходу, не прерывая работы пользователей. Иногда такая практика существует постоянно. И модули доков болтаются в каталоге базы постоянно. Сам так работал - это достаточно удобно при частых изменениях, наблюдается всего лишь небольшая задержка при открытии документа. Способ внедрения закладки в модули такой же, как и в отчеты. Например, найти процедуру ПриОткрытии и в ней поставить ОткрытьФорму. Так как проверки прав в программном режиме нет, то данный оператор будет выполнен и открытие дока на просмотр откроет требуемые отчеты и обработки. Как закрыть дыру? Для локальных вариантов 1С , если база на локальном диске - никак. Для сетевых вариантов и локальных, при расположении базы на сетевом диске - закрыть дыру можно администрированием прав пользователя на сервере. Для пользователя должно быть установлена защита ТОЛЬКО ЧТЕНИЕ на файлы, в которых находятся модули доков. Тогда он не сможет изменить эти файлы на диске сервера. |
|
2000-2008 г. Все авторские права соблюдены. |
|