7.7 Изменение реквизитов счет-фактур

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

  1. TopicStarter Overlay
    spartak_lp
    Offline

    spartak_lp Опытный в 1С

    Регистрация:
    3 окт 2011
    Сообщения:
    201
    Симпатии:
    0
    Баллы:
    26
    Добрый день! Благодаря Бухгалтерскому угоднику месяц назад была создана обработка изменения счет-фактур (прикреплена), которая заполняла поле "Выставление счета-фактуры". Сейчас понадобилось доработать данную обработку. А именно, чтобы она вводила изменения по следующему алгоритму:
    Вот теперь думаю как изменить код обработки, чтобы выполнялся данный алгоритм?
    Попытался в таком виде сделать, знаю, что , наверняка, неверно по синтаксису, поправьте пожалуйста как надо правильно.

    Код:
    Процедура Сформировать()
    НачатьТранзакцию();
    Док=СоздатьОбъект("Документ.СчетФактура");
    Док.ВыбратьДокументы(НачДата,КонДата);
    Пока Док.ПолучитьДокумент()=1 Цикл
    
    Если Док.ВидОперации="Аванс" Тогда
    Док.КодВидаОперации="02";
    Док.СчетФактураНеВыставляется=СчетФактураНеВыставляется;
    КонецЕсли;
    Если ((Док.ВидОперации="Реализация") И (Док.Контрагент="население")) Тогда
    Док.КодВидаОперации="01";
    Док.СчетФактураНеВыставляется=СчетФактураНеВыставляется;
    ИначеЕсли ((Док.ВидОперации="Реализация") И ((Док.Договор="пени по договору") ИЛИ (Док.Договор="пени по реструктуризации")
    ИЛИ (Док.Договор="% за использование ден. ср-ми"))) Тогда
    Док.КодВидаОперации="09";
    Док.СчетФактураНеВыставляется=СчетФактураНеВыставляется;
    ИначеЕсли ((Док.ВидОперации="Реализация") И (Док.Контрагент="Земельное управление")) Тогда
    Док.КодВидаОперации="06";
    Док.СчетФактураНеВыставляется=СчетФактураНеВыставляется;
    ИначеЕсли ((Док.ВидОперации="Реализация") И (Док.Договор="НДС по разд. учету")) Тогда
    Док.КодВидаОперации="07";
    Док.СчетФактураНеВыставляется=СчетФактураНеВыставляется;
    ИначеЕсли Док.ВидОперации="Реализация" Тогда
    Док.КодВидаОперации="01";
    Док.Выставлен=Выставлен;
    Док.ДатаВыставления=Док.ДатаДок;
    КонецЕсли;
    Док.Записать();
    КонецЦикла;
    ЗафиксироватьТранзакцию();
    КонецПроцедуры
    

    Вложения:

  2. Хряк
    Offline

    Хряк Профессионал в 1С

    Регистрация:
    26 сен 2007
    Сообщения:
    1.447
    Симпатии:
    37
    Баллы:
    54
    замени везде Док.ВидОперации="Реализация" (и тому подобное сравнение) на
    ""+Док.ВидОперации="Реализация"
    кодвидаоперауии в док это что, перчисление, строка, список?
  3. TopicStarter Overlay
    spartak_lp
    Offline

    spartak_lp Опытный в 1С

    Регистрация:
    3 окт 2011
    Сообщения:
    201
    Симпатии:
    0
    Баллы:
    26
    Т.е. вот так?:
    Код:
    Процедура Сформировать()
    НачатьТранзакцию();
    Док=СоздатьОбъект("Документ.СчетФактура");
    Док.ВыбратьДокументы(НачДата,КонДата);
    Пока Док.ПолучитьДокумент()=1 Цикл
    
    Если ""+Док.ВидОперации="Аванс" Тогда
    Док.КодВидаОперации="02";
    Док.СчетФактураНеВыставляется=СчетФактураНеВыставляется;
    КонецЕсли;
    Если ((""+Док.ВидОперации="Реализация") И (""+Док.Контрагент="население")) Тогда
    Док.КодВидаОперации="01";
    Док.СчетФактураНеВыставляется=СчетФактураНеВыставляется;
    ИначеЕсли ((""+Док.ВидОперации="Реализация") И ((""+Док.Договор="пени по договору") ИЛИ (""+Док.Договор="пени по реструктуризации")
    ИЛИ (""+Док.Договор="% за использование ден. ср-ми"))) Тогда
    Док.КодВидаОперации="09";
    Док.СчетФактураНеВыставляется=СчетФактураНеВыставляется;
    ИначеЕсли ((""+Док.ВидОперации="Реализация") И (""+Док.Контрагент="Земельное управление")) Тогда
    Док.КодВидаОперации="06";
    Док.СчетФактураНеВыставляется=СчетФактураНеВыставляется;
    ИначеЕсли ((""+Док.ВидОперации="Реализация") И (""+Док.Договор="НДС по разд. учету")) Тогда
    Док.КодВидаОперации="07";
    Док.СчетФактураНеВыставляется=СчетФактураНеВыставляется;
    ИначеЕсли ""+Док.ВидОперации="Реализация" Тогда
    Док.КодВидаОперации="01";
    Док.Выставлен=Выставлен;
    Док.ДатаВыставления=Док.ДатаДок;
    КонецЕсли;
    Док.Записать();
    КонецЦикла;
    ЗафиксироватьТранзакцию();
    КонецПроцедуры
    КодВидаОперации - это строка.
  4. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Код:
    Док.СчетФактураНеВыставляется= СчетФактураНеВыставляется;
    СчетФактураНеВыставляется - это реквизит формы?
  5. TopicStarter Overlay
    spartak_lp
    Offline

    spartak_lp Опытный в 1С

    Регистрация:
    3 окт 2011
    Сообщения:
    201
    Симпатии:
    0
    Баллы:
    26
    Это реквизит формы документа "Счет-фактура выданная", а не обработки.
  6. Хряк
    Offline

    Хряк Профессионал в 1С

    Регистрация:
    26 сен 2007
    Сообщения:
    1.447
    Симпатии:
    37
    Баллы:
    54
    ну и чё, есть ошибки?
  7. TopicStarter Overlay
    spartak_lp
    Offline

    spartak_lp Опытный в 1С

    Регистрация:
    3 окт 2011
    Сообщения:
    201
    Симпатии:
    0
    Баллы:
    26
    ошибок нет, но не перезаписываются документы с нужными условиями.
    PS - Те галочки на форме обработки получается уже не должны быть задействованы, т.к. перезаписываться реквизиты должны по условиям, описанным выше.
  8. Хряк
    Offline

    Хряк Профессионал в 1С

    Регистрация:
    26 сен 2007
    Сообщения:
    1.447
    Симпатии:
    37
    Баллы:
    54
    по мне - так в договор добавить пару реквизитов
    -СФНеВыставляется
    -КодВидаОперации

    Тогда все твои условия сведутся к
    [CODE1C]
    Если (""+Док.ВидОперации="Реализация") Тогда
    КодВидаОперации=Док.Договор.КодВидаОперации;

    Если ПустоеЗначение(КодВидаОперации)=1 Тогда
    КодВидаОперации="01";
    КонецЕсли;
    КонецЕсли;
    Док.КодВидаОперации=КодВидаОперации;
    [/CODE1C]
    Условие про Аванс оставь
    ну и заполни кодами нужные значения в договорах
  9. TopicStarter Overlay
    spartak_lp
    Offline

    spartak_lp Опытный в 1С

    Регистрация:
    3 окт 2011
    Сообщения:
    201
    Симпатии:
    0
    Баллы:
    26
    Не соображу никак как это написать. Немного подкорректировал тот код:
    Код:
    Если ""+Док.ВидОперации="Аванс" Тогда
    Док.КодВидаОперации="02";
    Док.СчетФактураНеВыставляется=1;
    КонецЕсли;
    Если ((""+Док.ВидОперации="Реализация") И (""+Док.Контрагент="население")) Тогда
    Док.КодВидаОперации="01";
    Док.СчетФактураНеВыставляется=1;  
    Если ((""+Док.ВидОперации="Реализация") И ((""+Док.Договор="пени по договору") ИЛИ (""+Док.Договор="пени по реструктуризации")
    ИЛИ (""+Док.Договор="% за использование ден. ср-ми"))) Тогда
    Док.КодВидаОперации="09";
    Док.СчетФактураНеВыставляется=1;
    Если ((""+Док.ВидОперации="Реализация") И (""+Док.Контрагент="Земельно управление")) Тогда
    Док.КодВидаОперации="06";
    Док.СчетФактураНеВыставляется=1;
    Если ((""+Док.ВидОперации="Реализация") И (""+Док.Договор="НДС по разд. учету")) Тогда
    Док.КодВидаОперации="07";
    Док.СчетФактураНеВыставляется=1;
    ИначеЕсли ""+Док.ВидОперации="Реализация" Тогда
    Док.КодВидаОперации="01";
    Док.Выставлен=1;
    Док.ДатаВыставления=Док.ДатаДок;
    Док.СпособВыставления=1;
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
    В итоге работают только 3 условия:
    Код:
    Если ""+Док.ВидОперации="Аванс" Тогда
    Док.КодВидаОперации="02";
    Док.СчетФактураНеВыставляется=1;
    КонецЕсли;
    Если ((""+Док.ВидОперации="Реализация") И (""+Док.Контрагент="население")) Тогда
    Док.КодВидаОперации="01";
    Док.СчетФактураНеВыставляется=1;   
    Код:
    ИначеЕсли ""+Док.ВидОперации="Реализация" Тогда
    Док.КодВидаОперации="01";
    Док.Выставлен=1;
    Док.ДатаВыставления=Док.ДатаДок;
    Док.СпособВыставления=1;
    КонецЕсли;
    А другие нивкакую.
  10. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    пересмотрите еще раз ваши ЕСЛИ. Не нравится мне такая вложенность.
    Приведите пример какой документ обрабатывает не так (договор/контрагент)
  11. TopicStarter Overlay
    spartak_lp
    Offline

    spartak_lp Опытный в 1С

    Регистрация:
    3 окт 2011
    Сообщения:
    201
    Симпатии:
    0
    Баллы:
    26
    Пробовал менять местами, т.е. вначале ставил:
    Код:
    Если ((""+Док.ВидОперации="Реализация") И ((""+Док.Договор="Пени по договору") ИЛИ (""+Док.Договор="Пени по реструктуртзации")
    ИЛИ (""+Док.Договор="% за пользование ден. ср-ми"))) Тогда
    Док.КодВидаОперации="09";
    Док.СчетФактураНеВыставляется=1;
    То счет-фактуры с данными договорами правильно перезаписывает, а последующие, такое ощущение не исправляет, условие, походу неграммотно записано. Плюс еще вот это условие:
    Код:
    Док.Выставлен=1;
    Док.ДатаВыставления=Док.ДатаДок;
    Док.СпособВыставления=1;
    в любом случае выполняется вместе с другим (только в затемненном, недоступном виде), т.к. по-видимому из-за того, что в конце кода стоит и ВидОперации="Реализация" совпадает с другими.
  12. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Это вы "в точку".... Выложите полный алгоритм.
  13. TopicStarter Overlay
    spartak_lp
    Offline

    spartak_lp Опытный в 1С

    Регистрация:
    3 окт 2011
    Сообщения:
    201
    Симпатии:
    0
    Баллы:
    26
    Алгоритм:
    Если "Аванс", то код=02 и не выставляется. Если "Реализация" и контрагент="население", то код=01 и не выставляется. Если "Реализация" и контрагент="Земельное управление", то код=06 и не выставляется. Если "Реализация" и договор="Пени по договору" или "Пени по реструктуртзации" или "% за использование ден. ср-ми", то код=09 и не выставляется.Если "Реализация" и договор="НДС по разд. учету", то код=07 и не выставляется. В других случаях, если "Реализация", то код=01, документ выставляется, дата выставления=дате документа и на "бумажном носителе".
  14. Хряк
    Offline

    Хряк Профессионал в 1С

    Регистрация:
    26 сен 2007
    Сообщения:
    1.447
    Симпатии:
    37
    Баллы:
    54
    начни с малого
    вместо всего того кода напиши мой короткий
    добавь в спр.договоры рекв. КодВидаОперации стр, длина 2, вставь его на форму
    добавь в спр.договоры рекв. СФнеВыст число, длина 1, вставь его на форму в виде галки
    в реж.предприятия заполни коды и проставь где надо галки
    тестируй
    потом дополнишь код до нужной кондиции

    а в условия не попадает - сделай нрег(сокрЛП(Док.Договор)) и т.п. и строки в кавычках переведи в нижний регистр
  15. Хряк
    Offline

    Хряк Профессионал в 1С

    Регистрация:
    26 сен 2007
    Сообщения:
    1.447
    Симпатии:
    37
    Баллы:
    54
    Код:
     [/i]
    [i]Если (""+Док.ВидОперации="Реализация") Тогда
    КодВидаОперации=Док.Договор.КодВидаОперации;
    
    Если ПустоеЗначение(КодВидаОперации)=1 Тогда
    КодВидаОперации="01";
    КонецЕсли;
    КонецЕсли;
    Док.КодВидаОперации=КодВидаОперации;
    Док.СчетФактураНеВыставляется=Док.Договор.СФнеВыст;[/i]
    
    [i]


    т.е. это вместо всего твоего кода
  16. TopicStarter Overlay
    spartak_lp
    Offline

    spartak_lp Опытный в 1С

    Регистрация:
    3 окт 2011
    Сообщения:
    201
    Симпатии:
    0
    Баллы:
    26
    Хряк, а в условии где при определенном контрагенте нужно, чтобы было условие тоже чтоль надо в справочнике добавлять реквизиты будет?
  17. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Не забываем, что добавляя реквизиты в типовую конфу вы обрекаете себя на постоянные мучения при обновлении.
    Легче написать одну процедуру и вызвать ее в ВводНаОсновании и ПриВыбореКонтрагента (для автозаполнения). В этом случае при обновлении возни будет НАМНОГО меньше + нет опасности что при кривом обновлении накроются все внесенные значения добавленных реквизитов

    Крылья...Крылья..... Главное хвост! (с)
  18. TopicStarter Overlay
    spartak_lp
    Offline

    spartak_lp Опытный в 1С

    Регистрация:
    3 окт 2011
    Сообщения:
    201
    Симпатии:
    0
    Баллы:
    26
    Вот и за это переживаю, а вы не подскажите как мне тот код кривой, который я составил, подправить надо?
  19. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Лень оформлять в виде кода все переменные, но принцип следующий
    Код:
    Если "Аванс", то
    код=02
    не выставляется
    ИначеЕсли "Реализация"
    код="00";
    Если контрагент="население", то
    код=01
    не выставляется.
    ИначеЕсли контрагент="Земельное управление", то
    код=06
    не выставляется.
    Иначе 
    Если договор="Пени по договору" или "Пени по реструктуртзации" или "% за использование ден. ср-ми", то
    код=09 и
    не выставляется.
    ИначеЕсли договор="НДС по разд. учету", то
    код=07
    не выставляется.
    КонецЕсли;
    КонецЕсли;
    Если Код="00" Тогда
    код=01
    документ выставляется
    КонецЕслИ;
    КонецЕсли;
    
  20. TopicStarter Overlay
    spartak_lp
    Offline

    spartak_lp Опытный в 1С

    Регистрация:
    3 окт 2011
    Сообщения:
    201
    Симпатии:
    0
    Баллы:
    26
    Переменные подставил, правильно?
    Код:
    Если ""+Док.ВидОперации="Аванс" Тогда
    Док.КодВидаОперации="02";
    Док.СчетФактураНеВыставляется=1;
    ИначеЕсли ""+Док.ВидОперации="Реализация" Тогда
    код="00";
    Если ""+Док.Контрагент="население" Тогда
    Док.КодВидаОперации="01";
    Док.СчетФактураНеВыставляется=1;
    ИначеЕсли ""+Док.Контрагент="Земельное управление" Тогда
    Док.КодВидаОперации="06";
    Док.СчетФактураНеВыставляется=1;
    Иначе
    Если ((""+Док.Договор="Пени по договору") или (""+Док.Договор="Пени по реструктуртзации") или (""+Док.Договор="% за использование ден. ср-ми")) Тогда
    Док.КодВидаОперации="09";
    Док.СчетФактураНеВыставляется=1;
    ИначеЕсли ""+Док.Договор="НДС по разд. учету" Тогда
    Док.КодВидаОперации="07";
    Док.СчетФактураНеВыставляется=1;
    КонецЕсли;
    КонецЕсли;
    Если Код="00" Тогда
    Док.КодВидаОперации="01";
    Док.Выставлен=1;
    Док.ДатаВыставления=Док.ДатаДок;
    Док.СпособВыставления=1;
    КонецЕсли; 
    КонецЕсли;

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