|
|
|
Помогите найти ошибку в модуле | ☑ | ||
|---|---|---|---|---|
|
0
sergik79
28.05.20
✎
13:00
|
Суть модуля такая, он ищет виды услуг по контрагенту (у нас Водопотребление и Водоотведение) и считает индексацию. Как бы если прогонять на отладчике, то высчитывает правильно и то и то. Но добавляет в сам документ только одну строчку Водоотведение.
|
|||
|
1
sergik79
28.05.20
✎
13:00
|
#Область ПрограммныйИнтерфейс
&НаСервере Функция ПоискУслуги(Услуга) Экспорт ТипУслуги=""; Запросы=Новый Запрос; Запросы.Текст= "ВЫБРАТЬ | ВидыУслуг.ВидУслуги |ИЗ | РегистрСведений.ВидыУслуг КАК ВидыУслуг |ГДЕ | ВидыУслуг.Номенклатура = &Номенклатура"; Запросы.УстановитьПараметр("Номенклатура",Услуга); Рез=Запросы.Выполнить().Выбрать(); Пока Рез.Следующий() Цикл типУслуги=Рез.видуслуги; КонецЦикла; возврат типУслуги; КонецФункции &НаСервере Функция ПоискИнд(Услуга) Экспорт ТипУслуги=""; Запросы=Новый Запрос; Запросы.Текст= "ВЫБРАТЬ | ВидыУслуг.УслугаПоИндексации |ИЗ | РегистрСведений.ВидыУслуг КАК ВидыУслуг |ГДЕ | ВидыУслуг.Номенклатура = &Номенклатура"; Запросы.УстановитьПараметр("Номенклатура",Услуга); Рез=Запросы.Выполнить().Выбрать(); Пока Рез.Следующий() Цикл типУслуги=Рез.УслугаПоИндексации; КонецЦикла; возврат типУслуги; КонецФункции &НаСервере Процедура ПриПроведенииРеализацииУслугОбработкаПроведения(Источник, Отказ, РежимПроведения) Экспорт Если Источник.Услуги.количество()>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").Ссылка; новстрока.номенклатураинд=УслугаТ_; новстрока.ДатаИндексации=МесяцИндексации; КонецЕсли; //КонецЕсли; //КонецЦикла; КонецПроцедуры #КонецОбласти |
|||
|
2
Креатив
28.05.20
✎
13:12
|
(0)В сам документ ничего не добавляется. А количество проводок, исходя из этого кода
Для Каждого стр Из Источник.услуги Цикл ВидУслуги=ПоискУслуги(стр.номенклатура); Если сокрлп(видуслуги)<>"" Тогда при удачном поиске соответствует количеству строк в таблице документа(источник) услуги. |
|||
|
3
sergik79
28.05.20
✎
13:28
|
немного не понял Вас?
|
|||
|
4
sergik79
28.05.20
✎
13:33
|
(2) В сам документ ничего не добавляется. А количество проводок, исходя из этого кода...
это не то место, здесь добавляются проводки забалансовые да... |
|||
|
5
Ненавижу 1С
гуру
28.05.20
✎
13:36
|
а в чем отличие между дебетом и кредитом:
Проводка.СчетДт = сч; Проводка.субконтодт.контрагенты=Источник.контрагент//Пр; Проводка.субконтодт.Договоры=Источник.ДоговорКонтрагента//Пр; Проводка.субконтодт.Номенклатура=стр.номенклатура//Пр; Проводка.СчетКт = сч; Проводка.субконтокт.контрагенты=Источник.контрагент//Пр; Проводка.субконтокт.Договоры=Источник.ДоговорКонтрагента//Пр; Проводка.субконтокт.Номенклатура=стр.номенклатура//Пр; Проводка.Сумма = стр.сумма; Проводка.количестводт = стр.количество; Проводка.количествокт = стр.количество; |
|||
|
6
sergik79
28.05.20
✎
13:41
|
(5) если по забалансовому счету УСЛ.1 и УСЛ.2 то отличий нет...но так нужно чтобы высчитывать индексацию разницу между услугами, которая нужна потом для пропорции при поиске оплаты...
|
|||
|
7
sergik79
28.05.20
✎
13:52
|
Не могу понять почему строка не записывается в табличную часть, вернее записывается одна последняя Водоотведение(((
|
|||
|
8
Ненавижу 1С
гуру
28.05.20
✎
13:57
|
поставить точку на строке НаборЗаписей.Записать();
смотреть сколько строк в наборе, если сколько нужно - дальше анализировать модуль набора записей |
|||
|
9
sergik79
28.05.20
✎
15:15
|
(8) в этой строке уже записываются проводки при нажатии Провести документ..
а табличная часть заполняется до этого, не в ручную добавить, а рассчитывается индексация и добавляется строка с примечаниями... |
|||
|
10
sergik79
28.05.20
✎
15:28
|
ошибка где то в
[code]Процедура РасчетИндексации(ТЗ,ДокТ) Экспорт.....................[/code] |
|||
|
11
hhhh
28.05.20
✎
15:40
|
(9) документ при проведении не записывается. Он записывается раньше. Вам-то уже пора знать.
|
|||
|
12
sergik79
28.05.20
✎
15:49
|
(11) меня интересует почему в табличной часть не две новых строки учлуги (индексация по водопротреблению и еще одна по воодоотведению) появляются я а одна услуга (водоотведение)
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |