7.7 Отмена проведения документа

Тема в разделе "Общие вопросы "1С:Предприятие 7.7"", создана пользователем 1Счик, 29 дек 2009.

  1. TopicStarter Overlay
    1Счик
    Offline

    1Счик

    Регистрация:
    16 дек 2008
    Сообщения:
    46
    Симпатии:
    0
    Баллы:
    1
    С наступающим!

    Вопрос такой:

    Отмена проведения документа ввода остатков занимает слишком долгое время. (Вот уже более шести часов и не понятно когда завершится). Когда заметил такие тормоза - запустил параллельно отмену проведения на другом сервере в копии базы. Результат такой же.

    К базам обращаюсь локально.

    Параметры:
    Сервер Xeon 2.8, 2Gb
    База самодельная. DBF. Общий вес ~3Gb
    Используются регистры.

    В документе, который я пытаюсь снять с проведения двигается регистр остатков с тремя измерениями и одним ресурсом:
    Измерение1 - тип "Справочник"
    Измерение2 - тип "Справочник"
    Измерение3 - тип "Строка", длина 6
    Ресурс1 - тип "Число", длина 8, точность 0

    Количество записей регистра в документе: ~114000

    Спасибо
  2. dianofob
    Offline

    dianofob (-_-)y-.o0O

    Регистрация:
    3 июл 2009
    Сообщения:
    711
    Симпатии:
    0
    Баллы:
    26
    1. смотря для чего вы снимаете проведение, если это разовое действие можно подумать:
    если это древние документы - двинуть бух и оперативные итоги соответственно на древнюю дату и после этого только снимать с проведения..
    Регистры можно чикнуть прямиком из дбф (в зависимости от конфы думаю, попробуйте копать в RG*.DBF).. В конечном итоге конечно понадобится пересчет..
    2. как вы снимаете с проведения? в ручную или обработкой?
  3. TopicStarter Overlay
    1Счик
    Offline

    1Счик

    Регистрация:
    16 дек 2008
    Сообщения:
    46
    Симпатии:
    0
    Баллы:
    1
    Да, так и сделал. Сначала сомневался, что последующий сдвиг вперед займет неопределенно долгое время. Но оказалось, что не так уж долго...

    Кстати, вопрос по ходу. С регистрами не особо дружу. В основном, работаю на бухучете. Как себя обычно ведут базы в подобных случаях? Могут ли "разъехаться" обороты и остатки по регистрам после сдвига вперед?

    Можно, конечно, но это в крайнем случае...
    Перепроводить данный документ мне понадобилось из-за того, что я ввел новое измерение в регистр. Первой мыслью было заполнить новое измерение по этому документу на низком уровне в файлах rg*.dbf, но пришлось отказаться от этого.

    И снова вопрос. В бухучете довольно часто пользуюсь "прямой" заменой значений в проводках с помощью встроенного языка (иногда бывает нужно заменить значения без перепроведения документа). Не могу найти подобные функции замены для регистров. Существуют ли они?

    Вручную.

    Спасибо
  4. dianofob
    Offline

    dianofob (-_-)y-.o0O

    Регистрация:
    3 июл 2009
    Сообщения:
    711
    Симпатии:
    0
    Баллы:
    26
    если все было хорошо, после пересчета ничего не съедет

    попробуйте посмотреть методы регистров в синтакс-помошнике, но если честно - это все это не очень правильное дело.. :)
  5. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    "прямое" баловство с регистрами ни к чему хорошему не приведет. Настоятельно не рекомендую
  6. TopicStarter Overlay
    1Счик
    Offline

    1Счик

    Регистрация:
    16 дек 2008
    Сообщения:
    46
    Симпатии:
    0
    Баллы:
    1
    В общем, как я и опасался - остатки съехали. Когда я формирую обороты - все ОК, а когда пытаюсь получить остатки - 0
    :(

    Ни в синтаксис-помощнике, ни в доках ничего подобного я не нашел. А насчет того "правильно" это или "неправильно" - тут момент спорный...
    Например, дбф-ки ручками фиксить - это "правильно"? Конечно, нет, но приходится :)
  7. TopicStarter Overlay
    1Счик
    Offline

    1Счик

    Регистрация:
    16 дек 2008
    Сообщения:
    46
    Симпатии:
    0
    Баллы:
    1
    Позвольте не согласиться. Это "баловство" иногда вынужденная мера. Кстати, знаете ли Вы способ хирургического вмешательства в регистры? На языке 1С, конечно, а не напрямую в дбф.
  8. dianofob
    Offline

    dianofob (-_-)y-.o0O

    Регистрация:
    3 июл 2009
    Сообщения:
    711
    Симпатии:
    0
    Баллы:
    26
    избавляя себя от пересчета базы (востановления последовательности) вы рискуете видеть в отчетах неверные данные как в бухучете так и оперативном. Можно закрывать глаза на это, но придется столкнуться с проблемами при переходе на другие платформы или при свертке базы, а так дело ваше конечно :)
    по-поводу способов - все описано в синтакс помощнике, для примера можно поглядеть процедуру ПриПроведении() какого-нибудь документа, у них же каким-то образом вносятся изменения в регистры ;)
  9. TopicStarter Overlay
    1Счик
    Offline

    1Счик

    Регистрация:
    16 дек 2008
    Сообщения:
    46
    Симпатии:
    0
    Баллы:
    1
    Это само собой. Но я бы воспользовался данным методом, например, в такой ситуации:
    Например, пришлось добавить субконто к счету. Я точно знаю, что этот счет используется в определенных видах документов. Также я точно знаю, что ссылка на это субконто существует в этих документах. Чтобы не перепроводить все документы гораздо проще провести "хирургическую" операцию. И я точно знаю, что вреда от подобной операции не будет. Проверено.

    Код:
    Док = СоздатьОбъект("Операция");
    Док.ВыбратьОперации(НачДата, КонДата);
    Пока Док.ПолучитьОперацию() = 1 Цикл
    
    Док.ВыбратьПроводки();
    Пока Док.ПолучитьПроводку() = 1 Цикл
    
    // Здесь описываю какие-либо условия
    
    // и присваиваю новое значение субконто:
    Док.Дебет.МоеСубконто = НовоеЗначение;
    
    
    КонецЦикла;
    Док.Записать();
    КонецЦикла;
    
    
    По бухучету все это делается на раз. Например, как я написал выше. А вот по регистрам... ИМХО нету методов для "прямой" записи в регистры. Во всяком случае с помощью языка 1С и без использования сторонних ДЛЛ. Буду очень рад, если Вы докажете мне обратное.
  10. dianofob
    Offline

    dianofob (-_-)y-.o0O

    Регистрация:
    3 июл 2009
    Сообщения:
    711
    Симпатии:
    0
    Баллы:
    26
    Не может же быть так что регистры заполняются только на уровне платформы?
    Есть же метод УстановитьАтрибут(<ИмяРеквизита>,<Значение>)? Открываем какой-нибудь документ типа ВводОстатковТакихТо, смотрим код, ищем метод, анализируем.
    Я открыл комплексную конфу и сразу увидел процедуру УстановитьЗначениеАтрибута(), смотрите где подобное вызывается и пробуйте сделать по аналогии
  11. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Хотелось бы добавить - нужно написать СЛУЖЕБНЫЙ документ который выполнял бы эти действия (все манипуляции проводите в модуле документа) - через обработку (как в бухгалтерии) у вас не получится.

    Хотелось бы еще добавить от себя лично - все подобные "художества" до добра не доводят и обязательно где-то да скажутся. Как правильно заметил фобец при той же самой свертке базы... Может имеет смысл обсудить как обойти/локализовать возникшую проблему, а не удалять ее хирургическим путем как вы привыкли в бухгалтерии.
  12. TopicStarter Overlay
    1Счик
    Offline

    1Счик

    Регистрация:
    16 дек 2008
    Сообщения:
    46
    Симпатии:
    0
    Баллы:
    1
    Я уже оставил идею подправлять регистры ручками.
    Решил двигать ТА назад, делать непроведенным док, затем двигать ТА вперед.

    В связи с чем у меня острый вопрос: вчера, когда я производил эти действия над копией базы сдвиг вперед произошел очень быстро. Вот лог:


    А сегодня, на реальной базе все происходит очень медленно. Причем каждый следующий месяц пересчитывается все дольше:

    Подскажите, пожалуйста, куда копнуть? Либо на копии произошел глюк и все так быстро пересчиталось. Либо сейчас на реальной базе? Все действия произвожу на одном и том же компе.
  13. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Скорее всего рабочая база у вас на SQL, а тестовая DBF. Так вот, восстановление последовательности или смена ТА на SQL происходит медленне чем на DBF. Это связано с "особенностью" SQL. Тут 2 варианта.
    1) Есть платное решение проблемы замеления 1с при проведении (сам юзал - действительно работеает)
    2) Бесплатное - выгружайте базу в DBF, восстанавливайте последовательность, загружайте обратно. Выигрыш на больших базах очевиден (в разы)

    Какая у вас конфигурация?
    Вы "двигали" ТА через операции-Управление оперативными итогами?
    Для правильного расчета регистров необходимо воссанавливать последовательность Операции-Проведение документов - Последовательности

    Ярким примером вышесказанного может служить ТиС где 2 регистра в которых хранится количество товара: остатки и партии. Партии хранят в себе еще и себестоимость по которой считается прибыль. Если "двигать" регистры как вы - остатки скорее всего и будут правильно показывать, но вот партии товаров на 99% нет.
  14. TopicStarter Overlay
    1Счик
    Offline

    1Счик

    Регистрация:
    16 дек 2008
    Сообщения:
    46
    Симпатии:
    0
    Баллы:
    1
    SQL тут вообще не при чем. У меня на сервере он даже не установлен.

    Конфигурация основана на стандартной бухгалтерии. Какой-то программер написал в ней учет талонов ГСМ на регистрах. И теперь все это счастье еле ворочается... Я плююсь и собираюсь переписывать.

    Восстанавливать последовательность перепроведением документов не представляется возможным, т.к. перепроведение документов за два года займет огромное количество времени, которого до НГ уже совсем не осталось. К тому же в этой конфе нет понятия "партии" и "себестоимость". Только количественные остатки талонов.

    По логике то, что сейчас происходит с моей базой при сдвиге ТА вперед, выходит за всякие рамки. Ну не должна она так долго пересчитываться.
  15. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Замер производительности вам в руки. Запускаете отладчик и вперед! Ищите узкое место - что тормозит проведение. Возможно не совсем "правильный" запрос при расчете итогов регистра или еще что - вариантов 100000, тем более что конфа самописка
  16. TopicStarter Overlay
    1Счик
    Offline

    1Счик

    Регистрация:
    16 дек 2008
    Сообщения:
    46
    Симпатии:
    0
    Баллы:
    1
    Как Вы думаете что в этом коде можно отладить?

    Код:
    СписокНомеров = СоздатьОбъект("СписокЗначений");
    ВыгрузитьТабличнуюЧасть(СписокНомеров, "НомерТалона"); 
    
    СписокВидовТалонов = СоздатьОбъект("СписокЗначений");
    ВыгрузитьТабличнуюЧасть(СписокВидовТалонов, "ВидТалона");
    
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса = "
    |Период с {ТекущийДокумент()} По {ТекущийДокумент()};
    |Контрагент = Регистр.ТалоныПокупатели.Контрагент;
    |ВидТалона = Регистр.ТалоныПокупатели.ВидТалона;
    |СерияНомер = Регистр.ТалоныПокупатели.СерияНомер;
    |Кол = Регистр.ТалоныПокупатели.КоличествоГСМ;
    |Функция КоличествоГСМ = НачОст(Кол);
    |Группировка Контрагент;
    |Группировка ВидТалона;
    |Группировка СерияНомер;
    |Условие (ВидТалона в СписокВидовТалонов);
    |Условие (СерияНомер в СписокНомеров);";
    
    Если Запрос.Выполнить(ТекстЗапроса) = 0 тогда
    СтатусВозврата(0);
    Возврат;
    КонецЕсли;
    
    // Здесь цикл по группировкам
    // По серии и по номеру вычисляется контрагент, отоваривший талон...
    
    
  17. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Например вместо запроса использовать метод СводныйОстаток - только перед этим проверить актуальность итогов. Работает в разы быстрее запроса
  18. TopicStarter Overlay
    1Счик
    Offline

    1Счик

    Регистрация:
    16 дек 2008
    Сообщения:
    46
    Симпатии:
    0
    Баллы:
    1
    В моем регистре:

    Измерение1 - Контрагент
    Измерение2 - ВидТалона
    Измерение3 - СерияНомер

    Ресурс - КоличествоГСМ

    В документе гашения талонов в табличной части дано: ВидТалона и СерияНомер. При проведении документа нужно выяснить контрагента и количество ГСМ.

    Согласен, с помощью метода "СводныйОстаток", я могу получить остаток количества ГСМ. Каким образом можно вычислить контрагента, приобретавшего талон?
  19. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Используйте фильтр и метод ВыбратьДвижения

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