Ошибка при обходе условий в запросах.

1. DaniilBaza 01.10.24 13:28 Сейчас в теме
При построении запроса я столкнулся с такой проблемой. При вытягивании счёта мне нужно определять, является ли субконто контрагентом, и если является, то идёт сравнение этого контрагента с текущей организацией по ИНН. Если он одинаковый, то беру определённый счёт. И казалось бы, я собрал конструкцию, которая должна была бы работать в обычном коде:

ВЫБОР
КОГДА ТИПЗНАЧЕНИЯ(Данные.СубконтоДт1) = ТИП(Справочник.Контрагенты)
И Данные.Организация.ИНН = Данные.СубконтоДт1.ИНН
ТОГДА ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыПоТекущимОперациям)
ИНАЧЕ ЕСТЬNULL(ПрочиеДт.СчетУчета, ЕСТЬNULL(СчетаДтДанных.Ссылка, &ПустаяСсылка))
КОНЕЦ

Обычный код должен был проверить первое условие "КОГДА ТИПЗНАЧЕНИЯ(Данные.СубконтоДт1) = ТИП(Справочник.Контрагенты)", и в случае если оно Ложь, даже не проверял бы второе условие, а сразу перешёл к ИНАЧЕ. Но в запросе почему-то после проверки первого условия у меня вываливается в ошибку на втором условии мол у Данные.СубконтоДт1 отсутствует реквизит ИНН. Разумеется он там отсутствует, я ради этого и делал первую проверку. Я подумал, может в запросе он будет проверять все условия, которые идут через оператор И и немного доделал конструкцию:

ВЫБОР
КОГДА ТИПЗНАЧЕНИЯ(Данные.СубконтоДт1) = ТИП(Справочник.Контрагенты) ТОГДА
(ВЫБОР
КОГДА Данные.Организация.ИНН = Данные.СубконтоДт1.ИНН ТОГДА ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыПоТекущимОперациям)
ИНАЧЕ ЕСТЬNULL(ПрочиеДт.СчетУчета, ЕСТЬNULL(СчетаДтДанных.Ссылка, &ПустаяСсылка))
КОНЕЦ)
ИНАЧЕ ЕСТЬNULL(ПрочиеДт.СчетУчета, ЕСТЬNULL(СчетаДтДанных.Ссылка, &ПустаяСсылка))
КОНЕЦ

Но нет, в этом варианте он точно также вываливается в ошибку, что у субконто отсутствует ИНН. Я собрал систему, в которой я вручную подаю данные в этот запрос, чтобы удостовериться что проблема не в данных. Закинул в запрос ТЗшку с одной строкой через параметр, где указал что субконто это Статья расходов. Ошибка повторилась. Закинул в субконто контрагента, ошибки нет. Зачем 1Ска в запросе идёт проверять условия, которые она и так обойдёт стороной? Методы ВЫРАЗИТЬ и ССЫЛКА тут с субконто не работают, жалуются на несоответствие типов. И как тогда эту проблему можно решить? Если только вне запроса, то это будет очень громостко и костыльно.
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
13. DaniilBaza 01.10.24 15:03 Сейчас в теме +0.1 $m
Проблема решилась через присоединение к основной таблице справочника с контрагентами связав их по субконту. И потом сравниваю ИНН организации с ИНН из присоединённой таблицы справочника.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
6. Bukaska 140 01.10.24 13:49 Сейчас в теме
(1)
ВЫБОР
КОГДА ТИПЗНАЧЕНИЯ(Данные.СубконтоДт1) = ТИП(Справочник.Контрагенты)
И Данные.Организация.ИНН = Данные.СубконтоДт1.ИНН
ТОГДА ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыПоТекущимОперациям)
ИНАЧЕ ЕСТЬNULL(ПрочиеДт.СчетУчета, ЕСТЬNULL(СчетаДтДанных.Ссылка, &ПустаяСсылка))
КОНЕЦ


А так не работает?
ВЫБОР
КОГДА ТИПЗНАЧЕНИЯ(Данные.СубконтоДт1) = ТИП(Справочник.Контрагенты)
И Данные.Организация.ИНН = Данные.СубконтоДт1.ИНН
ТОГДА ВЫРАЗИТЬ(ПланСчетов.Хозрасчетный.РасчетыПоТекущимОперациям) КАК  РасчетыПоТекущимОперациям
ИНАЧЕ ЕСТЬNULL(ПрочиеДт.СчетУчета, ЕСТЬNULL(СчетаДтДанных.Ссылка, &ПустаяСсылка))
КОНЕЦ


Но сразу вопрос.. ИНН точно субконто? Дайте корректный запрос
12. DaniilBaza 01.10.24 14:03 Сейчас в теме
(6)

[ОшибкаВоВремяВыполненияВстроенногоЯзыка]
по причине:
{(806, 50)}: Поле не найдено "Данные.СубконтоДт1.ИНН"
И Данные.Организация.ИНН = Данные.СубконтоДт1.<<?>>ИНН
14. Bukaska 140 01.10.24 17:00 Сейчас в теме
(12) КАК ИНН может быть субконто?
Субконто это разрез учета(справочник), а ИНН это просто реквизит числового типа
15. DaniilBaza 01.10.24 17:16 Сейчас в теме
(14) ИНН и не может быть субконто, откуда вы это взяли?
8. SlavaKron 01.10.24 13:50 Сейчас в теме
(1) Вы хотите переопределить что-то в проводках? Зачем менять типовой запрос? – просто сделайте свою дописку в ПередЗаписью набора регистра бухгалтерии.
2. user2033930 01.10.24 13:35 Сейчас в теме
Реально думаешь, что ИНН имеет тип Спр.Контрагенты?
ТИПЗНАЧЕНИЯ(Данные.СубконтоДт1.ИНН) = ТИП(Справочник.Контрагенты)
3. DaniilBaza 01.10.24 13:37 Сейчас в теме
(2) Это я случайно тут оставил. Копировал запрос во временный блокнотик в котором его подгонял, из которого скопировал кусок запроса. В рабочей версии я удалил ИНН и оставил просто ТИПЗНАЧЕНИЯ(Данные.СубконтоДт1) = ТИП(Справочник.Контрагенты)
4. user2033930 01.10.24 13:40 Сейчас в теме
Используй ВЫРАЗИТЬ. Составной тип Субконто ещё никто не отменял.
5. DaniilBaza 01.10.24 13:43 Сейчас в теме
(4) Я же специально в вопросе написал, что ВЫРАЗИТЬ и ССЫЛКА тут не работают. Вываливается в ошибку о несоответствии типов. Данные тянутся не из регистра, а из ВТшки, которая собирается по типовым модулям.
7. Bukaska 140 01.10.24 13:50 Сейчас в теме
(5) А в отладчике какой тип данных?
10. DaniilBaza 01.10.24 13:55 Сейчас в теме
(7) "Статья расходов, Null"
9. scarl1n 01.10.24 13:55 Сейчас в теме
А ИНН отсутствует точно в субконто, а не в организации? Может там NULL.
11. DaniilBaza 01.10.24 13:57 Сейчас в теме
(9) Нет, в организации он не может отсутствовать. При ручной проверке я закидывал заполненные строки.
13. DaniilBaza 01.10.24 15:03 Сейчас в теме +0.1 $m
Проблема решилась через присоединение к основной таблице справочника с контрагентами связав их по субконту. И потом сравниваю ИНН организации с ИНН из присоединённой таблицы справочника.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот