В конфигурации ПУБ 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;





Исправление и проведение документов, например, счетов-фактур, введенных на основании документов реализации, можно организовать многими способами. Описан сравнительно простой подход, реализованный и работающий несколько лет в реальной бухгалтерии 1Cv7.7. Без внешних компонентов.
Перейти к публикации
Я «-» никогда не ставлю. По принципу: «-» ставят только те, кто хочет НАср… НАвред… человеку-автору. Я придерживаюсь другого: видишь ошибку (в нормальной теме) — подскажи человеку. А всякие У… начинают демагогию на форумах разводить.
Но, откровенно, я бы эту задачу решил так:
1. Выбрать счета-фактуры за период //отрываем цикл
2. ишем Владельца (по документу-основанию), если Владелец есть:
1. сравниваем суммы, если находим разницу, перезаполняем на основании док-Владельца// в комментарий прописываем, что Сч-Ф переписан так то и так то.
2. иначе — Сч-ф не трогаем
Если владельца нет -ничего не делаем.
ВСЁ! Нечего тут мудрить!
И вопрос: а если эти, «неправильные» Сч-Ф уже напечатаны и подписаны, как тогда? Ответ прост: такую бухию надо гнать коров пасти, а не задачи программерам ставить! Я бы мог понять задачу предотвращения подобного (опять же, следует из НЕпрофессионализма бухии), но ни как не исправления ИХНИХ ляпсусов руками программера: ты перепишешь, по проге всё ОК!, они получат премию. Придёт время составлять Акты сверки взаиморасчётов, платить налоги… Так эти бухи и заявят: а это программер натворил!!! Не ведись на поводу!!!
Существующую счет фактуру нужно удалить непосредственно, а вдруг в расходной клиента или фирму поменяли. И конечно обязательно нужно оставлять «следы » замены счет-фактуры.
(1) Ваша схема решения описана в обработке!
Если накладная и счет идентичны — ничего в счете-фактуре и не поменяется!
Пометка в комментирии — совет дельный. Следует показать автора изменений.
Программист не ведет бухгалтерию, не создает документы реализации , счета и прочие документы! Он облегчает работу бухгалтера. Все делает бухгалтер! Он и отвечает за результат и получает премию!
Думаю, наши бухгалтеры меняют накладные и счета фактуры, если что-то из продукции покупатель не взял, вычеркнул. Документы перепечатывают и на следующий день увозят покупателю новый комплект документов. Может быть это и не совсем правильно в отношении счетов-фактур, есть ведь корретировочные счета фактуры…
Я не предлагаю методику работы бухгалтерии, я описал как можно исправив накладную АВТОМАТОМ исправить и счет-фактуру!
(2) Вместо 10 буханок хлеба по накладной покупатель взял только 5. Документы (накладная и счет-фактура) переписываются и вновь отправляются покупателю на следующий день с новыми накладными.
Работу бухгалтера по исправлению я облегчил!
А если 5 буханок хлеба купила жена покупателя?
Нужно не переписывать табличную часть а удалять старые и создавать новые. Естественно с сохранением номера и даты. Таким образом можно избежать несоответствия шапки накладных и счетов-фактур.
(5) Невнимательно смотрите текст.
В счет-фактуре есть две строки: ЗаполнитьШапку() и ЗаполнитьТабЧасть()!
(5) Кстати, как Вам удается «удалять старые и создавать новые» счета фактуры когда в сети работают 6-8 пользователей?
И главное, какой смысл в «УДАЛЕНИИ» и «СОЗДАНИИ НОВОГО» как Вы пишете «естественно с сохранением даты и номера»?
1. Мм, я бы ПриОткрытии С/ф повесил бы хотя бы уведомление, а лучше вопрос человеку — данные отличаются, перезаполнить с/ф?
2. Интересен также момент, что приЗакрытии вызывает ПриЗаписи… как бы предопределенная процедура опять же. Это же не красиво.
3. Я бы тогда сделал так (как любитель всяких удобных бантиков) кнопочка на реализации Переоформить(или при триггером при записи накладной, при котором выясняется, что с/ф отличается от реализации). Кнопочка перезаполняет с/ф и печатает новые варианты накладной и с/ф… ну и по поводу «комментарий», имхо, лучше завести другой реквизит, недоступный для интерактивного изменения (комментарий — любой пользователь может тут же зайти в документ заново и стереть). Тогда уже только по журналу регистрации искать…
(8) 1. Дать выбор «перезаполнить/не перезаполнять» — обязательно будет расхождение между счетами фактурами и накладными. Одинаковость — наша цель!
2. «красиво/не красиво»… Градаций оценок может быть очень много, спасибо, что остановились на нейтральной. Работает!
3. Нет предела совершенству! Можно сделать все, что Вы рекомендуете. Описал простой подход, а не «совершенный». Можно добавить права пользователей, Отдельный файл изменений и проч. и проч. В нашей бухгалтерии этого не потребовалось!