8.х Заполнение отчета производства за смену

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем User, 25 янв 2015.

  1. TopicStarter Overlay
    User
    Offline

    User Опытный в 1С

    Регистрация:
    4 фев 2013
    Сообщения:
    146
    Симпатии:
    0
    Баллы:
    26
    Здравствуйте! Подскажите, пожалуйста, как правильно вывести данные из запроса. В документе отчет производства за смену ТЧ.Продукция и ТЧ.Материалы. Необходимо отразить производство 4 ед. продукции с разными нормами сырья на единицу. Например, 2 шкафа по 3 дверные ручки на единицу, 2 шкафа по 4 дверные ручки на единицу. В итоге на 4 шкафа 14 дверных ручек.
    Процедура расчета:
    Код:
    ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
                       |    СУММА(1) КАК Источник,
                       |    ПотребностьЗПОстатки.Номенклатура КАК Номенклатура,
                       |    ПотребностьЗПОстатки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
                       |    ПотребностьЗПОстатки.Продукция КАК Продукция,
                       |    ПотребностьЗПОстатки.ХарактеристикаПродукции КАК ХарактеристикаПродукции,
                       |    ПотребностьЗПОстатки.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
                       |    ПотребностьЗПОстатки.ВидВоспроизводства КАК ВидВоспроизводства,
                       |    ПотребностьЗПОстатки.Спецификация КАК Спецификация,
                       |    ПотребностьЗПОстатки.Подразделение КАК Подразделение,
                       |    СУММА(ПотребностьЗПОстатки.ЕдиницаИзмерения.Коэффициент) КАК Коэффициент,
                       |    СУММА(ПотребностьЗПОстатки.КоличествоОстаток) КАК КолПотребность,
                       |    ЗаказыНаПроизводствоОстатки.ПроцентОтходовНаОбъем,
                       |    ПотребностьЗПОстатки.НормаНаЕд,
                       |    ПотребностьЗПОстатки.КоличествоПродукцииОстаток КАК КоличествоПродукции
                       |ИЗ
                       |    РегистрНакопления.ПотребностьЗП.Остатки(
                       |            &Дата,
                       |            ЗаказНаПроизводство = &ПроизвЗаказ
                       |                И Продукция = &Продукция
                       |                И ПроцентОтходовНаОбъем = &ПроцентОтходовНаОбъем) КАК ПотребностьЗПОстатки
                       |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗаказыНаПроизводство.Остатки(
                       |                &Дата,
                       |                ЗаказНаПроизводство = &ПроизвЗаказ
                       |                    И Номенклатура = &Продукция
                       |                    И ПроцентОтходовНаОбъем = &ПроцентОтходовНаОбъем) КАК ЗаказыНаПроизводствоОстатки
                       |        ПО ПотребностьЗПОстатки.ЗаказНаПроизводство = ЗаказыНаПроизводствоОстатки.ЗаказНаПроизводство
                       |            И ПотребностьЗПОстатки.ПроцентОтходовНаОбъем = ЗаказыНаПроизводствоОстатки.ПроцентОтходовНаОбъем
                       |            И ПотребностьЗПОстатки.Продукция = ЗаказыНаПроизводствоОстатки.Номенклатура
                       |            И ПотребностьЗПОстатки.Спецификация = ЗаказыНаПроизводствоОстатки.Спецификация
                       |
                       |СГРУППИРОВАТЬ ПО
                       |    ПотребностьЗПОстатки.Номенклатура,
                       |    ПотребностьЗПОстатки.ХарактеристикаНоменклатуры,
                       |    ПотребностьЗПОстатки.Продукция,
                       |    ПотребностьЗПОстатки.ХарактеристикаПродукции,
                       |    ПотребностьЗПОстатки.ЕдиницаИзмерения,
                       |    ПотребностьЗПОстатки.ВидВоспроизводства,
                       |    ПотребностьЗПОстатки.Спецификация,
                       |    ПотребностьЗПОстатки.Подразделение,
                       |    ЗаказыНаПроизводствоОстатки.ПроцентОтходовНаОбъем,
                       |    ПотребностьЗПОстатки.КоличествоПродукцииОстаток,
                       |    ПотребностьЗПОстатки.НормаНаЕд
                       |
                       |УПОРЯДОЧИТЬ ПО
                       |    Источник";
       
        Запрос = Новый Запрос;
        Запрос.Текст = ТекстЗапроса;
       
        Запрос.УстановитьПараметр("ПроизвЗаказ", ДокументОснование);
        Запрос.УстановитьПараметр("Дата",   Дата);
        Запрос.УстановитьПараметр("Продукция",   Источник.Номенклатура);
        Запрос.УстановитьПараметр("ПроцентОтходовНаОбъем",   Источник.ПроцентОтходовНаVЗаказа);
       
       
        РезультатЗапроса = Запрос.Выполнить();
        Если РезультатЗапроса.Пустой() Тогда
           
            Возврат;
        КонецЕсли;
        //
        МетаРеквизиты = Метаданные.НайтиПоТипу(Тип(ТабЧасть)).Реквизиты;
        ЕстьПолеВидВоспроизводства = МетаРеквизиты.Найти("ВидВоспроизводства") <> Неопределено;
        ЕстьПолеПродукция          = МетаРеквизиты.Найти("Продукция")          <> Неопределено;
        ЕстьПолеПодразделение      = МетаРеквизиты.Найти("Подразделение")      <> Неопределено;
        ЕстьПолеСпецификация       = МетаРеквизиты.Найти("Спецификация")       <> Неопределено;
        //
        МассивОстатков    = Новый Массив;
        СоответствиеСтрок = Новый Соответствие;
        //
            Обход=РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
                Пока Обход.Следующий() Цикл
                       
                        НоваяСтрока = ТабЧасть.Добавить();
                           
                        НоваяСтрока.Номенклатура               = Обход.Номенклатура;
                        НоваяСтрока.ХарактеристикаНоменклатуры = Обход.ХарактеристикаНоменклатуры;
                        НоваяСтрока.ЕдиницаИзмерения   = Обход.ЕдиницаИзмерения;
                        НоваяСтрока.Коэффициент        = Обход.Коэффициент;
                        НоваяСтрока.ПроцентОтходовНаОбъем         = Обход.ПроцентОтходовНаОбъем;
                        НоваяСтрока.Заказ=ДокументОснование;
                        НоваяСтрока.ЗаказВыпуска=ДокументОснование;
                        НоваяСтрока.ВидВыпуска         = Перечисления.ВидыВыпуска.Выпуск;
                        НоваяСтрока.СтатьяЗатрат         = СтатьяЗатрат;
                       
                       
                           
                       
                        НоваяСтрока.КоличествоПродукции=Обход.КоличествоПродукции;
                        Сообщить("Норма на ед.: "+Обход.НормаНаЕд+"            Количество продукции: "+Обход.КоличествоПродукции+"           Процент отходов на объем: "+Обход.ПроцентОтходовНаОбъем);
                        НоваяСтрока.Количество         = Обход.НормаНаЕд*Обход.КоличествоПродукции*(1+Обход.ПроцентОтходовНаОбъем/100);
                        НоваяСтрока.НормаНаЕд = Обход.НормаНаЕд;
                   
                        Если ЕстьПолеПродукция Тогда
                            НоваяСтрока.Продукция               = Обход.Продукция;
                            НоваяСтрока.ХарактеристикаПродукции = Обход.ХарактеристикаПродукции;
                        КонецЕсли;
                        Если ЕстьПолеСпецификация Тогда
                            НоваяСтрока.Спецификация       = Обход.Спецификация;
                        КонецЕсли;
                        Если ЕстьПолеПодразделение Тогда
                            НоваяСтрока.Подразделение      = Обход.Подразделение;
                        КонецЕсли;
                        Если ЕстьПолеВидВоспроизводства Тогда
                            НоваяСтрока.ВидВоспроизводства = Обход.ВидВоспроизводства;
                        КонецЕсли;
                   
                КонецЦикла;
    Если производить весь объем сразу, все считает правильно 3х2 и 4х2, но если отразить производство 3 шкафов, то тоже 3х2 и 4х2, а надо 3х2 и 4х1, а при производстве остатка 4х1. Как высчитать количество продукции в материалах?
  2. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Не проше сделать это через спецификации?
  3. TopicStarter Overlay
    User
    Offline

    User Опытный в 1С

    Регистрация:
    4 фев 2013
    Сообщения:
    146
    Симпатии:
    0
    Баллы:
    26
    Как это не печально, но нельзя. Т.к. по специфике производства на середине выполнения изменяют сырье. Оставшееся сырье надо отработать по норме заказа и спецификации, а новое сырье (которым заменили) должно считаться с новой нормой на часть оставшегося объема.
  4. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Чет я не совсем понял.Ряд наводящих вопросов
    1.Основной вопрос это - Как высчитать количество продукции в материалах? Или как выодить и отражать? Если можно на примере
    Просто если как получить количество - ну это математика.
    2. Объясните весь процес , на примере. Просто не совсем понятно. Я так понимаю что начинаете что то выпускать спецификации или еще что то, но посредине процесса приходится использовать аналоги. Так? Что мешает делать Заполнить с подбором аналогов?
    3. есть ли принципиальноть указывать материалы и их распределение в ОПЗС, а не Выпуск ОПЗС. а материалы уже отдельным документом Распределения материалов на выпуск
  5. TopicStarter Overlay
    User
    Offline

    User Опытный в 1С

    Регистрация:
    4 фев 2013
    Сообщения:
    146
    Симпатии:
    0
    Баллы:
    26
    Основной вопрос это - как высчитать количество продукции в материалах.
    Для примера возьмем всем понятные шкафы и дверные ручки. Заполняем заказ на производство по спецификации - на 1 шкаф 2 ручки А. В продукции 10 шкафов, в материалах 20 ручек А на продукцию шкаф, норма на единицу - 2 шт. Делаем отчет производства за смену на 2 шкафа - в продукции 2 шкафа, в материалах 4 ручки А. При заполнении следующего отчета производства за смену по основанию заполняется в продукции 8 шкафов в материалах 16 ручек А. НО! Если к заказу сделать корректировку и на 2-х шкафах заменить ручки одного поставщика на другого при этом уменьшить количество ручек до 1. В корректировке в материалах: ручка А (-4) количество продукции 2, ручка Б (+2) количество продукции 2. На 2 шкафа изменилась норма на ед. - 1 шт. Теперь при заполнении отчета производства за смену в продукции выходит шкафов 8, ручка А - 12 шт по норме 2 шт. на ед, кол-во продукции - 6., ручка Б - 2 шт. по норме 1 шт. на ед., количество продукции - 2. Но если отчет производства за смену надо оформить на 7 шт. готовой продукции, тогда при перезаполнении материалов по вышеукзанному запросу выводит: с нормой 2 на ед. - 6 шт. продукции, и с нормой 1 на ед. - 2 шт. продукции. Как показать, что количество след. строки = количество во вкладке продукция минус количество продукции в материалах по предыдущим строкам (с нормой 2 на ед. - 6 шт. продукции, и с нормой 1 на ед. - 1 шт.)?
  6. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Ну я бы сначало не с кодом игрался. А смотрел в другую сторону.
    Есть продукция Шкаф, как вы сказали. Он может выпускаться с ручками A и Б. Соответвенно можно завести две спецификации С ручкой A и Б.
    Вупускаете продукцию по одной - одна спецификация, другое количество по другой - другая спецификация. И все нормально должно работать. По сути то оно так и есть. Плюс в спецификации еще есть мин партия и кратность.
  7. TopicStarter Overlay
    User
    Offline

    User Опытный в 1С

    Регистрация:
    4 фев 2013
    Сообщения:
    146
    Симпатии:
    0
    Баллы:
    26
    Даже и не поспоришь, что в идеале этот вариант самый верный, но если в спецификации около 25-30 наименований сырья и 10-15 из них может замениться в процессе производства, то сколько спецификаций придется сделать с разными вариациями и как потом в них самим не запутаться :(... И корректировку тогда придется делать не только на заменяемое сырье, а отнимать продукцию с сырьем по одной спецификации и закладывать по другой. Нет! Всем проще, если программист придумает, как 1С посчитает.
  8. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Ну я не совсем согласен с этим. Спецификация это разрез с\с и одна и та же продукция по разным спецификациям может иметь разную с\с, а так у вас получается, что с\с продукци усредняется.

    Просто теерь мне объясните вот у Вас сейчас как вы пишите в продукции стоит 7 шт выпуска. Затем вы заполняете ТЧ материалы. По какому признаку вы поределяете что из этих 7 штук 1 шт идет с ручками Б, может их там 2 пойдет с ручками Б
  9. TopicStarter Overlay
    User
    Offline

    User Опытный в 1С

    Регистрация:
    4 фев 2013
    Сообщения:
    146
    Симпатии:
    0
    Баллы:
    26
    При оформлении заказов на производство и корректировок записывается норма на единицу и количество продукции с этой нормой. Сначала должна выработаться одна норма на ед., потом другая. Очередность не важна. Т.е.по регистру продукции у меня 8 шт., по регистру материалы - 6 шт. с нормой 2 и 2 шт. с нормой 1. Не важно сколько будет сделано отчетов производства за смену, пусть выработает продукцию по одной норме, потом по другой.
  10. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Тогда по идее у Вас вот это "заказов на производство и корректировок записывается норма на единицу и количество продукции с этой нормой " и Вот это "регистру продукции у меня 8 шт., по регистру материалы - 6 шт. с нормой 2 и 2 шт. с нормой "

    Должно представлять собой регистр накопления что то вида "Потребности заказов на производство" Который заказом на производство делает +, а минус ОПЗС. я так понимаю из запроса он у Вас есть

    Ну так в чем проблема сгруппировать по полю Продукция и Норма. Еще если Вам известно то можно было поле приоритет добавть что бы знать что списывать в первую очередь.

    Берете остаток из регистра продукцию и обходите норму(приоритет) по группировке, закрывая

    Если все закрылось ок, если нет то дальше закрываете ну что то вроде сортировки.

    Т.е вот у вас в регистре получилась выборка остатков

    Шкаф
    норма(приоритет)1 2шт на ед
    Ручка А 8 шт
    норма(приоритет)2 1шт на ед
    ручка Б 2шт

    Вам надо произвести 6 ед


    Провалились в первую норму 8/норму= 4 шт
    Общее количество - 4 шт = Осталось

    если осталось <> 0 идем дальше

    2шт/норму= 2шт

    Общее количество - 2 шт = Осталось

    Осталось тут уже будет равно нулю.

    Ну вот такой алгоритм в цикл обхода результат запроса погруппировкам засуньте и все.
    User нравится это.
  11. TopicStarter Overlay
    User
    Offline

    User Опытный в 1С

    Регистрация:
    4 фев 2013
    Сообщения:
    146
    Симпатии:
    0
    Баллы:
    26
    Благодарю за подробный ответ. Подозревала, что надо сделать выборку по группировке, а вот как выставить приоритет, не знала. Буду читать и пробовать.
  12. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Ну приоритет, это я просто как вариант дополнительного поля предложил. Просто что бы ыбло понятно что в первую очередь списывать. Просто хоть какое то упорядочиванеи или понимание лучше чем никакаое.

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