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

Как выгрузить инфу в ТЧ Документа из Excel

Автор Nosferatu112, 30 янв 2023, 16:19

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

Nosferatu112

Максим75, С этой строкой ни чего не меняеться он просто проскакивает эту часть кода((
Считает на Сервере потом эта функция вызываеться на клиенте

Максим75

Цитата: Nosferatu112 от 30 янв 2023, 17:39Максим75, С этой строкой ни чего не меняеться он просто проскакивает эту часть кода((
Считает на Сервере потом эта функция вызываеться на клиенте
да на каком клиенте? в серверную процедуру запихнуть, где документ создается.

&НаКлиенте
Процедура СоздатьДокумент(Команда)
    СоздатьДокументНаСервере();
    ОткрытьЗначение(СоздатьДокументНаСервере());
КонецПроцедуры
&НаСервере
Функция СоздатьДокументНаСервере()
   
       
    Попытка
        НовыйДокумент = Документы.ПриобретениеТоваровУслуг.СоздатьДокумент();

        НовыйДокумент.Организация = Объект.Организация;
        НовыйДокумент.Контрагент = Объект.Поставщик;
        НовыйДокумент.Договор = Объект.Договор;
        НовыйДокумент.Склад = Объект.Склад;
        НовыйДокумент.Дата = ТекущаяДата();

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


        НовыйДокумент.Записать();
        Сообщить("Документ по успешно создан");
        Возврат НовыйДокумент.Ссылка;
       
    Исключение
        Сообщить("Не удалось создать документ  ");
    КонецПопытки;
   
КонецФункции

Заменить только Имя табличной части документа на нужное имя табличной части, как в конфигураторе задано.

Nosferatu112

Максим75, Я может не правильно объяснил у меня всё в точности как у вас в коде просто часть кода с выгрузкой в ТЧ проскакивает

Максим75

Nosferatu112, было так, да не так, посмотрите, какой код Вы мне слали, и какой я выслал. Ну не суть..
ЧТо значит проскакивает?
В цикл заходит или нет?
Поставьте в цикле таблице значений сообщение пользователю любое, хоть Сообщить("ку-ку").
И посмотрите, выводит, если да - то сколько раз (столько, сколько строк в таблице ДанныеФайла.

За точку останова слышали? Можете поставить и посмотреть, что где и почем?

antoneus

&НаКлиенте
Процедура СоздатьДокумент(Команда)
    СоздатьДокументНаСервере();
    ОткрытьЗначение(СоздатьДокументНаСервере());
КонецПроцедуры

Кстати, а зачем создавать два одинаковых документа?

Максим75

Цитата: antoneus от 31 янв 2023, 11:58&НаКлиенте
Процедура СоздатьДокумент(Команда)
    СоздатьДокументНаСервере();
    ОткрытьЗначение(СоздатьДокументНаСервере());
КонецПроцедуры

Кстати, а зачем создавать два одинаковых документа?
я даже еще туда и не смотрел.
код видимо взят откуда-то, потому как загрузка файла сделана по всем правилам, через хранилище. многие тупо пытались бы на серваке влоб грузить, а здесь нет, все четенько.

Nosferatu112

Максим75, Всё решил задачу сам затупил не то имя ТЧ указал всё работает
&НаКлиенте
Процедура ПутьКФайлуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

Проводник = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Проводник.Заголовок = "Выберите файл с данными";

Если Объект.ФорматФайла = "TXT" Тогда
фильтр = "Текстовый документ (*.txt)|*.txt";
ИначеЕсли Объект.ФорматФайла = "CSV" Тогда
фильтр = "Текстовый документ (*.csv)|*.csv";
ИначеЕсли Объект.ФорматФайла = "XLSX" Тогда
фильтр = "Файл Excel (*.xlsx)|*.xlsx";
ИначеЕсли Объект.ФорматФайла = "XLS" Тогда
фильтр = "Файл Excel (*.xls)|*.xls";
ИначеЕсли Объект.ФорматФайла = "DBF" Тогда
фильтр = "Таблица DBF (*.dbf)|*.dbf";
ИначеЕсли Объект.ФорматФайла = "XML" Тогда
фильтр = "XML-Файл (*.xml)|*.xml";
Иначе
Возврат;
КонецЕсли;

Проводник.Фильтр = Фильтр;

Оповещение = Новый ОписаниеОповещения("ПослеВыбораФайла", ЭтотОбъект);
Проводник.Показать(Оповещение);

КонецПроцедуры
&НаКлиенте
Процедура ПослеВыбораФайла(ВыбраныеФайлы, ДополнительныеПараметры) Экспорт

Если ВыбраныеФайлы = Неопределено Тогда
Возврат;
КонецЕсли;

Объект.ПутьКФайлу = ВыбраныеФайлы[0];

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

&НаКлиенте
Процедура ПрочитатьФайл(Команда)

Объект.ДанныеФайла.Очистить();
Если Объект.ФорматФайла = "XLSX" Тогда
ПрочитатьФайл_XLSX();
КонецЕсли;

КонецПроцедуры
&НаКлиенте
Процедура ПрочитатьФайл_XLSX()

ДанныеФайла = Новый ДвоичныеДанные(Объект.ПутьКФайлу);
АдресДанных = ПоместитьВоВременноеХранилище(ДанныеФайла);
ПрочитатьФайл_XLSX_НаСервере(АдресДанных);

КонецПроцедуры
&НаСервере
Процедура ПрочитатьФайл_XLSX_НаСервере(АдресДанных) Экспорт

ТабДок = Новый ТабличныйДокумент;

Данные = ПолучитьИзВременногоХранилища(АдресДанных);
ПутьКФайлуНаСервере = ПолучитьИмяВременногоФайла("xlsx");
Данные.Записать(ПутьКФайлуНаСервере);

Попытка
ТабДок.Прочитать(ПутьКФайлуНаСервере, СпособЧтенияЗначенийТабличногоДокумента.Значение);
Исключение

Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не удалось прочитать указаный файл по причине: " + ОписаниеОшибки();
Сообщение.Сообщить();
Возврат;

КонецПопытки;

КоличествоСтрок = ТабДок.ВысотаТаблицы;

Для НомерСтроки = 2 По КоличествоСтрок Цикл
СтрокаДанных = Объект.ДанныеФайла.Добавить();
СтрокаДанных.Номенклатура = ТабДок.ПолучитьОбласть("R" + Формат(НомерСтроки, "ЧГ=0") + "C" + 1).ТекущаяОбласть.Текст;
СтрокаДанных.Количество = ТабДок.ПолучитьОбласть("R" + Формат(НомерСтроки, "ЧГ=0") + "C" + 2).ТекущаяОбласть.Текст;
СтрокаДанных.ЕдиницыИзмерения = ТабДок.ПолучитьОбласть("R" + Формат(НомерСтроки, "ЧГ=0") + "C" + 3).ТекущаяОбласть.Текст;
СтрокаДанных.Цена = ТабДок.ПолучитьОбласть("R" + Формат(НомерСтроки, "ЧГ=0") + "C" + 4).ТекущаяОбласть.Текст;
КонецЦикла;

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


Функция ЗависимыеРеквизиты()

Возврат Новый Структура("Сумма, СуммаНДС, СуммаСНДС, СуммаРучнойСкидки")

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

&НаКлиенте
Процедура СоздатьДокумент(Команда)
СоздатьДокументНаСервере();
ОткрытьЗначение(СоздатьДокументНаСервере());
КонецПроцедуры
&НаСервере
Функция СоздатьДокументНаСервере()


Попытка
НовыйДокумент = Документы.ПриобретениеТоваровУслуг.СоздатьДокумент();

НовыйДокумент.Организация = Объект.Организация;
НовыйДокумент.Контрагент = Объект.Поставщик;
НовыйДокумент.Договор = Объект.Договор;
НовыйДокумент.Склад = Объект.Склад;
    НовыйДокумент.Дата = ТекущаяДата();

СтруктураПересчетаСуммы = ОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(НовыйДокумент);

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



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

ОбработкаТабличнойЧастиСервер.ОбработатьСтрокуТЧ(СтрокаДок, СтруктураДействий, Неопределено)
        КонецЦикла;


НовыйДокумент.Записать();
Сообщить("Документ успешно создан");
Возврат НовыйДокумент.Ссылка;
   
Исключение
Сообщить("Не удалось создать документ");
КонецПопытки;

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

На прямую не получиться у меня клиентсерверная база например без загрузки в хранилище файл не читаеться excelый. Премного благодарен за помощь

Максим75


Теги:

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

Рейтинг@Mail.ru

Поиск