Загрузка из табличного документа в документ Операция (бухгалтерская)
Доброго времени суток, уважаемые участники форума! Пожалуйста помогите советом.
Возникла необходимость создать документ Операция (бухгалтерская) и заполнить его движениями, которые хранятся в табличном документе. Простым копированием-вставкой дело не решается :)
Универсальная загрузка с помощью обработки "Загрузка данных из табличного документа" не подошла, ибо обработка неправильно определяет колонки.
Думала создавать записи программно, использовала ТабличныйДокумент.Прочитать() и построчно обходила его циклом. Но у заголовков сложная структура, не получается правильно прочитать :(
Возможно, есть другие способы решения задачи? Буду признательна, если подскажете! :)
P.S. 1С 8.3, конфигурация "Бухгалтерия государственного учреждения 1.0", обычные формы.
Возникла необходимость создать документ Операция (бухгалтерская) и заполнить его движениями, которые хранятся в табличном документе. Простым копированием-вставкой дело не решается :)
Универсальная загрузка с помощью обработки "Загрузка данных из табличного документа" не подошла, ибо обработка неправильно определяет колонки.
Думала создавать записи программно, использовала ТабличныйДокумент.Прочитать() и построчно обходила его циклом. Но у заголовков сложная структура, не получается правильно прочитать :(
Возможно, есть другие способы решения задачи? Буду признательна, если подскажете! :)
P.S. 1С 8.3, конфигурация "Бухгалтерия государственного учреждения 1.0", обычные формы.
По теме из базы знаний
- Загрузка данных из табличного документа в документ «Операция» (управляемые формы)
- Загрузка чеков ФНС в документы 1С:БП, 1С:УНФ, 1С:ERP, 1С:КА и 1С:УТ
- Загрузка документов Операция из mxl таблицы
- Загрузка банковской выписки для 1С 7.7 любой конфигурации
- Переход с УПП на ERP с сохранением документов. Фантастика или реальность?
Найденные решения
(11)через ПостроительОтчета работать не будет, вернее будет, но будет чушь в итоге.
Структура хранения данных в ТабДоке уже задана: одна проводка вместо 1 строки занимает 3 и значения субконто 2/3/4 представлены одним строковым значением с каким-то разделителем.
Вот с эти учетом вам необходимо циклом обойти весь ТабДок и сформировать ТЗ, в которой каждая проводка будет занимать 1 строку, а не 3.
что-то вроде такого:
Дальше делаете что-то вроде:
Значения субконто придется устанавливать "вручную" кодом что-то вроде:
Структура хранения данных в ТабДоке уже задана: одна проводка вместо 1 строки занимает 3 и значения субконто 2/3/4 представлены одним строковым значением с каким-то разделителем.
Вот с эти учетом вам необходимо циклом обойти весь ТабДок и сформировать ТЗ, в которой каждая проводка будет занимать 1 строку, а не 3.
что-то вроде такого:
Для Строка = 1 ПО КоличествоСтрок Цикл
НСтр = ТЗ.Добавить();
Для Колонка 1 По КоличествоКолонок Цикл
НСтр[Колонка - 1] = ТабДок.Область(Строка, Колонка).Текст;
КонецЦикла;
КонецЦикла;
Дальше делаете что-то вроде:
НЗ = РегистрыБухгалтерии.<НужныйРегистр>.СоздатьНаборЗаписей();
НЗ.Отбор.Регистратор.Установить(СсылкаНаДокументОперацияБух);
НЗ.Загрузить(ТЗ);
НЗ.Записать();
Значения субконто придется устанавливать "вручную" кодом что-то вроде:
Для Каждого Стр ИЗ НЗ Цикл
НЗ.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.БанковскиеСчета] = ТЗ[ИндексСтрок][КолонкаСоЗначениемСубконто];
КонецЦикла;
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(8)а попросить заново сформировать в нужном виде тоже никак?
в таком случае только самостоятельное написание обработки загрузки данных спасет.
ТабличныйДокумент.Прочитать() - вы прочитали данные в ТабДок.
Дальше циклом его обходите и формируйте ТЗ с учетом структуры хранения данных в полученном ТабДок.
Далее загрузите ТЗ в НаборЗаписей нужного регистра бухгалтерии и собственно все.
в таком случае только самостоятельное написание обработки загрузки данных спасет.
ТабличныйДокумент.Прочитать() - вы прочитали данные в ТабДок.
Дальше циклом его обходите и формируйте ТЗ с учетом структуры хранения данных в полученном ТабДок.
Далее загрузите ТЗ в НаборЗаписей нужного регистра бухгалтерии и собственно все.
(9) Если я верно поняла вашу мысль, то примерно как-то так должно выглядеть? И не совсем понятно, как задавать структуру хранения данных.
ТабДок = Новый ТабличныйДокумент;
ПутьКФайлу = "C:\doc.mxl";
Попытка
ТабДок.Прочитать(ПутьКФайлу, СпособЧтенияЗначенийТабличногоДокумента.Значение);
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не удалось прочитать указанный файл по причине: " + ОписаниеОшибки();
Сообщение.Сообщить();
КонецПопытки;
ПоследняяСтрока = ТабДок.ВысотаТаблицы;
ПоследняяКолонка = ТабДок.ШиринаТаблицы;
ОбластьЯчеек = ТабДок.Область(1, 1, ПоследняяСтрока, ПоследняяКолонка);
// Где-то здесь задаётся структура?
ИсточникДанных = Новый ОписаниеИсточникаДанных(ОбластьЯчеек);
ПостроительОтчета = Новый ПостроительОтчета;
ПостроительОтчета.ИсточникДанных = ИсточникДанных;
ПостроительОтчета.Выполнить();
ТабЗначений = ПостроительОтчета.Результат.Выгрузить();
ДокОперация = Документы.ОперацияБух.СоздатьДокумент();
ДокОперация.Записать();
НаборЗаписей = РегистрыСведений.РС.СоздатьНаборЗаписей();
Для каждого ИсточникДанных из ТабЗначений цикл
НоваяЗапись = НаборЗаписей.Добавить()
ЗаполнитьЗначенияСвойств(НоваяЗапись, ИсточникДанных);
НоваяЗапись.Регистратор = ДокОперация.Ссылка;
КонецЦикла;
НаборЗаписей.Записать();
Показать
(11)через ПостроительОтчета работать не будет, вернее будет, но будет чушь в итоге.
Структура хранения данных в ТабДоке уже задана: одна проводка вместо 1 строки занимает 3 и значения субконто 2/3/4 представлены одним строковым значением с каким-то разделителем.
Вот с эти учетом вам необходимо циклом обойти весь ТабДок и сформировать ТЗ, в которой каждая проводка будет занимать 1 строку, а не 3.
что-то вроде такого:
Дальше делаете что-то вроде:
Значения субконто придется устанавливать "вручную" кодом что-то вроде:
Структура хранения данных в ТабДоке уже задана: одна проводка вместо 1 строки занимает 3 и значения субконто 2/3/4 представлены одним строковым значением с каким-то разделителем.
Вот с эти учетом вам необходимо циклом обойти весь ТабДок и сформировать ТЗ, в которой каждая проводка будет занимать 1 строку, а не 3.
что-то вроде такого:
Для Строка = 1 ПО КоличествоСтрок Цикл
НСтр = ТЗ.Добавить();
Для Колонка 1 По КоличествоКолонок Цикл
НСтр[Колонка - 1] = ТабДок.Область(Строка, Колонка).Текст;
КонецЦикла;
КонецЦикла;
Дальше делаете что-то вроде:
НЗ = РегистрыБухгалтерии.<НужныйРегистр>.СоздатьНаборЗаписей();
НЗ.Отбор.Регистратор.Установить(СсылкаНаДокументОперацияБух);
НЗ.Загрузить(ТЗ);
НЗ.Записать();
Значения субконто придется устанавливать "вручную" кодом что-то вроде:
Для Каждого Стр ИЗ НЗ Цикл
НЗ.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.БанковскиеСчета] = ТЗ[ИндексСтрок][КолонкаСоЗначениемСубконто];
КонецЦикла;
(17) Попробовала. Отлаживала по шагам, первая строка заголовков обрабатывается замечательно, но пока не могу сообразить, как обрабатывать остальные три строки с субконто. Был бы документ с заголовками одной строкой, проблем бы не было, но тут де-факто 1 движение занимает 4 строки табличного документа.
КоличествоСтрок = ТабДок.ВысотаТаблицы;
КоличествоКолонок = ТабДок.ШиринаТаблицы;
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Вставить(1, "КФО");
ТЗ.Колонки.Вставить(2, "ДтКПС");
ТЗ.Колонки.Вставить(3, "ДтСчет");
ТЗ.Колонки.Вставить(4, "КтКПС");
ТЗ.Колонки.Вставить(5, "КтСчет");
ТЗ.Колонки.Вставить(6, "ДтКоличество");
ТЗ.Колонки.Вставить(7, "КтКоличество");
ТЗ.Колонки.Вставить(8, "Сумма");
ТЗ.Колонки.Вставить(9, "Содержание");
ТЗ.Колонки.Вставить(10, "ПервичныйДокумент");
Для Строка = 5 ПО КоличествоСтрок Цикл
НСтр = ТЗ.Добавить();
Для Колонка = 2 По КоличествоКолонок Цикл
НСтр[Колонка-2] = ТабДок.ПолучитьОбласть("R" + Формат(Строка, "ЧГ=0") + "C" + Формат(Колонка, "ЧГ=0")).ТекущаяОбласть.Текст;
КонецЦикла;
//Строка = Строка + 3;
КонецЦикла;
Показать
(18) Как-то так:
СписокКолонокСАналитикой = Новый Соответствие;//содержит соответствие индекса колонки ТЗ номеру колонки ТабДока
СписокКолонокСАналитикой.Вставить(2, 4);
СписокКолонокСАналитикой.Вставить(5, 7);
Для Строка = 5 ПО КоличествоСтрок Цикл
НСтр = ТЗ.Добавить();
Для СтрокаСубконто = Строка По Строка + 3 Цикл
Для Каждого Элемент ИЗ СписокКолонокСАналитикой Цикл
НСтр[Элемент.Ключ + (СтрокаСубконто - Строка)] = ТабДок.Область(СтрокаСубконто, Элемент.Значение).Текст;
КонецЦикла;
КонецЦикла;
Строка = Строка + 3;
КонецЦикла;
Показать
Лично я делал так: создавал кнопку на форме, открывал ввод строки, копипастил из экселя в строку, дальше Для Каждого Строка ИЗ СтрРазделить(Текст, Символы.ПС)...Для Каждого Колонка ИЗ СтрРазделить(Строка, Символы.ТАБ)... Дальше уже парсил соответствующую колонку: Запись.СчетКт = ПланыСчетов.ХХХ.НайтиПоКоду(Колонка);...
В общем в части кода все очень просто обычно.
В общем в части кода все очень просто обычно.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот