Проверка на неопределено
Здравствуйте! Помогите пожалуйста разобраться.
Вот запрос:
Но иной раз авансов нет. И тогда весь запрос не отрабатывает, по всем полям неопределенно, а данные из него нужны дальше в любом случае. Как проверить поле ХозрасчетныйОстаткиИОбороты.СуммаОборотКт на неопределенно и дать ему значение 0.
пробовал уже по разному и ЕСТЬ NULL и неопределенно, выдает ошибку. Спасибо.
Вот запрос:
ВЫБРАТЬ
ЗаказыПокупателейОстаткиИОбороты.ДоговорКонтрагента КАК ДоговорКонтрагента,
ЗаказыПокупателейОстаткиИОбороты.СуммаВзаиморасчетовПриход КАК СуммаДоговора
ПОМЕСТИТЬ СуммаДоговораВсего
ИЗ
РегистрНакопления.ЗаказыПокупателей.ОстаткиИОбороты КАК ЗаказыПокупателейОстаткиИОбороты
ГДЕ
ЗаказыПокупателейОстаткиИОбороты.ДоговорКонтрагента = &ДоговорКонтрагента
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ХозрасчетныйОстаткиИОбороты.Субконто2 КАК Договор,
СУММА(ХозрасчетныйОстаткиИОбороты.СуммаОборотКт) КАК СуммаАвансов,
СуммаДоговораВсего.СуммаДоговора
ИЗ
РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(, , Регистратор, , Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыПоАвансамПолученным), , ) КАК ХозрасчетныйОстаткиИОбороты,
СуммаДоговораВсего КАК СуммаДоговораВсего
ГДЕ
ХозрасчетныйОстаткиИОбороты.Субконто2 = &Субконто2
И ХозрасчетныйОстаткиИОбороты.Регистратор ССЫЛКА Документ.ПлатежноеПоручениеВходящее
СГРУППИРОВАТЬ ПО
ХозрасчетныйОстаткиИОбороты.Субконто2,
СуммаДоговораВсего.СуммаДоговора
ПоказатьНо иной раз авансов нет. И тогда весь запрос не отрабатывает, по всем полям неопределенно, а данные из него нужны дальше в любом случае. Как проверить поле ХозрасчетныйОстаткиИОбороты.СуммаОборотКт на неопределенно и дать ему значение 0.
пробовал уже по разному и ЕСТЬ NULL и неопределенно, выдает ошибку. Спасибо.
По теме из базы знаний
- Проверка орфографии средствами Yandex Speller
- Бесплатная проверка контрагентов в ФНС (общий модуль с алгоритмом). На примере выводим статус в список справочника контрагентов
- Интеграция сервиса проверки идентификационных реквизитов юридических лиц по данным ЕГРН и 1С:Предприятие 8
- Проверка мобильного телефона в базе МВД Украины (IMEI)
- Онлайн проверка марок Честный знак при разрешительном порядке в розничной торговле для v.8 и 7.7
Найденные решения
(28)
Можно и без..
В любом случае будет работать лучше чем в (0) и быстрее
Можно и без..
|ВЫБРАТЬ
| &ДоговорКонтрагента КАК ДоговорКонтрагента ,
| ЕСТЬNULL(Хозрасчетный.СуммаОборотКт, 0) КАК СуммаАвансов,
| ЕСТЬNULL(Заказы.СуммаВзаиморасчетовПриход, 0) КАК СуммаДоговора
|ИЗ
| РегистрНакопления.ЗаказыПокупателей.Обороты(, , , ДоговорКонтрагента = &ДоговорКонтрагента ) КАК Заказы,
| (ВЫБРАТЬ СУММА(т.СуммаОборотКт) КАК СуммаОборотКт ИЗ РегистрБухгалтерии.Хозрасчетный.Обороты(, , Регистратор, ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыПоАвансамПолученным), ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконто.ДоговорыКонтрагентов), Субконто1 = &ДоговорКонтрагента , , ) КАК т
| ГДЕ
| т.Регистратор ССЫЛКА Документ.ПлатежноеПоручениеВходящее) КАК Хозрасчетный
ПоказатьВ любом случае будет работать лучше чем в (0) и быстрее
Остальные ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
(3) у вас результат пустой, вам программа и возвращает пустоту. чего вы удивляетесь? в чем проблема объявить переменную и присвоить ей значение в случае если оно есть?
Сумма = 0;
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
Сумма = ВыборкаДетальныеЗаписи.Сумма;
КонецЕсли;
(0) Судя по полям:
Вам нужен договор, Сумма авансов по нему и Сумма по заказам за ВСЕ время., т.е. 1 строка, Договор/Сумма1/Сумма2. Верно?
ХозрасчетныйОстаткиИОбороты.Субконто2 КАК Договор,
СУММА(ХозрасчетныйОстаткиИОбороты.СуммаОборотКт) КАК СуммаАвансов,
СуммаДоговораВсего.СуммаДоговора
Вам нужен договор, Сумма авансов по нему и Сумма по заказам за ВСЕ время., т.е. 1 строка, Договор/Сумма1/Сумма2. Верно?
(7) Тогда лучше сделать так:
ВЫБРАТЬ
&ДоговорКонтрагента КАК ДоговорКонтрагента ,
ЕСТЬNULL(Хозрасчетный.СуммаОборотКт, 0) КАК СуммаАвансов,
ЕСТЬNULL(Заказы.СуммаВзаиморасчетовПриход, 0) КАК СуммаДоговора
ИЗ
РегистрНакопления.ЗаказыПокупателей.Обороты(, , , ДоговорКонтрагента = &ДоговорКонтрагента ) КАК Заказы
ПОЛНОЕ СОЕДИНЕНИЕ
(ВЫБРАТЬ СУММА(т.СуммаОборотКт) КАК СуммаОборотКт ИЗ РегистрБухгалтерии.Хозрасчетный.Обороты(, , Регистратор, ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыПоАвансамПолученным), ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконто.ДоговорыКонтрагентов), Субконто1 = &ДоговорКонтрагента , , ) КАК т
ГДЕ
т.Регистратор ССЫЛКА Документ.ПлатежноеПоручениеВходящее) КАК Хозрасчетный
ПО (ИСТИНА)
Показать
Не могу проверить (нет подходящей конфигурации развёрнутой), так что вот, написано вручную - нужно перепроверить:
ВЫБРАТЬ
ЗаказыПокупателейОстаткиИОбороты.ДоговорКонтрагента КАК ДоговорКонтрагента,
ЗаказыПокупателейОстаткиИОбороты.СуммаВзаиморасчетовПриход КАК СуммаДоговора
ПОМЕСТИТЬ СуммаДоговораВсего
ИЗ
РегистрНакопления.ЗаказыПокупателей.ОстаткиИОбороты КАК ЗаказыПокупателейОстаткиИОбороты
ГДЕ
ЗаказыПокупателейОстаткиИОбороты.ДоговорКонтрагента = &ДоговорКонтрагента
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ХозрасчетныйОстаткиИОбороты.Субконто2 КАК Договор,
СУММА(ХозрасчетныйОстаткиИОбороты.СуммаОборотКт) КАК СуммаАвансов,
СУММА(СуммаДоговораВсего.СуммаДоговора) КАК СуммаДоговора
ИЗ
РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(, , Регистратор, , Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыПоАвансамПолученным), , ) КАК ХозрасчетныйОстаткиИОбороты
ВНУТРЕННЕЕ СОЕДИНЕНИЕ СуммаДоговораВсего КАК СуммаДоговораВсего
ПО ХозрасчетныйОстаткиИОбороты.Субконто2 = СуммаДоговораВсего.ДоговорКонтрагента
ГДЕ
ХозрасчетныйОстаткиИОбороты.Регистратор ССЫЛКА Документ.ПлатежноеПоручениеВходящее
СГРУППИРОВАТЬ ПО
ХозрасчетныйОстаткиИОбороты.Субконто2
Показать
(12)
1) Таблицы соединяем внутренним соединением. Тогда и условие по договору на вторую таблицу накладывать не надо: оно и так наложится неявно (просто из первой таблицы придут только записи с нужным договором).
2) Группировка только по группировочному полю, остальные поля - суммировать.
3) У меня этого нет, но Вы можете в первом запросе проиндексировать ещё по полю ДоговорКонтрагента - работать будет шустрее.
Что получится на Ваших данных?
1) Таблицы соединяем внутренним соединением. Тогда и условие по договору на вторую таблицу накладывать не надо: оно и так наложится неявно (просто из первой таблицы придут только записи с нужным договором).
2) Группировка только по группировочному полю, остальные поля - суммировать.
3) У меня этого нет, но Вы можете в первом запросе проиндексировать ещё по полю ДоговорКонтрагента - работать будет шустрее.
Что получится на Ваших данных?
(22) Уберите временно таблицу СуммаДоговораВсего. Отладьте данные во втором запросе.
Верните таблицу СуммаДоговораВсего. Настройте соединение таблиц по полю ДоговорКонтрагента.
Проверьте данные. Если появляются Null, вставьте внутрь сумм ЕСТЬNULL(***,0).
Трудно Вам дальше помогать (делать всё за Вас ;-) ), не имея источника для проверки.
Верните таблицу СуммаДоговораВсего. Настройте соединение таблиц по полю ДоговорКонтрагента.
Проверьте данные. Если появляются Null, вставьте внутрь сумм ЕСТЬNULL(***,0).
Трудно Вам дальше помогать (делать всё за Вас ;-) ), не имея источника для проверки.
(16)
ВЫБРАТЬ
ЗаказыПокупателейОстаткиИОбороты.ДоговорКонтрагента КАК ДоговорКонтрагента,
ЗаказыПокупателейОстаткиИОбороты.СуммаВзаиморасчетовПриход КАК СуммаДоговора
ПОМЕСТИТЬ СуммаДоговораВсего
ИЗ
РегистрНакопления.ЗаказыПокупателей.ОстаткиИОбороты КАК ЗаказыПокупателейОстаткиИОбороты
ГДЕ
ЗаказыПокупателейОстаткиИОбороты.ДоговорКонтрагента = &ДоговорКонтрагента
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ХозрасчетныйОстаткиИОбороты.Субконто2 КАК Договор,
СУММА(ЕСТЬNULL(ХозрасчетныйОстаткиИОбороты.СуммаОборотКт,0)) КАК СуммаАвансов,
СУММА(ЕСТЬNULL(СуммаДоговораВсего.СуммаДоговора,0)) КАК СуммаДоговора
ИЗ
РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(, , Регистратор, , Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыПоАвансамПолученным), , ) КАК ХозрасчетныйОстаткиИОбороты
ПРАВОЕ СОЕДИНЕНИЕ СуммаДоговораВсего КАК СуммаДоговораВсего
ПО ХозрасчетныйОстаткиИОбороты.Субконто2 = СуммаДоговораВсего.ДоговорКонтрагента
ГДЕ
ХозрасчетныйОстаткиИОбороты.Регистратор ССЫЛКА Документ.ПлатежноеПоручениеВходящее
СГРУППИРОВАТЬ ПО
ХозрасчетныйОстаткиИОбороты.Субконто2
Показать
(28)
Можно и без..
В любом случае будет работать лучше чем в (0) и быстрее
Можно и без..
|ВЫБРАТЬ
| &ДоговорКонтрагента КАК ДоговорКонтрагента ,
| ЕСТЬNULL(Хозрасчетный.СуммаОборотКт, 0) КАК СуммаАвансов,
| ЕСТЬNULL(Заказы.СуммаВзаиморасчетовПриход, 0) КАК СуммаДоговора
|ИЗ
| РегистрНакопления.ЗаказыПокупателей.Обороты(, , , ДоговорКонтрагента = &ДоговорКонтрагента ) КАК Заказы,
| (ВЫБРАТЬ СУММА(т.СуммаОборотКт) КАК СуммаОборотКт ИЗ РегистрБухгалтерии.Хозрасчетный.Обороты(, , Регистратор, ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыПоАвансамПолученным), ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконто.ДоговорыКонтрагентов), Субконто1 = &ДоговорКонтрагента , , ) КАК т
| ГДЕ
| т.Регистратор ССЫЛКА Документ.ПлатежноеПоручениеВходящее) КАК Хозрасчетный
ПоказатьВ любом случае будет работать лучше чем в (0) и быстрее
(30)
Есть задача - есть решение)
Это не типовой код с запросом для 5 различных вариантов отчетов или еще что на 150 строк.. Это решение под конкретную задачу. Должно быть просто и оптимально, без излишеств. Что тут может модернизироваться? Добавить отбор за период, сделать по нескольким договорам(Чуть изменить отбор и связь добавить).. не очень понимаю для чего тут универсальность для дальнейших доработок, все итак легко и понятно.
Имхо. Без обид, но на (0) и (21) с такими отборами смотреть больно. =)
Есть задача - есть решение)
Это не типовой код с запросом для 5 различных вариантов отчетов или еще что на 150 строк.. Это решение под конкретную задачу. Должно быть просто и оптимально, без излишеств. Что тут может модернизироваться? Добавить отбор за период, сделать по нескольким договорам(Чуть изменить отбор и связь добавить).. не очень понимаю для чего тут универсальность для дальнейших доработок, все итак легко и понятно.
Имхо. Без обид, но на (0) и (21) с такими отборами смотреть больно. =)
(32)
Без обид. Я всегда стараюсь быть объективным. Потому и написал, что решение хорошее, но не масштабируемое.
А завтра понадобится всю эту красоту делать не по одному договору, а по списку, и сгруппировать долги по определённому признаку (ни разу не сталкивались с таким - "для ВОТ ЭТОЙ группы контрагентов считаем чётко, а по остальным - без учёта договоров"? Реально, такая задача была), и...?
А выбрать данные в две ВТ и потом их соединить по любому признаку - всегда проще и потом можно расширить, хоть по признаку длины ног секретарши директора!
Без обид. Я всегда стараюсь быть объективным. Потому и написал, что решение хорошее, но не масштабируемое.
А завтра понадобится всю эту красоту делать не по одному договору, а по списку, и сгруппировать долги по определённому признаку (ни разу не сталкивались с таким - "для ВОТ ЭТОЙ группы контрагентов считаем чётко, а по остальным - без учёта договоров"? Реально, такая задача была), и...?
А выбрать данные в две ВТ и потом их соединить по любому признаку - всегда проще и потом можно расширить, хоть по признаку длины ног секретарши директора!
(33)
Согласен, но а что, если надо будет добавить еще сумму приходов (если поставщик и покупатель одно лицо)?
Или разбить все это дело по реквизитам из регистратора определенного типа со сложными группировками по итогам?)
Я это к тому, что когда понадобиться - тогда и надо делать(под конкретные определенные потребности). Обычно такие доработки как минимум требуют переписать часть кода, а сложные - и вовсе иногда всю логику переделать.. Универсальность - не панацея)
Согласен, но а что, если надо будет добавить еще сумму приходов (если поставщик и покупатель одно лицо)?
Или разбить все это дело по реквизитам из регистратора определенного типа со сложными группировками по итогам?)
Я это к тому, что когда понадобиться - тогда и надо делать(под конкретные определенные потребности). Обычно такие доработки как минимум требуют переписать часть кода, а сложные - и вовсе иногда всю логику переделать.. Универсальность - не панацея)
Вакансии
Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)