RDT1C
RDT1C copied to clipboard
Конструктор запросов ИР. ОБЪЕДИНИТЬ ВСЕ ошибики типовых
За последний месяц столкнулся с двумя ошибками в запросах типовой конфигурации ERP. Суть проблемы, вот тексты запросов формирующих движения в документе СчетФактураВыданный по регистру НДСЗаписиКнигиПокупок:
ERP 2.4.14.181-2.5.9
#Область ТекстСторноИсправление
ТекстЗапросаСторноИсправление = "
|
|ВЫБРАТЬ
| &Период КАК Период,
| НДСЗаписиКнигиПокупок.Организация КАК Организация,
| НДСЗаписиКнигиПокупок.Поставщик КАК Поставщик,
| НДСЗаписиКнигиПокупок.СчетФактура КАК СчетФактура,
| НДСЗаписиКнигиПокупок.ВидЦенности КАК ВидЦенности,
| НДСЗаписиКнигиПокупок.СтавкаНДС КАК СтавкаНДС,
| НДСЗаписиКнигиПокупок.СчетУчетаНДС КАК СчетУчетаНДС,
| НДСЗаписиКнигиПокупок.Событие КАК Событие,
| &Период КАК ДатаСобытия,
| &Исправление КАК Исправление,
| ВЫБОР
| КОГДА НДСЗаписиКнигиПокупок.ЗаписьДополнительногоЛиста
| ТОГДА ИСТИНА
| КОГДА НАЧАЛОПЕРИОДА(НДСЗаписиКнигиПокупок.Период,КВАРТАЛ) < НАЧАЛОПЕРИОДА(&Период, КВАРТАЛ)
| ТОГДА ИСТИНА
| КОНЕЦ КАК ЗаписьДополнительногоЛиста,
| ВЫБОР
| КОГДА НДСЗаписиКнигиПокупок.КорректируемыйПериод <> ДАТАВРЕМЯ(1,1,1)
| ТОГДА НДСЗаписиКнигиПокупок.КорректируемыйПериод
| КОГДА НАЧАЛОПЕРИОДА(НДСЗаписиКнигиПокупок.Период,КВАРТАЛ) < НАЧАЛОПЕРИОДА(&Период,КВАРТАЛ)
| ТОГДА НДСЗаписиКнигиПокупок.Период
| КОНЕЦ КАК КорректируемыйПериод,
| НДСЗаписиКнигиПокупок.ИсправленныйСчетФактура КАК ИсправленныйСчетФактура,
| -НДСЗаписиКнигиПокупок.СуммаБезНДСОборот КАК СуммаБезНДС,
| -НДСЗаписиКнигиПокупок.НДСОборот КАК НДС,
| &КодВидаОперацииНаУменьшение КАК КодВидаОперации
|ИЗ
| РегистрНакопления.НДСЗаписиКнигиПокупок.Обороты(
| ,
| ,
| Регистратор,
| Организация В (&Организация, &Контрагент)
| И СчетФактура В (ВЫБРАТЬ Т.СчетФактура ИЗ ВтСчетаФактурыИсправления КАК Т)
| И ИсправленныйСчетФактура = &СчетФактураПредыдущееИсправление) КАК НДСЗаписиКнигиПокупок
|
|ГДЕ
| &Исправление
| И НДСЗаписиКнигиПокупок.Регистратор <> &Ссылка
| И НДСЗаписиКнигиПокупок.Регистратор ССЫЛКА Документ.СчетФактураВыданный
| И (НДСЗаписиКнигиПокупок.СуммаБезНДСОборот > 0
| ИЛИ НДСЗаписиКнигиПокупок.НДСОборот > 0)
|";
#КонецОбласти
#Область ТекстКорректировка
ТекстЗапросаКорректировка = "
|
|ВЫБРАТЬ
| &Период КАК Период,
| &Организация КАК Организация,
| &Контрагент КАК Поставщик,
| ВЫБОР
| КОГДА &Исправление
| ТОГДА &СчетФактураОснование
| ИНАЧЕ
| &Ссылка
| КОНЕЦ КАК СчетФактура,
| ТаблицаДанных.ВидЦенности КАК ВидЦенности,
| ТаблицаДанных.СтавкаНДС КАК СтавкаНДС,
| NULL КАК СчетУчетаНДС,
| ВЫБОР КОГДА &НалогообложениеНДС = ЗНАЧЕНИЕ(Перечисление.ТипыНалогообложенияНДС.ОблагаетсяНДСУПокупателя)
| ТОГДА ЗНАЧЕНИЕ(Перечисление.СобытияПоНДСПокупки.НалогИсчисляетПокупатель)
| ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.СобытияПоНДСПокупки.ПредъявленНДСКВычету)
| КОНЕЦ КАК Событие,
| &Период КАК ДатаСобытия,
| ЛОЖЬ КАК ЗаписьДополнительногоЛиста,
| NULL КАК КорректируемыйПериод,
| &Исправление КАК Исправление,
| ВЫБОР
| КОГДА &Исправление
| ТОГДА &Ссылка
| КОНЕЦ КАК ИсправленныйСчетФактура,
| СУММА(ТаблицаДанных.СуммаУменьшение - ТаблицаДанных.СуммаНДСУменьшение) КАК СуммаБезНДС,
| СУММА(ТаблицаДанных.СуммаНДСУменьшение) КАК НДС,
| &КодВидаОперацииНаУменьшение КАК КодВидаОперации
|ИЗ
| ВтТаблицаКорректировки КАК ТаблицаДанных
|
|ГДЕ
| &Корректировочный
| И (ТаблицаДанных.СуммаНДСУменьшение > 0
| ИЛИ &НалогообложениеНДС = ЗНАЧЕНИЕ(Перечисление.ТипыНалогообложенияНДС.ОблагаетсяНДСУПокупателя))
| И НЕ ТаблицаДанных.Комиссия
| И &Организация <> ЗНАЧЕНИЕ(Справочник.Организации.УправленческаяОрганизация)
|
|СГРУППИРОВАТЬ ПО
| ТаблицаДанных.ВидЦенности,
| ТаблицаДанных.СтавкаНДС
|";
#КонецОбласти
ТекстЗапроса =
ТекстЗапросаСторноИсправление
+ " ОБЪЕДИНИТЬ ВСЕ " + ТекстЗапросаКорректировка;
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
Возврат ТекстЗапроса
Это из ERP 2.4.14.181 документ АвансовыйОтчет формирует движения в регистр СуммыДокументовВВалютеРегл:
ТекстЗапроса = "
|ВЫБРАТЬ
| ТаблицаДокумента.НомерСтроки,
| &Период КАК Период,
| ВЫБОР КОГДА &Мультивалютный ТОГДА
| ТаблицаДокумента.Валюта
| ИНАЧЕ
| &Валюта
| КОНЕЦ КАК Валюта,
| ТаблицаДокумента.ИдентификаторСтроки КАК ИдентификаторСтроки,
| ТаблицаДокумента.Сумма - ТаблицаДокумента.СуммаНДС КАК СуммаБезНДС,
| ТаблицаДокумента.СтавкаНДС КАК СтавкаНДС,
| ТаблицаДокумента.СуммаНДС КАК СуммаНДС,
| ВЫБОР КОГДА &Мультивалютный ТОГДА
| ВЫРАЗИТЬ((ТаблицаДокумента.Сумма - ТаблицаДокумента.СуммаНДС) * ЕСТЬNULL(ТаблицаКурсыВалютРегл.КоэффициентПересчета, 0) КАК ЧИСЛО(31,2))
| ИНАЧЕ
| ВЫРАЗИТЬ((ТаблицаДокумента.Сумма - ТаблицаДокумента.СуммаНДС) * &КоэффициентПересчетаВВалютуРегл КАК ЧИСЛО(31,2))
| КОНЕЦ КАК СуммаБезНДСРегл,
| ВЫБОР КОГДА &Мультивалютный ТОГДА
| ВЫРАЗИТЬ(ТаблицаДокумента.СуммаНДС * ЕСТЬNULL(ТаблицаКурсыВалютРегл.КоэффициентПересчета, 0) КАК ЧИСЛО(31,2))
| ИНАЧЕ
| ВЫРАЗИТЬ(ТаблицаДокумента.СуммаНДС * &КоэффициентПересчетаВВалютуРегл КАК ЧИСЛО(31,2))
| КОНЕЦ КАК СуммаНДСРегл,
| НЕОПРЕДЕЛЕНО КАК ТипРасчетов,
| ВЫБОР КОГДА &Мультивалютный ТОГДА
| ВЫРАЗИТЬ((ТаблицаДокумента.Сумма - ТаблицаДокумента.СуммаНДС) * ЕСТЬNULL(ТаблицаКурсыВалютУпр.КоэффициентПересчета, 0) КАК ЧИСЛО(31,2))
| ИНАЧЕ
| ВЫРАЗИТЬ((ТаблицаДокумента.Сумма - ТаблицаДокумента.СуммаНДС) * &КоэффициентПересчетаВВалютуУпр КАК ЧИСЛО(31,2))
| КОНЕЦ КАК СуммаБезНДСУпр,
| ВЫБОР КОГДА &Мультивалютный ТОГДА
| ВЫРАЗИТЬ(ТаблицаДокумента.СуммаНДС * ЕСТЬNULL(ТаблицаКурсыВалютУпр.КоэффициентПересчета, 0) КАК ЧИСЛО(31,2))
| ИНАЧЕ
| ВЫРАЗИТЬ(ТаблицаДокумента.СуммаНДС * &КоэффициентПересчетаВВалютуУпр КАК ЧИСЛО(31,2))
| КОНЕЦ КАК СуммаНДСУпр
|
|ИЗ
| Документ.АвансовыйОтчет.ПрочиеРасходы КАК ТаблицаДокумента
|
| ЛЕВОЕ СОЕДИНЕНИЕ ВТКурсыВалютРегл КАК ТаблицаКурсыВалютРегл
| ПО ТаблицаКурсыВалютРегл.Валюта = ТаблицаДокумента.Валюта
| ЛЕВОЕ СОЕДИНЕНИЕ ВТКурсыВалютУпр КАК ТаблицаКурсыВалютУпр
| ПО ТаблицаКурсыВалютУпр.Валюта = ТаблицаДокумента.Валюта
|ГДЕ
| ТаблицаДокумента.Ссылка = &Ссылка
| И ТаблицаДокумента.Ссылка.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыАвансовогоОтчета.Утвержден)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ТаблицаДокумента.НомерСтроки,
| &Период КАК Период,
| ВЫБОР КОГДА &Мультивалютный ТОГДА
| ТаблицаДокумента.Валюта
| ИНАЧЕ
| &Валюта
| КОНЕЦ КАК Валюта,
| ТаблицаДокумента.ИдентификаторСтроки КАК ИдентификаторСтроки,
| НЕОПРЕДЕЛЕНО КАК СтавкаНДС,
| ТаблицаДокумента.Сумма КАК СуммаБезНДС,
| 0 КАК СуммаНДС,
| ВЫБОР КОГДА &Мультивалютный ТОГДА
| ВЫРАЗИТЬ(ТаблицаДокумента.Сумма * ЕСТЬNULL(ТаблицаКурсыВалютРегл.КоэффициентПересчета, 0) КАК ЧИСЛО(31,2))
| ИНАЧЕ
| ВЫРАЗИТЬ(ТаблицаДокумента.Сумма * &КоэффициентПересчетаВВалютуРегл КАК ЧИСЛО(31,2))
| КОНЕЦ КАК СуммаБезНДСРегл,
| 0 КАК СуммаНДСРегл,
| НЕОПРЕДЕЛЕНО КАК ТипРасчетов,
| ВЫБОР КОГДА &Мультивалютный ТОГДА
| ВЫРАЗИТЬ(ТаблицаДокумента.Сумма * ЕСТЬNULL(ТаблицаКурсыВалютУпр.КоэффициентПересчета, 0) КАК ЧИСЛО(31,2))
| ИНАЧЕ
| ВЫРАЗИТЬ(ТаблицаДокумента.Сумма * &КоэффициентПересчетаВВалютуУпр КАК ЧИСЛО(31,2))
| КОНЕЦ КАК СуммаБезНДСУпр,
| 0 КАК СуммаНДСУпр
|
|ИЗ
| Документ.АвансовыйОтчет.ОплатаПоставщикам КАК ТаблицаДокумента
|
| ЛЕВОЕ СОЕДИНЕНИЕ ВТКурсыВалютРегл КАК ТаблицаКурсыВалютРегл
| ПО ТаблицаКурсыВалютРегл.Валюта = ТаблицаДокумента.Валюта
| ЛЕВОЕ СОЕДИНЕНИЕ ВТКурсыВалютУпр КАК ТаблицаКурсыВалютУпр
| ПО ТаблицаКурсыВалютУпр.Валюта = ТаблицаДокумента.Валюта
|ГДЕ
| ТаблицаДокумента.Ссылка = &Ссылка
| И ТаблицаДокумента.Ссылка.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыАвансовогоОтчета.Утвержден)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ТаблицаДокумента.НомерСтроки,
| &Период КАК Период,
| ВЫБОР КОГДА ТаблицаДокумента.ВалютаКонвертации <> &ВалютаРегламентированногоУчета ТОГДА
| ТаблицаДокумента.ВалютаКонвертации
| ИНАЧЕ
| ТаблицаДокумента.Валюта
| КОНЕЦ КАК Валюта,
| ТаблицаДокумента.ИдентификаторСтроки КАК ИдентификаторСтроки,
| ВЫБОР КОГДА ТаблицаДокумента.ВалютаКонвертации <> &ВалютаРегламентированногоУчета ТОГДА
| ТаблицаДокумента.СуммаКонвертации
| ИНАЧЕ
| ТаблицаДокумента.Сумма
| КОНЕЦ КАК СуммаБезНДС,
| НЕОПРЕДЕЛЕНО КАК СтавкаНДС,
| 0 КАК СуммаНДС,
| ВЫБОР КОГДА ТаблицаДокумента.ВалютаКонвертации <> &ВалютаРегламентированногоУчета ТОГДА
| ВЫРАЗИТЬ(ТаблицаДокумента.СуммаКонвертации * ЕСТЬNULL(ТаблицаКурсыВалютРеглСуммаКонвертации.КоэффициентПересчета, 0) КАК ЧИСЛО(31,2))
| ИНАЧЕ
| ВЫРАЗИТЬ(ТаблицаДокумента.Сумма * ЕСТЬNULL(ТаблицаКурсыВалютРеглСумма.КоэффициентПересчета, 0) КАК ЧИСЛО(31,2))
| КОНЕЦ КАК СуммаБезНДСРегл,
| 0 КАК СуммаНДСРегл,
| НЕОПРЕДЕЛЕНО КАК ТипРасчетов,
| ВЫБОР КОГДА ТаблицаДокумента.ВалютаКонвертации <> &ВалютаУправленческогоУчета ТОГДА
| ВЫРАЗИТЬ(ТаблицаДокумента.СуммаКонвертации * ЕСТЬNULL(ТаблицаКурсыВалютУпрСуммаКонвертации.КоэффициентПересчета, 0) КАК ЧИСЛО(31,2))
| ИНАЧЕ
| ВЫРАЗИТЬ(ТаблицаДокумента.Сумма * ЕСТЬNULL(ТаблицаКурсыВалютУпрСумма.КоэффициентПересчета, 0) КАК ЧИСЛО(31,2))
| КОНЕЦ КАК СуммаБезНДСУпр,
| 0 КАК СуммаНДСУпр
|
|ИЗ
| Документ.АвансовыйОтчет.КонвертацияВалюты КАК ТаблицаДокумента
|
| ЛЕВОЕ СОЕДИНЕНИЕ ВТКурсыВалютРегл КАК ТаблицаКурсыВалютРеглСумма
| ПО ТаблицаКурсыВалютРеглСумма.Валюта = ТаблицаДокумента.Валюта
| ЛЕВОЕ СОЕДИНЕНИЕ ВТКурсыВалютРегл КАК ТаблицаКурсыВалютРеглСуммаКонвертации
| ПО ТаблицаКурсыВалютРеглСуммаКонвертации.Валюта = ТаблицаДокумента.ВалютаКонвертации
| ЛЕВОЕ СОЕДИНЕНИЕ ВТКурсыВалютУпр КАК ТаблицаКурсыВалютУпрСумма
| ПО ТаблицаКурсыВалютУпрСумма.Валюта = ТаблицаДокумента.Валюта
| ЛЕВОЕ СОЕДИНЕНИЕ ВТКурсыВалютУпр КАК ТаблицаКурсыВалютУпрСуммаКонвертации
| ПО ТаблицаКурсыВалютУпрСуммаКонвертации.Валюта = ТаблицаДокумента.ВалютаКонвертации
|ГДЕ
| ТаблицаДокумента.Ссылка = &Ссылка
| И &Мультивалютный
| И ТаблицаДокумента.Ссылка.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыАвансовогоОтчета.Утвержден)
|";
Если внимательно изучить два вышестоящих блока кода, то видно, что в первом нарушена последовательность полей, вот участки в объединении:
| &Период КАК ДатаСобытия,
| &Исправление КАК Исправление,
| &Период КАК ДатаСобытия,
| ЛОЖЬ КАК ЗаписьДополнительногоЛиста,
| NULL КАК КорректируемыйПериод,
| &Исправление КАК Исправление,
И второй документ:
| ТаблицаДокумента.ИдентификаторСтроки КАК ИдентификаторСтроки,
| ТаблицаДокумента.Сумма - ТаблицаДокумента.СуммаНДС КАК СуммаБезНДС,
| ТаблицаДокумента.СтавкаНДС КАК СтавкаНДС,
| ТаблицаДокумента.СуммаНДС КАК СуммаНДС,
| ТаблицаДокумента.ИдентификаторСтроки КАК ИдентификаторСтроки,
| НЕОПРЕДЕЛЕНО КАК СтавкаНДС,
| ТаблицаДокумента.Сумма КАК СуммаБезНДС,
| 0 КАК СуммаНДС,
Предложение заключается в том, чтобы добавить в Конструктор запросов ИР расширенную проверку, которая бы брала имена полей объединений запросов и сравнивала их позиции, в случае если имя поля не совпадает, например СтавкаНДС <> СуммаБезНДС, то выдавать предупреждение пользователю. Такие ошибки достаточно тяжело ловить самому, т.к. они себя проявляют уже только в момент анализа выходного результата.
Было бы неплохо тексты запросов в виде одного файла консоли запросов сделать. Файлы "неудобных" с точки зрения сайта расширений оборачивай в zip.
Сделал ОбъединитьВсе.zip
Проблему понял. Создал задачу https://www.hostedredmine.com/issues/949195
Насколько понятным тебе кажется сообщение Запрос[0]. Различные имена полей объединения Часть[1].Чук - Часть[2].Ф1 Запрос[0]. Различные имена полей объединения Часть[1].Ф1 - Часть[2].Чук ?
Для твоих примеров будет так
1.СчетФактураВыданный Запрос[0]. Различные имена полей объединения Часть[1].ЗаписьДополнительногоЛиста - Часть[2].Исправление Запрос[0]. Различные имена полей объединения Часть[1].КорректируемыйПериод - Часть[2].ЗаписьДополнительногоЛиста Запрос[0]. Различные имена полей объединения Часть[1].Исправление - Часть[2].КорректируемыйПериод
- Ты его уже исправил конструктором ИР (видимо форматированием). Потому там ошибок нет.
- Понятно будет.
- Форматировал, но сам не исправлял, вроде показывает несоответствие:
Конструктор запроса ИР сам переименовал поля после форматирования во втором объединении:
Так и задумано. Конструктор должен выдавать согласованный текст запроса, где в частности имена полей во всех частях объединения будут одинаковыми на одинаковых позициях. Поменял сообщение на лучше отражающее происходящее: В запросе[1] переименовано поле части[2] объединения Ф1->Чук. Старое имя в комментарии. В запросе[1] переименовано поле части[2] объединения Чук->Ф1. Старое имя в комментарии.
Реализовано в 6.43
Спасибо. Работает.