marți, 23 februarie 2016

v7 как добавить строки в табличную часть документа

Платформа 8.2 Заполнение строк табличной части документа

День Добрый.

Заранее благодарю кто сможет помочь в решении вопроса.

Имеется документ с табличной частью, в котором довольно больше количество реквизитов.

Если в ручную добавлять строку в табличной части и в одном из реквизитов выбрать нужный элемент - то вся строка заполняется остальными реквизитами как нужно, используя обработчик ПриИзменении.

Но элементов может быть сотня, а то и до 1000 доходить. Поэтому была сделана кнопка на форме "Подобрать" и открывается форма выбора с множественным выбором (где уже можно отфильтровать нужное), и когда выбираются все нужные элементы - то в табличную часть строки переносятся, но реквизит заполняется всего один единственный, остальные пустые.

Как правильно написать в обработчике "ОбработкаВыбора" чтобы при переносе всех строк заполнялись и остальные реквизиты?

Вот как на данный момент сделано:

&НаКлиенте

Процедура Подобрать(Команда)

ФормаВыбора = ПолучитьФорму("Справочник.Поручения.ФормаВыбора". Элементы.Поручения);

ФормаВыбора.Элементы.Список.МножественныйВыбор = Истина;

Добавить строку в табличную часть программно - 1С

Приветствую!

Наваял такой вот код:

&НаКлиенте

Процедура Команда1(Команда)

ДобавитьСтрокуНаСервере() ;

КонецПроцедуры

&НаСервере

Процедура ДобавитьСтрокуНаСервере()

ОбъектДок = Документы.СтрокиТабЧасти.ПолучитьСсылку().ПолучитьОбъект();

НоваяСтрока = Объектдок.ТабЧасть.Добавить();

НоваяСтрока.НаименованиеТабЧасть = "Програмная строка";

ОбъектДок.Записать();

КонецПроцедуры

Вываливается с ошибкой "Значение не является значением объектного типа" на строке "НоваяСтрока = Объектдок.ТабЧасть.Добавить();" Есть вопрос - почему?

Собственно хотел сделать кнопку на форме документа, при нажатии на которую добавлялась бы программно строка в таб. часть.

Все, спс разобрался.

Слк = Объект.Ссылка.ПолучитьОбъект();

Стр = Слк.ТабЧасть.Добавить();

Стр.СтрТабЧасть="5644564";

Добавление новой строки в табличную часть. Присвоение новой строке максимального номера

Номер строки табличной части (документа) присваивается исходя из максимального номера отобранных  строк.

При этом программа 1С сама так «сдвигает» номера строк (номер которых БЫЛ больше либо равен номеру только что вставленной строки), чтобы не было совпадений номеров у разных строк.

Получается, что можно вставить новую строку в середину таблицы документа, если воспользоваться отбором строк табличной части. Или даже можно вставить новую строку на первую позицию табличной части если отбор табличной части не будет содержать каких-либо строк.

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

Самое простое решение (и самое неудобное пользователям) — запретить добавлять строку, если наложен отбор на табличную часть но для пользователей это ограничение выглядит довольно искусственным (непонятным, «притянутым за уши»).

Чуть более сложное решение — вызов метода Сбросить() у коллекции ОтборСтрок у табличного поля (связанного с табличной частью). Пользователи могут добавить строку, но у них «слетит» отбор. Это нелогично и потому не оправдано.

Я решил эту задачу («присвоить новой строке номер исходя из максимального номера среди всех строк в табличной части») программным сбросом и восстановлением отбора строк в табличной части. В модуле формы (в начале текста модуля) объявил локальную переменную локСтруктураОтбора1. в самом конце модуля (в разделе инициализации переменных формы) — её инициализировал :

локСтруктураОтбора1 = Новый Структура;

Далее написал код :

Процедура РаботыПередНачаломДобавления(Элемент, Отказ, Копирование)

// при наложенном отборе на табличную часть номер строки присваивается исходя из максимума строк в видимой области.

Процедура РаботыПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)

ОтборСтрок1 = ЭлементыФормы.Работы.ОтборСтрок;

1С 8.x. Добавить, удалить, перебрать строки табличного поля документа

Похожие FAQ

была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во. COM-подключение к базе 7.7 из 8.2 1С   3

Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине. Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)): НаКлиенте Процедура Загрузки() ПутьКБазе=". Excel файл как Внешний источник данных   1

Подключимся и загрузим из файла Excel данные в таблицу значений 1С. Сделать теперь это очень просто. 1. В конфигурации добавляет новый объект метаданных типа " Внешние источники данных" и назовем его просто " Excel". Google maps, поиск оптимального маршрута   1

В данном посте хочу коснуться основных аспектов построения оптимального маршрута с использованием API Google maps. Исходные данные для построения маршрута: * Географические координаты объектов, которые хранятся в базе; *. ZIP-архив Разделить и Объединить Файл   0

При работе с большими объемами данных могут возникнуть проблемы при пересылке архивных файлов. Типичной такой ситуацией является ограничение некоторых почтовых серверов на размер сообщения - если письмо превышает. Посмотреть все результаты поиска похожих

Еще в этой же категории

Удалить все строки табличного поля документа. ОтражениеВУчете.Очистить(); // ОтражениеВУчете - название табличного поля Как в табличной части документа удалить строки только с нулевым значением реквизита ". Выборка, перебор документов   3

// Выборка документов за весь период Выборка = Документы.НачислениеОтпуска.Выбрать(); Пока Выборка.Следующий() Цикл //Модуль обработки КонецЦикла; // Выборка документов за период с Даты начала по Дата окончания. Что такое Последовательность Документов (в кратце и доступно)   3

Для пользователя: Последовательность документов есть в УПП, УТ (8), ТиС, ПУБ (7). Операции – Проведение документов, на закладке «Восстановление последовательностей» приведены все имеющиеся в программе. Ввод документа на основании - Программно   3

НовДок = Документы.ПеречислениеНДФЛвБюджет.СоздатьДокумент(); //Заполнить - вызывает ОбработкаЗаполнения(Основание) в документе ПеречислениеНДФЛвБюджет. Создание нового документа   2

Для 8.2: Открыть форму нового документа и предоставить пользователю самому интерактивно записать данные объекта в базу данных: проще всего использовать метод глобального контекста ОткрытьФорму(). Это можно сделать. Посмотреть все в категории Документы

Ключевые слова и Изображения

Слова упорядочены по частоте использования в тексте

Niciun comentariu:

Trimiteți un comentariu