Группа: Пользователи
Сообщений: 1
Спасибо сказали: 0 раз
Рейтинг: 0
1С:Предприятие 8.3 (8.3.10.2561) Бухгалтерия для Беларуси, редакция 2.1. Локализация для Республики Беларусь: СООО "1С-Минск" (2.1.20.7)
Суть модуля такая, модуль перебирает виды услуг по контрагенту (у нас Водопотребление и Водоотведение) и считает индексацию. Если прогонять на отладчике, то высчитывает правильно обе услуги по отдельности. Но добавляет в сам документ только одну строчку Водоотведение.
Если Источник.Услуги.количество()>0 Тогда НаборЗаписей=Источник.Движения.Хозрасчетный.ЭтотОбъект;
Для Каждого стр Из Источник.услуги Цикл ВидУслуги=ПоискУслуги(стр.номенклатура); Если сокрлп(видуслуги)<>"" Тогда Если ВидУслуги=Перечисления.ВидыУслуг.Вода Тогда Сч=ПланыСчетов.Хозрасчетный.НайтиПоКоду("УСЛ.1").Ссылка; Иначе Сч=ПланыСчетов.Хозрасчетный.НайтиПоКоду("УСЛ.2").Ссылка; КонецЕсли;
Запрос=Новый Запрос; Запрос.Текст= "ВЫБРАТЬ | ХозрасчетныйОборотыДтКт.СубконтоДт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) | КОНЕЦ";
Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Если Контрагент.Бюджет=Истина тогда возврат выборка.КоэффициентБ; Иначе возврат выборка.Коэффициент;
Для Каждого стр из ДокТ.услуги Цикл Если лев(сокрлп(стр.содержание),11)<>"Индексация:" Тогда НовСтрока=ТЗ.Добавить(); новстрока.номенклатура=стр.номенклатура; Новстрока.содержание=стр.содержание; Новстрока.количество=стр.количество; Новстрока.цена=стр.цена; Новстрока.сумма=стр.сумма; // Новстрока.Всего=стр.Всего;
///сумма задолженности на начало месяца //Ит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);
Рез=Запрос.Выполнить().Выбрать(); сум=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; Иначе ВсегоКубов=ВсегоКубов-КубовБылоОпл; КонецЕсли;
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!