Как выбрать несколько типов документов 1с

Обновлено: 07.07.2024

Имеем поле на форме составного типа: строка и несколько видов документов.

При выборе значения происходит следующее:
1. Начало выбора
2. Выбор типа
3. Если выбран какой нибудь из документов - открытие формы списка

Вопрос: как "влезть" между пунктами 2 и 3? т.е. сделать следующее: если выбран тип документа, то форму списка открыть с нужным отбором.

в пункте 1 СтандартнаяОбработка = Ложь, выбрать тип и открыть форму с нужным выбором через собственный код
МойРеквизит = Документы.ПриходныйКассовыйОрдер.ПустаяСсылка() как пример
Про ПривестиЗначение() понятно. Но это я сам назначаю реквизиту тип. А мне надо у пользователя спросить.

начнем сначала.
надо:
1. открыть окно выбора типа из списка тех, что доступны реквизиту
2. в зависимости от выбранного типа действовать дальше

(6) обработчики НачалоВыбора вызывается и при начале выбора типа, и при начале выбор значения.
обработчик ПриИзменении вызывается и после окончания выбора типа, и после окончания выбора значения.
(8) сделай эти 2 обработчика, и поставь в каждом точку останова. Потом сделай выбор вначале типа, потом значения, сразу все поймешь.
(9) пользователь видит поле ввода и там есть буковка "Т". Он на нее нажимает и выбирает тип. Какого такого вы у него еще дополнительно собрались спрашивать? Он без вас спокойно может открыть окно выбора типа.
(12) +1.
(8)Если надо заполнение из другой формы, то впихай в СЗ все возможные значения, пусть из них пользователь выбирает.
(12) телепатирую: после выбора типа сразу начать выбор значения.
В штатном режиме вначале надо нажать на выбор типа [Т], потом на выбор значения [. ]

Если в (14) правильное предположение, то вот такой вариант:

(15) По-моему проше так:

Это судя по моей телепатии из (0) "о форму списка открыть с нужным отбором."

(16) это я так понимаю в НачалоВыбора надо вставить (?)

еще такой вопрос: чем заменить "Элемент.Значение" в случае управляемой формы?

(18) Хм.. Это я так понял 8.2, в ней к сожалению не силен пока((
(16) и что ты будешь делать, когда в составном типе 10 видов документов? И не путай ПолучитьФорму и ПолучитьФормуВыбора.
Вариант (15) не зависит от того, какие типы ты указал, т.е. при расширении типов не надо менять код.

(21) Во-первых, если 10 видов документов, то возможно и отборы нужны разные, в твоем варианте это тоже не учтено (и в моем и в твоем придется добавлять ИначеЕсли с обработками под разные типы отборов)

Так что вот) Нет ничего абсолютного, я не претендую на истину в первой инстанции, имхо зачем писать трай-эксепт, если можно писать так, что исключительной ситуации в принципе не может возникнуть?

единственное тока возможно потребуется проверка на наличие в документе нужного реквизита.
Ну тогда да, однозначно (15). Ну через метаданные проверишь есть или нет.
а как теперь (15) реализовать для управляемого приложения?

Есть документ, есть ТЧ, в ней колонка составного типа.
Как получить список типов этой колонки?
Если что применительно к управляемому приложению.

Всем доброго времени.
Возможно вопрос и простой, но все же.

Есть 2 вида документов. Пусть документ 1 и документ 2.

На форме отчета СКД пользователь может указать выбирать тип документов:1,2 или все типы.
Вот как организовать непосредственно в СКД такой выбор?

Например когда выбран на форме тип "документ 2", то выполняется только выбора из документа 2,тип "Все" из 1 и 2

То есть нужно в зависимости от параметра выбирать 1,2 или все документы.

Важно:это именно документы.Не регистраторы в регистрах.
Как организовать такую выборку в СКД?

1с отчет СКД выбор данных из 2-х документов
Здравствуйте. Платформа 1С: Предприятие 8.3. Управляемая форма. Формирую запрос с помощью СКД на.


Выбор нескольких документов, для выполнения макроса
Доброй ночи. Есть код выбора, одного, документа для выполнения макроса. Подскажите, как его.


СКД Суммирование сумм документов
Доброго дня. То ли заработался, то ли совсем ничего не понимаю. мне надо вывести в запросе на.

В первом запросе выбрать число 1
Во втором 2
В отборе написать:

1. МоеПоле = 1
2. МоеПоле = 2
3. Мое поле = 1 или 2

ябы сделал радиокнопку.
и в запросе написал бы руками
если кнопка.значение = 1 тогда запрос += " в документ1" иначе запрос += " в документ2"

Ну жуткая нелюбовь у меня к "рваным" запросам)
Отладить их это тот еще процесс)

Добавлено через 11 минут
Еще была идея использовать схему запроса..
Написал,глянул и удалил)

Чего велосипед изобретаете, делай через ОБЪЕДИНИТЬ с выбором поля под условие.

Если это СКД - она сама выкинет лишние таблицы

Если это БСП можно прицепить справочник ИдентификаторыОбъектов и пусть пользователь выбирает из справочника какой ему тип нужен.
Будет максимально универсально OverDozero, Набор Данных Объединение, включающий два запроса, каждый к своему документу. Запрос типа:
В параметрах указать тип Параметра1 и доступные значения 1 и 2 polax, в таком случае выполнятся оба запроса, а зачем тратить время на то что нам не нужно Dethmontt, А где в предложенных решениях выполняется ОДИН запрос? Что-то я не увидел или не разобрался. Всегда выполняется ДВА запроса так же. И чисто средствами СКД вряд ли получится. Разве что попробовать поколдовать с текстом запроса в ПриКомпоновкиРезультата А где в предложенных решениях выполняется ОДИН запрос? В первом запросе выбрать число 1
Во втором 2
В отборе написать:
1. МоеПоле = 1
2. МоеПоле = 2
3. Мое поле = 1 или 2

Добавлено через 1 минуту
polax, при таком запросе с установкой отбора по одноименному полю из разных запросов СКД установит отбор для лишнего запроса вида ГДЕ 1 = 2
Что никогда не может быть выполнено, SQL просто проверит две константы и не будет этот запрос выполнять совсем

Добавлено через 1 минуту
А - ВАШИ выбор когда тогда - только путают оптимизатор!

СКД установит отбор для лишнего запроса вида ГДЕ 1 = 2
Что никогда не может быть выполнено, SQL просто проверит две константы и не будет этот запрос выполнять совсем А не встанет с ошибкой выполнение кода типа "Невозможно Запрос.Выполнить()"?
Ну и сам принцип, честно, мне не очень ясен. Можно простенький пример А не встанет с ошибкой выполнение кода типа "Невозможно Запрос.Выполнить()"?

А почему должно?
1=2 = ЛОЖЬ

Добавлено через 1 минуту
Если в СКД наложить отбор на поле ПОЛЕ

То запрос станет таким

Добавлено через 1 минуту
SQL тупо проверит 2 константы и не будет выполнять запрос где условие ложно Dethmontt, Это понял. Спасибо. П = 1, выводится первый запрос, П=2 выводится второй запрос
Не понял как работает вариант когда надо вывести оба запроса. Сколько в отборах пользователь поставит, столько и будет))

Каким бы не был параметр П2 и П1 вместе два запроса не отработают

Добавлено через 55 секунд
Потому что слева разные числа

Добавлено через 6 минут
Один вариант сообразил П1 =1 П2 = 2 - оба запроса. П1 =1 и П2 = 1 - работает первый, П1=2 и П2=2 отрабатывает второй. Но за такой ребус для пользователя по головке не погладят, думаю

Но за такой ребус для пользователя по головке не погладят, думаю

Какой ребус то?
Это пример и не имеет никакого отношения к жизни.

Я только концепт указал, как написать правильно запрос.

П1 и П2 это виртуальные параметры, которые 1С сама установит в запрос в зависимости от настройки ОТБОРОВ пользователя

Добавлено через 56 секунд
А как программист организует этот отбор - уже дело вкуса

Вывод нескольких таблиц в СКД
Здравствуйте! Подскажите как в СКД вывести несколько таблиц и про суммировать их итоги. таблицы не.

программа для сравнения двух типов документов
По какому принципу создать программу для сравнения двух типов документов? Документы в вордовском и.

Создание отчета в СКД из нескольких независимых страниц
Здравствуйте. В собственной конфигурации 1С 8.3 необходимо сделать отчет, состоящий из нескольких.

Создавать несколько типов документов, у которых могут совпадать некоторые разделы
Добрый день. Нужно создавать несколько типов документов, у которых могут совпадать некоторые.


СКД Выбор данных из регистра накопления
Здравствуйте! Помогите пожалуйста разобраться со следующим запросом: ВЫБРАТЬ.

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

Войдите как ученик, чтобы получить доступ к материалам школы

Язык запросов 1С 8.3 для начинающих программистов: функции и операторы для работы с типами (ТИПЗНАЧЕНИЯ, ТИП, ССЫЛКА, ЕСТЬNULL, ВЫРАЗИТЬ)

Автор уроков и преподаватель школы: Владимир Милькин

Давайте вспомним, что каждый реквизит (свойство, поле) справочника, документа или любого другого прикладного объекта имеет свой тип . И этот тип мы можем посмотреть в конфигураторе:

01

В языке запросов существует целый класс функций и операторов для работы с типами реквизитов. Давайте рассмотрим их.

Функция ТИПЗНАЧЕНИЯ

Эта функция принимает один параметр (значение) и возвращает его тип. Для описанного на картинке (выше) реквизита Вкус справочника Еда вернётся следующее:

02

Если мы запросим тип поля Наименование, то, как и ожидается, получим Строка:

А теперь давайте рассмотрим реквизит ОтличительныйПризнак у справочника Города:

04

Вы видите, что этот реквизит может иметь один из нескольких типов: Строка, Справочник.Вкусы, Справочник.Цвета. Такой тип реквизитов называется СОСТАВНЫМ .

Если мы попытаемся заполнить значение такого реквизита в режиме 1С:Предприятие, то система спросит нас, какого типа будет вводимое значение:

05

И только после нашего выбора позволит ввести значение выбранного типа.

Таким образом, элементы справочника одного вида (Справочник.Города) смогут хранить в одном и том же реквизите (ОтличительныйПризнак) значения разных типов (Строка, Цвета или Вкусы).

Вы можете убедиться в этом сами пощёлкав по элементам справочника Города в режиме 1С:Предприятие. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.

Здесь значение отличительного признака является элементом справочника Вкусы:

06

07

А здесь вообще элементом справочника Цвета:

09

Вот какие возможности открывает перед нами составной тип данных!

Интересно, как поведёт себя функция ТИПЗНАЧЕНИЯ на реквизите ОтличительныйПризнак, имеющий составной тип данных:

Это уже очень интересно. Давайте разбираться с каждой строкой в отдельности.

Тип значения отличительного признака для элемента Россия равен NULL. Мы впервые сталкиваемся с этим типом. Значения данного типа используются исключительно для определения отсутствующего значения при работе с базой данных.

Так и есть, ведь элемент Россия является группой, а не обычным элементом справочника Города, поэтому у него отсутствует поле ОтличительныйПризнак. А тип у отсутствующего значения, как мы прочитали выше, всегда равен NULL.

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

Для Красноярска тип признака равен Цвета, потому что значение выбранное в базе является ссылкой на элемент справочника Цвета.

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

Индия снова группа, поэтому значение отсутствует. А тип у отсутствующего значения, как мы помним, равен NULL.

Далее всё аналогично, кроме Сан-Паулу. Это не группа, а обычный элемент справочника (город), но тип его значения пустой. Как так?

А дело вот в чём. Если вы зайдёте в элемент справочника Города с наименованием Сан-Паулу, то увидите, что поле ОтличительныйПризнак совершенно никак не заполнено. Оно пустое. А все незаполненные поля составного типа имеют специальное значение НЕОПРЕДЕЛЕНО .

С НЕОПРЕДЕЛЕНО мы также сталкиваемся впервые.

Значение НЕОПРЕДЕЛЕНО применяется, когда необходимо использовать пустое значение, не принадлежащее ни к одному другому типу. Это как раз наша ситуация.

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

Функция ТИП

Она принимает всего один параметр - имя примитивного типа (СТРОКА, ЧИСЛО, ДАТА, БУЛЕВО), либо имя таблицы, тип ссылки которой нужно получить.

Результатом данной конструкции будет значение типа Тип для указанного типа.

Звучит туманно, не правда ли?

Давайте рассмотрим применение данной конструкции и всё сразу станет на свои места.

Пусть нам требуется отобрать все записи справочника Города, у которых составной реквизит ОтличительныйПризнак имеет значение типа СТРОКА:

01

Теперь давайте отберём все записи, у которых значения реквизита ОтличительныйПризнак являются ссылками на элементы справочника Цвета (таблица Справочник.Цвета):

02

Отступление

Как вы помните, некоторые элементы справочника Города не имеют реквизита ОтличительныйПризнак. Функция ТИПЗНАЧЕНИЯ для таких элементов выдаёт NULL.

Как можно сделать отбор таких элементов в запросе? Для этого предусмотрен специальный логический оператор ЕСТЬ NULL (не путать с функцией ЕСТЬNULL, которую мы рассмотрим ниже). Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.

Вот пример его использования:

03

Но есть и такие элементы (Сан-Паулу), у которых реквизит ОтличительныйПризнак (составного типа) просто не заполнен и равен специальному значению НЕОПРЕДЕЛЕНО.

Чтобы отобрать такие записи следует использовать другую конструкцию:

Но сравнение с НЕОПРЕДЕЛЕНО для определения пустых (не заполненных) реквизитов будет работать только для составных типов.

Кстати, у логического оператора ЕСТЬ NULL форма отрицания выглядит следующим образом:

Логический оператор ССЫЛКА

Оператор ССЫЛКА позволяет проверить, является ли значение выражения, указанного слева от него, ссылкой на таблицу , указанную справа.

К примеру, давайте выберем из справочника Города только те записи, у которых значение составного реквизита ОтличительныйПризнак являются ссылкой на элемент справочника Вкусы:

05

Как вы помните, эту же задачу мы могли бы решить используя ТИПЗНАЧЕНИЯ и ТИП:

Функция ЕСТЬNULL

Функция предназначена для замены значения NULL на другое значение.

Мы помним, что значение NULL возвращается в том случае, если запрашиваемый реквизит (поле, свойство) не существует.

Как например, реквизит ОтличительныйПризнак для групп справочника Города:

06

Функция ЕСТЬNULL поможет нам вывести другое значение в том случае, если это значение равно NULL. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. Пусть в данном случае это будет строка "Такого реквизита нет!":

08

Получается, что если первый параметр функции ЕСТЬNULL не равен NULL, то возвращается он. Если же он равен NULL, то возвращается второй параметр.

Функция ВЫРАЗИТЬ

Эта функция предназначена только для полей , имеющих составной тип . Отличным примером такого поля является свойство ОтличительныйПризнак у элементов справочника Города.

Как мы помним, составные поля могут быть одного из нескольких типов, указанных в конфигураторе.

Для поля ОтличительныйПризнак такими допустимыми типами являются СТРОКА, Справочник.Цвета и Справочник.Вкусы.

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

Давайте приведём все значения поля ОтличительныйПризнак к типу Справочник.Цвета:

09

В результате, все значения элементов, которые имели тип Справочник.Цвета, остались заполненными и оказались приведенными к указанному типу. Все значения других типов (СТРОКА, Справочник.Вкусы) теперь стали равны NULL. В этом состоит особенность приведения типа при помощи функции ВЫРАЗИТЬ.

Приводить тип можно или к примитивному типу (БУЛЕВО, ЧИСЛО, СТРОКА, ДАТА) или к ссылочному типу. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. Но тип, к которому делается приведение, обязательно должен входить в список типов для данного составного поля, иначе система выдаст ошибку.

Читайте также: