номер строки табличной части 1с
Номер строки в запросе и табличной части на форме обработки
Есть запрос. Есть таблица значений с заданными и типизированными полями на форме обработки.
При выполнении запрос перегружает данные в таблицу значений. Но в таблице нет номера строки.
Хочу его сделать. Но как его задавать если я перегружаю одной функцией? Можно ли в запросе сделать
номер строки для каждой записи. Что бы он и перегружался в табличную часть!
Запрос = Новый Запрос;
Запрос.Текст = »
|ВЫБРАТЬ
| ТоварыОрганизацийОбороты.Период КАК Период,
| ТоварыОрганизацийОбороты.Регистратор.Номер КАК РегистраторНомер,
| ТоварыОрганизацийОбороты.Регистратор КАК Регистратор,
| ТоварыОрганизацийОбороты.Организация КАК Организация,
| ТоварыОрганизацийОбороты.ВидЗапасов КАК ВидЗапасов,
| ТоварыОрганизацийОбороты.АналитикаУчетаНоменклатуры.Склад КАК Склад,
| ТоварыОрганизацийОбороты.АналитикаУчетаНоменклатуры.Ссылка КАК КлючАналитики,
| ТоварыОрганизацийОбороты.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура,
| ТоварыОрганизацийОбороты.АналитикаУчетаНоменклатуры.Характеристика КАК Характеристика,
| ТоварыОрганизацийОбороты.АналитикаУчетаНоменклатуры.Серия КАК Серия,
| ТоварыОрганизацийОбороты.КоличествоОборот КАК КоличествоОборот,
| ТоварыОрганизацийОбороты.КоличествоРасход КАК КоличествоРасход,
| ТоварыОрганизацийОбороты.НомерГТД КАК НомерГТД
|ИЗ
| РегистрНакопления.ТоварыОрганизаций.Обороты(&НачДата, &КонДата, Регистратор, ) КАК ТоварыОрганизацийОбороты
|ГДЕ
| ТоварыОрганизацийОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
|
|УПОРЯДОЧИТЬ ПО
| Период»;
Запрос.УстановитьПараметр(«НачДата», Период.ДатаНачала);
Запрос.УстановитьПараметр(«КонДата», Период.ДатаОкончания);
ТЗДляВыгрузки.Загрузить(Запрос.Выполнить().Выгрузить());
НомерСтроки Табличной части
там будет полный запрет на редактирование.
&НаСервере
Функция ПолучитьНомерСтроки()
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| МАКСИМУМ(Док.Ссылка) КАК Ссылка
|ПОМЕСТИТЬ вт
|ИЗ
| Документ.Док КАК Док
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| МАКСИМУМ(ДокТабЧасть.СвойНомер) КАК СвойНомер
|ИЗ
| Документ.Док.ТабЧасть КАК ДокТабЧасть
| ПОЛНОЕ СОЕДИНЕНИЕ вт КАК вт
| ПО ДокТабЧасть.Ссылка = вт.Ссылка»;
Возврат ВыборкаДетальныеЗаписи.СвойНомер;
КонецФункции
Во-первых процедура не выполняется, пока не внести какие-нибудь изменения, таблица просто заполняется и все.
Во-вторых условие Если НоваяСтрока Тогда всегда ложь и все переходит в конец процедуры.
И в третьих: если пропустить это условие, то выходит:
(14) dimabarkov, Пользователь будет 1 и создаваться будет не так много документов, так что блокировки редактирования будет достаточно.
(16) hasan-rusel,
можно оставить и при изменении (условие новаяСтрока я не заметил)
Процедура ПериодическийОсмотрПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
Если НоваяСтрока Тогда
Ном = ПолучитьНомерСтроки();
Элемент.ТекущиеДанные.НомерСтрокиСквозной = Ном+Элемент.ТекущиеДанные.НомерСтроки;
КонецЕсли;
КонецПроцедуры
функция ПолучитьНомерСтроки()
запрос=новый Запрос( »
|ВЫБРАТЬ
| МАКСИМУМ(ДокТабЧасть.НомерСтрокиСквозной) КАК НомерСтрокиСквозной
|ИЗ
| Документ.ПериодическийОсмотр.ПериодическийОсмотр КАК ДокТабЧасть «);
выборка = Запрос.Выполнить().Выбрать();
Если выборка.Следующий() тогда
возврат выборка.НомерСтрокиСквозной;
конецесли;
возврат 0;
процедура ПередЗаписью()
Если ЭтоНовый() тогда
ном= ПолучитьНомерСтроки();
для каждого стр из ПериодическийОсмотр цикл
стр.НомерСтрокиСквозной= ном+стр.Номерстроки;
конеццикла;
конецесли;
конецпроцедуры
Номер строки табличной части 1с
Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.
Документы
Описание:
В большинстве своем документы, которые создаются в процессе настройки конфигурации задачи, являются электронными аналогами стандартных бумажных документов, являющихся основаниями для тех или иных учетных действий или расчетов. Тем не менее, использование этого типа данных может выходить далеко за рамки простой фиксации изменений, внесенных в учетные регистры.
Документы в языке 1С 8.3, 8.2 (в примерах)
С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).
Подписывайтесь и получайте новые статьи и обработки на почту (не чаще 1 раза в неделю). |
Вступайте в мою группу ВКонтакте, Одноклассниках, Facebook или Google+ — самые последние обработки, исправления ошибок в 1С, всё выкладываю там в первую очередь.
Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.
Нажмите одну из кнопок, чтобы поделиться:
Программирование в 1С для всех
В предыдущей статье мы узнали, как настраивать и конфигурировать табличные части объектов 1С 8.3. В этой статье мы изучим некоторые вопросы программной работы с табличными частями 1С.
Заполнение табличной части 1С 8.3
Очень часто встречается задача заполнить табличную часть какими-нибудь значениями, например результатом выполнения запроса. Для демонстрации реализуем пример, в котором выполняется заполнение табличной части. Сделаем небольшую учебную задачу: будем заполнять табличную часть документа всей номенклатурой, которая не помечена на удаление. Количество при этом будет равно 1. Для заполнения табличной части документа нам необходимо работать с одноименной таблицей реквизита Объект, который является основным реквизитом управляемой формы.
Поскольку по условиям задачи, необходимо отобрать всю не помеченную на удаление номенклатуру, то оптимально это сделать при помощи запроса, в котором я буду получать все не помеченные элементы справочника номенклатура. Я создал команду, при выполнении которой будет заполняться табличная часть, и разместил её на форме.
Исполнение команды будет выполняться в серверном контексте, поскольку объект Запрос не работает в клиентском контексте на тонком клиенте.
При обходе запроса, я использую метод Добавить табличной части объекта (вообще это метод объекта, который имеет тип ДанныйФормыКоллекция, именно в этот тип преобразуется табличная часть документа-объекта, при создании на сервере). Данный метод является функцией, которая создаёт и возвращает новую строку.
Обратите внимание, поскольку при обходе запроса и заполнения новой строки, я использую метод ЗаполнитьЗначенияСвойств, то поля в запросе должны называться так же, как и поля табличной части.
Очистка табличной части документа 1С 8.3
Если мы реализуем данный код, то он будет не совсем корректен: каждый раз при выполнении этого кода будут добавляться новые строки, а вполне возможно, что пользователю старые строки не нужны. Поэтому, будем очищать имеющиеся строки, перед добавлением новых строк. Для этого воспользуемся методом Очистить объекта СписокТоваров, который имеет тип ДанныйФормыКоллекция.
После выполнения этого метода вся табличная часть будет очищена.
Текущая строка табличной части 1С 8.3
В процессе работы может возникнуть необходимость отработать текущую строку табличной части, т.е. ту строку, которая в данный момент выделена.
Например, может возникать ситуация, что мы редактируем какое-нибудь поле текущей строки таблицы на форме, и нам нужно, чтобы было пересчитано другое поле (или несколько полей) этой текущей строки. Например, мы изменяем цену (или количество) нашей табличной части, и необходимо, чтобы сумма автоматически была пересчитана.
Для решения данной задачи нужно воспользоваться свойством ТекущиеДанные элемента с типом ТаблицаФормы, который соответствует нужной табличной части. Свойство ТекущиеДанные возвращает значение полей текущей строки.
Для того, чтобы отработать изменение текущего поля цены, создадим обработчик события ПриИзменении этого поля.
В этом обработчике напишем код, который будет пересчитывать значения полей текущей строки табличной части.
Ещё пример: я создал команду, которая должна увеличивать количество в текущий строке табличной части в два раза и пересчитывать сумму. Эта команда размещена в командной панели таблицы и имеет следующий код:
Теперь доработаем этот пример: после увеличения текущей строки будем сдвигать текущую строку на строку вниз. Для этого допишем предыдущий код:
В этом коде мы получаем идентификатор текущий строки при помощи свойства таблицы управляемой формы ТекущаяСтрока, и если мы не выходим за приделы таблицы, то сдвигаем нашу текущую строку на один шаг вниз.
Также при помощи текущей строки можно находить аналогичную строку в соответствующей табличной части основного реквизита формы Объект, которую также можно изменять (строка на форме тоже изменится автоматически). Мы ранее сделали пересчет суммы при изменении цены, теперь сделаем пересчет суммы при изменении количества, но напрямую через реквизит Объект.
В этом коде мы используем метод НайтиПоИдентификатору переменной Объект.СписокТоваров, которая имеет типа ДанныйФормыКоллекция, этот метод получает элемент коллекции по указанному идентификатору. Если этот элемент найден, то мы можем с ними работать, причем данные на форме изменяться автоматически.
Обход табличной части 1С
Часто возникают задачи обойти табличную часть и изменить какие-либо значения в столбцах. В предыдущих примерах мы изменяли текущую стоку таблицы, теперь реализуем пример, когда нужно изменить все строки. В этом случае нет необходимости обращаться к элементам формы, можно работать напрямую с основным реквизитом Объект.
Остальные статьи по теме конфигурирования в 1С:
Более подробно и основательно конфигурирование в 1С дается в моей книге:
Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»
О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
Промо-код на скидку в 15% — 48PVXHeYu