Здравствуйте.
Такая задача: выделять цветом (или ещё как нибудь) оплаченные заявки от покупателей в общем журнале документов.
Логику планирую такую: смотрим структуру подчинённости, если там есть строка выписки банка приход - значит оплачено.
Вопрос: куда пихать этот код, что бы он выполнялся как бы в журнале документов, но только к опр. документу.
У документа Заявка От Покупателя (отплату которой надо отследить), есть неактивное поле Склад.
Оно отображается в общем журнале, но всегда пустое. Можно ли в это поле писать произвольное значение? Оплачено, например.
Всем заранее спасибо за ответы.
2.
motorkuzbassa.it
10021.03.13 07:37 Сейчас в теме
(1)на сайте есть разработка типа общий журнал документов, там нужно посмотреть как реализована раскраска строк.
А в кратце, Событие журнала, приВыводеСтроки
Процедура ДокументСписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
Если всякиеУсловияОдни Тогда
ОформлениеСТроки.ЦветФона=WebЦвета.СветлоЗолотистый;
ИначеЕсли всякиеУсловияДругие Тогда
ОформлениеСТроки.ЦветФона=WebЦвета.СветлоРозовый;
КонецЕсли;
КонецПроцедуры
1) Для начала неплохо указать для какой конфигурации
2) Структура подчиненности неподходит - надо сравнивать сумму заявки и сумму оплаты. Для нормальной производительности это должен быть запрос к регистрам взаиморасчетов (накопления или бухгалтерии - см. пункт 1)
3) "пихать код" в событие формы списка "ПриВыводеСтроки"
Насколько я помню 7.7, там раскрасить список можно анешней компонентой "FormEx.dll" (или 1Срр.dll), но я с ней почти не работал (не люблю пользоваться внешними компанентами) там кней подробный мануал
(13) берешь объект Текст и тащишь его на табличную часть.... у тебя там появляется новая колонка... вот в ней на закладке Дополнительно, пишешь функцию которая будет возвращать нужное тебе значение....
(15) falcon, а как узнать на каком документе фокус? Т.е. функция во вкладке дополнительно должна же выглядеть так Оплачено(Док). А в коде мне как то надо этот Док соотнести со строкой. Вот как?
(24) RDC, Я же вам уже написал функцию Раскраска(). А фокус на документ в списке вам возвращает атрибут списка журнала документов: ТекущийДокумент. Смотрите внимательно на код в (22).
(24) ну собственно ответили уже... ТекущийДокумент... тебя спасет...
ты только учти, что это все считается... и будет сильно тормозить если документов/пользователей много...
если есть возможность однозначно фиксировать оплату, было бы лучше реализовать именно так, т.е. сделать реквизит документа, типа оплачен: да/нет и выставлять "да" при проведении оплаты....
(26) falcon, да не сказал бы что тормозит. Всмысле, совсем не тормозит. Выбрал период 1,5 года. Тормозов не ощущаю.
Всё работает, но ругается на строку одну.
Вот код функции
Функция ОплаченоПр(Тдок) Экспорт
ДокПодч = СоздатьОбъект("Документ");
ДокПодч.ВыбратьПодчиненныеДокументы(НачалоИнтервала(),КонецИнтервала(),Тдок);
Пока ДокПодч.ПолучитьДокумент()=1 Цикл
Если ДокПодч.Вид()="СтрокаВыпискиПриход" Тогда
//НайденнаяСФ = ДокПодч.ТекущийДокумент();
Возврат 1;
Иначе
Возврат 0;
КонецЕсли;
КонецЦикла;
КонецФункции
Показать
Ругается на ДокПодч.ВыбратьПодчиненныеДокументы(НачалоИнтервала(),КонецИнтервала(),Тдок);
Говорит "Не выбран документ". Хотя всё работает и меня очень устраивает.
(27) RDC, в Вашем коде проверяется только один самый первый документ в выборке. Попробуйте так:
Найден = 0;
Пока ДокПодч.ПолучитьДокумент()=1 Цикл
Если ДокПодч.Вид()="СтрокаВыпискиПриход" Тогда
Найден = 1;
Прервать;
КонецЕсли;
КонецЦикла;
Возврат Найден;
типовой конфигурации абсолютно пофиг структура подчиненности в расчете оплаченных заявок. вы испытаете большое удивление, когда к заявке подцепите оплату, потом к этой же заявке реализацию и окажется что вообщем-то реализация совсем не оплачена. Учите матчасть. Совпадение оплаты по структуре подчиненности и типового алгоритма закрыия оплат/долгов - всего лишь частнывй случай, которые не канает в подавляющем большинстве случаев.
.
Резюме: не изобретатйе своих схем "взаиморасчетов" на основе струткур подчиненности. Для этого - уже есть все в штатной конфиге. Применит етиповой функционал с умом.
.
как вариант в помощь: http://infostart.ru/public/175550/
(18) а причем здесь "реализации" и фифо-алгоритм взаиморасчетов?
в (1) четко написано заявка.сумма=оплата.сумма
это реально сделать используя подчиненность документов, при условии, что ответственное лицо будет аккуратно вводить оплаты на основе заявок.
кстати для (1) - строки можно не красить, а вывести пиктограмку в текстовую колонку. К примеру, так было сделано в ТиС 8.7, если у документа "расходная накладная" было только "предварительное" проведение.
(18) CheBurator, в мат. части не соображаю абсолютно ничего. И в 1С в принципе тоже.
Зато есть большой опыт программирования на самых разных языках.
Бухи выкатили такую вот задачу. Расспросил всё подробно. Сказали по большому счёту им не важно
какая там сумма, главное что бы документ был привязан. А за то что бы сумма соответствовала есть
отдельный человек который сидит и "собирает" строки выписки банка. Ну или что то такое.
Ещё раз повторюсь, что мат. части не соображаю совершенно ничего.
Если сможете "на пальцах" предложить другой вариант, что бы я понял - пожалуйста. Буду признателен.
(20) ну и уроды. Потом на основе этих привязок начнут городить акты сверок, систему взаиморасчетов и прочую хрень. Проходил не раз. Да, это работает - если сильно ответсвенный человек. да и то - со скрипом. Возвраты от покупателей - образовавшийся баланс в пользу покупателя - куда относить будете? и еще много чего... мне в лом рассказывать, ибо основной посыл "все что вы делаете ручками - все очень плохо". Регулярно будут кривые привязки на основании, суммы в оплатах будут не совпадать с заявками, регулярно будут виясщие без оплат заявки (предоплата) и прочая и прочая.
.
Решается это все нормально штатно. при этом работают штатные алгоритмы. Ввод на основании используется лишь ДЛЯ УДОБСТВА ЗАПОЛНЕНИЯ, а не для раскладки оплат по этой привязке. если вы хотите сделать привязку оплат к заявкам - следует работать от "сделки". У вас есть справочник договора. каждую отдельную "сделку" - обозначать в этом справочнике. и при разноске оплат и заявок следует разносить на правильные "сделки-договора". И все оплачено/неоплачено (ибо витоге вы придете к оплате/неоплате именно отгрузок-реализаций, а не заяовк) и прочее будет видно во всех ШТАТНЫХ ОТЧЕТАХ.
.
поверьте старому 1снику. который таких систем взаиморасчетов на основе ввода на основании навидался столько что уже тошнит. все они страдают инвалидностью и уе...щностью. все кончается тем что наряду с имеющейся штатной схемой взаиморасчетов строится параллельная колченогая своя точно такая же схема - с тратой на это денег, разборками с операторами/программистами и прочей хренью.
.
впрочем - хотите жрать кактус - жрите.. ;-)
Раскрасить таблицу в 1с 7.7 можно с использованием внешней компоненты FormEx. Суть метода довольна проста.
В форме списка журнала документов, в котором хотите подсветить строки, в табличную часть добавьте текстовое поле. Установите для этого поля значение формула - Раксраска(). Затем если это журнал конкретного вида документа то просто делайте проверку на наличие в подчинении проведенных документов оплаты и если они есть установите раскраску в нужный цвет. Код функции Раскраска() примерно такой:
//при открытии формы
//создадим документ для отбора подчиненных
ПодчДокОплаты=СоздатьОбъект("Документ");
//установим фильтр для выбора только проведенных подчиненных документов
ПодчДокОплаты.УстановитьФильтр(1,0);
//установим отбор только документов оплаты
ПодчДокОплаты.ИспользоватьЖурнал("ВидДокументаОплаты");
//далее в модуле определим функцию для окрашивания строк
Функция Раскраска()
Если ПодчДокОплаты.ВыбратьПодчиненныеДокументы(ДатаДок,,ТекущийДокумент)=1 Тогда
//если в выборке есть хотя бы один проведенный документ значит есть оплата
//устанавливаем нужный цвет для раскрашивания
Возврат "Brush["+КодЖелаемогоЦвета+"]";
Иначе
//если проведенных подчиненных документов оплаты нет не раскрашиваем
Возврат "";
КонецЕсли;
КонецФункции
(28) RDC, У вас явно журнал не по одному виду документов. Добавьте в функцию проверку на вид документа.
Если ТекущийДокумент.Вид()="ВидДокументаОплаты" Тогда
КонецЕсли;
Ну а более верно будет использование Попытки/Исключения. Т.к. правильно написали в (26) все эти манипуляции будут достаточно сильно нагружать систему, особенно если кто-то откроет журнал с периодам в пару лет и начнет в нем активно перемещаться. А конструкция Попытка/исключения отрабатывает быстрее чем Если/Тогда.
Функция Раскраска()
Попытка
Если ПодчДокОплаты.ВыбратьПодчиненныеДокументы(ДатаДок,,ТекущийДокумент)=1 Тогда
//если в выборке есть хотя бы один проведенный документ значит есть оплата
//устанавливаем нужный цвет для раскрашивания
Возврат "Brush["+КодЖелаемогоЦвета+"]";
Иначе
//если проведенных подчиненных документов оплаты нет не раскрашиваем
Возврат "";
КонецЕсли;
Исключение
Возврат "";
КонецПопытки;
КонецФункции
(30) RDC, Зачем Получить()? Вам достаточно ВыбратьПодчиненныеДокументы(). Если вернет 1 значит в выборке есть хотя бы один подчиненный документ, этого условия вам достаточно что бы раскрасить. И вынесите из тела функции СоздатьОбъект()
Введите общую переменную для формы ПодчДокОплаты. И в процедуре при открытии напишите
Процедура ПриОткрытии()
//создадим документ для отбора подчиненных
ПодчДокОплаты=СоздатьОбъект("Документ");
//установим фильтр для выбора только проведенных подчиненных документов
ПодчДокОплаты.УстановитьФильтр(1,0);
//установим отбор только документов оплаты
ПодчДокОплаты.ИспользоватьЖурнал("ВидДокументаОплаты");
.......
КонецПроцедуры
(33) RDC, подчинение документов это не то же самое, как, допустим, иерархия в справочнике. Только "непосредственное" подчинение. На картинке документ СтрокаВыпискиБанка подчиняется Счетуфактуре, а между СтрокаВыпискиБанка и Неподтвержденная заявка подчинения, в понимании 1С, нет
RDC, добавлю к (35),(36), заполнение реквизита Оплачено (или другие способы "привязки") видимо должно производится автоматически
Бухи выкатили такую вот задачу. .... Сказали по большому счёту им не важно
какая там сумма, главное что бы документ был привязан.
Пока по картинке из (33) тот, кто вносит оплату, "привязывает" её к счету-фактуре. Подозреваю, что задача как раз в том, чтобы ничего дополнительно не указывая (т.е. если что-то проставляется при внесении оплаты, то не вручную), увидеть "привязку" к заявке в журнале (возможно будет достаточно отчета).
.. что вообщем-то и иллюстрирует уже возникшие проблемы в (33).
.
не надо в журнале никаких функций и сложных алгоритмоы, тем более с выборкой подчиненных.
.
сделайте общий рнеквизит документов, строка(15), в проведении/записи документов оплаты/отгрузки - анализируйте что надо. при "наличии оплаты" в этот реквизит пишите нужный цвет. Потом этот реквизит тупо выводите в общем журнале БЕЗО ВСЯКИХ РАСЧЕТОВ.
.
велосипедисты, е-мае...