Версия для печати темы (https://pro1c.org.ua/index.php?s=65bec3a6806f300936cde7ae9c9c4098&showtopic=59282)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Не могу найти найти ошибку в модуле, не записывается строка

Автор: sergik7907 28.05.20, 12:25

1С:Предприятие 8.3 (8.3.10.2561)
Бухгалтерия для Беларуси, редакция 2.1. Локализация для Республики Беларусь: СООО "1С-Минск" (2.1.20.7)

Суть модуля такая, модуль перебирает виды услуг по контрагенту (у нас Водопотребление и Водоотведение) и считает индексацию. Если прогонять на отладчике, то высчитывает правильно обе услуги по отдельности. Но добавляет в сам документ только одну строчку Водоотведение.

Код

#Область ПрограммныйИнтерфейс
&НаСервере
Функция ПоискУслуги(Услуга)  Экспорт
    ТипУслуги="";
    Запросы=Новый Запрос;

    Запросы.Текст=
    "ВЫБРАТЬ
    |    ВидыУслуг.ВидУслуги
    |ИЗ
    |    РегистрСведений.ВидыУслуг КАК ВидыУслуг
    |ГДЕ
    |    ВидыУслуг.Номенклатура = &Номенклатура";
    Запросы.УстановитьПараметр("Номенклатура",Услуга);
    Рез=Запросы.Выполнить().Выбрать();
    Пока Рез.Следующий() Цикл
        типУслуги=Рез.видуслуги;
    КонецЦикла;
    возврат типУслуги;
КонецФункции    

&НаСервере
Функция ПоискИнд(Услуга)  Экспорт
    ТипУслуги="";
    Запросы=Новый Запрос;

    Запросы.Текст=
    "ВЫБРАТЬ
    |    ВидыУслуг.УслугаПоИндексации
    |ИЗ
    |    РегистрСведений.ВидыУслуг КАК ВидыУслуг
    |ГДЕ
    |    ВидыУслуг.Номенклатура = &Номенклатура";
    Запросы.УстановитьПараметр("Номенклатура",Услуга);
    Рез=Запросы.Выполнить().Выбрать();
    Пока Рез.Следующий() Цикл
        типУслуги=Рез.УслугаПоИндексации;
    КонецЦикла;
    возврат типУслуги;
КонецФункции    
    
    
&НаСервере


Процедура ПриПроведенииРеализацииУслугОбработкаПроведения(Источник, Отказ, РежимПроведения) Экспорт
    
    
    
    Если Источник.Услуги.количество()>0 Тогда    
        НаборЗаписей=Источник.Движения.Хозрасчетный.ЭтотОбъект;
  

        Для Каждого стр Из Источник.услуги Цикл
            ВидУслуги=ПоискУслуги(стр.номенклатура);
            Если сокрлп(видуслуги)<>"" Тогда
                Если ВидУслуги=Перечисления.ВидыУслуг.Вода Тогда
                    Сч=ПланыСчетов.Хозрасчетный.НайтиПоКоду("УСЛ.1").Ссылка;
                Иначе
                    Сч=ПланыСчетов.Хозрасчетный.НайтиПоКоду("УСЛ.2").Ссылка;
                КонецЕсли;
            
                
        Проводка = НаборЗаписей.Добавить();

        Проводка.Период      = источник.дата;
        Проводка.Организация = Справочники.Организации.НайтиПоКоду("00-000001");
    
        Проводка.Содержание  = "перенос НДС";

        Проводка.СчетДт = сч;
        Проводка.субконтодт.контрагенты=Источник.контрагент;//Пр;
        Проводка.субконтодт.Договоры=Источник.ДоговорКонтрагента;//Пр;
        Проводка.субконтодт.Номенклатура=стр.номенклатура;//Пр;

        Проводка.СчетКт = сч;    
        Проводка.субконтокт.контрагенты=Источник.контрагент;//Пр;
        Проводка.субконтокт.Договоры=Источник.ДоговорКонтрагента;//Пр;
        Проводка.субконтокт.Номенклатура=стр.номенклатура;//Пр;


        Проводка.Сумма = стр.сумма;
        Проводка.количестводт = стр.количество;
        Проводка.количествокт = стр.количество;
    КонецЕсли;
        КонецЦикла;  
    
    НаборЗаписей.Записать();
КонецЕсли;


КонецПроцедуры

&НаСервере
Функция ПолучитьсуммуОплаты(СДаты,ПоДату,контрагент,договорконтрагента) Экспорт
    Запрос=Новый Запрос;
    Запрос.Текст=
    "ВЫБРАТЬ
    |    ХозрасчетныйОборотыДтКт.СубконтоКт1,
    |    СУММА(ЕСТЬNULL(ХозрасчетныйОборотыДтКт.СуммаОборот, 0)) КАК сумма
    |ИЗ
    |    РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(&сдаты, &подату, Период, , , , , ) КАК ХозрасчетныйОборотыДтКт
    |ГДЕ
    |    ХозрасчетныйОборотыДтКт.СчетКт В ИЕРАРХИИ(&Счет62)
    |    И НЕ(ХозрасчетныйОборотыДтКт.СубконтоДт1 = ХозрасчетныйОборотыДтКт.СубконтоКт1
    |                И ХозрасчетныйОборотыДтКт.СчетДт В ИЕРАРХИИ (&Счет62))
    |    И ХозрасчетныйОборотыДтКт.СубконтоКт1 = &СубконтоКт1
    //|    И ХозрасчетныйОборотыДтКт.СубконтоКт2 = &СубконтоКт2
    |
    |СГРУППИРОВАТЬ ПО
    |    ХозрасчетныйОборотыДтКт.СубконтоКт1";
    Запрос.УстановитьПараметр("счет62",Планысчетов.Хозрасчетный.НайтиПоКоду("62").Ссылка);
    Запрос.УстановитьПараметр("СубконтоКт1",контрагент);
//    Запрос.УстановитьПараметр("СубконтоКт2",договорконтрагента);
    Запрос.УстановитьПараметр("СДаты",сдаты);
    Запрос.УстановитьПараметр("ПоДату",подату);

    Рез=Запрос.Выполнить().Выбрать();
    сум=0;
    Пока Рез.Следующий() цикл
        сум=сум+рез.сумма;
    КонецЦикла;
    Возврат сум;
    

КонецФункции          

&НаСервере
Функция ПолучитьсуммуДО(СДаты,ПоДату,контрагент,договорконтрагента) Экспорт
    Запрос=Новый Запрос;
    Запрос.Текст=
    "ВЫБРАТЬ
    |    ХозрасчетныйОборотыДтКт.СубконтоДт1,
    |    СУММА(ЕСТЬNULL(ХозрасчетныйОборотыДтКт.СуммаОборот, 0)) КАК сумма
    |ИЗ
    |    РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(&СДаты, &ПоДату, Период, , , , , ) КАК ХозрасчетныйОборотыДтКт
    |ГДЕ
    |    ХозрасчетныйОборотыДтКт.СчетДт В ИЕРАРХИИ(&Счет62)
    |    И НЕ(ХозрасчетныйОборотыДтКт.СубконтоДт1 = ХозрасчетныйОборотыДтКт.СубконтоКт1
    |                И ХозрасчетныйОборотыДтКт.СчетКт В ИЕРАРХИИ (&Счет62))
    |    И ХозрасчетныйОборотыДтКт.СубконтоДт1 = &СубконтоКт1
    //|    И ХозрасчетныйОборотыДтКт.СубконтоДт2 = &СубконтоКт2
    |
    |СГРУППИРОВАТЬ ПО
    |    ХозрасчетныйОборотыДтКт.СубконтоДт1";

    Запрос.УстановитьПараметр("счет62",Планысчетов.Хозрасчетный.НайтиПоКоду("62").Ссылка);
    Запрос.УстановитьПараметр("СубконтоКт1",контрагент);
    //Запрос.УстановитьПараметр("СубконтоКт2",договорконтрагента);
    Запрос.УстановитьПараметр("СДаты",сдаты);
    Запрос.УстановитьПараметр("ПоДату",подату);

    Рез=Запрос.Выполнить().Выбрать();
    сум=0;
    Пока Рез.Следующий() цикл
        сум=сум+рез.сумма;
    КонецЦикла;
    Возврат сум;
    

КонецФункции      

&НаСервере
Функция ПолучитьсуммуДОУСЛ(СДаты,ПоДату,контрагент,договорконтрагента,Счета) Экспорт
    Запрос=Новый Запрос;
    Запрос.Текст=
    "ВЫБРАТЬ
    |    ХозрасчетныйОборотыДтКт.СубконтоДт1,
    |    СУММА(ЕСТЬNULL(ХозрасчетныйОборотыДтКт.СуммаОборот, 0)) КАК сумма
    |ИЗ
    |    РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(&СДаты, &ПоДату, Период, , , , , ) КАК ХозрасчетныйОборотыДтКт
    |ГДЕ
    |    ХозрасчетныйОборотыДтКт.СчетДт В ИЕРАРХИИ(&Счет62)
    |    И ХозрасчетныйОборотыДтКт.СубконтоДт1 = &СубконтоКт1
//    |    И ХозрасчетныйОборотыДтКт.СубконтоДт2 = &СубконтоКт2
    |
    |СГРУППИРОВАТЬ ПО
    |    ХозрасчетныйОборотыДтКт.СубконтоДт1";

    Запрос.УстановитьПараметр("счет62",счета);
    Запрос.УстановитьПараметр("СубконтоКт1",контрагент);
    //Запрос.УстановитьПараметр("СубконтоКт2",договорконтрагента);
    Запрос.УстановитьПараметр("СДаты",сдаты);
    Запрос.УстановитьПараметр("ПоДату",подату);

    Рез=Запрос.Выполнить().Выбрать();
    сум=0;
    Пока Рез.Следующий() цикл
        сум=сум+рез.сумма;
    КонецЦикла;
    Возврат сум;
    

КонецФункции      

&НаСервере
Процедура Расчетсумм(СуммаУслуги20,СуммаУслуги10,СуммаУслуги0,СДаты,ПоДату,контрагент,договорконтрагента) Экспорт  
    
    Запрос=Новый Запрос;
    Запрос.Текст=
    "ВЫБРАТЬ
    |    ХозрасчетныйОборотыДтКт.СубконтоДт1,
    |    СУММА(ВЫБОР
    |            КОГДА ХозрасчетныйОборотыДтКт.СубконтоДт3.СтавкаНДС = &Ставка20
    |                ТОГДА ЕСТЬNULL(ХозрасчетныйОборотыДтКт.СуммаОборот, 0)
    |            ИНАЧЕ 0
    |        КОНЕЦ) КАК сумма20,
    |    ВЫБОР
    |        КОГДА ХозрасчетныйОборотыДтКт.СубконтоДт3.СтавкаНДС = &Ставка10
    |            ТОГДА ЕСТЬNULL(ХозрасчетныйОборотыДтКт.СуммаОборот, 0)
    |        ИНАЧЕ 0
    |    КОНЕЦ КАК Сумма10,
    |    ВЫБОР
    |        КОГДА ХозрасчетныйОборотыДтКт.СубконтоДт3.СтавкаНДС = &Ставка20
    |                ИЛИ ХозрасчетныйОборотыДтКт.СубконтоДт3.СтавкаНДС = &Ставка10
    |            ТОГДА 0
    |        ИНАЧЕ ЕСТЬNULL(ХозрасчетныйОборотыДтКт.СуммаОборот, 0)
    |    КОНЕЦ КАК сумма0
    |ИЗ
    |    РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(&СДаты, &ПоДату, Период, , , , , ) КАК ХозрасчетныйОборотыДтКт
    |ГДЕ
    |    ХозрасчетныйОборотыДтКт.СчетДт В ИЕРАРХИИ(&Счет62)
    |    И ХозрасчетныйОборотыДтКт.СубконтоДт1 = &СубконтоКт1
//    |    И ХозрасчетныйОборотыДтКт.СубконтоДт2 = &СубконтоКт2
    |
    |СГРУППИРОВАТЬ ПО
    |    ХозрасчетныйОборотыДтКт.СубконтоДт1,
    |    ВЫБОР
    |        КОГДА ХозрасчетныйОборотыДтКт.СубконтоДт3.СтавкаНДС = &Ставка10
    |            ТОГДА ЕСТЬNULL(ХозрасчетныйОборотыДтКт.СуммаОборот, 0)
    |        ИНАЧЕ 0
    |    КОНЕЦ,
    |    ВЫБОР
    |        КОГДА ХозрасчетныйОборотыДтКт.СубконтоДт3.СтавкаНДС = &Ставка20
    |                ИЛИ ХозрасчетныйОборотыДтКт.СубконтоДт3.СтавкаНДС = &Ставка10
    |            ТОГДА 0
    |        ИНАЧЕ ЕСТЬNULL(ХозрасчетныйОборотыДтКт.СуммаОборот, 0)
    |    КОНЕЦ";

    Запрос.УстановитьПараметр("счет62",Планысчетов.Хозрасчетный.НайтиПоКоду("УСЛ").Ссылка);
    Запрос.УстановитьПараметр("ставка20",перечисления.СтавкиНДС.НДС20);
    Запрос.УстановитьПараметр("ставка10",перечисления.СтавкиНДС.НДС10);
    
    Запрос.УстановитьПараметр("СубконтоКт1",контрагент);
//    Запрос.УстановитьПараметр("СубконтоКт2",договорконтрагента);
    Запрос.УстановитьПараметр("СДаты",сдаты);
    Запрос.УстановитьПараметр("ПоДату",подату);

    Рез=Запрос.Выполнить().Выбрать();
    
    Пока Рез.Следующий() цикл
        СуммаУслуги20=СуммаУслуги20+рез.сумма20;
        СуммаУслуги10=суммауслуги10+рез.сумма10;
        СуммаУслуги0=суммауслуги0+рез.сумма0;

    КонецЦикла;

КонецПроцедуры


&НаСервере
Функция ПоискЗадолженности(СДаты,ПоДату,контрагент,договорконтрагента) Экспорт
    //Ит62.СНД()-Ит62.СНК()+Ит62.ДО();
    Запрос=Новый Запрос;
    Запрос.Текст=
    "ВЫБРАТЬ
    |    ЕСТЬNULL(ХозрасчетныйОстатки.СуммаОстатокДт, 0) - ЕСТЬNULL(ХозрасчетныйОстатки.СуммаОстатокКт, 0) КАК сумма
    |ИЗ
    |    РегистрБухгалтерии.Хозрасчетный.Остатки(&Период, , , ) КАК ХозрасчетныйОстатки
    |ГДЕ
    |    ХозрасчетныйОстатки.Счет В ИЕРАРХИИ(&Счет62)
    |    И ХозрасчетныйОстатки.Субконто1 = &Субконто1
    |    И ХозрасчетныйОстатки.Субконто2 = &Субконто2";
    Запрос.УстановитьПараметр("счет62",Планысчетов.Хозрасчетный.НайтиПоКоду("62").Ссылка);
    Запрос.УстановитьПараметр("Субконто1",контрагент);
    Запрос.УстановитьПараметр("Субконто2",договорконтрагента);  
    Запрос.УстановитьПараметр("Период",сдаты-1);
    Рез=Запрос.Выполнить().Выбрать();
    сум=0;//ПолучитьсуммуДО(СДаты,ПоДату,контрагент,договорконтрагента);
    Пока Рез.Следующий() цикл
        сум=сум+рез.сумма;
    КонецЦикла;
    Возврат сум;
    

КонецФункции

&НаСервере
Функция ПолучитьКоф(ВыбДата,Тов,контрагент,организация)
    Запрос = Новый Запрос;
    Запрос.Текст ="ВЫБРАТЬ
    |    КурсыВалютСрезПоследних.Услуга,
    |    КурсыВалютСрезПоследних.КоэффициентБ,
    |    КурсыВалютСрезПоследних.Коэффициент
    |ИЗ
    |    РегистрСведений.КоэффициентыИндексации.СрезПоследних(&ВыбДата, Услуга = &Услуга) КАК КурсыВалютСрезПоследних";
    
    Запрос.УстановитьПараметр("ВыбДата", КонецДня(ВыбДата));
    Запрос.УстановитьПараметр("Услуга", ПоискУслуги(Тов));

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
   Если Контрагент.Бюджет=Истина тогда
        возврат  выборка.КоэффициентБ;
    Иначе
        возврат  выборка.Коэффициент;
        
    конецесли;

КонецЦикла;
    КонецФункции

&НаСервере
Процедура РасчетИндексации(ТЗ,ДокТ) Экспорт
    ТЗ=Новый ТаблицаЗначений;
    Тз.Колонки.Добавить("Номенклатура");
    Тз.Колонки.Добавить("Содержание");
    Тз.Колонки.Добавить("Количество");
    Тз.Колонки.Добавить("Цена");
    Тз.Колонки.Добавить("Сумма");
    Тз.Колонки.Добавить("СтавкаНДС");
    Тз.Колонки.Добавить("СуммаНДС");
    //Тз.Колонки.Добавить("Всего");

    Тз.Колонки.Добавить("СчетДоходов");
    Тз.Колонки.Добавить("Субконто");
    Тз.Колонки.Добавить("СчетУчетаНДСПоРеализации");
    Тз.Колонки.Добавить("СчетРасходов");    
    Тз.Колонки.Добавить("НоменклатураИнд");
    Тз.Колонки.Добавить("ДатаИндексации");
    
    Для Каждого стр из ДокТ.услуги Цикл
        Если лев(сокрлп(стр.содержание),11)<>"Индексация:"  Тогда
            НовСтрока=ТЗ.Добавить();
            новстрока.номенклатура=стр.номенклатура;
            Новстрока.содержание=стр.содержание;
            Новстрока.количество=стр.количество;
            Новстрока.цена=стр.цена;
            Новстрока.сумма=стр.сумма;
        //    Новстрока.Всего=стр.Всего;
    
            Новстрока.ставкандс=стр.ставкандс;
            Новстрока.суммандс=стр.суммандс;
            Новстрока.счетдоходов=стр.счетдоходов;
            Новстрока.субконто=стр.субконто;
            Новстрока.СчетУчетаНДСПоРеализации=стр.СчетУчетаНДСПоРеализации;
            Новстрока.счетрасходов=стр.счетрасходов;
        КонецЕсли;
    КонецЦикла;    
    
    ДатаИндексацииТ=началомесяца(ДокТ.дата)-1;
    ДатаИндексации=ДатаИндексацииТ;
    
    ДатаРасчетов=конецмесяца(ДокТ.дата);              
    
    //////всего оплата  
    //Ит62 = СоздатьОбъект("БухгалтерскиеИтоги");
    //Ит62.ИспользоватьСубконто(ВидыСубконто.Контрагенты,Контрагент,2);
    //Если Константа.УчитыватьДоговора=Перечисление.Булево.Да Тогда
    //    Ит62.ИспользоватьСубконто(ВидыСубконто.Договоры,Договор,2);      
    //КонецЕсли;                                        
    ОплатаТек=0;
    //Ит62.ВыполнитьЗапрос(,,,3,,"С");     
    ОплатаТек=ПолучитьсуммуОплаты(НачалоМесяца(ДатаИндексацииТ),КонецМесяца(ДатаИндексацииТ),ДокТ.контрагент,ДокТ.договорконтрагента);//СчетПоКоду("62")//Ит62.КО();
    
    ///сумма задолженности на начало месяца
    //Ит62 = СоздатьОбъект("БухгалтерскиеИтоги");
    //Ит62.ИспользоватьСубконто(ВидыСубконто.Контрагенты,Контрагент,2);  
    //Если Константа.УчитыватьДоговора=Перечисление.Булево.Да Тогда
    //    Ит62.ИспользоватьСубконто(ВидыСубконто.Договоры,Договор,2);
    //КонецЕсли;    
    
    
    //////поиск движений за месяц
    /////
    
    
    //Ит62.ВыполнитьЗапрос(НачМесяца(ДатаИндексацииТ),КонМесяца(ДатаИндексацииТ),"62.1");  
    СуммаЗадолженностиНаНачалоМесяца=ПоискЗадолженности(НачалоМесяца(ДатаИндексацииТ),КонецМесяца(ДатаИндексацииТ),ДокТ.контрагент,ДокТ.договорконтрагента)
    +ПолучитьсуммуДО(НачалоМесяца(ДатаИндексацииТ),КонецМесяца(ДатаИндексацииТ),ДокТ.контрагент,ДокТ.договорконтрагента);
    //Ит62.СНД()-Ит62.СНК()+Ит62.ДО();  
    ДвижениеЗаМесяц=0; ЗаМесяцТ=0;      
    Если ОплатаТек>0 Тогда
        ДвижениеЗаМесяц=ПолучитьсуммуДО(НачалоМесяца(ДатаИндексацииТ),КонецМесяца(ДатаИндексацииТ),ДокТ.контрагент,ДокТ.договорконтрагента);//Ит62.ДО();
    КонецЕсли;      
    //    Если (Ит62.СНД()-Ит62.СНК())> ОплатаТек Тогда
    СуммаЗадолженностиНаНачалоМесяца=ПоискЗадолженности(НачалоМесяца(ДатаИндексацииТ),КонецМесяца(ДатаИндексацииТ),ДокТ.контрагент,ДокТ.договорконтрагента);
    //Ит62.СНД()-Ит62.СНК();
    Если (СуммаЗадолженностиНаНачалоМесяца=0) и (ДвижениеЗаМесяц<>0) Тогда
        ЗаМесяцТ=ДвижениеЗаМесяц;
        
    КонецЕсли;
    ДвижениеЗаМесяц=0;  
    Для Каждого стр из тз цикл
        Если сокрлп(стр.датаИндексации)<>"" Тогда
            Если КонецМесяца(ДатаИндексацииТ)=конецмесяца(Дата(КонецМесяца(стр.датаИндексации)+1))      Тогда
                Если  СокрЛП(стр.номенклатураинд)<>""    Тогда
                    СуммаЗадолженностиНаНачалоМесяца=СуммаЗадолженностиНаНачалоМесяца+стр.сумма+стр.суммандс;
                КонецЕсли;    
            КонецЕсли;    
        КонецЕсли;
    КонецЦикла;
    
    
    
    Если СуммаЗадолженностиНаНачалоМесяца<0 Тогда
        СуммаЗадолженностиНаНачалоМесяца=0;
    КонецЕсли;            
    
    
    
    СуммаУслуги=0;
    //ИтУСЛ = СоздатьОбъект("БухгалтерскиеИтоги");
    //ИтУСЛ.ИспользоватьСубконто(ВидыСубконто.Контрагенты,Контрагент,2);
    //Если Константа.УчитыватьДоговора=Перечисление.Булево.Да Тогда
    //    ИтУСЛ.ИспользоватьСубконто(ВидыСубконто.Договоры,Договор,2);  
    //КонецЕсли;              
    //
    //ИтУСЛ.ВыполнитьЗапрос(НачМесяца(ДатаИндексацииТ),КонМесяца(ДатаИндексацииТ),"УСЛ",,,1,,"СК");  
    СуммаУслугиВсего=0;                    
    СуммаУслугиВсего=ПолучитьсуммуДОУСЛ(НачалоМесяца(ДатаИндексацииТ),КонецМесяца(ДатаИндексацииТ),ДокТ.контрагент,ДокТ.договорконтрагента,Планысчетов.Хозрасчетный.НайтиПоКоду("УСЛ").Ссылка);//ИтУСЛ.ДО("С");  
    СуммаУслуги20=0;
    СуммаУслуги10=0;
    СуммаУслуги0=0;
    Для Каждого стр из тз цикл
        Если сокрлп(стр.датаИндексации)<>"" Тогда
            
            Если началоМесяца(ДатаИндексацииТ)=дата(КонецМесяца(стр.датаИндексации)+1)     Тогда
                Если  СокрЛП(стр.номенклатураинд)<>""    Тогда
                    суммаУслугиВсего=СуммаУслугиВсего+стр.сумма+стр.суммандс;
                КонецЕсли;    
            КонецЕсли;      
        КонецЕсли;
        
    КонецЦикла;
    
    //ВыбратьСтроки();
    //Пока ПолучитьСтроку()=1  Цикл
    //    Если Дата(КонМесяца(МесяцИндексации)+1)=НачМесяца(ДатаИндексацииТ) Тогда  
    //        Если  СокрЛП(ИндексируемаяУслуга)<>""    Тогда
    //               СуммаУслугиВсего=СуммаУслугиВсего+Всего;
    //           
    //           КонецЕсли;    
    //    КонецЕсли;
    //КонецЦикла;
    //
    Сч3=2;
    //ИтУСЛ = СоздатьОбъект("БухгалтерскиеИтоги");
    //ИтУСЛ.ИспользоватьСубконто(ВидыСубконто.Контрагенты,Контрагент,2);
    //Если Константа.УчитыватьДоговора=Перечисление.Булево.Да Тогда
    //    ИтУСЛ.ИспользоватьСубконто(ВидыСубконто.Договоры,Договор,2);  Сч3=3;
    //КонецЕсли;        
    //ИтУСЛ.ИспользоватьСубконто(ВидыСубконто.Номенклатура,,1);
    //ИтУсл.ВключатьСубсчета(1,0);  
    //ИтУСЛ.ВыполнитьЗапрос(НачМесяца(ДатаИндексацииТ),КонМесяца(ДатаИндексацииТ),"УСЛ",,,1,,"СК");  
    //
    СуммаУслуги20=0;
    СуммаУслуги10=0;
    СуммаУслуги0=0;    
    РасчетСумм(СуммаУслуги20,СуммаУслуги10,СуммаУслуги0,НачалоМесяца(ДатаИндексацииТ),КонецМесяца(ДатаИндексацииТ),ДокТ.контрагент,ДокТ.договорконтрагента);
    
    //ИтУсл.ВыбратьСубконто(Сч3);
    //Пока ИтУсл.ПолучитьСубконто(Сч3)=1  Цикл    
    //    Если СокрЛП(ИтУсл.Субконто(Сч3))<>""      Тогда
    //        Если ИтУсл.Субконто(Сч3).СтавкаНДС.Получить(ДатаИндексации).Ставка=20 Тогда
    //            СуммаУслуги20=СуммаУслуги20+ИтУсл.ДО();
    //        ИначеЕсли ИтУсл.Субконто(Сч3).СтавкаНДС.Получить(ДатаИндексации).Ставка=10 Тогда
    //            СуммаУслуги10=СуммаУслуги10+ИтУсл.ДО();
    //        Иначе
    //            СуммаУслуги0=СуммаУслуги0+ИтУсл.ДО();
    //        КонецЕсли;
    //    КонецЕсли;
    //КонецЦикла;
    
    Процент20=1;Процент10=0;Процент0=0;
    Если  (СуммаУслуги20+СуммаУслуги10+СуммаУслуги0)<>0   Тогда
        Процент20=Окр(СуммаУслуги20/(СуммаУслуги20+СуммаУслуги10+СуммаУслуги0),3,1);
        Процент0=Окр(СуммаУслуги0/(СуммаУслуги20+СуммаУслуги10+СуммаУслуги0),3,1);
        Процент10=Окр(СуммаУслуги10/(СуммаУслуги20+СуммаУслуги10+СуммаУслуги0),3,1);
    КонецЕсли;
    
    Если (СуммаУслуги10+СуммаУслуги0)=0      Тогда  
        СуммаЗадолженностиНаНачалоМесяца=Окр((СуммаЗадолженностиНаНачалоМесяца)/120*100,2,1);
        ДвижениеЗаМесяц=Окр(ДвижениеЗаМесяц/120*100,2,1);
        ЗаМесяцТ=Окр(ЗаМесяцТ/120*100,2,1);
        
    ИначеЕсли (СуммаУслуги20+СуммаУслуги0)=0  Тогда
        СуммаЗадолженностиНаНачалоМесяца=Окр((СуммаЗадолженностиНаНачалоМесяца)/110*100,2,1);
        ДвижениеЗаМесяц=Окр(ДвижениеЗаМесяц/110*100,2,1);    
        ЗаМесяцТ=Окр(ЗаМесяцТ/110*100,2,1);
        
        
    ИначеЕсли (СуммаУслуги20<>0) или (СуммаУслуги10<>0) или (СуммаУслуги0<>0)  Тогда
        Процент20=Окр(СуммаУслуги20/(СуммаУслуги20+СуммаУслуги10+СуммаУслуги0),3,1);
        Процент0=Окр(СуммаУслуги0/(СуммаУслуги20+СуммаУслуги10+СуммаУслуги0),3,1);
        Процент10=Окр(СуммаУслуги10/(СуммаУслуги20+СуммаУслуги10+СуммаУслуги0),3,1);
        СуммаЗадолженностиНаНачалоМесяца=Окр((СуммаЗадолженностиНаНачалоМесяца*Процент20)/120*100,2,1)+
        Окр((СуммаЗадолженностиНаНачалоМесяца*Процент10)/110*100,2,1)+Окр((СуммаЗадолженностиНаНачалоМесяца*Процент0)/100*100,2,1);  
        
        ДвижениеЗаМесяц=Окр((ДвижениеЗаМесяц*Процент20)/120*100,2,1)+
        Окр((ДвижениеЗаМесяц*Процент10)/110*100,2,1)+Окр((ДвижениеЗаМесяц*Процент0)/100*100,2,1);
        ЗаМесяцТ=Окр((ЗаМесяцТ*Процент20)/120*100,2,1)+
        Окр((ЗаМесяцТ*Процент10)/110*100,2,1)+Окр((ЗаМесяцТ*Процент0)/100*100,2,1);
    КонецЕсли;
    
    
    
    Запрос=Новый Запрос;
    Запрос.Текст=
    "ВЫБРАТЬ
    |    СУММА(ЕСТЬNULL(ХозрасчетныйОборотыДтКт.СуммаОборот, 0)) КАК сумма,
    |    ХозрасчетныйОборотыДтКт.СубконтоДт3,
    |    ХозрасчетныйОборотыДтКт.СчетДт,
    |    СУММА(ЕСТЬNULL(ХозрасчетныйОборотыДтКт.КоличествоОборотДт, 0)) КАК количество,
    |    ХозрасчетныйОборотыДтКт.СубконтоДт1
    //|    ХозрасчетныйОборотыДтКт.СубконтоДт2
    |ИЗ
    |    РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(&СДаты, &ПоДату, Период, , , , , ) КАК ХозрасчетныйОборотыДтКт
    |ГДЕ
    |    ХозрасчетныйОборотыДтКт.СчетДт В ИЕРАРХИИ(&Счет62)
    |    И ХозрасчетныйОборотыДтКт.СубконтоДт1 = &СубконтоКт1
//    |    И ХозрасчетныйОборотыДтКт.СубконтоДт2 = &СубконтоКт2
    |
    |СГРУППИРОВАТЬ ПО
    |    ХозрасчетныйОборотыДтКт.СубконтоДт3,
    |    ХозрасчетныйОборотыДтКт.СчетДт,
    |    ХозрасчетныйОборотыДтКт.СубконтоДт1";
    
    Запрос.УстановитьПараметр("счет62",Планысчетов.Хозрасчетный.НайтиПоКоду("УСЛ").Ссылка);
    Запрос.УстановитьПараметр("СубконтоКт1",докт.контрагент);
    //Запрос.УстановитьПараметр("СубконтоКт2",докт.договорконтрагента);
    Запрос.УстановитьПараметр("СДаты",НачалоМесяца(ДатаИндексацииТ));
    Запрос.УстановитьПараметр("ПоДату",КонецМесяца(ДатаИндексацииТ));  
    
    Рез=Запрос.Выполнить().Выбрать();
    сум=0;
    Пока Рез.Следующий() цикл
        
        //
        //ИтУсл.ВыбратьСчета();
        //Пока ИтУсл.ПолучитьСчет()=1  Цикл
        //    Если ИтУсл.счет.этогруппа()=0       Тогда
        //        ИтУсл.ВыбратьСубконто(Сч3);
        //        Пока ИтУсл.ПолучитьСубконто(Сч3)=1  Цикл
        //            Если ИтУсл.Субконто(Сч3).ВидНоменклатуры=Константа.УслугаПоВоде.ВидНоменклатуры Тогда    
        //                УслугаТ=Константа.УслугаПоВодеИнд;                
        //            Иначе
        //                УслугаТ=Константа.УслугаПоКанализацииИнд;  
        //            КонецЕсли;        
        ЗаМесяц=0;
        УслугаТ_=Рез.СубконтоДт3;//ИтУсл.Субконто(Сч3);
        СуммаИндексации=0;  
        Примечание="";    
        СуммаУслуги=0;
        СуммаУслуги=рез.сумма;//ИтУСЛ.ДО("С");  
        КоличествоУслуги_=рез.количество;  
        КоличествоУслуги= 0;
        Если ОплатаТек>0 Тогда  
            Если ДвижениеЗаМесяц<>0 Тогда
                КоличествоУслуги=рез.количество;//ИтУСЛ.ДО("К");
            КонецЕсли;        
        Иначе
            КоличествоУслуги=0;
        КонецЕсли;    
        Для Каждого стр из тз цикл
            Если сокрлп(стр.датаИндексации)<>"" Тогда
                
                Если началоМесяца(ДатаИндексацииТ)=дата(КонецМесяца(стр.датаИндексации)+1)     Тогда
                    Если  стр.номенклатураинд=УслугаТ_    Тогда
                        суммаУслугиВсего=СуммаУслугиВсего+стр.сумма+стр.суммандс;
                    КонецЕсли;    
                КонецЕсли;    
            КонецЕсли;
            
        КонецЦикла;
        
        //ВыбратьСтроки();
        //Пока ПолучитьСтроку()=1  Цикл
        //    Если Дата(КонМесяца(МесяцИндексации)+1)=НачМесяца(ДатаИндексацииТ) Тогда    
        //        Если   УслугаТ_=ИндексируемаяУслуга    Тогда
        //             СуммаУслуги=СуммаУслуги+Всего;
        //        КонецЕсли;
        //        
        //    КонецЕсли;
        //КонецЦикла;
        СуммаДолга=СуммаЗадолженностиНаНачалоМесяца;
        Если  СуммаУслугиВсего<>0 Тогда
            СуммаДолга=Окр((СуммаЗадолженностиНаНачалоМесяца-ДвижениеЗаМесяц)/СуммаУслугиВсего*СуммаУслуги,2,1);
            ЗаМесяц= Окр((ЗаМесяцТ)/СуммаУслугиВсего*СуммаУслуги,2,1);
        КонецЕсли;
        ЦенаТ=Ценообразование.ПолучитьЦенуНоменклатуры(УслугаТ_,
        докт.договорконтрагента.ТипЦен, Дата(НачалоМесяца(ДатаИндексацииТ)-1),
        константы.ВалютаРегламентированногоУчета.Получить().Ссылка, 1, 1);
        
        
        //ЦенаТ=глПолучитьЦену( "",УслугаТ_, Константа.ТипЦенДляВодыКНС, Дата(НачМесяца(ДатаИндексацииТ)-1),?(Договор.Выбран() = 0,"",Договор.ВалютаДоговора),Курс);
        ///Объем задолженности
        КубовБыло=КоличествоУслуги;
        Если  ЦенаТ<>0 Тогда
            КубовБыло=Окр(СуммаДолга/ЦенаТ,4,1)+КоличествоУслуги;
            
        КонецЕсли;    
        ВсегоКубов=КубовБыло;
        СуммаДолга=СуммаЗадолженностиНаНачалоМесяца;
        Если  СуммаУслугиВсего<>0 Тогда
            СуммаДолга=Окр((СуммаЗадолженностиНаНачалоМесяца)/СуммаУслугиВсего*СуммаУслуги,2,1);
        КонецЕсли;
        Если КоличествоУслуги<>0 Тогда  
            Если ВсегоКубов<>0 Тогда
                ЦенаТ=Окр(СуммаДолга/ВсегоКубов,2,1);
            КонецЕсли;    
        КонецЕсли;                              
        ЗаМесК=0;    
        Примечание=" индексации.Долг на нач.мес."+СокрЛП(СуммаЗадолженностиНаНачалоМесяца-ДвижениеЗаМесяц)+"за месяц:"+СокрЛП(ДвижениеЗаМесяц+ЗаМесяц)+" куб.мес:"+СокрЛП(КоличествоУслуги+ЗаМесК)+":"+СокрЛП(Примечание)+ " по услуге(Сумма):"+СокрЛП(СуммаДолга)+":цена на начало месяца:"+СокрЛП(ЦенаТ)+":Кубов(Сумма/Цена):"+
        СокрЛП(ВсегоКубов-КоличествоУслуги)+" всего куб:"+СокрЛП(КубовБыло);
        
        //Ит62 = СоздатьОбъект("БухгалтерскиеИтоги");
        //Ит62.ИспользоватьСубконто(ВидыСубконто.Контрагенты,Контрагент,2);
        //Если Константа.УчитыватьДоговора=Перечисление.Булево.Да Тогда
        //    Ит62.ИспользоватьСубконто(ВидыСубконто.Договоры,Договор,2);      
        //КонецЕсли;    
        //Ит62.ВыполнитьЗапрос(НачМесяца(ДатаИндексацииТ),КонМесяца(ДатаИндексацииТ),СчетПоКоду("62"),,,3,"День","С");  
        ////////поиск движений за месяц
        
        
        
        ///
        Если (ЗаМесяц<>0) и (КоличествоУслуги_<>0) Тогда
            //    Ит62.ВыбратьПериоды();
            ОплатаТ="";
            ДатаН=конецдня(НачалоМесяца(ДатаИндексацииТ));
            ДатаК=КонецМесяца(ДатаИндексацииТ);
            Пока ДатаН<=ДатаК Цикл
                
                сум=0;
                Сум=ПолучитьсуммуДО(НачалоДня(ДатаН),КонецДня(ДатаН),докт.контрагент,докт.договорконтрагента);
                Если сум>0 Тогда
                    ЦенаТ=Ценообразование.ПолучитьЦенуНоменклатуры(УслугаТ_,
                    докт.договорконтрагента.ТипЦен, КонецДня(ДатаН),
                    константы.ВалютаРегламентированногоУчета.Получить().Ссылка, 1, 1);
                КонецЕсли;
                
                ДатаН=конецдня(КонецДня(ДатаН)+1);
                
            КонецЦикла;
            //Пока Ит62.ПолучитьПериод()=1 Цикл
            //    Если Ит62.ДО()<>0 Тогда          
            //        ЦенаТ=глПолучитьЦену( "",УслугаТ_, Константа.ТипЦенДляВодыКНС,Ит62.КонДата,?(Договор.Выбран() = 0,"",Договор.ВалютаДоговора),Курс);
            //    КонецЕсли;
            //КонецЦикла;    
            //    ЦенаТ=Окр(ЗаМесяц/ИтУСЛ.ДО("К"),0,1);
            ЗаМесК= КоличествоУслуги_;//ИтУСЛ.ДО("К");  
            Примечание=" индексации."+" куб.мес:"+СокрЛП(ЗаМесК)+";";
        КонецЕсли;     
        
        СуммаИндексации=0;
        ///проверяем оплату
        
        //    Ит62.ВыбратьПериоды();
        ОплатаТ="";
        ВсегоКубов=ВсегоКубов+ЗаМесК;
        ДатаН=конецдня(НачалоМесяца(ДатаИндексацииТ));
        ДатаК=КонецМесяца(ДатаИндексацииТ);
        Пока ДатаН<=ДатаК Цикл
             КофИнд=1;
            КофИнд=ПолучитьКоф(ДатаН,УслугаТ_,докт.Контрагент,докт.Организация);

            СуммаОплаты=0;
            СуммаОплаты=Получитьсуммуоплаты(НачалоДня(ДатаН),КонецДня(ДатаН),докт.контрагент,докт.договорконтрагента);
            Если СуммаОплаты<>0 Тогда
            СуммаОплатыТ=0;
            ЦенаТОпл=Ценообразование.ПолучитьЦенуНоменклатуры(УслугаТ_,
            докт.договорконтрагента.ТипЦен, КонецДня(ДатаН),
            константы.ВалютаРегламентированногоУчета.Получить().Ссылка, 1, 1);
            Если  СуммаУслугиВсего<>0 Тогда
                СуммаОплатыТ=Окр(СуммаОплаты/СуммаУслугиВсего*СуммаУслуги/100*100,2,1);
            КонецЕсли;          
            СуммаОплатыТ=Окр((СуммаОплатыТ*Процент20)/120*100,2,1)+
            Окр((СуммаОплатыТ*Процент10)/110*100,0,1)+Окр((СуммаОплатыТ*Процент0)/100*100,2,1);
            КубовБылоОпл=0;
            Если  ЦенаТОпл<>0 Тогда
                КубовБылоОпл=Окр(СуммаОплатыТ/ЦенаТ,4,1);
            КонецЕсли;    
            Если ВсегоКубов<КубовБылоОпл Тогда
                КубовБылоОпл=ВсегоКубов;
                Всегокубов=0;
            Иначе            
                ВсегоКубов=ВсегоКубов-КубовБылоОпл;  
            КонецЕсли;
            
            
            СуммаИндексацииТ=Окр(СуммаОплатыТ*КофИнд,2)-СуммаОплатыТ;;
            СуммаИндексации=СуммаИндексации+СуммаИндексацииТ;    
            Примечание=СокрЛП(Примечание)+ " Оплата:"+СокрЛП(СуммаОплаты)+" :"+СокрЛП(формат(датан,"ДФ=dd.MM.yy")+":Оплата услуги:"+СокрЛП(СуммаОплатыТ)+":кубов"+СокрЛП(КубовБылоОпл)+":цена:"+СокрЛП(ЦенаТОпл)+":Сумма индекс.:"+
            СокрЛП(СуммаИндексацииТ));
            
            
            КонецЕсли;
ДатаН=конецдня(КонецДня(ДатаН)+1);

        КонецЦикла;
                КонецЦикла;

        ///осталось кубов
        ////    Если Константа.ИндексироватьОстаток=Перечисление.Булево.Да Тогда
        //////////Если сокрлп(всегокубов)="" Тогда
        //////////    всегокубов=0;
        //////////КонецЕсли;
        //////////Если Всегокубов>0 Тогда
        //////////    ЦенаТП=Ценообразование.ПолучитьЦенуНоменклатуры(УслугаТ_,
        //////////    докт.договорконтрагента.ТипЦен, КонецДня(Датаиндексации),
        //////////    константы.ВалютаРегламентированногоУчета.Получить().Ссылка, 1, 1);        
        //////////    //    ЦенаТП=глПолучитьЦену( "",УслугаТ_, Константа.ТипЦенДляВодыКНС,КонМесяца(Датаиндексации),?(Договор.Выбран() = 0,"",Договор.ВалютаДоговора),Курс);         
        //////////    СуммаИндексацииТ=Окр(Всегокубов*(ЦенаТП-ЦенаТ),2,1);
        //////////    Примечание=СокрЛП(Примечание)+ " осталось кубов:"+СокрЛП(ВсегоКубов)+":цена на дату счета:"+СокрЛП(ЦенаТП)+" (Цена-Цена на нач.) ("+СокрЛП(ЦенаТП)+"-"+СокрЛП(ЦенаТ)+") :Сумма:"+
        //////////    СокрЛП(СуммаИндексацииТ);
        //////////    СуммаИндексации=СуммаИндексации+СуммаИндексацииТ;  
        //////////КонецЕсли;                
        //    КонецЕсли;
        Если СуммаИндексации<>0 Тогда
            новстрока=ТЗ.Добавить();
            
            
            
            Сумма=СуммаИндексации;
            Всего=СуммаИндексации;
            СтавкаНДСЧислом = 0;
            Попытка
                СтавкаНДС = УслугаТ_.ставкандс;
                СтавкаНДСЧислом = 0;
                Если СтавкаНДС = Перечисления.СтавкиНДС.НДС20 ИЛИ СтавкаНДС = Перечисления.СтавкиНДС.НДС20_120 Тогда
                    СтавкаНДСЧислом = 20;
                ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС10 ИЛИ СтавкаНДС = Перечисления.СтавкиНДС.НДС10_110 Тогда
                    СтавкаНДСЧислом = 10;
                ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС18 ИЛИ СтавкаНДС = Перечисления.СтавкиНДС.НДС18_118 Тогда
                    СтавкаНДСЧислом = 18;
                    //1С-Минск
                ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС909 Тогда
                    СтавкаНДСЧислом = 9.09;        
                ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС1525 Тогда
                    СтавкаНДСЧислом = 15.25;        
                ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС1667 Тогда
                    СтавкаНДСЧислом = 16.67;
                ИначеЕсли СтавкаНДС = Перечисления.СтавкиНДС.НДС25 ИЛИ СтавкаНДС = Перечисления.СтавкиНДС.НДС25_125 Тогда
                    СтавкаНДСЧислом = 25;    
                    //1С-Минск
                КонецЕсли;    
            Исключение
                
            КонецПопытки;
            суммандс=окр(сумма/100*СтавкаНДСЧислом,2,1);
            
            //Индексация=Лев(СокрЛП(Примечание),99);  
            //Индексация1=Сред(СокрЛП(Примечание),100,99);
            //Индексация2=Сред(СокрЛП(Примечание),(99+99+1),99);      
            //Индексация3=Сред(СокрЛП(Примечание),(99+99+99+1),99);  
            //Индексация4=Сред(СокрЛП(Примечание),(99+99+99+99+1),99);    
            //Индексация5=СокрЛП(ИтУсл.Субконто(Сч3))+" за "+СокрЛП(ДатаИндексацииТ);  
            ИндексируемаяУслуга=УслугаТ_;  
            МесяцИндексации=ДатаИндексацииТ;  
            
            новстрока.номенклатура=Поискинд(УслугаТ_);
            Новстрока.содержание=сокрлп(примечание)+СокрЛП(УслугаТ_)+" за "+СокрЛП(ДатаИндексацииТ);
            Новстрока.количество=1;
            Новстрока.цена=Сумма;
            Новстрока.сумма=Сумма;
            Новстрока.ставкандс=УслугаТ_.ставкандс;
            Новстрока.суммандс=суммандс;
            //Новстрока.Всего=Сумма+суммандс;

            Новстрока.счетдоходов=планысчетов.Хозрасчетный.НайтиПоКоду("90.1.1").Ссылка;
            Новстрока.субконто=стр.субконто;
            Новстрока.СчетУчетаНДСПоРеализации=планысчетов.Хозрасчетный.НайтиПоКоду("90.2.1").Ссылка;
            Новстрока.счетрасходов=планысчетов.Хозрасчетный.НайтиПоКоду("90.4.1").Ссылка;
            новстрока.номенклатураинд=УслугаТ_;
            новстрока.ДатаИндексации=МесяцИндексации;
            
        КонецЕсли;    
        
        
    //КонецЕсли;
    
    //КонецЦикла;
    
    
    
КонецПроцедуры    


#КонецОбласти

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua