Имя: Пароль:
1C
1C 7.7
v7: ТИС Выбор подчиненных документов
0 Кирр
 
09.11.11
16:32
Есть документ заявки.
На основании заявки есть реализация и ПКО.
В Структуре подчиненности все документы есть.
Код:
Если Найти(Строка(ТекущийДокумент),"Заявка покупателя") = 1 Тогда        
     Если ТекущийДокумент.ВидОперации=Перечисление.ВидыОперацийЗаявок.НаПоставку Тогда
       ДокПодч    = СоздатьОбъект("Документ");
       Если ДокПодч.ВыбратьПодчиненныеДокументы(ТекущийДокумент.ДатаДок-1,КонГода(ТекущаяДата()),ТекущийДокумент)=0 Тогда
       Иначе    
...
КонецЕсли;
КонецЕсли;
Отладчиком смотрю ДокПодч.КоличествоСтрок()=1!!!
А в структуре подчиненности документов 2.
Почему не выбирается второй документ?
1 1Сергей
 
09.11.11
16:33
строк одна, а документов два. Что не понятного?
2 Ёпрст
 
09.11.11
16:34
П...ц

Какое отношение количество строк в подчиненном документе имеет к количеству документов  в выборке ??
С абрикоса упал ?!
3 1Сергей
 
09.11.11
16:34
ПолучитьДокумент где? цикл где?
4 Кирр
 
09.11.11
16:35
+(0) Выбирается только Реализация. Другие документы НЕ ВЫБИРАЮТСЯ (Хоть ПКО, хоть "Строка выписки банка")
5 Sh1ko
 
09.11.11
16:36
кидай весь код, поржом хоть
6 1Сергей
 
09.11.11
16:36
посмотрел темы - вроде, не восьмерошник
7 Ёпрст
 
09.11.11
16:37
(4) за 4 лет так и не освоил методы работы с документами ?

ДокПодч.ВыбратьПодчиненныеДокументы(...
Пока ДокПодч.ПолучитьДокумент()=1 цикл
 Сообщить(ДокПодч);
8 Кирр
 
09.11.11
16:37
(1) Как тогда выбрать все документы по одному?
(3) Цикл идет после:
Иначе    
Пока  ДокПодч.ПолучитьДокумент()=1 Цикл
...
КонецЦикла;
КонецЕсли;
9 1Сергей
 
09.11.11
16:38
(8) ну, и, чего тебе ещё надо?
10 Sh1ko
 
09.11.11
16:38
Найти(Строка(ТекущийДокумент),"Заявка покупателя") = 1

чем .вид() не устроил?
11 Кирр
 
09.11.11
16:40
(7) Нужно сравнить суммы реализованных товаров по документу "Реализация" и полученных денег по документам прихода "ПКО" и "Строка выписки банка".
12 Cthulhu
 
09.11.11
16:40
а-хри-неть.
13 Cthulhu
 
09.11.11
16:41
(11): сравнивай.
14 1Сергей
 
09.11.11
16:42
Пока  ДокПодч.ПолучитьДокумент()=1 Цикл
   Если ДокПодч.Вид()="ПКО" Тогда
       //* сравнивай всё что нужно
   ИначеЕсли ДокПодч.Вид()="СтрокаВыпискиБанка" тогда
       //* сравнивай всё что нужно
   КонецЕсли;
КонецЦикла;
15 Кирр
 
09.11.11
16:43
(8)Второго документа НЕТ!
(13)Что с чем? Если док реализации есть, а доков прихода не наблюдается?
16 filh
 
09.11.11
16:43
(8) врешь, если бы было, вопроса небыло бы!
17 Кирр
 
09.11.11
16:44
(14) Так и сделано.Только сначала
Если ДокПодч.вид()="Реализация" Тогда
18 1Сергей
 
09.11.11
16:45
(17) код в студийуууууу
19 Cthulhu
 
09.11.11
16:48
(15): по Заявке есть подчиненные Реализации и оплаты (ПКО и строки банк.выписки)?..
Значит выборка по подчиненным, в одну переменную (или ТЗ если надо подробно) собирай суммы подчиненных заявке реализаций, в другую переменную (или ТЗ если надо подробно) собирай суммы подчиненных заявке оплат.
Блин, я даже опасаюсь предположить - какой альтернативности нужно иметь одаренность чтобы этого не сообразить и не настолько уметь пользоваться логикой, прстите.
20 Sh1ko
 
09.11.11
16:48
Давай уже, народ заждался!
21 Sh1ko
 
09.11.11
16:48
Код!
22 1Сергей
 
09.11.11
16:49
(19) просто, он не программист, имхо
23 filh
 
09.11.11
16:52
(22) просто у него не было Пока  ДокПодч.ПолучитьДокумент()=1 Цикл
24 Кирр
 
09.11.11
16:53
Функция Н()
   Ном = 0;СуммаПриход=0;РеалЕсть=0;
   Если Найти(Строка(ТекущийДокумент),"Заявка покупателя") = 1 Тогда        
     Если ТекущийДокумент.ВидОперации=Перечисление.ВидыОперацийЗаявок.НаПоставку Тогда
       ДокПодч    = СоздатьОбъект("Документ");
   Отгрузка=ТекущийДокумент.ОтгрузкаПроизведена;  
ДокПодч.ВыбратьПодчиненныеДокументы(ТекущийДокумент.ДатаДок-1,КонГода(ТекущаяДата()),ТекущийДокумент)=0 Тогда
           Ном=1
       Иначе    
           Пока  ДокПодч.ПолучитьДокумент()=1 Цикл
               Если ДокПодч.Вид() = "Реализация" Тогда
                   Ном = 5;
                   ТекРеал    = ДокПодч.ТекущийДокумент();
                   Если ТекРеал.ПометкаУдаления() = 1 Тогда  
                       Ном=1;
                       Продолжить;
                   Иначе
                       РеалЕсть=1;
                       ДокПодч2 = СоздатьОбъект("Документ");
                       Если ДокПодч2.ВыбратьПодчиненныеДокументы(ТекРеал.ДатаДок-1,КонГода(ТекущаяДата()),ТекРеал.ТекущийДокумент())=0 Тогда  
                           Если Отгрузка=1 Тогда Ном=6
                           Иначе Ном = 3;                                
                           КонецЕсли;
                       Иначе
                           Пока  ДокПодч2.ПолучитьДокумент()=1 Цикл
                           Если (ДокПодч2.Вид()="СтрокаВыпискиПриход")ИЛИ(ДокПодч2.Вид() = "ПКО") Тогда
                               ТекДок=ДокПодч2.ТекущийДокумент();
                               Если ТекДок.ПометкаУдаления() = 1 Тогда    
                                   Продолжить;
                               Иначе  
                                   СуммаПриход=СуммаПриход+ТекДок.Сумма;
                               КонецЕсли;
                           КонецЕсли;
                           КонецЦикла;
                       КонецЕсли;
                   КонецЕсли;
                   Прервать;
               ИначеЕсли (ДокПодч.Вид()="СтрокаВыпискиПриход")ИЛИ(ДокПодч.Вид() = "ПКО") Тогда
                   ТекДок=ДокПодч.ТекущийДокумент();
                   //Если документ Прихода денег помечен на удаление
                   Если ТекДок.ПометкаУдаления() = 1 Тогда    
                       Продолжить;
       
               КонецЕсли;
           КонецЦикла;
           Если ((СуммаПриход<>0) И (РеалЕсть=1)) Тогда
               Если СуммаПриход=ДокПодч.ДокОснование.СуммаВзаиморасчетов Тогда
                 Если Отгрузка=1 Тогда Ном=0    
                 Иначе Ном=13;              
                 КонецЕсли;    
               ИначеЕсли СуммаПриход<ДокПодч.ДокОснование.СуммаВзаиморасчетов Тогда
                 Если Отгрузка=1 Тогда Ном=4    
                 Иначе Ном=11;              
                 КонецЕсли;    
               Иначе
                   Если Отгрузка=1 Тогда Ном=18
                   Иначе Ном=17  
                   КонецЕсли;    
               КонецЕсли;
           ИначеЕсли ((СуммаПриход<>0) и (РеалЕсть=0)) Тогда
               Если СуммаПриход=ДокПодч.СуммаВзаиморасчетов Тогда
                 Ном=9;
               ИначеЕсли СуммаПриход<ДокПодч.СуммаВзаиморасчетов Тогда
                 Ном=8;  
               Иначе
                 Ном=19;  
               КонецЕсли;
           КонецЕсли
       КонецЕсли;
     КонецЕсли;
   КонецЕсли;
   Возврат Ном;
КонецФункции
25 filh
 
09.11.11
16:54
а что есть ТекущийДокумент?
26 Sh1ko
 
09.11.11
16:55
(25) в журнале.
27 Кирр
 
09.11.11
16:55
(25) ТекущийДокумент в табличной части журнала документов
28 Кирр
 
09.11.11
17:00
(15) Смотри код!
(19) Смотрите?
(26) Ржешь или задумался?
(7) Ты хоть умное что-нибудь скажи!
29 Sh1ko
 
09.11.11
17:00
(28) ржу и думаю-)
30 Sh1ko
 
09.11.11
17:03
ИначеЕсли (ДокПодч.Вид()="СтрокаВыпискиПриход")ИЛИ(ДокПодч.Вид() = "ПКО") Тогда
                   ТекДок=ДокПодч.ТекущийДокумент();
                   //Если документ Прихода денег помечен на удаление

                   Если ТекДок.ПометкаУдаления() = 1 Тогда    
                       Продолжить;


Тут не хватает чего-то
31 Кирр
 
09.11.11
17:06
Да удалил вместе с коментами
                   Иначе  
                       СуммаПриход=СуммаПриход+ТекДок.Сумма;
                   КонецЕсли;
32 Кирр
 
09.11.11
17:08
+(31) Но в строку ИначеЕсли в отладчике пошагово даже не попадает, так как не находит документов
33 Sh1ko
 
09.11.11
17:09
когда делаешь ВыбратьПодчиненныеДокументы() не указывай даты
34 filh
 
09.11.11
17:10
сделай макетную часть:
ДокПодч.ВыбратьПодчиненныеДокументы(...
Пока ДокПодч.ПолучитьДокумент()=1 Цикл
  Сообщить(ДокПодч);
КонецЦикла
35 Mikeware
 
09.11.11
17:10
(29) Тут не ржать, тут плакать впору...
(33) с датами быстрее
36 Sh1ko
 
09.11.11
17:11
От отладчик в табло забей - текущийдокумент, ДокПодч.текущийдокумент(), ДокПодч2.текущийдокумент(), текдок

и пройдись с самого начала
37 Sh1ko
 
09.11.11
17:11
(35) да, но есть шанс что в выборку не все документы попадут. всякое бывает
38 Sh1ko
 
09.11.11
17:13
Да и если речь об документе реализация, то и правда покажет только 1-ый, у тебя там прервать
39 Sh1ko
 
09.11.11
17:15
вернее выборка прервется после первого же найденого док-та Реализация в подченных текущему
40 Sh1ko
 
09.11.11
17:18
И еще. В (0) ты пишешь что "На основании заявки есть реализация и ПКО. " , но судя по коду ПКО выписывается на основании реализации, а не заявки.
41 viktor_vv
 
09.11.11
17:18
Так если у тебя в структуре подчиненности эти доки есть (это ты имеешь ввиду отчет наверное), то скорее всего они подчинены ненапрямую заявке. Что показывает правой кнопкой по заявке "Подчиненные документы" ?
42 Sh1ko
 
09.11.11
17:19
(41) судя по коду, структура такая - заявка->реализация->оплаты
43 Sh1ko
 
09.11.11
17:21
хотя не, оба варианта в коде есть. Т.е ПКО может быть как на основании реализации так и  на основании заявки? И реализация всегда на основании заявки?
44 Sh1ko
 
09.11.11
17:22
Автор застрял в отладчике-) Жми F8-)
45 Кирр
 
09.11.11
17:30
С датами, без дат - одинаково.
Могу даты пустыми оставить - результат одинаковый
46 Mikeware
 
09.11.11
17:31
(45) может, программиста позовешь?
47 Sh1ko
 
09.11.11
17:33
(45)прервать убери
48 Кирр
 
09.11.11
17:34
(38) Может здесь ты прав. Прервать тут стоит убрать.
Но даже если доки созданы на основании реализации, и их больше одного, видит только первый.
49 Sh1ko
 
09.11.11
17:35
(48) если ты об этом "Отладчиком смотрю ДокПодч.КоличествоСтрок()=1!!!"

то.... это кол-во строк в документе, а не кол-во документов в выборке.
50 filh
 
09.11.11
17:37
(48) >>Но даже если доки созданы на основании реализации
Эти не попадут в выборку
51 Кирр
 
09.11.11
17:39
(49) Это уже понятно. Убрал прервать. Теперь видит доки подчиненные Заявке. Осталось разобраться с подчинением Реализации
52 filh
 
09.11.11
17:46
посмотри Обработку ДеревоДокументов
Там поймешь, как все доки увидеть.