Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Отчет Задолженность по счетам 60 и 62

v7: Отчет Задолженность по счетам 60 и 62
Я
   Tasha3
 
08.11.18 - 11:44
Здравствуйте! Нужна помощь программиста. Описание проблемы: В Типовой конфигурации 1С Бухгалтерия 7.7 написан дополнительный отчет по задолженности счетов 60 и 62 через Бухгалтерские Итоги с выбором по контрагенту и договору документов в том числе Выписки банка - Ит.Операция.Документ.ТекущийДокумент(); В Выписке банка нужно указать платежку, а записью Ит.Операция.Документ.Операция.СодержаниеПроводки или Ит.Операция.ПредставлениеПроводки() видит только НомерСтр = 0, т.е. первую строку в операции, а не строку с нужной суммой и номером платежного поручения. Возможно ли перебор строк, чтобы вытащить нужный номер платежки из Проводок документа или какой другой подход, чтобы увидеть номер платежки. В остальном отчет полностью устраивает. Спасибо.
 
 
   azernot
 
1 - 08.11.18 - 11:48
(0) Возможно. Я лично делал что-то типа акта сверки (анализ взаиморасчётов) по разным счетам учёта взаиморасчётов, в котором корректно указывались реквизиты платёжного документа.
   Tasha3
 
2 - 08.11.18 - 11:56
Брал Реквизиты платежного документа из Операции Документа по сумме или как-то по другому?
   Tasha3
 
3 - 08.11.18 - 11:57
Во общем как сделать в моем случае?
   azernot
 
4 - 08.11.18 - 12:02
(2) Брал документ операции, если это "Выписка", перебирал его строки, проверял, подходит ли строка под мои условия (счет, контрагент, договор и т.п.), и брал дату и номер ПП из первичного документа или из самой строки выписки, если первичного документа нет.
   Tasha3
 
5 - 08.11.18 - 12:12
У меня документ выбирается так:
Ит = СоздатьОбъект("БухгалтерскиеИтоги");
Ит.ИспользоватьСубконто(ВидыСубконто.Контрагенты, ПарамКонтрагент, 2);
Ит.ИспользоватьСубконто(ВидыСубконто.Основание, ПарамДоговор, 2);
Ит.ВыполнитьЗапрос(Документ, Документ, Сч,,1,3,,3);
Ит = СоздатьОбъект("БухгалтерскиеИтоги");                            Ит.ИспользоватьСубконто(ВидыСубконто.Контрагенты, БухИт.Субконто(1), 2);                     Ит.ИспользоватьСубконто(ВидыСубконто.Основание, БухИт.Субконто(2), 2);                    НачДата1=НачМесяца(ДобавитьМесяц(КонДата, -25));                     Ит.ВыполнитьЗапрос(НачДата1, КонДата, Счета,,,2,"Операция",1);                                              Ит.ВыбратьСубконто(1);                                          Пока Ит.ПолучитьСубконто(1) = 1 Цикл                        Ит.ВыбратьСубконто(2);                                                Пока Ит.ПолучитьСубконто(2) = 1 Цикл                                                                            Ит.ВыбратьПериоды();  
Пока Ит.ПолучитьПериод() = 1 Цикл                               ТЗ11.НоваяСтрока();                                 ТЗ11.Док  = Ит.Операция.Документ.ТекущийДокумент();                                ТЗ11.ДатаДок = Ит.Операция.Документ.ДатаДок;                                 ВидДок = ТЗ11.Док.Вид();
Если (ВидДок = "Выписка банка") и т.д. 
т.е. "перебирал его строки" - у меня нет строк документа! Как их получить? У меня ведь все из бух. итогов. Что я не так делаю?
   azernot
 
6 - 08.11.18 - 12:14
Я не вижу в этом коде перебора строк. Это должно выглядеть примерно так:

Если Док.Вид() = "Выписка" Тогда
    Док.ВыбратьСтроки();
    Пока Док.ПолучитьСтроку() = 1 Цикл
   Tasha3
 
7 - 08.11.18 - 12:20
Я пробовала такой вариант, у меня зацикливает и висит отчет, а номер строки = 0 и все... Что может быть не так?
   azernot
 
8 - 08.11.18 - 12:21
(7) Многое может быть не так. Не видя код, что тут можно сказать?
   azernot
 
9 - 08.11.18 - 12:22
+(8) Оцениваю 99.9% вероятность того, что в зацикливании виноват автор программного кода.
   Tasha3
 
10 - 08.11.18 - 12:23
А можно прислать отчет посмотреть?
 
 Рекламное место пустует
   Tasha3
 
11 - 08.11.18 - 12:23
Автор, т.е. я - начинающий:)
   azernot
 
12 - 08.11.18 - 12:24
(10) Зачем? Пишите код по перебору строк здесь.

Вы определитесь, вы хотите, чтобы вам помогли или сделали за вас?
   azernot
 
13 - 08.11.18 - 12:25
(11) Тогда у вас выход один - обратитесь к разбирающемуся. Скорее всего, это будет не бесплатно. Хотя, альтруистов в мире много.
   Tasha3
 
14 - 08.11.18 - 12:30
Помогли конечно. Я так и писала:
Если Док.Вид() = "Выписка" Тогда
    Док.ВыбратьСтроки();
    Пока Док.ПолучитьСтроку() = 1 Цикл 
ТЗ11.Платежка = Ит.Операция.ПредставлениеПроводки();
//ИЛИ

ТЗ11.Платежка=Ит.Операция.Документ.Операция.СодержаниеПроводкиКонецЦикла;
   azernot
 
15 - 08.11.18 - 12:37
(14) Не вижу ничего, что приводило бы к зацикливанию.

Ну давайте я напишу вам кусочек кода
Если Док.Вид() = "Выписка" Тогда
    Док.ВыбратьСтроки();
    Пока Док.ПолучитьСтроку() = 1 Цикл 
        //Тут надо проерить, подходит эта строка или нет (тот ли контрагент, тот ли счет)

        
        Если Док.ПервичныйДокумент.Выбран() = 0 Тогда 
            НомерПлатежки = Док.НомерДокВходящий;
            ДатаПлатежки  = Док.ДатаДокВходящий
        Иначе     
            НомерПлатежки = Док.ПервичныйДокумент.НомерДок;
            ДатаПлатежки  = Док.ПервичныйДокумент.ДатаДок;
        КонецЕсли;
        
        //А тут надо понять, а что же сделать с этой датой и номером? А если по выписке несколько срок по этому контрагенту?

    КонецЦикла
   Tasha3
 
16 - 08.11.18 - 12:59
Спасибо, пробую еще раз, может сейчас все получится!
   Tasha3
 
17 - 08.11.18 - 13:16
У меня Док = Ит.Операция.Документ.ТекущийДокумент(); может по этому зацикливает? НомерПлатежки = "" пусто и зависает. Чему у вас равен Док?
   Tasha3
 
18 - 08.11.18 - 13:21
ТЗ11.Док.ВыбратьСтроки();
Пока ТЗ11.Док.ПолучитьСтроку() = 1 Цикл 
Если ТЗ11.Док.ПервичныйДокумент.Выбран() = 0 Тогда 
НомерПлатежки = ТЗ11.Док.НомерДокВходящий;  
Сообщить(НомерПлатежки);
КонецЕсли;                  
КонецЦикла;
   azernot
 
19 - 08.11.18 - 13:23
(18) Ну вот, этот код должен сработать если в выписках не выбирается первичный документ.
У вас в выписках не указывается документ=платёжка?
   Tasha3
 
20 - 08.11.18 - 13:38
В табличной части Выписки есть НомерДокВходящий, т.е. Номер Платежки НомерДокВходящий = ПервичныйДокумент.НомерДок; и ПервичныйДокумент.Вид()="ПлатежноеПоручение"...
   Tasha3
 
21 - 08.11.18 - 13:39
Все должно сработать, но циклит может из-за Док = Ит.Операция.Документ.ТекущийДокумент(); А чему у вас равен Док?
   Tasha3
 
22 - 08.11.18 - 13:41
Пробовала и без  Если ТЗ11.Док.ПервичныйДокумент.Выбран() = 0 Тогда, раньше...
   azernot
 
23 - 08.11.18 - 14:03
(21) Док - это собственно документ, формирующий проводку по 60,62

Попробуйте так:

ТЗ11.Док  = Ит.Операция.Документ.ТекущийДокумент();                                                              ВидДок = ТЗ11.Док.Вид();
Если (ВидДок = "Выписка") ТОгда
 ТЗ11.Док.ВыбратьСтроки();
  Пока ТЗ11.Док.ПолучитьСтроку() = 1 Цикл 
    Если ТЗ11.Док.ПервичныйДокумент.Выбран() = 0 Тогда 
      НомерПлатежки = ТЗ11.Док.НомерДокВходящий;  
      Сообщить("№ платёжки без документа = " +НомерПлатежки);
    Иначе     
      НомерПлатежки = ТЗ11.Док.ПервичныйДокумент.НомерДокВходящий;  
      Сообщить("№ платёжки из документа = " +НомерПлатежки);
    КонецЕсли;                  
  КонецЦикла;


И ещё, что значит "циклит" в вашем понимании?
   Tasha3
 
24 - 08.11.18 - 14:39
Цикл все время в документе с номером 124, а ТЗ11.Док.НомерСтроки = 0 - все время, ТЗ11.Док.НомерДокВходящий = "" пустой, а ТЗ11.Док.ПервичныйДокумент.НомерДокВходящий не подходит - ошибка в выражении.
   Tasha3
 
25 - 08.11.18 - 14:40
Одна строка в документе?
   Tasha3
 
26 - 08.11.18 - 14:40
По строчкам не ходит...
   Tasha3
 
27 - 08.11.18 - 14:41
Не знаю во общем, но эта конструкция не работает в моем случае...
   azernot
 
28 - 08.11.18 - 14:45
(24)     
Попробуйте так в том же месте, внутри цикла 
Пока Ит.ПолучитьПериод() = 1 Цикл


Док  = Ит.Операция.Документ.ТекущийДокумент();
Если (Док.Вид()= "Выписка") ТОгда
 Если Док.ВыбратьСтроки() = 1 Тогда
  Пока Док.ПолучитьСтроку() = 1 Цикл 
     Сообщить("Обрабатывается строка № " +Док.НомерСтроки);
    Если Док.ПервичныйДокумент.Выбран() = 0 Тогда 
      НомерПлатежки = Док.НомерДокВходящий;  
      Сообщить("№ платёжки без документа = " +НомерПлатежки);
    Иначе     
      НомерПлатежки = Док.ПервичныйДокумент.НомерДок;  
      Сообщить("№ платёжки из документа = " +НомерПлатежки);
    КонецЕсли;                  
  КонецЦикла;
 КонецЕсли;
   Tasha3
 
29 - 08.11.18 - 15:01
У меня Ит.ВыбратьПериоды() и внутри цикла 
Пока Ит.ПолучитьПериод() = 1 Цикл// и есть

Если (Док.Вид()= "Выписка") ТОгда
 Если Док.ВыбратьСтроки() = 1 Тогда
  Пока Док.ПолучитьСтроку() = 1 Цикл 
    Если Док.ПервичныйДокумент.Выбран() = 0 Тогда 
      НомерПлатежки = Док.НомерДокВходящий;
КонецЕсли;
конецЦикла;
КонецЕсли;
конецЕсли;
Должно работать по идее, но что-то со строками не перебирает ТЗ11.Док.НомерСтроки = 0 - все время в одном док-те находится...
   Tasha3
 
30 - 08.11.18 - 15:03
Иначе мне не надо, т.к. Док.ПервичныйДокумент.НомерДок - ошибка в выражении
   azernot
 
31 - 08.11.18 - 15:24
(30) Либо вы выполняете код из (28) и пишите, что выдаёт программа, либо у вас есть возможность решить вашу проблему полностью самостоятельно.
   Tasha3
 
32 - 08.11.18 - 15:30
из 24?
   Tasha3
 
33 - 08.11.18 - 15:31
Ок, только напишите, чему у вас равен Док =  и я скомпилирую ваш код и отпишусь...
 
 
   azernot
 
34 - 08.11.18 - 15:32
(32) ИЗ 28.

Вот этот код
Пока Ит.ПолучитьПериод() = 1 Цикл


Док  = Ит.Операция.Документ.ТекущийДокумент();
Если (Док.Вид()= "Выписка") ТОгда
 Если Док.ВыбратьСтроки() = 1 Тогда
  Пока Док.ПолучитьСтроку() = 1 Цикл 
     Сообщить("Обрабатывается строка № " +Док.НомерСтроки);
    Если Док.ПервичныйДокумент.Выбран() = 0 Тогда 
      НомерПлатежки = Док.НомерДокВходящий;  
      Сообщить("№ платёжки без документа = " +НомерПлатежки);
    Иначе     
      НомерПлатежки = Док.ПервичныйДокумент.НомерДок;  
      Сообщить("№ платёжки из документа = " +НомерПлатежки);
    КонецЕсли;                  
  КонецЦикла;
 КонецЕсли;
   Tasha3
 
35 - 08.11.18 - 15:32
ок, сейчас.
   Tasha3
 
36 - 08.11.18 - 16:00
Да, вы правы, ваш кусочек срабатывает, он не циклит, а думает, очень большой период с 2016 года взят, очень долго обрабатывает. Спасибо огромное за терпение :)


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует