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

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

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

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

ruiner2012

Доброго времени суток, получил в наследство от старого администратора внешние обработки. С отчетами разобрался и перенес на новую конфигурацию, и обработки некоторые, эт что то не получается правильно перенести. Ошибки именно думаю с директивами. Если их по умолчанию не было, убрать, то "не определен тип" ДиалогВыбораФайла. Могу саму обработку прикрепить, может кому полезно будет.


На которой работает конфиг.- 1с жкх тсж жск 2.0.65
Новый конфиг.- 1с жкх тсж жск 3.0.58



// Хранит список цифр для установки номера лицевого счета.
Перем СписокЦифр;

&НаКлиенте
Процедура ЗаписатьАдресЗдания(Здание, СтруктАдрес)

НаборЗаписей = РегистрыСведений.КВП_Адреса.СоздатьНаборЗаписей();

НаборЗаписей.Отбор.Объект.Установить(Здание);
НаборЗаписей.Отбор.Вид.Установить(Перечисления.КВП_ВидыАдресов.Здание);
НаборЗаписей.Отбор.Период.Установить(Дата);

НовЗапись = НаборЗаписей.Добавить();
НовЗапись.Период = Дата;
НовЗапись.Объект = Здание;
НовЗапись.Вид = Перечисления.КВП_ВидыАдресов.Здание;
НовЗапись.Город = СтруктАдрес.Город;
НовЗапись.Улица = СтруктАдрес.Улица;
НовЗапись.Дом = СтруктАдрес.Дом;
НовЗапись.Корпус = СтруктАдрес.Корпус;
НовЗапись.Представление = СтруктАдрес.Представление;

КВП_ЗаписатьОбъект(НаборЗаписей);

КонецПроцедуры // ЗаписатьАдресЗдания()

// Создает элемент справочника "Контрагенты".
&НаКлиенте
Функция СоздатьКонтрагента(ФИО)

// определим группу
СписокГрупп = Новый СписокЗначений;
СписокГрупп.Добавить("Проживающие");

ТекРодитель = Справочники.Контрагенты.ПустаяСсылка();

Для каждого ТекГруппа Из СписокГрупп Цикл
НайденнаяГр = Справочники.Контрагенты.НайтиПоНаименованию(ТекГруппа,Истина,ТекРодитель);
Если (НайденнаяГр.Пустая()) ИЛИ (НЕ НайденнаяГр.ЭтоГруппа) Тогда
Гр = Справочники.Контрагенты.СоздатьГруппу();
Гр.Наименование = ТекГруппа;
Гр.Родитель = ТекРодитель;
Попытка
Гр.Записать();
ТекРодитель = Гр.Ссылка;
Исключение
Продолжить;
КонецПопытки;
Иначе
ТекРодитель = НайденнаяГр.Ссылка;
КонецЕсли;
КонецЦикла;

// создадим элемент
НайденныйЭлемент = Справочники.Контрагенты.НайтиПоНаименованию(ФИО,Истина,ТекРодитель);
Если НайденныйЭлемент.Пустая() Тогда
НовыйЭлемент = Справочники.Контрагенты.СоздатьЭлемент();
НовыйЭлемент.Родитель = ТекРодитель;
НовыйЭлемент.Наименование = ФИО;
НовыйЭлемент.НаименованиеПолное = ФИО;
НовыйЭлемент.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо;

ФормаЭлемента = НовыйЭлемент.ПолучитьФорму("ФормаЭлемента");
УправлениеКонтактнойИнформацией.ПрочитатьКонтактнуюИнформацию(ФормаЭлемента.НаборКонтактнойИнформации, НовыйЭлемент.Ссылка);

Если НЕ ФормаЭлемента.ЗаписатьВФорме() Тогда
ОбщегоНазначения.СообщитьОбОшибке("Запись объекта " + НовыйЭлемент + Символы.ПС + ОписаниеОшибки(), , , , Ложь);
КонецЕсли;
Возврат НовыйЭлемент.Ссылка;
Иначе
Возврат НайденныйЭлемент.Ссылка;
КонецЕсли;

КонецФункции

// Создает проживающего для указанного л/с с указанным ФИО.
&НаКлиенте
Функция СоздатьПроживающего(ЛицевойСчет, ФИО)

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

// ФизЛицо.
// получение фамилии, имени, отчества
РазделеннаяФИО = РазделитьФИО(ФИО);

ФизЛицо = Справочники.ФизическиеЛица.НайтиПоНаименованию(ФИО, Истина);
Если ФизЛицо = Справочники.ФизическиеЛица.ПустаяСсылка() Тогда

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

// запись ФИО физлица
МенеджерЗаписи = РегистрыСведений.ФИОФизЛиц.СоздатьМенеджерЗаписи();
МенеджерЗаписи.ФизЛицо = ФизЛицо;
МенеджерЗаписи.Период = '19000101';
МенеджерЗаписи.Фамилия  = РазделеннаяФИО.Фамилия;
МенеджерЗаписи.Имя      = РазделеннаяФИО.Имя;
МенеджерЗаписи.Отчество = РазделеннаяФИО.Отчество;
КВП_ЗаписатьОбъект(МенеджерЗаписи);

КонецЕсли;

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

Возврат Проживающий;

КонецФункции

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

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

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

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

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

ФайлДБФ = Новый 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;
КонецЦикла;

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

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

// Устанавливает максимальный номер лицевого счета.
&НаКлиенте
Функция УстановкаНомераЛицевогоСчета()

Запрос = Новый Запрос();
Запрос.Текст =
"ВЫБРАТЬ
| КВП_ЛицевыеСчета.Наименование
|ИЗ
| Справочник.КВП_ЛицевыеСчета КАК КВП_ЛицевыеСчета
|ГДЕ
| (НЕ КВП_ЛицевыеСчета.ЭтоГруппа)";

МаксНомер      = 0;
Выборка        = Запрос.Выполнить().Выбрать();
//ВсегоВариантов = Выборка.Количество();
//ТекВариант     = 1;
Пока Выборка.Следующий() Цикл
Номер = ВыбратьТолькоЦифры(Выборка.Наименование);
Если МаксНомер < Число(Номер) Тогда
МаксНомер = Число(Номер);
КонецЕсли;
//Состояние("Поиск максимального лицевого счета: " + ТекВариант + " / " + ВсегоВариантов);
//ТекВариант = ТекВариант + 1;
КонецЦикла;

МаксНомер = МаксНомер + 1;
ИмяЛицевогоСчета = Формат(МаксНомер, "ЧДЦ=0; ЧГ=0");
//ИдентификаторЛС = ПолучитьИдентификаторЛС( , ИмяЛицевогоСчета);
Возврат ИмяЛицевогоСчета;

КонецФункции   // УстановкаНомераЛицевогоСчета()

// Выделяет из исходной строки только цифры.        глобальная переменная
&НаКлиенте
Функция ВыбратьТолькоЦифры(Знач ИсхСтрока)

ИсхСтрока     = СокрЛП(ИсхСтрока);
ВсегоСимволов = СтрДлина(ИсхСтрока);
НоваяСтрока   = "";
Для Сч = 1 По ВсегоСимволов Цикл
Если СписокЦифр.НайтиПоЗначению(Сред(ИсхСтрока, Сч, 1)) = Неопределено Тогда
Продолжить;
КонецЕсли;
НоваяСтрока = НоваяСтрока + Сред(ИсхСтрока, Сч, 1);
КонецЦикла;

Если ПустаяСтрока(НоваяСтрока) Тогда
НоваяСтрока = "0";
КонецЕсли;

Возврат НоваяСтрока;

КонецФункции // ВыбратьТолькоЦифры()

&НаСервере
Процедура ФайлЗагрузкиНачалоВыбора(Элемент, СтандартнаяОбработка)

ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);

ДиалогВыбораФайла.Фильтр = "Файл данных (*.dbf)|*.dbf";
ДиалогВыбораФайла.Расширение = "dbf";

ДиалогВыбораФайла.Заголовок = "Выберите файл";
ДиалогВыбораФайла.ПредварительныйПросмотр = Ложь;
ДиалогВыбораФайла.ИндексФильтра = 0;
ДиалогВыбораФайла.ПолноеИмяФайла = Элемент.Значение;

Если ДиалогВыбораФайла.Выбрать() Тогда
Элемент.Значение = ДиалогВыбораФайла.ПолноеИмяФайла;
КонецЕсли;

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

&НаСервере
Процедура ФайлЗагрузкиОткрытие(Элемент, СтандартнаяОбработка)

ЗапуститьПриложение(Элемент.Значение);

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

&НаСервере
Процедура ПриОткрытии()

Организация = глЗначениеПеременной("ОсновнаяОрганизация");

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

СписокЦифр = Новый СписокЗначений() ;
СписокЦифр.Добавить("0");
СписокЦифр.Добавить("1");
СписокЦифр.Добавить("2");
СписокЦифр.Добавить("3");
СписокЦифр.Добавить("4");
СписокЦифр.Добавить("5");
СписокЦифр.Добавить("6");
СписокЦифр.Добавить("7");
СписокЦифр.Добавить("8");
СписокЦифр.Добавить("9");


ruiner2012

Ах , да, диалог тогда вызываться будет на клиенте. После еще больше ошибок)
Добавлено: 18 мар 2018, 10:11


Так то нужно все на клиенте, может без констекста.
Вот ошибка, если все установить на клиенте

{ВнешняяОбработка.КВП_ЗагрузкаДанныхПоЛС.Форма.Форма.Форма(167,26)}: Тип не определен (ТаблицаЗначений)
ТаблицаПлощадей = Новый <<?>>ТаблицаЗначений; (Проверка: Тонкий клиент)
{ВнешняяОбработка.КВП_ЗагрузкаДанныхПоЛС.Форма.Форма.Форма(171,25)}: Тип не определен (ТаблицаЗначений)
ТаблицаДолейЛС = Новый <<?>>ТаблицаЗначений; (Проверка: Тонкий клиент)
{ВнешняяОбработка.КВП_ЗагрузкаДанныхПоЛС.Форма.Форма.Форма(426,17)}: Тип не определен (Запрос)
Запрос = Новый <<?>>Запрос(); (Проверка: Тонкий клиент)


oleg-x

Тебе надо почитать, посмотреть видео, когда и где применяются директивы НаКлиенте, НаСервере.
Например:
Диалог выбора файла, надо делать на клиенте.
Создание документов и справочников создание/изменение записей регистра, на сервере.
Такие вещи как ТаблицуЗначений, ДокументОбъект, СправочникОбъект и прочее передавать между сервером и клиентом нельзя.

P.S. перенести обработку с обычных приложений, на управляемые, это не просто приписать дирктивы. а еще переписать функции/процедуры, разделив выполнение кода на клиент и сервер. А если есть код, который выполняется в модуле объекта, то это отдельная история :)
Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google

ruiner2012


oleg-x

Цитата: ruiner2012 от 18 мар 2018, 10:59
Можно ли использовать дерективу в функции?
Нужно, если у тебя не написана директива, то по умолчанию это означает что функция/процедура выполняется на сервере.
Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google

ruiner2012

Осталось только доработать одну часть, а не знаю как вынести.
      
Ошибка
{ВнешняяОбработка.КВП_ЗагрузкаДанныхПоЛС.Форма.Форма.Форма(443,11)}: Процедура или функция с указанным именем не определена (ВыбратьТолькоЦифры)
Номер = <<?>>ВыбратьТолькоЦифры(Выборка.Наименование); (Проверка: Сервер)


&НаСервере
Функция УстановкаНомераЛицевогоСчета()

Запрос = Новый Запрос();
Запрос.Текст =
"ВЫБРАТЬ
| КВП_ЛицевыеСчета.Наименование
|ИЗ
| Справочник.КВП_ЛицевыеСчета КАК КВП_ЛицевыеСчета
|ГДЕ
| (НЕ КВП_ЛицевыеСчета.ЭтоГруппа)";

МаксНомер      = 0;
Выборка        = Запрос.Выполнить().Выбрать();
//ВсегоВариантов = Выборка.Количество();
//ТекВариант     = 1;

Пока Выборка.Следующий() Цикл
Номер = ВыбратьТолькоЦифры(Выборка.Наименование);
Если МаксНомер < Число(Номер) Тогда
МаксНомер = Число(Номер);
КонецЕсли;
//Состояние("Поиск максимального лицевого счета: " + ТекВариант + " / " + ВсегоВариантов);
//ТекВариант = ТекВариант + 1;
КонецЦикла;
    МаксНомер = МаксНомер + 1;
ИмяЛицевогоСчета = Формат(МаксНомер, "ЧДЦ=0; ЧГ=0");
//ИдентификаторЛС = ПолучитьИдентификаторЛС( , ИмяЛицевогоСчета);
Возврат ИмяЛицевогоСчета;

КонецФункции


Почему он запрашивает функцию:? Это всего лишь цикл ж

oleg-x

 Номер = ВыбратьТолькоЦифры(Выборка.Наименование);
ВыбратьТолькоЦифры() - это функция, которой у тебя нет.
Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google

ruiner2012

о я тупень, проглядел, что функция ВыбратьТолькоЦифры, наклиенте.
Ладненько, спасибо, огромное. И последнее. Можно как то вывести таблицы значения в функцию? Ибо так их не понимает((

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

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

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

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

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

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

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


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

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


oleg-x

Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google

alex0402

Цитата: ruiner2012 link=topic=69804.msg195127#quote author=ruiner2012 link=topic=69804.msg195128#msg195128 date=1521357015]
Ах , да, диалог тогда вызываться будет на клиенте. После еще больше ошибок)
Добавлено: 18 мар 2018, 10:11


Так то нужно все на клиенте, может без констекста.
Вот ошибка, если все установить на клиенте

{ВнешняяОбработка.КВП_ЗагрузкаДанныхПоЛС.Форма.Форма.Форма(167,26)}: Тип не определен (ТаблицаЗначений)
ТаблицаПлощадей = Новый <<?>>ТаблицаЗначений; (Проверка: Тонкий клиент)
{ВнешняяОбработка.КВП_ЗагрузкаДанныхПоЛС.Форма.Форма.Форма(171,25)}: Тип не определен (ТаблицаЗначений)
ТаблицаДолейЛС = Новый <<?>>ТаблицаЗначений; (Проверка: Тонкий клиент)
{ВнешняяОбработка.КВП_ЗагрузкаДанныхПоЛС.Форма.Форма.Форма(426,17)}: Тип не определен (Запрос)
Запрос = Новый <<?>>Запрос(); (Проверка: Тонкий клиент)

работу с таблицей значений и запросами вынести на сервер.


[quote date=1521354857]Если ДиалогВыбораФайла.Выбрать() Тогда[/quote]

заменить на

ДиалогВыбораФайла.Показать(ОписаниеОповещения)
Спасибо за Сказать спасибо

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

Рейтинг@Mail.ru

Поиск