8.х Вопрос по сворачиванию документов в 1С 8!

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем julia_nik, 31 окт 2013.

  1. TopicStarter Overlay
    julia_nik
    Offline

    julia_nik

    Регистрация:
    29 окт 2013
    Сообщения:
    30
    Симпатии:
    0
    Баллы:
    1
    К примеру вот у меня сейчас 3 строки в ТЗ оплат - 600 тыс., 600 тыс., 50085тыс. Реализаций порядка 70штук. Вот нужно создать только 3 реализации на суммы оплат. Остальные которые не свернуты могут быть сгруппированы в след. день.
  2. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.782
    Симпатии:
    509
    Баллы:
    204
    Вот, как бы я подошел к этому вопросу.
    0. Выборка нужных доков за период = выборкареализаций;
    0. Цикл перебора ТЗ оплат;
    0.0 СУММАИТОГОПООПЛАТЕ = 0
    1. далее прочесываем выборкареализаций и табличные части
    2. В ТЗ оплат первая строчка 600 т.р., выбираем ее и условие СУММАИТОГОПООПЛАТЕ < 600000
    3. СУММАИТОГОПООПЛАТЕ =+СУММАТАБЧАСТИ(ну или строки, ну короче аккумулируем)
    4. Если ТЧ документа полностью прочесана, то удаляем из выборки док и переходим к следующему)
    5. Создаем новый док реализации
    6. Переход к следующей строке ТЗ оплат
    Вот как-то так, написал на коленке, осталось подкорректировать и писать код.
  3. TopicStarter Overlay
    julia_nik
    Offline

    julia_nik

    Регистрация:
    29 окт 2013
    Сообщения:
    30
    Симпатии:
    0
    Баллы:
    1
    С удалением из выборки не поняла, это как ?? с выборки убрать записи ??
  4. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    ОК допустим я Вам предложу вот так


    Док.Записать();
    ТЗОстатков=Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("Номенклатура"); /////Создаме ТЗ остатков
    ТЗ.Колонки.Добавить("Сумма");




    Для Каждого СтрОплаты Из ТЗОплат Цикл
    СуммаНовДока = 0;
    Для Каждого Стр Из ТЗТовары Цикл
    СтрТаб = Док.Товары.Добавить();
    //СуммаОплаты = СтрОплаты.Сумма;
    Если СтрОплаты.СуммаОплаты <= СуммаНовДока Тогда
    СтрТаб.Сумма = Стр.Сумма - (СуммаНовДока - СтрОплаты.СуммаОплаты);
    СтрТаб.Номенклатура = Стр.Номенклатура;
    Док.Записать();

    //////////////Добавляем в ТЗ остатков сумму которая осталась
    стрОст=ТЗОстатков.Добавить;
    стрОст.Номенклатура=стр.Номенклатура;
    стрОст.сумма=Стр.Сумма - СтрОплаты.СуммаОплаты);

    ////

    Иначе
    СтрТаб.Номенклатура = Стр.Номенклатура;
    СтрТаб.Количество = Стр.Количество;
    СтрТаб.Цена = Стр.Цена;
    СтрТаб.Сумма = Стр.сумма;
    КонецЕсли;
    СуммаНовДока = Стр.Сумма + СуммаНовДока;

    КонецЦикла;
    КонецЦикла;

    Только где потом Вы собираетесь ТЗ исполльзоваать?
  5. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.782
    Симпатии:
    509
    Баллы:
    204
    Я сократил немного (думал вы смекнете), выборка в ТЗ выгружается, а дальше уже работа с ТЗ идет.
    Уважаемый Драко практически за вас все сделал:)
  6. TopicStarter Overlay
    julia_nik
    Offline

    julia_nik

    Регистрация:
    29 окт 2013
    Сообщения:
    30
    Симпатии:
    0
    Баллы:
    1
    Этот ТЗ необходимо потом также включать в новый документ. Т.е. включить остаток от прошлого прохождения цикла и дальше по документам проходить.
  7. TopicStarter Overlay
    julia_nik
    Offline

    julia_nik

    Регистрация:
    29 окт 2013
    Сообщения:
    30
    Симпатии:
    0
    Баллы:
    1
    При реализации появились следующие вопросы, нужна помощь: к примеру мы при прохождении цикла сумма становится равна 604 000 в этот момент мы должны уже сделать манипуляции со строкой и запись в ТЗ остатков, а цикл переходит на след. строку и соответственно берет уже след ном, кол и цену и ее корректирует и сумма нового дока становится в разу больше чем 600тыс. И еще у меня почему не переходит на след. строку ТЗ оплат при прохождении первой строки??? Вот как то так. прикладываю что я исправила.

    Док.Записать();

    ТЗОстатков = Новый ТаблицаЗначений;
    ТЗОстатков.Колонки.Добавить("Номенклатура");
    ТЗОстатков.Колонки.Добавить("Сумма");
    ТЗОстатков.Колонки.Добавить("Количество");
    ТЗОстатков.Колонки.Добавить("Цена");


    Для Каждого СтрОплаты Из ТЗОплат Цикл
    СуммаНовДока = 0;

    Для Каждого Стр Из ТЗТовары Цикл
    СтрТаб = Док.Товары.Добавить();

    Если СтрОплаты.СуммаОплаты >СуммаНовДока Тогда
    СтрТаб.Номенклатура = Стр.Номенклатура;
    СтрТаб.Количество = Стр.Количество;
    СтрТаб.цена = Стр.Цена;
    СтрТаб.Сумма = Стр.Сумма;
    Иначе
    СтрТаб.Сумма = Стр.Сумма - (СуммаНовДока-СтрОплаты.СуммаОплаты);
    СтрТаб.Номенклатура = Стр.Номенклатура;
    СтрТаб.Цена = Стр.Цена;
    СтрТаб.Количество = Стр.Сумма/Стр.Цена;
    Док.Записать();

    //Добавляем в ТЗ остатков сумма которая осталась
    СтрОст = ТЗОстатков.Добавить();
    СтрОст.Номенклатура = Стр.Номенклатура;
    СтрОст.Сумма = Стр.Сумма-СтрТаб.Сумма;
    СтрОст.Цена = Стр.Цена;
    СтрОст.Количество = СтрОст.Сумма/Стр.Цена;
    СуммаНовДока = 0;
    КонецЕсли;

    СуммаНовДока = Стр.Сумма + СуммаНовДока;

    КонецЦикла;
    КонецЦикла;
    Код:
    
    
  8. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    опять не совсем понятно что нужно
    при прохождении цикла сумма становится равна 604 000 - Сумма чего? Какая сумма?
    должны уже сделать манипуляции со строкой и запись в ТЗ остатков - КАКУЮ МАНИПУЛЯЦИЮ?
    И еще у меня почему не переходит на след. строку ТЗ оплат при прохождении первой строки - НУ наверное просто условие на проверку этих ваших 600 тыс надо поставить сразу после входа в цикл
  9. TopicStarter Overlay
    julia_nik
    Offline

    julia_nik

    Регистрация:
    29 окт 2013
    Сообщения:
    30
    Симпатии:
    0
    Баллы:
    1
    Сумма нового документа становится равной 604тыс. в этот момент мне уже нужно изменить строку в этом новом документе, чтобы стало 600тыс., после этого записываем документ и нужно перейти к след. строке ТЗОплат, так как по первой строке мы создали док. ( сейчас цикл этого не делает).

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