Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Войти | Зарегистрироваться )




>  Не могу найти найти ошибку в модуле, не записывается строка
sergik7907
Отправлено: 28.05.20, 12:25


Молчаливый
*

Группа: Пользователи
Сообщений: 1
Регистрация: 28.05.20
Пользователь №: 69536


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С Предприятие 8.3 · Просмотр сообщения: #163412 · Ответов: 0 · Просмотров: 746
 


Новые сообщения  Открытая тема (есть новые ответы)
Опрос  Опрос (есть новые голоса)
Нет новых сообщений  Открытая тема (нет новых ответов)
Нет новых голосов  Опрос (нет новых голосов)
Популярная тема  Горячая тема (есть новые ответы)
Закрыта  Закрытая тема
Нет новых  Горячая тема (нет новых ответов) Перемещена  Тема перемещена
 

RSS Текстовая версия Сейчас: 26.04.24, 15:36
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!