IE 2016

Колонка таблицы значений в строку + представление номеров накладных с экономией места в строке. Делалось для печатной формы ТТН.

Опубликовал Bober777 в раздел Программирование - Практика программирования

 

 

 

 

 

 

 

 

ФункцияПолучениеДанныхТаблицыИПреобразование(Документ)

 

Перем ТекущийЭлемент;

Перем СледующийЭлемент;

Перем ПервыйПроход;

Перем ФормируемаяСтрока;

Перем СчетчикПошел;

Перем ЦиклТолькоНачался;

Перем ПоследнийЭлемент;

Перем Список;

 

Запрос = Новый Запрос;

Запрос.Текст = "ВЫБРАТЬ

|ПутевойЛистРеестрДокументов.ДополнительныйНомер2 КАК ДополнительныйНомер2

|ИЗ

|Документ.ПутевойЛист.РеестрДокументов КАК ПутевойЛистРеестрДокументов

|ГДЕ

|ПутевойЛистРеестрДокументов.Ссылка = &Ссылка

|

|УПОРЯДОЧИТЬ ПО

|ДополнительныйНомер2";

 

Запрос.УстановитьПараметр("Ссылка", Документ);

Знак = ДопустимыйЗнак.Неотрицательный;

ТЗСДопНомерами2 = Новый ТаблицаЗначений;

ТЗСДопНомерами2.Колонки.Добавить("ДопНом2",,Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(10, 0, Знак)));

 

 

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

 

Если Не  (Результат.Пустой()) Тогда

Выборка = Результат.Выбрать();

Пока Выборка.Следующий() Цикл

НоваяСтрока = ТЗСДопНомерами2.Добавить();

НоваяСтрока["ДопНом2"] = Выборка.ДополнительныйНомер2;

КонецЦикла;

ФормируемаяСтрока = "";

СледующийЭлемент = Число(Выборка.ДополнительныйНомер2) + 1;

СамыйПоследнийЭлемет = Число(Выборка.ДополнительныйНомер2);

ПервыйПроход = Истина;

ЦиклТолькоНачался = Истина;

ПропуститьЧисло = Ложь;

 

Для Каждого СтрТЧ Из ТЗСДопНомерами2 Цикл

 

ТекущийЭлемент = Число(СтрТЧ.ДопНом2);

 

Если (Число(ТекущийЭлемент) <> Число(СледующийЭлемент)) И ПервыйПроход Тогда     

ФормируемаяСтрока = ФормируемаяСтрока + ТекущийЭлемент; 

ЦиклТолькоНачался = Истина;

Счетчик = 0;

КонецЕсли;

 

Если (Число(ТекущийЭлемент) = Число(СледующийЭлемент)) И ПервыйПроход Тогда     

ФормируемаяСтрока = ФормируемаяСтрока + ТекущийЭлемент; 

ЦиклТолькоНачался = Истина;

Счетчик = 0;

КонецЕсли;

 

Если (Число(ТекущийЭлемент) = Число(СледующийЭлемент)) И (Не ПервыйПроход)  Тогда 

Если ЦиклТолькоНачался И Не ПропуститьЧисло Тогда 

ФормируемаяСтрока = ФормируемаяСтрока + " - ";

ЦиклТолькоНачался = Ложь;

Счетчик = Счетчик + 1;

Иначе

ПропуститьЧисло = Истина;

Счетчик = Счетчик + 1;

КонецЕсли;

КонецЕсли;

 

Если (Число(ТекущийЭлемент) <> Число(СледующийЭлемент)) И (Не ПервыйПроход) Тогда 

Если Не ЦиклТолькоНачался И ПропуститьЧисло Тогда 

ФормируемаяСтрока = ФормируемаяСтрока + ПоследнийЭлемент;

ИначеЕсли Не ЦиклТолькоНачался И Не ПропуститьЧисло И Счетчик = 1 Тогда 

ФормируемаяСтрока = ФормируемаяСтрока + ПоследнийЭлемент;

КонецЕсли;

 

ФормируемаяСтрока = ФормируемаяСтрока + ", " + ТекущийЭлемент;

ЦиклТолькоНачался = Истина;

ПропуститьЧисло = Ложь;

Счетчик = 0;

КонецЕсли;

 

СледующийЭлемент = Число(ТекущийЭлемент) + 1;

ПоследнийЭлемент = ТекущийЭлемент;

ПервыйПроход = Ложь;

КонецЦикла;

Если Счетчик <> 0 Тогда  

ФормируемаяСтрока = ФормируемаяСтрока + СамыйПоследнийЭлемет;

КонецЕсли;

Список = ФормируемаяСтрока;

Иначе

Список = "";

КонецЕсли;

Возврат Список;

 

КонецФункции

 

См. также

Лучшие комментарии

4. ildarovich 09.03.2011 01:43
Вот более простой и универсальный метод решения той же задачи
Ответили: (5)
+ 1 [ Bober777; ]
# Ответить

Комментарии

1. Bober777 06.03.2011 10:16
Мне интересно, может у других участников есть другие предложения для решения данной задачи. Поправьте меня, если я в чем то не прав. Но данная функция уже год, как работает в одной компании. 8-)
Ответили: (2)
# Ответить
2. Поручик 06.03.2011 21:31
(1) Если работает, так в чём вопрос? http://infostart.ru/public/19856/
# Ответить
3. Bober777 07.03.2011 18:29
да у меня и нет ни каких вопросов, может кто-то предложит другой метод решения вопроса, не такой как у меня)
# Ответить
4. ildarovich 09.03.2011 01:43
Вот более простой и универсальный метод решения той же задачи
Ответили: (5)

Прикрепленные файлы:

КолонкаСжато.png
+ 1 [ Bober777; ]
# Ответить
5. Bober777 09.03.2011 09:09
(4)Замечательно, спасибо ildarovich, :D. Делимся опытом молодые специалисты будут смотреть, и расти на наших ошибках и победах.
# Ответить
Внимание! За постинг в данном форуме $m не начисляются.
Внимание! Для написания сообщения необходимо авторизоваться
Текст сообщения*
Прикрепить файл






IE 2016