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

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) и разбери код
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)