Необходимо реализовать с помощью обработки следующее.
На форме пользователь при нажатии кнопки "Заполнить" выбирает документ "Возврат" ( несколько штук ).
Далее на основании этих документов заполняется табличная часть по выделенным документам - Номенклатура,количество,партии и т.д.
Подскажите в каком направлении копать и как лучше это реализовать?!
Заранее спасибо.
(3) Практически, но вам еще нужно открывать свою форму на клиенте для задания параметров заполнения. Сейчас посмотрю и возможно найду на инфостарте пример, подходящий вам
(7) ОФ уже забывать начал, но там по-идее еще легче делается. Делаете обработку заполнения табличной части (в интернете куча материалов по этому поводу), добавляете в обработку форму где будете выбирать параметры (т.е. ваши документы возврата) и в процедуре "Инициализировать" открываете ее модально и получаете выбранные документы, которые в последствии и обрабатываете для заполнения табличной части.
А вообще бы не помешало поподробнее ситуацию описать. На данный момент непонятно это УФ или обычные формы и с какой формы хотите конкретно вызывать заполнение. Если это УФ и форма документа, то вариант решения я озвучил выше
(72) ну главное - вы разобрались...
Это было бы выявлено на 2 секунде отладки...
Так что если не пользуетесь - осваивайте немедленно!
Я то не мог вашу обработку отлаживать - у меня же только ЗУП...
без отладки шагу не ступить при мало мальски серьезных работах...
Без нее только 2х2=4 можно программировать...
(74) Нет, так не пойдет.
Во первых вы должны заполнить все поля нового документа.
Это и дата и Организация и куча еще чего...
И потом лучше в обычном цикле перебором добавить строки в табличную часть документа из каждой строки "второй" табличной части обработки...
Там ведь не только Номенклатуру надо прописывать, но и другие поля, которых возможно нет в вашей табличной части №2
(76) Ну хоть организацию то ему заполните!
Она обязательно должна быть заполнена, если документ создается программно.
Если вы ее не заполните и она одна в базе, то отображаться на форме она не будет, но ее отсутствие в документе приведет к ошибкам в будущем.
Ну так и копайте в своем направлении ...
Создавайте в Объекте табличную часть с составным типом (2 типа "Возврат" и "Корректировка" )
В эту ТЧ вы будете заносить свои документы.
И команду с циклом получить из каждого документа в этой ТЧ всю Номенклатуру,количество,партии и т.д. для заполнения уже второй табличной части этого Объекта.
Вытаскивайте на форму эти 2 табличных части и команду Заполнить....
Ну а дальше уже как фантазии будут работать...
(9) Я изначально давал совет для УФ....
Там у Формы есть Объект (это объект самой обработки )
Как это все реализовать для обычной формы - не могу быстро сказать.....
Но суть думаю особо не поменяется - 2 табличных части по любому на форме для добавления документов и команда для заполнения...
(13) А разве недостаточно при открытии обработки,чтобы вылазила форма списка моих документов"Возврат".
Затем пользователь выбирает несколько документов - поставив галочку напротив них
И после уже на основании их формируется один документ ?
Это как вы реализуете способ добавления ваших документов в первую Табличную часть ...
Ну так при добавлении и будет открываться форма списка документов и вы выбираете хоть несколько выделением, хоть многократным нажатием добавляете в свою Таблицу документы - это стандартная технология.
Не придумывайте велосипедов, чем стандартнее - тем людям легче будет работать.
Никаких галочек при добавлении документов не должно быть.
Галочки возможны скажем уже в вашей первой таблице на против документов, если вы решите скажем заполнять вторую ТЧ не из всех выбранных а из тех , где стоит галочка...
Но первоначальное заполнение должно быть на мой взгляд вручную.... ( а если у вас будет 1000 возвратов? вы что все их сразу будете пихать в свою обработку? Зачем)
Я создал обработку, в модуле объекта описал "СведенияОВнешнейОбработке".
Затем добавил реквизит обработки "Документ" с типом " ДокументСписок.Возврат".
Добавил форму обработки и вывел реквизит "Документ" с указанием что это "ПолеВыбора".
Вышло следующее:
Функция СведенияОВнешнейОбработке() Экспорт
Назначения = Новый Массив;
Назначения.Добавить("Документ.ВозвратТоваровОтПокупателя");
ПараметрыРегистрации = Новый Структура;
ПараметрыРегистрации.Вставить("Вид","ЗаполнениеОбъекта");
ПараметрыРегистрации.Вставить("Назначение",Назначения);
ПараметрыРегистрации.Вставить("Наименование","Ладога: заказ на основании возврата корректировки");
ПараметрыРегистрации.Вставить("Версия","1.0");
ПараметрыРегистрации.Вставить("Информация","Дополнительная обработка табличной части");
ПараметрыРегистрации.Вставить("БезопасныйРежим",Истина);
Команды = ПолучитьТаблицуКоманд() ;
ДобавитьКоманду(Команды, "LADZAKAZ",
"ЗаменитьТабличнуюЧасть","ВызовКлиентскогоМетода",Ложь,) ;
ПараметрыРегистрации.Вставить("Команды",Команды) ;
Возврат ПараметрыРегистрации;
КонецФункции
Функция ПолучитьТаблицуКоманд()
Команды = Новый ТаблицаЗначений ;
Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")) ;
Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")) ;
Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка")) ;
Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево")) ;
Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка")) ;
Возврат Команды;
КонецФункции
Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
НоваяКоманда = ТаблицаКоманд.Добавить() ;
НоваяКоманда.Представление = Представление ;
НоваяКоманда.Идентификатор = Идентификатор ;
НоваяКоманда.Использование = Использование ;
НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение ;
НоваяКоманда.Модификатор = Модификатор ;
КонецПроцедуры
Процедура Инициализировать(Объект, ИмяТабличнойЧасти = Неопределено, ТабличноеПолеОбъекта = Неопределено) Экспорт
ТабличнаяЧасть = Объект[ИмяТабличнойЧасти];
ФормаСпискаВозврата = ПолучитьФорму("Форма");
ФормаСпискаВозврата.ОткрытьМодально();
Если Не ЗначениеЗаполнено(Документ) Тогда
Сообщить("Не выбран документ Корректировки реализаций");
КонецЕсли;
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Документ",Документ);
Запрос.Текст = "ВЫБРАТЬ
| КорректировкаРеализацииТовары.Номенклатура,
| КорректировкаРеализацииТовары.СерияНоменклатуры,
| КорректировкаРеализацииТовары.Количество,
| КорректировкаРеализацииТовары.Цена,
| КорректировкаРеализацииТовары.Сумма
|ИЗ
| Документ.КорректировкаРеализации.Товары КАК КорректировкаРеализацииТовары
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.КорректировкаРеализации КАК КорректировкаРеализации
| ПО КорректировкаРеализацииТовары.Ссылка = КорректировкаРеализации.Ссылка
|ГДЕ
| КорректировкаРеализацииТовары.Ссылка = &Документ
| И КорректировкаРеализации.лад_Как_Возврат = ИСТИНА";
Результат = Запрос.Выполнить().Выгрузить();
КонецПроцедуры
17.
Sashares
3510.12.19 11:16 Сейчас в теме+0.7 $m
(16)Нет.
Советы выше для конфигурации на БСП.
У вас обычные формы, вряд ли там вообще есть БСП с нужными подсистемами.
В конфигурациях на обычных формах тоже бывает функционал заполнения табличных частей внешними обработками.
Какая у вас конфигурация?
Например, в БГУ1 есть справочник "Внешние обработки". В него добавляются внешние отчеты, обработки, внешние печатные формы, а также обработки для таб. частей документов.
У вас такой справочник есть?
Выходит всё-таки лучше из модуля формы обработки вызывать открытие списка документов "Возврат" ?
Но не пойму как сделать,чтобы пользователь мог несколько выбирать и ещё отбор необходимо добавить.
Тем более как на основании выбранных этих документов создаётся новый документ и заполняется его одна табличная часть
Но не пойму как сделать,чтобы пользователь мог несколько выбирать и ещё отбор необходимо добавить.
Создать специализированную форму выбора для этого, как вариант. В верхней части формы список документов, в нижней части формы таблица в которую попадают выбранные двойным кликом мыши документы из верхнего списка.
Далее по кнопке - выбранные документы передаются в для обработки - заполнения документа.
(22) и кнопку добавьте "Добавить документы", которая открывает форму выбора документов Возврат и добавляет выбранные документы в строки этой табличной части в Этот Реквизит "Документ"
Сейчас при открытий обработки. Открывается список всех необходимых документов.
Но! Там всего три колонки "Номер", "Дата", "Проведен" . То есть отбор можно сделать только по ним . В оригинальном же списке "Возвратов" их намного больше.
Плюс мне необходимо чтобы форма уже открывалась только с теми документами у которых на форме документа стоит "Используется" галочка в Истина.
(25) Вы что-то сделали совершенно не так как я говорил!
Обработка должна открываться с пустым табличным полем.
И только после нажатия кнопки должна открываться форма добавления документов...
Ну картинку хоть выложите что ли как у вас там все...
29.
Intercititude
10.12.19 13:01 Сейчас в теме+0.67 $m
(27) 1)У Обработки добавил реквизит Документ с типом "ДокументСписок.Возвраты". И добавил табличную часть пустую.
2)Создал форму обработки. Туда вывел табличную часть и присвоил ей тип "Данные" - мой реквизит "Документ".
А Вы хотите,чтобы я тип данных табличной части оставил пустым. Добавил на форму кнопку "Добавить", которая в свою очередь открывает список всех документов "Возврат". Пользователь выбирает и они добавляются в эту пустую ТЧ ?
Но мне не так надо. Мне необходимо чтобы уже был список с документами(которые уже есть в базе), пользователь выбирает несколько необходимых. Затем жмёт выполнить и формируется документ "Заказ" на основании выбранных документов.
Ума не приложу как программно эту реализовать, в этом загвоздка.
Ну по уму - у вас не должно быть никакого реквизита обработки Документ- он вам зачем?
У вас должна быть у обработки 2 табличных части - первая
Документы с одним обязательным реквизитом (тип - ДокументСсылка.Возвраты )
По команде ДобавитьДок - вы выбираете желаемые документы из формы выбора Документов Возврата и добавляете их в свою табличную часть.
По второй кнопке (либо по факту добавления документов , что хуже) заполняется вторая табличная часть.. (запросом конечно, а что есть другой способ?)
(31) Ну вышло всё проще. Я создал ТЧ со своими реквизитами.Плюс добавил реквизит Использование(Булево),чтобы могли выбирать несколько документов.
И программно запросом взял все документы "Возврат" и соответственно приравнял к моей табличной части.
Теперь проблема в другом. Как сформировать на основании выбранных документов - один документ "Заказ" со всеми данными из табличных частей этих документов ?
(32) выйти то оно вышло , но через пень колоду....
Вы упорно не хотите слушать голос разума...
Зачем вы занесли в свою табличную часть все возвраты?
Так можно в принципе- но не оптимально.....
Ведь можно и под кроватью спать и даже выспишься...
Для вашего заказа - берите информацию из Второй табличной части, про которую я вам говорил...
И которая должна заполняться по данным документов из первой табличной части ...
У вас же во второй все должно быть... -
39.
YannikAlx
2710.12.19 16:07 Сейчас в теме+0.7 $m
(36) Вот ради вас уже сварганил тестовую обработку даже... Ну и вспомнил заодно обычные формы...
Правде она на ЗУП 2.5 ибо у меня с обычными формами под рукой ничего другого нету
Ну да вам все равно должно быть ясно, или попробуйте запустить ее в зупе...
Ну или переделайте под свои типы документов и данных
(39) Спасибо. Но я понял. Крутая реализация с множественным выбором,воспользуюсь ей )
Но суть другая. Вот на вашем примере предположим я выбрал четыре документа "ПриемНаРаботуВОрганизацию". У них есть своя табличная часть допустим.
И в итогее. Мне нужно все данные из этих четырёх табличных частей сложить!
Затем жму "Создать" предположим, и создаётся с нуля пустой абсолютно новый документ "Заказ".
И уже в него попадают все табличные части документов которые я выбрал( 4 штуки)
(41) Все складывается во второй табличной части ....
И уже из нее вы должны заполнить свой документ...
Просто добавить еще одну кнопку - "Создать заказ"
Или в моей реализации для тех сотрудников из отмеченных приемов на работу создать скажем докумен увольнения.
В процедуре этой кнопки - создаем документ и заносим данные из второй таблицы.
Сохраняем его ...
Все...
(42) Наконец-то понял :) Благодарю! Жаль уже отдал монетки только себе...
И ещё момент, когда у Вас жмёшь по кнопке "Добавить документ" Открываются форма выбора всех документов.
А мне необходимо,чтобы в эту форму выбора попадали только те документы, у которых на форме документа стоит галка "Использовать".
Как этот фильтр применить ?
(45) Не не, я утрировал. По факту на документе Галка "Это возврат". Это не я добавил. Было так.
Как раз именно документы с этой галкой пользователю и необходимы. На основании их он создаст другой документ.
А то что
добавил реквизит Использование(Булево),чтобы могли выбирать несколько документов.
это я имеел ввиду то же самое, что у вас "Помет" в табличной части.
(46) Вот только вопрос куда вы свою галку впихнули?
Ведь на форме - это ни о чем!
Она же не может храниться на форме....
Она должна храниться в документе...
В каком месте вы ее создали?
(33) Тоесть в первой ТЧ есть список документов "Возврат",где пользователь только может два раза кликать по ним. Во второй ТЧ тоже список в который как раз попадают эти документы по которым пользователь прощёлкал ?
(33) Да и уже не важно,работает и так. У меня другая проблема уже...
Я создал свою ТЧ ( куда передаю список всех документов "Возврат"). Там есть столбец Ссылка куда заполняется ссылка из моего запроса.
Мне как то надо обратиться к Ссылка.ТабличнаяЧасть ,взять оттуда все данные(номенклатура,количество) и передать в новый созданный документ. Причем из нескольких табличных частей...
Процедура ОсновныеДействияФормыОсновныеДействияФормыВыполнить(Кнопка)
СсылкаНаНовыйДокумент = СоздатьДокумент();
ОткрытьЗначение(СсылкаНаНовыйДокумент);
КонецПроцедуры
Функция СоздатьДокумент()
НовыйДокумент = Документы.КорректировкаРеализации.СоздатьДокумент(); // Новый пустой документ
ТоварыНовогоДокумента = НовыйДокумент.Товары.Добавить();
Для Каждого Стр Из СписокДокументов Цикл
Если Стр.Выгружать = Истина Тогда
НовыйДокумент.Заполнить(Стр);
КонецЕсли;
КонецЦикла;
КонецФункции
(48) Ну я же не обработал абсолютно все ситуации в этой тестовой обработке...
Сначала создается рабочий скелет , а потом на него уже наращивается весь требуемый функционал и отлаживаются ошибки одновременно...