&НаКлиенте
//Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения) Экспорт
// НомерВреестреЛС = 7;
// НомерВреестреСум = 11;
// НомерВреестреФио = 6;
// ДлинаКодаЛс=10;
// мПар = новый Структура("мКорСч,мИстФин,мИстСр,мКБКназн,мКОСГУназн");
// //-----------------------НАСТРОЙКИ ЗАПОЛНЕНИЯ ТАБЛИЧНОЙ ЧАСТИ---------------
//
// мПар.мКорСч= "205.00";
// //мПар.мИстФин= "Местный бюджет";
// мПар.мИстСр= "06"; //средства юрлиц
// мПар.мКБКназн = "07011000004003130";
// мПар.мКОСГУназн = "131";
// //--------------------------------------------------------------------------
// //-----------------------НАСТРОЙКИ ЗАПОЛНЕНИЯ БУХ. ОПЕРАЦИИ-----------------
// мПар2 = новый Структура("мСчПост,КПС_20110,ПроводкиИсполненияПлана");
// мПар2.мСчПост = "201.11";
// мПар2.КПС_20110 = "00000000000000000";
// мПар2.ПроводкиИсполненияПлана = Истина; //формировать проводки по исполнению плана доходов?
// //--------------------------------------------------------------------------
//
// Диалог = новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
// Если Диалог.Выбрать() Тогда
// ФайлРеестра = Диалог.ПолноеИмяФайла;
// иначе
// Перейти ~НеВыбралиФайл;
// КонецЕсли;
//Текст = Новый ТекстовыйДокумент;
//Текст.Прочитать(ФайлРеестра);
//масс = новый массив;
//Если Найти(ФайлРеестра,"\реестр")<>0 тогда //файл реестра сбера У НАС ВСЕГДА НАЧИНАЕТСЯ С 01_, поправьте если у вас не так - на ваш случай
//Для Сч = 1 по Текст.КоличествоСтрок() Цикл
//СтрокаРеестра = Текст.ПолучитьСтроку(Сч);
//СтруктураПлатежа = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаРеестра,";");
////проверяем дошли до конца файла или нет
//Если (СтруктураПлатежа.Количество() = 6 или СтруктураПлатежа.Количество() = 7) И Сч = Текст.КоличествоСтрок() Тогда
//Прервать;
//КонецЕсли;
//ЛицевойСчет = Прав(СтруктураПлатежа[НомерВреестреЛС],СтрДлина(СтруктураПлатежа[НомерВреестреЛС])-СтрНайти(СтруктураПлатежа[НомерВреестреЛС]," ",НаправлениеПоиска.СКонца));
//Назначение = СтруктураПлатежа[9]; //не используется
//Сумма = Число(СтруктураПлатежа[НомерВреестреСум]);
//элт = Новый Структура("ЛС,СУМ,ФИО");
//элт.ЛС = ЛицевойСчет;
//элт.СУМ = Сумма;
//элт.ФИО = СтруктураПлатежа[НомерВреестреФио];
//масс.Добавить(элт);
//КонецЦикла;
//КонецЕсли;
//&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения) Экспорт
//НАСТРОЙКА ОСНОВНЫХ ПАРАМЕТРОВ
НомерВреестреЛС = 7;
НомерВреестреСум = 11;
НомерВреестреФио = 6;
ДлинаКодаЛс=10;
мПар = новый Структура("мКорСч,мИстФин,мИстСр,мКБКназн,мКОСГУназн");
//-----------------------НАСТРОЙКИ ЗАПОЛНЕНИЯ ТАБЛИЧНОЙ ЧАСТИ---------------
мПар.мКорСч= "205.00";
мПар.мИстФин= "Местный бюджет";
мПар.мИстСр= "06"; //средства юрлиц
мПар.мКБКназн = "07010000000000130";
мПар.мКОСГУназн = "131";
//--------------------------------------------------------------------------
//-----------------------НАСТРОЙКИ ЗАПОЛНЕНИЯ БУХ. ОПЕРАЦИИ-----------------
мПар2 = новый Структура("мСчПост,КПС_20110,ПроводкиИсполненияПлана");
мПар2.мСчПост = "201.11";
мПар2.КПС_20110 = "00000000000000000";
мПар2.ПроводкиИсполненияПлана = Истина; //формировать проводки по исполнению плана доходов?
//--------------------------------------------------------------------------
Диалог = новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Если Диалог.Выбрать() Тогда
ФайлРеестра = Диалог.ПолноеИмяФайла;
иначе
Перейти ~НеВыбралиФайл;
КонецЕсли;
Текст = Новый ТекстовыйДокумент;
Текст.Прочитать(ФайлРеестра);
масс = новый массив;
Если Найти(ФайлРеестра,"\реестр")<>0 тогда //файл реестра сбера У НАС ВСЕГДА НАЧИНАЕТСЯ С 01_, поправьте если у вас не так - на ваш случай
Для Сч = 1 по Текст.КоличествоСтрок() Цикл
СтрокаРеестра = Текст.ПолучитьСтроку(Сч);
СтруктураПлатежа = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаРеестра,";");
//проверяем дошли до конца файла или нет
Если (СтруктураПлатежа.Количество() = 6 или СтруктураПлатежа.Количество() = 7) И Сч = Текст.КоличествоСтрок() Тогда
Прервать;
КонецЕсли;
ЛицевойСчет = Прав(СтруктураПлатежа[НомерВреестреЛС],СтрДлина(СтруктураПлатежа[НомерВреестреЛС])-СтрНайти(СтруктураПлатежа[НомерВреестреЛС]," ",НаправлениеПоиска.СКонца));
Назначение = СтруктураПлатежа[9]; //не используется
Сумма = Число(СтруктураПлатежа[НомерВреестреСум]);
элт = Новый Структура("ЛС,СУМ,ФИО");
элт.ЛС = ЛицевойСчет;
элт.СУМ = Сумма;
элт.ФИО = СтруктураПлатежа[НомерВреестреФио];
масс.Добавить(элт);
КонецЦикла;
КонецЕсли;
ОбъектФормы = ВладелецФормы.Объект;
//заполняем объект данными
ЗапНаСервере(ОбъектФормы,масс,мПар);
КопироватьДанныеФормы(ОбъектФормы, ВладелецФормы.Объект);
ВладелецФормы.ОбновитьОтображениеДанных();
//включаем флажок род платы
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
ВладелецФормы.Элементы, "РасшифровкаПлатежаРебенок", "Видимость", ИСТИНА);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
ВладелецФормы.Элементы, "РасшифровкаПлатежаКонтрагент", "Видимость", НЕ ИСТИНА);
ВладелецФормы.Записать();
//заполняем бух операцию
запбо(ОбъектФормы,мПар2);
//обновляем данные
ВладелецФормы.Прочитать();
ВладелецФормы.ОбновитьОтображениеДанных();
~НеВыбралиФайл:
КонецПроцедуры
//***********
Если Найти(ФайлРеестра,"\01_")=0 тогда // не сбер - пример разделения, код надо настраивать по аналогии ВЫШЕ
Для Сч = 1 по Текст.КоличествоСтрок() Цикл
СтрокаРеестра = Текст.ПолучитьСтроку(Сч);
СтруктураПлатежа = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаРеестра,";");
Если СтруктураПлатежа.Количество() = 6 И Сч = Текст.КоличествоСтрок() Тогда
Прервать;
КонецЕсли;
Если СтруктураПлатежа.Количество() <> 15 Тогда
Сообщить("Не могу разобрать строку №" + Строка(Сч + 1) + ", ожидается 15 полей, а получено: " + СтруктураПлатежа.Количество());
Сообщить(СтрокаРеестра);
Продолжить;
КонецЕСли;
Если СтрДлина(СтруктураПлатежа[6])=5 тогда
ЛицевойСчет = "X0000" + СтруктураПлатежа[6];
ИначеЕсли СтрДлина(СтруктураПлатежа[6])=6 тогда
ЛицевойСчет = "X000" + СтруктураПлатежа[6];
ИначеЕсли СтрДлина(СтруктураПлатежа[6])=10 тогда
//ЗАКОММЕНТИРОВАТЬ ЕСЛИ У ВАС ЛИЦЕВЫЕ СЧЕТА БЕЗ Х
ЛицевойСчет = "X" + Прав(СтруктураПлатежа[6],СтрДлина(СтруктураПлатежа[6])-1);
//Сообщить(ЛицевойСчет);
Иначе
Сообщить("Лицевой счет не опознан " + СтрокаРеестра);
ЛицевойСчет = "";
конецесли;
Назначение = СтруктураПлатежа[10];
Сумма = Число(СтруктураПлатежа[12]);
элт = Новый Структура("ЛС,СУМ,ФИО");
элт.ЛС = ЛицевойСчет;
элт.СУМ = Сумма;
элт.ФИО = СтруктураПлатежа[8];
масс.Добавить(элт);
КонецЦикла;
КонецЕсли;
ОбъектФормы = ВладелецФормы.Объект;
//заполняем объект данными
ЗапНаСервере(ОбъектФормы,масс,мПар);
КопироватьДанныеФормы(ОбъектФормы, ВладелецФормы.Объект);
ВладелецФормы.ОбновитьОтображениеДанных();
//вклюючаем флажок род платы
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
ВладелецФормы.Элементы, "РасшифровкаПлатежаРебенок", "Видимость", ИСТИНА);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
ВладелецФормы.Элементы, "РасшифровкаПлатежаКонтрагент", "Видимость", НЕ ИСТИНА);
ВладелецФормы.Записать();
//заполняем бух операцию
запбо(ОбъектФормы,мПар2);
//обновляем данные
ВладелецФормы.Прочитать();
ВладелецФормы.ОбновитьОтображениеДанных();
~НеВыбралиФайл:
КонецПроцедуры
&НаСервере
Процедура ЗапНаСервере(Объект, мас, пар)
ссылка = Документы.КассовоеПоступление.НайтиПоНомеру(Объект.Номер,ТекущаяДата());
//Сообщить(ссылка);
обе = ссылка.ПолучитьОбъект();
ОбъектНазначения = Объект;
ОбъектНазначения.РодительскаяПлата = Истина;
ОбъектНазначения.КорСчет = ПланыСчетов.ЕПСБУ.НайтиПоКоду(пар.мКорСч);
ОбъектНазначения.ИФО = Справочники.ИсточникиФинансовогоОбеспечения.НайтиПоНаименованию(пар.мИстФин);
обс = 0;
ОбъектНазначения.РасшифровкаПлатежа.Очистить();
для каждого м из мас цикл
стр = ОбъектНазначения.РасшифровкаПлатежа.Добавить();
стр.СуммаВал = м.СУМ;
обс = обс + м.СУМ;
//-----------------------------Пытаемся определить ребенка по ЛИЦЕВОМУ-------------
//Сообщить(м.ЛС);
стр.Ребенок = Справочники.Дети.НайтиПоКоду(м.ЛС);
//Сообщить(Строка(стр.Ребенок) + " = " + Строка(стр.Ребенок.Организация));
стр.Контрагент = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(стр.Ребенок, "Контрагент");
если стр.Ребенок.Пустая() или стр.Ребенок.Организация <> ОбъектНазначения.Организация тогда
стр.Ребенок = Справочники.Дети.НайтиПоКоду("Х"+Прав(м.ЛС,9));//тут пробуем русскую Х
стр.Контрагент = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(стр.Ребенок, "Контрагент");
//Сообщить(Строка(стр.Ребенок) + " \ " + стр.Ребенок.Организация);
если стр.Ребенок.Организация <> ОбъектНазначения.Организация тогда
стр.Ребенок=Неопределено;
стр.Контрагент=Неопределено;
КонецЕсли;
конецесли;
//---------------------------------------------------------------------------------
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| СоставГруппДДУ.ГруппаДетскогоУчреждения КАК ГруппаДетскогоУчреждения,
| СоставГруппДДУ.СтавкаОплаты КАК СтавкаОплаты,
| СоставГруппДДУ.Льгота КАК Льгота,
| СоставГруппДДУ.Договор КАК Договор,
| СоставГруппДДУ.Период КАК Период,
| СоставГруппДДУ.Актуальность КАК Актуальность
|ИЗ
| РегистрСведений.СоставГруппДДУ КАК СоставГруппДДУ
|ГДЕ
| СоставГруппДДУ.Ребенок = &Ребенок
|
|УПОРЯДОЧИТЬ ПО
| Период";
Запрос.УстановитьПараметр("Ребенок", стр.Ребенок);
РезультатЗапроса = Запрос.Выполнить();
р = РезультатЗапроса.Выбрать();
р.Следующий();
//Сообщить(р.Договор);
стр.Договор = р.Договор;
стр.ИсточникСредств = Справочники.ИсточникиСредств.НайтиПоКоду(пар.мИстСр).Ссылка;
если стр.Ребенок.Пустая() или стр.Ребенок=Неопределено тогда
стр.Примечание = "не найдено! ФИО = "+м.ФИО+" "+ТекущаяДата();
Сообщить(стр.Примечание);
иначе
стр.Примечание = "импорт реестра успешен "+ТекущаяДата();
КонецЕсли;
стр.КФО = Перечисления.КВД.Внебюджет;
стр.КБКНазначениеПлатежа = Справочники.КлассификационныеПризнакиСчетов.НайтиПоКоду(пар.мКБКназн).Ссылка;
стр.КОСГУНазначениеПлатежа = Справочники.КОСГУ.НайтиПоКоду(пар.мКОСГУназн).Ссылка;
конеццикла;
ОбъектНазначения.СуммаДокументаВВалюте=обс;
КонецПроцедуры
&НаСервере
Процедура запбо(Объект,пар)
ссылка = Документы.КассовоеПоступление.НайтиПоНомеру(Объект.Номер,ТекущаяДата());
//Сообщить(ссылка);
обе = ссылка.ПолучитьОбъект();
то = Справочники.ТиповыеОперации.НайтиПоНаименованию("Поступление родительской платы");//тип операции
ректип = Справочники.ТиповыеОперации.ДополнительныеРеквизитыТиповойОперации(то);
ДополнительныеРеквизиты = Новый Структура("СчетПоступления", ПланыСчетов.ЕПСБУ.НайтиПоКоду(пар.мСчПост));
ДополнительныеРеквизиты.Вставить("КПС_20110",Справочники.КлассификационныеПризнакиСчетов.НайтиПоКоду(пар.КПС_20110).Ссылка);
ДополнительныеРеквизиты.Вставить("ПроводкиИсполненияПлана",пар.ПроводкиИсполненияПлана);
БухгалтерскиеОперацииСервер.ДобавитьДанныеДляПроведения(обе,то,ДополнительныеРеквизиты,Ложь);
обе.Записать(РежимЗаписиДокумента.Запись);
КонецПроцедуры
&НаСервере
Функция ИщемТО()
Возврат Справочники.ТиповыеОперации.НайтиПоНаименованию("Поступление родительской платы");
КонецФункции
Показать