К вопросу об использовании подписок на события в типовых конфигурациях.

27.08.08

Разработка - Механизмы типовых конфигураций

Пришла вот такая хотелка {для УПП 1.2.17.3}:
"При вводе счет/фактуры выданной (если ранее уже была оплата) не подтягивается платежное поручение (его № и дата)."
Расшифровка: при вводе СФВ на основании Акта услуг, в котором указан счет (сделка), если по этому счету была платежка покупателя, ее дата/номер должна проставляться в СФВ.
Нет, проблем, ведь подписки придуманы именно для таких случаев, верно?
Заводим в конфу новую подписку, указываем источник - СФВ, событие - Заполнение. и обработчик с простеньким запросом:
Процедура ВводСФВНаОснованииАктаОбработкаЗаполнения(Источник, Основание) Экспорт
	Счет = Основание.Сделка.Ссылка;
	Если ЗначениеЗаполнено(Счет) Тогда
	Запрос = Новый Запрос;
		Текст = "ВЫБРАТЬ
		|	ЕСТЬNULL(ПлатежноеПоручениеВходящее.ДатаВходящегоДокумента, ПлатежноеПоручениеВходящее.Дата ) КАК ДатаПлатежноРасчетногоДокумента,
		|	ЕСТЬNULL(ПлатежноеПоручениеВходящее.НомерВходящегоДокумента, ПлатежноеПоручениеВходящее.Номер) КАК НомерПлатежноРасчетногоДокумента
		|ИЗ
		|	Документ.ПлатежноеПоручениеВходящее КАК ПлатежноеПоручениеВходящее
		|ГДЕ
		|	ПлатежноеПоручениеВходящее.РасшифровкаПлатежа.Сделка = &Сделка
		|";
		Запрос.Текст = Текст;
		Запрос.УстановитьПараметр("Сделка",Счет);
		Результат = Запрос.Выполнить();
		Если Результат.Пустой() Тогда
			Сообщить("Нет входящих платежных поручений по (сделке): "+Счет);
		Иначе
			Источник.ДатаНомерДокументовОплаты.Загрузить(Результат.Выгрузить());
		КонецЕсли; 
	Иначе
		Сообщить("Не заполнен Счет (Сделка) в "+Основание);
	КонецЕсли;
КонецПроцедуры


Запускаем, работает. Только почему-то в табличке появляется лишняя пустая строчка... Ёклмн!

Разбираемся. Оказывается, в СФВ в ПриОткрытии() уважаемая фирма вставила вот такую фигню:
Процедура ПриОткрытии()
...	
	Если ЭтоНовый() Тогда
...
		Если ДокументОснование <> Неопределено Тогда
			ЗаполнитьДатуИНомерВходящегоДокумента();
		КонецЕсли;
	КонецЕсли;
...
КонецПроцедуры


Сама вызываемая процедура
Процедура ЗаполнитьДатуИНомерВходящегоДокумента(ОбрабатываемыйДокументОснование = Неопределено)
Запрос = Новый Запрос;
Запрос.Текст = 
		"ВЫБРАТЬ
		|	НДСУчетРаспределенныхОплатПокупателей.ДокументОплаты,
		|	ЕСТЬNULL(НДСУчетРаспределенныхОплатПокупателей.ДокументОплаты.НомерВходящегоДокумента, НДСУчетРаспределенныхОплатПокупателей.ДокументОплаты.Номер) КАК НомерВходящегоДокумента,
		|	ЕСТЬNULL(НДСУчетРаспределенныхОплатПокупателей.ДокументОплаты.ДатаВходящегоДокумента, НДСУчетРаспределенныхОплатПокупателей.ДокументОплаты.Дата) КАК ДатаВходящегоДокумента
		|ИЗ
		|	РегистрНакопления.НДСУчетРаспределенныхОплатПокупателей.Обороты(, &КонецПериода, Период, СчетФактура В (&СписокОснований)) КАК НДСУчетРаспределенныхОплатПокупателей";
				   
	Если ОбрабатываемыйДокументОснование = Неопределено Тогда
		Запрос.УстановитьПараметр("СписокОснований", УчетНДС.УдалитьПовторяющиесяЭлементыМассива(ДокументыОснования.ВыгрузитьКолонку("ДокументОснование"),Истина));
	Иначе
		Запрос.УстановитьПараметр("СписокОснований", ОбрабатываемыйДокументОснование);
	КонецЕсли;
	
	Запрос.УстановитьПараметр("КонецПериода", Новый Граница(КонецДня(Дата),ВидГраницы.Включая));
	Выборка = Запрос.Выполнить().Выбрать();
	Пока Выборка.Следующий() цикл
		НовыйПРД = ДатаНомерДокументовОплаты.Добавить();
		НовыйПРД.ДатаПлатежноРасчетногоДокумента = Выборка.ДатаВходящегоДокумента;
		НовыйПРД.НомерПлатежноРасчетногоДокумента = Выборка.НомерВходящегоДокумента;
	КонецЦикла;
КонецПроцедуры

представляет собой маленький шедевр:

Ну, во-первых, то, что из трех колонок запроса используются только две,
факт, хоть и говорящий о качестве кода уважаемой, но прямо к теме не относится.
Во-вторых, то, что перед вызовом - единственном в конфигурации - проверяется условие
ДокументОснование <> 
,
а потом в теле процедуры предлагается
Если ОбрабатываемыйДокументОснование = 

- это уже не только о качестве кода, но и о наличии целостного представления у разработчика
о собственной разработке. Но, опять таки прямо к теме не относится.

В-третьих. Почему же эта процедура, предназначенная как раз для удовлетворения означенной хотелки,
выдает пустую строку?

Вот пример набора записей регистра по одному Акту:
1.
Формирование записей книги продаж 00000000001 от 31.01.2008 12:00:00
31.01.2008 12:00:00
Акт об оказании производственных услуг 00000000001 от 31.01.2008 9:22:15
<null>
288 693,23
2.
Регистрация оплаты от покупателей для НДС 00000000002 от 29.02.2008 12:00:00
07.02.2008 12:00:00
Акт об оказании производственных услуг 00000000001 от 31.01.2008 9:22:15
Платежное поручение входящее 00000000066 от 07.02.2008 12:00:00
288 693,23

Дата СФВ устанавливается не текущая, а дата Акта-основания. Наверное, это правильно,
но из регистра при этом выхватывается только первая запись, и в таблице запроса
получим строку с пустыми значениями даты и номера.

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

Темой статьи является замечательная особенность платформы -
используя механизм подписки на события, можно что-то изменить в алгоритме типовой конфигурации,
не ИЗМЕНЯЯ объектов. Так вот, оказывается, что можно, но с оглядкой. Потому, что
разработчики типовой кофигурации могут разместить первоначальное заполнение
в ПриОткрытии. И каждый раз(!), открывая форму, проверять, не в первый ли раз она открывается.
Я - оглянулся (не собирался, пустая строчка бросилась в глаза).
И ИЗМЕНИЛ модуль формы выданной фактуры:
//+ comment tango
// ЗаполнитьДатуИНомерВходящегоДокумента();
//- comment tango


Не забыть бы это, когда придется обновлять конфу.

См. также

Ценовая власть. Выносим из цикла схему СКД

Механизмы типовых конфигураций Ценообразование, анализ цен Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Россия Абонемент ($m)

Продолжение темы вынесения кусков повторно-используемого кода в запрос. В прошлый раз мы сделали это с вычислением пользовательских формул. Здесь замахнулись на формулы, задаваемые пользователем запросами.

1 стартмани

11.04.2024    499    tango    0    

3

Формула в реквизите. Приквелл к сериалу "Ценовая власть"

Механизмы типовых конфигураций Платформа 1С v8.3 1С:Управление торговлей 11 Россия Абонемент ($m)

Какому-либо элементу списка сопоставляется числовое значение, зависящее от других значений, причем эта зависимость изменяется от элемента к элементу. Так, в справочнике "Валюты" курс какой-либо валюты может быть задан формулой (или даже запросом) от значения другой валюты. А в справочнике "Виды цен" формула определяет расчет цены для товарной позиции, т.е. элементов справочника "Номенклатура", у которых в карточке указан этот вид цены. А в 1С:ERP, например, этот механизм используется в ресурсной спецификации.

10 стартмани

11.04.2024    385    tango    5    

3

Ценовая власть. Второй сезон

Механизмы типовых конфигураций Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Россия Бесплатно (free)

В первом сезоне мы рассмотрели (с точки зрения программиста) внутренний механизм, помещающий цены в регистр "Цены". Из этого регистра цена попадает в исходящие УПД (в продажи). Но эта цена (в прайс-листе) дифференцирована (ценообразована) в разрезах свойств самой номенклатуры. Но стратегия ценообразования, ценовая власть - это в первую очередь о работе с ценами для клиента. И тут вступает в дело второй акт марлезонского, Скидки (наценки) и кешбек.

08.04.2024    624    tango    0    

2

Ценовая власть (УТ 11.5) - 2

Механизмы типовых конфигураций Платформа 1С v8.3 1С:Управление торговлей 11 Бесплатно (free)

В прошлый раз специальной обработкой мы выбрали объекты УТ 1.5, группируя по подсистемам. Оказалось, что состав подсистем не вполне корректно отображает функциональную структуру, но зато мы нашли процедуру, которая, вроде бы, должна содержать в себе всё, что нас интересует. Обновление цен должно ведь следовать выбранной стратегии ценообразования, верно? Иначе что она обновляет...

06.04.2024    445    tango    1    

1

Ценовая власть или Управление ценообразованием (УТ 11.5)

Ценообразование, анализ цен Механизмы типовых конфигураций Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 11 Россия Управленческий учет Абонемент ($m)

Ценовая власть - это способность (возможность) компании изменять в некоторых пределах отпускную цену своего товара (услуг, продукции). Чем в более широких пределах вы можете играть в цену продажи, тем больше этой власти у вас. Если вы не можете управлять отпускной ценой, то это или не ваш бизнес, или не бизнес вовсе. Здесь в рубрике "База знаний аналитика и руководителя проекта" слово проект не ограничено "проектом в 1С". Посмотрим, что для этого есть в УТ 11.5.

1 стартмани

05.04.2024    531    tango    12    

2

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

БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Уже не одна веб-страница исписана знаниями о дополнительных обработках, как создать, как подключить. Есть масса вариантов, как их можно отладить. Я разобрался в кишках работы библиотеки и покажу, как можно расширить возможности дополнительных отчетов, а также покажу удобный способ отладки.

07.02.2024    2604    YA_418728146    11    

43

Регистры накопления в 1С:КА2 и 1С:ERP для расчета НДФЛ, страховых взносов и взаиморасчетов с сотрудниками на январь 2024 года. Краткое описание

Зарплата Механизмы типовых конфигураций Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет НДФЛ Абонемент ($m)

Для расчета зарплаты и соответствующих налогов в конфигурациях 1С:КА2 и 1С:ERP используется 22 регистра накопления, 7 регистров сведений, 1 регистр расчета и бухгалтерские проводки. В таблице приведены названия этих регистров, указаны основные регистраторы и виды движений приход/расход. В описании приводится краткое функциональное назначение регистров в основных зарплатных процессах. Описание регистров родилось из черновиков при написании различных отчетов и обработок при эксплуатации 1С-овских конфигураций и исправлении ошибок по НДФЛ, взаиморасчетов с сотрудниками и прочих. Информация не претендует на полноценное описание работы регистров, скорее это дискуссионный материал. Но, возможно, кому-то пригодится и сократит время при подготовке отчетности за непростой (в плане учета зарплаты) 2023 год. А возможно, кто-то поделится своим опытом.

1 стартмани

10.01.2024    1149    8    2ncom    6    

8

Шаблоны новых объектов 1С для 1С:Бухгалтерии предприятия

Инструментарий разработчика БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Платформа 1С v8.3 1С:Бухгалтерия 3.0 Бесплатно (free)

Используются для создания новых объектов в конфигурации, чтобы не забыть, что нужно сделать. Сделано на примере 1С:Бухгалтерия предприятия, в других конфигурациях могут быть другие, а могут быть и похожие объекты.

28.12.2023    4971    mrXoxot    11    

100
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. tango 540 27.08.08 20:03 Сейчас в теме
спасибки, artbear.
на 30 просмотров 1+ = специфическая статья :)
ну, т.е. не для средних умов :)
+
2. poppy 01.09.08 22:55 Сейчас в теме
Правильно ли я поняла, что ты, tango, предлагаешь в СФ от 31.01 вписать ПП от 7.02?

Не я вляется ли таким образом оформленный документ прямым доказательством нарушения п.3 ст.168 НК?
+
3. tango 540 03.09.08 11:08 Сейчас в теме
ты неправильно поняла, поппи.
я - профессионал, а не любитель.
это значит, что поставленная передо мной задача будет выполнена.
а методологические сопли - для любителей.
только не путать любителей (ну, тех кто тащится от 1сных скриптов) с дилетантами.
+
4. ubertwoborg 03.09.08 13:33 Сейчас в теме
побольше такого пишите, человек
доставляет удовольствие читать людей, которые
а) умеют мыслить правильно
б) умеют эти мысли излагать так, чтобы их было приятно читать

плюсик вам от души
спасибо
+
5. palax 01.11.09 07:26 Сейчас в теме
tango вы прекрасны спору нет! Но вспомните себя когда вы только начинали.....Наверное над вами то же кто нибудь посмеивался...поэтому считаю из уважения к себе вам стоило бы в другом контексте рассматривать подобные случаи...по моему так правильнее. Спасибо и не обижайтесь!
+
6. tango 540 15.05.10 10:56 Сейчас в теме
(5) palax, поверьте, я не минусую перенумераторы :)
но это вы сравнили разработчиков типовых конфигураций 1С со студентами.
+
7. FlexL 28 24.05.10 22:48 Сейчас в теме
интересно ... и пример показал как использовать "подписку на событие" и бяку при которой может несработать ...так держать ;)
+
8. tango 540 04.11.10 13:40 Сейчас в теме
приятно. давно, и не вебинар, и не вообще как-нибудь круто, а плюсики приходят.
не приятно: причина сабжа актуальна.
:!: проги 1с не следуют правилам, декларируемым 1с
+
9. Поручик 4674 11.03.11 23:11 Сейчас в теме
(8) О сколько нам ошибок чудных.. С каждым релизом БП 2. убеждаюсь.
+
10. пользователь 27.09.12 12:55
Сообщение было скрыто модератором.
...
11. zakakvo 03.07.14 11:20 Сейчас в теме
До сих пор актуально, кстати ))) Спасибо, мил человек, помог мне сегодня!
+
12. tango 540 06.07.14 10:13 Сейчас в теме
(11) zakakvo, приходите еще
+
Оставьте свое сообщение