Программирование, и жизнь

Копирование строки табличной части в другой документ в 1С Предприятие 8.3

Скопировать строки табличной части из одного документа в другой не так уж сложно.
Кстати, можно копировать как одну строку, так и несколько, а все благодаря свойству объекта - Выделенные строки.

Алгоритм следующий:
1. Добавляем реквизиты формы: ДокументЗаявки (или свое что-то там), УдалятьПослеКопирования, и команду копировать ( создается на сервере и клиенте )
2. На клиенте проверяем заполненность документа заявки
3. Проверяем не является ли ссылка на документ этим же документом, лучше для этого описать функцию которая будет выполняться на сервере, иначе на тонком клиенте работать не будет.
4. Спросим у пользователя, уверен ли он  в своих действиях.

5. Для избежания возможных ошибок, опишем функцию, допустим ОбновитьДокумент, в нее входит запись документа из которого переносим строку, и повторное его чтение с сервера, это необходимо для перестройки номеров строк после удаления из таблицы.
6. Непосредственно копирование строк должно происходить на сервере, потому что мы получаем документ с сервера, и  в него производим запись.
7. На клиенте получаем массив из выделенных строк, хочу заметить что массив наполнен значениями номера строк в том порядке как вы их выбирали, к примеру 5, 2 , 6 , 0. Это важно учитывать если вы собираетесь после копирования удалять строки из табличной части.
Можно остановится и задуматься.
Почему важно? Потому что удалив из таблицы конкретный элемент массива, то произойдет перерасчет номера строки, и если первым делом удален 5 элемент, то 6 элемент индекса уже будет пятым, и т.д., то есть все после 5 индекса уменьшится на одну единицу, а массив выделенных строк нет, поэтому при удалении лучше удалять элементы с конца к начала, а не как в массиве, т.е. нужно отсортировать по убыванию массив выделенных строк.
Кстати массив выделенных строк отправим аргументом процедуры на сервер.
8. Перейдем к копированию на сервере, на этом этапе можно столкнуться с ошибка при обращении к элементу формы. Для того чтобы с формы передать на сервер данные - необходимо вызвать функцию РеквизитФормыВЗначение.
9. Получаем документ в который будем копировать строки, а далее дело за малым.
10. Циклом проходим по всем выделенным фрагментам.
10. У документа реципиента добавляем строку табличной части
11. В теле цикла Заполняем значения свойств созданной строки - значением строки из копируемого документа по номеру элемента.
12. Записываем изменения.
13. С удалением проблем не будет, массив выделенных строк сортируем, и пройдя по массиву удаляем из таблицы необходимый  индекс.
На этом все, код который можно стырить, потрогать, пощупать, внедрить, переделать и вставить поглубже в конфигуратор тут
Email: cHJvdHNlbmtvQHBtLm1l