Имя: Пароль:
1C
1C 7.7
v7: ТЗ.НайтиЗначение(ТекущийДокумент(),НомерСтроки,"Док") не находит знач.
,
0 GalanEvgeny
 
28.01.13
13:18
Смысл такой:
Необходимо получить номер печатной формы КМ7!
запрос за 1 год по ККМ(касса) нумеруются документы по порядку
В справочнике касса содержится ссылка на документ ОтчетККМ.

+ Code

+ Code

Текст кода(//СЮДА НЕ ПОПАДАЕТ ВЫПОЛНЕНИЕ КОДА - сюда надо зайти при выполнении функции):


Запрос=СоздатьОбъект("Запрос");
    ТекстЗапроса = "
    |SELECT          
    //|    Жур.IDDoc as [Док $Документ],


    //|    Жур.IDDocDef as Док_вид,    


    |    Жур.IDDoc as Док,
    |    Count(Жур.IDDoc) as НомерПоПорядку
    |FROM
    |    _1SJourn as Жур  
    |INNER JOIN _1SJourn as Жур2 ON Жур2.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND Жур2.$ОбщийРеквизит.ККМ=:ККМ AND Жур2.IDDocDef = $ВидДокумента.ОтчетККМ
    |                                   AND Жур2.DATE_TIME_IDDOC<=Жур.DATE_TIME_IDDOC
    |WHERE
    |    Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND Жур.$ОбщийРеквизит.ККМ=:ККМ AND Жур.IDDocDef = $ВидДокумента.ОтчетККМ
    //|GROUP BY Жур.IDDoc,Жур.IDDocDef";


    |GROUP BY Жур.IDDoc";
    БД.УстановитьТекстовыйПараметр ("ККМ",ККМ);                                        
    БД.УстановитьТекстовыйПараметр ("НачДата",НачГода(ДатаДок));                                        
    БД.УстановитьТекстовыйПараметр ("КонДата", КонГода(ДатаДок));                                        
   
    ТЗ = БД.ВыполнитьИнструкцию(ТекстЗапроса);
    НомерСтроки="";      
    //ТекДок=ТекущийДокумент();


    //Если ТЗ.НайтиЗначение(ТекДок,НомерСтроки,"Док")=1 Тогда


    Если ТЗ.НайтиЗначение(ТекущийДокумент(),НомерСтроки,"Док")=1 Тогда          
         НомерТекущегоДокумента=ТЗ.ПолучитьЗначение(НомерСтроки, "НомерПоПорядку"); //СЮДА НЕ ПОПАДАЕТ ВЫПОЛНЕНИЕ КОДА


    Иначе      
         Возврат 0;
    КонецЕсли;

З.Ы.:

Получение Док как документ, не помагает

   |    Жур.IDDoc as [Док $Документ],
   |    Жур.IDDocDef as Док_вид,
1 Бешеная Нога
 
28.01.13
13:20
2 GalanEvgeny
 
28.01.13
13:21
Перенос вопрос в секцию 1с 7. Не сразу обратил внимание в какой раздел попала просьба.
3 dk
 
28.01.13
13:21
НомерСтроки =0;
перед найтизначение
4 savaB
 
28.01.13
13:26
Пользовать индекс. таблицу, индексировать по полю,НайтиСтроку()
5 FN
 
28.01.13
13:27
добавь
 |    Жур.IDDoc as [Док $Документ],
  |    Жур.IDDocDef as Док_вид,

убери
|GROUP BY Жур.IDDoc";
6 savaB
 
28.01.13
13:28
INNER JOIN _1SJourn as Жур2 .... зачем ?
7 GalanEvgeny
 
28.01.13
13:28
(5) Так и пробую впервом варианте запрос возвращает ID(строка), но этого мало.
8 GalanEvgeny
 
28.01.13
13:29
(6) список документов пронумеровать по порядку
9 GalanEvgeny
 
28.01.13
13:31
(4) не понял. Напишите, пожалуйста, подробнее.
10 GalanEvgeny
 
28.01.13
13:32
(3) Спасибо, но не помогло.
11 Ёпрст
 
28.01.13
13:32
да уж..
искать ссылку в ТЗ, которой iddoc - это где такую траву косят ?
12 Ёпрст
 
28.01.13
13:34
ну и про пронумеровать по порядку используя иннер (причем его в селекте нема) это тоже п..ц
13 Ёпрст
 
28.01.13
13:37
Если че, нужно всего лишь было типизировать iddoc к $Документ
+ выкинуть group by и иннер джоин и сделать order by позиция дока усё.
14 GalanEvgeny
 
28.01.13
13:38
(11) В торговле формируются печатные формы КМ-6(по одной кассе) и км7(по всем кассам). Необходимо реализовать сквозной нумератор для км-6(исходя из того, что в течении дня можно сформировать несколько отчетов с гашением).
15 Ёпрст
 
28.01.13
13:39
(14) и мне то что с этого ?
16 Ёпрст
 
28.01.13
13:39
я указал на твои ошибки в коде.
17 savaB
 
28.01.13
13:41
15 - напиши код ;-)
18 GalanEvgeny
 
28.01.13
13:43
(13) ???. Мой запрос возвращает таблицу с колонками "документ","номер по порядку" и по документу можно найти искомое число.

order by - отсортирует таблицу по "документу", а дальше? через цикл искать искомый документ с вводом нумератора?
19 Ёпрст
 
28.01.13
13:46
(18) твой запрос возвращает ТЗ с iddoc - это строка из 9 символов, если че.

Если сделаешь (13) - будет ТЗ с одной колонкой, в которой будет Документ, отсортированный по позиции. ТЗ.НомерСтроки - будет твой номер по-порядку.
Наслаждайся.
20 GalanEvgeny
 
28.01.13
14:18
(19) Ваша правда, в запросе нет смысла получать номер по порядку.
Но ТЗ.НайтиЗначение(..) не отрабатывает, даже если в ТаблицуЗначений положить строку(8) и искать строку(8).

Запрос=СоздатьОбъект("Запрос");
   ТекстЗапроса = "
   |SELECT          
   |    LEFT(Жур.Date_Time_IDDoc, 8) as ДатаДок    
   |FROM
   |    _1SJourn as Жур  
   |WHERE
   |    Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND Жур.$ОбщийРеквизит.Отдел=:Отдел AND Жур.IDDocDef = $ВидДокумента.ОтчетККМ
   |GROUP BY LEFT(Жур.Date_Time_IDDoc, 8)
   |ORDER BY LEFT(Жур.Date_Time_IDDoc, 8)";    
   БД.УстановитьТекстовыйПараметр ("Отдел",ККМ.Отдел);                                        
   БД.УстановитьТекстовыйПараметр ("НачДата",НачГода(ДатаДок));                                        
   БД.УстановитьТекстовыйПараметр ("КонДата", КонГода(ДатаДок));                                        
   
   ТЗ = БД.ВыполнитьИнструкцию(ТекстЗапроса);
   
   НомерСтроки=0;      
   ТекДок=ТекущийДокумент();

   Если ТЗ.НайтиЗначение(Формат(ТекДок.ДатаДок, "Д ГГГГММДД") ,НомерСтроки,"ДатаДок")=1 Тогда        
       НомерТекущегоДокумента=НомерСтроки;
   Иначе      
       Возврат 0;
   КонецЕсли;
21 Ёпрст
 
28.01.13
14:19
(20) еще раз.
1.ТИПИЗИРОВАТЬ iddoc к $Документ
2.выкинуть GROUP By - он там не нужен, в 1sjourn iddoc уникален
22 Ёпрст
 
28.01.13
14:20
Если не понятно, посмотри, что в ТЗ у тебя сейчас, просветлись:

ТЗ = БД.ВыполнитьИнструкцию(ТекстЗапроса);
ТХ.ВыбратьСтроку();
23 Ёпрст
 
28.01.13
14:21
тем более, что у тя щас там..дата :)))))))))))))))))))))))))))
24 GalanEvgeny
 
28.01.13
14:29
(23) Это и не понятно. В запросе дата строкой="20130128"
ищу эту дату="20130128" и ничего не находится.
25 Ёпрст
 
28.01.13
14:30
пилять..
какую ты дату в строке ищещь ?

Нахрена тебе нужна строка ?
Ты про типизацию в запросе вообще не в курсе ?
26 savaB
 
28.01.13
14:31
Так писал-же:
27 savaB
 
28.01.13
14:32
Жур.IDDoc as [Док $Документ],
28 Ёпрст
 
28.01.13
14:32
29 GalanEvgeny
 
28.01.13
14:37
(25) CT          
   |    LEFT(Жур.Date_Time_IDDoc, 8) - это строка из 8 символов типа ГГГГММДД

и ищу строку из 8 символов Формат(ТекДок.ДатаДок, "Д ГГГГММДД"), где текДок=ТекущийДокумент();

(27) Жур.IDDoc as [Док $Документ] - один из вариантов   (закомментирован)
30 Ёпрст
 
28.01.13
14:38
ТекстЗапроса = "
|select
|    Жур.IDDoc as [Док $Документ],
|    Жур.IDDocDef as Док_вид
|from
|    _1SJourn as Жур (nolock)  
|where
|    Жур.Date_Time_IDDoc between :НачДата and :КонДата~ AND Жур.$ОбщийРеквизит.Отдел=:Отдел AND Жур.IDDocDef = $ВидДокумента.ОтчетККМ
|ORDER BY Жур.Date_Time_IDDoc";    
   БД.УстановитьТекстовыйПараметр ("Отдел",ККМ.Отдел);                                        
   БД.УстановитьТекстовыйПараметр ("НачДата",НачГода(ДатаДок));                                        
   БД.УстановитьТекстовыйПараметр ("КонДата", КонГода(ДатаДок));                                        
   
   ТЗ = БД.ВыполнитьИнструкцию(ТекстЗапроса);
   стр=0;      
   //тест на вшивость, я хз откуда этот код выполняется
   Если ПустоеЗначение(ТекущийДокумент())=1 Тогда
       Возврат "пнх, Альфрэдо, нефик пихать не записанный документ в параметры!";
   КонецЕсли;


   Если ТЗ.НайтиЗначение(ТекущийДокумент(),стр,"Док") ,НомерСтроки,"ДатаДок")=1 Тогда        
       Возврат стр;
   Иначе      
       Возврат 0;
   КонецЕсли;
31 Ёпрст
 
28.01.13
14:39
Если ТЗ.НайтиЗначение(ТекущийДокумент(),стр,"Док") =1 Тогда
32 savaB
 
28.01.13
14:40
(30) Все-таки не выдержал...
33 Ёпрст
 
28.01.13
14:42
только для такой функции, можно сам документ передавать в текст запроса параметром и подсчитать токма для него "нумер по-порядку" + фильтр на проведенные/удаленные втыкать
34 Ёпрст
 
28.01.13
14:45
+ ежели скуль >=2005, то воткнуть over + row_number() для получения нумера по-порядочку
35 GalanEvgeny
 
28.01.13
14:47
спасибо  Ёпрст'у и savaB'у. Ошибка была в использовании предопределенного слова НомерСтроки.
Решение: замена на НомерСтроки на переменную стр.
36 GalanEvgeny
 
28.01.13
14:47
(35) спасибо  Ёпрст'у и savaB'у. Ошибка была в использовании предопределенного слова НомерСтроки.
Решение: замена НомерСтроки на переменную стр.
2 + 2 = 3.9999999999999999999999999999999...