Имя: Пароль:
1C
1С v8
Не могу вникнуть в маленький запросик
,
0 1Сергей
 
27.05.16
14:29
Есть запрос, которым отбираются некие документы

        Запрос.Текст =
            "ВЫБРАТЬ
            |    СуперДокумент.Ссылка
            |ИЗ
            |    Документ.СуперДокумент КАК СуперДокумент
            |ГДЕ
            |    (НЕ СуперДокумент.ПодписанАктВыполненныхРабот = ДАТАВРЕМЯ(1, 1, 1)
            |                И НЕ СуперДокумент.Вознаграждение + СуперДокумент.НДС = 0
            |                И СуперДокумент.ПодписанАктУслугЗаОвердрафт = ДАТАВРЕМЯ(1, 1, 1)
            |                И СуперДокумент.Документ_РеализацияТоваровУслугЗаОвердрафт = ЗНАЧЕНИЕ(Документ.РеализацияТоваровУслуг.ПустаяСсылка)
            |            ИЛИ НЕ СуперДокумент.ПодписанАктВыполненныхРабот = ДАТАВРЕМЯ(1, 1, 1)
            |                И НЕ СуперДокумент.Вознаграждение + СуперДокумент.НДС = 0
            |                И НЕ СуперДокумент.ПодписанАктУслугЗаОвердрафт = ДАТАВРЕМЯ(1, 1, 1)
            |                И НЕ СуперДокумент.Документ_РеализацияТоваровУслугЗаОвердрафт = ЗНАЧЕНИЕ(Документ.РеализацияТоваровУслуг.ПустаяСсылка)
            |            ИЛИ СуперДокумент.ПодписанАктВыполненныхРабот = ДАТАВРЕМЯ(1, 1, 1)
            |                И СуперДокумент.Вознаграждение + СуперДокумент.НДС = 0
            |                И НЕ СуперДокумент.ПодписанАктУслугЗаОвердрафт = ДАТАВРЕМЯ(1, 1, 1)
            |                И НЕ СуперДокумент.Документ_РеализацияТоваровУслугЗаОвердрафт = ЗНАЧЕНИЕ(Документ.РеализацияТоваровУслуг.ПустаяСсылка)
            |            ИЛИ СуперДокумент.ПодписанАктВыполненныхРабот = ДАТАВРЕМЯ(1, 1, 1)
            |                И СуперДокумент.Вознаграждение + СуперДокумент.НДС = 0
            |                И СуперДокумент.ПодписанАктУслугЗаОвердрафт = ДАТАВРЕМЯ(1, 1, 1)
            |                И СуперДокумент.Документ_РеализацияТоваровУслугЗаОвердрафт = ЗНАЧЕНИЕ(Документ.РеализацияТоваровУслуг.ПустаяСсылка)";


Объясните мне смысл всего это, если кто понял, пожалуйста
1 Карупян
 
27.05.16
14:36
рассмотри каждую группы ИЛИ в отедельности
2 Fragster
 
гуру
27.05.16
14:36
сгруппируй "не по конструкторски", учитывая, что сначала выполняется НЕ, потом И, Потом ИЛИ
3 1Сергей
 
27.05.16
14:37
какие есть мысли:
1. Если установлена дата ПодписанАктВыполненныхРабот, то Вознаграждение+НДС должно отличатся от нуля. И наоборот, если НЕ установлена дата ПодписанАктВыполненныхРабот, то Вознаграждение+НДС должно быть равно нулю.
2. Если установлена дата ПодписанАктУслугЗаОвердрафт, то должен быть заполнен Документ_РеализацияТоваровУслугЗаОвердрафт. И наоборот, если НЕ установлена дата ПодписанАктУслугЗаОвердрафт, то Документ_РеализацияТоваровУслугЗаОвердрафт должен быть пустым.

так?
4 Карупян
 
27.05.16
14:38
(2) норм сгруппировано тут
5 AllJoke
 
27.05.16
14:38
НЕ ПодписанАктВыполненныхРабот = ДАТАВРЕМЯ(1, 1, 1) - чтобы дата не пустая
НЕ СуперДокумент.Вознаграждение + СуперДокумент.НДС = 0 - чтобы было вознагарждение или ндс
СуперДокумент.ПодписанАктУслугЗаОвердрафт = ДАТАВРЕМЯ(1, 1, 1) - чтобы дата пустая
СуперДокумент.Документ_РеализацияТоваровУслугЗаОвердрафт = ЗНАЧЕНИЕ(Документ.РеализацияТоваровУслуг.ПустаяСсылка) - чтобы док стоял пустой
...ну и так далее.
6 Карупян
 
27.05.16
14:39
А еще лучше НЕ заменить на <>
7 AllJoke
 
27.05.16
14:40
вообще для наглядности заменить длинные переменные в редакторе (Notepad) ну и посомтреть все эти НЕ, И, ИЛИ.
8 Fragster
 
гуру
27.05.16
14:42
(6) +100
9 Карупян
 
27.05.16
14:43
Тут есть 4 реквизита (1 из них сумма)
проверяем что эти пустые или те или дригие
10 1Сергей
 
27.05.16
14:51
Верны ли мысли в (3)?
11 AllJoke
 
27.05.16
14:57
(10) Мысли должны одновременно выполнятся, а не по 1., 2.
12 1Сергей
 
27.05.16
15:00
(11) обрати внимание, первый два реквизита либо попарно с НЕ, либо без. И вторые два точно также. Оттого 4 группы по ИЛИ
13 4St
 
27.05.16
15:40
Упрощенно, в документе есть 4 поля, заполненность которых анализирует запрос. (СуперДокумент.Вознаграждение + СуперДокумент.НДС можно условно считать одним полем в данной задаче, судя по их именам).
Получаем 16 возможных комбинаций заполнено/не заполнено.
Запрос отбирает 4 такие комбинации.
Можно нарисовать в экселе 4 колонки, соответствующие этим полям, и проставить 4 строки с плюсами, которые наглядно расскажут, что это за комбинации такие.

Возможно, потом в "ПередЗаписью" добавить функцию, которая заполнит в нем новое булево поле "ЭтотЧертовДокументЗаполнен". И перенести адовы условия в нее.
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший