8.х как правильно построить запрос для быстрого выполенения действия

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

  1. TopicStarter Overlay
    Bambrlog
    Offline

    Bambrlog Опытный в 1С

    Регистрация:
    7 июл 2009
    Сообщения:
    61
    Симпатии:
    0
    Баллы:
    26
    По просьбе бухгалтеров я не много изменил документ перемещения:
    форма документа
    форма списка

    В форме документа я добавил итог документа "СуммаДокумента"(создал реквизит СуммаДокумента).
    далее в форме списка также добавил колонку "СуммаДокумента". В общем все хорошо теперь при записи документа рассчитывается итоговая сумма. Она отражается в самом документе и в "ФормеСписка" все хорошо бухи довольны им удобно стало искать документ по сумме.
    Но! очень много документов, а для того чтобы в "формеСписка" появились суммы необходимо руками зайти в документ и записать его.
    Как составить запрос чтобы компьютер сам перезаписал все проведенные перемещения за все предыдущие года работы????
  2. x-a-d
    Offline

    x-a-d Опытный в 1С

    Регистрация:
    3 сен 2009
    Сообщения:
    184
    Симпатии:
    0
    Баллы:
    26
    написать свою обработку чтобы по всем нужным документам пройтись и пересчитать нужные поля
    только если это бухгалтерия, и по каким-то периодам уже сдана отчетность то предлагаю несколько раз подумать, прежде чем делать перепроведение.

    а зачем вводить дополнительный реквизит? если это расчетная цифра, ну введите в табличную часть элемент диалога, присвойте ему идентификатор, и по формуле вычисляйте данные для показа! и все!
  3. wertklop
    Offline

    wertklop Опытный в 1С

    Регистрация:
    12 май 2008
    Сообщения:
    321
    Симпатии:
    0
    Баллы:
    26
    а собственно почему у тебя не выводятся суммы?ведь они у тебя в реквизите документа записаны, не так ли?и в форме списка поля данной колонки должны обращаться к данному реквизиту
  4. TopicStarter Overlay
    Bambrlog
    Offline

    Bambrlog Опытный в 1С

    Регистрация:
    7 июл 2009
    Сообщения:
    61
    Симпатии:
    0
    Баллы:
    26
    конфа УТ 10.3.х
    видимо не правильно вопрос поняли, или я не правильно его задал.
    необходим запрос, или обработка, суть которого такова.
    Зайти в документ перемещения (только проведенные) за период, записать документ, выйти.
    все не более того.
    можно сделать обаботку, что-то типа:

    Процедура ПриОткрытии()
    Документы.ПеремещениеТоваров бла бла бла
    ОсновныеДействияФормы.Записать.УстановитьДействие("Нажатие", Действие);;
    бла бла бла выйти
    КонецПроцедуры;

    ну вот что-то типа того. только правильно все оформить.

    Я не хочу заходить руками в каждый документ и записывать его, я хочу чтобы машина это сделала за меня. Новые документы при создании "СуммаДокумента" отображается и в документе и в списке документов, !но не ранее созданные. Вопрос касается ранее созданных документов их очень много.
  5. wertklop
    Offline

    wertklop Опытный в 1С

    Регистрация:
    12 май 2008
    Сообщения:
    321
    Симпатии:
    0
    Баллы:
    26
    тебе нужно записать документы или документ?
    где по твоему должна быть процедура ПриОтокрытии()?
  6. TopicStarter Overlay
    Bambrlog
    Offline

    Bambrlog Опытный в 1С

    Регистрация:
    7 июл 2009
    Сообщения:
    61
    Симпатии:
    0
    Баллы:
    26
    докумунтЫ
    например можно поставить это процедуру при открытии ФормыСписка
  7. wertklop
    Offline

    wertklop Опытный в 1С

    Регистрация:
    12 май 2008
    Сообщения:
    321
    Симпатии:
    0
    Баллы:
    26
    Код:
    Процедура ПриОткрытии()
    отбор=Новый Структура;
    отбор.Вставить("ПометкаУдаления",Ложь);
    отбор.Вставить("Проведен",Истина);
    Выборка=Документы.<НеобходимыйДокумент>.Выбрать(НачалоПериода, КонецПериода);
    пока Выборка.Следующий() <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/цикл')">Цикл	</span>
    Сообщить(Результат.Документ);
    Док=Результат.Документ.ПолучитьОбъект();		             Док.Записать(РежимЗаписиДокумента.Проведение,РежимПроведенияДокумента.Неоперативный);
    КонецЦикла;
    КонецПроцедуры;
    
    
    это если тебе необходимо просто перезаписать документы, но сразу скажу, что если каждый раз при открытии формы списка это делать, то это будет достаточно долго обрабатываться. пользователям это не понравится.
    и ещё, объясни, зачем записывать заново документ, если он у тебя уже записан?почему не выводятся суммы?
  8. ASh
    Offline

    ASh Опытный в 1С

    Регистрация:
    10 сен 2008
    Сообщения:
    568
    Симпатии:
    0
    Баллы:
    26
    Вообще не понял, чего вы в документе еще менять собрались. Алгоритм расчета нового реквизита уже есть и работает в документе, как я понял. То есть во всех новых доках этот реквизит рассчитывается. Нужно только в старых документах его дозаполнить. Пишется обработка за минуту и все. Текст обработки, примерно, такой:
    Код:
    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |	Документы.Ссылка
    |ИЗ
    |	Документ.ИмяНужногоДокумента КАК Документы
    |ГДЕ
    |	Документы.Проведен = ИСТИНА";
    Результат = Запрос.Выполнить().Выбрать();
    Пока Результат.Следующий() Цикл
    Док = Результат.Ссылка.ПолучитьОбъект();
    Док.НужныйРеквизит = //Рассчитываем нужный реквизит;
    Док.Записать(РежимЗаписиДокумента.Запись);
    КонецЦикла;
    
    
    P.S. проверить сперва на копии базы, вдруг чего не так пойдет.
  9. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Все гораздо проще.
    Расчет итоговой суммы нужно делать "Перед записью"
    Открываете универсальную групповую обработку справочников и документов и перезаписываете выбранные как вам надо документы.

    И не надо писать своих обработок с перерасчетом, если вы корректно прописали заполнение этой суммы.
  10. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Все-таки - лучше написать свою обработку, что бы не перепроводить документы.
    В обработке сделать
    Код:
    Документ.Записать(РежимЗаписи.Запись);
    
  11. TopicStarter Overlay
    Bambrlog
    Offline

    Bambrlog Опытный в 1С

    Регистрация:
    7 июл 2009
    Сообщения:
    61
    Симпатии:
    0
    Баллы:
    26
    Спасибо всем кто ответил.
    Правильный вариант всетаки обработка, т.к. перепроводить докумены их очень много очень долго. Намного быстрее перезаписать проведенные документы.
  12. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Все-таки лучше для тех пользователей, которые задают такие вопросы использовать стандартные средства. Кстати есть возможность на ИТСовской обработке перезаписи без проведения. Но я ими не пользуюсь :)

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