Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Метод "Группировать" для ТаблицыЗначений такой же как для ИТ (число прочтений - 8826 )
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Метод "Группировать" для ТаблицыЗначений такой же как для ИТ
06. Июля 2015 :: 10:42
Печать  
Добрый день!

Я сделал недавно отчет, который использует 1С++, в частности возможности ИндексированнойТаблицы.
Но "клиент", для которого я делал этот отчет, категорически отказывается использовать внешние компоненты.
Почти все я переделал на ТЗ,  остался только метод "Группировать".

Может быть уже есть у кого-нибудь готовая процедура, которая делает такую же группировку с ТЗ?
Поделитесь, пожалуйста.
Или хотя бы описание алгоритма, чтобы самому не изобретать?
  
Наверх
ICQ  
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Метод "Группировать" для ТаблицыЗначений такой же как для ИТ
Ответ #1 - 06. Июля 2015 :: 11:53
Печать  
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Метод "Группировать" для ТаблицыЗначений такой же как для ИТ
Ответ #2 - 06. Июля 2015 :: 14:17
Печать  
berezdetsky писал(а) 06. Июля 2015 :: 11:53:

сейчас посмотрю,
большое спасибо!
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Метод "Группировать" для ТаблицыЗначений такой же как для ИТ
Ответ #3 - 06. Июля 2015 :: 15:06
Печать  
berezdetsky писал(а) 06. Июля 2015 :: 11:53:


Посмотрел - это класс ТаблицаГруппировок, то есть для его использования все равно нужно использовать 1С++.
Придется перекладывать на обычные процедуры...
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Метод "Группировать" для ТаблицыЗначений такой же как для ИТ
Ответ #4 - 06. Июля 2015 :: 15:46
Печать  
Какие парамеры можно передавать в метод "Получить" этого класса?
Как лучше этот метод переделать в обычную процедуру?
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Метод "Группировать" для ТаблицыЗначений такой же как для ИТ
Ответ #5 - 06. Июля 2015 :: 18:49
Печать  
И еще MetaDataWork мешает.
Какой процедурой из типовой 1С можно заменить метод "ЗначениеВСтрокуБД"?
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Метод "Группировать" для ТаблицыЗначений такой же как для ИТ
Ответ #6 - 06. Июля 2015 :: 21:44
Печать  
ЗначениеВСтроку()
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Метод "Группировать" для ТаблицыЗначений такой же как для ИТ
Ответ #7 - 06. Июля 2015 :: 21:52
Печать  
Результат группирования ТаблицыГруппировок ближе к результату выполнения объекта Запрос нежели к ИндексированнойТаблице.
По крайней мере принцип обхода группировок точно такой же.
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Метод "Группировать" для ТаблицыЗначений такой же как для ИТ
Ответ #8 - 06. Июля 2015 :: 21:59
Печать  
а алгоритм метода Группировать ИТ, имхо, не сложен для самостоятельной реализации
1. на входе таблица А, номер группировки i
2. копируем А в Б
3. сворачиваем А по полям группировки i
4. добавляем в А колонку тзПотомки
5. для каждой строки А перебираем Б и копируем строки с равными значениями полей группировки из Б в тзПотомки строки А
6. передаем тзПотомки строки А и i+1 в п.1
  

1&&2&&3
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Метод "Группировать" для ТаблицыЗначений такой же как для ИТ
Ответ #9 - 07. Июля 2015 :: 06:17
Печать  
trad, спасибо!

и еще расскажите пожалуйста про метод "Получить",
какие параметры в него можно передавать?
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Метод "Группировать" для ТаблицыЗначений такой же как для ИТ
Ответ #10 - 07. Июля 2015 :: 06:32
Печать  
у исходной ТаблицыГруппировок нет такого метода.
если речь про КОП от berezdetsky то не могу знать.
  

1&&2&&3
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Метод "Группировать" для ТаблицыЗначений такой же как для ИТ
Ответ #11 - 07. Июля 2015 :: 06:41
Печать  
понятно, тогда обращаюсь к berezdetsky:
просьба помочь по методу "Получить"
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Метод "Группировать" для ТаблицыЗначений такой же как для ИТ
Ответ #12 - 07. Июля 2015 :: 06:45
Печать  
trad писал(а) 06. Июля 2015 :: 21:44:
ЗначениеВСтроку()


ЗначениеВСтроку() не подходит вместо MDW.ЗначениеВСтрокуБД(Родитель)

Вот справка:
"В качестве параметра для данного метода допускается передавать объекты типа ''СписокЗначений'' и ''ТаблицаЗначений''"

А у нас там передается элемент справочника


  
Наверх
ICQ  
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Метод "Группировать" для ТаблицыЗначений такой же как для ИТ
Ответ #13 - 07. Июля 2015 :: 07:03
Печать  
es3000 писал(а) 07. Июля 2015 :: 06:41:
понятно, тогда обращаюсь к berezdetsky:
просьба помочь по методу "Получить"

Он делает то же, что и метод Получить объекта Запрос - позиционирует выборку на требуемых значениях группировки, с возможностью дальнейшего обхода методом Группировка.

es3000 писал(а) 07. Июля 2015 :: 06:45:
ЗначениеВСтроку() не подходит вместо MDW.ЗначениеВСтрокуБД(Родитель)

Вот справка:
"В качестве параметра для данного метода допускается передавать объекты типа ''СписокЗначений'' и ''ТаблицаЗначений''"

А у нас там передается элемент справочника

Используй ЗначениеВСтрокуВнутр. Но если нужно упорядочивание по этим значениям, результат придётся распарсить, чтобы вытащить ID объекта.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Метод "Группировать" для ТаблицыЗначений такой же как для ИТ
Ответ #14 - 07. Июля 2015 :: 08:40
Печать  
(0) запихни 1cpp в саму ert-ку. Распаковывай при необходимости и загружай перед выполнением отчета.
Клиентосу скажешь, что всё штатно. Код можно припрятать в мокселе.
Будет быстро и все довольны Улыбка

ЗЫ: можешь и классы туда запихнуть и всё на свете..
как пример - можешь посмотреть мою поделку для правки регистров
  
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Метод "Группировать" для ТаблицыЗначений такой же как для ИТ
Ответ #15 - 07. Июля 2015 :: 09:09
Печать  
Eprst писал(а) 07. Июля 2015 :: 08:40:
(0) запихни 1cpp в саму ert-ку.
...
как пример - можешь посмотреть мою поделку для правки регистров


где искать поделку?
она есть в единой конфе со всеми классами?
как она называется?
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Метод "Группировать" для ТаблицыЗначений такой же как для ИТ
Ответ #16 - 07. Июля 2015 :: 09:15
Печать  
Eprst, ты толкаешь человека на преступление против человечности
  

1&&2&&3
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Метод "Группировать" для ТаблицыЗначений такой же как для ИТ
Ответ #17 - 07. Июля 2015 :: 09:35
Печать  
на вот, занимайся. Там и классы автоматом подключаются и 2 вк распаковываются
http://infostart.ru/public/79515/
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Метод "Группировать" для ТаблицыЗначений такой же как для ИТ
Ответ #18 - 07. Июля 2015 :: 09:36
Печать  
trad писал(а) 07. Июля 2015 :: 09:15:
Eprst, ты толкаешь человека на преступление против человечности

Улыбка

та не, просто упрощаю жизнь.
Так-то и на ТЗ всё можно слепить, вот только зачем ?
  
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Метод "Группировать" для ТаблицыЗначений такой же как для ИТ
Ответ #19 - 07. Июля 2015 :: 10:47
Печать  
А какая версия 1С++ сейчас стабильная?
Там у них разные операционки, надо чтоб на всех работала:
- Windows Server 2003 (для тех кто в терминале)
- Windows 8
- Windows XP
- Windows 7
  
Наверх
ICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Метод "Группировать" для ТаблицыЗначений такой же как для ИТ
Ответ #20 - 07. Июля 2015 :: 12:04
Печать  
Да они все работают, но лучше ставь 3.2.4.3
  
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2344
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Метод "Группировать" для ТаблицыЗначений такой же как для ИТ
Ответ #21 - 07. Июля 2015 :: 14:15
Печать  
Eprst писал(а) 07. Июля 2015 :: 12:04:
Да они все работают, но лучше ставь 3.2.4.3

А у меня формы поехали на ней в модальном режиме..
  
Наверх
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Метод "Группировать" для ТаблицыЗначений такой же как для ИТ
Ответ #22 - 07. Июля 2015 :: 14:47
Печать  
а поподробней? как поехали?
  

1&&2&&3
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2344
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Метод "Группировать" для ТаблицыЗначений такой же как для ИТ
Ответ #23 - 07. Июля 2015 :: 17:42
Печать  
trad писал(а) 07. Июля 2015 :: 14:47:
а поподробней? как поехали?

https://yadi.sk/i/8fL_a8V4hjEVN
Похоже это связано с классом привязки.

ПС. Вылечил изменением в классе привязка, определяю модальный режим и запрещаю привязку.
  
Наверх
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Метод "Группировать" для ТаблицыЗначений такой же как для ИТ
Ответ #24 - 08. Июля 2015 :: 05:45
Печать  
хм, но ведь 1cpp никак не завязан на работу привязок, кроме того что это класс.
события и управление формой осуществляется через формекс.
  

1&&2&&3
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Метод "Группировать" для ТаблицыЗначений такой же как для ИТ
Ответ #25 - 08. Июля 2015 :: 08:04
Печать  
trad писал(а) 08. Июля 2015 :: 05:45:
хм, но ведь 1cpp никак не завязан на работу привязок, кроме того что это класс.
события и управление формой осуществляется через формекс.


видать был древний 1cpp с формексом.
А потом, в новом формексе АЛьф может чего и поменял, хотя врят ли это как-то на модальный режим сказывается.

ЗЫ:
Хотя, я знаю причину на 95 % с модальностью:
в последних версиях формекса не работает событие ПослеОткрытия в модальной форме, АЛьФ это так и не поправил.
Решение - перенести код в ПослеСозданияФормы или использовать формекс "постарее".

  
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2344
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Метод "Группировать" для ТаблицыЗначений такой же как для ИТ
Ответ #26 - 08. Июля 2015 :: 19:56
Печать  
Eprst писал(а) 08. Июля 2015 :: 08:04:
trad писал(а) 08. Июля 2015 :: 05:45:
хм, но ведь 1cpp никак не завязан на работу привязок, кроме того что это класс.
события и управление формой осуществляется через формекс.


видать был древний 1cpp с формексом.
А потом, в новом формексе АЛьф может чего и поменял, хотя врят ли это как-то на модальный режим сказывается.

ЗЫ:
Хотя, я знаю причину на 95 % с модальностью:
в последних версиях формекса не работает событие ПослеОткрытия в модальной форме, АЛьФ это так и не поправил.
Решение - перенести код в ПослеСозданияФормы или использовать формекс "постарее".


Все верно.
Но я вышел немного по другому.
  
Наверх
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Метод "Группировать" для ТаблицыЗначений такой же как для ИТ
Ответ #27 - 09. Июля 2015 :: 09:53
Печать  
trad,
а нельзя добавить еще один метод к ТаблицеГруппировок - назвать его типа "ПолучитьСписокОбъектовИзмерений":
чтобы этот метод во время обхода по измерениям возвращал список объектов текущей позиции обхода, соответсвтвующих измерениям.

Например, есть у нас измрения: Фирма, Склад, Номенклатура.
Допустим, результат группировки такой:
Фирма1
    Склад1
       Номенклатура1
       Номенклатура2
       Номенклатура3
    Склад2
       Номенклатура1
       Номенклатура2
       Номенклатура3
Фирма2
    Склад1
       Номенклатура1
       Номенклатура2
       Номенклатура3
    Склад2
       Номенклатура1
       Номенклатура2
       Номенклатура3

Мы делаем обход.
После первого вызова Группировка(1) этот метод вернет "Фирма1", после второго - "Фирма2";
После вызова Группировка(1), Группировка(2) - вернет "Фирма1", "Склад1"
После вызова Группировка(1), Группировка(2), Группировка(3) - вернет "Фирма1", "Склад1", "Номенклатура1"
и т.д.

Понятно объяснил?
Сложно это сделать?
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Метод "Группировать" для ТаблицыЗначений такой же как для ИТ
Ответ #28 - 09. Июля 2015 :: 13:55
Печать  
объяснил понятно, сделать не сложно, но:
1. я делать не буду, не хочу
2. ты сам можешь доработать коп как тебе нужно
3. то что тебе нужно легко делается при обходе:
Код
Выбрать все
	СписокОбъектовИзмерений=СоздатьОбъект("СписокЗначений");
	Пока ТГ.Группировка(1)=1 Цикл
		СписокОбъектовИзмерений.Установить(1,ТГ.ТекущееЗначение);

		//СписокОбъектовИзмерений.РазмерСписка()=1

		Пока ТГ.Группировка(2)=1 Цикл
			СписокОбъектовИзмерений.Установить(2,ТГ.ТекущееЗначение);

			//СписокОбъектовИзмерений.РазмерСписка()=2

			Пока ТГ.Группировка(3)=1 Цикл
				СписокОбъектовИзмерений.Установить(3,ТГ.ТекущееЗначение);

				//СписокОбъектовИзмерений.РазмерСписка()=3

				СписокОбъектовИзмерений.УдалитьЗначение(3);
			КонецЦикла;

			СписокОбъектовИзмерений.УдалитьЗначение(2);
		КонецЦикла;

		СписокОбъектовИзмерений.УдалитьЗначение(1);
	КонецЦикла;
 

  

1&&2&&3
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Метод "Группировать" для ТаблицыЗначений такой же как для ИТ
Ответ #29 - 10. Июля 2015 :: 06:41
Печать  
спасибо, в основном сделал, сейчас проверять буду
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Метод "Группировать" для ТаблицыЗначений такой же как для ИТ
Ответ #30 - 10. Июля 2015 :: 06:55
Печать  
Обнаружил ошибку в методе "Сгруппировать":
если в измерении два объекта справочника имеют одинаковое наименование, то группировка выполняется неправильно:
- сначала идет итоговая строка по объекту-1
- следом идет итоговая строка по объекту-2
- а потом идут записи следующего уровня по объекту-1 и объекту-2 вперемешку
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Метод "Группировать" для ТаблицыЗначений такой же как для ИТ
Ответ #31 - 10. Июля 2015 :: 07:06
Печать  
es3000 писал(а) 10. Июля 2015 :: 06:55:
Обнаружил ошибку в методе "Сгруппировать":
если в измерении два объекта справочника имеют одинаковое наименование, то группировка выполняется неправильно:
- сначала идет итоговая строка по объекту-1
- следом идет итоговая строка по объекту-2
- а потом идут записи следующего уровня по объекту-1 и объекту-2 вперемешку


Нашел причину. Эта ошибка из-за того что я заменил:
Код
Выбрать все
с_MDW.ЗначениеВСтрокуБД(Значение) 


на
Код
Выбрать все
ЗначениеВСтрокуВнутр(Значение) 



А длина колонки "Измерение_с" так и осталось 9 символов.
Какую длину надо ставить?
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Метод "Группировать" для ТаблицыЗначений такой же как для ИТ
Ответ #32 - 10. Июля 2015 :: 07:12
Печать  
es3000 писал(а) 10. Июля 2015 :: 07:06:
А длина колонки "Измерение_с" так и осталось 9 символов.
Какую длину надо ставить?


сделал длину колонки 50 символов - заработало!
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать