Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 00:37

Помогите разобраться с кодом - Как правильно, установить, НаКлиенте,НаСервере:(

Автор ruiner2012, 18 мар 2018, 09:34

0 Пользователей и 1 гость просматривают эту тему.

ruiner2012

1. Полный код обработки есть в начале поста. А так вот:

&НаКлиенте
Процедура КнопкаВыполнитьНажатие(Кнопка)

Если Организация.Пустая() Тогда
Сообщить("Не выбрана организация!");
Возврат;
КонецЕсли;

Если НЕ ЗначениеЗаполнено(Дата) Тогда
Сообщить("Не выбрана дата, на которую будут записаны данные и открыты лицевые счета!");
Возврат;
КонецЕсли;

Если ПустаяСтрока(ФайлЗагрузки) Тогда
Сообщить("Не выбран файл для загрузки!");
Возврат;
КонецЕсли;

Сообщить("Загрузка начата " + ТекущаяДата());
Сообщить("----------");

ФайлДБФ = Новый XBase;
ФайлДБФ.Кодировка = КодировкаТекста.UTF8;
ФайлДБФ.ОткрытьФайл(ФайлЗагрузки, , Истина); //только для чтения
Если НЕ ФайлДБФ.Открыта() = Истина Тогда
ОбщегоНазначения.СообщитьОбОшибке("Файл не открыт!");
Возврат;
КонецЕсли;

мНастройкиУчетнойПолитикиТСЖ = УПЖКХ_ОбщегоНазначенияКлиентСервер.ПолучитьПараметрыУчетнойПолитикиЖКХ(Дата, Организация);


// Данные по площади
ТаблицаПлощадей = Новый ТаблицаЗначений;
ТаблицаПлощадей.Колонки.Добавить("Помещение");
ТаблицаПлощадей.Колонки.Добавить("ОбщаяПлощадь");
//
ТаблицаДолейЛС = Новый ТаблицаЗначений;
ТаблицаДолейЛС.Колонки.Добавить("ЛицевойСчет");
ТаблицаДолейЛС.Колонки.Добавить("Помещение");
ТаблицаДолейЛС.Колонки.Добавить("Доля");

//НомерСтроки = 0;
Пока НЕ ФайлДБФ.ВКонце() Цикл

//НомерСтроки = НомерСтроки + 1;
//ФайлДБФ.Перейти(НомерСтроки);

ЛицевойСчетСтрока = УстановкаНомераЛицевогоСчета();  // СокрЛП(ФайлДБФ.LS);
ФИО = СокрЛП(ФайлДБФ.FIO);
Корпус = СокрЛП(ФайлДБФ.KORP);
Квартира = ФайлДБФ.KV;
КолЗарегистрированных = ФайлДБФ.ZAREG;
КолОтсутствующих = ФайлДБФ.OTSUTS;
КолКомнат = ФайлДБФ.KOL_KOMN;
ОбщаяПлощадь = ФайлДБФ.OB_PLOSH;
НаселенныйПункт = СокрЛП(ФайлДБФ.NP);
НаименованиеУлицы = СокрЛП(ФайлДБФ.NAME_UL);
ТипУлицы = СокрЛП(ФайлДБФ.TIP_UL);
НомерДома = ФайлДБФ.DOM;
Улица = НаименованиеУлицы; // + " " + ТипУлицы;

Состояние("" + ФайлДБФ.НомерЗаписи() + "/" + ФайлДБФ.КоличествоЗаписей() + ": " + ФИО);
ОбработкаПрерыванияПользователя();

ФайлДБФ.Следующая();

Если ПустаяСтрока(ЛицевойСчетСтрока) ИЛИ ПустаяСтрока(ФИО) ИЛИ ПустаяСтрока(НаселенныйПункт + Улица) Тогда
Продолжить;
КонецЕсли;

// Справочник "Здания"
СтруктАдрес = Новый Структура;
СтруктАдрес.Вставить("Страна"         , "");
СтруктАдрес.Вставить("Регион"         , "");
СтруктАдрес.Вставить("Район"          , "");
СтруктАдрес.Вставить("Город"          , НаселенныйПункт);
СтруктАдрес.Вставить("НаселенныйПункт", "");
СтруктАдрес.Вставить("АдмОкруг"       , "");
СтруктАдрес.Вставить("Улица"          , Улица);
СтруктАдрес.Вставить("Дом"            , "" + НомерДома);
СтруктАдрес.Вставить("Корпус"         , Корпус);
СтруктАдрес.Вставить("НомерДома"      , "" + НомерДома + Корпус);
СтруктАдрес.Вставить("Квартира"       , "");
СтруктАдрес.Вставить("Индекс"         , "");
СтруктАдрес.Вставить("ОВД"            , "");
СтруктАдрес.Вставить("Представление"  , НаселенныйПункт + ", " + Улица
                      + "., дом № " + НомерДома + ?(ПустаяСтрока(Корпус), "", ", корпус " + Корпус));
СтруктАдрес.Вставить("Комментарий"    , "");

НаименованиеЗдания = УправлениеКонтактнойИнформацией.ПолучитьПредставлениеАдресаПоСтруктуре(СтруктАдрес);
Здание = Справочники.КВП_Здания.НайтиПоНаименованию(НаименованиеЗдания, Истина);
Если Здание.Пустая() Тогда
ЗданиеОбъект = Справочники.КВП_Здания.СоздатьЭлемент();
ЗданиеОбъект.Наименование = НаименованиеЗдания;
ЗданиеОбъект.НомерДома = "" + НомерДома + ?(ПустаяСтрока(Корпус), "", "/" + Корпус);
ЗданиеОбъект.Многоквартирное = Истина;
ЗданиеОбъект.ТипСооружения = Перечисления.УПЖКХ_ТипСооружения.Здание;
Если НЕ КВП_ЗаписатьОбъект(ЗданиеОбъект) Тогда
Продолжить;
КонецЕсли;
Здание = ЗданиеОбъект.Ссылка;
ЗаписатьАдресЗдания(Здание, СтруктАдрес);
Иначе
ДанныеАдреса = РегистрыСведений.КВП_Адреса.СрезПоследних(КонецДня(Дата),
                 Новый Структура("Объект, Вид", Здание, Перечисления.КВП_ВидыАдресов.Здание));
Если ДанныеАдреса.Количество() = 0 Тогда
ЗаписатьАдресЗдания(Здание, СтруктАдрес);
КонецЕсли;
КонецЕсли;

// Справочник "Квартиры".
Помещение = Справочники.УПЖКХ_Помещения.НайтиПоКоду(Квартира, , , Здание);
Если Помещение.Пустая() Тогда
ПомещениеОбъект = Справочники.УПЖКХ_Помещения.СоздатьЭлемент();
ПомещениеОбъект.Код = Квартира;
ПомещениеОбъект.Владелец = Здание;
ПомещениеОбъект.ВидПомещения = Справочники.УПЖКХ_ВидыПомещений.НайтиПоКоду("000000001");
ПомещениеОбъект.Наименование = "Кв. " + Квартира;
ПомещениеОбъект.КоличествоКомнат = КолКомнат;
Если НЕ КВП_ЗаписатьОбъект(ПомещениеОбъект) Тогда
Продолжить;
КонецЕсли;
Помещение = ПомещениеОбъект.Ссылка;
КонецЕсли;

// Общая площадь помещения.
СтрокаПлощади = ТаблицаПлощадей.Добавить();
СтрокаПлощади.Помещение = Помещение;
СтрокаПлощади.ОбщаяПлощадь = ОбщаяПлощадь;

ТаблицаПлощадей.Свернуть("Помещение", "ОбщаяПлощадь");
СтрокаПомещения = ТаблицаПлощадей.Найти(Помещение, "Помещение");
Если НЕ СтрокаПомещения = Неопределено Тогда
НаборЗаписей = РегистрыСведений.КВП_ПлощадьПомещения.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Объект.Установить(Помещение);
НаборЗаписей.Отбор.ВидПлощади.Установить(Справочники.УПЖКХ_ВидыПлощадей.НайтиПоКоду("000000001"));  // ОбщаяПлощадь
НаборЗаписей.Отбор.Период.Установить(Дата);
НовЗапись = НаборЗаписей.Добавить();
НовЗапись.Период = Дата;
НовЗапись.Объект = Помещение;
НовЗапись.ВидПлощади = Справочники.УПЖКХ_ВидыПлощадей.НайтиПоКоду("000000001");   // ОбщаяПлощадь
НовЗапись.Площадь = СтрокаПомещения.ОбщаяПлощадь;
КВП_ЗаписатьОбъект(НаборЗаписей);
КонецЕсли;

// Лицевой счет.
ЛицевойСчет = Справочники.КВП_ЛицевыеСчета.НайтиПоНаименованию(ЛицевойСчетСтрока, Истина);
Если ЛицевойСчет.Пустая() Тогда
ТекРодитель = ГруппаЛС;
//Если ПустаяСтрока(Улица) Тогда
// ТекРодитель = Справочники.КВП_ЛицевыеСчета.ПустаяСсылка();
//Иначе
// ТекРодитель = Справочники.КВП_ЛицевыеСчета.НайтиПоНаименованию(Улица, Истина);
// Если ТекРодитель.Пустая() ИЛИ НЕ ТекРодитель.ЭтоГруппа Тогда
// ЛСГруппа = Справочники.КВП_ЛицевыеСчета.СоздатьГруппу();
// ЛСГруппа.Наименование = Улица;
// Если КВП_ЗаписатьОбъект(ЛСГруппа) Тогда
// ТекРодитель = ЛСГруппа.Ссылка;
// КонецЕсли;
// КонецЕсли;
//КонецЕсли;
ЛицевойСчетОбъект = Справочники.КВП_ЛицевыеСчета.СоздатьЭлемент();
ЛицевойСчетОбъект.Наименование  = ЛицевойСчетСтрока;
ЛицевойСчетОбъект.Родитель = ТекРодитель;
ЛицевойСчетОбъект.Адрес = Помещение;
//ЛицевойСчетОбъект.ТипВладельца  = ЛицевойСчетОбъект.Контрагент.ЮрФизЛицо;
//ЛицевойСчетОбъект.ВидЧастнойСобственности = Перечисления.КВП_ВидыЧастнойСобственности.Совместная;
//ЛицевойСчетОбъект.ДатаОткрытия  = Дата;
Если НЕ КВП_ЗаписатьОбъект(ЛицевойСчетОбъект) Тогда
Продолжить;
КонецЕсли;
ЛицевойСчет = ЛицевойСчетОбъект.Ссылка;
КонецЕсли;

СтрокаЛС = ТаблицаДолейЛС.Добавить();
СтрокаЛС.ЛицевойСчет = ЛицевойСчет;
СтрокаЛС.Помещение = Помещение;
СтрокаЛС.Доля = ОбщаяПлощадь;

// Проживающий.
Проживающий = СоздатьПроживающего(ЛицевойСчет, ФИО);
Если Не ЗначениеЗаполнено(Проживающий) Тогда
Продолжить;
КонецЕсли;

// Укажем проживающего, как владельца л/с.
//ЛицевойСчетОбъект = ЛицевойСчет.ПолучитьОбъект();
//ЛицевойСчетОбъект.ВладелецОбъекта = Проживающий;
//КВП_ЗаписатьОбъект(ЛицевойСчетОбъект);
//ЛицевойСчет = ЛицевойСчетОбъект.Ссылка;

// Документ "Открытие лицевого счета".
ДанныеЛС = РегистрыСведений.КВП_ЛицевыеСчета.СрезПоследних(Дата, Новый Структура("ЛицевойСчет", ЛицевойСчет));
Если ДанныеЛС.Количество() > 0 Тогда
Если ДанныеЛС[0].Действует Тогда
Продолжить;
КонецЕсли;
КонецЕсли;

ДокументОбъект = Документы.КВП_ОткрытиеЛицевогоСчета.СоздатьДокумент();
ДокументОбъект.Дата        = Дата;
ДокументОбъект.ЛицевойСчет = ЛицевойСчет;
НовКонтрагент = СоздатьКонтрагента(ФИО);
ДокументОбъект.Контрагент = НовКонтрагент;
ДокументОбъект.ДоговорКонтрагента = НовКонтрагент.ОсновнойДоговорКонтрагента;
ДокументОбъект.Комментарий = "Открытие л/с; дом " + Здание.НомерДома + ", " + Помещение + "; " + ФИО;

/////////// Раскомментировать для ПроживающихГотовымиЧислами
//ТЧДокОткрЛС = ДокументОбъект.Главная;
//СтрокаТЧ = ТЧДокОткрЛС.Добавить();
//СтрокаТЧ.Проживающий = Проживающий;
//СтрокаТЧ.Собственник = ИСТИНА;
////////////////////////////////
ДокументОбъект.ОтветственныйСобственник = Проживающий;
// Проживающие готовыми числами
КолПроживающих = КолЗарегистрированных - КолОтсутствующих;
ДокументОбъект.КоличествоЗарегистрированных = КолЗарегистрированных;
ДокументОбъект.КоличествоПроживающих = КолПроживающих;

// Проживающие НЕ готовыми числами
Если НЕ Константы.УПЖКХ_УказыватьКоличествоПрожИЗарегЧислами.Получить() Тогда

КолСтрокПроживающих = Макс(КолПроживающих, КолЗарегистрированных);
тмКолПроживающих = КолПроживающих;
тмКолЗарегистрированных = КолЗарегистрированных;

ТабличнаяЧасть = ДокументОбъект.Главная;
// Добавим проживающих в табличную часть документа.
НоваяСтрока = ТабличнаяЧасть.Добавить();
НоваяСтрока.Проживающий = Проживающий;
НоваяСтрока.Собственник = ИСТИНА;
НоваяСтрока.Проживает   = ?(тмКолПроживающих = 0, Ложь, Истина);
НоваяСтрока.Прописан    = ?(тмКолЗарегистрированных = 0, Ложь, Истина);

тмКолПроживающих = Макс(0, тмКолПроживающих - 1);
тмКолЗарегистрированных = Макс(0, тмКолЗарегистрированных - 1);

Для Индекс = 2 По КолСтрокПроживающих Цикл
ТекПроживающий = СоздатьПроживающего(ЛицевойСчет, "Проживающий_" + ЛицевойСчет + "_" + Индекс);
Если Не ЗначениеЗаполнено(ТекПроживающий) Тогда
Продолжить;
КонецЕсли;
НоваяСтрока = ТабличнаяЧасть.Добавить();
НоваяСтрока.Проживающий = ТекПроживающий;
НоваяСтрока.Проживает   = ?(тмКолПроживающих = 0, Ложь, Истина);
НоваяСтрока.Прописан    = ?(тмКолЗарегистрированных = 0, Ложь, Истина);

тмКолПроживающих = Макс(0, тмКолПроживающих - 1);
тмКолЗарегистрированных = Макс(0, тмКолЗарегистрированных - 1);
КонецЦикла;

КонецЕсли;

КВП_ЗаписатьОбъект(ДокументОбъект, РежимЗаписиДокумента.Проведение);

КонецЦикла;

ФайлДБФ.ЗакрытьФайл();

КоличествоЛС = ТаблицаДолейЛС.Количество();
НомерСтроки = 1;
Для Каждого СтрокаЛС ИЗ ТаблицаДолейЛС Цикл
Состояние("" + НомерСтроки + "/" + КоличествоЛС + ": установка доли л/с " + СтрокаЛС.ЛицевойСчет);
ОбработкаПрерыванияПользователя();
СтрокаПомещения = ТаблицаПлощадей.Найти(СтрокаЛС.Помещение, "Помещение");
Если НЕ СтрокаПомещения = Неопределено Тогда
// Запись долей собственности.
РазмерСтавок = РегистрыСведений.КВП_РазмерыДолейЛицевыхСчетов.СоздатьНаборЗаписей();
РазмерСтавок.Отбор.Период.Установить(Дата);
РазмерСтавок.Отбор.Объект.Установить(СтрокаЛС.Помещение);
РазмерСтавок.Отбор.ЛицевойСчет.Установить(СтрокаЛС.ЛицевойСчет);
НовЗапись = РазмерСтавок.Добавить();
НовЗапись.Период          = Дата;
НовЗапись.Объект          = СтрокаЛС.Помещение;
НовЗапись.ЛицевойСчет     = СтрокаЛС.ЛицевойСчет;
НовЗапись.ДоляЧислитель   = СтрокаЛС.Доля;
НовЗапись.ДоляЗнаменатель = СтрокаПомещения.ОбщаяПлощадь;
КВП_ЗаписатьОбъект(РазмерСтавок);
КонецЕсли;
НомерСтроки = НомерСтроки + 1;
КонецЦикла;

Сообщить("----------");
Сообщить("Загрузка завершена " + ТекущаяДата());

КонецПроцедуры


2. Диалог вроде как ошибки не выдает, его отправил на клиент _

alex0402

Цитата: ruiner2012 от 18 мар 2018, 12:142. Диалог вроде как ошибки не выдает, его отправил на клиент _

Цитата: ruiner2012 от 18 мар 2018, 12:14

если разрешены модальные вызовы, то не будет ругаться...
Спасибо за Сказать спасибо

ruiner2012

Цитата: alex0402 от 18 мар 2018, 12:19
Цитата: ruiner2012 от 18 мар 2018, 12:142. Диалог вроде как ошибки не выдает, его отправил на клиент _

Цитата: ruiner2012 от 18 мар 2018, 12:14

если разрешены модальные вызовы, то не будет ругаться...

не ругается, теперьь ругается только на таблицызначений

alex0402

Цитата: ruiner2012 от 18 мар 2018, 12:31не ругается, теперьь ругается только на таблицызначений

Цитата: ruiner2012 от 18 мар 2018, 12:31

таблица значений доступна только на сервере.
Спасибо за Сказать спасибо

ruiner2012

Цитата: alex0402 от 18 мар 2018, 12:45
Цитата: ruiner2012 от 18 мар 2018, 12:31не ругается, теперьь ругается только на таблицызначений

Цитата: ruiner2012 от 18 мар 2018, 12:31

таблица значений доступна только на сервере.


Я знаю теперет, вот и интересуюсь как вынести ее в массив или другие способы решения. 

alex0402

Цитата: ruiner2012 от 18 мар 2018, 12:57Я знаю теперет, вот и интересуюсь как вынести ее в массив или другие способы решения.

массив структур или добавить таблицу в реквизиты формы
Спасибо за Сказать спасибо

Похожие темы (5)

Рейтинг@Mail.ru

Поиск