Никак не могу достичь цели. Вкратце нужно из ТЗ в табличную часть нового документа или уже существующего загрузить информацию. При этом не исключена повторная загрузка с исключением ранее загруженной информации. В ТЗ грубо говоря есть строки, 1 колонка - Менеджер, 2 - Идентификатор. 3 - число. В колонке Менеджер данные могут быть разные, в колонке Идентифкатор - данные разные. Нужно Взять Менеджера, проверить есть ли документ для него, если нет - создать и дальше заполнить табличную часть идентифкатором из второй колонки и числом из третьей. И так для каждой строки ТЗ. Есть код: Код: таб.ВыбратьСтроки(); // таб - заполенная ТЗ с информацией Пока таб.ПолучитьСтроку() = 1 Цикл локОтчет= ""; тмпОтчет = СоздатьОбъект("Документ.Отчет"); тмпОтчет.ВыбратьДокументы(ДатаСоздания,ДатаСоздания); Пока тмпОтчет.ПолучитьДокумент() = 1 Цикл Если тмпОтчет.Менеджер = таб.Менеджер Тогда локОтчет= тмпОтчет; Прервать; КонецЕсли; КонецЦикла; Если локОтчет= "" Тогда //если не существует документа - создаем новый локОтчет= СоздатьОбъект("Документ.Отчет"); локОтчет.Новый(); локОтчет.НоваяСтрока(); //дальше заполняем первую строку документа информацией Иначе //документ уже существует локОтчет.ВыбратьСтроки(); Пока локОтчет.ПолучитьСтроку()=1 Цикл Если Число(локОтчет.Идентификатор)=СокрЛП(таб.Идентификатор) Тогда //проверяем нет ли в существующем документе строки с информацией которую загрузили ранее Продолжить; //если есть возвращаемся в начало цикла и смотрим на следующую строку КонецЕсли; локОтчет.НоваяСтрока(); //дальше заполняем строку документа информацией КонецЦикла; КонецЕсли; КонецЦикла в итоге при первичной загрузке информации из ТЗ документы создаются и заполняются, а при повторной загрузке - вся информация задваивается. Как избежать задвоения? Заранее благодарен!
заменил на Число(локОтчет.Идентификатор)=Число(таб.Идентификатор) ситуация не поменялась.. смотрю в отладчике - загвоздка в том, что в цикле Пока таб.ПолучитьСтроку() = 1 Цикл я получаю таб.Идентифкатор - "1000", и дальше в цикле Пока локОтчет.ПолучитьСтроку()=1 Цикл сравниваю его с локОтчет.Идентификатор "1000", в следующей строке с локОтчет.Идентификатор "1001", и тут и добавляется задвоенная строка! как вернуться к началу первого цикла Пока таб.ПолучитьСтроку() = 1 Цикл? Где влепить возврат?
у вас тут ошибка Код: Иначе //документ уже существует локОтчет.ВыбратьСтроки(); Пока локОтчет.ПолучитьСтроку()=1 Цикл надо Код: Иначе //документ уже существует тмпОтчет.ВыбратьСтроки(); Пока тмпОтчет.ПолучитьСтроку()=1 Цикл
Здравствуйте. Сделайте новую переменную (как, например, уже имеющийся локОтчет) признаком того, что нужная строка в документе уже есть, и на выходе из цикла по строкам документа добавляйте в него при необходимости новую строку. Это произойдет только один раз для текущей строки таблицы.
Возможно. Но тогда нужно прерывать цикл, а не продолжать его. Так? То есть, если нашли нужный идентификатор в строках документа, то зачем смотреть дальше и тем более создавать новую строку с этим же идентификатором.
Тут я с вами согласен... Но вы читали описание в перво посте? Я не уверен что автору удалось до конца выразить мысль