документ открывается, но ТЧ пуста. Это багофича от 1С. Т.о., работоспособный вариант - внести некоторые изменения в код формы документа. Или анализировать параметр, как предложила 5 копеек, или дописать ВводНаОсновании(..). Более просто - анализировать переданный форме параметр. PS: в инете натыкался на обсуждение этой проблемы аж в 90-х годах.
документ открывается, но ТЧ пуста. Это багофича от 1С.
Это не фича, после открытьформу() с конт работать как Вы написали нет смысла.
"Можно сразу передавать данные и в модуле документа обрабатывать их через форму.параметр." А это я Вам написал на первый призыв не трогать транзакцию. Хотя, проверю еще сам, как оно неработает.
В общем, поэкспериментировал с различными вариантами, покопался в инете, и выводы следующие: 3 Вариант
ОткрытьФорму("Документ.СписаниеТМЦ", Конт); Если ТипЗначения(Конт) = 100 Тогда ... ...Конт.ЗагрузитьТабличнуюЧасть(Таб); ...Таб.ВыбратьСтроки(); ...Пока Таб.ПолучитьСтроку() = 1 Цикл ......Конт.АктивизироватьСтроку(1); ......Конт.НоваяСтрока(); ... КонецЕсли;
Зачем Вы пытаетесь активизировать строку, которой нет?
Цитата(vadim007 @ 02.07.11, 20:13)
документ открывается, но ТЧ пуста. Это багофича от 1С.
Об этом и шла речь. Это не багофича, а
Цитата(5_kopeek @ 02.07.11, 14:39)
Не думаю, что получится произвольно манипулировать табличной частью документа, в частности, воспользоваться методом ЗагрузитьТабличнуюЧасть(), поскольку КонтекстОткрытойФормы не есть КонтекстДокумента и не есть КонтекстМодуляФормыДокумента, а "манипулировать открытой формой" не значит "манипулировать табличной частью документа".
Надо как то уже подитоживать тему. Она не первый раз поднимается на форумах, но конкретного решения никто не озвучил - помоему, просто жмутся, чтоб другим не досталось. 1. Добавлять в модуле документа обработку - форма.параметр 2. Через транзакцию - пусть он и не правильный, но можно работать, если это редкие случаи. 3. Искать другой вариант, он есть, но о нем не хотят писать. Как то через контекст пробовать. Открыть форму, на какое то время сделать так , чтоб пользователь не мог с ней работать,заполнить ее и открыть форму еще раз, тогда у нас будет контекст открытой формы, но еще не записаной. Это теория, надо проверить.
В инете было решение через использование внешних компонент (Formex и др), но это нарушает лицензионные условия 1С.
Там некоторые хвастались, что есть у них еще какое то решение, но на предложение поделиться - отшучивались. Черт его знает, верить или нет. Самый приемлимый вариант - изменение модуля документа. Только при обновлении релиза будут проблемы, но тут уж надо выбирать.
Самый приемлимый вариант - изменение модуля документа. Только при обновлении релиза будут проблемы, но тут уж надо выбирать.
Человек пишет обработку для загрузки данных из какого-то файла, неужели для него будет проблемой восстановить 3 строчки в документе после обновления?! Тем более, СписаниеТМЦ -- не самый изменяемый документ, не удивлюсь, если в 10 последних релизах он менялся аж раз.
Человек пишет обработку для загрузки данных из какого-то файла, неужели для него будет проблемой восстановить 3 строчки в документе после обновления?! Тем более, СписаниеТМЦ -- не самый изменяемый документ, не удивлюсь, если в 10 последних релизах он менялся аж раз.
У нас здесь своя атмосфера...
Группа: Основатель
Сообщений: 14050
Из: Киев
Спасибо сказали: 4612 раз
Рейтинг: 3748.8
Цитата(kalyamov)
Это к чему?
Я так понял, к тому, что
Цитата(vadim007)
Т.о., работоспособный вариант - внести некоторые изменения в код формы документа. Или анализировать параметр, как предложила 5 копеек, или дописать ВводНаОсновании(..). Более просто - анализировать переданный форме параметр.
"Можно сразу передавать данные и в модуле документа обрабатывать их через форму.параметр" - предложено давно и не 5 коп.. Уже предложено тему подитожить и закрыть. К чему дальнейший треп ?
Только при обновлении релиза будут проблемы, но тут уж надо выбирать.
, что при изменении модуля документа возникнут сложности с обновлением. Поскольку Вам непонятен был смысл моего поста, попробую объяснить более доступно. Мои слова были к тому, что человеку, который может написать обработку по загрузке данных из файла, не составит труда при установке очередного обновления вписать 3 строчки необходимого кода в модуль документа. К тому же речь идет о документе, который очень редко меняется в типовой конфигурации, поэтому вполне вероятно, что и вписывать ничего не придется -- просто снимать галку с этого документа при обновлении. Так что не думаю, что возникнут большие проблемы и стоит сложный выбор.
Цитата(kalyamov @ 03.07.11, 16:22)
"Можно сразу передавать данные и в модуле документа обрабатывать их через форму.параметр" - предложено давно и не 5 коп..
Калям., хоть и процитировала Вас
Цитата(kalyamov @ 01.07.11, 22:13)
... Можно сразу передавать данные и в модуле документа обрабатывать их через форму.параметр...
, а только сейчас заметила (пришлось специально перечитать всю тему ), что это -- передать данные, а не получать контекст, через параметр -- впервые было предложено Вами. В общем, не претендую на первенство, не переживайте так сильно.
Я не переживаю, хоть по некоторым предидущим темам заметил странную тенденцию. По поводу моего опасения насчет обновления - не думаю, что это лишнее предупреждение автору темы. Вам конечно, оно не к чему, три строчки , три там.
Цитата(5_kopeek @ 03.07.11, 23:11)
Поскольку Вам непонятен был смысл моего поста, попробую объяснить более доступно.
Лучше попробуйте понять, к чему я написал к чему это ?
Добрый день! Провозился немного на выходных, пробуя Ваши советы, но увы пока невезет... при вызове из обработки на кнопку
НачатьТранзакцию(); Док = СоздатьОбъект("Документ.СписаниеТМЦ"); Док.Записать(); /// здесь вызываеться err при попытке записи и код дальше не выполняется... Конт=""; ОткрытьФормуМодально(Док,Конт); Если ПустоеЗначение(конт)=0 тогда ЗафиксироватьТранзакцию(); Сообщить("документ сохраниться"); Иначе ОтменитьТранзакцию(); // Если в конт ничего не вернулось, то не сохраняем Сообщить("в конт ничего не вернулось"); КонецЕсли;
Не работает. при выполнении кода Док.Записать(); пишет: err: Док.Записать(); и все. Моя мечта создать обработку которая загружает список товара из файла(*.DBF) полученого из терминала сбора данных(это без особых проблем реализовано) и на кнопку этот список загружать в новый документ который отображаться пользователю, тот его правит потом сохрнаняет... Не дается последняя часть вроде все елементарно, создал обьект документа залил туда информацию, показал пользователю.
Но есть сильное желание реализовать это без записи документа и без модификации основной конфигурации, посредством только обработки. Т.е. не трогая модуль докумнта.
В журнале документов, на прав клик мышкой есть меню, команда "Копировать" 1С создает копию существ документа из нов номером из таким же перечнем материала... Это то похожее что хотел реализовать.
Запоздалый у меня этот ответ, извините...(не обновил страничку форума)
Доброе утро, участникам форума! Предоставляю результат, может кому пригодится(да и хоть как то отблагодарить Вам всем за выявленную поддержку). Если вкратце, воспользовался советом 5_kopeek.
Как это выглядит: во внешней обработке код такой:
Процедура СоздатьСписаниеТМЦ()
ОткрытьФорму("Документ.СписаниеТМЦ",ТаблицаЗнач);
КонецПроцедуры
В конфигурации "подпортил" так сказать одно место, это предоопределена процедура Процедура ВводНового(ПризнакКопирования)
Процедура ВводНового(ПризнакКопирования)
// ....код выше не изменял, там выполняются установка, первоначальная инициализация и прочея /// это код размещен в самом конце(надеюсь на на что больше не влияет, кроме на то что надо сделать), который обрабатывает принимаемый параметр Если ТипЗначенияСтр(Форма.Параметр)="ТаблицаЗначений" Тогда
//вот еще один вариант заполнения, но я его не совсем понял.таблица значений ///наверное должна быть идентична табличной части документа??? просто еще не пробивал вариант... /// ЗагрузитьТабличнуюЧасть(Форма.Параметр);
Вот и все. На кнопку во внешней обработке создается форма нового документа(ранее не записанного в базу,напомню) с уже заполненными позициями переданными из обработки, которая их загрузила из файла.
Надо попробовать еще этот вариант:
Процедура ВводНового(ПризнакКопирования)
// ....код выше не изменял, там выполняются установка, первоначальная инициализация и прочея /// это код размещен в самом конце(надеюсь на на что больше не влияет, кроме на то что надо сделать), который обрабатывает принимаемый параметр Если ТипЗначенияСтр(Форма.Параметр)="ТаблицаЗначений" Тогда
Но я не понял в каком виде надо создавать таблицу значений в параметре Форма.Параметр.
Напоследок скажу, один товарищ говорил мне передавать параметры также(если я его правильно понял, в детали правда не посвятил,т.е. на словах объяснил ), но в теле "Процедура ВводНаОснованииВводНаОсновании(Док)" он посмотрел конфигурацию базы и предлагал сделать там проверку на тип и если это тип таблица то соответственно делать свое. Аргументировал он это что ввод на основании документа "Списание ТМЦ" предусмотрен только на основании документа "Инвентаризация". Если честно я его не совсем(или вообще не ) понял..Попытался распросить, но увы пока молчит. Не знаю как правильней, но то получилось уже работает, та что...над этим голова уже не болит :-)
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!