Рекурсомания или интеллигентно ковыряемся в носу:-)

24.06.09

Разработка - Работа с интерфейсом

Рекурсия - как женщина, затратна, но как красива, чертовка :)

И тот, кто найдет в коде цикл, пусть кинет в свой монитор камнем :-)

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
recursion_mania.zip
.1245787035 47,13Kb
180
180 Скачать (1 SM) Купить за 1 850 руб.

Демонстрация рекурсивной работы с ТаблицейЗначений (двухмерный массив, по сути), СпискомЗначений (одномерный массив) и с родителями элемента справочника (типа, дерево можно сказать).

См. также

Работа с интерфейсом Пользователь Платформа 1С v7.7 1C77 Абонемент ($m)

Часто встречающаяся проблема: потерялось Окно сообщений. Обработка исправляет эту "проблему" одним нажатием кнопки. Для обычных пользователей. Не требует программирования. Достаточно запустить обработку и нажать кнопку "Выполнить".

5 стартмани

17.01.2025    338    1    CheBurator    11    

6

Работа с интерфейсом Программист Платформа 1С v7.7 1C77 Абонемент ($m)

Создание и использование на формах в среде 1С 7.7 прогрессбара, индикатора, как в 1С 8.Х для контроля над длительными процессами. Реализовано средствами языка программирования 1С 7.7.

1 стартмани

06.06.2024    865    1    user1416274    17    

2

Работа с интерфейсом Логистика, склад и ТМЦ Системный администратор Программист Пользователь Платформа 1С v7.7 1С:Торговля и склад 7.7 Оптовая торговля, дистрибуция, логистика Управленческий учет Платные (руб)

Решение для разработчика и конечного пользователя для работы с фотографиями номенклатуры: систематизация, хранение, отображение, а также выгрузка на Яндекс-Диск и FTP (кроме версии лайт). Поддерживаются графические форматы: bmp, jpg, gif, tiff, а также png - не поддерживаемый штатными средствами 1С. Выполнено без использования внешних компонент (кроме функции выгрузки на FTP). Поставляется как в виде пустой конфигурации с набором объектов и модулей для работы с фото, так и в виде обновления к 1С:Торговля и склад 7.7. Выполнено в двух версиях: "полная" и "лайт".

2500 руб.

18.10.2022    6022    1    45    

4

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

Обработка с фрагментами кода для программного использования набора цветов из коллекции WebЦвета 1с версии 8+ в 1с версии 77. Требуется предварительное подключение сторонней библиотеки FormEх. Будет полезно программистам 1с 77, 1с 8. Да и вообще при программировании на любом языке при потребности использовать коллекцию цветов WebЦвета.

1 стартмани

30.03.2022    5150    2    igor7777    4    

6

Работа с интерфейсом Программист Платформа 1С v7.7 1C77 Бесплатно (free)

Публикация имеет цель обратить внимание на возможность улучшения интерфейса.

15.12.2021    5036    77    Cерый    13    

8

Работа с интерфейсом Программист Платформа 1С v7.7 1C77 Абонемент ($m)

Простая и удобная внешняя обработка для выбора цвета без применения внешних компонент.

1 стартмани

09.06.2020    7571    4    vap_pig    5    

4

Учет рабочего времени Работа с интерфейсом Программист Бухгалтер Пользователь Платформа 1С v7.7 1C77 Россия Абонемент ($m)

Обработка производственного календаря с возможностью импорта и экспорта xls для 1С 7.7 (7.70.027) без изменения конфигурации.

1 стартмани

18.09.2019    13238    6    Jill    8    

3
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. venger 2124 24.06.09 00:25 Сейчас в теме
(0) Кстати, в процессе наткнулся на такой глючек платформы 7.7 (7.70.023):

Например, если написать так (вы ж понимаете, что это для примера:-):
-----------------
сп=СоздатьОбъект("СписокЗначений");
сп.ДобавитьЗначение("Значение_1");
сп.ДобавитьЗначение("Значение_2");
сп.ТекущаяСтрока(8);
Сообщить("Всего: "+сп.РазмерСписка()+" Текущая: "+сп.ТекущаяСтрока());
-----------------
То, скушает и не подавится, более того, выведет:
-----------------
Всего: 2 Текущая: 8
-----------------

Со строками в ТаблицеЗначений лучше обстоит, но тоже не подавится:
-----------------
тз=СоздатьОбъект("ТаблицаЗначений");
тз.НоваяКолонка("Кол1");
тз.НоваяСтрока();
тз.НоваяСтрока();
тз.НоваяСтрока();
тз.ТекущаяСтрока(2);
Сообщить("Всего: "+тз.КоличествоСтрок()+" Текущая: "+тз.ТекущаяСтрока());
тз.ТекущаяСтрока(8);
Сообщить("Всего: "+тз.КоличествоСтрок()+" Текущая: "+тз.ТекущаяСтрока());
-----------------
Просто скушает, делать ничего не будет (при установке текущей в 8-м), но и не скажет ничего, что печально:-) Т.е. выведет:
-----------------
Всего: 3 Текущая: 2
Всего: 3 Текущая: 2
-----------------

А вот с колонками ТЗ уже как положено:
-----------------
тз=СоздатьОбъект("ТаблицаЗначений");
тз.НоваяКолонка("Кол1");
тз.НоваяСтрока();
тз.НоваяСтрока();
тз.НоваяСтрока();
тз.ТекущаяКолонка(5);
-----------------
Заругается и выдаст ошибку, как положено:
-----------------
тз.ТекущаяКолонка(5);
{Отчет.......}: Номер за пределами значения!
-----------------

Вот такие дела:-)
2. vip 24.06.09 01:17 Сейчас в теме
(1) Вообще-то, если внимательно почитать СП, то метод ТекущаяСтрока() относится к ЭЛЕМЕНТАМ ДИАЛОГА "Список", "Поле со списком" и "Таблица значений".
7. venger 2124 24.06.09 11:21 Сейчас в теме
(2) > метод ТекущаяСтрока() относится к ЭЛЕМЕНТАМ ДИАЛОГА

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

Но, речь еще и в том, что разница с элементами диалога лишь в том, что в СпискеЗначений, если установить текущую строку больше, чем размер списка, отработает, также как с текущей строкой ТЗ, т.е. ниче не сделает, но тихо промолчит, что не гуд:-) А вот со столбцом, все как положено:-)
vinsentfire; +1 Ответить
3. molot 286 24.06.09 01:33 Сейчас в теме
Наглядненько, +

Только в программы - не совсем, кажись, уместно...
4. phsin 183 24.06.09 09:44 Сейчас в теме
Конфигурация Альфа Авто - вся конфигурация построена на рекурсии - в одном месте тронешь в другом тААкое вылезет...
так что с рекурсией шутки плохи, особенно если не ты писал ;)
8. venger 2124 24.06.09 12:10 Сейчас в теме
(4) > Конфигурация Альфа Авто - вся конфигурация построена на рекурсии - в одном месте тронешь в другом тААкое вылезет...

Жесть, это чтоб после долгих безуспешных попыток доработок конфы, всегда звали автора и кланялись ему в ножки:-))))

5. fishca 1259 24.06.09 10:13 Сейчас в теме
По мне так лучше цикл, рекурсия может боком вылезти :(
6. venger 2124 24.06.09 11:00 Сейчас в теме
(5) Вчера поругался с циклом, он до сих пор дуется и не разговаривает со мной:-) Пришлось выкручиваться без него:-)
Yan_Malyakov; +1 Ответить
9. GSoft 2237 24.06.09 13:47 Сейчас в теме
у меня в профайле был пример рекурсии, счаз поковыряюсь и дам ссылку
вот
http://infostart.ru/blogs/156/
http://infostart.ru/projects/827/
10. venger 2124 24.06.09 14:11 Сейчас в теме
(10) Тоже гуд, соберем все рекурсию в одном месте:-)))
Вот http://infostart.ru/projects/3356/
11. Altair777 647 24.06.09 14:26 Сейчас в теме
Для позиционирования на строке ТЗ я предпочитаю использовать ПолучитьСтрокуПоНомеру(<Номер>)
12. venger 2124 24.06.09 17:28 Сейчас в теме
(11) А если это элемент диалога? Ведь когда я пишу функцию, мне по барабану, будет эта ТЗ элементом диалога или создана программно, будет строку выбирать пользователь интерактивно или я буду задавать ее программно, может быть в одном месте так, а в другом так:-))) Но функция ДОЛЖНА быть одна, а не по десять разных на каждый через одно место сделанный метод 1С:-))) Я ж не 1С'ник, чтобы такую НЕ универсальность терпеть:-))))

Вот пример, закинь ТЗ как элемент диалога и запусти такой код:

тз.НоваяКолонка("Кол1");
тз.НоваяСтрока();
тз.НоваяСтрока();
тз.НоваяСтрока();
тз.НоваяСтрока();
тз.НоваяСтрока();
Сообщить("Всего: "+тз.КоличествоСтрок()+" Текущая: "+тз.НомерСтроки);
Сообщить("Всего: "+тз.КоличествоСтрок()+" Текущая: "+тз.ТекущаяСтрока());
тз.ПолучитьСтрокуПоНомеру(3);
Сообщить("Всего: "+тз.КоличествоСтрок()+" Текущая: "+тз.НомерСтроки);
Сообщить("Всего: "+тз.КоличествоСтрок()+" Текущая: "+тз.ТекущаяСтрока());

И знаешь что выведет?
----------------------
Всего: 5 Текущая: 5
Всего: 5 Текущая: 1
Всего: 5 Текущая: 3
Всего: 5 Текущая: 1
----------------------

А теперь выполни тоже, только убери ТЗ с формы диалога и первой строчкой вставь тз = СоздатьОбъект("ТаблицаЗначений");

И выведет уже так:
---------------------
Всего: 5 Текущая: 5
Всего: 5 Текущая: 0
Всего: 5 Текущая: 3
Всего: 5 Текущая: 0
---------------------

И ты понимаешь, в чем прикол, что интерактивный выбор строки пользователем ты можешь узнать одним методом, а программное позиционирование другим:-)

Более того, замени в этом примере тз.ПолучитьСтрокуПоНомеру(3); на тз.ТекущаяСтрока(3); и для программно сформированной ТЗ ты увидишь:
---------------------
Всего: 5 Текущая: 5
Всего: 5 Текущая: 0
Всего: 5 Текущая: 5
Всего: 5 Текущая: 3
---------------------

А для элемента диалога ТЗ:
---------------------
Всего: 5 Текущая: 5
Всего: 5 Текущая: 1
Всего: 5 Текущая: 5
Всего: 5 Текущая: 3
---------------------

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

Короче, где универсальность?:-) Т.е. сегодня я пишу функцию, которая ТЗ как элемент диалога не предполагает, а завтра, если мне нужно тот же алгоритм, но еще и учитывая действия пользователя, то я должен другую писать? Жирно не будет?:-)))
13. СССР 13.08.09 10:20 Сейчас в теме
Оставьте свое сообщение