![]() |
1С:Предприятие
:: 1С:Предприятие 8 общая
|
|
| ||
Juliette_Juliette 28.01.21 - 21:00 | Нужен совет, пишу обработку загрузки из Экселя табеля в зуп.
Хочется уйти от некрасивого кода перебора строк, видимо "доросла" ) Строки файла такие: Табельный номер1 | ВидВремени1число | ВидВремени2число | ВидВремени3число | Часы1число | Часы2число | Часы3число Табельный номер2 | ВидВремени1число | ВидВремени2число | ВидВремени3число | Часы1число | Часы2число | Часы3число Сейчас работает так Для ИндексТаблицы = 1 По ТЗ.Количество()-1 Цикл //пропускаем заголовок загруженного файла СтрокаВидаВремени = ТЗ[ИндексТаблицы]; СтрокаЧасов = ТЗ[ИндексТаблицы + 1]; ТабельныйНомерСотрудника = СтрокаВидаВремени["N" + КолонкаТН]; Если ТабельныйНомерСотрудника = "" Тогда //по логике достигли окончания данных Прервать; КонецЕсли; Сотрудник = Справочники.Сотрудники.НайтиПоКоду(ТабельныйНомерСотрудника); Если Сотрудник.Пустая() Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Не найден сотрудник с кодом: " + ТабельныйНомерСотрудника); ИндексТаблицы = ИндексТаблицы + 1; Продолжить; КонецЕсли; Для НомерДня = КолонкаПервыйДень По (КолонкаПервыйДень + (ДнейМесяца - 1)) Цикл КонецЦикла; ... считаю код неоптимальным. Как бы Вы обработали такой формат? | ||
polosov 1 - 28.01.21 - 21:09 | (0) В чем неоптимальность по-твоему? | ||
Juliette_Juliette 2 - 28.01.21 - 21:10 | Даже не так, начало оставляем, но как обработать СтрокаВидаВремени и СтрокаЧасов так, чтобы потом проще загрузить в Табель?
Например 237 | Я/Н | Я/Н | Я | | 8/4 | 8/4 | 8 |
Надо привести к таблице
Для явки: 237 Я8 Я8 Я8
Для ночных: 237 Н4 Н4 | ||
Juliette_Juliette 3 - 28.01.21 - 21:12 | не знаю как оптимально привести к формату таблицы ДанныеОВремени документа Табель Блин, воды много, не знаю, поймете или нет ( | ||
polosov 4 - 28.01.21 - 21:15 | (3) Пока не объяснишь, что тебе надо, тебе не помогут. | ||
Juliette_Juliette 5 - 28.01.21 - 21:22 | |||
МихаилМ 6 - 28.01.21 - 21:23 | перенесите строки в конец , либо прочитайте отдельно нечетные и четные строки.
учитесь мыслить множествами. проверяйте все множество сотрудников , а не по одному | ||
ReaLg 7 - 28.01.21 - 21:25 | (0) Сотрудник = Справочники.Сотрудники.НайтиПоКоду(ТабельныйНомерСотрудника);
Вот это вот - запрос в цикле.
Сначала сделай новую типизированную ТЗ, в которой нет ничего лишнего(проверки все, первая-последжняя строка и т.д), только "нормальные" строки с данными. Потом эту таблицу в запрос во временную таблицу. Потом соединяй со справочником по таб. номеру. Тогда не будет запроса в цикле :) | ||
polosov 8 - 28.01.21 - 21:25 | (7) Тут это не имеет значения. | ||
Juliette_Juliette 9 - 28.01.21 - 21:26 | (7) все верно, там каждая строка - отдельный сотрудник | ||
Juliette_Juliette 10 - 28.01.21 - 21:27 | (+9)т.е. каждая нечетная строка, в след строке нет сотрудника, там часы. но в коде есть перескок | ||
ДедМорроз 11 - 28.01.21 - 21:30 | Читаем Excel в массив ComSafeArray и потом по нему анализируем строки парами.
Далее,когда таблицу из строк собрали,можно переходить к поиску сотрудников. | ||
Йохохо 12 - 28.01.21 - 21:31 | зачем подшаг внутри цикла? | ||
Juliette_Juliette 13 - 28.01.21 - 21:33 | |||
Йохохо 14 - 28.01.21 - 21:37 | (13) внутри если вводит в заблуждение, шагайте по формату раз красоты хочется
если файл колбасят вручную не надо ничего оптимизировать, косяки ввода сложнее обработать | ||
Juliette_Juliette 15 - 28.01.21 - 21:44 | а как оптимальнее писать данные для множества?
допустим все 31 день вид времени Я/Н и часы 8/4 Надо перевести в таблицу с 2мя строками1: ВидВремени1 = Я|...|ВидВремени31 = Я|Часов1 = 8|...|Часов31 = 8| 2: ВидВремени1 = Н|...|ВидВремени31 = Н|Часов1 = 4|...|Часов31 = 4| вот собственно что необходимо Понимаем, что может быть и 3 вида времени, и 1 | ||
Juliette_Juliette 16 - 28.01.21 - 21:50 | пока решение только в лоб, найти максимальное количетсво элементов массива после преобразования Я/Н по всем строкам.
Это будет количество строк таблицы, создать ее с пустыми значениями Потом анализировать каждую ячейку и в зависимости от индекса массива писать в нужную строку ТЗ. Не громозко ли? | ||
Juliette_Juliette 17 - 28.01.21 - 21:51 | по всем строкам = по всем колонкам дней обрабатываемого сотрудника | ||
Йохохо 18 - 28.01.21 - 21:55 | СтруктураСтрокиВремени = Новый Структура(",,,,,,,,,... |
|
Список тем форума |