7.7 Прощу помощи в разборе логики кода

Тема в разделе "Отчеты и обработки для "1С:Предприятие 7.7"", создана пользователем Vertex, 28 фев 2014.

  1. TopicStarter Overlay
    Vertex
    Offline

    Vertex Опытный в 1С

    Регистрация:
    14 июн 2011
    Сообщения:
    468
    Симпатии:
    4
    Баллы:
    29
    Всем привет.
    Обработка для конфы "Бухгалтерия" , отображающая дебиторскую - кредиторскую задолженности и момент её возникновения.

    Краткое введение: Обработка рассчитывает бухгалтерские итоги от даты отчета до указанной глубины, по счетам 60,62,76 за каждый месяц Например ТекущяДата 10.02.14, сначала рассчитываются итоги за текущий период "с 01.02.14 по 10.02.14", далее шагаем на глубину к примеру 2 следующие итоги "с 01.01.14 по 31.01.14" , следующие " с 01.12.13 по 31.12.13". Рассчитанные итоги помесячно отправляются в таблицу значений.
    Затем все или отобранные контрагенты по элементно ищутся в каждых рассчитанных итогах.
    Рассчитывается сальдо на самую раннюю дату (есть ли долг в самом позднем месяце), Дальше расчитываются итоги по каждому контрагенту по каждому периоду. И выводятся в таблицу.

    Вопросы вызывают выражения рассчитывающие значения которые отправляются в итоговую таблицу.

    Код:
     УменьшениеДолга=Макс((ДолгНач),(ДолгНач)-ПриходОбщий);
                    ПриходОбщий=Макс(0,ПриходОбщий-УменьшениеДолга); 


    Код:
       ПД=ТабКонтр.ПрихДолг-Мин(0,ТабКонтр.РасхДолг);
                        ВознДолг=Макс(0,ПД-ПриходОбщий);
                        УменьшениеДолга=Макс(ПД,ПД-ПриходОбщий);
                        ПриходОбщий=Макс(0,ПриходОбщий-УменьшениеДолга);
    Фрагмент кода в котором вопрос:

    Код:
                ТабБИ.ВыбратьСтроки() ;
                Пока ТабБИ.ПолучитьСтроку() = 1 Цикл
                    БИТек = ТабБИ.БИ ;
                    БИТек.ВыбратьСубконто() ;
                    ПрихДолг=0;
                    РасхДолг=0;
                    ТабКонтр.НоваяСтрока() ;
                    Если БИТек.ПолучитьСубконто(,,Контрагент) = 1 Тогда
                        Если ПерваяСтрока = 1 Тогда
                            ДолгНач=БИТек.СНД()-БИТек.СНК();
                            ПерваяСтрока = 0 ;
                        КонецЕсли ;   
                        ТабКонтр.ПрихДолг = БИТек.ДО();
                        ТабКонтр.РасхДолг = БИТек.КО();
                        Если Сальдо > 0 Тогда
                            ПриходОбщий = ПриходОбщий + Макс(0,ТабКонтр.РасхДолг);
                        Иначе
                            ПриходОбщий = ПриходОбщий + Макс(0,ТабКонтр.ПрихДолг);
                        КонецЕсли ;   
                    КонецЕсли;
                КонецЦикла ;       
                ТабДляПечати.УдалитьСтроки() ;
                Если Сальдо>0 Тогда
                    // А теперь считаем и записываем в ТабДляПечати чтобы проще выводить
                    // правда в обратном порядке
                    ДолгВсего=Сальдо;
                    ДолгОбщий=ДолгВсего;
                    ВознДолг4=Макс(0,(ДолгНач)-ПриходОбщий); // Долг ранее указанной даты
                    УменьшениеДолга=Макс((ДолгНач),(ДолгНач)-ПриходОбщий);  // ??
                    ПриходОбщий=Макс(0,ПриходОбщий-УменьшениеДолга); // ?? Тоже не въезжаю  в суть этого выражения
                    ТабКонтр.ВыбратьСтроки() ;
                    Пока ТабКонтр.ПолучитьСтроку() = 1 Цикл
                        ПД=ТабКонтр.ПрихДолг-Мин(0,ТабКонтр.РасхДолг);
                        ВознДолг=Макс(0,ПД-ПриходОбщий);
                        УменьшениеДолга=Макс(ПД,ПД-ПриходОбщий);
                        ПриходОбщий=Макс(0,ПриходОбщий-УменьшениеДолга);
                        ТабДляПечати.НоваяСтрока() ;
                        ТабДляПечати.ВознДолг = ВознДолг ;
                    КонецЦикла ;    

    Вложения:

  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    А что вам не понятно? Приход не может быть отрицательным...
  3. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Тяжеловато читать код 1С в черно-белом исполнении :)
    Тут цикл, в котором общая сумма "ПриходОбщий" распределяется на кусочками по "ВознДолг". Эти кусочки выводятся на печать.

    А условия стоят, что бы распределяемую сумму в минус не угнать.
    Vertex нравится это.
  4. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Не совсем правильно кусок кода показал...
    Там есть вторая часть, когда Сальдо<=0 тогда смысл становится понятен. WaRDeR, прав - идет распределение
  5. TopicStarter Overlay
    Vertex
    Offline

    Vertex Опытный в 1С

    Регистрация:
    14 июн 2011
    Сообщения:
    468
    Симпатии:
    4
    Баллы:
    29
    УменьшениеДолга=Макс((ДолгНач),(ДолгНач)-ПриходОбщий);
    А что есть уменьшение долга? Что вообще дает эта переменная ? Запутался ... :(
  6. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    На какую величину идет уменьшение долга. Максимальное значение м.д. начальным долгом и разницей дога и прихода.
    Переменная нужна строкой ниже. Думаю разнесли для того чтобы как раз было все понятно.
    Vertex нравится это.
  7. TopicStarter Overlay
    Vertex
    Offline

    Vertex Опытный в 1С

    Регистрация:
    14 июн 2011
    Сообщения:
    468
    Симпатии:
    4
    Баллы:
    29
    Спасибо
  8. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104

Поделиться этой страницей