7.7 Объединение выборок

Тема в разделе "Отчеты и обработки для "1С:Предприятие 7.7"", создана пользователем shchof, 21 дек 2007.

  1. TopicStarter Overlay
    shchof
    Offline

    shchof

    Регистрация:
    10 дек 2007
    Сообщения:
    15
    Симпатии:
    0
    Баллы:
    1
    Нужно создать отчет - Книга учета товаров. (Если учесть, что в 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");
    КонецЦикла;
    
    Аналогично для отгружено.

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

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

    Используйте тэг
    Код:
    [/color]
  2. MaxxaM
    Offline

    MaxxaM Опытный в 1С

    Регистрация:
    16 окт 2007
    Сообщения:
    288
    Симпатии:
    2
    Баллы:
    29
    если ты решил разбивать на два запроса (или это необходимо) сливай результаты в табл. значений (заранее созданную со всеми необходимыми колонками) типа
    потом сверни ее (единственное при заполнении все не заполненные ячейки забивай нулем, а то при сворачивании могут быть траблы) и отсортируй по своему желанию (для удобство пользователей правила сортировки можно вынести на форму отчета) и полученную табличку выводи на печать :unsure:
  3. TopicStarter Overlay
    shchof
    Offline

    shchof

    Регистрация:
    10 дек 2007
    Сообщения:
    15
    Симпатии:
    0
    Баллы:
    1
    Ой, наверное на 3, третий аналогичный по продажам.

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

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

    MaxxaM Опытный в 1С

    Регистрация:
    16 окт 2007
    Сообщения:
    288
    Симпатии:
    2
    Баллы:
    29
    Где то так:
    Код:
    ТабРезультатов=СоздатьОбъект("ТаблицаЗначений");
    ТабРезультатов.НоваяКолонка("Номенклатура","Справочник.ТМЦ"); //правиьное назв. см в конфиг
    ТабРезультатов.НоваяКолонка("Договор");
    ТабРезультатов.НоваяКолонка("остаток","число",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, писал прямо на сайте без проверки.
  5. TopicStarter Overlay
    shchof
    Offline

    shchof

    Регистрация:
    10 дек 2007
    Сообщения:
    15
    Симпатии:
    0
    Баллы:
    1
    В процессе работы возникло пару вопросов:
    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);
    КонецЦикла;
    КонецЦикла; 
    
    
    
  6. TopicStarter Overlay
    shchof
    Offline

    shchof

    Регистрация:
    10 дек 2007
    Сообщения:
    15
    Симпатии:
    0
    Баллы:
    1
    1. Дату во всех выборках повытаскивал, правда через "...". В выборке я сделал группировку по периоду - "день", Этот день и есть моя дата.

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


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

    3. Тоже вопрос открыт. Не знаю "где копать".

Поделиться этой страницей