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