Заполнение Документа на основании табличной части из формы #612853


#0 by Accountantrf
Добрый день! Решил попытаться автоматизировать свой труд, но возник вопросо, на которые не могу найти ответа в интернете. Описание проблеммы: Организация ежемесячно оказывает одинаковые услуги контрагентам. При этом контрагентов больше 100 и ежемесячное нажатие на кнопку "вставить копированием" существенно портит мою нервную систему. Описание обработки: Формирование списка документов ОказаниеУслуг за период - предыдущий месяц. Пользователь проставляет флажки напротив документов, которые надо скопировать в этом месяце. При нажатии на кнопку "Любую" создаются копированием выделенные документы. Вопрос возникшие на данный момент: Выгрузку необходимых данных в табличную часть формы я организовал, но теперь не под каким предлогом не могу заполнить документ, пробовал массу способов, найденных в интернете ни один не смог реализовать. Ниже приведен мой код. В части заполнения документа он не рабочий. Подскажиет пожалуйста в чем ошибка. Я только учусь =). &НаКлиенте
#1 by Maxus43
&НаСервере надо документы создавать-заполнять
#2 by Accountantrf
&НаСервере так же не дало результатов. Может быть я использую неправильный код. Подскажите пожалуйста или сдайте ссылку где пример почитать.
#3 by chelentano
наверное, не НовыйДокумент.Контрагент = Таблица.Контрагент, а НовыйДокумент.Контрагент = Строка.Контрагент; ?
#4 by chelentano
да и строку в таблицу добавить не мешало бы
#5 by Accountantrf
Форма имеет Таблицу значений как Таблица и колоники, указанной таблицы: Контрагент, сумма, дата, и пр... реквизиты для заполнения документа, в эти строки выгружаются запросом требуемые данные, после чего идет код на формирование нового документа и его заполнение: &НаСервере При таком варианте кода не происходи ровном счетом ничего, не выдает никаких ошибок и заодно не формирует документ. Если использовать такой код: КонецПроцедуры появляется сообщение при запусе обработки ошибка при вызове метода контекста: ФормаДокумента = НовыйДокумент.ПолучитьФорму("ФормаДокумента"); по причине Интерактивные операции недоступны. Если же использовать следующий код: &НаСервере То создаются документы, но в них заполнены поля Организация и Дата, при этом Контрагент и прочие поля упорно не заполняются. Перепробовав эти способы зашел в тупик, прошу вашей помощи. =)
#6 by PuhUfa
>>Пользователь проставляет флажки напротив документов, которые надо скопировать в этом месяце Ну тогда и копируй их просто. ДокументСсылка.<Имя документа> (DocumentRef.<Имя документа>) Скопировать (Copy) Синтаксис: Скопировать Возвращаемое значение: Тип: ДокументОбъект. Описание: Создает новый документ копированием существующего. Доступность: Сервер, толстый клиент, внешнее соединение. Примечание: Использование метода не приводит к записи созданного объекта в базу данных. Пример: Объект = ВыбДокумент.Скопировать;
#7 by Accountantrf
Пытаясь обработать документ командой Скопировать Пишу: &НаСервере КонецПроцедуры Выдает ошибку :Ошибка при вызове метода контекста (Скопировать) по причине Элемент не выбран! В моей внешней обработке выгружаются реквизиты документа, а как применить метод Скопировать не очень мне понятно, подскажите пожалуйста, как привязать таблицу с реквизитами к документам и на основании этого скопировать документ или все-таки как правильно заполнять документ на основании полученных данных...
#8 by Ц_У
ОказанеиУслуг и ОказаниеУслуг найди 1 отличие
#9 by Accountantrf
Просто руками писал код на форум, допустил опечатку, в программе конечно КонецПроцедуры это к сожалению не корень моей проблеммы =(
#10 by PuhUfa
прочитай еще раз СП
#11 by Accountantrf
Что есть СП? И все-таки копированием не хотелось бы создавать документ. Может кто подскажет каким образом из имеющейся таблицы в форме перенести реквизит в документ, а я бы уж дальше сам разобрался. На просторах интернета не могу найти подходящий код.
#12 by PuhUfa
>>Что есть СП >>И все-таки копированием не хотелось бы создавать документ Почему? Религия не позволяет? >>На просторах интернета не могу найти подходящий код.
#13 by Accountantrf
Пересмотрел СП. Ничего нового для себя не вынес, буду еще смотреть. Религия позволяет, но я же выгружаю запросом все реквизиты не для того что бы скопировать документ, поэтому метод заполнения мне более симпотичен и более гибок. Да оказалось гугл нашел больше полезной информации нежели яндекс =). И вот поизучав ее я осознал, что у меня проблема гораздо глубже, чем казалась на первый взгляд... Часть кода Процедура ОтборИнформации Экспорт выгружает в таблицу формы все необходимые реквизиты, при попытке получить из этой таблицы необходимые значения выдает ошибку. Код: Сообщает, что поле объекта контрагент не обнаружил, хотя в самой форме данный реквизит присутствует и корректно заполняется...
#14 by КонецЕсли
2. Контрагент = Таблица.Контрагент Таблица - это что? Таблица? Контрагент это что? Колонка таблицы? Чтож ты хочешь от колонки всей таблицы? Таблица[0].Контрагент - значение из первой строки таблицы Таблица[1].Контрагент - значение из второй строки таблицы ...
#15 by Accountantrf
Таблица - Реквизит Формы тип(ТаблицаЗначений).Контрагент - колонка. КонецЕсли -  ты обсалютно прав, если использовать Таблица[0].Контрагент то сообщает значение!А еще для каждой строки можно написать Цикл. Для Каждого Стр ИЗ Таблица Цикл; Сообщить(Стр.Контрагент); КонецЦикла А вот с копированием не могу разобраться. У меня есть 20 строк в таблице Формы, но там не хранится СуществующийОбъект, там только его реквизиты, которые нужно перенести в НовыйОбъект, чем сейчас и озадачен.
#16 by КонецЕсли
Чем озадачен то? НовыйДокумент= Документы.ОказаниеУслуг.СоздатьОбъект; НовыйДокумент.реквизит1=Значение1; НовыйДокумент.реквизит2=Значение2; ... Для каждого СтрокаТЧ из ИмеющаясяТабЧасть Цикл
#17 by Accountantrf
Да вот в этом вся и суть вопроса. НовыйДокумент= Документы.ОказаниеУслуг.СоздатьОбъект; Создает документ, без проблем. НовыйДокумент.реквизит1=Значение1; допустим НовыйДокумент.Дата=ТекущаяДата; Дату устанавливает без проблем, а вот дальше ничего не подставляет в значение реквизитов и не могу от него добиться =(. НовыйДокумент.Организация = Стр.Организация; Остается обсалютно без результата. При этом если ставлю Сообщить(Стр.Организация); Сообщает все как надо, уже весь мозг сломал, как реквизиты заполнять. НовыйДокумент.Записать; Ну и сохраняет докумен корректно
#18 by tashi_ork
Дай текущий код обработки. В первоначальном варианте у тебя не запрос не выбирал организацию. Контрагент у тебя не заполняется потому, что ты в запросе получаешь строку с наименованием контрагента и пытаешься записать ее в реквизит ссылочного типа. Т.е. проще говоря - в запросе замени "Ссылка.Контрагент.Наименование" на "Ссылка.Контрагент". И не вижу никаких условий в запросе. Ты что, получаешь список всех документов?
#19 by Accountantrf
Условия прикручу позже (пока весь список), оно будет не сложное, сейчас же дело за заполнением реквизита, а по контрагенту сейчас попробую заменить...
#20 by Accountantrf
Ну с организаций тоже самое получается, значет мне нужно получить ссылку вместо наименований и тогда их можно будет приделать к новому документу?
#21 by hhhh
там у тебя наименований немеряно. Все выкидывай. И напиши у себя на ладони где-нибудь: "НЕ писать наименование, НЕ писать наименование, не писать наименование...".
#22 by Accountantrf
Ну наименование я везде исключил у себя, но при этом он все равно не заполняет реквизит формы.
#23 by Accountantrf
Все, разобрался, тип у реквизитов формы был выбран не правильно! ВСЕМ СПАСИБО ОГРОМНОЕ!, а то и не знал чего делать!
#24 by tashi_ork
Используй процедуру "ЗаполнитьЗначенияСвойств". Сильно сократит количество кода. Только учти, что имена реквизитов должны совпадать.
#25 by Accountantrf
Обработка выгружает данные в таблицу формы, на основании полученных данных создает акты, но возникла новая проблемма, когда руками проделываешь процедуру записис акта, то автоматически формируется счет-фактура под акт, при програмном заполнение и сохранение, конечно не срабатывают процедуры, предусмотренные в модуле формы ОказаниеУслуги и С/Ф не формируется, для этого надо руками заходить в каждый документ и пересохранять. При попытке перенести код из модуля формы в мою обработку ничего не получается, т.к. используется ТекущийОбъект, он как я понимаю срабатывает только при открытой форме. Хотел спросить можно ли програмно с эмитировать открытие заполненой формы и проведени ее или из обработки запустить процесс формы документа. Или какие-нибудь альтернативные варианты, если кто-то уже сталкивался с такой проблеммой? &НаКлиенте
#26 by tashi_ork
Объект можно получить из ссылки функцией ПолучитьОбъект. С заполнением нужно смотреть в каждом конкретном случае, можно попытаться выдрать код, который отрабатывает в форме, и вставить в свою обработку.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С