Внутренний ЭДО извещений 0504805: документы передачи/принятия и настройка ЭДО

- Документы ПС_ПередачаПоступившихПлатежейВУчреждения и ПС_ПринятиеПоступившихПлатежейИзЦБ: адресность (один сад на документ), реквизиты-организации, печатные формы, участие во внутреннем ЭДО.
- Общие модули расширения: ПС_ВнутреннийЭДОИзвещений, ВнутреннийЭДОПереопределяемый, ВнутренниеЭлектронныеДокументыБГУ, ПС_ИдентификаторыОбъектовЭДО.
- Автоматическое аннулирование электронного документа при изменении учетного документа.
- Определяемый тип ОснованиеВнутреннегоЭлектронногоДокумента расширен нашими документами.
- Эксперимент с инициализацией идентификаторов объектов метаданных результата не дал: БСП не поддерживает идентификаторы объектов расширений в неразделенной базе. Решено переходить на типовые извещения (ИзвещениеИсходящее / ИзвещениеВходящее).
- Удален неиспользуемый общий модуль ПС_РаботаСКонтрагентами.
This commit is contained in:
28 changed files with 1048 additions and 506 deletions
@@ -93,10 +93,10 @@
<name>Учреждение</name>
<synonym>
<key>ru</key>
<value>Учреждение-отправитель</value>
<value>Учреждение (сад)</value>
</synonym>
<type>
<types>CatalogRef.Контрагенты</types>
<types>CatalogRef.Организации</types>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
@@ -0,0 +1,33 @@
// ВнутренниеЭлектронныеДокументыБГУ: расширение.
// Дополняет состав документов, обрабатываемых внутренним ЭДО БГУ, документами
// учёта родительской платы: передачей поступивших платежей в учреждение и
// принятием поступивших платежей из ЦБ.
#Область ПрограммныйИнтерфейс
// Определяет, обрабатывается ли учётный документ механизмом внутреннего ЭДО БГУ.
// В типовой список типов БГУ документы расширения не входят, поэтому дополняем результат.
//
// Параметры:
// ТипИсточника - Тип - тип ссылки или объекта учётного документа.
//
// Возвращаемое значение:
// Булево - Истина, если документ обрабатывается внутренним ЭДО БГУ.
//
&Вместо("ЭтоВнутреннийДокументЭДО")
Функция ПС_ЭтоВнутреннийДокументЭДО(ТипИсточника) Экспорт
Результат = ПродолжитьВызов(ТипИсточника);
Если НЕ Результат Тогда
Результат = ТипИсточника = Тип("ДокументСсылка.ПС_ПередачаПоступившихПлатежейВУчреждения")
ИЛИ ТипИсточника = Тип("ДокументОбъект.ПС_ПередачаПоступившихПлатежейВУчреждения")
ИЛИ ТипИсточника = Тип("ДокументСсылка.ПС_ПринятиеПоступившихПлатежейИзЦБ")
ИЛИ ТипИсточника = Тип("ДокументОбъект.ПС_ПринятиеПоступившихПлатежейИзЦБ");
КонецЕсли;
Возврат Результат;
КонецФункции
#КонецОбласти
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" xmlns:mdclassExtension="http://g5.1c.ru/v8/dt/metadata/mdclass/extension" uuid="8c6973cc-f6be-42d6-99cf-46917097ac04" extendedConfigurationObject="54ef65f2-2f6b-4ae4-8604-cce57de8a53e">
<name>ВнутренниеЭлектронныеДокументыБГУ</name>
<objectBelonging>Adopted</objectBelonging>
<extension xsi:type="mdclassExtension:CommonModuleExtension">
<extendedConfigurationObject>Checked</extendedConfigurationObject>
<global>Checked</global>
<clientManagedApplication>Checked</clientManagedApplication>
<server>Checked</server>
<externalConnection>Checked</externalConnection>
<serverCall>Checked</serverCall>
<clientOrdinaryApplication>Checked</clientOrdinaryApplication>
</extension>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>
@@ -0,0 +1,57 @@
// ВнутреннийЭДОПереопределяемый: расширение.
// Адресация электронных извещений по учреждению (саду).
#Область СлужебныеПроцедурыИФункции
// Дополняет параметры нового электронного документа: электронное извещение по передаче
// платежей адресуется учреждению-получателю, а не ЦБ.
//
// Маршрут подписания выбирается по ключу настройки внутреннего ЭДО
// (организация + вид документа + команда печати), поэтому без адресации по саду
// для всех садов получался бы один общий маршрут, и подписать извещение
// руководителем конкретного сада было бы невозможно.
//
// Параметры:
// ПараметрыДокумента - Структура - параметры открытия электронного документа,
// см. ВнутреннийЭДОКлиентСервер.ПараметрыОткрытияЭлектронногоДокумента().
//
&После("ПриЗаполненииПараметровНовогоЭлектронногоДокумента")
Процедура ПС_ПриЗаполненииПараметровНовогоЭлектронногоДокумента(ПараметрыДокумента)
УчетныйДокумент = ПараметрыДокумента.УчетныйДокумент;
Если ТипЗнч(УчетныйДокумент) = Тип("ДокументОбъект.ПС_ПередачаПоступившихПлатежейВУчреждения") Тогда
УчетныйДокумент = УчетныйДокумент.Ссылка;
КонецЕсли;
Если ТипЗнч(УчетныйДокумент) = Тип("ДокументСсылка.ПС_ПередачаПоступившихПлатежейВУчреждения") Тогда
Учреждение = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(УчетныйДокумент, "Учреждение").Учреждение;
Если ЗначениеЗаполнено(Учреждение) Тогда
ПараметрыДокумента.Организация = Учреждение;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
// Дополняет получение организации учётного документа для проверок внутреннего ЭДО,
// в том числе для запрета редактирования формы после завершения подписания:
// для документа передачи организацией считается учреждение-получатель.
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - форма учётного документа.
// Источник - ДокументОбъект - учётный документ.
// Организация - ОпределяемыйТип.Организация - организация учётного документа.
// СтандартнаяОбработка - Булево - Истина, если организация берётся как Источник.Организация.
//
&После("ПриПолученииОрганизацииПоОбъекту")
Процедура ПС_ПриПолученииОрганизацииПоОбъекту(Форма, Источник, Организация, СтандартнаяОбработка)
Если ТипЗнч(Источник) = Тип("ДокументОбъект.ПС_ПередачаПоступившихПлатежейВУчреждения")
И ЗначениеЗаполнено(Источник.Учреждение) Тогда
СтандартнаяОбработка = Ложь;
Организация = Источник.Учреждение;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" xmlns:mdclassExtension="http://g5.1c.ru/v8/dt/metadata/mdclass/extension" uuid="dbe5704a-0b51-4982-9265-411c3291b4d5" extendedConfigurationObject="2e991d62-cba1-4107-a5bf-4a8cc0d01673">
<name>ВнутреннийЭДОПереопределяемый</name>
<objectBelonging>Adopted</objectBelonging>
<extension xsi:type="mdclassExtension:CommonModuleExtension">
<extendedConfigurationObject>Checked</extendedConfigurationObject>
<global>Checked</global>
<clientManagedApplication>Checked</clientManagedApplication>
<server>Checked</server>
<externalConnection>Checked</externalConnection>
<serverCall>Checked</serverCall>
<clientOrdinaryApplication>Checked</clientOrdinaryApplication>
</extension>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>
@@ -0,0 +1,175 @@
#Область ПрограммныйИнтерфейс
// Вызывается из обработчика "ПриЗаписи" модулей объектов извещений внутреннего ЭДО.
// Аннулирует электронные документы, печатная форма которых перестала соответствовать
// данным учётного документа. Штатный перевод подписанного электронного документа
// в неактуальные возможен только из состояния "Аннулирован".
//
// Параметры:
// Источник - ДокументОбъект.ПС_ПередачаПоступившихПлатежейВУчреждения,
// ДокументОбъект.ПС_ПринятиеПоступившихПлатежейИзЦБ - записываемый документ.
// Отказ - Булево - признак отказа от записи документа.
//
Процедура ПС_АннулироватьЭлектронныеДокументыПриИзменении(Источник, Отказ) Экспорт
Ссылка = Источник.Ссылка;
Если Ссылка.Пустая() Тогда
Возврат;
КонецЕсли;
Попытка
ПС_АннулироватьНеактуальныеЭлектронныеДокументы(Ссылка);
Исключение
ЗаписьЖурналаРегистрации(
НСтр("ru = 'Внутренний ЭДО извещений.Аннулирование при изменении документа'"),
УровеньЖурналаРегистрации.Ошибка,
Источник.Метаданные(),
Ссылка,
ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
// Аннулирует актуальные подписанные электронные документы, печатная форма которых
// отличается от печатной формы учётного документа на текущий момент.
//
// Параметры:
// УчетныйДокумент - ДокументСсылка - извещение, данные которого были изменены.
//
Процедура ПС_АннулироватьНеактуальныеЭлектронныеДокументы(УчетныйДокумент)
ЭлектронныеДокументы = ВнутреннийЭДО.ЭлектронныеДокументыАктуальные(УчетныйДокумент);
СостояниеЗавершен = ПредопределенноеЗначение("Перечисление.СостоянияДокументовВнутреннегоЭДО.Завершен");
СостояниеТребуетсяУточнение = ПредопределенноеЗначение("Перечисление.СостоянияДокументовВнутреннегоЭДО.ТребуетсяУточнение");
Для Каждого СтрокаСписка Из ЭлектронныеДокументы Цикл
Если СтрокаСписка.Состояние <> СостояниеЗавершен
И СтрокаСписка.Состояние <> СостояниеТребуетсяУточнение Тогда
Продолжить;
КонецЕсли;
ЭлектронныйДокумент = СтрокаСписка.ЭлектронныйДокумент;
Если НЕ ПС_ПечатнаяФормаОтличаетсяОтПодписанной(
УчетныйДокумент, ЭлектронныйДокумент, СтрокаСписка.ИдентификаторКомандыПечати) Тогда
Продолжить;
КонецЕсли;
ПараметрыАннулирования = Новый Структура;
ПараметрыАннулирования.Вставить("УчетныйДокумент", УчетныйДокумент);
ПараметрыАннулирования.Вставить("ЭлектронныйДокумент", ЭлектронныйДокумент);
ПараметрыАннулирования.Вставить("ВидПодписи", ПС_ВидПодписиТекущегоПользователя(ЭлектронныйДокумент));
ПараметрыАннулирования.Вставить("Комментарий",
НСтр("ru = 'Автоматически аннулирован: изменены данные учётного документа'"));
ВнутреннийЭДО.АннулироватьЭлектронныйДокумент(ПараметрыАннулирования);
КонецЦикла;
КонецПроцедуры
// Определяет, отличается ли сохранённая в электронном документе печатная форма
// от печатной формы учётного документа на текущий момент.
//
// Параметры:
// УчетныйДокумент - ДокументСсылка - извещение.
// ЭлектронныйДокумент - ДокументСсылка.ВнутреннийЭлектронныйДокумент - электронный документ.
// ИдентификаторКомандыПечати - Строка - идентификатор команды печати извещения.
//
// Возвращаемое значение:
// Булево - Истина, если печатные формы различаются.
//
Функция ПС_ПечатнаяФормаОтличаетсяОтПодписанной(
УчетныйДокумент, ЭлектронныйДокумент, ИдентификаторКомандыПечати)
ОсновнойФайл = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ЭлектронныйДокумент, "ОсновнойФайл").ОсновнойФайл;
Если НЕ ЗначениеЗаполнено(ОсновнойФайл) Тогда
Возврат Ложь;
КонецЕсли;
ДвоичныеДанныеСохраненнойФормы = РаботаСФайлами.ДвоичныеДанныеФайла(ОсновнойФайл, Ложь);
Если ДвоичныеДанныеСохраненнойФормы = Неопределено Тогда
Возврат Ложь;
КонецЕсли;
ПараметрыПечати = Новый Структура;
ПараметрыПечати.Вставить("УчетныйДокумент", УчетныйДокумент);
ПараметрыПечати.Вставить("ИдентификаторКомандыПечати", ИдентификаторКомандыПечати);
ВнутреннийЭДОПереопределяемый.ПриПолученииТабличногоДокументаАктуальногоДокумента(ПараметрыПечати);
ТабличныйДокументТекущий = ПС_ТабличныйДокументУчетногоДокумента(ПараметрыПечати);
Если ТабличныйДокументТекущий.ВысотаТаблицы = 0 Тогда
Возврат Ложь;
КонецЕсли;
ТабличныйДокументСохраненный = ВнутреннийЭДО.ТабличныйДокументИзДвоичныхДанныхАрхива(ДвоичныеДанныеСохраненнойФормы);
Возврат НЕ ВнутреннийЭДО.ТабличныеДокументыИдентичны(ТабличныйДокументСохраненный, ТабличныйДокументТекущий);
КонецФункции
// Формирует табличный документ печатной формы учётного документа в привилегированном режиме.
//
// Параметры:
// ПараметрыПечати - Структура - параметры печати: УчетныйДокумент, ИдентификаторКомандыПечати.
//
// Возвращаемое значение:
// ТабличныйДокумент - печатная форма учётного документа.
//
Функция ПС_ТабличныйДокументУчетногоДокумента(ПараметрыПечати)
// Печать учётного документа может обращаться к данным, недоступным пользователю,
// поэтому печатная форма формируется в привилегированном режиме
// с восстановлением исходного значения режима.
ТекущийПривилегированныйРежим = ПривилегированныйРежим();
УстановитьПривилегированныйРежим(Истина);
Попытка
ДвоичныеДанные = ВнутреннийЭДО.ДвоичныеДанныеУчетногоДокумента(ПараметрыПечати);
Исключение
УстановитьПривилегированныйРежим(ТекущийПривилегированныйРежим);
ВызватьИсключение;
КонецПопытки;
УстановитьПривилегированныйРежим(ТекущийПривилегированныйРежим);
Возврат ВнутреннийЭДО.ТабличныйДокументИзДвоичныхДанныхАрхива(ДвоичныеДанные);
КонецФункции
// Возвращает вид подписи текущего пользователя по маршруту электронного документа.
// Если пользователь не является подписантом маршрута, возвращается пустая ссылка -
// аннулирование в этом случае выполняется без отметки строки маршрута.
//
// Параметры:
// ЭлектронныйДокумент - ДокументСсылка.ВнутреннийЭлектронныйДокумент - электронный документ.
//
// Возвращаемое значение:
// ПеречислениеСсылка.ВидыЭлектронныхПодписейБГУ - вид подписи текущего пользователя.
//
Функция ПС_ВидПодписиТекущегоПользователя(ЭлектронныйДокумент)
СоставМаршрута = ВнутреннийЭДО.СоставМаршрутаПодписанияДокумента(ЭлектронныйДокумент);
СтрокиПодписанта = СоставМаршрута.НайтиСтроки(Новый Структура("Подписант", Пользователи.ТекущийПользователь()));
Если СтрокиПодписанта.Количество() > 0 Тогда
Возврат СтрокиПодписанта[0].ВидПодписи;
КонецЕсли;
Возврат ПредопределенноеЗначение("Перечисление.ВидыЭлектронныхПодписейБГУ.ПустаяСсылка");
КонецФункции
#КонецОбласти
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="c575ba64-5d30-4a94-93ca-951ca20211ec">
<name>ПС_РаботаСКонтрагентами</name>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="df60b70c-4101-4771-b92e-bbd114678406">
<name>ПС_ВнутреннийЭДОИзвещений</name>
<synonym>
<key>ru</key>
<value>ПС Работа с контрагентами</value>
<value>ПС_Внутренний ЭДО извещений</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
@@ -0,0 +1,238 @@
#Область ПрограммныйИнтерфейс
// Обеспечивает наличие в справочнике идентификаторов объектов метаданных записей
// по документам внутреннего ЭДО, созданным в расширении конфигурации.
//
// Настройки внутреннего ЭДО ключуются идентификатором объекта метаданных, который библиотека
// заполняет только по объектам основной конфигурации. Записи по документам расширения создаются
// этой процедурой, а если обновление данных справочника пометило их на удаление, восстанавливаются.
//
// Возвращаемое значение:
// Соответствие из КлючИЗначение - идентификаторы объектов метаданных по их полным именам:
// * Ключ - Строка - полное имя объекта метаданных, например "Документ.ПС_ПринятиеПоступившихПлатежейИзЦБ";
// * Значение - СправочникСсылка.ИдентификаторыОбъектовМетаданных - идентификатор объекта метаданных.
//
Функция ПС_ОбеспечитьИдентификаторыДокументовЭДО() Экспорт
ПолныеИменаДокументов = Новый Массив;
ПолныеИменаДокументов.Добавить("Документ.ПС_ПередачаПоступившихПлатежейВУчреждения");
ПолныеИменаДокументов.Добавить("Документ.ПС_ПринятиеПоступившихПлатежейИзЦБ");
СуществующиеЗаписи = ПС_СуществующиеЗаписи(ПолныеИменаДокументов);
Результат = Новый Соответствие;
Для Каждого ПолноеИмя Из ПолныеИменаДокументов Цикл
СуществующаяЗапись = СуществующиеЗаписи.Получить(ПолноеИмя);
Результат.Вставить(ПолноеИмя, ПС_ОбеспечитьИдентификаторОбъекта(ПолноеИмя,
СуществующаяЗапись.Ссылка, СуществующаяЗапись.ТребуетсяВосстановление));
КонецЦикла;
Возврат Результат;
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
// Обеспечивает наличие записи справочника идентификаторов по полному имени объекта метаданных.
//
// Параметры:
// ПолноеИмя - Строка - полное имя объекта метаданных;
// Идентификатор - СправочникСсылка.ИдентификаторыОбъектовМетаданных - найденная запись справочника;
// ТребуетсяВосстановление - Булево - запись помечена на удаление или ее полное имя изменено.
//
// Возвращаемое значение:
// СправочникСсылка.ИдентификаторыОбъектовМетаданных - идентификатор объекта метаданных.
//
Функция ПС_ОбеспечитьИдентификаторОбъекта(ПолноеИмя, Идентификатор, ТребуетсяВосстановление)
Если ЗначениеЗаполнено(Идентификатор) И НЕ ТребуетсяВосстановление Тогда
Возврат Идентификатор;
КонецЕсли;
Если ЗначениеЗаполнено(Идентификатор) Тогда
ЗаписьИдентификатора = Идентификатор.ПолучитьОбъект();
Иначе
ЗаписьИдентификатора = Справочники.ИдентификаторыОбъектовМетаданных.СоздатьЭлемент();
КонецЕсли;
ЗаполнитьЗначенияСвойств(ЗаписьИдентификатора, ПС_СвойстваЗаписиИдентификатора(ПолноеИмя));
// Создание записей справочника предусмотрено только механизмом обновления данных справочника,
// поэтому запись выполняется в режиме загрузки данных.
ЗаписьИдентификатора.ОбменДанными.Загрузка = Истина;
ЗаписьИдентификатора.Записать();
Возврат ЗаписьИдентификатора.Ссылка;
КонецФункции
// Возвращает записи справочника идентификаторов по полным именам объектов метаданных,
// включая записи, испорченные механизмом обновления данных справочника.
//
// Параметры:
// ПолныеИмена - Массив из Строка - полные имена объектов метаданных.
//
// Возвращаемое значение:
// Соответствие из КлючИЗначение - найденные записи по полным именам объектов метаданных:
// * Ключ - Строка - полное имя объекта метаданных;
// * Значение - Структура:
// ** Ссылка - СправочникСсылка.ИдентификаторыОбъектовМетаданных - найденная запись;
// ** ТребуетсяВосстановление - Булево - запись помечена на удаление или ее полное имя изменено.
//
Функция ПС_СуществующиеЗаписи(ПолныеИмена)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ИдентификаторыОбъектовМетаданных.Ссылка КАК Ссылка,
| ИдентификаторыОбъектовМетаданных.ПолноеИмя КАК ПолноеИмя,
| ИдентификаторыОбъектовМетаданных.ПометкаУдаления КАК ПометкаУдаления
|ИЗ
| Справочник.ИдентификаторыОбъектовМетаданных КАК ИдентификаторыОбъектовМетаданных
|ГДЕ
| ИдентификаторыОбъектовМетаданных.ПолноеИмя В (&ПолныеИмена)
| ИЛИ ИдентификаторыОбъектовМетаданных.ПолноеИмя ПОДОБНО &ШаблонИзмененногоИмени
|УПОРЯДОЧИТЬ ПО
| ИдентификаторыОбъектовМетаданных.ПометкаУдаления,
| ИдентификаторыОбъектовМетаданных.ПолноеИмя";
Запрос.УстановитьПараметр("ПолныеИмена", ПолныеИмена);
Запрос.УстановитьПараметр("ШаблонИзмененногоИмени", "?%");
Результат = Новый Соответствие;
Для Каждого ПолноеИмя Из ПолныеИмена Цикл
Запись = Новый Структура("Ссылка, ТребуетсяВосстановление",
Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка(), Ложь);
Результат.Вставить(ПолноеИмя, Запись);
КонецЦикла;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Запись = Результат.Получить(Выборка.ПолноеИмя);
Если Запись <> Неопределено И НЕ Выборка.ПометкаУдаления Тогда
Запись.Ссылка = Выборка.Ссылка;
Запись.ТребуетсяВосстановление = Ложь;
Продолжить;
КонецЕсли;
Если НЕ Выборка.ПометкаУдаления Тогда
Продолжить;
КонецЕсли;
ПС_ОтметитьИзмененнуюЗапись(Результат, Выборка);
КонецЦикла;
Возврат Результат;
КонецФункции
// Отмечает запись справочника идентификаторов как испорченную механизмом обновления данных справочника.
//
// Параметры:
// Результат - Соответствие из КлючИЗначение - см. ПС_СуществующиеЗаписи;
// Выборка - ВыборкаИзРезультатаЗапроса - запись справочника, помеченная на удаление.
//
Процедура ПС_ОтметитьИзмененнуюЗапись(Результат, Выборка)
Для Каждого КлючИЗначение Из Результат Цикл
Запись = КлючИЗначение.Значение;
Если ЗначениеЗаполнено(Запись.Ссылка)
ИЛИ СтрНайти(Выборка.ПолноеИмя, КлючИЗначение.Ключ) = 0 Тогда
Продолжить;
КонецЕсли;
Запись.Ссылка = Выборка.Ссылка;
Запись.ТребуетсяВосстановление = Истина;
Возврат;
КонецЦикла;
КонецПроцедуры
// Возвращает значения реквизитов записи справочника идентификаторов объектов метаданных.
//
// Параметры:
// ПолноеИмя - Строка - полное имя объекта метаданных, например "Документ.ПС_ПринятиеПоступившихПлатежейИзЦБ".
//
// Возвращаемое значение:
// Структура - значения реквизитов записи:
// * Наименование - Строка - представление идентификатора объекта метаданных;
// * Имя - Строка - имя объекта метаданных;
// * Синоним - Строка - синоним объекта метаданных;
// * ПолныйСиноним - Строка - полный синоним объекта метаданных;
// * ПолноеИмя - Строка - полное имя объекта метаданных;
// * Родитель - СправочникСсылка.ИдентификаторыОбъектовМетаданных - группа коллекции;
// * ПорядокКоллекции - Число - порядок коллекции объектов метаданных;
// * БезДанных - Булево - Ложь;
// * ЗначениеПустойСсылки - Произвольный - пустая ссылка объекта метаданных;
// * КлючОбъектаМетаданных - ХранилищеЗначения - ключ объекта метаданных;
// * ИмяПредопределенныхДанных - Строка - пустая строка;
// * ПометкаУдаления - Булево - Ложь.
//
Функция ПС_СвойстваЗаписиИдентификатора(ПолноеИмя)
ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПолноеИмя);
ПозицияТочки = СтрНайти(ПолноеИмя, ".");
ИмяБазовогоТипа = Лев(ПолноеИмя, ПозицияТочки - 1);
ИмяТипаСсылки = ИмяБазовогоТипа + "Ссылка." + ОбъектМетаданных.Имя;
ОписаниеТипаСсылки = Новый ОписаниеТипов(ИмяТипаСсылки);
Синоним = ?(ЗначениеЗаполнено(ОбъектМетаданных.Синоним), ОбъектМетаданных.Синоним, ОбъектМетаданных.Имя);
СвойстваКоллекции = ПС_СвойстваКоллекцииОбъектовМетаданных(ИмяБазовогоТипа);
Свойства = Новый Структура;
Свойства.Вставить("Наименование", Синоним + " (" + СвойстваКоллекции.СинонимВЕдЧисле + ")");
Свойства.Вставить("Имя", ОбъектМетаданных.Имя);
Свойства.Вставить("Синоним", Синоним);
Свойства.Вставить("ПолныйСиноним", СвойстваКоллекции.СинонимВЕдЧисле + ". " + Синоним);
Свойства.Вставить("ПолноеИмя", ОбъектМетаданных.ПолноеИмя());
Свойства.Вставить("Родитель",
Справочники.ИдентификаторыОбъектовМетаданных.ПолучитьСсылку(СвойстваКоллекции.Идентификатор));
Свойства.Вставить("ПорядокКоллекции", Число(СвойстваКоллекции.ПорядокКоллекции));
Свойства.Вставить("БезДанных", Ложь);
Свойства.Вставить("ЗначениеПустойСсылки", ОписаниеТипаСсылки.ПривестиЗначение(Неопределено));
Свойства.Вставить("КлючОбъектаМетаданных", Новый ХранилищеЗначения(Тип(ИмяТипаСсылки)));
Свойства.Вставить("ИмяПредопределенныхДанных", "");
Свойства.Вставить("ПометкаУдаления", Ложь);
Возврат Свойства;
КонецФункции
// Возвращает свойства коллекции объектов метаданных по имени базового типа.
//
// Параметры:
// ИмяБазовогоТипа - Строка - имя базового типа объектов метаданных, например "Документ".
//
// Возвращаемое значение:
// СтрокаТаблицыЗначений - свойства коллекции объектов метаданных.
//
Функция ПС_СвойстваКоллекцииОбъектовМетаданных(ИмяБазовогоТипа)
СвойстваКоллекций = СтандартныеПодсистемыПовтИсп.СвойстваКоллекцийОбъектовМетаданных(Ложь);
Отбор = Новый Структура("ИмяВЕдЧисле", ИмяБазовогоТипа);
НайденныеСвойства = СвойстваКоллекций.НайтиСтроки(Отбор);
Если НайденныеСвойства.Количество() = 0 Тогда
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не найдены свойства коллекции объектов метаданных ""%1"".'"),
ИмяБазовогоТипа);
КонецЕсли;
Возврат НайденныеСвойства[0];
КонецФункции
#КонецОбласти
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="de71a510-c5c2-4312-ad87-8b2cc47a4c2c">
<name>ПС_ИдентификаторыОбъектовЭДО</name>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>
@@ -1,172 +0,0 @@
// Поиск контрагента, соответствующего организации, по ИНН.
//
// Универсальная функция для обоих документов (Передача задолженности в ЦБ
// и Принятие задолженности от учреждения). Реквизиты ЦБ и УчреждениеОтправитель
// имеют тип CatalogRef.Контрагенты, а в связанных документах-основаниях
// соответствующие организации имеют тип CatalogRef.Организации. Чтобы
// обеспечить соответствие, ищем элемент справочника Контрагенты с тем же ИНН.
//
// Параметры:
// Организация - CatalogRef.Организации - организация, для которой ищем контрагента.
// ИмяПоляПодсказки - Строка - имя реквизита формы/документа, которое остаётся
// незаполненным (для сообщения пользователю). Например,
// "ЦБ (получатель)" или "Учреждение-отправитель".
//
// Возвращаемое значение:
// CatalogRef.Контрагенты - если найден ровно один контрагент с ИНН организации.
// Пустая ссылка - в остальных случаях (организация не заполнена / нет ИНН / нет
// контрагента / найдено несколько). При этом пользователю
// выводится сообщение с описанием причины.
//
#Область ПрограммныйИнтерфейс
Функция КонтрагентПоОрганизации(Организация, ИмяПоляПодсказки = "") Экспорт
ПустойКонтрагент = Справочники.Контрагенты.ПустаяСсылка();
Подсказка = ?(ПустаяСтрока(ИмяПоляПодсказки), "Контрагент",
"Поле """ + ИмяПоляПодсказки + """");
Если НЕ ЗначениеЗаполнено(Организация) Тогда
ТекстСообщения = "Не указана организация для поиска контрагента.|"
+ Подсказка + " не заполнен - выберите контрагента вручную.";
СообщениеПользователю = Новый СообщениеПользователю;
СообщениеПользователю.Текст = ТекстСообщения;
СообщениеПользователю.Сообщить();
Возврат ПустойКонтрагент;
КонецЕсли;
ИНН = Организация.ИНН;
Если НЕ ЗначениеЗаполнено(ИНН) Тогда
Представление = Строка(Организация);
ТекстСообщения = "У организации (" + Представление + ") не заполнен ИНН.|"
+ Подсказка + " не заполнен - выберите контрагента вручную.";
СообщениеПользователю = Новый СообщениеПользователю;
СообщениеПользователю.Текст = ТекстСообщения;
СообщениеПользователю.Сообщить();
Возврат ПустойКонтрагент;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Контрагенты.Ссылка КАК Ссылка
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| Контрагенты.ИНН = &ИНН
| И НЕ Контрагенты.ПометкаУдаления";
Запрос.УстановитьПараметр("ИНН", ИНН);
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
Представление = Строка(Организация);
ТекстСообщения = "Контрагент с ИНН " + ИНН + " (организация: " + Представление + ") не найден.|"
+ Подсказка + " не заполнен - выберите контрагента вручную.";
СообщениеПользователю = Новый СообщениеПользователю;
СообщениеПользователю.Текст = ТекстСообщения;
СообщениеПользователю.Сообщить();
Возврат ПустойКонтрагент;
КонецЕсли;
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();
ПервыйНайденный = Выборка.Ссылка;
Если Выборка.Следующий() Тогда
Представление = Строка(Организация);
ТекстСообщения = "Найдено несколько контрагентов с ИНН " + ИНН + " (организация: " + Представление + ").|"
+ Подсказка + " не заполнен - выберите контрагента вручную.";
СообщениеПользователю = Новый СообщениеПользователю;
СообщениеПользователю.Текст = ТекстСообщения;
СообщениеПользователю.Сообщить();
Возврат ПустойКонтрагент;
КонецЕсли;
Возврат ПервыйНайденный;
КонецФункции
// Обёртка для документов учёта родительской платы: возвращает контрагента ЦБ
// по константе ОрганизацияЦентрализованнаяБухгалтерия.
//
// Параметры:
// ИмяПоляПодсказки - Строка - имя реквизита формы/документа для сообщения.
//
// Возвращаемое значение:
// CatalogRef.Контрагенты - контрагент, соответствующий организации ЦБ,
// либо пустая ссылка (с сообщением пользователю).
//
Функция КонтрагентЦБПоУмолчанию(ИмяПоляПодсказки = "ЦБ (получатель)") Экспорт
ОрганизацияЦБ = Константы.ОрганизацияЦентрализованнаяБухгалтерия.Получить();
Возврат КонтрагентПоОрганизации(ОрганизацияЦБ, ИмяПоляПодсказки);
КонецФункции
// Поиск организации, соответствующей контрагенту, по ИНН.
//
// Операция, обратная КонтрагентПоОрганизации. В документах начисления и передачи
// учреждение (сад) представлено ссылкой на справочник Организации, а в документах
// принятия, в регистре взаиморасчётов и в отборах пульта управления - ссылкой на
// справочник Контрагенты. Сопоставление выполняется по ИНН.
//
// Параметры:
// Контрагент - CatalogRef.Контрагенты - контрагент, для которого ищем организацию.
// ИмяПоляПодсказки - Строка - имя реквизита для сообщения пользователю.
//
// Возвращаемое значение:
// CatalogRef.Организации - если найдена ровно одна организация с ИНН контрагента.
// Пустая ссылка - в остальных случаях (нет ИНН / нет организации / найдено несколько).
// Причина выводится пользователю.
//
Функция ОрганизацияПоКонтрагенту(Контрагент, ИмяПоляПодсказки = "") Экспорт
ПустаяОрганизация = Справочники.Организации.ПустаяСсылка();
Если НЕ ЗначениеЗаполнено(Контрагент) Тогда
Возврат ПустаяОрганизация;
КонецЕсли;
Подсказка = ?(ПустаяСтрока(ИмяПоляПодсказки), "Организация",
"Поле """ + ИмяПоляПодсказки + """");
// Сопоставление выполняем запросом по ИНН: прямое чтение реквизита заимствованного
// справочника Контрагенты в расширении не разбирается анализатором.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Организации.Ссылка КАК Ссылка
|ИЗ
| Справочник.Организации КАК Организации
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
| ПО Контрагенты.ИНН = Организации.ИНН
|ГДЕ
| Контрагенты.Ссылка = &Контрагент
| И НЕ Организации.ПометкаУдаления";
Запрос.УстановитьПараметр("Контрагент", Контрагент);
Представление = Строка(Контрагент);
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
ОбщегоНазначения.СообщитьПользователю(
"Не найдена организация с тем же ИНН, что у контрагента (" + Представление + ").|"
+ Подсказка + " не определена - отбор по учреждению не применён.");
Возврат ПустаяОрганизация;
КонецЕсли;
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();
ПервыйНайденный = Выборка.Ссылка;
Если Выборка.Следующий() Тогда
ОбщегоНазначения.СообщитьПользователю(
"Найдено несколько организаций с тем же ИНН, что у контрагента (" + Представление + ").|"
+ Подсказка + " не определена - отбор по учреждению не применён.");
Возврат ПустаяОрганизация;
КонецЕсли;
Возврат ПервыйНайденный;
КонецФункции
#КонецОбласти
@@ -1,3 +1,4 @@
ПС_ИдентификаторыОбъектовЭДО.ПС_ОбеспечитьИдентификаторыДокументовЭДО();
// ПС_РазборПлатежейПоРодительскойПлате: идентификация ребёнка и его контрагента по назначению платежа
// в строках табличной части "Расшифровка платежа" документа КассовоеПоступление (БГУ 2.0).
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
@@ -113,8 +113,8 @@
Иначе
// ЦБ передаёт поступившие платежи: печатается сторона отправителя,
// отдельное извещение на каждое учреждение документа.
// ЦБ передаёт поступившие платежи: печатается сторона отправителя.
// Документ адресный, поэтому извещение одно - по учреждению документа.
ТабличныйДокумент.КлючПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ПС_ПередачаПоступившихПлатежейВУчреждения_Извещение0504805";
Макет = Документы.ПС_ПередачаПоступившихПлатежейВУчреждения.ПолучитьМакет("ПФ_MXL_Извещение0504805_103н_ПС_РП_Получатель");
Если Макет = Неопределено Тогда
@@ -123,30 +123,19 @@
Возврат ТабличныйДокумент;
КонецЕсли;
Учреждения = УчрежденияДокументаПередачи(ДокументОбъект);
Если Учреждения.Количество() = 0 Тогда
Если НЕ ЗначениеЗаполнено(ДокументОбъект.Учреждение) Тогда
ОбщегоНазначения.СообщитьПользователю(
"Печатная форма извещения не сформирована: в табличной части ""Задолженность"""
+ " не заполнены учреждения.");
"Печатная форма извещения не сформирована: не заполнено учреждение (получатель).");
Возврат ТабличныйДокумент;
КонецЕсли;
Для Каждого Учреждение Из Учреждения Цикл
ПараметрыИзвещения = НоваяСтруктураИзвещения("Отправитель", ДокументОбъект.Организация,
ДокументОбъект.Учреждение,
"Передача поступивших платежей по родительской плате за "
+ Формат(ДокументОбъект.Период, "ДФ=MMMM yyyy")
+ ". Основание: " + Строка(ДокументСсылка) + ".");
ПроводкиУчреждения = ПроводкиПоУчреждению(Проводки, Учреждение);
Если ПроводкиУчреждения.Количество() = 0 Тогда
Продолжить;
КонецЕсли;
ПараметрыИзвещения = НоваяСтруктураИзвещения("Отправитель", ДокументОбъект.Организация,
Учреждение,
"Передача поступивших платежей по родительской плате за "
+ Формат(ДокументОбъект.Период, "ДФ=MMMM yyyy")
+ ". Основание: " + Строка(ДокументСсылка) + ".");
ВывестиИзвещение(ТабличныйДокумент, Макет, ДокументСсылка, ДокументОбъект, ПараметрыИзвещения, ПроводкиУчреждения);
КонецЦикла;
ВывестиИзвещение(ТабличныйДокумент, Макет, ДокументСсылка, ДокументОбъект, ПараметрыИзвещения, Проводки);
КонецЕсли;
@@ -239,64 +228,6 @@
КонецПроцедуры
// Возвращает список учреждений, присутствующих в табличной части "Задолженность" документа передачи.
//
// Параметры:
// ДокументОбъект - ДокументОбъект.ПС_ПередачаПоступившихПлатежейВУчреждения - документ передачи платежей.
//
// Возвращаемое значение:
// Массив из СправочникСсылка.Контрагенты - уникальные учреждения в порядке появления в табличной части.
//
Функция УчрежденияДокументаПередачи(ДокументОбъект)
Учреждения = Новый Массив;
Для Каждого СтрокаЗадолженности Из ДокументОбъект.Задолженность Цикл
Если НЕ ЗначениеЗаполнено(СтрокаЗадолженности.Учреждение) Тогда
Продолжить;
КонецЕсли;
Если Учреждения.Найти(СтрокаЗадолженности.Учреждение) = Неопределено Тогда
Учреждения.Добавить(СтрокаЗадолженности.Учреждение);
КонецЕсли;
КонецЦикла;
Возврат Учреждения;
КонецФункции
// Возвращает проводки документа, относящиеся к указанному учреждению.
//
// Учреждение определяется по субконто кредита счёта расчётов (304.04), поэтому проверяются
// все позиции субконто.
//
// Параметры:
// Проводки - ТаблицаЗначений - проводки документа, см. ПроводкиИзвещения.
// Учреждение - СправочникСсылка.Контрагенты - учреждение, по которому отбираются проводки.
//
// Возвращаемое значение:
// ТаблицаЗначений - проводки указанного учреждения, колонки как у Проводки.
//
Функция ПроводкиПоУчреждению(Проводки, Учреждение)
Результат = Проводки.Скопировать();
СтрокиДляУдаления = Новый Массив;
Для Каждого Проводка Из Результат Цикл
Если Проводка.СубконтоКт1 = Учреждение
ИЛИ Проводка.СубконтоКт2 = Учреждение
ИЛИ Проводка.СубконтоКт3 = Учреждение Тогда
Продолжить;
КонецЕсли;
СтрокиДляУдаления.Добавить(Проводка);
КонецЦикла;
Для Каждого Проводка Из СтрокиДляУдаления Цикл
Результат.Удалить(Проводка);
КонецЦикла;
Возврат Результат;
КонецФункции
// Заполняет реквизиты стороны извещения (отправителя или получателя) для области "Заголовок".
//
// Параметры:
@@ -22,7 +22,7 @@
<containedObjects classId="fb282519-d103-4dd3-bc12-cb271d631dfc" objectId="2a75145f-4786-484a-b6f5-49ea8d2e6064"/>
<keepMappingToExtendedConfigurationObjectsByIDs>true</keepMappingToExtendedConfigurationObjectsByIDs>
<namePrefix>ПС_</namePrefix>
<configurationExtensionCompatibilityMode>8.3.14</configurationExtensionCompatibilityMode>
<configurationExtensionCompatibilityMode>8.3.24</configurationExtensionCompatibilityMode>
<configurationExtensionPurpose>Customization</configurationExtensionPurpose>
<defaultRunMode>ManagedApplication</defaultRunMode>
<usePurposes>PersonalComputer</usePurposes>
@@ -53,11 +53,15 @@
<commonPictures>CommonPicture.Сумма</commonPictures>
<roles>Role.ПС_ОсновнаяРоль</roles>
<roles>Role.БазовыеПраваБГУ</roles>
<commonModules>CommonModule.ПС_РаботаСКонтрагентами</commonModules>
<commonModules>CommonModule.ПС_УчетРодительскойПлаты</commonModules>
<commonModules>CommonModule.ПС_РазборПлатежейПоРодительскойПлате</commonModules>
<commonModules>CommonModule.ВариантыОтчетовПереопределяемый</commonModules>
<commonModules>CommonModule.ВнутренниеЭлектронныеДокументыБГУ</commonModules>
<commonModules>CommonModule.ВнутреннийЭДОПереопределяемый</commonModules>
<commonModules>CommonModule.ПС_ВнутреннийЭДОИзвещений</commonModules>
<commonModules>CommonModule.ПС_ИдентификаторыОбъектовЭДО</commonModules>
<settingsStorages>SettingsStorage.ХранилищеВариантовОтчетов</settingsStorages>
<definedTypes>DefinedType.ОснованиеВнутреннегоЭлектронногоДокумента</definedTypes>
<commonForms>CommonForm.УстановкаСтатусаПлатежноРасчетногоДокумента</commonForms>
<catalogs>Catalog.Контрагенты</catalogs>
<catalogs>Catalog.Договоры</catalogs>
@@ -245,6 +245,37 @@
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<items xsi:type="form:Button">
<name>КнопкаИнициализироватьИдентификаторыЭДО</name>
<id>529</id>
<title>
<key>ru</key>
<value>Инициализировать идентификаторы ЭДО</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<extendedTooltip>
<name>ИнициализироватьИдентификаторыЭДОРасширеннаяПодсказка</name>
<id>530</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<type>UsualButton</type>
<commandName>Form.Command.ИнициализироватьИдентификаторыЭДО</commandName>
<buttonImportance>Normal</buttonImportance>
<representation>Auto</representation>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<placementArea>UserCmds</placementArea>
<representationInContextMenu>Auto</representationInContextMenu>
</items>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
@@ -473,6 +504,51 @@
<textSize>Normal</textSize>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>ТаблицаДокументыПередачиУчреждение</name>
<id>526</id>
<title>
<key>ru</key>
<value>Учреждение (сад)</value>
</title>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>ДокументыПередачи.Учреждение</segments>
</dataPath>
<extendedTooltip>
<name>ТаблицаДокументыПередачиТаблицаДокументыПередачиУчреждениеРасширеннаяПодсказка</name>
<id>528</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ТаблицаДокументыПередачиТаблицаДокументыПередачиУчреждениеКонтекстноеМеню</name>
<id>527</id>
<autoFill>true</autoFill>
</contextMenu>
<type>InputField</type>
<editMode>Auto</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:InputFieldExtInfo">
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<wrap>true</wrap>
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
<textSize>Normal</textSize>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>ТаблицаДокументыПередачиСуммаДокумента</name>
<id>379</id>
@@ -1197,7 +1273,6 @@
<autoMaxHeight>true</autoMaxHeight>
<wrap>true</wrap>
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
<textSize>Normal</textSize>
</extInfo>
@@ -3735,6 +3810,23 @@
<common>true</common>
</edit>
</columns>
<columns>
<name>Учреждение</name>
<title>
<key>ru</key>
<value>Учреждение (сад)</value>
</title>
<id>67</id>
<valueType>
<types>CatalogRef.Организации</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</columns>
</attributes>
<attributes>
<name>ДокументыПринятия</name>
@@ -3826,23 +3918,6 @@
<common>true</common>
</edit>
</columns>
<columns>
<name>Учреждение</name>
<title>
<key>ru</key>
<value>Учреждение</value>
</title>
<id>28</id>
<valueType>
<types>CatalogRef.Контрагенты</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</columns>
<columns>
<name>ИФО</name>
<title>
@@ -3935,23 +4010,6 @@
<common>true</common>
</edit>
</columns>
<columns>
<name>ПередачаСальдо</name>
<title>
<key>ru</key>
<value>Начальное сальдо</value>
</title>
<id>54</id>
<valueType>
<types>Boolean</types>
</valueType>
<view>
<common>true</common>
</view>
<edit>
<common>true</common>
</edit>
</columns>
<columns>
<name>ЦБ</name>
<title>
@@ -3960,7 +4018,7 @@
</title>
<id>65</id>
<valueType>
<types>CatalogRef.Контрагенты</types>
<types>CatalogRef.Организации</types>
</valueType>
<view>
<common>true</common>
@@ -4225,7 +4283,7 @@
</title>
<id>47</id>
<valueType>
<types>CatalogRef.Контрагенты</types>
<types>CatalogRef.Организации</types>
</valueType>
<view>
<common>true</common>
@@ -4548,6 +4606,22 @@
</handler>
</action>
</formCommands>
<formCommands>
<name>ИнициализироватьИдентификаторыЭДО</name>
<title>
<key>ru</key>
<value>Инициализировать идентификаторы ЭДО</value>
</title>
<id>4</id>
<use>
<common>true</common>
</use>
<action xsi:type="form:FormCommandHandlerContainer">
<handler>
<name>ИнициализироватьИдентификаторыЭДО</name>
</handler>
</action>
</formCommands>
<commandInterface>
<navigationPanel/>
<commandBar/>
@@ -85,6 +85,18 @@
КонецПроцедуры
// Обеспечивает наличие идентификаторов объектов метаданных по документам внутреннего ЭДО.
//
// Команда нужна для разовой проверки механизма внутреннего ЭДО БГУ: без идентификаторов
// документы расширения не попадают в настройки внутреннего ЭДО (см. ПС_ИдентификаторыОбъектовЭДО).
//
&НаКлиенте
Процедура ИнициализироватьИдентификаторыЭДО(Команда)
ИнициализироватьИдентификаторыЭДОНаСервере();
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
@@ -101,58 +113,52 @@
КонецЕсли;
Отборы = ОтборыДокументовНаСервере();
Если Отборы = Неопределено Тогда
ОчиститьТаблицы();
Возврат;
КонецЕсли;
ЗаполнитьНачисления(Отборы.СадОрганизация);
ЗаполнитьДокументыПередачи(Отборы.ЦБОрганизация, Отборы.СадКонтрагент);
ЗаполнитьДокументыПринятия(Отборы.ЦБКонтрагент, Отборы.СадОрганизация);
ЗаполнитьСверку(Отборы.ЦБОрганизация, Отборы.СадКонтрагент);
ЗаполнитьДокументыПередачи(Отборы.ЦБОрганизация, Отборы.СадОрганизация);
ЗаполнитьДокументыПринятия(Отборы.ЦБОрганизация, Отборы.СадОрганизация);
ЗаполнитьСверку(Отборы.ЦБОрганизация, Отборы.СадОрганизация);
ЗаполнитьТаблицуОстатков();
ЗаполнитьКассовыеПоступления();
КонецПроцедуры
// Приводит отборы формы (ЦБ и учреждение) к значениям, в терминах которых они хранятся
// в документах.
// Обеспечивает наличие идентификаторов объектов метаданных по документам внутреннего ЭДО
// и выводит пользователю результат проверки.
//
// Отборы формы заданы в терминах ЦБ: Организация - это ЦБ (справочник Организации),
// Учреждение - сад (справочник Контрагенты). В документах те же стороны хранятся
// по-разному: документ передачи платежей хранит ЦБ как Организацию, а сад - как
// Контрагента в табличной части "Задолженность"; документ принятия - наоборот.
// Приводим значения отбора к типам, которые есть в документах, сопоставлением по ИНН.
&НаСервере
Процедура ИнициализироватьИдентификаторыЭДОНаСервере()
ОбъектОбработки = РеквизитФормыВЗначение("Объект");
Идентификаторы = ОбъектОбработки.ПС_ИнициализироватьИдентификаторыОбъектовЭДО();
ТекстыИдентификаторов = Новый Массив;
Для Каждого КлючИЗначение Из Идентификаторы Цикл
ТекстыИдентификаторов.Добавить(КлючИЗначение.Ключ + " -> " + Строка(КлючИЗначение.Значение));
КонецЦикла;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Идентификаторы объектов метаданных внутреннего ЭДО: "
+ СтрСоединить(ТекстыИдентификаторов, "; ");
Сообщение.Сообщить();
КонецПроцедуры
// Возвращает отборы формы в терминах, в которых они хранятся в документах.
//
// ЦБ и учреждение (сад) хранятся в документах передачи и принятия организациями,
// поэтому значения отборов передаются в запросы как есть.
//
// Возвращаемое значение:
// Структура - отборы документов: ЦБОрганизация, ЦБКонтрагент, СадОрганизация,
// СадКонтрагент. Неопределено - отбор не удалось сопоставить с данными
// документов (причина уже выведена пользователю).
// Структура - отборы документов: ЦБОрганизация, СадОрганизация.
//
&НаСервере
Функция ОтборыДокументовНаСервере()
Отборы = Новый Структура;
Отборы.Вставить("ЦБОрганизация");
Отборы.Вставить("ЦБКонтрагент");
Отборы.Вставить("СадОрганизация");
Отборы.Вставить("СадКонтрагент");
Если ЗначениеЗаполнено(Объект.Организация) Тогда
Отборы.ЦБОрганизация = Объект.Организация;
Отборы.ЦБКонтрагент = ПС_РаботаСКонтрагентами.КонтрагентПоОрганизации(Объект.Организация, "Организация (ЦБ)");
Если НЕ ЗначениеЗаполнено(Отборы.ЦБКонтрагент) Тогда
Возврат Неопределено;
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(Объект.Учреждение) Тогда
Отборы.СадКонтрагент = Объект.Учреждение;
Отборы.СадОрганизация = ПС_РаботаСКонтрагентами.ОрганизацияПоКонтрагенту(Объект.Учреждение, "Учреждение (сад)");
Если НЕ ЗначениеЗаполнено(Отборы.СадОрганизация) Тогда
Возврат Неопределено;
КонецЕсли;
КонецЕсли;
Отборы.Вставить("ЦБОрганизация", ?(ЗначениеЗаполнено(Объект.Организация), Объект.Организация, Неопределено));
Отборы.Вставить("СадОрганизация", ?(ЗначениеЗаполнено(Объект.Учреждение), Объект.Учреждение, Неопределено));
Возврат Отборы;
@@ -224,23 +230,24 @@
// Таблица показывает документы передачи поступивших платежей в учреждения (документ ЦБ).
//
// Параметры:
// ЦБОрганизация - CatalogRef.Организации - ЦБ в виде организации (документ передачи
// хранит ЦБ в реквизите "Организация"); Неопределено - отбор не задан.
// СадКонтрагент - CatalogRef.Контрагенты - учреждение (сад) в табличной части
// "Задолженность"; Неопределено - отбор по учреждению не задан.
// ЦБОрганизация - CatalogRef.Организации - ЦБ (документ передачи хранит ЦБ
// в реквизите "Организация"); Неопределено - отбор не задан.
// СадОрганизация - CatalogRef.Организации - учреждение (сад) в реквизите
// "Учреждение"; Неопределено - отбор по учреждению не задан.
//
&НаСервере
Процедура ЗаполнитьДокументыПередачи(ЦБОрганизация, СадКонтрагент)
Процедура ЗаполнитьДокументыПередачи(ЦБОрганизация, СадОрганизация)
ДокументыПередачи.Очистить();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
"ВЫБРАТЬ
| Документы.Ссылка КАК Ссылка,
| Документы.Дата КАК Дата,
| Документы.Номер КАК Номер,
| Документы.Организация КАК Организация,
| Документы.Учреждение КАК Учреждение,
| Документы.ИФО КАК ИФО,
| Документы.Период КАК Период,
| Документы.СуммаДокумента КАК СуммаДокумента,
@@ -248,15 +255,13 @@
| Документы.ПометкаУдаления КАК ПометкаУдаления
|ИЗ
| Документ.ПС_ПередачаПоступившихПлатежейВУчреждения КАК Документы
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПС_ПередачаПоступившихПлатежейВУчреждения.Задолженность КАК Строки
| ПО Документы.Ссылка = Строки.Ссылка
|ГДЕ
| Документы.Период >= &НачалоПериода
| И Документы.Период <= &КонецПериода
| И (&ЦБОрганизация = НЕОПРЕДЕЛЕНО
| ИЛИ Документы.Организация = &ЦБОрганизация)
| И (&СадКонтрагент = НЕОПРЕДЕЛЕНО
| ИЛИ Строки.Учреждение = &СадКонтрагент)
| И (&СадОрганизация = НЕОПРЕДЕЛЕНО
| ИЛИ Документы.Учреждение = &СадОрганизация)
| И (&ИФО = НЕОПРЕДЕЛЕНО
| ИЛИ Документы.ИФО = &ИФО)
|УПОРЯДОЧИТЬ ПО
@@ -265,7 +270,7 @@
Запрос.УстановитьПараметр("НачалоПериода", Объект.Период.ДатаНачала);
Запрос.УстановитьПараметр("КонецПериода", Объект.Период.ДатаОкончания);
Запрос.УстановитьПараметр("ЦБОрганизация", ЦБОрганизация);
Запрос.УстановитьПараметр("СадКонтрагент", СадКонтрагент);
Запрос.УстановитьПараметр("СадОрганизация", СадОрганизация);
Запрос.УстановитьПараметр("ИФО", ?(ЗначениеЗаполнено(Объект.ИФО), Объект.ИФО, Неопределено));
Выборка = Запрос.Выполнить().Выбрать();
@@ -279,16 +284,15 @@
// Таблица показывает документы принятия поступивших платежей из ЦБ (документ учреждения).
//
// Параметры:
// ЦБКонтрагент - CatalogRef.Контрагенты - ЦБ в виде контрагента (документ принятия
// хранит ЦБ в реквизите "ЦБ"); Неопределено - отбор не задан.
// СадОрганизация - CatalogRef.Организации - учреждение (сад) в виде организации
// (документ принятия хранит сад в реквизите "Организация");
// ЦБОрганизация - CatalogRef.Организации - ЦБ (документ принятия хранит ЦБ
// в реквизите "ЦБ"); Неопределено - отбор не задан.
// СадОрганизация - CatalogRef.Организации - учреждение (сад) в реквизите "Организация";
// Неопределено - отбор по учреждению не задан.
// ДокументПередачи - ДокументСсылка.ПС_ПередачаПоступившихПлатежейВУчреждения - документ
// передачи, по которому отбираются принятия; Неопределено - отбор не задан.
//
&НаСервере
Процедура ЗаполнитьДокументыПринятия(ЦБКонтрагент, СадОрганизация, ДокументПередачи = Неопределено)
Процедура ЗаполнитьДокументыПринятия(ЦБОрганизация, СадОрганизация, ДокументПередачи = Неопределено)
ДокументыПринятия.Очистить();
@@ -325,7 +329,7 @@
Запрос.УстановитьПараметр("НачалоПериода", Объект.Период.ДатаНачала);
Запрос.УстановитьПараметр("КонецПериода", Объект.Период.ДатаОкончания);
Запрос.УстановитьПараметр("Организация", СадОрганизация);
Запрос.УстановитьПараметр("ЦБ", ЦБКонтрагент);
Запрос.УстановитьПараметр("ЦБ", ЦБОрганизация);
Запрос.УстановитьПараметр("ИФО", ?(ЗначениеЗаполнено(Объект.ИФО), Объект.ИФО, Неопределено));
Запрос.УстановитьПараметр("ДокументПередачи", ДокументПередачи);
@@ -346,12 +350,8 @@
Процедура ЗаполнитьПринятияПоПередачеНаСервере(ДокументПередачи)
Отборы = ОтборыДокументовНаСервере();
Если Отборы = Неопределено Тогда
ДокументыПринятия.Очистить();
Возврат;
КонецЕсли;
ЗаполнитьДокументыПринятия(Отборы.ЦБКонтрагент, Отборы.СадОрганизация, ДокументПередачи);
ЗаполнитьДокументыПринятия(Отборы.ЦБОрганизация, Отборы.СадОрганизация, ДокументПередачи);
КонецПроцедуры
@@ -360,13 +360,13 @@
// реквизит ДокументПередачи документа принятия.
//
// Параметры:
// ЦБОрганизация - CatalogRef.Организации - ЦБ в виде организации (документ передачи
// хранит ЦБ в реквизите "Организация"); Неопределено - отбор не задан.
// СадКонтрагент - CatalogRef.Контрагенты - учреждение (сад) в табличной части
// "Задолженность"; Неопределено - отбор по учреждению не задан.
// ЦБОрганизация - CatalogRef.Организации - ЦБ (документ передачи хранит ЦБ
// в реквизите "Организация"); Неопределено - отбор не задан.
// СадОрганизация - CatalogRef.Организации - учреждение (сад) в реквизите
// "Учреждение"; Неопределено - отбор по учреждению не задан.
//
&НаСервере
Процедура ЗаполнитьСверку(ЦБОрганизация, СадКонтрагент)
Процедура ЗаполнитьСверку(ЦБОрганизация, СадОрганизация)
Сверка.Очистить();
@@ -386,10 +386,11 @@
| ДокументПередачи
|;
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
|ВЫБРАТЬ
| Передача.Ссылка КАК ДокументПередачи,
| Передача.Период КАК Период,
| Передача.Организация КАК ЦБ,
| Передача.Учреждение КАК Сад,
| Передача.СуммаДокумента КАК СуммаПередано,
| ЕСТЬNULL(ВТПринято.СуммаПринято, 0) КАК СуммаПринято,
| Передача.СуммаДокумента - ЕСТЬNULL(ВТПринято.СуммаПринято, 0) КАК Расхождение,
@@ -398,8 +399,6 @@
| Документ.ПС_ПередачаПоступившихПлатежейВУчреждения КАК Передача
| ЛЕВОЕ СОЕДИНЕНИЕ ВТПринято КАК ВТПринято
| ПО Передача.Ссылка = ВТПринято.ДокументПередачи
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПС_ПередачаПоступившихПлатежейВУчреждения.Задолженность КАК Строки
| ПО Передача.Ссылка = Строки.Ссылка
|ГДЕ
| НЕ Передача.ПометкаУдаления
| И Передача.Период >= &НачалоПериода
@@ -407,17 +406,17 @@
| И (&ЦБ = НЕОПРЕДЕЛЕНО
| ИЛИ Передача.Организация = &ЦБ)
| И (&Сад = НЕОПРЕДЕЛЕНО
| ИЛИ Строки.Учреждение = &Сад)
| ИЛИ Передача.Учреждение = &Сад)
| И (&ИФО = НЕОПРЕДЕЛЕНО
| ИЛИ Передача.ИФО = &ИФО)
|УПОРЯДОЧИТЬ ПО
| Передача.Период,
| Передача.Организация";
| Передача.Учреждение";
Запрос.УстановитьПараметр("НачалоПериода", Объект.Период.ДатаНачала);
Запрос.УстановитьПараметр("КонецПериода", Объект.Период.ДатаОкончания);
Запрос.УстановитьПараметр("ЦБ", ЦБОрганизация);
Запрос.УстановитьПараметр("Сад", СадКонтрагент);
Запрос.УстановитьПараметр("Сад", СадОрганизация);
Запрос.УстановитьПараметр("ИФО", ?(ЗначениеЗаполнено(Объект.ИФО), Объект.ИФО, Неопределено));
Выборка = Запрос.Выполнить().Выбрать();
@@ -1,3 +1,24 @@
// Обработка ПС_УправлениеРасчетамиПоРодительскойПлате.
// Логика дашборда реализована в модуле управляемой формы (Forms/Форма/Module.bsl).
// Модуль объекта оставлен пустым намеренно.
#Область ПрограммныйИнтерфейс
#Если Сервер Или ВнешнееСоединение Или ТолстыйКлиентОбычноеПриложение Тогда
// Обеспечивает наличие в справочнике идентификаторов объектов метаданных записей
// по документам внутреннего ЭДО, созданным в расширении конфигурации.
//
// Возвращаемое значение:
// Соответствие из КлючИЗначение - идентификаторы объектов метаданных по их полным именам:
// * Ключ - Строка - полное имя объекта метаданных, например "Документ.ПС_ПринятиеПоступившихПлатежейИзЦБ";
// * Значение - СправочникСсылка.ИдентификаторыОбъектовМетаданных - идентификатор объекта метаданных.
//
Функция ПС_ИнициализироватьИдентификаторыОбъектовЭДО() Экспорт
Возврат ПС_ИдентификаторыОбъектовЭДО.ПС_ОбеспечитьИдентификаторыДокументовЭДО();
КонецФункции
#КонецЕсли
#КонецОбласти
@@ -38,7 +38,7 @@
<value>Учреждение (сад)</value>
</synonym>
<type>
<types>CatalogRef.Контрагенты</types>
<types>CatalogRef.Организации</types>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:DefinedType xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" xmlns:mdclassExtension="http://g5.1c.ru/v8/dt/metadata/mdclass/extension" uuid="86adad5d-0084-4ac3-8b7b-67dbe8efde02" extendedConfigurationObject="5182ca77-f944-46c4-925a-8bcd42a8ca04">
<producedTypes>
<containerType typeId="76a8d07b-bff3-4dc7-b3f3-e329e96d825a" valueTypeId="cd44bd23-4db6-43e3-87b8-df9f511da56c"/>
</producedTypes>
<name>ОснованиеВнутреннегоЭлектронногоДокумента</name>
<objectBelonging>Adopted</objectBelonging>
<extension xsi:type="mdclassExtension:DefinedTypeExtension">
<extendedConfigurationObject>Checked</extendedConfigurationObject>
<typeExtension>
<types>
<state>Extended</state>
<type>DocumentRef.ПС_ПередачаПоступившихПлатежейВУчреждения</type>
</types>
<types>
<state>Extended</state>
<type>DocumentRef.ПС_ПринятиеПоступившихПлатежейИзЦБ</type>
</types>
</typeExtension>
</extension>
</mdclass:DefinedType>
@@ -51,25 +51,17 @@
Возврат;
КонецЕсли;
// Сады детей загружаем одним запросом, контрагента сада ищем по одному разу на сад:
// обращение к базе внутри цикла по строкам недопустимо.
// Сады детей загружаем одним запросом: обращение к базе внутри цикла по строкам недопустимо.
ОрганизацииСадов = ПС_ОрганизацииСадовДетей(Дети);
КонтрагентыСадов = Новый Соответствие;
Для Каждого СтрокаРасшифровки Из СтрокиОплаты Цикл
ОрганизацияСада = ОрганизацииСадов[СтрокаРасшифровки.Ребенок];
КонтрагентСада = КонтрагентыСадов[ОрганизацияСада];
Если КонтрагентСада = Неопределено Тогда
КонтрагентСада = ПС_РаботаСКонтрагентами.КонтрагентПоОрганизации(ОрганизацияСада, "Учреждение");
КонтрагентыСадов.Вставить(ОрганизацияСада, КонтрагентСада);
КонецЕсли;
Движение = Движения.ПС_ВзаиморасчетыПоРодительскойПлате.ДобавитьПриход();
Движение.Период = Дата;
Движение.Организация = Организация;
Движение.Учреждение = КонтрагентСада;
Движение.Учреждение = ОрганизацияСада;
Движение.Плательщик = СтрокаРасшифровки.Контрагент;
Движение.Ребенок = СтрокаРасшифровки.Ребенок;
Движение.Договор = СтрокаРасшифровки.Договор;
@@ -51,6 +51,47 @@
<textSize>Normal</textSize>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>Учреждение</name>
<id>110</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Объект.Учреждение</segments>
</dataPath>
<extendedTooltip>
<name>УчреждениеРасширеннаяПодсказка</name>
<id>112</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>УчреждениеКонтекстноеМеню</name>
<id>111</id>
<autoFill>true</autoFill>
</contextMenu>
<type>InputField</type>
<editMode>Enter</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:InputFieldExtInfo">
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<wrap>true</wrap>
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
<textSize>Normal</textSize>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>Период</name>
<id>16</id>
@@ -364,47 +405,6 @@
<autoMaxHeight>true</autoMaxHeight>
</extInfo>
</items>
<items xsi:type="form:FormField">
<name>ЗадолженностьУчреждение</name>
<id>103</id>
<visible>true</visible>
<enabled>true</enabled>
<userVisible>
<common>true</common>
</userVisible>
<dataPath xsi:type="form:DataPath">
<segments>Объект.Задолженность.Учреждение</segments>
</dataPath>
<extendedTooltip>
<name>ЗадолженностьЗадолженностьУчреждениеРасширеннаяПодсказка</name>
<id>105</id>
<type>Label</type>
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<extInfo xsi:type="form:LabelDecorationExtInfo">
<horizontalAlign>Left</horizontalAlign>
</extInfo>
</extendedTooltip>
<contextMenu>
<name>ЗадолженностьЗадолженностьУчреждениеКонтекстноеМеню</name>
<id>104</id>
<autoFill>true</autoFill>
</contextMenu>
<type>InputField</type>
<editMode>Auto</editMode>
<showInHeader>true</showInHeader>
<headerHorizontalAlign>Left</headerHorizontalAlign>
<showInFooter>true</showInFooter>
<extInfo xsi:type="form:InputFieldExtInfo">
<autoMaxWidth>true</autoMaxWidth>
<autoMaxHeight>true</autoMaxHeight>
<wrap>true</wrap>
<chooseType>true</chooseType>
<typeDomainEnabled>true</typeDomainEnabled>
<textEdit>true</textEdit>
<textSize>Normal</textSize>
</extInfo>
</items>
<items xsi:type="form:FormGroup">
<name>ЗадолженностьГруппаКонтрагента</name>
<id>92</id>
@@ -1298,6 +1298,10 @@
<event>OnCreateAtServer</event>
<name>ПриСозданииНаСервере</name>
</handlers>
<handlers>
<event>NotificationProcessing</event>
<name>ОбработкаОповещения</name>
</handlers>
<saveWindowSettings>true</saveWindowSettings>
<autoTitle>true</autoTitle>
<autoUrl>true</autoUrl>
@@ -20,6 +20,9 @@
Объект.Организация = Константы.ОрганизацияЦентрализованнаяБухгалтерия.Получить();
КонецЕсли;
// Состояние внутреннего ЭДО (подсистема БГУ): организация документа уже определена.
ОбщегоНазначенияБГУ.ПриСозданииНаСервере(ЭтотОбъект, Объект);
КонецПроцедуры
&НаСервере
@@ -27,6 +30,8 @@
БухгалтерскиеОперацииСервер.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект, Элементы.БухгалтерскаяОперация);
ОбщегоНазначенияБГУ.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
КонецПроцедуры
&НаКлиенте
@@ -57,6 +62,25 @@
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
// Обновляет гиперссылку состояния внутреннего ЭДО.
ОбщегоНазначенияБГУКлиент.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия, Параметр, Источник);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура Подключаемый_ДекорацияБГУНажатие(Элемент, СтандартнаяОбработка)
ОбщегоНазначенияБГУКлиент.ДекорацияНажатие(ЭтотОбъект, Элемент, СтандартнаяОбработка);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыЗадолженность
@@ -111,28 +135,30 @@
Возврат;
КонецЕсли;
// По каждому учреждению табличной части открывается форма нового документа принятия:
// строки подбираются по саду документа, записывает документы пользователь.
ОрганизацииСадов = ОрганизацииСадовНаСервере();
Если ОрганизацииСадов.Количество() = 0 Тогда
// Документ передачи адресный: открывается форма одного документа принятия по учреждению
// документа. Строки подбираются по саду, документ записывает пользователь.
Если НЕ ЗначениеЗаполнено(Объект.Учреждение) Тогда
СообщениеПользователю = Новый СообщениеПользователю;
СообщениеПользователю.Текст = "В табличной части ""Задолженность"" не заполнены учреждения (получатели).";
СообщениеПользователю.Текст = "Не заполнено учреждение (получатель) документа передачи.";
СообщениеПользователю.Сообщить();
Возврат;
КонецЕсли;
Для Каждого ОрганизацияСада Из ОрганизацииСадов Цикл
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ДокументПередачи", Объект.Ссылка);
ПараметрыФормы.Вставить("ОрганизацияСада", Объект.Учреждение);
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ДокументПередачи", Объект.Ссылка);
ПараметрыФормы.Вставить("ОрганизацияСада", ОрганизацияСада);
ОткрытьФорму("Документ.ПС_ПринятиеПоступившихПлатежейИзЦБ.Форма.ФормаДокумента",
ПараметрыФормы,
ЭтотОбъект,
Строка(Объект.Ссылка));
ОткрытьФорму("Документ.ПС_ПринятиеПоступившихПлатежейИзЦБ.Форма.ФормаДокумента",
ПараметрыФормы,
ЭтотОбъект,
Строка(Объект.Ссылка) + ":" + Строка(ОрганизацияСада));
КонецПроцедуры
КонецЦикла;
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуБГУ(Команда)
ОбщегоНазначенияБГУКлиент.ВыполнитьПодключаемуюКоманду(Команда, ЭтотОбъект, Объект);
КонецПроцедуры
@@ -173,10 +199,15 @@
Возврат;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(Объект.Учреждение) Тогда
ОбщегоНазначения.СообщитьПользователю(
"Заполнение невозможно: не заполнено учреждение (получатель).");
Возврат;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Остатки.Учреждение КАК Учреждение,
| Остатки.Плательщик КАК Контрагент,
| Остатки.Договор КАК Договор,
| Остатки.Ребенок КАК Ребенок,
@@ -187,12 +218,12 @@
|ИЗ
| РегистрНакопления.ПС_ВзаиморасчетыПоРодительскойПлате.Остатки(
| &МоментВремени,
| Организация = &Организация) КАК Остатки
| Организация = &Организация
| И Учреждение = &Учреждение) КАК Остатки
|ГДЕ
| Остатки.СуммаОстаток <> 0
|
|УПОРЯДОЧИТЬ ПО
| Остатки.Учреждение,
| Остатки.Плательщик,
| Остатки.Договор";
// Поступившие платежи собираются на границу конца дня документа: кассовые поступления
@@ -200,6 +231,7 @@
// в остатки не попадали.
Запрос.УстановитьПараметр("МоментВремени", КонецДня(Объект.Дата) + 1);
Запрос.УстановитьПараметр("Организация", Объект.Организация);
Запрос.УстановитьПараметр("Учреждение", Объект.Учреждение);
Выборка = Запрос.Выполнить().Выбрать();
@@ -215,7 +247,6 @@
ЗначенияКФО.Вставить(Выборка.КФО, Истина);
НоваяСтрока = Объект.Задолженность.Добавить();
НоваяСтрока.Учреждение = Выборка.Учреждение;
НоваяСтрока.Контрагент = Выборка.Контрагент;
НоваяСтрока.Договор = Выборка.Договор;
НоваяСтрока.Ребенок = Выборка.Ребенок;
@@ -275,35 +306,4 @@
КонецПроцедуры
// Возвращает организации садов (учреждений), представленных в табличной части "Задолженность".
// Учреждение хранится в документе контрагентом, поэтому организация ищется по ИНН.
//
// Возвращаемое значение:
// Массив из СправочникСсылка.Организации - организации получателей в порядке появления в табличной части.
//
&НаСервере
Функция ОрганизацииСадовНаСервере()
Учреждения = Новый Массив;
Для Каждого СтрокаЗадолженности Из Объект.Задолженность Цикл
Если НЕ ЗначениеЗаполнено(СтрокаЗадолженности.Учреждение) Тогда
Продолжить;
КонецЕсли;
Если Учреждения.Найти(СтрокаЗадолженности.Учреждение) = Неопределено Тогда
Учреждения.Добавить(СтрокаЗадолженности.Учреждение);
КонецЕсли;
КонецЦикла;
Организации = Новый Массив;
Для Каждого Учреждение Из Учреждения Цикл
Организация = ПС_РаботаСКонтрагентами.ОрганизацияПоКонтрагенту(Учреждение, "Получатель (учреждение)");
Если ЗначениеЗаполнено(Организация) Тогда
Организации.Добавить(Организация);
КонецЕсли;
КонецЦикла;
Возврат Организации;
КонецФункции
#КонецОбласти
@@ -21,6 +21,46 @@
КонецФункции
// Заполняет список команд печати документа.
//
// Параметры:
// КомандыПечати - ТаблицаЗначений - состав полей см. в функции УправлениеПечатью.СоздатьКоллекциюКомандПечати.
//
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.МенеджерПечати = "Документ.ПС_ПередачаПоступившихПлатежейВУчреждения";
КомандаПечати.Идентификатор = "Извещение0504805";
КомандаПечати.Представление = "Извещение (ф. 0504805)";
КомандаПечати.Порядок = 1;
КонецПроцедуры
// Формирует печатные формы документа для подсистемы БСП "Печать".
//
// Параметры:
// МассивОбъектов - Массив из ДокументСсылка.ПС_ПередачаПоступившихПлатежейВУчреждения - печатаемые документы.
// ПараметрыПечати - Структура - параметры печати.
// КоллекцияПечатныхФорм - ТаблицаЗначений - коллекция печатных форм.
// ОбъектыПечати - Соответствие из КлючИЗначение - соответствие объектов печати.
// ПараметрыВывода - Структура - параметры вывода.
//
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
Если НЕ УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "Извещение0504805") Тогда
Возврат;
КонецЕсли;
Для Каждого ДокументСсылка Из МассивОбъектов Цикл
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"Извещение0504805",
"Извещение (ф. 0504805)",
ПС_УчетРодительскойПлаты.ПечатьИзвещения0504805(ДокументСсылка));
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#КонецЕсли
@@ -55,13 +55,13 @@
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Контрагенты] = СтрокаЗадолженности.Контрагент;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Договоры] = СтрокаЗадолженности.Договор;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.КорреспондентыПоВнутреннимРасчетам] = СтрокаЗадолженности.Учреждение;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.КорреспондентыПоВнутреннимРасчетам] = Учреждение;
// Взаиморасчёты: переданные в учреждение поступившие платежи списываются расходом.
ДвижениеПС = Движения.ПС_ВзаиморасчетыПоРодительскойПлате.ДобавитьРасход();
ДвижениеПС.Период = Дата;
ДвижениеПС.Организация = Организация;
ДвижениеПС.Учреждение = СтрокаЗадолженности.Учреждение;
ДвижениеПС.Учреждение = Учреждение;
ДвижениеПС.Плательщик = СтрокаЗадолженности.Контрагент;
ДвижениеПС.Ребенок = СтрокаЗадолженности.Ребенок;
ДвижениеПС.Договор = СтрокаЗадолженности.Договор;
@@ -104,6 +104,18 @@
КонецПроцедуры
Процедура ПриЗаписи(Отказ)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
// Изменение данных подписанного извещения обесценивает его электронный документ:
// расходящиеся электронные документы аннулируются.
ПС_ВнутреннийЭДОИзвещений.ПС_АннулироватьЭлектронныеДокументыПриИзменении(ЭтотОбъект, Отказ);
КонецПроцедуры
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
Если НЕ ЗначениеЗаполнено(Организация) Тогда
@@ -114,16 +126,14 @@
ОбщегоНазначения.СообщитьПользователю("Не заполнен КФО", , "КФО", "Объект", Отказ);
КонецЕсли;
Если НЕ ЗначениеЗаполнено(Учреждение) Тогда
ОбщегоНазначения.СообщитьПользователю("Не заполнено учреждение (получатель)", , "Учреждение", "Объект", Отказ);
КонецЕсли;
Если Задолженность.Количество() = 0 Тогда
ОбщегоНазначения.СообщитьПользователю("Не заполнена табличная часть ""Задолженность""", , "Задолженность", "Объект", Отказ);
Иначе
Для Каждого СтрокаЗадолженности Из Задолженность Цикл
Если НЕ ЗначениеЗаполнено(СтрокаЗадолженности.Учреждение) Тогда
ОбщегоНазначения.СообщитьПользователю(
"Не заполнено учреждение в строке табличной части ""Задолженность"".",
, "Задолженность", "Объект", Отказ);
Прервать;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(СтрокаЗадолженности.КПС) Тогда
ОбщегоНазначения.СообщитьПользователю(
"Не заполнен КПС строки табличной части ""Задолженность""."
@@ -10,7 +10,7 @@
<name>ПС_ПередачаПоступившихПлатежейВУчреждения</name>
<synonym>
<key>ru</key>
<value>Передача поступивших платежей в учреждения</value>
<value>Передача поступивших платежей в учреждение</value>
</synonym>
<useStandardCommands>true</useStandardCommands>
<fullTextSearchOnInputByString>DontUse</fullTextSearchOnInputByString>
@@ -22,7 +22,7 @@
</objectPresentation>
<listPresentation>
<key>ru</key>
<value>Передачи поступивших платежей в учреждения</value>
<value>Передачи поступивших платежей в учреждение</value>
</listPresentation>
<numberType>String</numberType>
<numberLength>9</numberLength>
@@ -178,6 +178,21 @@
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<attributes uuid="641b191c-1a0f-4f71-a567-4e874eb470aa">
<name>Учреждение</name>
<synonym>
<key>ru</key>
<value>Получатель (учреждение)</value>
</synonym>
<type>
<types>CatalogRef.Организации</types>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<fillValue xsi:type="core:UndefinedValue"/>
<fullTextSearch>Use</fullTextSearch>
<dataHistory>Use</dataHistory>
</attributes>
<forms uuid="2f97f361-ee42-4267-905c-61db24e9229e">
<name>ФормаДокумента</name>
</forms>
@@ -282,20 +297,6 @@
<dataHistory>Use</dataHistory>
<fullTextSearch>Use</fullTextSearch>
</attributes>
<attributes uuid="8cf37a05-a457-4693-bc91-d9c1d37fede5">
<name>Учреждение</name>
<synonym>
<key>ru</key>
<value>Получатель (учреждение)</value>
</synonym>
<type>
<types>CatalogRef.Контрагенты</types>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>
<dataHistory>Use</dataHistory>
<fullTextSearch>Use</fullTextSearch>
</attributes>
</tabularSections>
<templates uuid="1f448676-6b65-401e-b0a1-8ee291792b49">
<name>ПФ_MXL_Извещение0504805_103н_ПС_РП_Получатель</name>
@@ -36,11 +36,14 @@
КонецЕсли;
Если НЕ ЗначениеЗаполнено(Объект.ЦБ) Тогда
Объект.ЦБ = ПС_РаботаСКонтрагентами.КонтрагентЦБПоУмолчанию();
Объект.ЦБ = Константы.ОрганизацияЦентрализованнаяБухгалтерия.Получить();
КонецЕсли;
КонецЕсли;
// Состояние внутреннего ЭДО (подсистема БГУ): организация документа уже определена.
ОбщегоНазначенияБГУ.ПриСозданииНаСервере(ЭтотОбъект, Объект);
КонецПроцедуры
&НаСервере
@@ -48,6 +51,8 @@
БухгалтерскиеОперацииСервер.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект, Элементы.БухгалтерскаяОперация);
ОбщегоНазначенияБГУ.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
КонецПроцедуры
&НаКлиенте
@@ -78,10 +83,25 @@
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
// Обновляет гиперссылку состояния внутреннего ЭДО (подсистема БГУ).
ОбщегоНазначенияБГУКлиент.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия, Параметр, Источник);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура Подключаемый_ДекорацияБГУНажатие(Элемент, СтандартнаяОбработка)
ОбщегоНазначенияБГУКлиент.ДекорацияНажатие(ЭтотОбъект, Элемент, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ДокументПередачиПриИзменении(Элемент)
@@ -147,6 +167,13 @@
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуБГУ(Команда)
ОбщегоНазначенияБГУКлиент.ВыполнитьПодключаемуюКоманду(Команда, ЭтотОбъект, Объект);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
@@ -21,6 +21,46 @@
КонецФункции
// Заполняет список команд печати документа.
//
// Параметры:
// КомандыПечати - ТаблицаЗначений - состав полей см. в функции УправлениеПечатью.СоздатьКоллекциюКомандПечати.
//
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.МенеджерПечати = "Документ.ПС_ПринятиеПоступившихПлатежейИзЦБ";
КомандаПечати.Идентификатор = "Извещение0504805";
КомандаПечати.Представление = "Извещение (ф. 0504805)";
КомандаПечати.Порядок = 1;
КонецПроцедуры
// Формирует печатные формы документа для подсистемы БСП "Печать".
//
// Параметры:
// МассивОбъектов - Массив из ДокументСсылка.ПС_ПринятиеПоступившихПлатежейИзЦБ - печатаемые документы.
// ПараметрыПечати - Структура - параметры печати.
// КоллекцияПечатныхФорм - ТаблицаЗначений - коллекция печатных форм.
// ОбъектыПечати - Соответствие из КлючИЗначение - соответствие объектов печати.
// ПараметрыВывода - Структура - параметры вывода.
//
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
Если НЕ УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "Извещение0504805") Тогда
Возврат;
КонецЕсли;
Для Каждого ДокументСсылка Из МассивОбъектов Цикл
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"Извещение0504805",
"Извещение (ф. 0504805)",
ПС_УчетРодительскойПлаты.ПечатьИзвещения0504805(ДокументСсылка));
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#КонецЕсли
@@ -35,9 +35,9 @@
ИФО = РеквизитыПередачи.ИФО;
КонецЕсли;
// Отправитель (ЦБ) определяется по организации документа передачи: в документе передачи
// ЦБ хранится организацией, а в документе сада - контрагентом, сопоставляем по ИНН.
ЦБ = ПС_РаботаСКонтрагентами.КонтрагентПоОрганизации(РеквизитыПередачи.Организация, "Отправитель (ЦБ)");
// Отправитель (ЦБ) определяется по организации документа передачи:
// в документе передачи и в документе сада ЦБ хранится организацией.
ЦБ = РеквизитыПередачи.Организация;
// Строки подбираются по саду документа: сад задаётся реквизитом "Организация".
// Если сад ещё не указан, строки заполняются командой формы после его выбора.
@@ -125,6 +125,18 @@
КонецПроцедуры
Процедура ПриЗаписи(Отказ)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
// Изменение данных подписанного извещения обесценивает его электронный документ:
// расходящиеся электронные документы аннулируются.
ПС_ВнутреннийЭДОИзвещений.ПС_АннулироватьЭлектронныеДокументыПриИзменении(ЭтотОбъект, Отказ);
КонецПроцедуры
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
Если НЕ ЗначениеЗаполнено(Организация) Тогда
@@ -198,13 +210,6 @@
Возврат;
КонецЕсли;
// В документе передачи сад хранится контрагентом (как в регистре взаиморасчётов),
// а в документе сада - организацией, поэтому сопоставляем по ИНН.
КонтрагентСада = ПС_РаботаСКонтрагентами.КонтрагентПоОрганизации(Организация, "Учреждение");
Если НЕ ЗначениеЗаполнено(КонтрагентСада) Тогда
Возврат;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
@@ -218,9 +223,9 @@
| Документ.ПС_ПередачаПоступившихПлатежейВУчреждения.Задолженность КАК СтрокиПередачи
|ГДЕ
| СтрокиПередачи.Ссылка = &ДокументПередачи
| И СтрокиПередачи.Учреждение = &Учреждение";
| И СтрокиПередачи.Ссылка.Учреждение = &Учреждение";
Запрос.УстановитьПараметр("ДокументПередачи", ДокументПередачиСсылка);
Запрос.УстановитьПараметр("Учреждение", КонтрагентСада);
Запрос.УстановитьПараметр("Учреждение", Организация);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
@@ -55,7 +55,7 @@
<value>Отправитель (ЦБ)</value>
</synonym>
<type>
<types>CatalogRef.Контрагенты</types>
<types>CatalogRef.Организации</types>
</type>
<minValue xsi:type="core:UndefinedValue"/>
<maxValue xsi:type="core:UndefinedValue"/>