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

1. SpideRus 03.08.09 11:52 Сейчас в теме
Снова. Используя метод ПрисоеденитьСекцию.

Необходимо ТОЛЬКО с помощью Таблицы значений вывести номенклатуру товаров и справа присоединить все склады с количеством. Выглядеть это должно примерно так:



Но, дальше вывода номенклатуры и присоединения первой секции со всем количеством, без разбивки по складам у меня не идет. Пробывал даже использовать, НЕПРАВИЛЬНЫЙ подход, одновременнно создовал две таблицы значений, одну сворачивал по номенклатуре, другую по складам, но все равно ни фига не получается.

Процедура Сформировать() 
   ТЗ=СоздатьОбъект("ТаблицаЗначений"); 
   ТЗ2=СоздатьОбъект("ТаблицаЗначений"); 
   Таб=Создатьобъект("Таблица"); 
   Таб.ИсходнаяТаблица("Таблица"); 
   ТЗ.НоваяКолонка("Номенклатура"); 
   ТЗ.НоваяКолонка("Склад"); 
   ТЗ.НоваяКолонка("Количество","Число",10,0); 
   ТЗ2.НоваяКолонка("Номенклатура"); 
   ТЗ2.НоваяКолонка("Склад"); 
   ТЗ2.НоваяКолонка("Количество","Число",10,0); 
   Рег=СоздатьОбъект("Регистр.ОстаткиТМЦ"); 
   Рег.ВыбратьДвижения(); 
   Рег2=СоздатьОбъект("Регистр.ОстаткиТМЦ"); 
   Рег2.ВыбратьДвижения(); 
   Пока Рег.ПолучитьДвижение()=1 Цикл 
      ТЗ.НоваяСтрока(); 
      ТЗ.Номенклатура=Рег.Номенклатура; 
      ТЗ.Склад=Рег.Склад; 
      ТЗ.Количество=Рег.Количество; 
      //Вторая таблица значений 
      ТЗ2.НоваяСтрока(); 
      ТЗ2.Номенклатура=Рег.Номенклатура; 
      ТЗ2.Склад=Рег.Склад;           
      ТЗ2.Количество=Рег.Количество; 
   КонецЦикла; 
   ТЗ.Свернуть("Номенклатура,Склад", "Количество"); 
   ТЗ2.Свернуть("Склад", "Количество"); 
   ТЗ.Сортировать("Номенклатура"); 
   ТЗ2.Сортировать("Склад"); 
   ТЗ.ВыбратьСтроки(); 
   ТЗ2.ВыбратьСтроки(); 
   Таб.ВывестиСекцию("Шапка|Товар"); 
   Пока ТЗ2.ПолучитьСтроку()=1 Цикл 
      Таб.ПрисоединитьСекцию("Шапка|Склад"); 
   КонецЦикла; 
   Пока ТЗ.ПолучитьСтроку()=1 Цикл 
      Таб.ВывестиСекцию("Элемент|Товар"); 
      Для Я=1 по ТЗ2.КоличествоСтрок() Цикл 
      Таб.ПрисоединитьСекцию("Элемент|Склад"); 
      КонецЦикла; 
   КонецЦикла; 
   Таб.ТолькоПросмотр(1);         
   Таб.Показать() 
КонецПроцедуры
Показать


С разметкой таблицы:

По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Tatitutu 3855 03.08.09 12:02 Сейчас в теме
Сейчас скину код - не вопрос. Все намного прозаичнее. 5 минут напишу
3. Ёпрст 1063 03.08.09 12:04 Сейчас в теме
Зачем для этой цели перебирать движение регистра ?
Напишите запрос + Группировка Все ВошедшиеВЗапрос и привет..
4. Tatitutu 3855 03.08.09 12:16 Сейчас в теме
Процедура Сформировать()
ТЗ=СоздатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("Номенклатура");

Сверток=СоздатьОбъект("СписокЗначений");
КолКол=1; //количество колонок

Рег=СоздатьОбъект("Регистр.ОстаткиТМЦ");
Рег.ВыбратьДвижения();

Пока Рег.ПолучитьДвижение()=1 Цикл
ТекСклад=Рег.Склад;
ЗагКол="";
НомКолонки=0;

Для Счет = 1 По ТЗ.КоличествоКолонок() Цикл
ТЗ.ПолучитьПараметрыКолонки(Счет,,,,ЗагКол,,,);
Если ЗагКол=ТекСклад Тогда
НомКолонки=Счет;
Прервать;
КонецЕсли;//ЗакКол=ТекСклад
КонецЦикла;

Если НомКолонки=0 Тогда
ТЗ.НоваяКолонка(,"Число",5,0,ТекСклад);
КолКол=КолКол+1;
Сверток.ДобавитьЗначение(КолКол);
КонецЕсли;


ТЗ.НоваяСтрока();
ТЗ.Номенклатура=Рег.Номенклатура;
ТЗ.УстановитьЗначение(ТЗ.НомерСтроки,НомКолонки,Рег.Количество);
КонецЦикла;


Свер=Сверток.ВстрокуСРазделителями();


ТЗ.Свернуть("Номенклатура",Свер);

ТЗ.ВыбратьСтроку();

//у тебя получилась таблица дальше попробуй сам


КонецПроцедуры
5. Ёпрст 1063 03.08.09 12:23 Сейчас в теме
(4) Мда..
Это - никогда не заработает.
6. Tatitutu 3855 03.08.09 13:13 Сейчас в теме
(5) Почему ?
Пример : в колонке номенклатура в шапке размеры (формируются динамически)

8. Ёпрст 1063 03.08.09 13:18 Сейчас в теме
(6)
1.Сравнение строки со ссылкой... это п..ц.
2.ВстрокуСРазделителями никак не покатит просто так в строку свертки.
3.Чтоб поглядеть, если нужная колонка в ТЗ - не обязательно перебирать ВСЕ колонки в ТЗ + п.1
9. Tatitutu 3855 03.08.09 13:35 Сейчас в теме
(8) Согласен пропустил
1.Если ЗагКол=ТекСклад Тогда
надо
Если Строка(ЗагКол)=Строка(ТекСклад) Тогда

2. Еще как прокатит (хорошее решение когда не знаешь заранее сколько будет столцов в таблице)
3. Согласен есть и другие варинты
таблица в конфигураторе

итоговая таблица


в итоговой таблице не выбирал подмодель и размер модели (поэтому колонки не задействованы)
10. Ёпрст 1063 03.08.09 13:41 Сейчас в теме
(9)
Да ну ?

ТЗ = СоздатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("Вася");
ТЗ.НоваяКолонка("Федя");
ТЗ.НоваяКолонка("Сумма");
СчетчикЦикла = 0;
Для к  = 1 По 10 Цикл
	ТЗ.НоваяСтрока();
	ТЗ.Вася = "Вася";
	ТЗ.Сумма = к;
КонецЦикла;

СЗ = СоздатьОбъект("СписокЗначений");
СЗ.ДобавитьЗначение("Вася");
СЗ.ДобавитьЗначение("Федя");
стр = СЗ.ВСтрокуСРазделителями();
ТЗ.Свернуть(стр,"Сумма");
Показать


И - БОЛТ!


ибо стр = "Вася","Федя";
11. Tatitutu 3855 03.08.09 13:45 Сейчас в теме
(10) как у тебя конечно болт

у меня
ТЗ.НоваяКолонка(,"Число",5,0,ТекСклад); //не задано имя или индификатор колонки
КолКол=КолКол+1; //вот для этого и считаю сколько колонок
Сверток.ДобавитьЗначение(КолКол);

и в итоге будет ТЗ.Свернуть("Номенклатура","1,2,3,4,5,6")
12. Ёпрст 1063 03.08.09 13:48 Сейчас в теме
(11) Гонишь...
Свер=Сверток.ВстрокуСРазделителями();
ТЗ.Свернуть("Номенклатура",Свер);


У тебя будет
Свер = "1","2","3","4" ...
и по этой строке ТЗ НИКОГДА не свернётся.
13. Tatitutu 3855 03.08.09 13:50 Сейчас в теме
15. Ёпрст 1063 03.08.09 13:53 Сейчас в теме
(13) не..
просто смутило:

"Преобразует СписокЗначений в строку, содержащую, разделенные запятыми числа и строки в двойных кавычках."

забыл ужо, что числа без кавычек будут..
Лень проверять было.
22. Tatitutu 3855 04.08.09 08:59 Сейчас в теме
Надо именно по регистру и без ЗАПРОСА, СПИСКА ЗНАЧЕНИЙ, только ТЗ.

именно это и написано в (4)
26. SpideRus 04.08.09 16:26 Сейчас в теме
Ёпрст пишет:
Если нужна скорость - пиши прямой запрос...


Скорость не нужна. Важны разные способы.

Странник Сети (Собеседник Разума) пишет:

[IS-QUOTE]Надо именно по регистру и без ЗАПРОСА, СПИСКА ЗНАЧЕНИЙ, только ТЗ.

именно это и написано в (4)
[/IS-QUOTE]

Возражений нет.

Dmitry Afanasyev пишет:
дабы не изобретать велосипед.


Он то как раз и нужен. Пока сам не попробуешь, ни чего не выйдет.
27. Tatitutu 3855 04.08.09 16:27 Сейчас в теме
7. afanasko 35 03.08.09 13:17 Сейчас в теме
Посмотрите типовую "Торговля и склад". Там есть такой отчет "Ведомость по остаткам ТМЦ". В нем реализовано то, что вам нужно.
14. Tatitutu 3855 03.08.09 13:51 Сейчас в теме
Сейчас прикреплю обработку которая будет работать по этому принципу в любой конфигурации
16. Ёпрст 1063 03.08.09 13:53 Сейчас в теме
(14) да не нужны нам твои залипухи..
17. Ёпрст 1063 03.08.09 13:53 Сейчас в теме
Метод один хрен порочный... и не быстрый.
18. Tatitutu 3855 03.08.09 14:03 Сейчас в теме
(17) напиши быстрее и предложи свой БЫСТРЫЙ МЕТОД развернуть таблицу в погоризонтали и по вертикали (не зная заранее сколько будут столбцов и строк в таблице).
за (16) отдельное спасибо.

если запросом , там еще проще Группировка склад - при новом цикле СРАЗУ без ПРОВЕРКИ добавляем НОВУЮ КОЛОНКУ и туда (в эту колонку остаток ) остаток.
19. Ёпрст 1063 03.08.09 14:13 Сейчас в теме
(18) Я написал еще в (3) ..
А еще проще - ИТЗ ...
20. SpideRus 04.08.09 06:05 Сейчас в теме
Ёпрст,

Зачем для этой цели перебирать движение регистра ?
Напишите запрос + Группировка Все ВошедшиеВЗапрос и привет..


Надо именно по регистру и без ЗАПРОСА, СПИСКА ЗНАЧЕНИЙ, только ТЗ.

Dmitry Afanasyev,

Посмотрите типовую "Торговля и склад". Там есть такой отчет "Ведомость по остаткам ТМЦ". В нем реализовано то, что вам нужно.


Он не нужен.
21. Ёпрст 1063 04.08.09 08:17 Сейчас в теме
(20) Чем запрос не угодил?
Если нужна скорость - пиши прямой запрос...
Хотя и обычный будет быстрее, чем перебор ВСЕХ движений регистра.
23. afanasko 35 04.08.09 10:13 Сейчас в теме
SpideRus
Он не нужен.

Я и не говорю, что нужно использовать его. Я предлагаю тебе посмотреть как там формируется печатная форма с неизвестным заранее количеством столбцов, дабы не изобретать велосипед.

З.Ы. все таки не ведомость по остаткам ТМЦ, а "Остатки ТМЦ"
24. Tatitutu 3855 04.08.09 11:40 Сейчас в теме
25. afanasko 35 04.08.09 13:25 Сейчас в теме
(24) А мне оно зачем? Я и так знаю как это сделать:-)
28. SpideRus 05.08.09 05:26 Сейчас в теме
Может гоню, но у меня:

Ошибка:
"ТЗ.УстановитьЗначение(Тз.НомерСтроки, НомКОлонки, Рег.Количество);
Номер за пределами значения"
29. Tatitutu 3855 05.08.09 08:57 Сейчас в теме
(28) Чему равно НомКолонки - скорее всего у тебя нет этой колонки еще в ТЗ
Сравни НомКолонки и ТЗ.КоличествоКолонок()
Скачай (24) и разбери код
Оставьте свое сообщение

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