gifts2017

Набор обработок и методов для различных манипуляций с таблицами значений

Опубликовал Алексей (ADirks) в раздел Программирование - Инструментарий

Небольшой, но довольно полезный набор методов для таблиц значений.
Включает в себя следующее:

Внешние обработки
- Интерактивно настраиваемый фильтр по объектам базы данных либо по таблице значений;
- Многоуровневая группировка ТЗ (в результате получается дерево);
- Редактор ТЗ в виде внешнего отчета;
- Печать ТЗ с группировками;

Методы для работы с ТЗ (файл ФункцииТЗ.txt)
- Копирование структуры ТЗ;
- Копирование строки ТЗ;
- Слияние ТЗ;
- Построчное суммирование 2-х ТЗ;
- Примитивный фильтр ТЗ по значению одной колонки;
- Поиск заданной строки в ТЗ;
- Итог по строке ТЗ;
- Мелкие функции, не имеющие отношения к ТЗ, но могущие оказаться полезными.
Вот, решил тряхнуть стариной, и выложить здесь набор инструментов, пылящийся где-то в недрах проклуба. Как ни странно, наборчик до сих пор актуален для меня, и думаю будет полезен кому-то ещё. Самое центральное во всём этом - это конечно РедакторТЗ - инструмент, без которого я просте не мыслю себе отладку сложных алгоритмов, оперирующих с данными. Самое главное отличие этого редактора от всех других, виденных мной, это возможность просматривать вложенные ТЗ (СЗ, ИТ).

Скачать файлы

Наименование Файл Версия Размер
VT_Tools 533
.1201597731 199,27Kb
25.09.09
533
.1201597731 199,27Kb Бесплатно

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Евгений Мартыненков (JohnyDeath) 29.01.08 16:23
После вот таких вот (не сказать простых) манипуляций и родилась ИТЗ? ;)
2. Артур Аюханов (artbear) 29.01.08 16:43
Обалденный набор обработок.
Пользуюсь им также очень давно, наверное, был один из первых пользователей/тестеров.
Всем рекомендую.
(1) Ага, это предки ИТЗ.
Кстати, РедакторТЗ работает и с ИТЗ :)
3. Сhe Burashka (CheBurator) 29.01.08 21:38
Ок. раз уж (2) советует - то видать и я вооружусь...
4. Алексей (ADirks) 30.01.08 08:35
(1) Точно, здесь мы видим дедушку - предка ИТЗ :)
И дедушка до сих пор иногда работает, когда 1С++ нельзя использовать по каким-то причинам. Группировка ТЗ штука конечно не так чтоб резвая, но зато удобно. А учитывая, что получение данных из базы без прямых запросов всё равно тормозит, эта нерезвость просто незаметна.

(3) А ещё (2) советует использовать 1С++! Так что вооружайся! :))

Пользуясь случаем хочу сказать спасибо Артуру. Без его... хмм... [b]тестирования![b] инструментарий был бы совсем не таким. Совсем совсем не таким.
5. Аркадий Кучер (Abadonna) 14.02.08 10:59
Копирование структуры ТЗ:
пТЗ.Загрузить(ТЗ); пТЗ.УдалитьСтроки() - и готово ;)
6. Алексей (ADirks) 14.02.08 11:09
Ага. А если в ТЗ строк эдак скажем 50000?
7. Аркадий Кучер (Abadonna) 14.02.08 11:49
Если АГА - тогда твоим способом ;) А без АГА - быстро получается...
8. Tiger77 (Tiger77) 19.02.08 15:59
Правильно так:
ТЗ.Выгрузить(пТЗ,1,1); пТЗ.УдалитьСтроки();
9. Алексей (ADirks) 19.02.08 16:20
>Правильно так:
>ТЗ.Выгрузить(пТЗ,1,1); пТЗ.УдалитьСтроки();

Ага :) А если в ТЗ 0 строк?
10. Константин (Fisherru) 16.05.08 13:43
Пришлось искать в таблице значений товар по 2-м полям для поиска неуникального товара в накладной уценки,
то есть товар может быть один и тот-же, но % уценки - разный.
Использовал одну из функций автора, особо не вчитываясь в смысл
Функция НайтиСтрокуТЗ(ТЗ, КолонкаПоиска, ЗначПоиска, КолонкаПоиска2="", ЗначПоиска2="") Экспорт
Перем н;
Если ТЗ.НайтиЗначение(ЗначПоиска, н, КолонкаПоиска)=0 Тогда
Возврат 0;
КонецЕсли;
ТЗ.ПолучитьСтрокуПоНомеру(н);
Если КолонкаПоиска2="" Тогда Возврат 1; КонецЕсли;

Пока н<=ТЗ.КоличествоСтрок() Цикл
Если ТЗ.ПолучитьЗначение(н, КолонкаПоиска2) = ЗначПоиска2 Тогда
ТЗ.ПолучитьСтрокуПоНомеру(н);
Возврат 1;
КонецЕсли;
н = н + 1;
КонецЦикла;
Возврат 0;
КонецФункции

Вызываю её из своей функции

Функция ПроверкаДублейСтрокСоСкидкой()
// Эта процедура проверяет спецификацию документа на дубли товара
ТаблицаТоваров=СоздатьОбъект("ТаблицаЗначений");
ТаблицаТоваров.НоваяКолонка("КодТовара", "Число", 5,0);
ТаблицаТоваров.НоваяКолонка("Скидка", "Число", 5,2);

ВыбратьСтроки();
Пока ПолучитьСтроку() = 1 Цикл

Если Товар.Выбран()=0 Тогда
Продолжить;
КонецЕсли;

// Проверка товара на совпадение в строках документа
Если НайтиСтрокуТЗ(ТаблицаТоваров,"КодТовара",Число(Товар.Код),"Скидка",ПроцентСкидки)=1 Тогда
// Значит такой товар уже в накладной есть
Предупреждение("Повторение товара и скидки:"+СокрЛП(Товар.Артикул)+" "+СокрП(Товар.Наименование)+" в строке "+НомерСтроки,5);
Сообщить("Повторение товара и скидки:"+СокрЛП(Товар.Артикул)+" "+СокрП(Товар.Наименование)+" в строке "+НомерСтроки);
Возврат 1;
КонецЕсли;

ТаблицаТоваров.НоваяСтрока();
НомСтр = ТаблицаТоваров.НомерСтроки;
ТаблицаТоваров.УстановитьЗначение(НомСтр,"КодТовара", Число(Товар.Код));
ТаблицаТоваров.УстановитьЗначение(НомСтр,"Скидка", ПроцентСкидки);

КонецЦикла;
Возврат 0;
КонецФункции

что по вашему произойдёт если в документе будет?
Товар Скидка
Стол 10
Стол 20
Диван 30
Стол 30
он мне сругается на Стол с 30% так как найдёт Диван с 30%
так как в цикле не прверяется, что первый параметр остаётся = переданному значению,
а просто втупую сравнивает второй - что криво.
Не порядок.
11. Константин (Fisherru) 16.05.08 13:45
Так что, всё-таки, осмысливайте показанные сдесь функции, чтобы не было как со мной
12. Oskar (oskar) 17.06.08 08:45
13. a exeel (aexeel) 03.09.09 10:13
В demo.ert при нажатии на кнопку "Печать сгруппированной ТЗ" ошибка:
ИначеЕсли ТЗ_Кол.НачатьГруппу = 1 Тогда
{Z:\DOWNLOADS\VT_TOOLS\ПЕЧАТЬТЗ.ERT(754)}: Поле агрегатного объекта не обнаружено (НачатьГруппу)
14. Александр (dobraleks) 16.06.12 17:24
15. Gen Tay (GenTay) 27.10.13 16:37
Скачал. После вндрения отпишуся. Спасибо
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа