Преобразование выборки в структуру

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

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

Вот как это делал я:

Где значок подчеркивания — это вызов функции по присвоению А = Б.

Таким образом я мог устанавливать нужные значения реквизитам объекта Выборка, по сути, подменяя объект другим.

При дальнейшем выполнении программу нужно было перезапускать, потому что у структуры нет, конечно же, метода Следующий. Но дальнейшее в моем случае было и не важно, нужно было просто загнать выполнение в определенную ветку:

Вот такой способ управления выполнением кода!

image_pdfimage_print

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Вам может также понравиться...

комментариев 5

  1. naf2000:

    Автор конечно знатный велосипедостроитель. В отладчике есть пункт «Установить новое значение в виде выражения», позволяющее не использовать вот это вот: _(…,…)
    Что касается того, что переменная Выборка «испорчена» и дальше работать невозможно — это не так, достаточно сохранять в той же структуре исходню выборк, чтобы потом к ней вернуться:

    Функция СтруктураИзВыборкиДляОтладки(Выборка)

    Результат = Новый Структура;
    Для каждого Колонка Из Выборка.Владелец().Колонки Цикл
    Результат.Вставить(Колонка.Имя);
    КонецЦикла;
    ЗаполнитьЗначенияСвойств(Результат,Выборка);
    Результат.Вставить(«ИсходнаяВыборка»,Выборка);

    Возврат Результат;

    КонецФункц

    • О, это добавлено было в платформу? Спасибо за совет, раньше нельзя было присваивать в отладчике.
      Что касается функции восстановления то да, можно, но мне не нужно было отлаживать следующий виток цикла.

  2. oValeriy:

    // или через строку из таблицы значений используя БСП
    Результат = Неопределено;

    Тз = Запрос.Выполнить().Выгрузить();
    Если Тз.Количество() Тогда
    Результат = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(Тз[0]);
    КонецЕсли;

    Возврат Результат;

    • не взлетит. вы заменяете выборку на таблицу значений.
      если бы так можно было сделать, то и проблем бы не было — ведь строка таблицы значений доступна для записи
      А тут секрет в том, чтобы вместо объекта строки выборки (который только на чтение) подсунуть структуру.

  3. Применял подмену выборки структурой:

    Если ДанныеПечати.СтатусУПД = 2
    И ЗначениеЗаполнено(ДанныеПечати.НалогообложениеНДС)
    И ДанныеПечати.НалогообложениеНДС = Перечисления.ТипыНалогообложенияНДС.ПродажаОблагаетсяНДС
    И НЕ ДанныеПечати.ЭтоПередачаНаКомиссию
    И ДанныеПечати.ТребуетсяНаличиеСФ
    Тогда

    //+++Осипов времено 26.03.05
    ДанныеПечатиПред = ДанныеПечати;
    ДанныеПечати = ОбменДаннымиСервер.РезультатЗапросаВСтруктуру(ДанныеПечати.Владелец());
    ДанныеПечати.СтатусУПД = 1;

    Но сам цикл приходилось менять:
    //+++Осипов времено 26.03.0
    //Пока ДанныеПечати.Следующий() Цикл
    ДанныеПечатиПред = Неопределено;

    Пока Истина Цикл
    Если ДанныеПечатиПред <> Неопределено Тогда
    ДанныеПечати = ДанныеПечатиПред;
    КонецЕсли;
    Если НЕ ДанныеПечати.Следующий() Тогда Прервать; КонецЕсли; //—

    На скорую руку так сказать.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *