1с 77 посмотреть в отладке список значений
СписокЗначений — это программная коллекция элементов, содержащих значения произвольного типа и их строковые представления. Каждому элементу списка значений присваивается целочисленный номер — индекс, начинающийся с единицы. В отличие от массива, список значений является динамическим, т.е. элементы можно добавлять и удалять.
Список значений используется в двух случаях:
- При работе с формами: при размещении на форме элементов управления типа Список и ПолеСоСписком , они автоматически связываются с объектом типа СписокЗначений ;
- При работе с кодом: для хранения каких-либо расширяемых списочных данных вы создаете нужное количество объектов типа СписокЗначений ;
Хочется отметить, что объекты типа СписокЗначений не хранятся в информационной базе.
Создание списка значений
Как и все объекты агрегатного типа, список значений создается с помощью специальной функции СоздатьОбъект() встроенного языка:
Инициализация элементов списка значений
Каждый элемент списка значений характеризуется следующими свойствами:
- Значение — само значение;
- Представление — строковое представление значения;
- Пометка — числовое значение, означающее, что данный элемент отмечен в списке;
По умолчанию, список значений создается пустым. Для добавления нового элемента списка значений, используется метод ДобавитьЗначение() объекта:
Обратите внимание, что вместе со значением Вы можете указать его строковое представление.
Манипуляция элементами списка
Над элементами списка значений возможны различные действия, включая вставку новых элементов, сортировку, изменение и удаление существующих.
Вставка новых значений возможна в произвольное место списка. Для этого используется метод ВставитьЗначение():
Для получения значения элемента списка по номеру используется метод ПолучитьЗначение() объекта:
Удаление элементов списка производится с помощью метода УдалитьЗначение():
Интерактивные функции
Объект СписокЗначений имеет несколько методов, позволяющих взаимодействовать с пользователем. Например, с помощью метода ВыбратьЗначение() можно предложить пользователю выбрать одно из значений:
Также, можно предложить пользователю отметить одно или несколько элементов списка. Для этого используется метод ОтметитьЗначения(), который выводит список с пометками (checkboxes):
Найти все отмеченные пользователем значения можно, используя перебор элементов в цикле, и метод Пометка(), который возвращает статус пометки элемента:
Перебор элементов списка значений
Для перебора (обхода) всех элементов списка значений обычно используется оператор цикла Для:
Форум
Создание объекта СписокЗначений
Список значений - это аналог одномерного массива в 1С, который предназначен для хранения и обработки промежуточных данных, возникающих в процессе работы программы. Объект "Список значений" имеет множество полезных возможностей и работает очень быстро. Следует учитывать, что в языке 1С есть и одномерные массивы в том смысле, как это принято в других языках программирования (Перем мас[10]). Список значений создается в памяти и не сохраняется в базе данных, т.е. это временный набор данных.
Добавление значений в список
//у каждого значения в СпискеЗначений есть экранное представление
//если оно не указано, то используется стандартное строковое представление объекта
СписокЗнач.ДобавитьЗначение("Иванов Иван Иванович");
СписокЗнач.ДобавитьЗначение(Сотрудник);
СписокЗнач.ДобавитьЗначение(1,"Значение №1");
СписокЗнач.УстановитьЗначение(3,3,"Значение №3"); //установить новое значение и представление 3-й позиции
Перебор списка значений
стр = "";
Для Номер = 1 По СписокЗнач.РазмерСписка() Цикл
. значение = СписокЗнач.ПолучитьЗначение(Номер, стр); //получить значение и представление
. Сообщить(значение + ", " + стр);
КонецЦикла;
Сортировка списка значений
//сортировать по значению
СписокЗнач.Сортировать(); //по возрастанию
СписокЗнач.Сортировать(1); //по убыванию
//сортировать по представлению
СписокЗнач.СортироватьПоПредставлению(); //по возрастанию
СписокЗнач.СортироватьПоПредставлению(1); //по убыванию
Поиск значения в списке
//поиск по значению
Синтаксис: НайтиЗначение()
Возвращает номер позиции списка, в которой найдено значение или 0, если не найдено
номстр = СписокЗнач.НайтиЗначение (Сотрудник);
//проверка вхождения значения в список
//работает очень быстро, если между проверками список не изменяется.
//если передается элемент справочника, а в списке хранятся группы справочника
//тогда проверяется вхождение элемента справочника в группу
Если СписокЗнач.Принадлежит(Сотрудник)=1 Тогда
.
КонецЕсли;
Удаление значений из списка
СписокЗнач.УдалитьВсе(); //очистить список значений
//удаляет значения из указанной позиции
СписокЗнач.УдалитьЗначение(откуда, [сколько]);
Список значений как элемент диалога
Список значений может использоваться в экранных формах как элемент диалога с пользователем.
//установить курсор на указанную строку или можно узнать, где находится курсор.
ТекСтрока = СписокЗнач.ТекущаяСтрока(НовСтрока);
//список значений в диалоге может иметь пометки (флажки)
пометка = СписокЗнач.Пометка(Позиция); //прочитать пометку у значения списка
СписокЗнач.Пометка(Позиция,1); //установить пометку у значения списка
СписокЗнач.Пометка(Позиция,0); //снять пометку у значения списка
Выгрузка и загрузка списка значений
//выгрузка в другой список значений или таблицу значений
Синтаксис: Выгрузить(,,)
СписокЗнач.Выгрузить(НовыйСписок,1,10); //выгрузить первые 10 значений
//выгрузка списка значений в строку с разделителями
стр = СписокЗнач.ВСтрокуСРазделителями(); //возвращает строку: 10,12,"Иванов","Петров"
//загрузка списка значений из строки с разделителями
//обратите внимание на двойные кавычки для строковых значений
СписокЗнач.ИзСтрокиСРазделителями("10,12,""Иванов"",""Петров""");
Те, кто хоть раз работал с отладчиком VBA, мечтают о том, чтобы и в 1С можно было изменять значения переменных и переходить на любую точку кода.
Все не обещаю, но некоторые возможности доступны с помощью косметических вмешательств в конфигурацию.
Применение этих функций основано на том, что в табло отладчика в режиме Конфигуратора или 1С:Предприятия можно вызывать доступные в контексте точки останова функции. Примеры нужно вводить в табло Ctrl+Alt+W или в окно просмотра значения выражения Shift+F9 и сразу же получать результат.
Функция ДУ
Эта функция позволяет в любой момент выполнить любой код на языке 1С над любыми данными, переданными ей.
Примеры:
= Сообщает некий текст
= Присваивает переменной Отказ значение истина
= В отладчике нельзя вызвать процедуру, но можно это сделать через ДУ:
Функция Присвоить
Всем известно, что в 1С80 нельзя по хоту отладки менять значения переменных.
Однако есть выход!
В общем модуле объявите функцию:
Теперь вы можете в любой момент присвоить значение переменной.
Отладка в типовой конфигурации
А что же делать, если вам досталась отладка конфигурации, в которой нет этих замечательных функций?
Все очень просто. Создайте внешнюю обработку, занесите в ее модуль эти функции с ключевым словом экспорт и вызывайте их например так:
Манипуляции со стеком.
Для меня было приятной неожиданностью, когда я обнаружил, что можно смотреть переменные на разных уровнях стека.
Нужно открыть окно стека (Ctrl+F3), перейти на нужны уровень и ввести в табло имя переменной.
Лучше всего это рассмотреть на примере рекурсивной функции:
Поставьте в этой функцию точку останова и вы увидите что на разных уровнях стека переменная А принимает разные значения.
Прерывание работы программы
К сожалению, в 1С 80 можно прекратить работу некоторого кода только прекратив работу всего 1С:Предприятия. Так сказать, для борьбы с головной болью нужно отрубить голову. :)
Но не все так плохо.
С помощью функции Присвоить вы можете присвоить какому-нибудь критическому объекту программы значение Неопределено или ноль и как только программа попробует получить реквизит или метод этого объекта возникнет ошибка и работа кода прекратится.
Например вы находитесь в точке:
Теперь, как только выполнение кода дойдет до строки с "Если", возникнет ошибка и выполнение прекратится.
Упреждающий просмотр
Иногда при отладке сложновложенных функций неизвестно, имеет ли смысл отлаживать данную конкретную функцию по шагам, или лучше выполнить ее не заходя внутрь для детальной отладки.
В таких случаях удобно посмотреть в окошке просмотра значения, какое значение возвращает данная фунцкия и если она возвращает значение, которое нам интересно, выполнить отладку.
Изменение кода на лету
Если у вас много кода выполняется в операторе Выполнить, то лучше этот код занести в некоторую переменную, чтобы при случае можно было изменить этот код. Расскажу случай из практики.
Отлаживал я как-то одну обработку по обмену данными - там было много кусков кода, выполняющихся через Выполнить. Вот беда случилась - загружали мы большой файл (многометровый) и так обидно, если грузится он час, а потом вылетает на какой-нибудь мелкой ошибке в коде, которая была не выявлена на этапе отладки, всегда в самых неожиданных местах.
Маялись мы маялись, а потом придумали - все вызовы Выполнить были вынесены в одну функцию, куда передавался код для выполнения и параметры. Это нам и сослужило хорошую службу.
Мы вставили Выполнить в Попытка-Исключение и если происходило исключение, предлагали программисту вживую изменить код. Если он соглашался, открывался диалог ввода кода, где он мог заменить старый код на новый. И перед выполнение кода мы проверяли, имеется ли он в списке замен. Если имеется, то мы перед выполнением подменяли старый код на новый. Так нам удалось быстро загрузить данные.
Отладка на сервере
Чтобы съэкономить вам нервы, сообщаю, что отлаживать код, который выполняется на сервере (в трехзвенке), невозможно. Поэтому если у вас программа в файловом варианте останавливается на точке останова, а в серверном - нет, не пугайтесь, так и задумано. Ведь код выполняется на сервере приложений и не может поэтому отлаживаться на клиенте.
Условная точка останова
Не все знают, что в 1С 80 есть условная точка останова - точка останова по условию. Однако это очень полезный механизм.
Трассировка
Для этих целей в 1С можно использовать условную точку останова, т.к. условие проверяется на каждом проходе кода через условную точку останова.
На указанной строке ставим точку останова с условием:
Сумма:1
Сумма:3
Сумма:6
Сумма:10
Сумма:15
Сумма:21
Сумма:28
Сумма:36
Сумма:45
Сумма:55
Управление кодом
Предположим у нас есть такой код:
В таком случае мы можем применять программное управление кодом.
На начале оператора Если ставим условную точку останова:
Т.е. если А=1 то мы присваиваем А значение 2, и присваиваем 1 в противоположном случае.
Это позволяет, не меняя конфигурацию, постоянно перенаправлять код на нужную нам ветку.
Можно просто поставить условную точку останова, которая будет присваивать А нужное значение:
Обозримая трассировка
Если вы вставляете в код много функций Сообщить для трассировки хода выполнения программы, то потом порой бывает проблематично найти все такие трассировочные вызовы.
Если трассировка временно не нужна, ее нужно убрать так:
Теперь достаточно открыть эту внешнюю обработку и десктоп настроится. В следующий раз эта обработка уже будет в списке недавно открытых файлов.
Более простой вариант для ленивых - в табло написать вычисление выражений (например с помощью ДУ), которые откроют нужные документы и журналы. Легко и быстро!
Еще один простой вариант - использование истории отборов. Тогда вам нужно только сделать отбор по нужному документу, обязательно закрыть 1С крестиком, а не через прекращение отладки (чтобы сохранились условия отбора), а затем после запуска 1с зайти в нужный список и нажать историю отбора.
Отладка клиент-серверной базы
Использование внешней обработки
Часто, когда код базы менять нельзя, а поиграться хочется или когда код выполняется на сервере и нет возможности его отладить, помогает использование внешней обработки.
Для этого нужно скопировать код во внешнюю обработку и поотлаживать уже внешнюю обработку, по ходу меняя код и просматривая переменные.
Подсовывание тестовых данных
Иногда в базе сложно получить пример, при котором выполняется некое экзотическое условие.
В таком случае проще подсунуть тестовые данные.
Например, если в коде обрабатывается некоторая таблица значений, можно прямо в коде прописать очистку этой таблицы значений и заполнение ее новыми данными, при которых выполняется это экзотическое условие.
Для тех, кто не любит портить код ради отладки, можно посоветовать с помощью функции ДУ вызвать внешнюю обработку, которая заполнит таблицу значений как нам надо (например считает ее из макета).
Отладка блокировок
Иногда нужно посмотреть, как ведут себя два параллельных процесса.
Простейший способ отладки таких ситуаций - вставить в коде вызов процедуры Предупреждение().
Например, в событии ПриЗаписи объекта вставляем вызов Предупреждение("Идет запись объекта. ").
Тогда если открыть другую сессию и попытаться записать объект, выдастся предупреждение, что объект заблокирован.
Если такая отладка вызывается часто, рекомендую такой способ вызова сразу двух сессий 1С.
Из отладчика нажимаете F5 (Запустить отладку), запускается 1С:Предприятие. Отключаетесь от отладки этого 1С Предприятия - "Отладка"->"Отключиться", затем еще раз нажимаете Ф5. В итоге вторая сессия у вас подключена к отладчику. Запускаете код с предупреждением в первой сессии и отлаживаетесь во второй.
Ускорение отладки
Отладчик снижает скорость работы программы.
Поэтому можно поступить так - отключить отладчик, а в нужном месте вывести Предупреждение();
Когда выведется предупреждение, можно опять подключить отладчик, поставить точку останова и начать отладку.
Обработка позволяет просматривать в процессе отладки содержимое таблиц значений и списков значений, предварительно сохраненных методом ЗначениеВФайл(,).
Вызов обработки можно также осуществлять методом ОткрытьФорму, передавая данные через параметр (см. подробнее в обработке на закладке Описание).
Можно открывать объекты из таблицы значений, если те являются справочниками, документами. Если объект является таблицей значений или списком, то в него можно "провалиться" и также просмотреть, а потом вернуться "наверх".
При анализе содержимого таблицы можно отсортировать ее, произвести отбор по одному из значений или свернуть таблицу, исключив одну или несколько колонок.
Можно сформировать табличный документ для вывода на печать или же сохранения в формате Excel.
Специальные предложения
Использую такую для вывода таблицы временного отчета
+еще такую обоработку можно использовать для подбора по таблице значений - в качестве параметра Форма.ВыполнитьВыбор(Тз); возвращать таблицу в которой остались только отмеченные строки
(0) Года три назад, если не ошибаюсь, здесь проскакивала аналогичная простенькая обработка от Zorro - глПоказать() aka Show.ert
Можно поискать класс 1с++ "Отладка". Я его где-то в 2009 или в начале 2010 скачивал и сильно доработал под свои нужды.
У меня есть аналоги
- редактор таблиц значений
- редактор списков значений
В принципе, все остальное можно сделать ими: и просмотр, и редактирование, и отбор и дальнейшую обработку.
Это при использовании Rainbow addon 2000 или дальнейшее ее развитие - 1С++ (потребуется доработка). скрипт на языке 1С пишется прямо в форме (естественно, его можно сохранять и использовать повторно).
Просмотры 14238
Загрузки 53
Рейтинг 10
Создание 16.09.11 16:52
Обновление 16.09.11 16:40
№ Публикации 90626
Конфигурация Конфигурации 1cv7
Операционная система Не имеет значения
Страна Россия
Вид учета Не имеет значения
Доступ к файлу Абонемент ($m)
Код открыт Не указано
См. также
StartManager 1.4 - Развитие альтернативного стартера Промо
Очередная редакция альтернативного стартера, являющегося продолжением StartManager 1.3. Спасибо всем, кто присылал свои замечания и пожелания, и тем, кто перечислял финансы на поддержку проекта. С учетом накопленного опыта, стартер был достаточно сильно переработан в плане архитектуры. В основном сделан упор на масштабируемость, для способности программы быстро адаптироваться к расширению предъявляемых требований (т.к. довольно часто просят добавить ту или иную хотелку). Было пересмотрено внешнее оформление, переработан существующий и добавлен новый функционал. В общем можно сказать, что стартер эволюционировал, по сравнению с предыдущей редакцией. Однако пока не всё реализовано, что планировалось, поэтому еще есть куда развиваться в плане функциональности.
1 стартмани
23.04.2014 152694 1791 Alexoniq 1580
WebЦвета для 1с77 FormEx
Обработка с фрагментами кода для программного использования набора цветов из коллекции WebЦвета 1с версии 8+ в 1с версии 77. Требуется предварительное подключение сторонней библиотеки FormEх. Будет полезно программистам 1с 77, 1с 8. Да и вообще при программировании на любом языке при потребности использовать коллекцию цветов WebЦвета.
1 стартмани
30.03.2022 860 0 igor7777 4
Анализ объектов метаданных для конфигураций 1С:Предприятие 7.7
Отчеты по структуре конфигурации для платформы 1С:Предприятие 7.7. Отчеты содержат полный перечень объектов метаданных (состав конфигурации) для следующих видов: Константы, Справочники, Документы, Журналы документов, Отчеты и Обработки. Для каждого вида метаданных формируется своя таблица. В отчетах по Справочникам и Документам добавлена колонка "Количество" - количество объектов в информационной базе. Отчеты полезны для оценки объема работ при групповом изменении данных, или переходе на другую платформу.
1 стартмани
27.12.2021 1711 1 AleksLukin 0
Инструменты разработчика 1С 7.7
Альтернативное сравнение / объединения конфигураций 1С 7.7 с возможностью частичного переноса изменений объекта метаданных. Анализ и перенос изменений конфигураций, сравнение таблиц и диалогов форм. Выгрузка содержимого файла 1cv7.md.
5 стартмани
10.12.2021 1531 2 Palmer1976 0
Консоль прямых запросов для 1С++ (1С 7.7) Промо
Консоль прямых запросов для 1С 7.7, под компоненту 1Сpp.dll. Особенности: 1. Печать результата запроса. 2. Сохранение результата в файл в виде внутреннего представления таблицы значений 3. Формирование запроса как для SQL, так и для DBF вариантов, с разными вариантами драйверов. 4. Сортировка по произвольной колонке результата таблицы
1 стартмани
25.04.2012 38847 179 Aristo_ 9
Список реквизитов отчетов(обработок) конфигурации
Список реквизитов отчетов (можно и для обработок доработать) конфигурации
1 стартмани
30.09.2021 2035 0 Antoska 0
Масштабирование шрифта
Масштабирование шрифта так, чтобы текущий текст полностью помещался в отведенное для его отображения текстовое поле с максимально возможным размером шрифта.
1 стартмани
08.06.2021 2676 0 hogik 0
Получение имени компьютера и его IP локально и в терминале
Обработка для 1С 7.7 для получения имени компьютера и его IP локально и при терминальном подключении.
1 стартмани
12.01.2018 11113 2 merlin1975 2
Openconf upd. 2014 Промо
Обновленная сборка OpenConf Light Pack.
1 стартмани
27.04.2014 54496 344 unichkin 49
Стартер 1С 7.7
Стартер 1С 7.7 Нужен для запуска 1С 7.7. Преимущества перед стандартным: - доменная авторизация (вход без пароля) - настраиваемый список баз для всех пользователей (не надо настраивать новым сотрудникам и др.)
1 стартмани
02.07.2017 15179 4 ManyakRus 0
Сравнение конфигураций на платформе 1Сv7.7
Обработка позволяет сравнивать структуру полей разных баз данных на платформе 1Сv7.7, что, в случае объединения конфигураций, поможет избежать разрушения базы.
1 стартмани
12.11.2016 13195 14 citicat 7
Шедулер для 1С 7.7
Запуск отчетов и обработок по расписанию
1 стартмани
03.09.2016 14379 10 Утюг 2
Самая последняя версия нового альтернативного стартера 1С. Программа призвана облегчить жизнь людям, которые вынуждены работать с большим количеством различных баз данных
1 стартмани
24.08.2009 46576 1456 salexdv 309
Подсветка кода 1С в Visual Studio (2012, 2013)
1 стартмани
06.06.2016 16690 10 MadDAD 6
Для платформы 7.7. Отчёт по видам документов, двигавших регистр за период
Отчёт по видам документов, двигавших регистр за период.
1 стартмани
31.03.2016 14870 1 vendim 1
Утилита для просмотра/удаления данных из УТМ ЕГАИС для 1С: 7.7
Часто, в процессе работы над своими доработками УС для работы с ЕГАИС, возникает необходимость "заглянуть" в папки УТМ, чтобы посмотреть, что туда прилетело/улетело. Я пишу в основном под 1С:Предприятие ver 7.7, где все, в общем-то, делается быстро и просто, но природная лень мне все не давала написать под себя утилитку. Тем более, есть много различных программ, которые в той или иной мере помогают в этом вопросе - но не совсем удобно (переключаться с программы на программу, с принципиально разным подходом к интерфейсу), но в 1000 раз удобнее, чем вручную через cUrl, за что спасибо из разработчикам. Но, вчера вечером, мне наконец все надоело, и я решил потерять пару часов и сделать для себя инструмент, который в будущем сэкономит мне больше времени. Выкладываю на ваш суд то, что получилось, может, кому-то еще пригодится.
Очень полезно при отладке конфигурации 1С7.7 просмотреть содержимое таких значений как таблица значений, список значений, класс 1С++ или структура, которые в свою очередь также содержат в себе ссылки на ТЗ, СЗ, класс или структуру. В отладчике 1С77 к сожалению это сделать невозможно.
В предлагаемой разработке можно увидеть способ применения класса ИнспекторОбъектов для просмотра содержимого класса, структуры, таблицы значений и списка значений.
Специальные предложения
таблицаЗначений.ВыбратьСтроку()
СписокЗначений.ВыбратьЗначение(0)
Интерактивный просмотр тз и сз прямо в отладке. только надо переключиться в интерфейс
(1) Недостаток типового метода в том, что невозможно просмотреть значение поля, если там записана ТЗ или СЗ, в которых в свою очередь также ТЗ или СЗ, и т.д. и т.д., а в случае применения 1С++ еще и ссылки на классы и структуры, которые в своих полях также содержат ссылки на классы, структуры, ТЗ или СЗ.
Вот для таких случаев и применяем метод просмотра вызовом процедуры глБраузер(ТЗ). Мне очень помогает в работе. Надеюсь, что поможет и другим.
Отладчик 1С зависает при попытке просмотра значений типа класс 1С++.
В Вашем же случае приходилось перекрывать функцию во всех потомках, что есть, мягко говоря, неудобно.
2. Предполагалось, что класс ИнспекторОбъектов предназначен для просмотра параметров объекта, но в трех случаях вместо просмотра параметров, он тупо открывает форму объекта, что не есть правильно, т.к. на форме могут не отображаться параметры, а значит, класс не решает поставленную задачу.
По идее он должен рекурсивно вызывать сам себя для отображения объектов до тех пор, пока не упрется в простой тип, а в случае с несколькими вариантами отображения (например: документ шапка и ТЧ) - эмулировать (например, для дока: показывая реквизиты шапки + добавляя ТЗ с выгруженной ТЧ или списоком отдельно реквизиты шапки и отдельно ТЗ с ТЧ).
3. Наследовать во всех объектах такого тяжелого предка как класс Объект - тоже не есть рационально.
4. Непонятно назначение функции ЗаписатьСобытие класса РегистраторСобытий. Чем она лучше вызова ЗаписьЖурналаРегистрации?
5. Поражает использование ненужного числа строк комментариев вначале каждого модуля, притом, автору ненужных, судя по тому, что он оставляет незаполненными "теги" и .
Надеялся из них прочитать назначение классов.
В целом, конфигурация интересна для изучения, но неоправданно замудреная.
Скачал только из-за упоминания в теме инспектора объектов, т.к. это довольно нужная штуковина, однако реализация разочаровала.
Сам уже более года использую для этих целей небольшой класс "Отладка", когда-то найденный в сети и доработанный под себя (но не выкладываемый в силу непрезентабельного оформления, а времени на доводку нет). Исходный класс показывал в ТП ТЗ, ИТЗ и ТЧ доков (ссылку не приведу, т.к. не смог найти). Добавил рекурсию, оформление (при вызове передаются управляющие параметры в списке, такие как заголовок, команда к печати, число экземпляров, режимы отображения и т.д.), для СЗ - отображение и значений и представлений и много еще чего по мелочи.
Читайте также: