НомерСтроки Табличной части

Внимание! Тема закрыта. Добавлять сообщения в закрытую тему запрещено.
1. hasan-rusel 11 31.07.12 07:03 Сейчас в теме
Вопрос следующий.
Есть документ, в нем N-ое количество строк (предположим 50)
Заполняется он циклом:
	 Запрос.УстановитьПараметр("Подразделение",Подразделение);
	 
	 Результат = Запрос.Выполнить();
	 Выборка = Результат.Выбрать();
	
	//  Выборка = Запрос.Выбрать();
	    Пока Выборка.Следующий() Цикл
			// Запись = ПериодическийОсмотр.Добавить();
			 СтрокаТабЧасти = ПериодическийОсмотр.Добавить();
			 СтрокаТабЧасти.ТабельныйНомер = Выборка.Код;
			 СтрокаТабЧасти.Сотрудник = Выборка.Ссылка;
			 СтрокаТабЧасти.Должность = Выборка.Должности;
			
			КонецЦикла;
Показать



Как сделать так, чтобы при создании нового документа НомерСтроки "продолжался" из предыдущего ?
т.е. если в 1м документе строки 1-50, то в следующем соотв. 51-100 и т.д. ?
Только сильно не ругайтесь, не так давно знаком с 1с, и с этим не сталкивался ((
Желательно с кодом)
Заранее спасибо !
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. hasan-rusel 11 31.07.12 07:05 Сейчас в теме
PS) Документ фиксируется в регистре сведений. записи "Номер строки" присутствуют.
3. koklobok 2 31.07.12 08:54 Сейчас в теме
Никак. Нужно делать свой реквизит НомерСтрокиСквозной. Имхо, бред это. Ну добавят/удалят одну строчку из предыдущего, изменят время последнего документа ранее первого, и куда поедет такая нумерация? Зачем такое нужно?
4. hasan-rusel 11 31.07.12 09:16 Сейчас в теме
(3) koklobok, Ну вот так вот попросили сделать "скозную нумерацию" строк в документе.
А по поводу
добавят/удалят одну строчку из предыдущего, изменят время последнего документа ранее первого, и куда поедет такая нумерация?

там будет полный запрет на редактирование.

ок, сделаю свой реквизит, дальше то что ?
5. Akuji 22 31.07.12 09:31 Сейчас в теме
Как то так:


&НаКлиенте
Процедура ТабЧастьПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
Если НоваяСтрока Тогда
Если Объект.ТабЧасть.Количество() > 1 Тогда
Объект.ТабЧасть[Объект.ТабЧасть.Количество()-1].СвойНомер = Объект.ТабЧасть[Объект.ТабЧасть.Количество()-2].СвойНомер+1;
Иначе
Ном = ПолучитьНомерСтроки();
Элемент.ТекущиеДанные.СвойНомер = Ном+1;
КонецЕсли;
КонецЕсли;
КонецПроцедуры

&НаСервере
Функция ПолучитьНомерСтроки()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| МАКСИМУМ(Док.Ссылка) КАК Ссылка
|ПОМЕСТИТЬ вт
|ИЗ
| Документ.Док КАК Док
|;
|
|////////////////////////////////////////////////////////////­////////////////////
|ВЫБРАТЬ
| МАКСИМУМ(ДокТабЧасть.СвойНомер) КАК СвойНомер
|ИЗ
| Документ.Док.ТабЧасть КАК ДокТабЧасть
| ПОЛНОЕ СОЕДИНЕНИЕ вт КАК вт
| ПО ДокТабЧасть.Ссылка = вт.Ссылка";

Результат = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = Результат.Выбрать();

ВыборкаДетальныеЗаписи.Следующий() ;

Возврат ВыборкаДетальныеЗаписи.СвойНомер;
КонецФункции
hasan-rusel; +1 Ответить
6. hasan-rusel 11 31.07.12 10:02 Сейчас в теме
(5) Akuji, а если у меня обычное приложение, как это будет выглядеть ?
8. Поручик 4667 31.07.12 10:22 Сейчас в теме
(6) Так и будет выглядеть, только везде убери Объект. и директивы компиляции.
hasan-rusel; +1 Ответить
7. koklobok 2 31.07.12 10:21 Сейчас в теме
ок, сделаю свой реквизит, дальше то что

Дальше делай сквозную нумерацию
1. Получай последний документ.
2. Получай количество строк в последнем документе.
3. Начинай нумерацию этого документа (нужно еще учитывать добавление/удаление, сортировку строк текущего документа)
или по хорошему посылай таких просителей, пусть письменно аргументируют зачем нужно это делать.
9. hasan-rusel 11 31.07.12 11:47 Сейчас в теме
Вот пытался переделать "под себя", что-то не получается ((
Процедура ПериодическийОсмотрПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
	Если НоваяСтрока Тогда
Если Документы.ПериодическийОсмотр.ПериодическийОсмотр.Количество() > 1 Тогда 
Документы.ПериодическийОсмотр.ПериодическийОсмотр[Документы.ПериодическийОсмотр.ПериодическийОсмотр.Количество()-1].НомерСтрокиСквозной = Документы.ПериодическийОсмотр.ПериодическийОсмотр[Документы.ПериодическийОсмотр.ПериодическийОсмотр.Количество()-2].НомерСтрокиСквозной+1; 
Иначе	
Ном = ПолучитьНомерСтроки(); 
Элемент.ТекущиеДанные.НомерСтрокиСквозной = Ном+1;	
КонецЕсли;	
КонецЕсли; 
КонецПроцедуры 


Функция ПолучитьНомерСтроки() 
Запрос = Новый Запрос; 
Запрос.Текст = 
"ВЫБРАТЬ 
|	МАКСИМУМ(Док.Ссылка) КАК Ссылка 
|ПОМЕСТИТЬ вт 
|ИЗ 
|	Документ.ПериодическийОсмотр.ПериодическийОсмотр КАК Док 
|; 
| 
|////////////////////////////////////////////////////////////­//////////////////// 
|ВЫБРАТЬ 
|	МАКСИМУМ(ДокТабЧасть.НомерСтрокиСквозной) КАК НомерСтрокиСквозной 
|ИЗ 
|	Документ.ПериодическийОсмотр.ПериодическийОсмотр КАК ДокТабЧасть 
|	 ПОЛНОЕ СОЕДИНЕНИЕ вт КАК вт 
|	 ПО ДокТабЧасть.Ссылка = вт.Ссылка"; 



Результат = Запрос.Выполнить(); 

ВыборкаДетальныеЗаписи = Результат.Выбрать(); 

ВыборкаДетальныеЗаписи.Следующий() ; 

Возврат ВыборкаДетальныеЗаписи.СвойНомер; 
КонецФункции
Показать


Во-первых процедура не выполняется, пока не внести какие-нибудь изменения, таблица просто заполняется и все.
Во-вторых условие Если НоваяСтрока Тогда всегда ложь и все переходит в конец процедуры.
И в третьих: если пропустить это условие, то выходит:

{Документ.ПериодическийОсмотр.Форма.ФормаДокумента.Форма(104)}: Поле объекта не обнаружено (ПериодическийОсмотр)
Если Документы.ПериодическийОсмотр.ПериодическийОсмотр.Количество() > 1 Тогда 
10. Поручик 4667 31.07.12 11:59 Сейчас в теме
(9) Это Документы.ПериодическийОсмотр. не надо. Учи программирование на 1С.
11. Miromaxv 31.07.12 12:08 Сейчас в теме
А цель ? Зачем делать нумерацию строк начинающуюся не с единицы?
12. V_K 31.07.12 14:18 Сейчас в теме
Зачем такое делать, первый раз вижу такую хотелку. Может автор что перепутал?
13. dimabarkov 31.07.12 14:50 Сейчас в теме
Надо использовать обработчик ПередНачаломДобавления, то новер будет менятся при каждом изменении содержимого строки
и номер сквозной строки вычистлять как МаксимальныйНомерСквознойСтрокиПредыдушегоДокумента + номерстроки
и желательно при записи документа их перенумеровывать
14. dimabarkov 31.07.12 14:53 Сейчас в теме
также при создание нового документа необходимо блокировать для изменений предыдущий (на случай если несколько пользователей захотят добавить документ)
16. hasan-rusel 11 31.07.12 14:57 Сейчас в теме
(14) dimabarkov, Пользователь будет 1 и создаваться будет не так много документов, так что блокировки редактирования будет достаточно...

номер сквозной строки вычистлять как МаксимальныйНомерСквознойСтрокиПредыдушегоДокумента + номерстроки
и желательно при записи документа их перенумеровывать

Используя мой код выше, можешь поправить, как ты это видишь ?
17. dimabarkov 31.07.12 15:35 Сейчас в теме
(16) hasan-rusel,
можно оставить и при изменении (условие новаяСтрока я не заметил)
Процедура ПериодическийОсмотрПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
Если НоваяСтрока Тогда
Ном = ПолучитьНомерСтроки();
Элемент.ТекущиеДанные.НомерСтрокиСквозной = Ном+Элемент.ТекущиеДанные.НомерСтроки;
КонецЕсли;
КонецПроцедуры


функция ПолучитьНомерСтроки()
запрос=новый Запрос( "
|ВЫБРАТЬ
| МАКСИМУМ(ДокТабЧасть.НомерСтрокиСквозной) КАК НомерСтрокиСквозной
|ИЗ
| Документ.ПериодическийОсмотр.ПериодическийОсмотр КАК ДокТабЧасть ");

выборка = Запрос.Выполнить().Выбрать();
Если выборка.Следующий() тогда
возврат выборка.НомерСтрокиСквозной;
конецесли;
возврат 0;

конецфункции;

процедура ПередЗаписью()
Если ЭтоНовый() тогда
ном= ПолучитьНомерСтроки();
для каждого стр из ПериодическийОсмотр цикл
стр.НомерСтрокиСквозной= ном+стр.Номерстроки;
конеццикла;
конецесли;
конецпроцедуры
hasan-rusel; +1 Ответить
15. dimabarkov 31.07.12 14:54 Сейчас в теме
разблокировать предыдущий только после записи и запрете редактирования вновь созданного
hasan-rusel; +1 Ответить
18. Akuji 22 31.07.12 16:33 Сейчас в теме
а табчасть то у тебя как вообще заполняется? ты говорил там автоматом все в цикле что то...
19. hasan-rusel 11 31.07.12 17:17 Сейчас в теме
(18) Akuji,

Процедура ПодразделениеПриИзменении(Элемент)
	
	Запрос = Новый Запрос;
	Запрос.Текст =  "ВЫБРАТЬ
	                |	ФизическиеЛица.Код,
	                |	ФизическиеЛица.Ссылка КАК Ссылка,
	                |	ФизическиеЛица.Подразделение,
	                |	ФизическиеЛица.Должности,
	                |	ФизическиеЛица.Вахта
	                |ИЗ
	                |	Справочник.ФизическиеЛица КАК ФизическиеЛица
	                |ГДЕ
	                |	ФизическиеЛица.Подразделение = &Подразделение
	                |
	                |УПОРЯДОЧИТЬ ПО
	                |	Ссылка.Наименование";
	
	 Запрос.УстановитьПараметр("Подразделение",Подразделение);
	 
	 Результат = Запрос.Выполнить();
	 Выборка = Результат.Выбрать();
	
	  Выборка = Запрос.Выбрать();
	    Пока Выборка.Следующий() Цикл
		
			 СтрокаТабЧасти = ПериодическийОсмотр.Добавить();
			 СтрокаТабЧасти.ТабельныйНомер = Выборка.Код;
			 СтрокаТабЧасти.Сотрудник = Выборка.Ссылка;
			 СтрокаТабЧасти.Должность = Выборка.Должности;

			КонецЦикла;
	
КонецПроцедуры
Показать
20. Akuji 22 31.07.12 17:18 Сейчас в теме
СтрокаТабЧасти.СвойНомер = ПолучитьНомерСтроки();
21. hasan-rusel 11 01.08.12 11:20 Сейчас в теме
Благодаря dimabarkov, тема закрыта !
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот