Вопрос скорости

1. Svetlana_E 5 16.07.20 11:01 Сейчас в теме
Задача.
Есть файл Excel и есть уже введенные документы(ввод начальных остатков) . Теперь надо в этих документах сменить определенные реквизиты, взяв их из полей файла. Связь документа и строки файла по 3-м реквизитам.
Количество записей в файле и количество документов совпадает и может быть от 1 тыс до 10тыс. Количество колонок в файле- 5
Вопросы:
1) Каким способом считать файл Excel: Через табличный документ, потом в ТаблицуЗначений; сразу в Таблицу, в Массив или еще как?
1) Что правильнее с точки зрения 1С:
- Перебирать загруженные записи и для них искать документ, корректировать его и записывать
или
- запросом получить сразу все документы, перебирать их, искать соответствие в загруженных записях, корректировать документы и записывать?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 76 16.07.20 11:06 Сейчас в теме
(1)Не зная других подробностей:
- читать файл с помощью Excel в таблицу значений
- с точки зрения производительности быстрее сразу найти все документы и нужные номера строк в их ТЧ, чтобы править только их.
alex-l19041; +1 Ответить
4. Svetlana_E 5 16.07.20 11:26 Сейчас в теме
(2) Спасибо :). А какие "подробности" могут повлиять на варианты?
13. nomad_irk 76 16.07.20 11:44 Сейчас в теме
(4)как пример: в файле "хитрое" форматирование из-за чего прочитать его весь сразу хоть и можно, но придется обработать результат, чтобы получилась сплошная таблица.
6. Sashares 35 16.07.20 11:31 Сейчас в теме
(1)Не очень понятно, почему вообще возник вопрос скорости?
Это же единоразовая задача.
То есть вообще не важно, как именно вы это будете делать.
Как умеете, так делайте.
8. Svetlana_E 5 16.07.20 11:33 Сейчас в теме
(6) Согласна. Неверно сформулировала. Скорее должно звучать: как правильнее, как корректнее. Просто хочу понять, как оптимальнее это делать. Не сделать сейчас, а вообще.
10. Sashares 35 16.07.20 11:37 Сейчас в теме
(8)Проще всего эксель прочитать в табличный документ стандартными средствами.
Потом уже обработать табличный документ и создать таблицу значений.
Таблицу значений передать в запрос и связать ее с документами ввода остатков по ключевым реквизитам.
Там же задать условие, что значение реквизитов таблицы не равно значениям реквизитов в документе, чтобы на выходе у вас были только документы, которые нужно изменить.
Обойти выборку и изменить реквизиты.
alex-l19041; +1 Ответить
14. Svetlana_E 5 16.07.20 11:48 Сейчас в теме
(10)
Там же задать условие, что значение реквизитов таблицы не равно значениям реквизитов в документе, чтобы на выходе у вас были только документы, которые нужно изменить.


Нет условия. соответствие должно быть однозначное строка Excel - Документ. Надо в каждом документе изменить в 2х табличных частях определенный реквизит. Все таблицы состоят из одной строки. Но это все равно таблицы :(((
18. Sashares 35 16.07.20 12:06 Сейчас в теме
(14)Соединиться с табличными частями в запросе тоже можно, тем более с первой строкой.
20. Svetlana_E 5 16.07.20 12:23 Сейчас в теме
(18) а можно пример (для "начинающей" )?

Допустим (упрощенно):
уже есть загруженная таблица ТЗ. и в ней, например, в первой и второй колонке Название ОС и ИнвентНомер, а в третьей - сумма амортизации

- Для каждого документа поиск строки по первым двум колонкам, а амортизацию надо записать в табличную часть(Стоимость.Амортизация) .

Как можно это сделать в запросе?

Предположим, что в табличной части всегда одна строка.
21. Sashares 35 16.07.20 12:33 Сейчас в теме
(20)
ВЫБРАТЬ
	ТЧ1.РеквизитТЧ1 КАК РеквизитТЧ1,
	ТЧ2.РеквизитТЧ2 КАК РеквизитТЧ2 ,
	Док.Ссылка КАК Ссылка
ИЗ
	Документ.МойДок КАК Док
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.МойДок .ТЧ1 КАК ТЧ1
		ПО (ТЧ1.Ссылка = Док.Ссылка
				И ТЧ1.НомерСтроки = 1)
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.МойДок .ТЧ2 КАК ТЧ2
		ПО (Док.Ссылка = ТЧ2.Ссылка
				И ТЧ2.НомерСтроки = 1)
Показать
3. zarankony 306 16.07.20 11:11 Сейчас в теме
https://infostart.ru/public/585055/ я здесь писал как быстрее всего. То есть в таблицу, запросом найти все документы, корректировать по одному или транзакцией.
5. Svetlana_E 5 16.07.20 11:27 Сейчас в теме
(3) Спасибо, для меня - очень познавательно :). Но смотрю, в комментариях тоже обсуждается вариант - загрузка через табличный документ...

Скачала, попробую.
7. zarankony 306 16.07.20 11:32 Сейчас в теме
(5) Ну табличный документ - это промежуточное звено перед таблицей значений.
9. Svetlana_E 5 16.07.20 11:34 Сейчас в теме
(7) да, это понятно. Но можно напрямую в таблицу, а можно в ТабДокумента, а из него в таблицу
11. zarankony 306 16.07.20 11:39 Сейчас в теме
(9) Напрямую - это как? Я вообще знаю 3 способа: com объект (не рекомендую), ado - отлично, но есть заморочки с формированием строки подключения (имя листа), и через табличный документ и ПостроительЗапроса - по мне так лучший способ, он в обработке реализован. Если напрямую - это через com, то это медленно(относительно остальных методов), глохнет на большом количестве строк и имеет кучу внешних зависимостей, что не годится для промышленного решения.
12. Svetlana_E 5 16.07.20 11:42 Сейчас в теме
15. nomad_irk 76 16.07.20 11:50 Сейчас в теме
(11)
Если напрямую - это через com, то это медленно(относительно остальных методов), глохнет на большом количестве строк и имеет кучу внешних зависимостей, что не годится для промышленного решения.


Вы не разобрались с COM, вот прямое тому доказательство.
17. zarankony 306 16.07.20 11:58 Сейчас в теме
(15)Может быть там есть метод который выдает данные в более менее готовом виде так же как ado и делает это быстро. Все равно com может зависнуть даже c displayalerts = 0 и надо следить чтобы у клиента на компе он вообще был.
19. nomad_irk 76 16.07.20 12:12 Сейчас в теме
(17)У MS Excel - есть. Range(FirstRow, FirstColumn, LastRow, LastColumn).Value выдает многомерный(по количеству колонок) массив. Для формирования ТЗ достаточно 1 раз пробежаться по одному из массивов, остальные массивы просто загружаются в колонки.

OpenOffice/LibreOffice так не умеют, вернее они выдают все тот же многомерный массив, но вся заковырка в том, что этот массив формируется по количеству строк, т.е. чтобы сформировать ТЗ, нужно будет пробежать по всем значениям этого массива, что равносильно загрузке табличного документа нативным 1с-ным методом ТабличныйДокумент.Прочитать().
16. Adrenal1n 3 16.07.20 11:51 Сейчас в теме
Вообще, если задача одноразовая и не потребуется делать ее повторно с другим файлом, то намного быстрее имхо будет создать макет в обработке и загрузить в него нужные колонки из excel просто копипастом, а потом в 5 строк кода из этого макета получить ТаблицуЗначений, таблицу значений запихать в запрос и в самом запросе уже все связать по текстовым полям, замеры, конечно, не делал, но этим способом конкретно у меня получается быстрее как в человекочасах так и по процессорному времени.
alex-l19041; +1 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот