gifts2017

Учет доверенностей

Опубликовал Serg (Sykoku) в раздел Программирование - Практика программирования

В расходных документах есть необходимость проставления доверенности. Но заносить каждый раз одни и те же данные бывает утомительно. особенно при больших оборотах.

 

 

Создается

1. Справочник  ГенДов с полями "От" (Дата), "Срок" (Дата) , "Кому" (Строка)

Подчиненность -  "Клиент", Уровень - 1

2. Модифицируется форма Элемента "Клиент" - вставляется ТаблицаЗначений "ГенДов" и добавляется код

 

 

// =========================================================

Функция Ген_Дов()

    ГенДов.УдалитьСтроки();

           Спр = СоздатьОбъект("Справочник.ГенДов");

           Спр.ИспользоватьВладельца(ТекущийЭлемент());

            Спр.ВыбратьЭлементы();

            Пока Спр.ПолучитьЭлемент() = 1 Цикл

                        Если (Спр.ТекущийЭлемент().ПометкаУдаления() = 0) Тогда

                                   ГенДов.НоваяСтрока();

                                   ГенДов.Номер = Спр.ТекущийЭлемент().Наименование;

                                   ГенДов.От = Спр.ТекущийЭлемент().Дата;

                                   ГенДов.До = Спр.ТекущийЭлемент().Срок;

                                   ГенДов.ФИО= Спр.ТекущийЭлемент().ФИО;

                        КонецЕсли;

            КонецЦикла;

    Возврат "";

КонецФункции


3. Рядом в форме вставляется кнопка с кодом "ОткрытьФорму("Справочник.ГенДов")"

 

4. В теле модуля Расходного Документа находится процедура печати и в нее добавляется следующее

    ГенДов="";

    Спр = СоздатьОбъект("Справочник.ГенДов");

            Спр.ИспользоватьВладельца(Клиент);

            Спр.ВыбратьЭлементы();

            Пока Спр.ПолучитьЭлемент() = 1 Цикл

                        Если (ТекущаяДата() >= Спр.ТекущийЭлемент().Дата) И (ДатаДок <= Спр.ТекущийЭлемент().Срок) Тогда

                                   ГенДов=ГенДов + СокрЛП(Спр.ТекущийЭлемент().Наименование) + " від "+Спр.ТекущийЭлемент().Дата + " на "+СокрЛП(Спр.ТекущийЭлемент().ФИО) + ";"; //+"№ "

                                   Если (Нрег(Сред(ГенДов,1,3))<>"за ") Тогда

                                               ГенДов="За "+ГенДов;

                                   КонецЕсли;

                        КонецЕсли;

            КонецЦикла;

 

            Если ПустоеЗначение(ГенДов)=1

                        Тогда ГенДов="Отримав " + СокрЛП(Получил) + " за дов. "+СокрЛП(ДовСерия) +" № "+ СокрЛП(ДовНомер) + " від "+ ДовДата;

//                      Иначе ГенДов="за ген.дов.№ " + Клиент.ГенДов.Получить(ДатаДок).Наименование + " від "+ Клиент.ГенДов.Получить(ДатаДок).Дата +" на "+ Клиент.ГенДов.Получить(ДатаДок).ФИО;

            КонецЕсли;

 

Место вывода в документе этой переменной, мне кажется, несложно..

Заполняется либо паспортными данными, либо собственно доверенностями.

 

Для "обычных" доверенностей рекомендую добавить в "Клиенте" 2 поля-счетчики

1.- К-во полученных доверенностей

2. - К-во отгруженных накладных.

Автоинкрементация - процесс несложный, выполняемый при проведении документа (с проверкой предыдущего состояния).

 

Процедура ОбработкаПроведения()

.....

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

        ТекКлиент = СоздатьОбъект("Справочник.Клиенты");

        Если ТекКлиент.НайтиЭлемент(Клиент)<>0 Тогда

            ТекКлиент.СчетчикРН=Клиент.СчетчикРН + 1;

            ТекКлиент.Записать();

        КонецЕсли;

    КонецЕсли;

......

 

В моем случае пришлось еще модифицировать глобальный подуль - процедуры отмены проведения

Например

Процедура ПриОтменеПроведенияДокумента(Конт)

.....

    Если Конт.ТекущийДокумент().Вид() = "РасходнаяНакладная" Тогда

        ТекКлиент = СоздатьОбъект("Справочник.Клиенты");

        Если ТекКлиент.НайтиЭлемент(Конт.ТекущийДокумент().Клиент)<>0 Тогда

            ТекКлиент.СчетчикРН=Конт.ТекущийДокумент().Клиент.СчетчикРН - 1;

            ТекКлиент.Записать();

        КонецЕсли;

.....

 

Процедура ПриУдаленииДокумента(Докум, Режим)

.....

   Если Докум.Вид() = "РасходнаяНакладная" Тогда

        ТекКлиент = СоздатьОбъект("Справочник.Клиенты");

        Если ТекКлиент.НайтиЭлемент(Докум.Клиент)<>0 Тогда

            ТекКлиент.СчетчикРН=Докум.Клиент.СчетчикРН - 1;

            ТекКлиент.Записать();

        КонецЕсли;

    КонецЕсли;

.....

Аналогично решается вопрос с инкрементацией дополнительного документа - Входящая доверенность.

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Сергей Рудаков (fishca) 08.09.11 21:44
Есть замечательная разукрашка кода, она очень помогает при подготовке публикации
2. Serg (Sykoku) 09.09.11 21:05
(1)

Спасибо, мил-человек.

Кроме снятия 3$ толку маловато - файл epf не для "Семерки".
3. Serg (Sykoku) 09.09.11 21:05
(1)
И в 8.2 он заработал лишь после конвертации.
4. Serg (Sykoku) 09.09.11 21:05
(1)
И на сайте картинка стала "вменяемой" раза с 3-го.
5. Serg (Sykoku) 09.09.11 21:05
(1)
И лишние параграфы влепились кругом....
6. Сергей Рудаков (fishca) 09.09.11 22:01
(4)ну не все же прямо сразу ;)
7. Serg (Sykoku) 09.09.11 22:35
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа