Книга знаний

1С:Предприятие / v8

v8: Предложения по развитию платформы 1С:Предприятия 8.0

У любого продукта всегда найдутся потребители, которым он не по вкусу или которым он нравится, но хочется, чтобы он был еще лучше. Так и с 1С 8.0. В этой статье мы попробуем собрать вместе все недостатки 8.0, избавление от которых сделало бы многих программистов 1С 8.0 немного счастливее.Автор статьи: Волшебник | Редакторы: paxan, Гений 1С, snc
Последняя редакция №17 от 27.06.06 | История
URL: http://kb.mista.ru/article.php?id=107

Обсуждение: http://www.forum.mista.ru/topic.php?id=175375

ЯЗЫК ПРОГРАММИРОВАНИЯ



= Видимость переменных приложения =
Невозможность получения переменных приложения из общего модуля и создания переменных

= Указатель на функцию =
Нужен указатель на функцию с возможностью вызова это функции по указателю. Даже в таком языке как Pascal есть указатель на функцию.

= Сылку на переменную =
Тоже хорошая вещь.

= Глобальные триггеры =
Глобальные триггеры – это процедуры, которые возникают при записи, открытии и других действиях над любым прикладным объектом. Глобальные триггеры должны быть переназначаемыми.

= Каскадные триггеры =
Желательно, чтобы можно было не просто заменить обработчик события, а заменить его каскадом, т.е. указать способ каскадного вызова – например, сначала новый обработчик, затем старый.

= Нормальная программная диагностика ошибок выполнения
Функция ОписаниеОшибки() получает гораздо меньше информации, чем получает пользователь в окошке подробного описания ошибки. В частности нет номера строки. Также хочется, чтобы были предопределенные и документированные коды ошибок. Пока возможно только анализировать текст сообщения.

= Попытка Исключение и крах транзакций =
Конструкция «Попытка – Исключение» привязана к транзакции и в некоторых случаях может отменить транзакцию. Эти случаи никак не классифицированы в документации, поэтому код внутри транзакций должен быть свободен от обработки исключений, что кажется странным.

= Нормальное сохранение настроек  =
В настоящее время настройки сохраняются только при закрытии 1С-предприятия.
Желательно, чтобы настройки можно было сохранить программно. Тогда если это очень важно, системный администратор мог бы настроить вызов периодического обработчика, который бы сохранял эти настройки скажем, раз в пять минут.

= Расширенный анализ событий =
В обработчике события желательно иметь информацию о том, что за событие повлекло его вызов. Тогда можно назначать один обработчик разным событиям.

= Борьба с зацикливаниями =
Желательно на системном уровне обеспечить вызов каждые N секунд обработчика, который будет проверять, был ли нажат пользователем Ctrl+Break и преывать работу программы, если это было сделано, чтобы не загружать текст программы вызовами ОбработкаПрерыванияПользователя.
В 7.7 любую обработку можно было прервать.

Код может выглядеть так:
УстановитьИнтервалОбработкиПрерыванияПользователя(5); //5 секунд
.

= Дополнительный синтаксис =
Иногда хочется, чтобы в языке 1С были удобные конструкции из других языков программирования. Мелочь, а приятно.
•    Операторы +=   -=   ++  --  *=  /=
•    Цикл repeat until

Хочется также передавать параметры по имени (как в VBA), особенно удобно в функциях с большим количеством необязательных параметров.
Функция Тест(А=0,Б=0,В=0,Г=0,Д=0,.Я=0)
КонецФункции
Вместо вызова Тест(,,,,,"Ага") использовать вызов Тест(Е:="Ага").
Красиво, согласитесь.

Хочу продвинутый конструктор массива и списка значений.
М=Новый Массив("А", Мин(1, 10), Р.Товар.Код, ПолучитьОстаток(Товар), '20010101');
М=Новый СписокЗначений("А", Мин(1, 10), Р.Товар.Код, ПолучитьОстаток(Товар), '20010101');
Чтобы можно было использовать внутри конструктора как константы, так и результаты функций.

Также хочется конструктор структур, аналогичный java-script:
Стр = Новый Структура {
   "categories" : 1 {
       '1': { "name":  'PHOTOALBUM'},
       '3': {"name":'COWORK'},
       '4': {"name":'SOFTWARE'},
       }
   }


= Копирование любого объекта =
Желательно иметь возможность копировать структуры и соответсвия так, чтобы полученная копия была полной копией исходного объекта, причем все вложенные структуры и соотвествия также были скопированы.

= Ошибки сортировки =
При сортировке таблиц значений нет возможности сортировать документы по дате.

= Конкурирующие объявления процедур =

Хочется, чтобы у процедур и функций в модуле и модуле формы обработки был приоритет по сравнению с процедурами в общем модуле - т.е. чтобы можно было в обработках использовать функции, которые есть в общих модулях и это не приводило к конфликту. Так было в 77.

А то бывает напишешь внешнюю обработку, потом из нее переносишь функции в модуль, и ранее работающая обработка начинает выдавать ошибку компиляции - мол, функция уже есть. Или же если 1С считает это нарушением духа компиляции, использовать специальный ключ препроцессора компиляции - разрешать или не разрешать функции с одинаковым именем.

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

= Работа с типами =
Чтобы можно было из типа получить его идентификатор.
Тип("ДокументСсылка.ПриходнаяНакладная").Идентификатор()="ДокументСсылка.ПриходнаяНакладная"


= Анализ стека =
Программное чтение и анализ стека (логического, не физического, такого, каким он выглядит, например в отладчике), например чтобы можно узнать, из какой формы вызвана процедура - форма должна быть на вершине стека.

= Где я =
Желательно знать, кто был инициатором выполняемого в текущий момент кода - форма вызвала выполнение кода или обработка ожидания, или внешнее событие.

= Работа с OLE =
•    Чтобы из любой переменной типа Оле-объект можно было получить базовый  Оле-объект, которому он принадлежит.
•    Чтобы можно было отличить 1С-Предприятие в обычном режиме от 1С в OLE и Com режимах.
•    Чтобы можно было принудительно, моментально убить Оле-сессию.
•    Чтобы можно было получить PID работающей 1С.
•    Чтобы можно было программно получить список методов и их параметров, а также свойств и их типов созданного ОЛЕ-объекта.
•    Хочется список всех запущенных дочерних Оле-объектов из текущего приложения 1С.
•    Использовать запущенное 1С Предприятие, как ОЛЕ-сервер, т.е. чтобы не обязательно нужно было создавать ОЛЕ-приложение 1С, а использовать уже запущенное 1С предприятие в этих целях.

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


= MXL на сервере =
Есть пожелание использовать табличного и текстового документа на сервере приложений - удобная структура для хранения данных, почему бы и нет?

Метаданные



= Расширенное чтение метаданных =
Программно определять, есть ли процедура с заданным именем у модуля, а также получать список процедур, их параметров и характеристик процедур (слово Экспорт), т.е. нечто вроде метаданных, но для текста модуля.

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

= Чтение параметров конфигурации =
Время модификации cf файла базы и текущей отладочной конфигурации. Также знать, соответствует ли отладочная конфигурация конфигурации базы или нет. В 77 это делалось через дату изменения MD-файла.

= Список свойств метаданных =
Нужно получать список всех свойст объекта метаданных, можно выгрузкой в структуру или через перебор "Для Каждого".

Прочее


= Один обработчик на несколько событий =
Определять, что за событие обрабатывается в обработчике событий.
Нужна какая-нибудь переменная типа строка - ИмяСобытия, чтобы можно было один обработчик использовать для разных событий, т.е. в обработчике события знать, какое именно событие в нем обрабатывается.

= Преобразование числа в строку =
Нужно, чтобы Строка(Число) по умолчанию работало бы без форматирования, т.е. число 1000 преобразовывалось бы в "1000", а не в "1 000". Во всех нормальных языках программирования это сделано так.

= ЗаполнитьЗначенияСвойств =
Хочется, чтобы функция работала нормально и не выдавала ошибку, если каких-то реквизитов нет, а просто их пропускала.

= ПрочитатьXML =
Хочется, чтобы функция работала грамотно и не выдавала ошибку, если каких-то реквизитов нет, а просто их пропускала.

= События открытия документов =
Нужны события открытия/сохранения файлов, документо и т.п., с возможностью переназначения.

= НайтиСтроки =
НайтиСтроки чтобы возвращал не только массив, но и таблицу значений, состоящую из найденных строк(опционально).



РАБОТА В РЕЖИМЕ 1С:ПРЕДПРИЯТИЕ



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

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

Также в строке Спр.Код=Стр.Код хочется знать, где именно недоступно поле Код, можно выделить это место маркером, например Спр.Код=Стр. <<Код>>

= Крах 1С при создании объекта. Важно.
Если прикладной объект не может быть создан, платформа вылетает с критической ошибкой. Это непрозрачное поведение, более логично не создавать объект, возвращая Неопределено.

= Крах 1С на зацикленных иерархиях.
Если элемент А является родителем элемента Б, а элемент Б является родителем элемента А, то 1С:Предприятие виснет при отображении таких иерархий. Нужно этого избежать.

= Диагностика краха платформы
Хочется, чтобы в случае краха платформа выдавала не просто сообщение о критической ошибке, но и диагностировала конкретный вид краха, например не вызывает особых проблем отличить падение по причине "Переполнение стека".

= Спецрежим работы для обновления
Хочется программно или интерактивно переводить программу в режим для обновления, при котором платформа отключается от конфигурации. При обратном подключении осуществляется обычный вход, только не нужно вводить логин, пароль.

Т.е. окошко 1С открыто, но пользователь не может работать, т.к. идет обновление. В идеале при переходе в такой режим закрываются формы документов, справочников, но сохраняются формы текстов, табличных документов.

При этом в мониторе пользователей или такой пользователь не виден, или (лучше) помечается особым статусом - готов к обновлению. Это бы решило недовольство пользователей выходами из программы.

= Аналог семерочного Сервис-Параметры
Добавить в Сервис-Параметры такие параметры, как:
- год начала рабочего столетия
- время ожидания захвата таблиц базы данных
- период в журналах - один на всех, или в каждом свой
- единая дата для всех отчетов

= Глобальные настройки для отчетов и обработок  =
Сделать возможным сохранять настройки не только в локальный список, но и в глобальный список настроек, из которого любой пользователь может себе загрузить уже готовые настройки конкретного отчета или обработки.

= Сохранение отчетов в Word  =
Чтобы не было проблем с разной шириной колонок

= По сохранению отчетов в Excel =
= Сохранять не только в формате Excel 95, но и в более новых форматах.
= Сохранять отступ и группировки (раскрывающиеся плюсики) при сохранении в Excel, чтобы можно было видеть структурированные отчеты.

ПРИКЛАДНЫЕ ОБЪЕКТЫ



= Несовершенство объектной модели =
Желательно:
•    Иметь возможность получить Менеджер любого объекта.
•    Проверить является ли значение Объектом или Ссылкой.

= Ссылка на строку табличной части =
Желательно получить возможность хранить в базе ссылку на конкретную строку табличной части.

= Момент времени =
Вопрос с моментом времени документа разрешен не до конца, по крайней мере с моментом времени можно нормально работать только в запросах, можно сравнить моменты времени двух документов, но нельзя простым способом отсортировать таблицу значений по моменту времени документа, как это было в 77, для этого нужно использовать построитель запроса. Также желательно преобразование момента времени в строку и обратно.

= Преобразования иерархических справочников =
Желательно преобразовать группу в элемент и наоборот.

= Ссылки на метаданные =
Желательно ссылки на объекты метаданных хранить в базе данных.

Также желательно хранить в базе объект типа ОписаниеТипа, задающий собой набор доступных типов значений. Ну или проще говоря, чтобы тип значения также можно было хранить в базе.
Возможно кто-то захочет хранить в базе и объекты типа Шрифт и прочие.

Хочется еще хранить тип GUID и ссылки на конкретные роли из конфигурации.

Хочется, чтобы была возможность ссылаться в объектах на роли пользователей, определенных в конфигураторе.
Без этого, использование мезанизма бизнес-процессов сильно затруднено, т.к. приходится создавать
избыточные справочники (перечисления...) для хранинения ролей пользователей.



= Расширенная работа с регистром накопления =
Желательно сделать так, чтобы с регистром накопления можно было работать как с регистром сведений - отбирать не только по регистратору набор записей, но делать и любые другие отборы.
Хотя возможно это пожелание и может наткнуться на технические проблемы реализации.

= Путь внешней обработки =
Желательно получать путь, из которого открыта внешняя обработка. В 77 это было. В 80 нет никаких технических препятствий, одни идеологические.

= Предопределенные элементы =
Желательно получить имя предопределенного элемента без полного перебора этих элементов.
Также желательно получить коллекцию предопределенных элементов.

= События объектов =
Хочется программно переназначать события конкретных экземпляров объектов при их создании или в любой момент использования, аналогично тому, как это делается в формах методом УстановитьДействие.

Хочется конструктор и деструктор объекта.

= Регистр сведений: "Ведущие" атрибуты  =
В регистре сведений ведущим сделать не только измерение, но и реквизит и ресурс, чтобы ссылки на объект из помеченных таким образом атрибутов регистра не мешали физическому удалению объекта при контроле ссылок. При этом такие атрибуты очищаются при удалении объекта из базы данных.

= Контроль записи документов будущей датой =
На текущий момент контроль записи будущей датой реализован таким образом, что невозможно отключить этот контроль простыми способами, чтобы пользователь смог-таки провести документ будущей датой. Надо прежде чем выдавать сообщение о невозможности такой операции вызывать событие объекта "ПриЗаписиБудущейДатой", где можно разрешить неоперативное проведение этой датой.
Или еще проще - вызывать ОбработкаПроведения с установленным Отказ=истина.

= Установка нового номера =
Функция УстановитьНовыйНомер/УстановитьНовыйКод должна работать адекватно (как в 77), Т.е. если есть номера ВН01 и ВН-02, то установить новый номер "ВН" должна выдавать ВН02 а не ВН-03.

= Событие после записи объекта =
Событие после записи/проведения документа(после записи справочника).

= Элемент в группу и наоборот =
Нужна возможность такого преобразования.

= Быстрая замена ссылки А на Б =
Возможность программной быстрой замены ссылки А на Б во всей базе.

ИНТЕРФЕЙСНЫЕ ОБЪЕКТЫ



1С 80 по сравнению с 77 открывает нам фантастические возможности по работе с формами. Но когда волна первого восторга проходит, под ней можно разглядеть коварные рифы, которые серьезно затрудняют программирование.

= Вложенные формы =
Таких банальных вещей, как форма в форме, в 1С почему-то нет. Увы.

= Программное создание интерфейсов =
Этого ожидали, но не получили. Можно комбинировать интерфейс из других интерфейсов, но нельзя программно создать пункт меню. Жаль, иначе бы можно было бы все интерфейсы создавать только программно в сложных конфигурациях.

Хочется также пока из метаданных, а потом из самого интерфейса (ведь он будет динамическим) получать информацию о том, какие пункты входят в состав интерфейсов, какие действия связаны с каждым из них.

= Триггеры – в общие модули =
Обработчик события формы может быть только в форме. Странное ограничение. Хочется размещать эти обработчики в общих модулях.

= Программное создание, идентичное конфигурированию =
Некоторые свойства элементов управления можно задать только на этапе конфигурирования, т.е. созданные программно элементы управления являются неполноценной копией созданных вручную.
Например, нельзя указать связь по владельцу для созданного программно элемента управления. Это очень плохо.

= Список созданных форм =
Такая банальная вещь, как список созданных (открытых) форм, в 1С 80 недоступна.

= Недостатки объектной модели =
•    Нельзя получить имя формы
•    Получить владельца поля ввода и любого другого элемента управления
•    В табличной части у поля ввода нельзя определить, какой колонке таблицы значений оно принадлежит.
•    Список дочерних форм недоступен у форм и элементов управления.
•    Из страницы панели хочется получить панель-владельца.

= Программный клик =
Странно, но нельзя программно нажимать кнопки формы.

= Фильтр таблицы значений =
Если табличное поле привязано к табличной части прикладного объекта, то фильтрация может быть любой. А вот если источником является таблица значений – то никакой.

Один программист предлагал в качестве источника использовать не только таблицу значений, но и построитель запроса, это бы решило проблему фильтрации таблиц значений.

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

= Сохранение десктопа =
Желательно сохранять открытые документы, журналы и отборы в них в разных конфигурациях рабочего стола (десктопа). Это признак взрослых систем.
В принципе такую вещь можно сделать и программно, если будет список открытых форм, но можно и на уровне платформы, это бы сильно упростило работу пользователей и отладку. Ведь нужно зайти в один и тот же журнал, открыть один и тот же документ.

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

= Полная триггеризация =
В формах нельзя отловить событие, когда значение поля ввода (формы или табличной части) изменяется программно, что очень плохо.

= Пометки в списках =
Во всех списках, где есть галочки, сделать чтобы можно было автоматом выбрать, очистить или инвертировать все галочки.

= Стандартная настройка колонок =
Сделать функцию по восстановлению стандартной настройки колонок таблицы. Кнопка такая есть, а программно это сделать нельзя.

= Свободная форма =
Чтобы можно было создать свободную (не привязанную к прикладному объекту) форму. Вроде:
Форма=Новый Форма(); Форма.ЭлементыФормы.Добавить();


= Нормальная работа с иерархиями =
Желателен отбор в форме справочника по реквизиту "ЭтоГруппа".

Желательно, если установлен отбор "В иерархии" или по списку, то выводить только те группы справочника, в которых есть элементы, попавшие в отбор, а то сейчас выводятся все группы.

= Сохранять переключатель Иерархии =
Сохранять на уровне платформы положение переключателя Иерархия включена/выключена при открытии формы. Так было в 77 и это было удобно. Если надо, программист может вмешаться в эту схему.

= Расширенное табличное поле =
Я бы не отказался от функционала группировок да и вообще, сводных таблиц на основе табличного поля - прямо в форме, а не в отчете(макете).

= Расширенная кнопочная панель =
Желательно на кнопочной панели размещать флажки и поля ввода, чтобы они были органичной частью панели. Сейчас можно разместить элементы только над панелью.

= Добавление элемента на панель =
Программно добавлять элемент управления на любую панель, а не только на активную.

= ПодключитьОбработчикИзмененияДанных для табличных данных =
ПодключитьОбработчикИзмененияДанных должен работать и для табличных данных, чтобы можно было узнать, что они изменились, а также что именно в них изменилось - какие строки/ячейки. Желательно вызывать его после изменения каждой ячейки табличного данного.

= Событие открытия форм =
Одна глобальная процедура открытия/создания формы, вызывающаяся при какждом открытии/создании формы. Чтобы можно было обрабатывать события по открытию/созданию форм объектов, у которых нет созданных в конфигураторе форм, например форм списков.

= Отобранные строки =
По аналогии с ВыделенныеСтроки у табличного поля должно быть свойство ОтобранныеСтроки, содержащее отобранные отбором на текущий момент строки.

= Аварийный останов =
Обработка аварийного останова формы по Ctr-Break или ошибке - чтобы можно было закрыть служебные формы, сменить надписи и т.п. - т.е. событие "ПереходВИнтерактивныйРежим". Пока что это можно отследить только в событии "ОбновлениеОтображения".

= Активная форма и активный элемент =
Нужна возможность получить активную форму и активный элемент на ней.

= Присоединенные колонки =
Чтобы в форме к данным табличной части объекта можно было добавлять свои колонки и они связывались бы со строкой, т.е. данные в них хранились в течении жизни формы, а не исчезали.

= Событие активизации формы =
Нужна возможность получения события активизации формы.

= События элемента формы =
Хочется получить список всех событий элементов управления - как возможных, так и имеющихся.

= Событие изменения обработчика события =
Событие, которое вызывалось бы при изменении обработчика события у элементов формы.

= Глобальные расшифровки =
Чтобы при открытии MXL файла в режиме просмотра и щелчка на нем срабатывала некая глобальная процедура расшифровки.

= Командная панель =
Делать невидимыми кнопки командной панели (пока можно сделать только недоступными).

= Масштаб просмотра =
Программно управлять мастштабом показа табличного документа (не масштабом печати, а именно масштабом просмотра)!

= Окошко в интерфейсе =
В интерфейсе возможность создавания полей ввода (выбора), например для быстрого поиска чего-либо по части наименования.


КОНФИГУРАТОР



= Программное конфигурирование  =
Наверно евреи так не были рады манне небесной, как были бы рады 1С-ники возможности программного изменения конфигурации. Мы хотим не обязательно программного доступа к текущей конфигурации базы данных, а хотя бы открытие, модификация и запись cf-файла из встроенного языка или из другого языка программирования через OLE.

Код мог бы выглядеть так:
Конфигурация=Новый ComОбъект(«1s80.Configuration»);
Конфигурация.Open(“”);
Для Каждого Эл Из Конфигурация.Справочники() Цикл
Если Эл.ДлинаКода=4 Тогда
    Эл.ДлинаКода=8;
КонецЕсли;
КонецЦикла;
Если Конфигурация.Модифицированность() Тогда
Конфигурация.Save(“”);
КонецЕсли;


= Выделение латинских букв =
Латинские буквы другим шрифтом (опционально)

= Выгрузка/загрузка объектов конфигурации в файлы. Важно =
Очень важное пожелание: выгрузка/загрузка во внешние файлы всех файлов конфигурации (роли, RLS, формы). Причем формы и права доступа удобно было бы выгружать в XML формате.

= Интеллектуальное обновление конфигурации =
Не все изменения в конфигурации требуют выхода всех пользователей. Например, если изменения касаются только модулей, то достаточно просто обновить соответствующие модули. Пользователям не обязательно выходить.

Также есть претензия к скорости обновления. Если меняется только один модуль, почему перезаписывается весь файл конфигурации?

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

= Мелкие пожелания =
•    Делать недоступной галочку "захватывать рекурсивно" у тех объектов хранилища, которые не могут быть захвачены рекурсивно
•    Вставка через буфер обмена большого количества объектов - выгрузка/загрузка объектов.

= Распределенная разработка и аутсорсинг =
Распределенное "Хранилище конфигурации" можно? Чтобы несколько разработчиков писали код в разных концах земного шара и потом сливали в одно место, все аккуратненько ложилась по своим местам, да еще и с контролем версий. Короче CVS полноценный нужен.

= Полезное CFU =
Хочется выгружать несколько объектов конфигурации в CFU файл так, чтобы при загрузке сохранялись ссылки на объекты конфигурации.

= Умная загрузка измененной конфигурации =
Желательно, чтобы был такой режим загрузки измененной конфигурации, когда объекты сравниваются по идентификаторам объектов, а не по внутренним идентификаторам, а еще лучше у самой конфы устанавливать этот признак, чтобы при загрузке измененной конфигурации она сама использовала правильный режим загрузки.

= Галочка "Захват рекурсивно" =
Желательно, чтобы у объектов, у которых нет подчиненных объектов, при их захвате не появлялась эта галочка, т.е. была недоступной.

= Замена обработки/отчета обработкой из файла =
В режиме хранилища, если захвачен только модуль обработки, 1С заменяет из файла только модуль обработки и никак не предупреждает об этом. Это чревато ошибками. Мелкое замечание.

= Прозрачный веб-доступ =
Реализовать доступ к 1С предприятию через интернет без программирования, как это сделано в Outlook Web-Access.

= Тонкий терминальный клиент =
Сделать встроенный тонкий терминальный клиент, чтобы не платить дополнительно за менеджер терминальных лицензий.

ОТЛАДКА



= Изменение значений переменных =
Есть в VBA – можно в процессе отладки менять значения переменных простых типов.

= Изменение порядка выполнения =
Есть в VBA, удобная вещь – можно перетащить указатель текущей строки на любую строку в рамках текущей функции.

= Режим эмуляции сервера =
Для отладки на локальной машине программиста хочется иметь возможность проверить, как будут скомпилированы модули на сервере, не будет ли ошибок.

= Мягкое прерывание =
Возможность останавливать работу модулей, внешних обработок из отладчика без закрытия среды 1С-Предприятия

= Поиск изменения =
Есть условная точка останова, на которой код останавливается, когда в этой точке контрольное условие выполняется. Я предлагаю создать точку останова, которая будет останавливать выполнение, когда значение некоторой переменной, поля структуры, выражения примет заданное значение. Т.е. точка останова будет указываться не по месту в коде, а будет останавливаться там, где меняются данные. Было бы очень удобно для поиска места изменения данных.

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

= Несколько отладчиков сразу
Почему-то 1С считает, что такая вещь никому не нужна, а вот когда на проекте работают несколько программистов, удобнейшая вещь, тем более что в 77 она была.

= Список Последние файлы =
Если внешнюю обработку или файл не удалось открыть, чтобы он не исчезал из списка "Последние файлы". Очень неудобно при отладке внешних обработок.

= Сохранение настроек при прерывании =
При завершении 1С отладчиком сохранять настройки 1С, которые были сделаны во время его работы.

= Загрузить из файла =
Очень не хватает этой конструкции из 77, которая компилировала модуль из файла.
Можно заменить обращение к файлу обращением к хранилищу, но все равно такая возможность была бы полезной и ускоряла бы отладку.


= Диагностика одинаковых идентификаторов =
Ошибка:
   А.Код=Б.Код; Поле агрегатного объекта Код не найдено.
Выдаваться должно с местом ошибки, в виде:
   А.Код=Б.>>Код; Поле агрегатного объекта Код не найдено.

= Диагностика RLS =
Причина нарушения прав доступа должна раскрываться и описываться по кнопке подробно. Также должна быть переменная с описанием нарушения прав доступа, чтобы программно можно было проанализировать причины нарушения прав доступа.


ОБМЕН ДАННЫМИ



= 1S8 OLE DB =
Не мешало бы сделать интерфейс к 1S8, как к обычной базе данных например через OLE DB или ADO - для доступа к данным 1С из внешнего приложения через SQL-запросы (например из Access). Такой интерфейс - признак взрослого приложения баз данных.

= Обмен в BMP & PDF =
Сделать возможность выгрузки таблиц mxl в bmp/jpg/png и PDF формат – интерактивный и программный.

ПРАВА ДОСТУПА



= Динамический RLS =
Хочется, чтобы права доступа RLS можно было назначать программно перед стартом системы.
А потом их можно зафиксировать и стартовать 1С.

= Проверка доступа без доступа =
Программная проверка, можно ли записать объект без непосредственной записи


= RLS на чтение =
Задача RLS на чтение - показывать пользователю только доступные объекты из базы 1С. Давайте помечтаем и подумаем, каким гибким мог бы быть этот механизм. Предполагается, что читатель ознакомлен с механизмом RLS на чтение. Итак, наш гипотетический механизм работает по алгоритму:

1. При первом использовании для объекта RLS вызывается функция ПолучитьRLS(ТипОбъекта, ИсходныйRLS)
В этой функции ИсходныйRLS, который задан в ролях может быть заменен динамически созданным.
Также для RLS можно указать функцию встроенного языка 1С для дополнительной фильтрации.

2. При необходимости вызывается функция ОбновитьRLS(ТипОбъекта=Неопределено)
Эта функция сбрасывает RLS для заданного типа объекта или для всех объектов. При дальнейшем первом обращении к объекту через RLS будет использован вызов функции ПолучитьRLS.

3. Используется кэш доступа.
При обращении к таблицам объектов (справочников, документов) создается временный вид (кэш), в котором сохраняются обработанные RLS объекты c признаком доступен/недоступен. Если назначена функция дополнительной фильтрации, она вызывается для всех доступных объектов и ее результат также заносится в кэш. При следующем вызове RLS таблица объектов соединяется с таблицей кэша и проверка доступа осуществляется только для отстутствующих в кэше объектов с занесением их в кэш.

Теперь рассмотрим ситуацию с актуальностью кэша. Если права доступа на объект зависят только от объекта, то объект должен удаляться из хэша при изменении объекта.

Однако часто доступность объекта зависит и от других объектов. Например видимость документа зависит от даты редактирования документа, видимость договора может зависить от доступных пользователю организаций. Можно конечно, считать, что эти параметры не меняются в течении сеанса, но могут быть необходимы и динамические зависимости.

Можно подойти двояко к решению этой проблемы:
1. Анализировать на уровне системы все зависимости, которые использует RLS.
2. Следить только за важными объектами системы и при их изменении давать пользователю возможность обновить кэш.

Мы предполагаем второй вариант.

Для любого объекта или типа системы с помощью вызвова НазначитьТриггерКэшаRLS можно назначить функцию-триггер, который вызывается при изменении конкретного объекта или объекта данного типа (например Справочник.Организации).

В качестве объекта может выступать также параметр сеанса и константы.
В функции пользователю доступны функции ОчиститьКэш(Параметр), где  Параметр - конкретный объект или тип объектов (например Справочник.Номенклатура).

Рассмотрим пример.

Пусть в регистре сведений СтатусыКонтрагентов(Контрагент -> Статус) хранятся статусы контрагентов - Работать или НеРаботать, описывающие, работать ли оператору с контрагентом или нет (не работать в силу того, что контрагент задолжал или находится в черном списке). Также дополнительно,
Тогда в начале работы системы мы указываем:

НазначитьТриггерКэшаRLS("РегистрСведений.СтатусыКонтрагентов", "ТриггерRLSРегистрСведенийСтатусыКонтрагентов");


Далее, определяем функцию триггера:


Функция ТриггерRLSРегистрСведенийСтатусыКонтрагентов (…)
    ОчиститьКэш(Запись.Контрагент);
КонецФункции


= Отображение в журналах только доступных элементов =
Хочется, чтобы в журналах отображались только видимые по RLS на чтение документы, а не все документы. Т.к. в 1С права доступа на журналы задаются дополнительно, то приходится дублировать права доступа. Я бы не отказался от галочки для журнала - "Права доступа из прав документов", которая указывала, что в журнале нужно отображать только видимые по RLS документы, а если бы ее не было - работали бы RLS именно на журнал.

= Язык RLS на изменение =
Так как RLS на изменение не требовательны к быстродействию в отличие от RLS на чтение (первые работают с одним объектом, вторые - со всей таблицей), то желательно на выбор в них использвать язык запросов или встроенный язык 1С.

= Два вызова RLS на изменение =
RLS на изменение вызывается дважды - первый раз для записи объекта, хранимой в базе данных, второй раз - для новой, записываемой версии объекта. Должны существовать способы определения, к какой из записей обращается RLS.

= Предудущая версия объекта в RLS на изменение =
В RLS на изменение должна быть доступна предыдущая версия объекта - чтобы можно было например разрешить устанавливать флажок, но запретить его сбрасывать.

ЗАПРОСЫ



= Ошибка 255 таблиц. Важно =
Избавиться от ошибки - в запросе используется более 255 таблиц. Это позволит не напрягаясь работать с составными типами данных.

= Таблицы значений в запросах. Важно =
Чтобы можно было в запросах обращаться к таблицам значений (технически это просто – таблица значений копируется во временную таблицу в базе данных, запрос идет к ней и другим таблицам БД). Такая возможность была в первых релизах 8-ки, затем ее посчитали ненужной и почему-то отменили.

= Комментарии в запросах =
Чтобы в запросах сохранялся текст комментариев.

= Сравнение строк неограниченной длины =
Чтобы в запросах сравнивало строки неограниченной длины. Неужели есть технические проблемы?

= Предопределенные элементы в тексте запроса =
Использовать в тексте запроса предопределенные элементы.

= Борьба с зацикливаниями запросов =
Желательно иметь возможность прервать пользователю выполнение запроса по Ctrl+Break.

= Прогрессор запросов =
Желательно получать информацию о состоянии выполнения запроса от SQL-сервера, чтобы выводить прогрессор выполнения запроса. Возможность прерывания программы во время выполнения запроса по Ctrl+Break.

= Значения в запросах =
Желательно использовать в запросах не только константы даты, строк и чисел, но и предопределенные значения справочников, перечислений и ролей. Значения ролей особенно бы упростило написание RLS.

= Параметры запросов =
Получать список установленных параметров запроса, хотя бы через цикл "Для Каждого".
Не только устанавливать, но и считывать установленные параметры запроса.
Возможно устанавливать параметры из структуры, но не обязательно, такую функцию можно написать на встроенном языке.

= Конкатенация колонок запроса =
Желательная конкатенация колонок запроса, например:
 ВЫБРАТЬ Наименование & Код ИЗ Справочник.Номенклатура


= Мелкие пожелания =
= В запросах - порядковый номер результирующей записи в запросе, возможность сортировки ссылок по GUID, а не только по представлению ссылки.


ЖУРНАЛ РЕГИСТРАЦИИ



= Место хранения журнала регистрации =
Желательно, чтобы журнал регистрации можно было выборочно хранить в файле или в базе данных.

= Управление работой журнала регистрации =
Желательно программное включение/выключение журнала регистрации

= Триггер записи в журнал регистрации =
Желательно наличие события ПриЗаписиВЖурналРегистрации, возможность его включения/выключения и назначения списка событий, при которых это событие вызывается.



Настоящий автор статьи пожелал остаться неизвестным.

Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика