Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
13 окт 2025, 22:33

вывести колонку по значению Истина

Автор sali, 09 окт 2025, 08:25

0 Пользователей и 1 гость просматривают эту тему.

sali

есть форма в которой расположены много реквизитов с типом булево, эти данные собираются в одну кучу и потом отрабатываются действия. например,
выгрузка товаров = истина
выгрузка картинок и файлов = Ложь
выгрузка контрагентов = истина
выгрузка складов контрагента = истина
получить заказы = ложь

по этим данным выполняется запрос (для каждого свой) . я в замешательстве как в запросе выбирать контрагента и если стоит Истина у "Выгружать склад контрагента " то добавляется еще поле с его складом это уже 3 поля (ну 4 если добавить простое строковое для склада), а если стоит Ложь то это 2 поля?
ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
Контрагенты.Ссылка КАК Объект,
"Контрагент" КАК ТипОбъекта
ИЗ
Справочник.Контрагенты КАК Контрагенты
ГДЕ
ВЫБОР
КОГДА &ПолнаяВыгрузка
ТОГДА ИСТИНА
ИНАЧЕ Контрагенты.Ссылка В
(ВЫБРАТЬ
КонтрагентыИзменения.Ссылка
ИЗ
Справочник.Контрагенты.Изменения КАК КонтрагентыИзменения
ГДЕ
КонтрагентыИзменения.Узел = &Узел)
КОНЕЦ
И &НадоВыгружатьКонтрагентов = ИСТИНА
И Контрагенты.ЭтоГруппа = ЛОЖЬ
{ГДЕ
Контрагенты.Ссылка.* КАК Контрагенты}

antoneus

Ну для каждого условия формировать свой текст запроса. Или через схему запроса.

FearDog

Цитата: sali от 09 окт 2025, 08:25по этим данным выполняется запрос (для каждого свой)
По хорошему, если флаги не меняются по результатам запросов, то лучше сделать один пакетный запрос. Поля я бы грузил всегда все, а видимость колонок устанавливал уже на форме. Это избавит в дальнейшем от проблемы, когда поле нужно как-то обработать, а оно то есть, то нет.
Если же принципиально убирать поля в запросе (с какой целью?), то тогда нужно и удалять реквизиты, связанные с этими полями, и элементы формы. Это актуально, когда колонки таблицы заранее неопределенны (например загрузка произвольной таблицы из Excel).

Что касается изменения запроса, есть два варианта:
1) собирать запрос последовательно:
ТекстЗапроса = "ВЫБРАТЬ
    |" + ?(ВыгрузкаИнн = истина, "Контрагенты.ИНН КАК ИНН,", "") + "
    | ... текст запроса ...";

2) Или проводить замены потом:
ТекстЗапроса = "ВЫБРАТЬ
    |" Контрагенты.ИНН КАК ИНН,
    | ... текст запроса ...";
   
    Если ВыгрузкаИнн <> истина Тогда
        ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "Контрагенты.ИНН КАК ИНН", "");
    КонецЕсли;

sali

Цитата: FearDog от 09 окт 2025, 09:23По хорошему, если флаги не меняются
для работы я беру форму работы плана обмена с сайтом из подсистемы 1с-битрикс -> настройка обмена с интернет магазином. та форма в которой находятся реквизиты для соединения к сайту и активторыСнимок экрана 2025-10-09 123252.png

открываем их , выгрузку номенклатуры Снимок экрана 2025-10-09 123319.png

сей этот механизм я пытаюсь переделать под раннюю свою работу - выгрузка товаров, остатков, цен, контрагентов и загрузка заказов
ну как переделать скорее перестроить , убрать/скрыть пока не нужные поля . то же соединение пройдет не с сайтом , а с базой на сервере


sali

вопрос.
в модуле объекта плана обмена есть функция
Функция ПолучитьРегламентноеЗадание() Экспорт
УстановитьПривилегированныйРежим(Истина);
Задание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторРегламентногоЗадания);
УстановитьПривилегированныйРежим(Ложь);
Возврат Задание;
КонецФункции

переменная ИдентификаторРегламентногоЗадания есть только в процедуре
Процедура ПриКопировании(ОбъектКопирования)
Код = "";
ИдентификаторРегламентногоЗадания = НеОпределено;
КонецПроцедуры

я похожее пытаюсь внедрить это в модуль набора записей , но поругается на переменную ИдентификаторРегламентногоЗадания. как избежать?

antoneus

Это не переменная, это реквизит плана обмена.

sali

antoneus, бля точно. уже неделю этим занимаюсь, глаза перестают замечать

sali

antoneus, окей , а если у меня этот реквизит находится в ресурсах Регистра (если и будет находиться в измерении регистра ), то почему выдает ошибку что не определена переменная?

antoneus

Потому что в модуле набора записей нет доступа к измерениям/ресурсам/реквизитам регистра. Набор записей - это коллекция записей. В его модуле к этим записям можно обратиться в цикле, например

Для каждого Запись из ЭтотОбъект Цикл
и у них уже есть всякие измерения с ресурсами.

sali

antoneus, спасибо. ваши ответы очень помогают
в форме в процедуре передзаписьюнасервере есть код
Если ТекущийОбъект.ИспользоватьРегламентныеЗадания Тогда
УстановитьПривилегированныйРежим(Истина);
// Если ТекущийОбъект.Код <> "" тогда
Задание = ТекущийОбъект.ПолучитьРегламентноеЗадание();
я добавил и в менеджере и в модуле функцию ПолучитьРегламентноеЗадание, чтобы посмотреть куда упадет , но он не находит ее . как так?

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск