Внимание! Тема закрыта. Добавлять сообщения в закрытую тему запрещено.
Вопрос следующий.
Есть документ, в нем N-ое количество строк (предположим 50)
Заполняется он циклом:
Как сделать так, чтобы при создании нового документа НомерСтроки "продолжался" из предыдущего ?
т.е. если в 1м документе строки 1-50, то в следующем соотв. 51-100 и т.д. ?
Только сильно не ругайтесь, не так давно знаком с 1с, и с этим не сталкивался ((
Желательно с кодом)
Заранее спасибо !
Есть документ, в нем N-ое количество строк (предположим 50)
Заполняется он циклом:
Запрос.УстановитьПараметр("Подразделение",Подразделение);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
// Выборка = Запрос.Выбрать();
Пока Выборка.Следующий() Цикл
// Запись = ПериодическийОсмотр.Добавить();
СтрокаТабЧасти = ПериодическийОсмотр.Добавить();
СтрокаТабЧасти.ТабельныйНомер = Выборка.Код;
СтрокаТабЧасти.Сотрудник = Выборка.Ссылка;
СтрокаТабЧасти.Должность = Выборка.Должности;
КонецЦикла;
ПоказатьКак сделать так, чтобы при создании нового документа НомерСтроки "продолжался" из предыдущего ?
т.е. если в 1м документе строки 1-50, то в следующем соотв. 51-100 и т.д. ?
Только сильно не ругайтесь, не так давно знаком с 1с, и с этим не сталкивался ((
Желательно с кодом)
Заранее спасибо !
По теме из базы знаний
- Обработка табличной части "Товары" для 8.2 (управляемая форма)
- Представление в запросе табличной части документа одним строковым полем
- Проверка на наличие дублирующихся строк в табличных частях
- Интерактивное заполнение табличной части открытого документа/справочника управляемой формы на примере конфигурации КА 2.4.11.92
- Дружелюбный интерфейс итогов в диалоге табличных частей, для Управляемых форм.
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Никак. Нужно делать свой реквизит НомерСтрокиСквозной. Имхо, бред это. Ну добавят/удалят одну строчку из предыдущего, изменят время последнего документа ранее первого, и куда поедет такая нумерация? Зачем такое нужно?
(3) koklobok, Ну вот так вот попросили сделать "скозную нумерацию" строк в документе.
А по поводу
там будет полный запрет на редактирование.
ок, сделаю свой реквизит, дальше то что ?
А по поводу
добавят/удалят одну строчку из предыдущего, изменят время последнего документа ранее первого, и куда поедет такая нумерация?
там будет полный запрет на редактирование.
ок, сделаю свой реквизит, дальше то что ?
Как то так:
&НаКлиенте
Процедура ТабЧастьПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
Если НоваяСтрока Тогда
Если Объект.ТабЧасть.Количество() > 1 Тогда
Объект.ТабЧасть[Объект.ТабЧасть.Количество()-1].СвойНомер = Объект.ТабЧасть[Объект.ТабЧасть.Количество()-2].СвойНомер+1;
Иначе
Ном = ПолучитьНомерСтроки();
Элемент.ТекущиеДанные.СвойНомер = Ном+1;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПолучитьНомерСтроки()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| МАКСИМУМ(Док.Ссылка) КАК Ссылка
|ПОМЕСТИТЬ вт
|ИЗ
| Документ.Док КАК Док
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| МАКСИМУМ(ДокТабЧасть.СвойНомер) КАК СвойНомер
|ИЗ
| Документ.Док.ТабЧасть КАК ДокТабЧасть
| ПОЛНОЕ СОЕДИНЕНИЕ вт КАК вт
| ПО ДокТабЧасть.Ссылка = вт.Ссылка";
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
ВыборкаДетальныеЗаписи.Следующий() ;
Возврат ВыборкаДетальныеЗаписи.СвойНомер;
КонецФункции
&НаКлиенте
Процедура ТабЧастьПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
Если НоваяСтрока Тогда
Если Объект.ТабЧасть.Количество() > 1 Тогда
Объект.ТабЧасть[Объект.ТабЧасть.Количество()-1].СвойНомер = Объект.ТабЧасть[Объект.ТабЧасть.Количество()-2].СвойНомер+1;
Иначе
Ном = ПолучитьНомерСтроки();
Элемент.ТекущиеДанные.СвойНомер = Ном+1;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПолучитьНомерСтроки()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| МАКСИМУМ(Док.Ссылка) КАК Ссылка
|ПОМЕСТИТЬ вт
|ИЗ
| Документ.Док КАК Док
|;
|
|////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| МАКСИМУМ(ДокТабЧасть.СвойНомер) КАК СвойНомер
|ИЗ
| Документ.Док.ТабЧасть КАК ДокТабЧасть
| ПОЛНОЕ СОЕДИНЕНИЕ вт КАК вт
| ПО ДокТабЧасть.Ссылка = вт.Ссылка";
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
ВыборкаДетальныеЗаписи.Следующий() ;
Возврат ВыборкаДетальныеЗаписи.СвойНомер;
КонецФункции
ок, сделаю свой реквизит, дальше то что
Дальше делай сквозную нумерацию
1. Получай последний документ.
2. Получай количество строк в последнем документе.
3. Начинай нумерацию этого документа (нужно еще учитывать добавление/удаление, сортировку строк текущего документа)
или по хорошему посылай таких просителей, пусть письменно аргументируют зачем нужно это делать.
Вот пытался переделать "под себя", что-то не получается ((
Во-первых процедура не выполняется, пока не внести какие-нибудь изменения, таблица просто заполняется и все.
Во-вторых условие Если НоваяСтрока Тогда всегда ложь и все переходит в конец процедуры.
И в третьих: если пропустить это условие, то выходит:
Процедура ПериодическийОсмотрПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
Если НоваяСтрока Тогда
Если Документы.ПериодическийОсмотр.ПериодическийОсмотр.Количество() > 1 Тогда
Документы.ПериодическийОсмотр.ПериодическийОсмотр[Документы.ПериодическийОсмотр.ПериодическийОсмотр.Количество()-1].НомерСтрокиСквозной = Документы.ПериодическийОсмотр.ПериодическийОсмотр[Документы.ПериодическийОсмотр.ПериодическийОсмотр.Количество()-2].НомерСтрокиСквозной+1;
Иначе
Ном = ПолучитьНомерСтроки();
Элемент.ТекущиеДанные.НомерСтрокиСквозной = Ном+1;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Функция ПолучитьНомерСтроки()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| МАКСИМУМ(Док.Ссылка) КАК Ссылка
|ПОМЕСТИТЬ вт
|ИЗ
| Документ.ПериодическийОсмотр.ПериодическийОсмотр КАК Док
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| МАКСИМУМ(ДокТабЧасть.НомерСтрокиСквозной) КАК НомерСтрокиСквозной
|ИЗ
| Документ.ПериодическийОсмотр.ПериодическийОсмотр КАК ДокТабЧасть
| ПОЛНОЕ СОЕДИНЕНИЕ вт КАК вт
| ПО ДокТабЧасть.Ссылка = вт.Ссылка";
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
ВыборкаДетальныеЗаписи.Следующий() ;
Возврат ВыборкаДетальныеЗаписи.СвойНомер;
КонецФункции
ПоказатьВо-первых процедура не выполняется, пока не внести какие-нибудь изменения, таблица просто заполняется и все.
Во-вторых условие Если НоваяСтрока Тогда всегда ложь и все переходит в конец процедуры.
И в третьих: если пропустить это условие, то выходит:
{Документ.ПериодическийОсмотр.Форма.ФормаДокумента.Форма(104)}: Поле объекта не обнаружено (ПериодическийОсмотр)
Если Документы.ПериодическийОсмотр.ПериодическийОсмотр.Количество() > 1 Тогда
Надо использовать обработчик ПередНачаломДобавления, то новер будет менятся при каждом изменении содержимого строки
и номер сквозной строки вычистлять как МаксимальныйНомерСквознойСтрокиПредыдушегоДокумента + номерстроки
и желательно при записи документа их перенумеровывать
и номер сквозной строки вычистлять как МаксимальныйНомерСквознойСтрокиПредыдушегоДокумента + номерстроки
и желательно при записи документа их перенумеровывать
(14) dimabarkov, Пользователь будет 1 и создаваться будет не так много документов, так что блокировки редактирования будет достаточно...
Используя мой код выше, можешь поправить, как ты это видишь ?
номер сквозной строки вычистлять как МаксимальныйНомерСквознойСтрокиПредыдушегоДокумента + номерстроки
и желательно при записи документа их перенумеровывать
и желательно при записи документа их перенумеровывать
Используя мой код выше, можешь поправить, как ты это видишь ?
(16) hasan-rusel,
можно оставить и при изменении (условие новаяСтрока я не заметил)
Процедура ПериодическийОсмотрПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
Если НоваяСтрока Тогда
Ном = ПолучитьНомерСтроки();
Элемент.ТекущиеДанные.НомерСтрокиСквозной = Ном+Элемент.ТекущиеДанные.НомерСтроки;
КонецЕсли;
КонецПроцедуры
функция ПолучитьНомерСтроки()
запрос=новый Запрос( "
|ВЫБРАТЬ
| МАКСИМУМ(ДокТабЧасть.НомерСтрокиСквозной) КАК НомерСтрокиСквозной
|ИЗ
| Документ.ПериодическийОсмотр.ПериодическийОсмотр КАК ДокТабЧасть ");
выборка = Запрос.Выполнить().Выбрать();
Если выборка.Следующий() тогда
возврат выборка.НомерСтрокиСквозной;
конецесли;
возврат 0;
конецфункции;
процедура ПередЗаписью()
Если ЭтоНовый() тогда
ном= ПолучитьНомерСтроки();
для каждого стр из ПериодическийОсмотр цикл
стр.НомерСтрокиСквозной= ном+стр.Номерстроки;
конеццикла;
конецесли;
конецпроцедуры
можно оставить и при изменении (условие новаяСтрока я не заметил)
Процедура ПериодическийОсмотрПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
Если НоваяСтрока Тогда
Ном = ПолучитьНомерСтроки();
Элемент.ТекущиеДанные.НомерСтрокиСквозной = Ном+Элемент.ТекущиеДанные.НомерСтроки;
КонецЕсли;
КонецПроцедуры
функция ПолучитьНомерСтроки()
запрос=новый Запрос( "
|ВЫБРАТЬ
| МАКСИМУМ(ДокТабЧасть.НомерСтрокиСквозной) КАК НомерСтрокиСквозной
|ИЗ
| Документ.ПериодическийОсмотр.ПериодическийОсмотр КАК ДокТабЧасть ");
выборка = Запрос.Выполнить().Выбрать();
Если выборка.Следующий() тогда
возврат выборка.НомерСтрокиСквозной;
конецесли;
возврат 0;
конецфункции;
процедура ПередЗаписью()
Если ЭтоНовый() тогда
ном= ПолучитьНомерСтроки();
для каждого стр из ПериодическийОсмотр цикл
стр.НомерСтрокиСквозной= ном+стр.Номерстроки;
конеццикла;
конецесли;
конецпроцедуры
(18) Akuji,
Процедура ПодразделениеПриИзменении(Элемент)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ФизическиеЛица.Код,
| ФизическиеЛица.Ссылка КАК Ссылка,
| ФизическиеЛица.Подразделение,
| ФизическиеЛица.Должности,
| ФизическиеЛица.Вахта
|ИЗ
| Справочник.ФизическиеЛица КАК ФизическиеЛица
|ГДЕ
| ФизическиеЛица.Подразделение = &Подразделение
|
|УПОРЯДОЧИТЬ ПО
| Ссылка.Наименование";
Запрос.УстановитьПараметр("Подразделение",Подразделение);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Выборка = Запрос.Выбрать();
Пока Выборка.Следующий() Цикл
СтрокаТабЧасти = ПериодическийОсмотр.Добавить();
СтрокаТабЧасти.ТабельныйНомер = Выборка.Код;
СтрокаТабЧасти.Сотрудник = Выборка.Ссылка;
СтрокаТабЧасти.Должность = Выборка.Должности;
КонецЦикла;
КонецПроцедуры
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот