Имя: Пароль:
1C
1С v8
Получить Типы из ОписаниеТипов в запросе
0 Merkalov
 
28.12.21
04:55
Добрый день.

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

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

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

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

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

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

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

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

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

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


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

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