Структура подчиненности. Правильное отображение через граф.
Разработка - Работа с интерфейсом
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Обработка может быть использована как пример того как формировать программно Графическую схему.
Работает на стандартных конфигурациях, проверял на нескольких, на остальные скорее всего тоже работает.
Для работы с графической схемой рекомендуется:
Проверено на следующих конфигурациях и релизах:
- Бухгалтерия предприятия, редакция 2.0, релизы 2.0.67.24, 2.0.67.9
- Бухгалтерия предприятия, редакция 3.0, релизы 3.0.176.38
- Управление торговлей, редакция 11, релизы 11.5.25.61
Вступайте в нашу телеграмм-группу Инфостарт
Графическая схема Структура подчиненности Дерево подчиненности
См. также
Работа с интерфейсом Анализ учета Мониторинг 1С:Предприятие 8 1С 8.3 1C:Бухгалтерия 1С:Бухгалтерия 3.0 1С:ERP Управление предприятием 2 1С:Управление холдингом 1С:Зарплата и Управление Персоналом 3.x 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 11 Платные (руб)
Создайте свой функциональный интерфейс в любой конфигурации 1С с помощью расширения Infostart Dashboard. Настраивайте панели виджетов с метриками, индикаторами и показателями на начальном экране. Узнайте возможность внедрения подсистемы у себя в конфигурации с помощью бесплатной обработки "Анализ внедрения подсистемы 1С Infostart Dashboard"!
31720 руб.
27.03.2025 92205 69 44
Консолидация данных Работа с интерфейсом Разработчик Пользователь 1С:Предприятие 8 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 1C:ERP Узбекистан Беларусь Кыргызстан Россия Казахстан Платные (руб)
Знакомая ситуация? Пользователи, особенно менеджеры, уверены: отборов много не бывает. Идут пожелания добавить в форму списка еще один быстрый фильтр, еще два, еще пять... В итоге интерфейс превращается в нагромождение полей отбора, а потребность в «самом главном» отборе, который «вот прямо сейчас нужен», все равно не закрыта. Универсальное расширение, которое решает эту проблему элегантно и технологично. С его помощью в любую форму списка можно легко добавить панель настраиваемых кнопок-закладок, каждая из которых применяет сложный фильтр-запрос, а так же показывает актуальное количество элементов в реальном времени.
6088 руб.
17.10.2025 3632 3 0
Разработка Инструментарий разработчика Работа с интерфейсом Адаптация типовых решений Нейросети 1C:Бухгалтерия 1C:ERP 1С:ЗУП 1С:КА 1С:УНФ 1С:УТ 1С:Розница 1С:ДО 1С:ERP Управление предприятием 2 Платные (руб)
Разработка "Дизайнер форм 1С" реализована в виде расширения 1С и является универсальным инструментом для разработки прототипа форм с целью демонстраций, технических заданий и т.д. Без участия разработчика с возможностью экспорта в файл внешней обработки и генерации формы используя искусственный интеллект.
36600 руб.
28.08.2025 10297 2 2
Работа с интерфейсом Разработчик Стажер 1С:Предприятие 8 Бесплатно (free)
Это инструкция по дизайну форм в среде 1С. Гайд охватывает рекомендации и стандарты для оптимизации пользовательского интерфейса. В гайде содержатся указания по использованию элементов интерфейса, включая как основные, так и продвинутые аспекты. Предоставляются также примеры и антипримеры для наглядного понимания принципов дизайна
20.08.2024 57310 mrXoxot 44
Работа с интерфейсом Разработчик 1С:Предприятие 8 Бесплатно (free)
Пример простого и симпатичного прогресс-бара в динамическом списке, без картинок, используя редактирование запроса.
27.05.2024 29960 smielka 39
Инструментарий разработчика Работа с интерфейсом Разработчик 1С 8.3 Абонемент ($m)
Подходит для создания web-страниц для замены управляемых форм 1С, красивых отчетов, интерфейса мобильного приложения на платформе 1С и для простых страниц веб-сайтов.
1 стартмани
10.04.2023 19420 190 acces969 31
Работа с интерфейсом Разработчик 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)
Питничная фантазия на возможности в разработке интерфейсов формы с помощью Платформы 1С - делаем свою подсказку. Публикация содержит готовую библиотеку программного формирования данной подсказки.
12.08.2022 16908 top_1c 39
Работа с интерфейсом Разработчик 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)
"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.
1 стартмани
05.07.2022 17927 kalyaka 8
Замер:
Результат:
База - переделанная УТ, файловая, размер 7,5Гб
Для сравнения тоже с типовым механизмом:
Замер:
Результат:
По направлению стрелок - ну совсем непонятно...
По логике ИЗ заказа сделана РН - следовательно:
Заказ --> РН, а у Вас наоборот (((
А вот насчет производительности не понятно, я мерил у меня формируется очень быстро.
Да а зачем через диспетчер закрывали, неужто ctrl+break не помог? В коде прерывание пользователя прописано.
1. Отсортированы по дате
2. Стрелка показывает - начало где была ссылка, конец - на какой документ ссылка
И это естественно.
(5) Кому как, мне вот так больше нравится ) По типовой я чего то часто не допру, что там и на что ссылается.
(6) Посмотреть бы что она делает в отладчике, честно скажу на УПП не проверял, только на УТ и бухгалтерии.
{Форма.Форма(137)}: Ошибка при вызове метода контекста (Выполнить): Ошибка выполнения запроса "Построенный запрос к СУБД использует слишком много таблиц. Допустимо не более 256.
Microsoft OLE DB Provider for SQL Server: Too many table names in the query. The maximum allowable is 256.
HRESULT=80040E14, HRESULT=80040E14, SQLSrvr: Error state=1, Severity=F, native=102, line=2215
SQLSrvr: Error state=1, Severity=F, native=106, line=1858
"
лТзПодчиненные=лЗапрос.Выполнить().Выгрузить();
по причине:
Ошибка выполнения запроса "Построенный запрос к СУБД использует слишком много таблиц. Допустимо не более 256.
Microsoft OLE DB Provider for SQL Server: Too many table names in the query. The maximum allowable is 256.
HRESULT=80040E14, HRESULT=80040E14, SQLSrvr: Error state=1, Severity=F, native=102, line=2215
SQLSrvr: Error state=1, Severity=F, native=106, line=1858
"
по причине:
Построенный запрос к СУБД использует слишком много таблиц. Допустимо не более 256.
Microsoft OLE DB Provider for SQL Server: Too many table names in the query. The maximum allowable is 256.
HRESULT=80040E14, HRESULT=80040E14, SQLSrvr: Error state=1, Severity=F, native=102, line=2215
SQLSrvr: Error state=1, Severity=F, native=106, line=1858
"ВЫБРАТЬ
| &Ссылка КАК Документ,
| СвязанныеДокументы.Ссылка КАК ДокументСвязанный
|ИЗ
| КритерийОтбора."+лИмя+"(&Ссылка) КАК СвязанныеДокументы";
Видимо 1с его хитро разворачивает, исправил код на вот этот:
лМассивСвязанныхДокументов=КритерииОтбора[лИмя].Найти(пДокСсылка);
Теперь должно работать.
Но вот Ваш код мне разрывает мозг... )))) без обид ;).
Сразу видно что не первый день кодите, но какая же... нехороший человек научил Вас код так набивать? Может быть все таки придерживаться правил и уважать братьев по цеху?
Не поленился -скачал.
А тут всего лишь нет комментариев и выделения пустыми строками.
"Если" и "цикл" пишутся в одну строку.
Такую причуду я встречал не раз и не у последних программистов.
Очевидно ,им важнее своё удобство , а не что подумает кто-то.
У некоторых эта причуда проходит , у некоторых нет.
Автору : исправьте ошибку при пустом реквизите ДокументСсылка нажатие кнопки "Обновить" вызывает ошибку .
Почему он такой:
Принят максимально линейный код. Т.е.
Если пЭлемент.ТекущийЭлемент=Неопределено Тогда Возврат; КонецЕсли;
И дальше код идет на той же строке без отступа, внимательнее посмотрите, в коде очень мало уровней вложенности. Понятно что если писать так, то нет смысла переносить "возврат" на следующую строку.
Что же по комментариям - я считаю что код должен комментировать себя, у уважаемой фирмы 1с я практически не встречал полезных комментариев, хотя впереди каждой процедуры пишут какую то хрень, которая и так понятна из кода.
Так же в коде соблюдается наш принцип - 1 процедура занимает не более 1 экрана. Что позволяет даже при сложном и компактном коде все таки понять чем же она занимается.
Код сложный, но сложен он тем что 1 строкой он делает гораздо больше чем делает 1 строкой код из типовых конфигураций 1с.
Ошибку поправлю.
Термин "причуда" был употреблен с позиции 1с-ника , пишущего для других
1с-ников и ориентирующегося , естественно, на стиль типовых конфигураций 1с.
Префиксы "м","л","п" - определяющие характер переменных, процедур и функций - следует однозначно поддержать . В типовых конфигурациях разбираться в больших процедурах неудобно без этих префиксов тяжело.
Кучу мелких и понятнейших методов - это здорово, я сам так пишу.
Единственная претензия все-таки к однострочному
Если Условие Тогда Возврат Результат; КонецЕсли
ИМХО в данном случае все-таки важно, чтобы четко было видно, что выполняется граничное условие и какая выполняется обработка для этого случая, развернутый вариант все-таки поудобнее читать и сопровождать.
Если Условие Тогда Возврат Результат; КонецЕсли
На самом деле это очень удобно (имхо), к тому же уменьшает размер процедуры, что позволяет видеть на экране всю процедуру. (все конечно имхо, но когда к такому привыкаешь отказаться от подобного стиля уже невозможно)
1. Для меня длинные строки не удобны для чтения, так как у меня не только код на экране...
2. Код без пробелов и разделителей сливается в одну кашицу... и хоть она и влезает на 1 страницу, но е
Ну все же наверное нужно сказать что не весь код более читабельный, некоторые особо перловые процедуры от 1с занимают несколько десятков страниц, это конечно вырожденный случай. Но мне явно проще когда всю или почти всю процедуру я вижу.
1. Да к этому стилю надо привыкать. Тут есть плюсы и минусы. Я привык к нему за полгода.
2. Согласен. Иногда кстати я выделяю переводом строки особенно важные блоки. Но так как делает программеры в 1с - а они выделяют разделителями все, в этом смысла я не вижу. По сути не выделять ничего разделителями или выделять разделителями все, одно и тоже, только в первом случае процедура умещается на экран а во втором случае надо листать.
3. ИМХО 70 % комментариев там ни о чем. По моему мнению комментарии нужны только тогда когда имена процедур и переменных не смогут сказать о том что происходит в коде, но комментариев нужно избегать.
4. У меня с этим полный порядок. Я пишу со своей строгой логикой, конфигурация полностью поддерживается мной, если бы мне код в ней казался бы нечитабельным (а там его кстати очень много), то я просто не смог бы развивать эту конфгурацию.
Кстати да )
3. Иногда если бы не было комментариев к строкам в 1С я бы потратил на разбор кода не 1 час а 4 часа...
4. Проведите эксперимент... откройте свой код который писали год назад и ни открывали не разу... интересно насколько он Вам покажеться читабельным
Кстати маленький нюанс для создания уникальных имен для временных файлов можно использовать функцию ПолучитьИмяВременногоФайла(<Расширение>)
P.S. Это все ИМХО если Вашей команде так удобно то не вопрос, я просто высказал личное мнение...
Но стиль оформления программы - не выдумка автора, а стиль , проверенный в других языках , чуть более распространенных в мире , чем 1с.
Вот что нужно учитывать , критикуя автора темы.
некоторых СУБД (FOXPRO), причем рекомендуется давно (задолго до появления 1с 77). У 1с тут ,как обычно, свой подход , не "субэдэшный" .
У меня твердое убеждение , что разработчики еще языка 77 ходили в майках с надписью "Бэйсик forever !" .
(29) Каких языках? я видимо не встречался с этими языками,хотя они более распространены чем 1С.... И в каком из языков поощряется отсутствие комментариев, я вообще не знаю...
Есть определенные стандарты для 1С о чем говорилось в (22) всем известные и большинством используемые, их тоже не дураки придумывали
Если каждый будет выдумывать свой стандарт или переносить с других языков, то это сродни диалектам одного языка. По этому часто западный украинец не понимает восточного. Вот что нужно учитывать критикуя критику ;)
Речь шла про FOXPRO , Субд чуть более распространённую чем 1с.
Имелось ввиду только именование переменных с двумя префиксами.
Одностроковый же стиль для написания операторов выбора и цикла
я встречал также в Паскале .
Паскаль тоже распространен чуть более чем 1с.
Что касается отсутствия комментариев - то это плохо в любом языке, что бы ни писал автор темы.
> Имелось ввиду только именование переменных с двумя префиксами.
1C вообще то, по моему, рекомендует наиболее полно писать наименование переменных (то есть не тз..., а ТаблицаЗначений...) другое дело кому то лень писать так (а кто то не считает нужным, потому что вроде и так понятно)...
> Одностроковый же стиль для написания операторов выбора и цикла
я встречал также в Паскале
Ну я встречал одностроковый стиль для написания операторов выбора и цикла и в 1С ;)... но код на паскале который я видел (признаюсь видел я его не много), что то не запомнился мне этой особенностью....
P.S. Скорей бы вымер уже FOXPRO, а то я уже устал с ним бороться.... ИМХО...
(32) Вымрет то он может и вымрет, а вот стиль останется, я например никогда и не писал на фоксе (лабы в универе не в счет)
Собсно по поводу комментов к процедурам/функциям... есть у 1С-негоф ИМХО очень замечательная вещь - описание параметров, независимо от того понятны они или нет:
// Проверяет наличие требуемых данных в источнике и Формирует таблицу значений
//
// Параметры
// Источник – ТаблицаЗначений или ТабличнаяЧасть или КоллекцияСтрокДереваЗначений с исходными данными
//
// Реквизиты – структура – Структура реквизитов.
// Ключ - Наименование колонки в источнике
// Значение - Наименование колонки в получаемой ТЗ, если значение опущено - приравнивается ключу.
// ПолучитьНомерСтрокиДокумента - булево
// Используется только при выгрузке из табличной части документа.
// В формируемой таблице создает новую колонку "НомерСтрокиДокумента"
// и заполняет её реальными номерами строк
//
// КоллекцияКолонокДереваЗначений - только для коллекции строк дерева значений.
//
// Возвращаемое значение:
// Таблица значений или Неопределено (если не хватает реквизитов)
//
Функция СформироватьТаблицуЗначений(Источник,Реквизиты=Неопределено,ПолучитьНомерСтрокиДокумента = ложь,ФормироватьОтстутствующиеКолонки=Ложь,КоллекцияКолонокДереваЗначений=Неопределено) экспорт
ПоказатьИмея такие комменты перед процедурой/функцией намного легче писать вызовы... не надо лопатить код (хоть он и умещается на 1 странице). Ну и естественно ежели оно тебе не надо - в свернутом виде занимает 1 строку...
В связи с этим принципом можно придумывать себе стиль с одним, двумя префиксами и т.д.
2. Поэтому лично я редко пишу комменты, лучше юзать правильные имена методов и переменных, не бояться править код, чаще использовать тестирование.
Перем АктивныйЭлемент;
//...
Процедура ПолеГрафическойСхемыПриАктивизации(Элемент)
УстановитьЦвет(АктивныйЭлемент, ЦветаСтиля.ЦветРамки);
АктивныйЭлемент = Элемент.ТекущийЭлемент;
УстановитьЦвет(АктивныйЭлемент, WebЦвета.Черный);
КонецПроцедуры
Процедура УстановитьЦвет(Элемент, Цвет)
Если ТипЗнч(Элемент) = Тип("ЭлементГрафическойСхемыДекоративнаяЛиния") Тогда
Элемент.ЦветЛинии = Цвет;
ИначеЕсли ТипЗнч(Элемент) = Тип("ЭлементГрафическойСхемыДействие") Тогда
Элемент.ЦветРамки = Цвет;
КонецЕсли;
КонецПроцедуры
Так же ТолькоПросмотр графической схемы, на мой взгляд, по умолчанию должен = Истина, и завязать его на кнопку с пометкой.
Ибо когда граф получился на 3 страницы - офигенно весело сролиться вверх-вниз, пытаясь не потерять линию. :)
С точки зрения кодирования на мой взгляд лучше было выделить некоторые блоки и называть ф-ции примерно так:
ВыводКвадратВывести
ВыводЛинияВывести
ВыводФигурыСоединить
ЗаписьКвадратСохранить
ЗаписьКвадратСохранитьСоСвзяанными
тогда в тексте было бы проще ориентироваться и дорабатывать
Собсно по поводу комментов к процедурам/функциям... есть у 1С-негоф ИМХО очень замечательная вещь - описание параметров, независимо от того понятны они или нет:
Да бывают комментарии и полезные, в любом правиле есть исключения.
Стрелки переделаю. По поводу скорости посмотрю, переделаю.
Процедура УдалитьПовторяющиесяСтроки()
УжеВТЧ = Новый Соответствие;
КолвоСтрокТЧ = СвязьДокументов.Количество();
Для ОбратныйИндекс = 1 По КолвоСтрокТЧ Цикл
СтрокаТЧ = СвязьДокументов[КолвоСтрокТЧ - ОбратныйИндекс];
Если УжеВТЧ[СтрокаТЧ.Документ] = СтрокаТЧ.ДокументСвязанный Тогда
СвязьДокументов.Удалить(КолвоСтрокТЧ - ОбратныйИндекс);
Иначе
УжеВТЧ[СтрокаТЧ.Документ] = СтрокаТЧ.ДокументСвязанный;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Иногда граф получается слишком большим. Неплохо бы добавить возможность исключения документов. Самый простой вид фильтра, например, если смотрим связи документа ПоступлениеТоваровУслуг, добавить флажок "кроме других документов ПоступлениеТоваровУслуг". Можно, конечно, реализовать процедурой, аналогичной вышеприведенной, можно и немного покопаться для увеличения быстродействия.
Обработка не хотела работать с задачами и бизнес процессами. Сказал чтобы пропускала их. Начала строить дерево, но ничего не построила. Работала примерно два часа и упала :-(
Жаль. Попробовать не удалось. Идея хорошая.
{Форма.Форма(122,25)}: Переменная не определена (ОбщегоНазначения)
лСтруктураПутьКДанным=<<?>>ОбщегоНазначения.РазобратьПутьКОбъектуМетаданных(лЭлементСостава.ПолноеИмя());
Функция РазобратьПутьКОбъектуМетаданных(ПутьКДанным,мКэшПраваДоступаКМетаданным,МетаданныеДокументы) Экспорт
Структура = Новый Структура;
СоответствиеИмен = Новый Массив();
СоответствиеИмен.Добавить("ТипОбъекта");
СоответствиеИмен.Добавить("ВидОбъекта");
СоответствиеИмен.Добавить("ПутьКДанным");
СоответствиеИмен.Добавить("ИмяТаблЧасти");
СоответствиеИмен.Добавить("ИмяРеквизита");
Для индекс = 1 по 3 Цикл
Точка = Найти(ПутьКДанным, ".");
ТекущееЗначение = Лев(ПутьКДанным, Точка-1);
Структура.Вставить(СоответствиеИмен[индекс-1], ТекущееЗначение);
ПутьКДанным = Сред(ПутьКДанным, Точка+1);
КонецЦикла;
ПутьКДанным = СтрЗаменить(ПутьКДанным, "Реквизит.", "");
Если Структура.ПутьКДанным = "ТабличнаяЧасть" Тогда
Для индекс = 4 по 5 Цикл
Точка = Найти(ПутьКДанным, ".");
Если Точка = 0 Тогда
ТекущееЗначение = ПутьКДанным;
Иначе
ТекущееЗначение = Лев(ПутьКДанным, Точка-1);
КонецЕсли;
Структура.Вставить(СоответствиеИмен[индекс-1], ТекущееЗначение);
ПутьКДанным = Сред(ПутьКДанным, Точка+1);
КонецЦикла;
Иначе
Структура.Вставить(СоответствиеИмен[3], "");
Структура.Вставить(СоответствиеИмен[4], ПутьКДанным);
КонецЕсли;
Возврат Структура;
КонецФункции // РазобратьПутьКОбъектуМетаданных()
Чуть позже сам вставлю ее в обработку. Надо бы отвязываться от стандарта. Да в конфигурации все равно должен быть критерий отбора для перебора подчиненных документов, с именами: СвязанныеДокументы или СтруктураПодчиненности
Убрал возможность редактировать схему, убил ссылку внизу окна, добавив на ее место панель с кнопкой закрыть, немного по перемещал выравнивающие линии, потом переименовал реквизит "ДокументСсылка" в "СсылкаНаОбъект" и добавил в модуле обработки следующую процедурку:
Функция Печать() Экспорт
ПолучитьФорму("Форма").Открыть();
Возврат Неопределено;
КонецФункции // ПечатьПолучилась таки еще и внешняя печатная форма. Вот только думаю приклепать или нет авторегистрацию ко всем документам конфигурации как это делается в альтернативном решении
{Форма.ФормаО.Форма(328)}: Ошибка при вызове метода контекста (ЗначениеИзФайла)
лНастройкиТипы = ЗначениеИзФайла(КаталогВременныхФайлов() + "СтруктураПодчиненностиНастройкиТипы");
по причине:
Ошибка преобразования
Мне, как фанату Макконела, код во многом нравится. Небольшие цельные методы, самодокументируемые имена, все класс.
Сбивают с толку префиксы. Вот эти "п-л-м". Где-то я, вроде, читал что об эти префиксы много копий поломали в свое время и решили не использовать во многих случаях в других языках. Ну, то не вспомню уже где.
И еще не хватает более общей структуры. Не зря же есть рекомендованная "структура модуля". Можно было бы как-то выделить блоками - это вспомогательные, это основная логика, это отрисовка.
А вообще я считаю что хорошего программиста определяет то как он пишет и то как четко он следует своим принципам.
Можно кстати по структуре модуля? Что за рекомендованная?
Построю DOT файл по структуре подчиненности, скормлю graphwiz-у, проанализирую результат, переведу его в xml файл понятный для ОптимаСофт:Схемы и получу интерактивный граф.
Кому интересно ?
заказ поставщику
и приходники
с поступлениями
И что платная что не платная обработки одинаковые
может я чего-то не понял?
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 20369
Создание 11.06.09 12:39
Обновление 14.05.26 19:04
Просмотры 44086
Загрузки 1811
Рейтинг
95
Комментарии 93
Код открыт Да
Рубрики Работа с интерфейсом
Кому Разработчик
Тип файла Внешняя обработка (ert,epf)
Платформа 1С:Предприятие 8
Конфигурация Универсальные
Операционная система Не имеет значения
Страна Россия
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Абонемент ($m)