Имя: Пароль:
1C
1C 7.7
v7: в запросе отбор по измерению неопределенного типа не работает ...глюк 1С или ?
0 andrewch60
 
16.11.16
23:21
рабочий запрос в форме документа :
ТекстЗапроса = "
    |Период с     ДатаДок по ДатаКон;
    |Докум      = Регистр.Расчеты.ТекущийДокумент;
      ->|ДокРейс    = Регистр.Расчеты.Док;//ИЗМЕРЕНИЕ НЕОПРЕДЕЛЕННОГО ТИПА(СОДЕРЖИТ И ДОКУМЕНТЫ И ЭЛЕМЕНТЫ СПРАВОЧНИКОВ)
    |Контрагент = Регистр.Расчеты.Контрагент;
    |Статья     = Регистр.Расчеты.Статья;
    |Сумма      = Регистр.Расчеты.Сумма;
    |Группировка  Статья Без Групп;
    |Группировка  Контрагент  Без Групп;
    |Функция ПриходЭкв = Приход(Сумма);
    |Функция РасходЭкв = Расход(Сумма);
    |Условие ((Докум.Вид() = ""СменаВодителя"")ИЛИ (Докум.Вид() = ""ЗакрытиеРейса"")ИЛИ (Докум.Вид() = ""Загрузка"")ИЛИ (Докум.Вид() = ""Разгрузка""));    
    |Условие (((Статья  = СтатьяПриходаРасхода_ЗаПростой)или(Статья  = СтатьяРасхода_ЗарплатаВодителю))и(Статья  <> СтатьяПрРасх_РасчетСВодителем));
      ->|Условие (ДокРейс  = ТекущийДокумент());";//ВСЕ В ЭТОЙ СТРОКЕ
С ТекущийДокумент()ВСЕ ПРЕКРАСНО ОТБИРАЕТ, НО ЗАПРОС НУЖЕН В ОТЧЕТЕ, И Я ПЕРЕДАЮ В НЕГО ВЫБРАННОЕ ЗНАЧЕНИЕ РЕКВИЗИТА ФОРМЫ "ПОДОКУМЕНТУ"
И С НИМ ПОЛУЧАЮ ПУСТОЙ РЕЗУЛЬТАТ ЗАПРОСА... Пробовал убирать условие и тогда результат есть и можно отсеять ненужное обходя группировки.
Пробовал передавать Документы.ТекущийДокумент() найденный через НайтиДокумент(ПоДокументу), не помогает...В чем соль? неужели в обходе исключать ненужное придется?
1 Torquader
 
16.11.16
23:25
Попробуй сначала вместо ТекущийДокумент() использовать переменную, в которую также положишь значение ТекущийДокумент(), но но вызова отчёта.
2 andrewch60
 
16.11.16
23:26
Измерения : Контрагент - спр. Контрагентов
Док - Неопределенный
Ресурс - сумма

Установил у "Док" для проверки тип "Документ"
и запрос заработал...
но может кто то знает, почему при использовании из Формы Документа с ТекущийДокумент() отбор работает и так??

Менять тип - потерять записи по элементам справочников...Надо переписывать все
3 andrewch60
 
16.11.16
23:30
(1) ПоДоку = ТекущийДокумент();
    
    ТекстЗапроса = "
    |Период с     ДатаДок по ДатаКон;
    |Докум      = Регистр.Расчеты.ТекущийДокумент;
    |ДокРейс    = Регистр.Расчеты.Док;
    |Контрагент = Регистр.Расчеты.Контрагент;
    |Статья     = Регистр.Расчеты.Статья;
    |Сумма      = Регистр.Расчеты.Сумма;
    |Группировка  Статья Без Групп;
    |Группировка  Контрагент  Без Групп;
    |Функция ПриходЭкв = Приход(Сумма);
    |Функция РасходЭкв = Расход(Сумма);
    |Условие ((Докум.Вид() = ""СменаВодителя"")ИЛИ (Докум.Вид() = ""ЗакрытиеРейса"")ИЛИ (Докум.Вид() = ""Загрузка"")ИЛИ (Докум.Вид() = ""Разгрузка""));    
    |Условие (((Статья  = СтатьяПриходаРасхода_ЗаПростой)или(Статья  = СтатьяРасхода_ЗарплатаВодителю))и(Статья  <> СтатьяПрРасх_РасчетСВодителем));
    |Условие (ДокРейс  = ПоДоку);";

уже не хочет работать.
4 Torquader
 
16.11.16
23:37
А что за условие со статьями ?
Если выполняется первое или второе - то явно выполняется третье.
И попробуй сделать группировку по ДокРейс
5 andrewch60
 
16.11.16
23:49
(4) да, со статьями ерунда, но мне эти условия не нужны в новом запросе.
ТекстЗапроса = "
    |Период с ДатаН по ДатаК;
    |Докум      = Регистр.Расчеты.ТекущийДокумент;
    |ДокРейс    = Регистр.Расчеты.Док;
    |Контрагент = Регистр.Расчеты.Контрагент;
    |Статья     = Регистр.Расчеты.Статья;
    |Сумма      = Регистр.Расчеты.Сумма;
    |Группировка  ДокРейс;
    |Группировка  Статья ;
    |Группировка  Контрагент;
    |Функция ПриходЭкв = Приход(Сумма);
    |Функция РасходЭкв = Расход(Сумма);
    |Условие (ДокРейс  = ПоДокументу);";

попробовал с группировкой - пустой результат
6 Torquader
 
16.11.16
23:52
А вообще без условия какой результат выдаёт с группировкой по ДокРейс ?
7 andrewch60
 
16.11.16
23:57
(6) Да, здесь картинки прикрепить нельзя? Без этого условия все норм.
8 Torquader
 
17.11.16
00:04
(7) Просто там можно посмотреть, что возвращает ДокРейс.
Есть подозрение, что внутри запроса ТекущийДокумент вернуло пустую ссылку по которой что-то отобралось тогда как по конкретному документу ничего отобрать нельзя.
Ещё можно попробовать сделать так - создать документ общего вида - установить конкретный вид документа - установить позицию (через найти) и текущий документ от этого чуда передать в поиск.
P.S. если посмотреть ЗначениеВСтрокуВнутр от того, что вернул запрос в поле и от того, с чем сравнивают - можно найти много отличий.
9 andrewch60
 
17.11.16
00:15
в этой же базе есть похожий регистр, только измерение "Док" - документ определенного типа - там все без вопросов.
"по конкретному документу ничего отобрать нельзя" - конфигурация больше 3ех лет работает, и этот запрос выводил ЗП водителя в общей информации по Рейсу. Запрос с ТекущийДокумент верно отрабатывает.
"создать документ общего вида - установить конкретный вид документа - установить позицию (через найти) и текущий документ от этого чуда передать в поиск. " - это пробовал, отказывается работать. Есть какая то незримая разница между  "ТекущийДокумент" и все остальные варианты передачи значения...
10 andrewch60
 
17.11.16
00:23
ЗначениеВСтрокуВнутр
ЗапросДопПрРасх.Группировка("ДокРейс")
Рез={"O","0","0","0","0","0","        79     15056   "}

ТекущийДокумент()
Тек={"O","0","0","79","0","0","     15056   "}

знать бы, что в какой последовательности идет
11 andrewch60
 
17.11.16
00:28
нашел
Расшифровка для документа:

{"O","0","0","53","0","0","       847   "}
"O" - признак, что это (документ, справочник и т.д.)

"0" - не используется
"0" - не используется
"53" - идентификатор типа
"0" - не используется
"0" - не используется
"       847   "

первые 10 символов - идентификатор документа
оставшиеся 3 символа - идентификатор базы УРБД


Другой вариант:

{"O","0","0","0","0","0","        53       847   "}
"O" - признак, что это (документ, справочник и т.д.)

"0" - не используется
"0" - не используется
"0" - не используется
"0" - не используется
"0" - не используется
"        53       847   "

первые 10 символов - идентификатор типа
следующие 10 символов - идентификатор документа
оставшиеся 3 символа - идентификатор базы УРБД
12 Torquader
 
17.11.16
00:38
Вот теперь ты увидел, чем отличаются документы общего и определённого вида, а также увидел, что нужно собрать, чтобы оно получилось.
Документ общего вида что возвращает в ссылке ?
Кстати, вполне возможно, что если от переданной переменной внутри запроса взять ТекущийДокумент(), то она получит то, что нужно - или ТекущийДокумент() придётся взять от Док в запросе, предварительно проверив тип.
Ну или вручную собрать значение через ЗначениеИзСтрокиВнутр.
13 Torquader
 
17.11.16
00:39
(11) Документ общего вида - это когда вид=0, а реальный веид перенесён к идентификатору в первые 10 символов (перед ним).
14 andrewch60
 
17.11.16
00:54
ТекстЗапроса = "
    |Период с ДатаН по ДатаК;
    |Докум      = Регистр.Расчеты.ТекущийДокумент;
    |ДокРейс    = Регистр.Расчеты.Док;
    |Контрагент = Регистр.Расчеты.Контрагент;
    |Статья     = Регистр.Расчеты.Статья;
    |Сумма      = Регистр.Расчеты.Сумма;
    |Группировка  Контрагент;
    |Группировка  ДокРейс;
    |Группировка  Статья ;
    |Функция ПриходЭкв = Приход(Сумма);
    |Функция РасходЭкв = Расход(Сумма);
    |Условие (Контрагент = Водитель);
    |Условие (ДокРейс  = ПоДокументу.ТекущийДокумент());";

хвала тебе ,добрый человек...ЗАРАБОТАЛО ТАК
15 andrewch60
 
17.11.16
00:58
(12) с радостью пожертвую немного в фонд твоего досуга
может на тел. закинуть могу ?
Независимо от того, куда вы едете — это в гору и против ветра!