Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> обработка Заполнения табличной части документа при импорте из TXT файла          
jojojoba2 Подменю пользователя
сообщение 11.05.20, 13:44
Сообщение #1

Говорящий
***
Группа: Пользователи
Сообщений: 56
Спасибо сказали: 0 раз
Рейтинг: 0

Добрый день!

Помогите новичку. Делаю обработку импорта. Как заполнить определенные колонки табличной части(данные в остальных не должны пропасть) из строчек TXT?
Скиньте ,если можно пример.

Мне нужно чтобы значения в табличной части колонок "абонплата","Скидка","ТекСумма","ТекСуммаСПДВ" каторые заполнены, при следующем импорте(документ должен создаваться копированием) заменялись новыми(за следующий месяц).Все остальное(в колонках "НомерТелефона","НомерКонтракта","ТарифнийПлан","Подразделение" должно остаться.

Как перезаписать(переввести) определенные данные в табличную часть документа?

При импорте ,когда тч документа пуста я использовал:
СтрТаб = ЭтотОбъект.Номера.Добавить();

СтрТаб.НомерТелефона = Тел;
СтрТаб.НомерКонтракта = Контракт;
СтрТаб.ТарифнийПлан = Тариф;
СтрТаб.Абонплата = АбонплатаСПдв;
СтрТаб.Скидка = ЗНИЖКИ ;
СтрТаб.ТекСумма = ТекСумма;
//ТекСуммаПДВ = ТекСумма*0.2;
//ТекСуммаСПДВ = +ТекСуммаПДВ+ТекСумма;
СтрТаб.ТекСуммаСПДВ = ТекСуммаСПДВ;


Но это просто добавляет строки снизу, а не перезаписывает

Пробовал и так
Т=ЭлементыФормы.Номера.ТекущиеДанные;
Т. Абонплата = АбонплатаСПдв;
Т. Скидка = ЗНИЖКИ ;
Т. ТекСумма = ТекСумма;
Т. ТекСуммаСПДВ = ТекСуммаСПДВ;

но заменяет почемуто данные только в первой строке.

Вот вся обработка импорта :
Процедура ОсновныеДействияФормыЗаполнить(Кнопка)

Перем Стр;
Стр = "";

Режим = РежимДиалогаВыбораФайла.Открытие;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
ДиалогОткрытияФайла.ПолноеИмяФайла = "";
Текст = "ru = "" Текст""; en = ""Text""";
Фильтр = Нстр(Текст)+"(*.txt)|*.txt";
ДиалогОткрытияФайла.Фильтр = Фильтр;
ДиалогОткрытияФайла.МножественныйВыбор = Ложь;

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


Сообщить (ИмяФайла);
Иначе
Текст = "ru= ""Файл не выбран!""; en=""File not selected""";
Предупреждение(НСтр(Текст));

КонецЕсли;





Текст = Новый ТекстовыйДокумент();

Текст.Прочитать(ИмяФайла);

Стр = Текст.ПолучитьТекст() ;


Если Найти(Стр,"ТОВАРИСТВО З ОБМЕЖЕНОЮ")>0 тогда
Организация2=Лев(СокрЛП(Сред(Стр,Найти(Стр,"ТОВАРИСТВО З ОБМЕЖЕНОЮ")+42)),20);
КонецЕсли;


Если Найти(Стр,"Особовий рахунок:")>0 тогда
ОсобовийРахунок=Лев(СокрЛП(Сред(Стр,Найти(Стр,"Особовий рахунок:")+18)),13);
КонецЕсли;

Если Найти(Стр,"Номер рахунку:")>0 тогда
НомерРахунку=Лев(СокрЛП(Сред(Стр,Найти(Стр,"Номер рахунку:")+16)),10);
КонецЕсли;

Если Найти(Стр,"Номер рахунку:")>0 тогда
НомерРахункуРозрах=Лев(СокрЛП(Сред(Стр,Найти(Стр,"Номер рахунку:"))),40);
КонецЕсли;

Если Найти(Стр,"Розрахунковий період:")>0 тогда
РозрахунковийПеріод=Лев(СокрЛП(Сред(Стр,Найти(Стр,"Розрахунковий період:"))),45);
КонецЕсли;

Если Найти(Стр,"ЗАГАЛОМ БЕЗ ПОДАТКІВ: ")>0 тогда
СуммаБезПДВ2=Лев(Сред(Стр,Найти(Стр,"ЗАГАЛОМ БЕЗ ПОДАТКІВ: ")+94),11);
КонецЕсли;

Если Найти(Стр,"ЗАГАЛОМ НАРАХОВАНО ЗА ПЕРІОД ЗА ВСІМА КОНТРАКТАМИ РАЗОМ З ПДВ ТА ПФ")>0 тогда
СуммаСПДВ2=Лев(Сред(Стр,Найти(Стр,"ЗАГАЛОМ НАРАХОВАНО ЗА ПЕРІОД ЗА ВСІМА КОНТРАКТАМИ РАЗОМ З ПДВ ТА ПФ")+94),11);
КонецЕсли;





Контракт="";
Тел="";
Пакет="";
Тариф=0;

Загалом=0;



Для а = 1 по Текст.КоличествоСтрок() Цикл
Стр = Текст.ПолучитьСтроку(а);




Если Найти(Стр,"Контракт №")>0 тогда


Тел=Прав(СокрЛП(Сред(Стр,Найти(Стр,"Контракт №")+4)),10);
Контракт=Лев(СокрЛП(Сред(Стр,Найти(Стр,"Контракт №")+10)),12);


ИначеЕсли Найти(Стр,"Тарифний Пакет:")>0 тогда
Тариф= Лев(СокрЛП(Сред(Стр,Найти(Стр,"Тарифний Пакет:")+15)),21);

ИначеЕсли Найти(Стр,"ВАРТІСТЬ ПАКЕТА/ЩОМІСЯЧНА ПЛАТА: ")>0 тогда
Абонплата=Прав(СокрЛП(Сред(Стр,Найти(Стр,"ВАРТІСТЬ ПАКЕТА/ЩОМІСЯЧНА ПЛАТА: ")+4)),9);


ИначеЕсли Найти(Стр,"Знижка на суму особового рахунку ")>0 тогда
ЗНИЖКИ=Прав(СокрЛП(Сред(Стр,Найти(Стр,"Знижка на суму особового рахунку ")+4)),9);



ИначеЕсли Найти(Стр,"ЗАГАЛОМ ЗА КОНТРАКТОМ")>0 тогда
ТекСумма=Прав(СокрЛП(Сред(Стр,Найти(Стр,"ЗАГАЛОМ ЗА КОНТРАКТОМ")+4)),9);


АбонплатаПдв = Абонплата*0.2;
АбонплатаСПдв = АбонплатаПдв+ Абонплата;
ТекСуммаПДВ = ТекСумма*0.2;
ТекСуммаСПДВ = +ТекСуммаПДВ+ТекСумма;

Если Справочники.МобильныеНомераСотрудников.НайтиПоНаименованию(Тел).Пустая() Тогда


СтрТаб = ЭтотОбъект.Номера.Добавить();
СтрТаб.НомерТелефона = Тел;
СтрТаб.НомерКонтракта = Контракт;
СтрТаб.ТарифнийПлан = Тариф;
СтрТаб.Абонплата = АбонплатаСПдв;
СтрТаб.Скидка = ЗНИЖКИ ;
СтрТаб.ТекСумма = ТекСумма;
СтрТаб.ТекСуммаСПДВ = ТекСуммаСПДВ;

Иначе

Т=ЭлементыФормы.Номера.ТекущиеДанные;
Т. Абонплата = АбонплатаСПдв;
Т. Скидка = ЗНИЖКИ ;
Т. ТекСумма = ТекСумма;
Т. ТекСуммаСПДВ = ТекСуммаСПДВ;

КонецЕсли;

Контракт="";
Тел="";
Пакет="";
Тариф=0;
Абонплата = 0;
ЗНИЖКИ = 0;

КонецЕсли;
КонецЦикла;

ЭтотОбъект.СуммаИтого = СуммаБезПДВ2;
ЭтотОбъект.Номер_рахунку =НомерРахунку;
ЭтотОбъект.ОсобовийРахунок = ОсобовийРахунок;
ЭтотОбъект.Организация = Организация2 ;
ЭтотОбъект.СуммаСПдв =СуммаСПДВ2;
ЭтотОбъект.Примечание =НомерРахункуРозрах+" "+РозрахунковийПеріод;


Для Каждого ТабСтр из ЭтотОбъект.Номера Цикл
СправМоб = Справочники.МобильныеНомераСотрудников.СоздатьЭлемент();


Если Справочники.МобильныеНомераСотрудников.НайтиПоНаименованию(ТабСтр.НомерТелефона).Пустая() Тогда


СправМоб.Наименование = ТабСтр.НомерТелефона;
СправМоб.НомерКонтракта = ТабСтр.НомерКонтракта;
СправМоб.ТарифнийПлан = ТабСтр.ТарифнийПлан;
СправМоб.Записать();

КонецЕсли ;
КонецЦикла;
КонецПроцедуры



Спасибо.

Bernet Подменю пользователя
сообщение 11.05.20, 14:25
Сообщение #2

Ветеран
Иконка группы
Группа: Местный
Сообщений: 858
Из: Місто щасливих людей
Спасибо сказали: 317 раз
Рейтинг: 0

jojojoba2 @ Сегодня, 14:44 * ,
раз нужно перезаполнить существующую таблицу, то делай поиск нужной строки таб части и корректируй те колонки которые тебе нужны
пример:
СтрокаТабЧасти = Объект.Номера.Найти(Значение, "ИмяКолонкиПоКоторойПоиск");
Если СтрокаТабЧасти <> Неопределено Тогда
   СтрокаТабЧасти.ИмяКолонки1 = ...;
   СтрокаТабЧасти.ИмяКолонки3 = ...;   // колонка № 2 пропущена, соответственно перезаполнена не будет
   СтрокаТабЧасти.ИмяКолонкиN = ...;
КонецЕсли;


Сообщение отредактировал Bernet - 11.05.20, 14:25


Signature
Дописываю конфигурации на платформе 8.х.
- Управление торговым предприятием для Украины
- Управление производственным предприятием для Украины
- Управление небольшой фирмой для Украины
- Бухгалтерия для Украины;
- Общепит для Украины
- Ресторан (Рарус)
- Розница

jojojoba2 Подменю пользователя
сообщение 11.05.20, 14:47
Сообщение #3

Говорящий
***
Группа: Пользователи
Сообщений: 56
Спасибо сказали: 0 раз
Рейтинг: 0

Bernet @ Сегодня, 15:25 * ,

Спасибо.

Bernet @ Сегодня, 15:25 * ,

СтрокаТабЧасти = Объект.Номера.Найти(Значение, "ИмяКолонкиПоКоторойПоиск");

Значение брать с перемменных перебора по теккстовому файлу : "тел","Абонплата","ЗНИЖКИ","ТекСумма":

СтрокаТабЧасти = Объект.Номера.Найти(тел, "ИмяКолонкиПоКоторойПоиск"); ? или может сравнивать с пустым значением(0)?

Спасибо.

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 28.03.24, 19:37
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!