Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > 1C: Предприятие, SAP, ERP и учётные системы > Таблица значений |
Автор: Strucka 26.8.2007, 17:10 | ||
У меня такая вот проблемка. Мне нужно пройтись по документами и записать инфу в ТЗ. Я написал такую процедурку
по идее я вызываю её после того, как оперделяю , что я получил нужный документ. Так как метод выгрузить в ТЗ её перезаписывает. Так вот я вызываю этот метод следующим образом. Я где то в модуле определяю Тз.новаястрока(1); тмп=Тз.количествоСтрок(); а потом процедурой этой мне по идее переменная тмп накапливается. У мня вроде бы получилось и обработа работает, если не заданы доп. условия. А вот если заданы , то начинаются проблемы. Проблемы скорее всего в условии или в процедурке этой? |
Автор: Strucka 26.8.2007, 20:51 |
Будет ли та процедура ,которую я описал выше работать правильно , если я буду вызывать её для тех документов, которые удовлетворяют условию? Условие значение не имеет. Важно , что я отбираю документ по какому-нибудь признаку, например по времени создания и заношу информацию табличной части в ТЗ. |
Автор: Zero 26.8.2007, 21:26 | ||
Условия бывают разный, и во многих случаях они значения имеют. В данном случае нужно смотреть, на то каким образом будешь производить этот самый отбор документов. А вобще, я бы твоё процедурку немного бы переделал так:
Вроде так должно работать будет... ![]() Навскидку больше телепатическими способностями сказаь неполучиться. Если какие-то проблемы будут взникать, тогда пиши и поподробнее описывай проблему Добавлено через 5 минут и 43 секунды Ещё, как ты вызываешь данную процедуру. Меня интересует как ты указываешь параметры при её вызове? PS: я думаю тебе нужно процедуру, чтобы небыло входного параметра "НомерПозиции", он у тебя менятся при выполнении процедуры, и при выходе из процедуры уничтожаеться деструктором. А при вызове процедуры для переноса строк уже из второго документа, могут возникнуть глюки, если третий параметр будет не так указан. Который вообще и ненужен. Привижи лучше позицыю таблицы к количеству строк в таблице, по идеи это количество должно совпадать с этим самым номером позиции. ![]() Добавлено через 14 минут и 2 секунды СТОП!!! ![]() А есть же у документа метод: ВыгрузитьТабличнуюЧасть(<ТаблЗнач>,<Колонки>), и в свою очередь у таблицы значений есть метод Выгрузить(<Знач>,<НачСтрока>,<КонСтрока>,<Колонки>), который можно использовать для заполнения главной твоей таблицы из временной, куда данные поступают из документа. |
Автор: Strucka 26.8.2007, 21:44 | ||
именно для этого я и сделал так , чтобы процедура изменяла это значение. Дело в том , что мне нужно проверить множество условий (если конечный юзверь их указывает) и каждый раз когда я должен буду записать данные из документа я должен знать количество строк, которое уже есть в ТЗ (поэтому я решил не вызывать каждый раз номерпоз=Тз.количествострок(); перед вызовом процедуры, а инициализировать этот параметр(номерпозиции) перед циклом (отбор документов по дате), а далее изменять его в зависимости от того ,сколько данных записываем) и с помощью процедуры дописывать её. Все условия, которые я проверяю являются атрибутами шапки документа (т.е сравниваю атрибуты шапки с данными выбранными юзверем). Так что с этой стороны проблема может быть только в том, что я напортачил с описанием этих условий в самом 1с. Пока вариант условий которые надо проверить выглядит так(в моем исполнении 8))
Думаю теперь понятно почему я не стал писать весь текст с самого начала 8)))) Я думаю там можно кусок проверок убрать. Буду завтра на работе этим заниматься. |
Автор: Strucka 26.8.2007, 22:00 |
А есть же у документа метод: ВыгрузитьТабличнуюЧасть(<ТаблЗнач>,<Колонки>), и в свою очередь у таблицы значений есть метод Выгрузить(<Знач>,<НачСтрока>,<КонСтрока>,<Колонки>), который можно использовать для заполнения главной твоей таблицы из временной, куда данные поступают из документа. Попробую завтра заменить процедурку на это, в принципе должно работать. |
Автор: Strucka 28.8.2007, 17:37 |
короче решил все, все условия выполняются верно. Сделал отчет , но делал его ручками, т.е вообще без секций. Все приняли, но сказали на ка тебе для общего развития задачку переделать отчет следующим образом. 1) чтобы все было с секциями Сделал А потом дали задание посложнее: Сделать отчет разбитым на отдельные части. Т.е элементы которые я вывожу в справочнике являются элементами различных групп. И мне нужно вывести теперь все элементы разбив их по группам. Я приступил к выполнению и наткнулся на загвоздку еще до начала переделки таблицы отчета. Значит так воть: есть список значений, в котором находятся группы , которые есть в справочнике (именно объект хранится в списке). Как организовать проверку из многострочной части документа (в ней хранится элемент типа справночник), такую , чтобы была проверена принадлежность элемента мнгстр. части документа к группе, записанной в спискезн. и возвратить позицию совпавшей группы из списка? Так я хочу сделать чтобы заполнить колонку, которую я завел в тз. В колонке должно находится название Группы для текущего элемента. |
Автор: Zero 28.8.2007, 18:49 |
1 топик = 1 вопрос ![]() |
Автор: Strucka 29.8.2007, 16:43 |
дык это к этой задаче относится просто 8) Да и сделал уже 8) Правда я так и не понял почему при помещении в список значений элемент отказывался сравниватьс потом. Но я сделал забив в список наименования групп, так все вышло 8) |
Автор: danich 3.9.2007, 07:52 |
Процедура ЗаполнитьТЗ(ТЗ,знач док) Если ПустоеЗначение(док)=1 тогда Врзврат; КонецЕсли; Дк = СоздатьОбъект("Документ.Перемещение"); Дк.НайтиДокумент(Док); дк.ВыбратьСтроки(); Пока дк.получитьстроку()>0 Цикл тз.Новаястрока(); НомерПозиции=тз.КоличествоСтрок(); тз.УстановитьЗначение(НомерПозиции, 1, дк.товар.наименование); тз.УстановитьЗначение(НомерПозиции, 2, дк.Количество); тз.УстановитьЗначение(НомерПозиции, 4, дк.Цена); тз.УстановитьЗначение(НомерПозиции, 3, дк.Сумма); тз.УстановитьЗначение(НомерПозиции, 5, дк.Единица.наименование); КонецЦикла; КонецПроцедуры убрать лишние переменные, которве неизвестно где переопределяются |