Исправление и проведение документов

28.07.12

Разработка - Универсальные функции

Исправление и проведение документов, например, счетов-фактур, введенных на основании документов реализации, можно организовать многими способами. Описан сравнительно простой подход, реализованный и работающий несколько лет в реальной бухгалтерии 1Cv7.7. Без внешних компонентов.

В конфигурации ПУБ 1Cv7.7 возникла следующая задача. Ежедневно выписываются "автоматом" по полученным заявкам от покупателей порядка 200 накладных реализации и к ним столько же счетов фактур. После доставки продукции покупателям оператор ручками корректирует некоторые накладные в базе.

Поставили задачу: при изменении документов реализации надо автоматом менять и подчиненный счет-фактуру. Сравнительно простое решение без ВК заключается в небольшой модификации модуля формы Счета-фактуры:

//********************************************

// Предопределенная процедура Счета-фактуры

Процедура ПриОткрытии()

Парам = Форма.Параметр;

...

//2012

Если Парам = "Переоформить" Тогда

ЗаполнитьШапку();

ЗаполнитьТабЧасть();

Записать();

СтатусВозврата(0);

КонецЕсли;

//2012  

...

КонецПроцедуры // ПриОткрытии

Допишем в модуль формы документа Реализации новую процедуру:

//2012

//********************************************

// Предопределенная процедура Реализации

Процедура ПриЗакрытии()

Если ДатаДок<=Константа.ДатаЗапретаРедактирования Тогда

Возврат;

КонецЕсли;

ПриЗаписи();

Если СтатусВозврата()=0 Тогда

Возврат;

КонецЕсли;

//изменить Счет-Фактуру

докСФ = СоздатьОбъект("Документ.СчетФактура");

докСФ.ВыбратьДокументы(ДатаДок,ДатаДок); 

Пока докСФ.ПолучитьДокумент()=1 Цикл

Если докСФ.ДокументОснование=ТекущийДокумент() Тогда

СФ=докСФ.ТекущийДокумент();

ДокСФ.СделатьНепроведенным();

ДокСФ.УдалитьСтроки();

Параметр = "Переоформить";

ОткрытьФорму(докСФ.ТекущийДокумент(), Параметр);

Прервать;

КонецЕсли;

КонецЦикла;

докСФ = СоздатьОбъект("Документ.СчетФактура");

докСФ.НайтиДокумент(СФ);

Если докСФ.Выбран()=1 Тогда

докСФ.Комментарий = "Изменен: " + Пользователь;

докСФ.Записать();

Если Проведен()=1 Тогда

докСФ.Провести();

КонецЕсли;

КонецЕсли;

КонецПроцедуры //ПриЗакрытии

//2012

Теперь при изменении и закрытии документа Реализация автоматом корректируется и счет фактура. Если реализация проведена, проводится и счет-фактура. Использованные комментарии вида //2012 в начале и конце добавленных строк позволяют удобно отследить внесенные изменения при обновлении конфигурации. Представляется, что решение можно использовать и в Бухгалтерии, изменив строки заполнения шапки и табл.части в счете-фактуре.

И напоследок, модуль обработки группового исправления и проведения счетов-фактур

//*******************************************

Функция ПроверкаПериода()

Если ПустоеЗначение(Дата1) = 1 Тогда

Предупреждение("Не указана дата начала периода отчета!");

Возврат 0;

КонецЕсли;

Если Дата1 > Дата2 Тогда Предупреждение("Неправильно задан период отчета!"+РазделительСтрок+ "Дата начала больше даты окончания периода.");

Возврат 0;

КонецЕсли;

Возврат 1;

КонецФункции //ПроверкаПериода

//*******************************************

// Сформировать()

Процедура Сформировать()

Если ПроверкаПериода()=0 Тогда

Возврат;

ИначеЕсли Дата1<Константа.ДатаЗапретаРедактирования Тогда

Предупреждение("Нельзя проводить документы ранее даты запрета редактирования!");

Возврат;

КонецЕсли;

ВремяНачала = _GetPerformanceCounter();

докСФ = СоздатьОбъект("Документ.СчетФактура");

докСФ.ВыбратьДокументы(Дата1,Дата2); 

Пока докСФ.ПолучитьДокумент()=1 Цикл

Если докСФ.ДокументОснование.Вид()="РеализацияПродукции" Тогда

Если (докСФ.Проведен()=1) и (ПроводитьТолькоНепроведенные=1) Тогда

Продолжить;

КонецЕсли;

ДокСФ.СделатьНепроведенным();

ДокСФ.УдалитьСтроки();

Параметр = "Переоформить";

ОткрытьФорму(докСФ.ТекущийДокумент(), Параметр);

Если докСФ.ДокументОснование.Проведен()=1 Тогда

ДокСФ.Провести();

КонецЕсли;

КонецЕсли;

КонецЦикла;

Сообщить("Документы проведены. Время: " + Сокрл(Формат((_GetPerformanceCounter() - ВремяНачала)/1000, "Ч12.1")) + " сек."); КонецПроцедуры //Сформировать

//*******************************************

Дата1 = ТекущаяДата()-1;

Дата2 = ТекущаяДата()-1;

 

См. также

Универсальные функции Программист Платформа 1С v7.7 Россия Абонемент ($m)

В библиотеку собраны различные функции по работе с документами, журналами, типами данных, строками, датой и временем, таблицами значений, Excel, файлами, XML, JSON, Http-сервисами, SMTP серверами и т.п.

1 стартмани

22.12.2023    1206    14    user706545_kseg1971    0    

4

Универсальные функции Программист Платформа 1С v7.7 Конфигурации 1cv7 Россия Бесплатно (free)

Получение реквизитов контрагентов из 1С:Контрагент для старых конфигураций под 1с 7.7.

25.04.2022    2260    zhenyat    7    

6

Универсальные функции Программист Платформа 1С v7.7 Россия Бесплатно (free)

Функция выводит таблицу значений в табличный документ. (v7.7) Особенно полезно при отладке. Не нужно вносить изменения в код, вызываем функцию как вычисляемое выражение при останове. Если таблица обрабатывается в несколько этапов, можно вывести её после каждого и визуально проследить эволюцию.

30.06.2021    4956    Zoltan_Black    11    

2

Универсальные функции Системный администратор Программист Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Установка принтера по умолчанию в 1С 7.7. Обработка может быть полезна в том случае, когда нужно установить принтер по умолчанию, а доступа к рабочему столу нет (например, терминальный режим без рабочего стола или remoteApp)

1 стартмани

13.02.2019    13791    4    alsen    3    

5

Универсальные функции Программист Платформа 1С v7.7 Конфигурации 1cv7 1С:Комплексная 7.7 Абонемент ($m)

Предлагается набор функций 1с 7.7 для формирования строки json стандартными средствами.

1 стартмани

10.12.2018    10606    malovandrey    6    

19

Универсальные функции Работа с интерфейсом Программист Платформа 1С v7.7 Конфигурации 1cv7 Россия Абонемент ($m)

В статье дано описание создания индикатора на форме в среде разработки 1С:Предприятие 7.7 исключительно типовыми средствами.

1 стартмани

27.09.2016    18846    2    HAMMER_59    6    

2
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
0. BorisBelov 889 20.07.12 21:04 Сейчас в теме
Исправление и проведение документов, например, счетов-фактур, введенных на основании документов реализации, можно организовать многими способами. Описан сравнительно простой подход, реализованный и работающий несколько лет в реальной бухгалтерии 1Cv7.7. Без внешних компонентов.

Перейти к публикации

1. vladimir_makarov 105 27.07.12 01:50 Сейчас в теме
Я "-" никогда не ставлю. По принципу: "-" ставят только те, кто хочет НАср... НАвред... человеку-автору. Я придерживаюсь другого: видишь ошибку (в нормальной теме) - подскажи человеку. А всякие У... начинают демагогию на форумах разводить.
Но, откровенно, я бы эту задачу решил так:
1. Выбрать счета-фактуры за период //отрываем цикл
2. ишем Владельца (по документу-основанию), если Владелец есть:
1. сравниваем суммы, если находим разницу, перезаполняем на основании док-Владельца// в комментарий прописываем, что Сч-Ф переписан так то и так то.
2. иначе - Сч-ф не трогаем
Если владельца нет -ничего не делаем.
ВСЁ! Нечего тут мудрить!
И вопрос: а если эти, "неправильные" Сч-Ф уже напечатаны и подписаны, как тогда? Ответ прост: такую бухию надо гнать коров пасти, а не задачи программерам ставить! Я бы мог понять задачу предотвращения подобного (опять же, следует из НЕпрофессионализма бухии), но ни как не исправления ИХНИХ ляпсусов руками программера: ты перепишешь, по проге всё ОК!, они получат премию. Придёт время составлять Акты сверки взаиморасчётов, платить налоги... Так эти бухи и заявят: а это программер натворил!!! Не ведись на поводу!!!
Иваныч; +1 Ответить
3. BorisBelov 889 27.07.12 23:33 Сейчас в теме
(1) Ваша схема решения описана в обработке!
Если накладная и счет идентичны - ничего в счете-фактуре и не поменяется!

Пометка в комментирии - совет дельный. Следует показать автора изменений.

Программист не ведет бухгалтерию, не создает документы реализации , счета и прочие документы! Он облегчает работу бухгалтера. Все делает бухгалтер! Он и отвечает за результат и получает премию!
Думаю, наши бухгалтеры меняют накладные и счета фактуры, если что-то из продукции покупатель не взял, вычеркнул. Документы перепечатывают и на следующий день увозят покупателю новый комплект документов. Может быть это и не совсем правильно в отношении счетов-фактур, есть ведь корретировочные счета фактуры...

Я не предлагаю методику работы бухгалтерии, я описал как можно исправив накладную АВТОМАТОМ исправить и счет-фактуру!
2. mike581 27.07.12 09:12 Сейчас в теме
Существующую счет фактуру нужно удалить непосредственно, а вдруг в расходной клиента или фирму поменяли. И конечно обязательно нужно оставлять "следы " замены счет-фактуры.
4. BorisBelov 889 27.07.12 23:36 Сейчас в теме
(2) Вместо 10 буханок хлеба по накладной покупатель взял только 5. Документы (накладная и счет-фактура) переписываются и вновь отправляются покупателю на следующий день с новыми накладными.
Работу бухгалтера по исправлению я облегчил!
5. mike581 28.07.12 11:04 Сейчас в теме
А если 5 буханок хлеба купила жена покупателя?
Нужно не переписывать табличную часть а удалять старые и создавать новые. Естественно с сохранением номера и даты. Таким образом можно избежать несоответствия шапки накладных и счетов-фактур.
6. BorisBelov 889 28.07.12 11:49 Сейчас в теме
(5) Невнимательно смотрите текст.
В счет-фактуре есть две строки: ЗаполнитьШапку() и ЗаполнитьТабЧасть()!
7. BorisBelov 889 28.07.12 11:54 Сейчас в теме
(5) Кстати, как Вам удается "удалять старые и создавать новые" счета фактуры когда в сети работают 6-8 пользователей?
И главное, какой смысл в "УДАЛЕНИИ" и "СОЗДАНИИ НОВОГО" как Вы пишете "естественно с сохранением даты и номера"?
8. Necytij 04.08.12 10:28 Сейчас в теме
1. Мм, я бы ПриОткрытии С/ф повесил бы хотя бы уведомление, а лучше вопрос человеку - данные отличаются, перезаполнить с/ф?
2. Интересен также момент, что приЗакрытии вызывает ПриЗаписи... как бы предопределенная процедура опять же. Это же не красиво.
3. Я бы тогда сделал так (как любитель всяких удобных бантиков) кнопочка на реализации Переоформить(или при триггером при записи накладной, при котором выясняется, что с/ф отличается от реализации). Кнопочка перезаполняет с/ф и печатает новые варианты накладной и с/ф... ну и по поводу "комментарий", имхо, лучше завести другой реквизит, недоступный для интерактивного изменения (комментарий - любой пользователь может тут же зайти в документ заново и стереть). Тогда уже только по журналу регистрации искать...
9. BorisBelov 889 04.08.12 17:59 Сейчас в теме
(8) 1. Дать выбор "перезаполнить/не перезаполнять" - обязательно будет расхождение между счетами фактурами и накладными. Одинаковость - наша цель!
2. "красиво/не красиво"... Градаций оценок может быть очень много, спасибо, что остановились на нейтральной. Работает!
3. Нет предела совершенству! Можно сделать все, что Вы рекомендуете. Описал простой подход, а не "совершенный". Можно добавить права пользователей, Отдельный файл изменений и проч. и проч. В нашей бухгалтерии этого не потребовалось!
Оставьте свое сообщение