Проведение документа, запись в регистр, вынести в общий модуль. #801004


#0 by ermola
Доброго. Посоветуйте как из процедуры Проведение документа, запись в регистр, вынести в общий модуль. Оптимальный вариант. А то в цикле запихать в структуру а в общем модуме в цикле разбирать как-то не то. Мне кажется Вот для примера простое, сделано кострутором по быстрому.
#1 by Spieluhr
см в типовых
#2 by ermola
В типовой  УПП такого комбайна сделали.
#3 by Лефмихалыч
1. берешь модуль ПроведениеСервер из любой типовой. Целиком. Просто - копе...пасте 2. в модуле документа: 3. В модуле менеджера документа пишешь:
#4 by Лефмихалыч
+ Нюанс про вспомогательные временные таблицы. Для вспомогательных нельзя указывать имя регистра, то есть их надо добавлять в список текстов без второного параметра: ТекстыЗапроса.Добавить(ТекстЗапросаВспомогательнойТаблицы); ПроведениеСервер считает, что, если представление задано, то в представлении имя регистра указано и надо Движения[Представление].Загрузить(Выгрузить)
#5 by Лефмихалыч
По началу это выглядит, конечно, как инопланетянство, но после некоторого периода привыкания ты оцениваешь всю офигенность модуля ПроведениеСервер. Некоторые говорят про сложность отладки. Да, она не тривиальная получается, ибо отлаживать надо не код, а запросы. НО! Если у вас документ двигает 100500 регистров, то отладка становится ни фига не простой даже и при традиционном дедовском подходе. А тут, в отличие от дедовского способа, все данные для проведения в одном запросе получаюся
#6 by Лефмихалыч
Даже вот так: Пример использования Шаблоны кода, которые всё упрощают
#7 by ermola
О чем я и говорил. Вот я до пункта три все понял. А на нем завис. Конкретно так завис.
#8 by Лефмихалыч
задавай вопросы. Что не понятно? Обработка проведения дергает ИнициализироватьДанныеДокумента из модуля менеджера. А ИнициализироватьДанныеДокумента выполняет последовательно все функции, формирующие таблицы движений и складывающие эти таблицы в ДопонительныеСвойства объекта документа. Потом обработка проведения дергает СформироватьДвиженияДокумента, которая берет структуру таблиц из ДополнительныеСвойства объекта и делает из них наборы записей.
#9 by rozer76
а зачем в "ПодготовитьНаборыЗаписейКРегистрацииДвижений" Если НЕ ЭтоНовыйДокумент Тогда Для Каждого Набор Из Объект.Движения Цикл смысл какой тайный ?
#10 by Лефмихалыч
не по адресу вопрос. Это модуль из ЕРП 2.1 с какими-то моими добавками несущественными. Не помню, правда, какими именно, но это - точно не мое.
#11 by rozer76
да в курсе что в типовых новомодных такое, думал вы разобрались почему так
#12 by Лефмихалыч
ну, вот это конкретное, оно на функционал-то не влияет. И не делает вот эту парадигму плохой. Вероятно ПодготовитьНаборыЗаписейКРегистрацииДвижений и СформироватьДвиженияДокумента писали в разное время разные люди, которые руководствовались одними и теми же регламентами, которые говорят формируешь набор движений - включай Записывать=Истина
#13 by ermola
Вот это кусок кода что делает?
#14 by 1dvd
когда за буквы платят, и не такого понапишешь...
#15 by Лефмихалыч
устанавливает в запрос параметры МоментВремени,ЭтоНовый,РежимЗаписи и РежимПроведения, если такие элементы есть в структуре ДополнительныеПараметры без цикла по структуре там было бы дохера ЕслиКогдаТогда. А так - 6 строк и при добавлении таких параметров строк не добавится
#16 by 1dvd
чего? Запрос? Где?
#17 by Лефмихалыч
глаза открой уже. В
#18 by ermola
что в структуру запихивают  параметры МоментВремени,ЭтоНовый,РежимЗаписи и РежимПроведения это я догадался, зачем мне  структуру формировать Это зачем пририсовывать? // сюда можно добавить все, что присунули в обработке проведения
#19 by Лефмихалыч
структура там создается, чтобы обеспечить итерацию по параметрам. Если бы 1С позволяла налету объявлять и инициализировать массивы, как, например, в java, не нужна была бы структура, а было бы как-то так Для каждого Элемент из {"МоментВремени","ЭтоНовый","РежимЗаписи","РежимПроведения"} Цикл у 1С просто другой коллекции, которую можно инициализировать в момент объявления и которая бы поддерживала итерацию, нет
#20 by Лефмихалыч
а! я кажется понял, что вызывает ступор. Этот цикл нужен, чтобы в параметры запроса воткнуть вот эти параметры да, это слегка хтонично, согласен, но я немножечко торопился, когда это делал. На самом деле это не так удобно, как хотелось бы, но просто это первое, что пришло в голову.
#21 by ermola
Нет с этим то как все ясно это параметры загоняем. Вот этот комментарий к чему? // сюда можно добавить все, что присунули в обработке проведения Что присовывать? И зачем? По идее там нужен некий код.
#22 by Лефмихалыч
ну, это как раз  неудобно. В модуле документа у тебя могут появиться какие-то значения, которые ты бы хотел использовать в запросах, генерирующих наборы записей. Такие значения ты в модуле документа добавляешь в ДополнительныеСвойства, а потом в модуле менеджера добавляешь имя элемента структуры ДополнительныеСвойства в объявление это структуры. Можно, конечно, было ограничиться добавлением только в модуле объекта, но мне это понравилось ни чуть не больше, чем то, что в итоге ты видишь.
#23 by Лефмихалыч
мда, красноречие мне сегодня явно отказывает. Короче, эта структура и цикл по ней вот для этого
#24 by ermola
Ага, это необязательно, про запас.
#25 by ermola
Тогда зачем запрос последний, с предыдущий понял, это насобирать данных. И непонятно как в этом алгоритме получить что товара на остатке не хватает?
#26 by Лефмихалыч
который из запросов ты называешь последним? Проверка на остатки - отдельный запрос во временную таблицу, в которой будут только те строки, для которых нет остатка. Добавлять текст запроса для этой таблицы в СписокЗапросов без второго параметра. В обработке проведения можешь, используя менеджер временных таблиц из ДополнительныеСвойства  выбрать из этой таблицы все Для показа пользователю. Опять каша получилась. До компа доберусь - набросаю пример
#27 by Лефмихалыч
+ или еще можно после СформироватьДвиженияДокумента обычным запросом выгрести получившиеся отрицательные остатки и, если они есть, Отказ = Истина. Так, может, даже удобнее, хотя и - отдельный запрос.
#28 by Лефмихалыч
Хотя проще всего отрицательные остатки отдельным запросом перед всей этой кутерьмой в обработке проведения проверить. Запрос по отрицательным остаткам либо пустой вернется и тогда не велики затраты, либо не пустой и тогда запросы для проведения выполнять смысла нет. В последней конфе у меня так и сделано
#29 by Лефмихалыч
здесь я имел в виду следующее (основываясь на примере из : запроса, конечно же, все равно два, что есть, то есть. МОжно и один запрос - добавить вспомогательную таблицу в ТекстыЗапроса с каким-то именем и потом таблицу с этим именем удалять из ДополнительныеСвойства.Таблицы, но это тоже громоздко. Или допилить что-то в ПроведениеСервер.ИницализироватьТаблицыДляДвижений, чтобы она умела такие таблицы опознавать и складывать куда-то отдельноЮ а не просто игнорить, как сейчас. В общем, тут свобода творчества
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С