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

Тема в разделе "1C и всё что с ней связано", создана пользователем shchof, 21 дек 2007.

Статус темы:
Закрыта.
  1. shchof

    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");
    КонецЦикла;
    Аналогично для отгружено.

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

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

    shchof Гость

    Да-ааа.
    Такое чувство, что на этом форуме собираются не специалисты-программисты, а бухгалтера или кто-то другой.
    Это женские коллективы славятся тем, что на поставленый вопрос они сделают вид, что его не слышали. И будут заниматься дальше своим делом (красить ногти, смотреться в зеркало и т.п.).

    Но чтобы программисты отказали в помощи "зеленому" коллеге ? Упс...

    Ну да ладно.
    Ведь мы идем к "КАПИТАЛИЗМУ", и за все надо платить.
    Это раньше, в годы развитого социализма, человек человеку был другом и братом.
    Еще хорошо, что не получил следующий совет: "Пригласи, мол, специалиста, заплати ему, и он тебе все сделает (в зависимости от суммы)".

    На другом форуме по данному вопросу получил совет заливать все в таблицы.
    Но я еще не разобрался с логикой заливки данных с разных выборок в одну строку таблицы.
     
  3. Zab

    Zab Well-Known Member
    1C Team

    Регистрация:
    7 авг 2006
    Сообщения:
    583
    Симпатии:
    0
    <!--QuoteBegin-shchof+21:12:2007, 11:24 -->
    <span class="vbquote">(shchof @ 21:12:2007, 11:24 )</span><!--QuoteEBegin-->Вопрос: как это объединить правильно?
    [snapback]90850" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Это вопрос по постановке задачи или по технической реализации? Если второе, то я вижу 2 пути:
    1. открыть выборку выводимых объектов, и, проверяя, есть ли по ним данные в твоих запросах, формировать строки.
    2. заполнить одну большую ТЗ со структурой твоего отчета данными трех выборок, свернуть ее (смотри методы ТЗ), и вывести.

    <!--QuoteBegin-shchof+21:12:2007, 11:24 -->
    <span class="vbquote">(shchof @ 21:12:2007, 11:24 )</span><!--QuoteEBegin-->Как еще вытащить контагента?
    [snapback]90850" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Например так:
    Ит41.ИспользоватьКорСубконто(ВидыСубконто.Контрагенты,, 1);
     
  4. Zab

    Zab Well-Known Member
    1C Team

    Регистрация:
    7 авг 2006
    Сообщения:
    583
    Симпатии:
    0
    <!--QuoteBegin-shchof+22:12:2007, 09:50 -->
    <span class="vbquote">(shchof @ 22:12:2007, 09:50 )</span><!--QuoteEBegin-->На другом форуме по данному вопросу получил совет заливать все в таблицы.
    Но я еще не разобрался с логикой заливки данных с разных выборок в одну строку таблицы.
    [snapback]90970" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Все просто, создаешь таблицу, в которой в столбцах есть все нужные данные, в не зависимости от их присутствия в таблице. Потом перебираешь свои запросы, и добавляешь в таблицу только те данные, которые есть в запросе. Остальные заполняешь нулями.
    После свертки ТЗ.Свернуть("Контра, Товар, Док", "ОстатокН, Поступило, Оплачено, Отгружено, Реализовано, ОстатокК");
    Получишь табличку в которой по совпадающим трем полям просуммированы все числовые.
     
  5. shchof

    shchof Гость

    Спасибо тебе, добрый человек.
    Есть еще Люди в наших селениях.
    Из всего сказаного, понял пока 30%, но впереди 3 выходных дня.
    Думаю смогу разобраться.

    Народ, если у кого-то будет еще свободное время, можете тоже Ваши идеи высказать.
    Чем больше будет информации, тем легче (быстее) будет сделать этот отчет.
     
  6. shchof

    shchof Гость

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

    2. Данные с выборок загоняю в таблицу
    Код (Text):
        ТЗ.НоваяКолонка("Контрагент");
    ТЗ.НоваяКолонка("Договоры");
    ТЗ.НоваяКолонка("ДатаДоговора");

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

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

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

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

    Код у меня такой:
    Код (Text):
        Ит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);
    КонецЦикла;
    КонецЦикла;
     
  7. Zab

    Zab Well-Known Member
    1C Team

    Регистрация:
    7 авг 2006
    Сообщения:
    583
    Симпатии:
    0
    <!--QuoteBegin-shchof+26:12:2007, 10:36 -->
    <span class="vbquote">(shchof @ 26:12:2007, 10:36 )</span><!--QuoteEBegin-->Не знаю как из моей выборки вытащить: ДатаДоговора, Номер платежки и др.
    Они в проводках присутствуют, а как их вытащить не знаю.
    [snapback]91383" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Код (Text):
    ДатаДоговора = Ит41.КорСубконто(1).ДатаДоговора;
    с платежкой сложнее, т.к. она реквизит табличной части документа "выписка", если еще указана. А в проводке по 51 счету, ее по идее нет...(вопреки твоим заявлениям) Придется или менять проведение, или раскручивать ИТ60.Операция.Документ на предмет поиска в его табличной части соответствующих значений...
    <!--QuoteBegin-shchof+26:12:2007, 10:36 -->
    <span class="vbquote">(shchof @ 26:12:2007, 10:36 )</span><!--QuoteEBegin-->Несколько строк в таблице идет с одним и тем же ДОГОВОРОМ, но разным товаром.
    Мне нужно "объединить", только первую строку с данным договором со строкой, где фигурирует данный договор и есть Сумма платежки (СуммаПл).
    [snapback]91383" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    ИМХО, колонка "Товар" в данном контексте не имеет смысла. Или опиши, что в ней должно быть.
    <!--QuoteBegin-shchof+26:12:2007, 10:36 -->
    <span class="vbquote">(shchof @ 26:12:2007, 10:36 )</span><!--QuoteEBegin-->У меня в карточке товара есть ФЛАГ - "облагается/не облагается" данный товар подоходным налогом.
    Как при осуществлении выборки, использовать только товар который "облагается" налогом?

    [snapback]91383" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Код (Text):
            Ит41.ВыбратьСубконто(ВидыСубконто.Номенклатура);
    Пока Ит41.ПолучитьСубконто(ВидыСубконто.Номенклатура) = 1 Цикл
    Если Ит41.Субконто(1).ФЛАГ = 0 Тогда // не облагается
    Продолжить; // берем след. товар
    КонецЕсли;
    ии=ТЗ.КоличествоСтрок()+1;
    ТЗ.НоваяСтрока(ии);
    так?
     
  8. shchof

    shchof Гость

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

    А как это менять проведение, или раскручивать ИТ60?

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

    3.
    Попытаюсь. Может и получится.
    Спасибо.
     
  9. Zab

    Zab Well-Known Member
    1C Team

    Регистрация:
    7 авг 2006
    Сообщения:
    583
    Симпатии:
    0
    <!--QuoteBegin-shchof+27:12:2007, 15:28 -->
    <span class="vbquote">(shchof @ 27:12:2007, 15:28 )</span><!--QuoteEBegin-->А как это менять проведение, или раскручивать ИТ60?
    [snapback]91617" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Обычно, в бухгалтерии, проводки по движению денег делает документ "выписка", в котором указывается п/п, для удобства работы. Причем, это не обязательное поле. Например, можно руками указать номери дату документа, либо не указывать ничего. В проводке 60 - 51 есть субконто 60-Контрагенты и договоры, 51 - расчётный счет и движения денежных средств. Ни в одном из них данных о платёжке нет. В проводке есть реквизит "Первичный документ" (справедливо для мисофта) но, это текстовое поле... В общем вывод: в проводке данных о платёжке - только номер и дата, и то, если пользователь ее указал, и если указал платёжку, а не что-нить другое.
    Следовательно, надо учитывать то, что в отчете может быть бред: не указана платёжка в выписке, а указан какой-то другой документ, либо вообще операция введена не выпиской, а ручной операцией.
    Кстати, не исключаю, что в твоей конфигурации, платёжка на самом деле явно присутствует в проводке. Но, тогда, думаю, небыло бы твоего вопроса.
     
Загрузка...
Статус темы:
Закрыта.

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