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

Обработка для массового закрытия лицевых счетов

Автор roller06, 14 мая 2023, 20:03

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

roller06

Добрый день. Помогите пожалуйста с кодом. Обработка должна закрыть большое количество лицевых счетов (перевод из состояния "Открыт" в состояние "Закрыт") путем создания Документа "изменение состояния лицевого счета". Информация о лицевых счетах берется из excell файла (все поля которые в excell есть - учувствуют в создании документа). На данный момент при исполнении обработки ошибка - Элемент не выбран...
p/s: зеленый новичек)

&НаКлиенте
Процедура ФайлНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
         
          ВыбФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
          ВыбФайла.Фильтр = "Документ Excel(*.xls,*.xlsx)|*.xls;*.xlsx";
         
          Если ВыбФайла.Выбрать() Тогда
                    Файл = ВыбФайла.ПолноеИмяФайла;
          КонецЕсли;

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

&НаКлиенте
Процедура ЗакрытьЛС(Команда)
          Если Не ЗначениеЗаполнено(Файл) Тогда
                    ОбщегоНазначения.СообщитьОбОшибке("Файл не выбран!");
                    Возврат;
          КонецЕсли;
         
          Excel = Новый COMОбъект("Excel.Application");
          Excel.Application.Workbooks.Open(Файл);
          ЛистExcel= Excel.Sheets(1);
          ЛицевойСчет = " ";
          с = 2;
          Пока ЛицевойСчет <> "" ИЛИ с > 1000000 Цикл
                    ЛицевойСчет = СокрЛП(ЛистExcel.Cells(с, 1).Value);
                    Если ЛицевойСчет <> "" Тогда
                              ЛС = Формат(Число(ЛицевойСчет), "ЧЦ=10; ЧВН=; ЧГ=");
                              СостояниеЛицевогоСчета = ЛистExcel.Cells(с, 2).Value;
                              ДатаИзмененияСостояния = ЛистExcel.Cells(с, 3).Value;
                              ДокументОснование = ЛистExcel.Cells(с, 4).Value;
                              Подразделение = ЛистExcel.Cells(с, 5).Value;
                              УчетныйМесяц = ЛистExcel.Cells(с, 6).Value;
                              ПричинаЗакрытияЛицевогоСчета = ЛистExcel.Cells(с, 7).Value;
                              СозданиеДокумента()
                    КонецЕсли;
                    с = с + 1;
          КонецЦикла;                                               
          Сообщить("Прочитано " + Строка(с - 1) + " строк(и).");
          Excel.Quit();         
          Сообщить("Загрузка завершена!");   
         
КонецПроцедуры

&НаСервере
Процедура СозданиеДокумента()

    // Cоздание нового документа
    НД = Документы.ИзменениеСостоянияЛицевогоСчета.СоздатьДокумент();
         
    // Заполнение табличной части
         
          НД.Абонент = НД.Абонент;
          НД.Дата = ТекущаяДата();
          НД.СостояниеЛицевогоСчета = НД.СостояниеЛицевогоСчета;
          НД.ДатаИзмененияСостояния = НД.ДатаИзмененияСостояния;
          НД.ДокументОснование = НД.ДокументОснование;
          НД.Подразделение = НД.Подразделение;
          НД.УчетныйМесяц = НД.УчетныйМесяц;
          НД.ПричинаЗакрытияЛицевогоСчета = НД.ПричинаЗакрытияЛицевогоСчета;

    // Запись документа
    НД.Записать(РежимЗаписиДокумента.Запись);
                   
          // Проведение документа
          НД.Записать(РежимЗаписиДокумента.Проведение)
                   
   
КонецПроцедуры

Kvark5d

roller06, как Вы дошли до работы с Excell, при таком низком уровне понимания 1С ???
1.В процедуре ЗакрытьЛС вы получаете данные из excell, но в процедуру создания нового документа СозданиеДокумента() их не передаете.
2. Мало получить ЛС, ведь в документ записывается Абонент, т.е. пропущен поиск абонента по л/с
3. Аналогично Подразделение, Причина закрытия л/с

Теги:

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

Рейтинг@Mail.ru

Поиск