|
Загрузка данных из табличного документа | ☑ | ||
---|---|---|---|---|
0
Dark_Warrior
18.03.13
✎
08:30
|
Всем доброго времени суток. Подскажите, пожалуйста, с обработкой "Загрузка данных из табличного документа" - я не пойму как заполнить в готовом документе пару колонок, не трогая остальные.
|
|||
1
Dark_Warrior
18.03.13
✎
09:15
|
товарищи знатоки, откликнитесь! очень нужна ваша помощь
|
|||
2
cw014
18.03.13
✎
09:17
|
Никак, перед заполнением он очищает таблицу
|
|||
3
Dark_Warrior
18.03.13
✎
10:10
|
(2) пытаюсь сделать так, чтобы ТЧ документа не очищалась, и новые значения заменяли текущие. С языком знаком очень слабо, пока смог только убрать очищение ТЧ документа (теперь добавляются новые строки в конец ТЧ). Подскажите пожалуйста, какой участок кода подкорректировать чтобы не добавлялись новые строки, а менялось значение ячейки в текущей?
РежимЗагрузки - 2 ОчиститьСообщения(); Сообщить("Выполняется загрузка"+ ТекстВопросаИсточника, СтатусСообщения.Информация); Сообщить("Всего: " + КоличествоЭлементов, СтатусСообщения.Информация); Сообщить("---------------------------------------------", СтатусСообщения.БезСтатуса); Индикатор.Значение = 0; Индикатор.МаксимальноеЗначение = КоличествоЭлементов; Загружено = 0; Для К = ПерваяСтрокаДанныхТабличногоДокумента По ТабличныйДокумент.ВысотаТаблицы Цикл НомерТекущейСтроки = Индикатор.Значение + 1; ТекстыЯчеек = Неопределено; Отказ = Ложь; ТекущаяСтрока = КонтрольЗаполненияСтроки(ТабличныйДокумент, К, ТекстыЯчеек); Если РежимЗагрузки =0 Тогда Объект = Неопределено; Если Не Запрос = Неопределено Тогда СтрокаОшибок = ""; Для каждого СтрокаПоиска Из СтрокиПоиска Цикл ЗначениеРеквизита = Неопределено; ТекущаяСтрока.Свойство(СтрокаПоиска.ИмяРеквизита,ЗначениеРеквизита); Если ПустаяСтрока(ЗначениеРеквизита) Тогда СтрокаОшибок = ?(ПустаяСтрока(СтрокаОшибок),"",СтрокаОшибок + ", ") + СтрокаПоиска.ПредставлениеРеквизита; Иначе Запрос.УстановитьПараметр(СтрокаПоиска.ИмяРеквизита,ТекущаяСтрока[СтрокаПоиска.ИмяРеквизита]); КонецЕсли; КонецЦикла; Если Не ПустаяСтрока(СтрокаОшибок) Тогда Сообщить("Строка " + НомерТекущейСтроки + " не может быть записана.Не указано значение ключевых реквизитов: " + СтрокаОшибок,СтатусСообщения.Важное); Индикатор.Значение = Индикатор.Значение + 1; Продолжить; КонецЕсли; Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда Объект = Выборка.Ссылка.ПолучитьОбъект(); КонецЕсли; КонецЕсли; ОбъектНайден = Не Объект = Неопределено; Если Не ОбъектНайден Тогда Если НеСоздаватьНовыхЭлементов Тогда Индикатор.Значение = Индикатор.Значение + 1; Продолжить; Иначе Объект = Справочники[МетаданныеИсточника.Имя].СоздатьЭлемент(); КонецЕсли; КонецЕсли; ИначеЕсли РежимЗагрузки = 1 Тогда //Объект = Источник.Добавить(); ОбъектНайден = Ложь; ИначеЕсли РежимЗагрузки = 2 Тогда Объект = РегистрыСведений[МетаданныеИсточника.Имя].СоздатьМенеджерЗаписи(); Для каждого КлючИЗначение Из ТекущаяСтрока Цикл Если ИзмеренияРегистра.Свойство(КлючИЗначение.Ключ) Тогда Объект[КлючИЗначение.Ключ] = КлючИЗначение.Значение; КонецЕсли; КонецЦикла; Если Не ЗамещатьСуществующиеЗаписи Тогда Объект.Прочитать(); ОбъектНайден = Объект.Выбран(); Иначе ОбъектНайден = Ложь; КонецЕсли; КонецЕсли; Для каждого КлючИЗначение Из ТекущаяСтрока Цикл Если Не ОбъектНайден или Колонки[КлючИЗначение.Ключ].Пометка Тогда Попытка Объект[КлючИЗначение.Ключ] = КлючИЗначение.Значение; Исключение мСообщитьОбОшибке("Ошибка при установки значения реквизита """ + КлючИЗначение.Ключ + "" + ОписаниеОшибки()); Отказ = Истина; Прервать; КонецПопытки; КонецЕсли; КонецЦикла; Если РежимЗагрузки = 0 Тогда Если Не Отказ и ЗаписатьОбъект(Объект, ТекстыЯчеек) Тогда Сообщить(?(ОбъектНайден,"Изменен","Загружен") + " элемент справочника: " + Объект.ссылка, СтатусСообщения.Информация); Загружено = Загружено + 1; Иначе Сообщить("Объект не " + ?(ОбъектНайден,"изменен","загружен") + ". Элемент справочника: " + Объект + ".", СтатусСообщения.Важное); КонецЕсли; ИначеЕсли РежимЗагрузки = 1 Тогда Если Не ОбработатьСобытиеПослеДобавленияСтроки(ОбъектИсточника, Объект, ТекстыЯчеек) Тогда Отказ = Истина; КонецЕсли; Если Не Отказ Тогда Сообщить("Добавлена строка: " + (Загружено + 1)); Иначе Сообщить("При добавлении строки " + (Загружено + 1) + " возникли ошибки. "); ЗаписыватьОбъект = Ложь; КонецЕсли; Загружено = Загружено + 1; ИначеЕсли РежимЗагрузки = 2 Тогда Если Не Отказ и ЗаписатьОбъект(Объект, ТекстыЯчеек) Тогда Сообщить(?(ОбъектНайден,"Изменена","Добавлена") + " запись № " + НомерТекущейСтроки + "."); Загружено = Загружено + 1; Иначе Сообщить("Запись не " + ?(ОбъектНайден,"изменена","загружена") + ". № записи: " + НомерТекущейСтроки + ".", СтатусСообщения.Важное); КонецЕсли; КонецЕсли; Индикатор.Значение = Индикатор.Значение + 1; ОбработкаПрерыванияПользователя(); КонецЦикла; Сообщить("---------------------------------------------", СтатусСообщения.БезСтатуса); Если РежимЗагрузки = 1 Тогда Если ЗаписыватьОбъект и ЗаписатьОбъект(ОбъектИсточника) Тогда Сообщить("Выполнена загрузка"+ ТекстВопросаИсточника, СтатусСообщения.Информация); Сообщить("" +Загружено +" из "+ КоличествоЭлементов + " элементов.", СтатусСообщения.Информация); Возврат Истина; Иначе Сообщить("Объект не записан: " + Объект + ".", СтатусСообщения.Важное); Возврат Ложь; КонецЕсли; ИначеЕсли РежимЗагрузки = 0 Тогда Сообщить("Выполнена загрузка"+ ТекстВопросаИсточника, СтатусСообщения.Информация); Сообщить("" +Загружено +" из "+ КоличествоЭлементов + " элементов.", СтатусСообщения.Информация); Возврат Истина; ИначеЕсли РежимЗагрузки = 2 Тогда Сообщить("Выполнена загрузка"+ ТекстВопросаИсточника, СтатусСообщения.Информация); Сообщить("" +Загружено +" из "+ КоличествоЭлементов + " записей.", СтатусСообщения.Информация); Возврат Истина; КонецЕсли; Иначе Возврат Ложь; КонецЕсли; |
|||
4
cw014
18.03.13
✎
10:13
|
(3) Подсказываю: править весь участок кода.
А именно, определять, больше или меньше у тебя позиций, чем в документе. После этого вместо добавления получаешь строку ТЧ по индексу и ее меняешь. Если в твоей таблице строк больше - начинаешь после окончания ТЧ добавлять новые строки... В общем будь программистом |
|||
5
Dark_Warrior
18.03.13
✎
10:16
|
(4) количество строк одинаково
|
|||
6
Dark_Warrior
18.03.13
✎
10:17
|
После этого вместо добавления получаешь строку ТЧ по индексу и ее меняешь.
Можно немного поподробнее? |
|||
7
cw014
18.03.13
✎
10:18
|
(6) Нет, ибо в твоем коде (который ты запостил) этого куска нет.
(5) Это сейчас одинаково, а наступит день - и случайно оно окажется разным (этот день обязательно наступит, будешь ли ты на том рабочем месте или нет) |
|||
8
cw014
18.03.13
✎
10:18
|
(6) +(7) И никто переписывать за тебя обработку за бесплатно не будет
|
|||
9
Dark_Warrior
18.03.13
✎
10:22
|
(8) мне это нужно для одной конкретной задачи, и желательно побыстрее, поэтому я так суечусь.
я подозреваю что дело в ТекущаяСтрока = КонтрольЗаполненияСтроки(ТабличныйДокумент, К, ТекстыЯчеек); |
|||
10
cw014
18.03.13
✎
10:28
|
(9) Очень наврят ли
|
|||
11
cw014
18.03.13
✎
10:29
|
(9) Смотри в коде, пробегись отладчиком, совет тебе дали, причем практически досконально
|
|||
12
Dark_Warrior
18.03.13
✎
10:32
|
(11) а можно ли просто в цикле
Для К = ПерваяСтрокаДанныхТабличногоДокумента По ТабличныйДокумент.ВысотаТаблицы Цикл заменить эту кучу условий на кусочек кода, который просто построчно будет менять значение одной ячейки в строке? |
|||
13
cw014
18.03.13
✎
10:38
|
(12) Не знаю, можно или нет
|
|||
14
cw014
18.03.13
✎
10:38
|
(12) Пробуй
|
|||
15
Dark_Warrior
18.03.13
✎
10:42
|
(14) пытаюсь отладчиком найти момент когда добавляется новая строка. спасибо большое за помощь!
|
|||
16
Dark_Warrior
18.03.13
✎
11:08
|
(14) мб есть более простой способ? вообще, изначально задача стоит такая - в документе ввода нач. остатков заполнить поле "Сумма" в соответствии с числами из табличного документа.
|
|||
17
cw014
18.03.13
✎
11:10
|
(16) Напиши сам обработку
|
|||
18
Dark_Warrior
18.03.13
✎
11:12
|
(17) Правильные суммы показываются в отчете "Остатки ТМЦ" в 1с7. Может быть проще цеплять данные с семерки?
|
|||
19
cw014
18.03.13
✎
11:12
|
(18) Напишешь - будет проще
|
|||
20
Dark_Warrior
18.03.13
✎
11:13
|
(17) создать, к примеру, документ инвентаризации по складу и из него цеплять значения реквизитов
|
|||
21
Dark_Warrior
18.03.13
✎
11:14
|
(19) я не совсем представляю себе алгоритм ,по которому должна действовать эта обработка
|
|||
22
cw014
18.03.13
✎
11:15
|
(21) Посиди, подумай, представь... Все у тебя получится
|
|||
23
Dark_Warrior
18.03.13
✎
11:18
|
(22) Получиться должно, другого выхода нет - задание нужно сделать.
|
|||
24
cw014
18.03.13
✎
11:22
|
(23) Ну вот и хорошо
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |