Помощь - Поиск - Пользователи - Календарь
Полная версия: Объединение выборок
1C-PRO - Форум по 1С > Форумы по платформе "1С:Предприятие 7.7" > (7.7) Отчеты и обработки для платформы "1С:Предприятие 7.7"
shchof
Нужно создать отчет - Книга учета товаров. (Если учесть, что в 1С я - "нулевой", то задачка сложная).
Содержащий в строке:
Поставщик товара, документ, его номер и дата
Наименование, вид (сорт, артикул) товара
Остаток нереализованного товара
поступило (изготовлено)
оплачено
отгружено
реализовано
остаток нереализо-ванного товара

Поступило берем из проводки Д. 41.1 -- К. 60.1
Оплачено берем из проводки Д. 60.1 -- К. 51
Отгружено и Реализовано - из проводки Д. 90.2 -- К. 41.2

Решил сделать выборки (для "рыбы" использовал конструктор):
для прихода
Код
Ит41 = СоздатьОбъект("БухгалтерскиеИтоги");
Ит41.ИспользоватьСубконто(ВидыСубконто.Номенклатура,, 1);
Ит41.ИспользоватьКорСубконто(ВидыСубконто.Договоры,, 1);
Ит41.ВыполнитьЗапрос(ВыбНачПериода, ВыбКонПериода, "41.1", "60.1",, 3,, "СК");
Таб.ВывестиСекцию("Заголовок");
Сформировать_Колонки(Ит41, Таб, "Шапка");
Таб.Опции(0,0,Таб.ВысотаТаблицы(),0);
Ит41.ВыбратьКорСубконто(ВидыСубконто.Договоры);
Пока Ит41.ПолучитьКорСубконто(ВидыСубконто.Договоры) = 1 Цикл
Сформировать_Колонки(Ит41, Таб, "КорСубконто1");
Ит41.ВыбратьСубконто(ВидыСубконто.Номенклатура);
Пока Ит41.ПолучитьСубконто(ВидыСубконто.Номенклатура) = 1 Цикл
Сформировать_Колонки(Ит41, Таб, "Субконто1");
КонецЦикла;
КонецЦикла;


для оплачено
Код
Ит60 = СоздатьОбъект("БухгалтерскиеИтоги");
Ит60.ИспользоватьСубконто(ВидыСубконто.Договоры,, 1);
Ит60.ВыполнитьЗапрос(ВыбНачПериода, ВыбКонПериода, "60.1", "51",, 3,, "СК");
Таб.ВывестиСекцию("Заголовок");
Сформировать_Колонки(Ит60, Таб, "Шапка");
Таб.Опции(0,0,Таб.ВысотаТаблицы(),0);
Ит60.ВыбратьСубконто(ВидыСубконто.Договоры);
Пока Ит60.ПолучитьСубконто(ВидыСубконто.Договоры) = 1 Цикл
Сформировать_Колонки(Ит60, Таб, "Субконто1");
КонецЦикла;

Аналогично для отгружено.

Вопрос: как это объединить правильно? Как еще вытащить контагента?

Помогите. Буду рад любому дельному совету.

Используйте тэг [CODE]
MaxxaM
если ты решил разбивать на два запроса (или это необходимо) сливай результаты в табл. значений (заранее созданную со всеми необходимыми колонками) типа
потом сверни ее (единственное при заполнении все не заполненные ячейки забивай нулем, а то при сворачивании могут быть траблы) и отсортируй по своему желанию (для удобство пользователей правила сортировки можно вынести на форму отчета) и полученную табличку выводи на печать cowboy.gif
shchof
Цитата(MaxxaM @ 21.12.2007, 14:17) *

если ты решил разбивать на два запроса (или это необходимо)

Ой, наверное на 3, третий аналогичный по продажам.

я просто не знаю как еще можно, или как лучше.

Цитата(MaxxaM @ 21.12.2007, 14:17) *

сливай результаты в табл. значений (заранее созданную со всеми необходимыми колонками) типа
потом сверни ее (единственное при заполнении все не заполненные ячейки забивай нулем, а то при сворачивании могут быть траблы) и отсортируй по своему желанию (для удобство пользователей правила сортировки можно вынести на форму отчета) и полученную табличку выводи на печать cowboy.gif


А как это сделать, вот в чем вопрос?
Мои знания в конфигурировании ниже отметки нуль.
Не могли бы привести код программы для моих ... , ну в общем, для моих двух запросов описаных выше.
Мне стыдно за свои знания. Но ведь с чего-то ведь нужно начинать освоение конфигуратора.
MaxxaM
Где то так:
Код

ТабРезультатов=СоздатьОбъект("ТаблицаЗначений");
ТабРезультатов.НоваяКолонка("Номенклатура","Справочник.ТМЦ"); //правиьное назв. см в конфиг
ТабРезультатов.НоваяКолонка("Договор");
ТабРезультатов.НоваяКолонка("остаток","число",17,9); //формат взять из конфига
....
//и так все колонки, в принципе тип колонок можно не указывать 1с сама разберется
Ит41 = СоздатьОбъект("БухгалтерскиеИтоги");
Ит41.ИспользоватьСубконто(ВидыСубконто.Номенклатура,, 1);
Ит41.ИспользоватьКорСубконто(ВидыСубконто.Договоры,, 1);
Ит41.ВыполнитьЗапрос(ВыбНачПериода, ВыбКонПериода, "41.1", "60.1",, 3,, "СК");
Таб.ВывестиСекцию("Заголовок");
Сформировать_Колонки(Ит41, Таб, "Шапка");
Таб.Опции(0,0,Таб.ВысотаТаблицы(),0);
Ит41.ВыбратьКорСубконто(ВидыСубконто.Договоры);
Пока Ит41.ПолучитьКорСубконто(ВидыСубконто.Договоры) = 1 Цикл
//Сформировать_Колонки(Ит41, Таб, "КорСубконто1");
// пока ничего не выводим
Ит41.ВыбратьСубконто(ВидыСубконто.Номенклатура);
Пока Ит41.ПолучитьСубконто(ВидыСубконто.Номенклатура) = 1 Цикл
// Сформировать_Колонки(Ит41, Таб, "Субконто1");
ии=ТабРезультатов.КоличествоСтрок()+1;
ТабРезультатов.НоваяСтрока(ии);
ТабРезультатов.УстановитьЗначение(ии,"Номенклатура",Ит.Субконто(1))
ТабРезультатов.УстановитьЗначение(ии,"Договора",Ит.КорСубконто(1))
.....
//какие колонки не задействованы и имеют числовой формат забиваем - 0
КонецЦикла;
КонецЦикла;

// таким образом заполняем табличку во всех трех запросах и дальше

ТабРезультатов.Свернуть("Номенклатура,Договор","Остаток,Приход")
// В первых кавычках поля по которым надо объединять (типа уникальный ключ ), во вторых какие
//суммировать, перечисленны должны быть все поля, коих не будет тех с таблицы выкинут.
// Ну и на закуску :
ТабРезультатов.Сортировать("Номенклатура,Склад","+");
//или еще как, только учти нельзя: ТабРезультатов.Сортировать("Номенклатура.ЦенаПродажи","+") если по убыванию "-"
ТабРезультатов.ВыбратьСтроки();
Пока ТабРезультатов.ПолучитьСтроки()=1 Цикл
//а вот здесь уже выводим на печать (экран)
КонецЦикла;



граматические ошибки и подробное описание см Help-еr, писал прямо на сайте без проверки.
shchof
В процессе работы возникло пару вопросов:
1. Не знаю как из моей выборки вытащить: ДатаДоговора, Номер платежки и др.
Они в проводках присутствуют, а как их вытащить не знаю.

2. Данные с выборок загоняю в таблицу
Код

ТЗ.НоваяКолонка("Контрагент");
ТЗ.НоваяКолонка("Договоры");
ТЗ.НоваяКолонка("ДатаДоговора");

ТЗ.НоваяКолонка("Товар");

ТЗ.НоваяКолонка("НачОстатокС");
ТЗ.НоваяКолонка("НачОстатокК");
ТЗ.НоваяКолонка("ЦенаП");
ТЗ.НоваяКолонка("КоличествоП");
ТЗ.НоваяКолонка("СуммаП");

ТЗ.НоваяКолонка("Платежка");
ТЗ.НоваяКолонка("ДатаПл");
ТЗ.НоваяКолонка("СуммаПл");



Несколько строк в таблице идет с одним и тем же ДОГОВОРОМ, но разным товаром.
Мне нужно "объединить", только первую строку с данным договором со строкой, где фигурирует данный договор и есть Сумма платежки (СуммаПл).
Как это делать?

3. Еще маленький, но сложный вопрос.
У меня в карточке товара есть ФЛАГ - "облагается/не облагается" данный товар подоходным налогом.
Как при осуществлении выборки, использовать только товар который "облагается" налогом?

Код у меня такой:
Код

Ит41 = СоздатьОбъект("БухгалтерскиеИтоги");
Ит41.ИспользоватьСубконто(ВидыСубконто.Номенклатура,, 1);
Ит41.ИспользоватьКорСубконто(ВидыСубконто.Договоры,, 1);
Ит41.ИспользоватьКорСубконто(ВидыСубконто.Контрагенты,, 1);
Ит41.ВыполнитьЗапрос(ВыбНачПериода, ВыбКонПериода, "41.1", "60.1",, 3,, "СК");
Ит41.ВыбратьКорСубконто(ВидыСубконто.Договоры);
Пока Ит41.ПолучитьКорСубконто(ВидыСубконто.Договоры) = 1 Цикл
Ит41.ВыбратьСубконто(ВидыСубконто.Номенклатура);
Пока Ит41.ПолучитьСубконто(ВидыСубконто.Номенклатура) = 1 Цикл
ии=ТЗ.КоличествоСтрок()+1;
ТЗ.НоваяСтрока(ии);
ТЗ.УстановитьЗначение(ии,"Товар",Ит41.Субконто(1));
ТЗ.УстановитьЗначение(ии,"Договоры",Ит41.КорСубконто(1));
ТЗ.УстановитьЗначение(ии,"ДатаДоговора",Ит41.Операция.ДатаОперации);
ТЗ.УстановитьЗначение(ии,"Контрагент",Ит41.КорСубконто(ВидыСубконто.Контрагенты));
ТЗ.УстановитьЗначение(ии,"СуммаП",Ит41.КорДО());
ТЗ.УстановитьЗначение(ии,"КоличествоП",Ит41.КорДО(3));
ТЗ.УстановитьЗначение(ии,"ЦенаП",Ит41.КорДО()/Ит41.КорДО(3));

ТЗ.УстановитьЗначение(ии,"Платежка",0);
ТЗ.УстановитьЗначение(ии,"СуммаПл",0);

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


shchof
1. Дату во всех выборках повытаскивал, правда через "...". В выборке я сделал группировку по периоду - "день", Этот день и есть моя дата.

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


2. Со слиянием таблиц разобрался. Две ночи не спал. Но, УРА... На выходе то, что ожидал.

3. Тоже вопрос открыт. Не знаю "где копать".
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2009 Invision Power Services, Inc.