feat(пульт): остатки по регистру взаиморасчётов вместо счетов 205.31/304.04, версия 1.0.0

This commit is contained in:
4 changed files with 914 additions and 507 deletions
@@ -28,6 +28,7 @@
<usePurposes>PersonalComputer</usePurposes> <usePurposes>PersonalComputer</usePurposes>
<scriptVariant>Russian</scriptVariant> <scriptVariant>Russian</scriptVariant>
<defaultRoles>Role.ПС_ОсновнаяРоль</defaultRoles> <defaultRoles>Role.ПС_ОсновнаяРоль</defaultRoles>
<version>1.0.0</version>
<defaultLanguage>Language.Русский</defaultLanguage> <defaultLanguage>Language.Русский</defaultLanguage>
<interfaceCompatibilityMode>TaxiEnableVersion8_2</interfaceCompatibilityMode> <interfaceCompatibilityMode>TaxiEnableVersion8_2</interfaceCompatibilityMode>
<languages uuid="2f74bb63-c643-4692-af13-1f99a56719fb" extendedConfigurationObject="4b1b900f-9c8f-4b2b-8292-3a9a6db40715"> <languages uuid="2f74bb63-c643-4692-af13-1f99a56719fb" extendedConfigurationObject="4b1b900f-9c8f-4b2b-8292-3a9a6db40715">
@@ -42,6 +42,26 @@
#КонецОбласти #КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыТаблицаСадыОстатки
// Показывает остатки по детям выбранного сада.
// Строка сада берётся из таблицы «Остатки по садам»; при пустой строке детализация
// остаётся по всем садам из отбора формы.
//
&НаКлиенте
Процедура ТаблицаСадыОстаткиПриАктивизацииСтроки(Элемент)
ТекущиеДанные = Элемент.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
ЗаполнитьОстаткиПоДетям(ТекущиеДанные.Учреждение);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы #Область ОбработчикиКомандФормы
// Обновляет данные таблиц формы по установленным фильтрам. // Обновляет данные таблиц формы по установленным фильтрам.
@@ -85,18 +105,6 @@
КонецПроцедуры КонецПроцедуры
// Обеспечивает наличие идентификаторов объектов метаданных по документам внутреннего ЭДО.
//
// Команда нужна для разовой проверки механизма внутреннего ЭДО БГУ: без идентификаторов
// документы расширения не попадают в настройки внутреннего ЭДО (см. ПС_ИдентификаторыОбъектовЭДО).
//
&НаКлиенте
Процедура ИнициализироватьИдентификаторыЭДО(Команда)
ИнициализироватьИдентификаторыЭДОНаСервере();
КонецПроцедуры
#КонецОбласти #КонецОбласти
#Область СлужебныеПроцедурыИФункции #Область СлужебныеПроцедурыИФункции
@@ -118,33 +126,12 @@
ЗаполнитьДокументыПередачи(Отборы.ЦБОрганизация, Отборы.СадОрганизация); ЗаполнитьДокументыПередачи(Отборы.ЦБОрганизация, Отборы.СадОрганизация);
ЗаполнитьДокументыПринятия(Отборы.ЦБОрганизация, Отборы.СадОрганизация); ЗаполнитьДокументыПринятия(Отборы.ЦБОрганизация, Отборы.СадОрганизация);
ЗаполнитьСверку(Отборы.ЦБОрганизация, Отборы.СадОрганизация); ЗаполнитьСверку(Отборы.ЦБОрганизация, Отборы.СадОрганизация);
ЗаполнитьТаблицуОстатков(); ЗаполнитьОстаткиПоСадам();
ЗаполнитьОстаткиПоДетям(Неопределено);
ЗаполнитьКассовыеПоступления(); ЗаполнитьКассовыеПоступления();
КонецПроцедуры КонецПроцедуры
// Обеспечивает наличие идентификаторов объектов метаданных по документам внутреннего ЭДО
// и выводит пользователю результат проверки.
//
&НаСервере
Процедура ИнициализироватьИдентификаторыЭДОНаСервере()
ОбъектОбработки = РеквизитФормыВЗначение("Объект");
Идентификаторы = ОбъектОбработки.ПС_ИнициализироватьИдентификаторыОбъектовЭДО();
ТекстыИдентификаторов = Новый Массив;
Для Каждого КлючИЗначение Из Идентификаторы Цикл
ТекстыИдентификаторов.Добавить(КлючИЗначение.Ключ + " -> " + Строка(КлючИЗначение.Значение));
КонецЦикла;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Идентификаторы объектов метаданных внутреннего ЭДО: "
+ СтрСоединить(ТекстыИдентификаторов, "; ");
Сообщение.Сообщить();
КонецПроцедуры
// Возвращает отборы формы в терминах, в которых они хранятся в документах. // Возвращает отборы формы в терминах, в которых они хранятся в документах.
// //
// ЦБ и учреждение (сад) хранятся в документах передачи и принятия организациями, // ЦБ и учреждение (сад) хранятся в документах передачи и принятия организациями,
@@ -174,7 +161,8 @@
ДокументыПередачи.Очистить(); ДокументыПередачи.Очистить();
ДокументыПринятия.Очистить(); ДокументыПринятия.Очистить();
Сверка.Очистить(); Сверка.Очистить();
ТаблицаОстатков.Очистить(); ТаблицаОстатковСады.Очистить();
ТаблицаОстатковДети.Очистить();
КассовыеПоступления.Очистить(); КассовыеПоступления.Очистить();
КонецПроцедуры КонецПроцедуры
@@ -426,89 +414,135 @@
КонецПроцедуры КонецПроцедуры
// Заполняет таблицу остатков и оборотов по счетам 205.31 и 304.04. // Заполняет таблицу остатков по садам: поступило в ЦБ, передано в сад и остаток у ЦБ.
// Использует виртуальную таблицу ОстаткиИОбороты регистра бухгалтерии. //
// Источник данных - регистр накопления взаиморасчётов по родительской плате: приход
// формирует кассовое поступление, расход - документ передачи платежей в учреждение.
// Остаток показывает, сколько поступило в ЦБ и ещё не передано в сад.
// //
&НаСервере &НаСервере
Процедура ЗаполнитьТаблицуОстатков() Процедура ЗаполнитьОстаткиПоСадам()
ТаблицаОстатков.Очистить(); ТаблицаОстатковСады.Очистить();
Если ЗначениеЗаполнено(Объект.Учреждение) Тогда
ОбщегоНазначения.СообщитьПользователю(
"Остатки и обороты по счетам ведутся без разреза по учреждению,"
+ " поэтому отбор по учреждению на эту страницу не влияет.");
КонецЕсли;
НачалоПериода = Объект.Период.ДатаНачала;
КонецПериода = Объект.Период.ДатаОкончания;
Запрос = Новый Запрос; Запрос = Новый Запрос;
УсловиеОтбора = УсловиеОтбораОстатков(Запрос);
Запрос.Текст = Запрос.Текст =
"ВЫБРАТЬ "ВЫБРАТЬ
| ""205.31"" КАК Счет, | Остатки.Учреждение КАК Учреждение,
| ОстаткиИОбороты.ИФО КАК ИФО, | СУММА(Остатки.СуммаПриход) КАК Поступило,
| СУММА(ОстаткиИОбороты.СуммаНачальныйОстаток) КАК СуммаНачальныйОстаток, | СУММА(Остатки.СуммаРасход) КАК Передано,
| СУММА(ОстаткиИОбороты.СуммаОборотДт) КАК СуммаОборотДт, | СУММА(Остатки.СуммаКонечныйОстаток) КАК Остаток
| СУММА(ОстаткиИОбороты.СуммаОборотКт) КАК СуммаОборотКт,
| СУММА(ОстаткиИОбороты.СуммаКонечныйОстаток) КАК СуммаКонечныйОстаток
|ИЗ |ИЗ
| РегистрБухгалтерии.ЖурналПроводокЕПСБУ.ОстаткиИОбороты( | РегистрНакопления.ПС_ВзаиморасчетыПоРодительскойПлате.ОстаткиИОбороты(
| &НачалоПериода, | &НачалоПериода, &КонецПериода, Авто, , " + УсловиеОтбора + ") КАК Остатки
| &КонецПериода,
| Авто,
| ,
| Счет В ИЕРАРХИИ (&Счет205)) КАК ОстаткиИОбороты
|ГДЕ
| (&ИФО = НЕОПРЕДЕЛЕНО
| ИЛИ ОстаткиИОбороты.ИФО = &ИФО)
|СГРУППИРОВАТЬ ПО |СГРУППИРОВАТЬ ПО
| ОстаткиИОбороты.ИФО | Остатки.Учреждение
| |УПОРЯДОЧИТЬ ПО
|ОБЪЕДИНИТЬ ВСЕ | Остатки.Учреждение";
|
|ВЫБРАТЬ
| ""304.04"",
| ОстаткиИОбороты.ИФО,
| СУММА(ОстаткиИОбороты.СуммаНачальныйОстаток),
| СУММА(ОстаткиИОбороты.СуммаОборотДт),
| СУММА(ОстаткиИОбороты.СуммаОборотКт),
| СУММА(ОстаткиИОбороты.СуммаКонечныйОстаток)
|ИЗ
| РегистрБухгалтерии.ЖурналПроводокЕПСБУ.ОстаткиИОбороты(
| &НачалоПериода,
| &КонецПериода,
| Авто,
| ,
| Счет В ИЕРАРХИИ (&Счет304)) КАК ОстаткиИОбороты
|ГДЕ
| (&ИФО = НЕОПРЕДЕЛЕНО
| ИЛИ ОстаткиИОбороты.ИФО = &ИФО)
|СГРУППИРОВАТЬ ПО
| ОстаткиИОбороты.ИФО";
Счет205 = ПланыСчетов.ЕПСБУ.НайтиПоКоду("205.31"); Запрос.УстановитьПараметр("НачалоПериода", Объект.Период.ДатаНачала);
Счет304 = ПланыСчетов.ЕПСБУ.НайтиПоКоду("304.04"); Запрос.УстановитьПараметр("КонецПериода", Объект.Период.ДатаОкончания);
Если Счет205 = Неопределено ИЛИ Счет304 = Неопределено Тогда
ОбщегоНазначения.СообщитьПользователю(
"Остатки и обороты не рассчитаны: в плане счетов ЕПСБУ не найден счет"
+ " 205.31 и/или 304.04.");
Возврат;
КонецЕсли;
Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
Запрос.УстановитьПараметр("КонецПериода", КонецПериода);
Запрос.УстановитьПараметр("Счет205", Счет205);
Запрос.УстановитьПараметр("Счет304", Счет304);
Запрос.УстановитьПараметр("ИФО", ?(ЗначениеЗаполнено(Объект.ИФО), Объект.ИФО, Неопределено));
Выборка = Запрос.Выполнить().Выбрать(); Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл Пока Выборка.Следующий() Цикл
ЗаполнитьЗначенияСвойств(ТаблицаОстатков.Добавить(), Выборка); Если Выборка.Поступило = 0 И Выборка.Передано = 0 И Выборка.Остаток = 0 Тогда
Продолжить;
КонецЕсли;
ЗаполнитьЗначенияСвойств(ТаблицаОстатковСады.Добавить(), Выборка);
КонецЦикла; КонецЦикла;
КонецПроцедуры КонецПроцедуры
// Заполняет таблицу остатков по детям: поступило в ЦБ, передано в сад и остаток у ЦБ
// по каждому ребёнку и договору.
//
// Параметры:
// Учреждение - CatalogRef.Организации - сад, выбранный в таблице остатков по садам;
// Неопределено - детализация строится по всем садам из отбора формы.
//
&НаСервере
Процедура ЗаполнитьОстаткиПоДетям(Учреждение)
ТаблицаОстатковДети.Очистить();
Запрос = Новый Запрос;
УсловиеОтбора = УсловиеОтбораОстатков(Запрос, Учреждение);
Запрос.Текст =
"ВЫБРАТЬ
| Остатки.Учреждение КАК Учреждение,
| Остатки.ИФО КАК ИФО,
| Остатки.Ребенок КАК Ребенок,
| Остатки.Договор КАК Договор,
| СУММА(Остатки.СуммаПриход) КАК Поступило,
| СУММА(Остатки.СуммаРасход) КАК Передано,
| СУММА(Остатки.СуммаКонечныйОстаток) КАК Остаток
|ИЗ
| РегистрНакопления.ПС_ВзаиморасчетыПоРодительскойПлате.ОстаткиИОбороты(
| &НачалоПериода, &КонецПериода, Авто, , " + УсловиеОтбора + ") КАК Остатки
|СГРУППИРОВАТЬ ПО
| Остатки.Учреждение,
| Остатки.ИФО,
| Остатки.Ребенок,
| Остатки.Договор
|УПОРЯДОЧИТЬ ПО
| Учреждение,
| Ребенок";
Запрос.УстановитьПараметр("НачалоПериода", Объект.Период.ДатаНачала);
Запрос.УстановитьПараметр("КонецПериода", Объект.Период.ДатаОкончания);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.Поступило = 0 И Выборка.Передано = 0 И Выборка.Остаток = 0 Тогда
Продолжить;
КонецЕсли;
ЗаполнитьЗначенияСвойств(ТаблицаОстатковДети.Добавить(), Выборка);
КонецЦикла;
КонецПроцедуры
// Возвращает условие отбора для виртуальной таблицы остатков регистра взаиморасчётов
// и устанавливает соответствующие параметры запроса.
//
// Параметры:
// Запрос - Запрос - запрос, в который добавляются параметры отбора;
// Учреждение - CatalogRef.Организации - сад, по которому строится детализация;
// Неопределено - используется отбор по учреждению из формы.
//
// Возвращаемое значение:
// Строка - условие отбора в терминах полей регистра; "ИСТИНА", если отборов нет.
//
&НаСервере
Функция УсловиеОтбораОстатков(Запрос, Учреждение = Неопределено)
Условия = Новый Массив;
Если ЗначениеЗаполнено(Объект.Организация) Тогда
Запрос.УстановитьПараметр("ОрганизацияОтбор", Объект.Организация);
Условия.Добавить("Организация = &ОрганизацияОтбор");
КонецЕсли;
Если ЗначениеЗаполнено(Объект.ИФО) Тогда
Запрос.УстановитьПараметр("ИФООтбор", Объект.ИФО);
Условия.Добавить("ИФО = &ИФООтбор");
КонецЕсли;
Если НЕ ЗначениеЗаполнено(Учреждение) Тогда
Учреждение = Объект.Учреждение;
КонецЕсли;
Если ЗначениеЗаполнено(Учреждение) Тогда
Запрос.УстановитьПараметр("УчреждениеОтбор", Учреждение);
Условия.Добавить("Учреждение = &УчреждениеОтбор");
КонецЕсли;
Возврат ?(Условия.Количество() = 0, "ИСТИНА", СтрСоединить(Условия, " И "));
КонецФункции
// Заполняет таблицу формы КассовыеПоступления: документы с признаком "Родительская плата" за период // Заполняет таблицу формы КассовыеПоступления: документы с признаком "Родительская плата" за период
// по установленным отборам. // по установленным отборам.
// Колонка "Строк не распознано" показывает строки расшифровки платежа, в которых не определён ребёнок, - // Колонка "Строк не распознано" показывает строки расшифровки платежа, в которых не определён ребёнок, -
@@ -1,24 +1,2 @@
// Обработка ПС_УправлениеРасчетамиПоРодительскойПлате. // Обработка ПС_УправлениеРасчетамиПоРодительскойПлате.
// Логика дашборда реализована в модуле управляемой формы (Forms/Форма/Module.bsl). // Логика дашборда реализована в модуле управляемой формы (Forms/Форма/Module.bsl).
#Область ПрограммныйИнтерфейс
#Если Сервер Или ВнешнееСоединение Или ТолстыйКлиентОбычноеПриложение Тогда
// Обеспечивает наличие в справочнике идентификаторов объектов метаданных записей
// по документам внутреннего ЭДО, созданным в расширении конфигурации.
//
// Возвращаемое значение:
// Соответствие из КлючИЗначение - идентификаторы объектов метаданных по их полным именам:
// * Ключ - Строка - полное имя объекта метаданных, например "Документ.ПС_ПринятиеПоступившихПлатежейИзЦБ";
// * Значение - СправочникСсылка.ИдентификаторыОбъектовМетаданных - идентификатор объекта метаданных.
//
Функция ПС_ИнициализироватьИдентификаторыОбъектовЭДО() Экспорт
Возврат ПС_ИдентификаторыОбъектовЭДО.ПС_ОбеспечитьИдентификаторыДокументовЭДО();
КонецФункции
#КонецЕсли
#КонецОбласти