Проверка зацикливания групп справочников

22.05.12

Разработка - Инструментарий разработчика

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

Скачать исходный код

Наименование Файл Версия Размер
Проверка зацикливания групп справочников
.zip 9,40Kb
128
.zip 9,40Kb 128 Скачать
Пример информационной базы для исправления
.zip 668,69Kb
2
.zip 668,69Kb 2 Скачать

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

Результат  работы  - печатная форма таблицы, с колонками в виде "Код", "Наименование", "Внутреннее представление"
зацикленных групп, а также их родителей :) и колонки для составления схемы подчиненности зацикленных групп.
В печатную форму выводятся только группы, участвующие в замкнутых циклах подчиненности, например:
A=>A ; A=>B=>A ; A=>B=>C=>A. (A=>B означает, что B является родителем A  ). Правильные "ветки" подчиненности,
подсоединенные к циклам, например, "ветка"  "D" :   D=>A=>B=>A из выборки исключаются.

Чтобы исправить замкнутую подчиненность, достаточно разорвать цепочку групп в одном месте - у одной из групп
очистить реквизит "Родитель".  Программа анализирует и рекомендует для этих целей использовать: а) группы, которые
раньше других созданы (соответсвенно, должны иметь по логике более высокий уровень); б) группы, наиболее
удаленные от элементов (справедливо для справочников, где элементы всегда расположены последними по иерархии). 
Цепочки замкнутых групп в отчете разделены пустыми строками. Для очистки родителя одной из групп цепочки нужно нажать
клавишу Enter / кликнуть мышкой на ячейке в строке с исправляемой группой, в колонке "Очистить!!!" .

В прикрепленных файлах - архив с внешним отчетом и архив пример информационной базы с зацикленным справочником

для демонстрации работы отчета.

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

 
// УстРодитель - устанавливаемый родитель для группы справочника
// Спр - переменная, для записи объекта справочника
ПопыткаЗаписиЦиклическойСсылки = 0;
ПопыткаЗаписиПринадлежностиКЦиклу = 0;
ПровРодитель = УстРодитель;
СЗ = СоздатьОбъект("СписокЗначений");
 
Пока ПустоеЗначение(ПровРодитель) = 0 Цикл
Если ПровРодитель = Спр.ТекущийЭлемент() Тогда
   ПопыткаЗаписиЦиклическойСсылки = 1;
   Прервать;
КонецЕсли;                      
Если СЗ.НайтиЗначение(ПровРодитель) > 0 Тогда
   ПопыткаЗаписиПринадлежностиКЦиклу = 1;
  Прервать;
КонецЕсли;
 
 СЗ.ДобавитьЗначение(ПровРодитель);
 ПровРодитель = ПровРодитель.Родитель;
КонецЦикла;
 
Если (ПопыткаЗаписиЦиклическойСсылки   = 0) И 
    (ПопыткаЗаписиПринадлежностиКЦиклу = 0) Тогда
 СпрРодитель = УстРодитель;
 Спр.Записать();
КонецЕсли;
 

 

Перед самым опубликованием, еще раз (с меньшим поисковым фильтром) решил поискать здесь же, подобное:

//infostart.ru/public/78285/

//infostart.ru/public/78737/

//infostart.ru/public/78032/

//infostart.ru/public/78371/

//infostart.ru/public/85714/

//infostart.ru/public/85615/

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

а так... она есть,  и она может быть кому-то полезна.

 

Желаю Вашим базам здоровья! :-)

См. также

Консоль запросов

Инструментарий разработчика Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Консоль запросов к базе SQL, не требующая внешних компонент

10 стартмани

29.04.2015    21662    54    Gvozdod    8    

15

StartManager 1.4 - Развитие альтернативного стартера

Инструментарий разработчика Платформа 1С v7.7 Платформа 1С v8.3 Абонемент ($m)

Очередная редакция альтернативного стартера, являющегося продолжением StartManager 1.3. Спасибо всем, кто присылал свои замечания и пожелания, и тем, кто перечислял финансы на поддержку проекта. С учетом накопленного опыта, стартер был достаточно сильно переработан в плане архитектуры. В основном сделан упор на масштабируемость, для способности программы быстро адаптироваться к расширению предъявляемых требований (т.к. довольно часто просят добавить ту или иную хотелку). Было пересмотрено внешнее оформление, переработан существующий и добавлен новый функционал. В общем можно сказать, что стартер эволюционировал, по сравнению с предыдущей редакцией. Однако пока не всё реализовано, что планировалось, поэтому еще есть куда развиваться в плане функциональности.

1 стартмани

23.04.2014    166260    1868    Alexoniq    1596    

496

Tray Informer

Инструментарий разработчика Платформа 1С v7.7 Платформа 1С v8.3 Россия Абонемент ($m)

Согласитесь, что окно стандартное сообщений в 1С иногда приносит больше неудобств, чем пользы. И тем более разные "Предупредить"... Что с этим окном только не делают! Его отцепают от формы, делают маленьким, умудряются спрятать за границы экрана. А потом звонят программистам с претензией, что документ почему-то не проводится, отя ничего и не пишет. У вас такого не было? А вот у нас было и не раз )))

1 стартмани

04.09.2013    32982    61    O-Planet    78    

49

Изменение структуры баз 1С 7.7 без долгой реструктуризации. Часть 1. Справочники

Инструментарий разработчика Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

На днях встретил вопрос на форуме про возможность внесения изменений в конфигурацию без долгого сохранения в рабочей базе большого объема. Вот решил поделиться опытом, как это делал я. База у нас была объемом порядка 120 Гб. К базе обращался сайт в режиме 24/7, поэтому важно было быстро сохранять изменения и желательно без последующего монопольного запуска для восстановления индексов и процедур и без отключения пользователей от базы. Это первая часть статьи и посвящена она справочникам. С одной стороны - это самый простой объект, с другой стороны, именно про справочник спрашивалось на форуме. Если статья будет востребована, то я напишу аналогичные про документы, регистры и может еще что.

1 стартмани

13.08.2013    21279    Reptile    5    

35

v7.7 1CDialogControls: Инструмент в помощь разработчику на 7.7.

Инструментарий разработчика Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Давным давно, когда я еще плотно писал на 7.7 работа с формами была мучительной и неудобной. Приходилось каждый элемент выкладывать, выравнивать на форме ручками, прописывать код в модуле. Иногда при разработке очередной формы приходила в голову мысль: "а где-то я уже похожее делал..." и начинался мучительный поиск подходящего кода в своих запасах........

1 стартмани

21.02.2013    18074    36    MarSeN    14    

16

[Разработчику] Любая таблица значений в OLAP

Инструментарий разработчика Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Анализируем различные данные в 1С, используя OLAP-технологии со всеми прелестями. Т.е. наглядное отображение данных, быстрые расчеты, горизонтальные и вертикальные группировки любой вложенности, удобная фильтрация, Drag'n'Drop и ещё много приятных вещей от MS. Обработка на входе принимает практически любую таблицу значений (ТЗ в которой колонкам указаны типы значений, строка, число и т.п.), на выходе имеем на форме 1С сводную таблицу и график по этой ТЗ, с которой работаем, как и в Excel со сводной таблицей и диаграммой. Взял за основу разработку «OLAP Анализ счёта» ( http://infostart.ru/public/14964/ ) от JohnyDeath и переделал под любую ТЗ. Опционально используется «Прогресс бар для 1С 77» (http://infostart.ru/public/14061/ ) от Gmix.

1 стартмани

21.12.2012    36140    51    venger    7    

23

Библиотека кода 1С 7.7 (накопленная за 8 лет)

Инструментарий разработчика Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Весь код на 1С 7.7, собранный для повторного использования за 8 лет работы.

10 стартмани

25.11.2012    35049    248    adhocprog    51    

70
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. armeec 2 23.05.12 10:50 Сейчас в теме
А можно пример справочника с "зацикливанием"? И самое главное - как такой эффект был получен?
2. Shaman100M 1150 23.05.12 13:08 Сейчас в теме
(1) Вторым файлом идет архив информационной базы со справочником "Пример".
Такой эффект в "примере" был получен искусственно, - программно группа верхнего уровня
была подчинена "дочерней" группе нижнего уровня. В реальной ситуации думаю, что
такое может произойти при интенсивном программном обмене данных справочника между ИБ и
одновременном интерактивном изменении иерархии того же справочника. Ну и естественно,
несовершенство программного кода.
Оставьте свое сообщение