Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Все значения восстанавливаются, а ФИО нет
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.1 (8.0)
SanSay
Здравствуйте,

Есть форма, на ней есть ТабличноеПоле

пытаюсь вписать в него строки с сохраненными данными (сохраненные ранее из этого же Табл.Поля)
НоваяСтрока = ЭтотОбъект.АВТ.Добавить();
//НоваяСтрока.ФИО = Справочники.ФИО.НайтиПоНаименованию(Строка(Запись.РегФИО));
НоваяСтрока.ФИО = Справочники.ФИО.НайтиПоКоду("002");
НоваяСтрока.Часы = Запись.РегЧасы;
НоваяСтрока.Личное = Запись.РегЛичное;

все столбцы заполняются правильно, а вот с ФИО никак не выходит

Пробовал и по Наименованию искать и по Коду
При этом в отладчике если смотреть, то
по наименованию вообще ничего не находит
По коду - находит фио, но при этом столбец ФИО в ТабличномПоле пустой

че не так делаю?
logist
Цитата(SanSay @ 28.12.13, 23:09) необходимо зарегистрироваться для просмотра ссылки
че не так делаю?

НайтиПоКоду, НайтиПоНаименованию возвращает Ссылку на объет. А у вас колонка вероятно с типом Строка... Попробуйте
НоваяСтрока.ФИО = Справочники.ФИО.НайтиПоКоду("002").Наименование;
SanSay
Цитата(logist @ 29.12.13, 1:02) необходимо зарегистрироваться для просмотра ссылки
НайтиПоКоду, НайтиПоНаименованию возвращает Ссылку на объет. А у вас колонка вероятно с типом Строка... Попробуйте
НоваяСтрока.ФИО = Справочники.ФИО.НайтиПоКоду("002").Наименование;

не, так даже в отладчике не находит

поместил на форму ПолеВвода и таким же образом присвоил значение
и не зависимо от типа значения (строка или СправочникСсылка.ФИО) без проблем присваивает значение

видимо закавырка в ТабличномПоле
Ardi
logist,
Ссылка в строку преобразовывается автоматически.

SanSay,
Использование механизма отладки

Кратко рассмотрим использование механизма отладки. Механизм отладки позволяет остановить приложение в определенной точке и посмотреть на текущее значение переменных.

Точку останова можно установить в любой строке модуля в любой момент работы с отладчиком. Выполним установку точки останова двойным щелчком мыши на простив требуемой строки. Для того чтобы система выполнила остановку в данной точке программы необходимо чтобы пользовательское приложение было подключено к механизму отладки. При запуске из режима конфигуратора, подключение его к отладчику происходит автоматически. Точку останова мы установили в обработке проведения документа «Приходная накладная», по этому попытаемся ее провести. Произошла остановка проведения документа и система перешла переключилась в режим конфигуратора на строку точки останова и теперь наведя мышкой на ранее заполненные объекты, переменные , мы увидим их значение.

Для того чтобы увидеть значение и структуру сразу нескольких объектов откроем табло, перетащим в него значения переменных. В поле «выражение» вводим значение тех объектов или переменных значения, которых необходимо посмотреть. Видим текущие значения объектов и тип, если элемент не примитивного типа то можно посмотреть его структуру и значения внутренних элементов и их типы. В отладчике мы увидим значения тех переменных, которые ранее были заполнены. Например, в цикле текущая строка уже получена, значение «Количество» в этой строке нам известно, оно равно 10 , а поле количество у регистра еще не заполнено, посмотрим, как произойдет заполнение. Текущее значение 0 , выполним 2 шага, присвоилось значение 10, сумма при этом еще равно нулю , далее присвоилась сумма.

Шагая далее видим, что цикл переходит к следующей строке, значение движений у новой строки нулевые и снова начинают заполняться.

Прежде чем двигаться дальше посмотрим на те варианты шага которые есть у отладчика. «Шагнуть в» , при таком варианте движение происходит построчно с заходом во все процедуры и функции. «Шагнуть через», движение происходит, построчно пропуская заходы в процедуры и функции. «Шагнуть из», да выхода из текущей процедуры или функции на следующую строку. «Идти до курсора», произойдет выполнение кода от текущего положения до положения курсора. Если мы просматриваем код в отладке, то можем перейти к текущей строке отладки. По команде продолжить отладку будет произведено выполнение кода либо до завершения, либо, до следующей точки останова, если она присутствует.

Теперь посмотрим, как это работает. Вот у нас есть небольшая функция , пройдем через нее. Зашли в функцию, можем построчно посмотреть как она отрабатывает. Кроме того можем открыть стек вызовов и посмотреть откуда она была вызвана. Видим что в расчет значения перешли из обработки проведения, двойным щелчком можем перейти на ту строку которая вызвала эту функцию. Построчно проходить функцию не будем , выйдем из нее. Теперь продолжим отладку и снова запустим обработку проведения. Видим что снова произошла остановка, но нам например нужно остановиться не здесь, а вот здесь. Для этого ставим курсор на строку и нажимаем «Идти до курсора». До курсора мы не дошли но мы дошли до следующей точки останова. т.к. точка останова стоит в цикле. Для того чтобы перейти до курсора необходимо снять эту точку останова встать на ту строку до которой надо дойти и снова нажать перейти «до курсора».

Если у нас несколько точек останова, они могут мешать, для перехода к нужной строке можем их временно отключить. Для этого зайдем в отладку / «Отключить все точки останова» , в станем на строку и нажмем «перейти до курсора». Текст модуля может быть большой с множеством переходов из одной процедуры в другую и отловить ошибку достаточно сложно. Особенно если в модуле присутствуют попытки исключения. Если посмотреть на функцию «Расчет значения» внимательно, то видно, что она несет в себе подводный камень. Конкретно это деление на 0. Ошибка произойдет в том случае когда первый параметр будет меньше второго на 5. Конечно, по-хорошему в данной функции необходимо прописать условие. В зависимости от того равны значения переменных а и б или нет, выдавать соответствующий результат, но для демонстрации работы отладчика оставим в таком виде. А ошибку обойдем попыткой исключения. В данной конструкции происходит попытка рассчитать значение и при неудачи выводится сообщение.

Посмотрим что при этом видит пользователь, нажимаем «провести» видим что что-то там не удалось, но где смотреть , где ставить точку останова в конфигураторе не понятно. В таком случае логично начать поиск ошибки в конфигураторе с того места где выводится это сообщение. Найдем этот текст в конфигураторе. Меню/Правка/глобальный поиск. Предполагаем, что часть текста могла быть сформирована динамически, а мы можем найти только статическую часть. По этому сотрем лишнее и нажмем «искать». Нашли 2 строки , одна закомментирована вторая рабочая. Двойным щелчком перейдем на рабочую строку. Видим что ошибка происходит где-то вот в этой функции , по этому поставим здесь точку останова.

Запустим проведение и начнем смотреть дальше. Заходим в функцию, идем по строкам, смотрим, как собираются значения возвратов. Например, мы нашли точку где возможно происходит ошибка. Но на текущей позиции отладки мы не можем ее воспроизвести. Потому что функция может вызываться в цикле , с различными параметрами, из других модулей. Для того чтобы проверить свое предположений установим точку останова по условию, нажмем правой кнопкой мыши и выберем , точка останова с условием. Мы понимаем, что ошибка возникнет в том случае если а будет равна б, введем условие нажмем «ок». Теперь отключив все точки останова и оставив только эту, мы сможем понять, откуда передаются кривые параметры. Проводим документ, произошла остановка, смотрим стек вызовов, перешли отсюда, смотрим как были сформированы передаваемые параметры. НУ у нас все просто.

Также в отладчике можно установить параметр «Останавливаться по ошибке» в этом случае отладчик сам выполнит остановку перед исполнением кода с критичной ошибкой. Даже если этот код будет выполняться в попытке исключения. Убрали все точки останова, проводим документ. Происходит остановка с соответствующим сообщением. Но при этом видны значения переменных , также работает стек вызовов. А при продолжении выполнения кода происходит сама ошибка и обработка исключения. Теперь разберем отображение результатов запроса в отладчике. Сформируем небольшой текст запроса по табличной части документа и поставим точку останова на строке выполнения запроса. Проводим документ, на данный момент метод запроса «выполнить» .Еще не отработал и переменная результат не определена, но ответ запроса к выполнению готов. И мы можем его выполнить в табло. Запрос выполнен , получили объект с типом «Результат запроса». Теперь можем применить метод «выгрузить()» который вернет таблицу значений. Нажав правой кнопкой мы можем посмотреть на эту таблицу. Также мы можем посмотреть на элементы строк этой таблицы и состав реквизитов у объектов значений.

Теперь посмотрим, как подключится для отладки к уже запущенному пользовательскому приложению. Напомню, что если пользовательское приложение открыто не из конфигуратора, то к отладчику, оно не подключено и соответственно точки останова на него действовать не будут. Чтобы подключить отладчик к уже работающему приложению, необходимо в параметрах приложения разрешить отладку, после этого в режиме конфигуратора выполнить подключение. Выбрав необходимый сеанс и нажав кнопку подключить. После этого точки останова будут действовать на ранее запущенное пользовательское приложение.
SanSay
Ardi, спасибо за отладчик, но я вроде уже научился им пользоваться...
и выше написал, что используя:
НоваяСтрока.ФИО = Справочники.ФИО.НайтиПоКоду("002");

значение НоваяСтрока.ФИО присваивается правильно, т.е. нужный ФИО находится, но все же в итоговом ТабличномПоле столбец с ФИО пустой
alex040269
Цитата(SanSay @ 28.12.13, 23:16) необходимо зарегистрироваться для просмотра ссылки
Ardi, спасибо за отладчик, но я вроде уже научился им пользоваться...
и выше написал, что используя:
НоваяСтрока.ФИО = Справочники.ФИО.НайтиПоКоду("002");

значение НоваяСтрока.ФИО присваивается правильно, т.е. нужный ФИО находится, но все же в итоговом ТабличномПоле столбец с ФИО пустой

присваивается правильно - это когда код:
НоваяСтрока.ФИО = Справочники.ФИО.НайтиПоКоду("002");
Сообщить(НоваяСтрока.ФИО );

даст ожидаемый результат.

проверьте тип колонки ФИО.
Ardi
SanSay,
Удалить из формы колонку "Фио" и добавить заново правильно.

(Ну или проверить какой у колонки источник данных smile.gif )
SanSay
Цитата(alex040269 @ 29.12.13, 2:18) необходимо зарегистрироваться для просмотра ссылки
присваивается правильно - это когда код:
НоваяСтрока.ФИО = Справочники.ФИО.НайтиПоКоду("002");
Сообщить(НоваяСтрока.ФИО );

даст ожидаемый результат.

проверьте тип колонки ФИО.

как я и говорил, в отладчике эта строка показывает нужное ФИО
но раз вы настаиваете, добавил строку
Сообщить(НоваяСтрока.ФИО );

и она логично тоже показала нужное ФИО

по поводу типа колонки

у нее "Данные" это реквизит ТабличнойЧасти, а реквизит в свою очередь это "СправочникСсылка.ФИО"

и в дополнение

в ручную ФИО подтягивается без проблем

Цитата(Ardi @ 29.12.13, 2:59) необходимо зарегистрироваться для просмотра ссылки
SanSay,
Удалить из формы колонку "Фио" и добавить заново правильно.

(Ну или проверить какой у колонки источник данных smile.gif )

поясните, что значит добавить правильно, т.к. ТабличноеПоле формировалось автоматом при создании формы
SanSay
Проблема решена... перекопипастил... и в конце перезаписывал этот параметр другим значением... и по злому стечению обстоятельств он еще был не заполнен и получалась пустая строка )

Всем спасибо
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.