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

24.06.09

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

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

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

Скачать файлы

Наименование Файл Версия Размер
recursion_mania.zip
.1245787035 47,13Kb
180
.1245787035 47,13Kb 180 Скачать

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

См. также

1С:Фото номенклатуры 7.7 - решение для работы с фотографиями номенклатуры в 1С:7.7 (включая формат PNG)

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

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

5000 руб.

18.10.2022    5160    1    45    

3

WebЦвета для 1с77 FormEx

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

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

1 стартмани

30.03.2022    4543    2    igor7777    4    

5

К привязкам элементов форм (1С 7.7, FormEx)

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

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

15.12.2021    4465    62    Cерый    13    

6

Выбор цвета для 1С 7.7

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

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

1 стартмани

09.06.2020    7025    3    vap_pig    5    

3

Производственный календарь для 1С 7.7

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

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

1 стартмани

18.09.2019    12580    6    Jill    8    

3

Альтернативная обработка "Выбор периода"

Работа с интерфейсом Оперативный учет 7.7 1С:Торговля и склад 7.7 Абонемент ($m)

Альтернативная обработка ввода периода для 1С 7.7.

1 стартмани

27.03.2019    6588    3    v.a.n-    11    

2

Несколько табличных частей в 1С:7.7 - это просто

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

При программировании на платформе V7 достаточно часто возникает задача создать несколько табличных частей документа (или справочника). Традиционно эта задача имеет несколько решений..

1 стартмани

01.05.2018    22420    27    Gkmy    11    

5
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. venger 2121 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 2121 24.06.09 11:21 Сейчас в теме
(2) > метод ТекущаяСтрока() относится к ЭЛЕМЕНТАМ ДИАЛОГА

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

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

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

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

5. fishca 1254 24.06.09 10:13 Сейчас в теме
По мне так лучше цикл, рекурсия может боком вылезти :(
6. venger 2121 24.06.09 11:00 Сейчас в теме
(5) Вчера поругался с циклом, он до сих пор дуется и не разговаривает со мной:-) Пришлось выкручиваться без него:-)
Yan_Malyakov; +1 Ответить
9. GSoft 2235 24.06.09 13:47 Сейчас в теме
у меня в профайле был пример рекурсии, счаз поковыряюсь и дам ссылку
вот
http://infostart.ru/blogs/156/
http://infostart.ru/projects/827/
10. venger 2121 24.06.09 14:11 Сейчас в теме
(10) Тоже гуд, соберем все рекурсию в одном месте:-)))
Вот http://infostart.ru/projects/3356/
11. Altair777 644 24.06.09 14:26 Сейчас в теме
Для позиционирования на строке ТЗ я предпочитаю использовать ПолучитьСтрокуПоНомеру(<Номер>)
12. venger 2121 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 Сейчас в теме
Оставьте свое сообщение