7.7 нужен совет как переписать когд что бы быстрее работало

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем spkmax, 21 ноя 2008.

  1. TopicStarter Overlay
    spkmax
    Offline

    spkmax

    Регистрация:
    21 ноя 2008
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    Привет всем

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

    использовал Formex
    написал код функции

    Функция Краска()
    Если ( Проведен() = 0 ) Тогда
    Всего=СоздатьОбъект("Регистр.ОстаткиТМЦ");
    Резерв=СоздатьОбъект("Регистр.РезервыТМЦ");
    / Остатки=Всего.СводныйОстаток(,Номенклатура,,,"Количество")-Резерв.СводныйОстаток(,Номенклатура,,,,"Количество");
    Возврат ? (Количество>остатки,"FONT["+гЦвет(255,0,0)+"]"+"COUNT[4]","FONT["+гЦвет(0,0,16000)+"]"+"COUNT[4]");
    КонецЕсли;

    создал столбец к которому прикрепил даннуй фукцию
    все работает
    но работает очень медленно ( а если в сети будет 2 или три пользователя то открывается такой документ очень медленно
    дело я так понимаю по советам людей во временных расчетах регистра
    Что порекомендуете в изменении кода или принципов

    сам я програмист в 1с начинающий
  2. WaRDeR
    Offline

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

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    самый простой для начинающего способ - сделать кнопку, при нажатии на которую будет происходить перебор строк и сравнивание с реальным остатком. Это существенно разгрузит программное время.
  3. TopicStarter Overlay
    spkmax
    Offline

    spkmax

    Регистрация:
    21 ноя 2008
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    Блин
    а это ведь действительно проще простого
    а если серьезно
    то как уйти от временного рачета регистров в данной ситуации ?
  4. MaxxaM
    Offline

    MaxxaM Опытный в 1С

    Регистрация:
    16 окт 2007
    Сообщения:
    288
    Симпатии:
    2
    Баллы:
    29
    Я для в таком случае сливаю все ТМЦ из накладной в список значений и сей список отправляю в запрос в качестве параметра для условия, к условию еще и склад добавляется есно, результаты запроса заношу в табл. часть - работает гораздо быстрее чем временные расчеты и тем более при построчном обращении к ним. :unsure:
  5. WaRDeR
    Offline

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

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    MaxxaM говорит дело, вот только при изменении многострочной части документа придется немного повозиться с запросами, но в целом время на запрос практически не изменяется от выбранного результата, поэтому лучше написать один сложный запрос со множеством фильтров, чем простой запрос в цикле (у тебя по сути та же проблема, только не видно явного цикла). Но в данном случае есть более оптимальный вариант.
    1. По идеалогии оперативного учета все документы должны проводиться последовательно и на момент ТА итоги уже расчитаны, ими можно пользоваться.
    2. Если документ находится до ТА, то создай одну глобальную переменную (регистр) для документа, при открытии выполни временный расчет. А потом опять же пользуйся уже расчитаными итогами.
    3. Если и этого мало, тогда добавь для документа реквизит многострочной части для хранения значения остатков, и заполняй его только при выборе номенклатуры, а потом работай с ним. Это будет самый быстрый вариант, но теряем в объеме базы (точнее он становится больше ;) т.к. надо будет хранить еще и эти данные).

    ИМХО оптимальный вариант 2. Но все зависит от конкретного случая, так что решать вам.
  6. TopicStarter Overlay
    spkmax
    Offline

    spkmax

    Регистрация:
    21 ноя 2008
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    Спасибо
    для меня все это конечно ново что посоветовали
    но буду думать и надеюсь все получиться

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