Курилка Помогите с алгоритмом - РЕШЕНО

Тема в разделе "Курилка", создана пользователем Ktyf, 22 окт 2015.

  1. TopicStarter Overlay
    Ktyf
    Offline

    Ktyf Опытный в 1С

    Регистрация:
    16 янв 2013
    Сообщения:
    457
    Симпатии:
    12
    Баллы:
    29
    Люди, ну помогите придумать приемлемый алгоритм! Ситуация такова:
    Есть документ Производство, он пишет в РС. ВзвешиваниеСпеций записи. Естественно что записи упорядочены по Дата+Время документа. На участке взвешивания по этим записям взвешивают Специи и отправляют дальше по этапу. А теперь внимание! финт ушами. Мне надо чтобы читались или хотя бы выводились не по порядку Периода записи, а так: берем 4 документа и упорядочиваем их в обратном порядке. Документа, а не записи. Сколько там выпадет записей я не знаю.
    Но это еще не все. После каждого взвешивания запись перезаписывается в РС с доп.информацией. Больше ЭТУ запись мне читать не надо. Т.е. я выбираю часть записей от одного документа + последующие. И теперь эта недовзвешенная часть должна быть по-любому первой, а вот прочие записи опять упорядочиваются. Но нужно обойти момент чтобы какой-то документ не отодвигался хронически в конец очереди!!!
  2. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Непонятна организация всего этого.

    РС ВзвешиваниеСпеций подчинен документу Производство или независимый?
    Что значит "запись перезаписывается в РС с доп.информацией"?
  3. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Завтра
  4. TopicStarter Overlay
    Ktyf
    Offline

    Ktyf Опытный в 1С

    Регистрация:
    16 янв 2013
    Сообщения:
    457
    Симпатии:
    12
    Баллы:
    29
    Нет, РС независим, т.к. мне надо туда писать информацию не только из документа.
    Обработка прочитала запись: чего и сколько надо взвесить. Приняла данные с весов, и перезаписала запись: что взвесить, сколько надо взвесить, сколько взвесили по факту.
  5. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    добавьте в регистр признак "Взвешено" и отбирайте только не взвешенные позиции.
  6. TopicStarter Overlay
    Ktyf
    Offline

    Ktyf Опытный в 1С

    Регистрация:
    16 янв 2013
    Сообщения:
    457
    Симпатии:
    12
    Баллы:
    29
    Давайте я объясню с точки зрения фактической работы. Люди взвешивают специи и складывают в ящики, ящики ставят один на другой 4 шт. Если они будут собирать и ставить именно в порядке даты документов, то самый первый ящик будет в самом низу, и когда за ним придут, то надо будет снять 3 верхних. А это время и силы. Значит нужно сначала собрать 4-й документ/ящик, потом третий, потом второй, потом первый. Потом 8/7/6/5, и т.д.
    --- Объединение сообщений, 22 окт 2015 ---
    уже. но это к решению вопроса не относится.
    --- Объединение сообщений, 22 окт 2015 ---
    как в запросе к РС можно выбрать не 4 записи, а любое количество записей при условии, что они принадлежат 4 разным регистраторам?????
  7. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    "выбрать первые 4 РС.Производство из РС упорядочить по РС.Производство УБЫВ"
    ?
    --- Объединение сообщений, 22 окт 2015 ---
    Точнее:
    "выбрать различные первые 4 РС.Производство из РС упорядочить по РС.Производство УБЫВ"
    ?
    --- Объединение сообщений, 22 окт 2015 ---
    Код:
    "ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 4
        ЦеныНоменклатуры.Регистратор КАК Регистратор
    ПОМЕСТИТЬ ВТ
    ИЗ
        РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
    
    УПОРЯДОЧИТЬ ПО
        Регистратор УБЫВ
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        ЦеныНоменклатуры.Регистратор,
        ЦеныНоменклатуры.Номенклатура,
        ЦеныНоменклатуры.Цена
    ИЗ
        РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
    ГДЕ
        ЦеныНоменклатуры.Регистратор В
                (ВЫБРАТЬ
                    ВТ.Регистратор
                ИЗ
                    ВТ КАК ВТ)"
    
    Последнее редактирование: 22 окт 2015
  8. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    так выберутся все строки из 4-х первых регистраторов, отсортированных по значению ссылки(что само по себе - нонсенс)

    Если нужны именно последние заведенные документы в БД, то необходимо сортировать по МоментВремени.

    Если нужно именно по одной строке из регистратора выбирать, то это нужно нумеровать строки в пределах регистраторов и потом выбирать не более 1 из.

    Нумерацию строк можно сделать если соединить таблицу саму с собой по какому-то полю с типом число/дата, соединения по другим типам полей может вызывать разного рода чудеса в результате соединения.
  9. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Последних.
    Так это и надо насколько я понял. Записи из 4 последних регистраторов, сколько строк не важно.
  10. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    В таком случае нужно сортировать не по ссылке(Регистратор), а по МоментВремени.
  11. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    не занудствуй.. :)

    так доволен?
    Код:
        "ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 4
            ЦеныНоменклатуры.Регистратор КАК Регистратор
        ПОМЕСТИТЬ ВТ
        ИЗ
            РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
    
        УПОРЯДОЧИТЬ ПО
    Регистратор.Дата Убыв,
            Регистратор УБЫВ
        ;
    
        ////////////////////////////////////////////////////////////////////////////////
        ВЫБРАТЬ
            ЦеныНоменклатуры.Регистратор,
            ЦеныНоменклатуры.Номенклатура,
            ЦеныНоменклатуры.Цена
        ИЗ
            РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
        ГДЕ
            ЦеныНоменклатуры.Регистратор В
                    (ВЫБРАТЬ
                        ВТ.Регистратор
                    ИЗ
                        ВТ КАК ВТ)"
    
    
  12. TopicStarter Overlay
    Ktyf
    Offline

    Ktyf Опытный в 1С

    Регистрация:
    16 янв 2013
    Сообщения:
    457
    Симпатии:
    12
    Баллы:
    29
    Да, на 4-х документах все правильно, но вот момент: берем документы 8:00, 8:10, 8:20, 8:30. Из них получаем обратный порядок и перевешиваем все строки документа на 8:30. Соответственно у нас попадает следующий документ и теперь набор из 8:30, 8:10, 8:20, 8:40. При обратном упорядочивании первым обработается на 8:40. Значит 3 документа (8:10, 8:20, 8:30) будут постоянно отодвигаться в конец очереди
  13. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Чет пока не понимаю.
    Вы выбрали записи по 4 документам. Зачем после заполнения каждой записи снова перевыбирать документы? Работайте пока не заполните эти записи.
  14. TopicStarter Overlay
    Ktyf
    Offline

    Ktyf Опытный в 1С

    Регистрация:
    16 янв 2013
    Сообщения:
    457
    Симпатии:
    12
    Баллы:
    29
    Для чего я выбираю следующие записи? Когда человек работает на взвешивании, ему отображается список очереди. И если список заканчивается - значит заканчивается работа. Но в принципе хоть не красиво, но видимо придется ставить тут какой-нить финт ушами.

    Вложения:

  15. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Все равно не понимаю.
    То что появилось 8:40, это имеется ввиду, что пока взвешивали записи из документа 8:30, кто-то создал новый документ 8:40? Или как?
  16. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    Значит документы нужно сортировать по возрастанию времени, чтобы соблюдался принцип стэка, т.е. FIFO.
  17. Yuriy_Alexandrovich
    Offline

    Yuriy_Alexandrovich Профессионал в 1С Команда форума

    Регистрация:
    15 сен 2011
    Сообщения:
    1.275
    Симпатии:
    76
    Баллы:
    54
    Доброго Всем,
    На примере документов :
    Код:
    ВЫБРАТЬ
        ЗаявкаНаРасходованиеСредств.Ссылка,
        ЗаявкаНаРасходованиеСредств.Дата КАК Дата,
        ЗаявкаНаРасходованиеСредств.МоментВремени
    ПОМЕСТИТЬ ВТ_ЗаявкаНаРасходованиеСредств
    ИЗ
        Документ.ЗаявкаНаРасходованиеСредств КАК ЗаявкаНаРасходованиеСредств
    ГДЕ
        ЗаявкаНаРасходованиеСредств.Дата МЕЖДУ НАЧАЛОПЕРИОДА(&День, ДЕНЬ) И КОНЕЦПЕРИОДА(&День, ДЕНЬ)
    ;
    
    ВЫБРАТЬ
        ЗаявкаНаРасходованиеСредств.Ссылка,
        ЗаявкаНаРасходованиеСредств.Дата,
        КОЛИЧЕСТВО(ЗаявкиКСоединению.Ссылка) КАК Ранг
    ПОМЕСТИТЬ ВТ_ЗаявкаНаРасходованиеСредствРанг
    ИЗ
        ВТ_ЗаявкаНаРасходованиеСредств КАК ЗаявкаНаРасходованиеСредств
        ЛЕВОЕ СОЕДИНЕНИЕ
            ВТ_ЗаявкаНаРасходованиеСредств КАК ЗаявкиКСоединению
        ПО ЗаявкиКСоединению.МоментВремени >= ЗаявкаНаРасходованиеСредств.МоментВремени
    
    СГРУППИРОВАТЬ ПО
        ЗаявкаНаРасходованиеСредств.Ссылка,
        ЗаявкаНаРасходованиеСредств.Дата
    ;
    
    ВЫБРАТЬ
        ЗаявкаНаРасходованиеСредств.Ссылка,
        ЗаявкаНаРасходованиеСредств.Дата КАК Дата,
        ЗаявкиПоРангу.Ссылка КАК СсылкаПоРангу,
        ЗаявкаНаРасходованиеСредств.Ранг - ЗаявкиПоРангу.Ранг КАК ПорядокДокумента
    ИЗ
        ВТ_ЗаявкаНаРасходованиеСредствРанг КАК ЗаявкаНаРасходованиеСредств
        ЛЕВОЕ СОЕДИНЕНИЕ
            ВТ_ЗаявкаНаРасходованиеСредствРанг КАК ЗаявкиПоРангу
        ПО ЗаявкиПоРангу.Ранг <= ЗаявкаНаРасходованиеСредств.Ранг
        И ЗаявкаНаРасходованиеСредств.Ранг - ЗаявкиПоРангу.Ранг <= 3
    ГДЕ
        ЗаявкаНаРасходованиеСредств.Ранг = 1
        ИЛИ (ВЫРАЗИТЬ((ЗаявкаНаРасходованиеСредств.Ранг/4) КАК ЧИСЛО (15,0))
         - ВЫРАЗИТЬ((ЗаявкаНаРасходованиеСредств.Ранг/4) КАК ЧИСЛО (15,1))) = 0
    УПОРЯДОЧИТЬ ПО
        Дата,
        ПорядокДокумента УБЫВ
    
    upload_2015-10-23_10-40-7.png
  18. TopicStarter Overlay
    Ktyf
    Offline

    Ktyf Опытный в 1С

    Регистрация:
    16 янв 2013
    Сообщения:
    457
    Симпатии:
    12
    Баллы:
    29
    нет, очередь изначально содержала документ на 8:40, и далее до часов на 17. Но у нас же запросе выборка 4-х документов, и как только будут обработаны все записи четвертого, запрос выберет новую четверку, в которую теперь попадет и документ на 8:40
  19. Yuriy_Alexandrovich
    Offline

    Yuriy_Alexandrovich Профессионал в 1С Команда форума

    Регистрация:
    15 сен 2011
    Сообщения:
    1.275
    Симпатии:
    76
    Баллы:
    54
    Глобально документы сортированы по дате, локально в 4-ах по убыванию даты (на самом деле по убыванию момента времени, он заменен рангом)
  20. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Ну я кажется понял в чем проблема.
    Yuriy_Alexandrovich вроде что-то подобное кинул.

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