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

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

  1. TopicStarter Overlay
    BOBS
    Offline

    BOBS

    Регистрация:
    22 май 2010
    Сообщения:
    36
    Симпатии:
    0
    Баллы:
    1
    Ситуация: Конфигурацияя 7.7 многократно переписанная разными прогерами. Есть журнал СчетаНаОплату (при проведение Счета товар ставится в регистрах в резерв) на основании счета выводится РасходнаяНакладная, после чего товар начинают собирать (если это большая партия компьютеров то может растянуться на неделю и все это время товар должен оставаться в резерве)
    Задача: Когда товар готов и клиент его забирает, При проведении Расходной надо сделать проверку что ДокОснование проведен/непроведен и если проведен то отменить проведение.

    Процедура ОбработкаПроведения()
    Если (ДокОснование.Вид() = "СчeтНаОплату") и
    Оплачено = 1 Тогда // как сделать чтоб Счет стал не проведенным?

    Заранее спасибо !
  2. TopicStarter Overlay
    BOBS
    Offline

    BOBS

    Регистрация:
    22 май 2010
    Сообщения:
    36
    Симпатии:
    0
    Баллы:
    1
    Извиняюсь немного ошибся, не "Оплачено = 1 " а "Проведен = 1" (про оплачено это другая часть кода, там все работает, просто запрос оплачено или нет для показа пиктограмки)
  3. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Вот так:
    Код:
    Если (ДокОснование.Вид() = "СчeтНаОплату") и (ДокОснование.Проведен()=1 ) Тогда
    СделатьНеПроведенным()
    КонецЕсли;
    
    
    Вообще-то странный у вас подход. Резерв это отдельный регистр остатков. Счет делает движение приход, отгрузка - расход. Потом смотрим остаток. Если =0 значит резерва нет... Так вообще-то делается.
  4. TopicStarter Overlay
    BOBS
    Offline

    BOBS

    Регистрация:
    22 май 2010
    Сообщения:
    36
    Симпатии:
    0
    Баллы:
    1
    С резервами проблем нет. если товар в резерве, то расходная не проведется. Проблема в другом - менеджеры иногда забывают снять резерв после того как склад проведет расходную. И Приходится каждую неделю проверять все проведенные счета и если товар по каким то отдали, то снимать у них проведение вручную.

    не получилось - выскочила ошибка:

    СделатьНеПроведенным()
    {Документ.РасходнаяНакладная.Модуль Документа(279)}: Не выбран документ!
  5. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Вот так...
    Код:
    Если (ДокОснование.Вид() = "СчeтНаОплату") и (ДокОснование.Проведен()=1 ) Тогда
    Докум=СоздатьОбъект("Документ");
    Докум.НайтиДокумент(ДокОснование);
    Докум.СделатьНеПроведенным()
    КонецЕсли;
    
    
    
  6. TopicStarter Overlay
    BOBS
    Offline

    BOBS

    Регистрация:
    22 май 2010
    Сообщения:
    36
    Симпатии:
    0
    Баллы:
    1
    При "Докум.СоздатьОбъект("Документ");" ошибка
    Докум<<?>>.СоздатьОбъект("Документ");
    {Документ.РасходнаяНакладная.Модуль Документа(285)}: Переменная не определена (Докум)


    Переделал на "Докум = СоздатьОбъект("Документ");" тогда
    Код:
    Докум.СделатьНеПроведенным()
    {Документ.РасходнаяНакладная.Модуль Документа(281)}: Данная операция недоступна при проведении документа!
    
    
    Вот кусок кода заканчивающего модуль документа РасходнаяНакладная
    Код:
    РабДата='01.07.03';
    Если ДатаДок>=РабДата Тогда
    Регистр.Взаиморасчеты.Организация=Контрагент;
    Регистр.Взаиморасчеты.Сумма=Итог("Итого");    
    Регистр.Взаиморасчеты.СуммаТГ=Итог("ИтогоТГ");
    Регистр.Взаиморасчеты.Дата=ДатаДок;
    Регистр.Взаиморасчеты.Документ=ТекущийДокумент(); 
    Регистр.Взаиморасчеты.ДвижениеРасходВыполнить();
    КонецЕсли;
    Если (ДокОснование.Вид() = "СчeтНаОплату") Тогда
    СумОпл=0;
    ДокПодч = СоздатьОбъект("Документ");
    ДокПодч.ВыбратьПодчиненныеДокументы(,,ДокОснование.ТекущийДокумент());   
    Пока ДокПодч.ПолучитьДокумент()=1 Цикл     
    Если (ДокПодч.Вид() = "ОплатаПоБезНалу") Тогда     
    ДокПодч.ВыбратьСтроки();
    Пока ДокПодч.ПолучитьСтроку()=1 Цикл 
    Если СокрЛП(ДокПодч.ДокументОснования)=СокрЛП(ДокОснование) Тогда  
    СумОпл=СумОпл+ДокПодч.СуммаТГ;
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    КонецЦикла; 
    Если СумОпл>=Итог("ИтогоТГ") Тогда
    Оплачено=1;
    ИначеЕсли Итог("ИтогоТГ")>СумОпл Тогда
    Оплачено=0;
    КонецЕсли;
    КонецЕсли;
    
    Если (ДокОснование.Вид() = "СчeтНаОплату") и (ДокОснование.Проведен()=1 ) Тогда 
    Докум = СоздатьОбъект("Документ");
    Докум.НайтиДокумент(ДокОснование);
    Докум.СделатьНеПроведенным()
    КонецЕсли;
    
    КонецПроцедуры
    
    
  7. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Да - была опечатка. Извините
  8. TopicStarter Overlay
    BOBS
    Offline

    BOBS

    Регистрация:
    22 май 2010
    Сообщения:
    36
    Симпатии:
    0
    Баллы:
    1
    А почему ===>>> СделатьНеПроведенным()
    Выдает ===>>> Данная операция недоступна при проведении документа!
    Как то это можно обойти ?
  9. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    потому что метод НЕЛЬЗЯ использовать в предопределенной процедуре ОбработкаПроведения Вынесите ее в ОТДЕЛЬНУЮ процедуру

    СделатьНеПроведенным()
    Назначение:
    Отменить проведение документа.
    Замечание:
    Метод нельзя использовать в теле предопределенной процедуры ОбработкаПроведения.
    Метод можно использовать только для объектов, созданных функцией СоздатьОбъект.
  10. TopicStarter Overlay
    BOBS
    Offline

    BOBS

    Регистрация:
    22 май 2010
    Сообщения:
    36
    Симпатии:
    0
    Баллы:
    1
    Спасибо большое ! Помогли немного разобраться. но проблему пока не решил, Буду дальше воевать ))
  11. TopicStarter Overlay
    BOBS
    Offline

    BOBS

    Регистрация:
    22 май 2010
    Сообщения:
    36
    Симпатии:
    0
    Баллы:
    1
    Победил. в общем благодаря подсказке - решение такое:
    На кнопку ОК повесил процедуру СнятьРезерв() перед стандартными функциями #Записать?Провести?Закрыть
    и получилось СнятьРезерв()#Записать?Провести?Закрыть а вот ниже и сама процедура:
    Код:
    Процедура СнятьРезерв() 
    Если (ДокОснование.Вид()="СчeтНаОплату") ИЛИ
    (ДокОснование.Вид()="Резерв") Тогда
    Докум = СоздатьОбъект("Документ");
    Докум.НайтиДокумент(ДокОснование);
    Если Докум.Проведен()=0 Тогда 
    Возврат;
    Иначе
    Если Вопрос("Вы уверены что хотите снять с резерва ? << " +Докум+" >>",4,0) = 6 Тогда
    Докум.СделатьНеПроведенным();
    Сообщить(" << " +Докум+ " >> был автоматически снят с резерва");
    КонецЕсли; 
    КонецЕсли;
    КонецЕсли;
    КонецПроцедуры
    
    

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