8.х Создание документов из части с условием

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

  1. TopicStarter Overlay
    daab
    Offline

    daab Опытный в 1С

    Регистрация:
    14 окт 2011
    Сообщения:
    269
    Симпатии:
    0
    Баллы:
    26
    Доброго времени суток

    1С 8.3 Бухгалтерия 3.0 соответственно

    Задача следующая: получаю за период ТЗ со значениями Товар, Цена и Количество, далее из всех данных необходимо создать документы с установкой конкретной суммы документа.

    На выходы должно быть создано N количество документов с одинаковой суммой документа, соответственно если товара больше его надо пилить.

    Пробовал через счетчик и несколько циклов что то результат не айс. Может наведете на правильный путь.

    Благодарю.
  2. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    что значит
    т.е. по сумме позиций примерно поровну поделить или как?
  3. TopicStarter Overlay
    daab
    Offline

    daab Опытный в 1С

    Регистрация:
    14 окт 2011
    Сообщения:
    269
    Симпатии:
    0
    Баллы:
    26
    товар 1 | 10 | 200 = 2000
    товар 2 | 10 |150 = 1500
    товар 3 | 20 | 50 = 1000

    Сумма в документа = 3000

    Тогда в Документ попадают
    товар 1 | 10 | 200
    товар 2 | 10 | 100

    Следующий документ
    товар 2 | 10 | 50
    товар 3 | 20 | 50
  4. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    ваш пример у меня немного по суммам не сходиться, потому есть сомнения как дробить тз
  5. TopicStarter Overlay
    daab
    Offline

    daab Опытный в 1С

    Регистрация:
    14 окт 2011
    Сообщения:
    269
    Симпатии:
    0
    Баллы:
    26
    да я тоже с этим уже мучаюсь с прошлой пятницы) тогда получается через запрос напрямую создавать?

    или я не так понял?
  6. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    ну я бы и циклом вполне обошлась. Тут надо подумать что оптимальнее. Есть ли ограничение на количество позиций в документе? И что будет если ровно на сумму документа не выйти? допустим будет не 2000, а 1990.
  7. TopicStarter Overlay
    daab
    Offline

    daab Опытный в 1С

    Регистрация:
    14 окт 2011
    Сообщения:
    269
    Симпатии:
    0
    Баллы:
    26
    Значиться так, ограничения только в сумме документа, сумма документа может быть меньше но не превышать указанного значения
  8. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    ну тогда можно в цикле идти перебором и подбирать значения - но это в лоб решение - не сильно оптимальное
  9. LordMaverick
    Online

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.440
    Симпатии:
    374
    Баллы:
    104
    тут уже не суть важно какая конфигурация, задача в принципе общая

    если грубо то так
    1) полученную ТЗ отсортировать по убыванию суммы товара
    2) (при условии что сумма позиции не превышает требуемую сумму документа) в цикле обойти ТЗ, создавая по необходимости документы

    таким образом в первых документах будет от 1-ой позиции, а в последних сколько там выдет по сумме, до десятков или сотен :) (ну это так, абстрактно, без детальных ваших данных)
  10. TopicStarter Overlay
    daab
    Offline

    daab Опытный в 1С

    Регистрация:
    14 окт 2011
    Сообщения:
    269
    Симпатии:
    0
    Баллы:
    26
    ок это то понятно

    Для Каждого ТекущаяСтрока ИЗ ТЗ Цикл


    Товар = ТЗ.Товар
    Цена = ТЗ.Цена
    Количество = ТЗ.Количество // Превышает - как программа будет разбивать значение, а в следующий документ будет попадать Количество за минусом

    Сумма из запроса не валиться в ТЗ
  11. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    т.е. еще и внутри позиций надо товары дробить? тогда через вложенные циклы, удаляя или изменяя строки в тз, чтоб реальное количество оставалось
  12. TopicStarter Overlay
    daab
    Offline

    daab Опытный в 1С

    Регистрация:
    14 окт 2011
    Сообщения:
    269
    Симпатии:
    0
    Баллы:
    26
    всмысле внутри позиций? а как нам закинуть в документ такое количество товара, чтобы оно не превышало указанного значения суммы в документе?
  13. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    ну вот я и пытаюсь все выяснить. На мой взгляд вы пример то вначале неудачный по цифрам привели, потому и не понятно
  14. TopicStarter Overlay
    daab
    Offline

    daab Опытный в 1С

    Регистрация:
    14 окт 2011
    Сообщения:
    269
    Симпатии:
    0
    Баллы:
    26
    Создается документ, в него через переборку строк добавляются позиции, и надо добавить столько товара чтобы его общая сумма не превышала указанного значения Суммы

    и далее создавать уже следующий документ с оставшимся товаром и проверкой по сумме
  15. LordMaverick
    Online

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.440
    Симпатии:
    374
    Баллы:
    104
    ну а если сумма строки в ТЗ превышает требуемую сумму документа?
  16. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    Хорошо, я немного перефразирую ваш пример а вы скажите правильно или нет.
    Начальная тз:
    Товар1 10шт 100
    Товар2 15шт 200
    ....
    Надо составить документ чтоб сумма была 1600
    док1
    Товар1 10шт 100
    Товар2 3шт 200
    итого 1600

    док2
    Товар2 8шт 200
    итого 1600

    док3
    Товар2 4шт 200
    итого 800

    так надо или нет?
    --- Объединение сообщений, 24 мар 2015 ---
    вот и я про что, надо ее дробить или как
  17. TopicStarter Overlay
    daab
    Offline

    daab Опытный в 1С

    Регистрация:
    14 окт 2011
    Сообщения:
    269
    Симпатии:
    0
    Баллы:
    26
    тогда КоличествовВДокумент = УказанноезначениеСуммыДокумента / ТЗ.Цена
    --- Объединение сообщений, 24 мар 2015 ---

    да именно так
  18. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    блин столкьо времени убили, вы бы сразу такой пример и привели для наглядности, прототип решения какой вдится:
    идем в цикле по тз, считаем сумму, если превысили предел, то по текущей позиции считаем количество, которое влезет в документ, добавленные в документ позиции удаляем из исходной тз или изменяем количество, елси толкьо часть добавили. Вот как то так я бы делала
  19. LordMaverick
    Online

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.440
    Симпатии:
    374
    Баллы:
    104
    тогда ещё сознавайтесь, как вы в ТЗ собираете, построчно или суммируя?
  20. TopicStarter Overlay
    daab
    Offline

    daab Опытный в 1С

    Регистрация:
    14 окт 2011
    Сообщения:
    269
    Симпатии:
    0
    Баллы:
    26
    вроде чето работает)) только как прогнать ТЗ в цикла для создания документов не догоняю
    --- Объединение сообщений, 24 мар 2015 ---
    Код:
    ТекущаяСтрока = Объект.ТЗ.Выгрузить();
    
    НовДок = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
             
        Для Каждого ТекущаяСтрока ИЗ Объект.ТЗ Цикл
            
                СтрокаДок=НовДок.Товары.Добавить();
                СтрокаДок.Номенклатура=ТекущаяСтрока.Номенклатура;
                СтрокаДок.ЕдиницаИзмерения=ТекущаяСтрока.Номенклатура.ЕдиницаИзмерения;
                СтрокаДок.Цена=ТекущаяСтрока.Цена*?(Объект.Наценка=0,1,(1+Объект.Наценка/100));
                Если ТекущаяСтрока.Сумма > Объект.МаксСумма Тогда
                СтрокаДок.Количество=Объект.МаксСумма/ТекущаяСтрока.Цена;
                Иначе СтрокаДок.Количество = ТекущаяСтрока.Количество;
                КонецЕсли;
                Если СтрокаДок.Количество = ТекущаяСтрока.Количество тогда
                Объект.ТЗ.Удалить(ТекущаяСтрока);
                Иначе ТекущаяСтрока.Количество = ТекущаяСтрока.Количество-СтрокаДок.Количество;
                КонецЕсли;
                СтрокаДок.СтавкаНДС=ТекущаяСтрока.Номенклатура.СтавкаНДС;
                СтрокаДок.СчетУчета=СчетУчета;
                СтрокаДок.СчетУчетаНДС=СчетУчетаНДСПоРеализации;
                ОбработкаТабличныхЧастейКлиентСервер.РассчитатьСуммуТабЧасти(СтрокаДок,НовДок);
                ОбработкаТабличныхЧастейКлиентСервер.РассчитатьСуммуНДСТабЧасти(СтрокаДок,НовДок.СуммаВключаетНДС);
        Если НовДок.Товары.Итог("Сумма") >= Объект.МаксСумма Тогда
            Прервать
        КонецЕсли;
       КонецЦикла;
      НовДок.Записать(РежимЗаписиДокумента.Запись);
        Сообщить ("Записан новый документ поступления " + НовДок.Номер);    
    
    Цикол по какому параметру или значению вызывать
    Последнее редактирование: 24 мар 2015

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