Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Получить Типы из ОписаниеТипов в запросе

Получить Типы из ОписаниеТипов в запросе
Я
   Merkalov
 
28.12.21 - 04:55
Добрый день.

Суть задачи: Запросом вытянуть записи из регистра бухгалтерии ГДЕ ТипЗначения значения установленного в качестве субконто не соответствует типам, указанным для данного ВидаСубконто в ПВХ.ВидыСубконто.

Берем физическую таблицу ЗначенияСубконто:

ХозрасчетныйСубконто.Вид                   -- ВидСубконто (Элемент ПВХ)
ХозрасчетныйСубконто.Вид.ТипЗначения       -- ОписаниеТипов, содержит возможные типы Субконто.
ТипЗначения(ХозрасчетныйСубконто.Значение) -- Наш тип, не соответствующий ни одному из типов указанный в ОписанииТипов строкой выше, а соответствовать должен, его и ищем.

Вопрос: Как сравнить «ТИП» и Типы/Тип из «ОписаниеТипов» в запросе, исключительно в запросе.
Важное условие: Текст запроса с параметрами можно сформировать только 1 раз.

Из идей: В параметры подсунуть типы или пустые ссылки на все виды субконто (не предполагается что они будут составными в данной конфигурации), но запрос будет жить сам по себе и каждый раз возвращаться к нему чтобы добавить туда новый параметр под новый вид субконто - не системно)
Ещё идеи: Пустую ссылку/тип добавить уже как реквизит ПВХ (присваивать значение ПриЗаписи) - ради одной мелкой задачи как-то громоздко.
   Merkalov
 
1 - 28.12.21 - 05:05
Как присвоить значение не соответствующее типу субконто:

Для счета определен ВидСубконто1 - "БанковскиеСчета", тип значения - "СправочникСсылка.БанковскиеСчета", но в проводках для данного счета можно указать значение не из справочника БанковскиеСчета, а скажем из справочника Контрагенты, главное условие – чтобы под «кривое» значение был ТипСубконто в ПВХ, в противном случае платформа не даст присвоить значение (значение субконто примет значение «Неопределено»).
   hhhh
 
2 - 28.12.21 - 05:48
(1) не, много раз присваивал, платформа всё дает, можно и контрагенты и номенклатуру и всё, что хочешь. Это вам кто-то лапшу на уши навешал.
   Merkalov
 
3 - 28.12.21 - 05:52
(2) Проверял же, не с чьих-то слов говорю, не дает любое значение присвоить, а только если под данный тип значения есть ВидСубконто в ПВХ. Платформа 8.3.10
   hhhh
 
4 - 28.12.21 - 06:03
(3) так это не платформа, это у вас в программе заглушки какие-то стоят. Попробуйте

ОбменДанными.Загрузка = Истина;

для набора записей указать, тогда присваивание будет в режиме обмена данными, то есть без всяких проверок.
   Merkalov
 
5 - 28.12.21 - 06:23
(4) Это же само собой. Повторный тест уже на бух. базе вернул мне тот же результат о котором я говорил выше. К решению задачи это не имеет отношения, так что переубеждать вас не буду.
   youalex
 
6 - 28.12.21 - 06:30
Можно конечно программно сначала заполнить таблицу значений ПВХСсылка/Тип и запихать ее в вт, а дальше лефт джойн
   Merkalov
 
7 - 28.12.21 - 06:36
(6) Об этом способе писал в самом посте, запрос будет сформирован программно и отдан "как есть", но как только добавится новый вид субконто - запрос станет не актуальным, нужно будет ручками добавлять новый параметр или обработкой переформировывать запрос с параметрами, чего очень не хочется.
   МимохожийОднако
 
8 - 28.12.21 - 07:04
из справки по языку запросов.
Приведение типа
Поля исходных таблиц могут иметь составной тип. Для таких полей возникает необходимость привести значения поля к какому-либо определенному типу.
<Приведение типа>
         |
         ВЫРАЗИТЬ ( <Выражение> КАК <Тип значения> )
                                                          |
                                                          БУЛЕВО |
ЧИСЛО [(Длина[, Точность])] |
СТРОКА [(Длина)] |
ДАТА |
<Имя таблицы>
                                                                          <Длина> - ЧИСЛО; <Точность> - ЧИСЛО
<Выражение> приводится к одному из примитивных типов, или к ссылочному типу данных; в последнем случае <Имя таблицы> указывает на соответствующую таблицу информационной базы.
Если <Выражение> содержит в составном типе требуемый <Тип значения>, то приведение типа считается осуществимым, и для каждого значения указанного типа результатом будет это самое значение. Для значений других типов результатом приведения типа будет значение NULL.
Если <Выражение> не содержит в составном типе требуемый <Тип значения>, то выполнение данного запроса завершится ошибкой из-за принципиальной невозможности совершить приведение типов.
Для <Тип значения> СТРОКА с указанием длины максимальный размер строки составляет 1024.
...
Ты бы не стеснялся, а привёл кусок кода, что уже успел наваять. Глядишь, народ и подтянется
   Merkalov
 
9 - 28.12.21 - 07:15
(8) Опять же, чтобы использовать "Выразить", нужно знать что писать после "КАК", что опять приводит к потребности ввода этих данных извне, а не получение запросом. Запрос универсальный и не должен смотреть на субконто определенного счета с известными типами этих субконто. Запрос требуется для некого контроля. Код скинуть не могу, потому что его нет) Нужна идея, а код напишется.
   МимохожийОднако
 
10 - 28.12.21 - 07:25
Ты сделай запрос хотя бы по одному типу, а потом уже тянись к универсальности. В чём истинная причина подобной задачи? Обсуждаем возможный инструментарий, а я так и не понял.
   hhhh
 
11 - 28.12.21 - 07:32
(9) а в чем смысл именно писать эту обработку в запросе? Ведь понятно, что меняют вид субконто у счета один раз в 5-10 лет. Поэтому такая разработка понадобится раз в 5 лет. И можно спокойно сделать всё в коде, без всяких запросов, потому что время выполнения неважно. Это же разовая обработка. Пусть хоть сутки выполняется.
   Merkalov
 
12 - 28.12.21 - 07:37
(10) Зачем рисовать очевидный запрос? Он и в голове помещается, тут не сработает "накидай, а дальше само пойдет". Инструмент контроля за проводками, у субконто есть тип и значение должно ему соответствовать. Этот запрос - маленький кусочек инструмента.

(11) Есть N-программистов пишущих самописку, не все и не всегда пишут код под проводки корректно, цель исправлять такие ситуации сейчас, а не через полгода с конвертацией большого числа данных.
   МимохожийОднако
 
13 - 28.12.21 - 07:41
(12) Так и делай этот контроль при записи в регистр. Запрос при этом не нужен.
Заодно и проверишь работу "N-программистов". Какие действия планируешь при обнаружении неправильной записи?
   Merkalov
 
14 - 28.12.21 - 07:50
(13) Идея нравится. За исключением того факта что записей в регистр довольно много(много-много). Да и обменом ещё что-нибудь могут закинуть. Но идея нравится, да.

>Какие действия планируешь при обнаружении неправильной записи?
Просить больше так не делать.


Тема на запрос актуальна.
   МимохожийОднако
 
15 - 28.12.21 - 07:52
Из справки:
Правила сравнения значений
...
не допускается сравнение полей неограниченной длины (строки неограниченной длины, ХранилищеЗначения, поле ТИПЗНАЧЕНИЯ из таблицы планов видов характеристик).
...
Полагаю,что запрос тебе не поможет.
   МимохожийОднако
 
16 - 28.12.21 - 07:53
(14) "Просить больше так не делать". А если серьёзно? Пошлёшь ты сообщение, которое увидит бухгалтер, а дальше что?
   Merkalov
 
17 - 28.12.21 - 07:57
(16) Код под проводки пишет не бухгалтер...
   hhhh
 
18 - 28.12.21 - 07:59
(16) ++ согласен, у нас были случаи, абсолютно всем по барабану, что там где-то есть неправильное субконто. Спокойно работают.
   МимохожийОднако
 
19 - 28.12.21 - 08:00
(17) правильно. Так что будешь делать? Как программа будет "просить"?
   Merkalov
 
20 - 28.12.21 - 08:03
Товарищи, некорректное поведение будет исправлено, так или иначе, тем программистом что допустил ошибку или нет - это уже никого не интересует.
   hhhh
 
21 - 28.12.21 - 08:03
(17) всё-таки, если открыть отладчик и посмотреть вид Субконто, там 200 строчек, из них пара строчек заполнена, где-то в середине списка, остальные строчки неопределено. Поэтому к сожалению ОписаниеТипов тебе не поможет. Описание типов везде одинаково и в нем все субконто, 200 штук.
   МимохожийОднако
 
22 - 28.12.21 - 08:14
(20) Но на прямой вопрос ты так и не ответил. Какое поведение программы планируешь при обнаружении ошибки?
Согласен ли ты  с тем, что запрос тебе не позволит сравнить типы значений?
   acht
 
23 - 28.12.21 - 08:53
(12) > Есть N-программистов 

А N+1 программист спрашивает на форуме, как именно им это делать. Милота.
   Фрэнки
 
24 - 28.12.21 - 09:50
(23) имхо, это примерно из той же оперы, как из компании с численностью программистов в 2 700 человек приходят на мисту с вакансией на РП


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.