Материалы курса «Подготовка к Аттестации по Платформе 8.2» — Раздел 1, задача 1.xx «Проекты»
Это третья задача раздела «Оперативный учет» — задача 1.xx «Проекты»
Не обращайте внимания на немного странный номер :) Эта задача не имеет точного соответствия конкретной задаче сборника, но очень близка к аттестационным.
- Изучите материалы задачи.
- Вопросы, возникшие в ходе изучения этих материалов, задавайте в комментариях на текущей странице. Ответы преподавателя и комментарии других участников будут Вам доступны, только если Вы залогинены и у Вас есть доступ в Мастер-группу.
- Общие вопросы по курсу (в т.ч. организационные) задавайте на стартовой странице.
К сожалению, у Вас недостаточно прав для дальнейшего просмотра.
Если Вы приобрели курс, но еще не активировали токен — пожалуйста, активируйте доступ по инструкциям, высланным на Ваш email после покупки.
Если Вы не залогинены на сайте — залогиньтесь, вернитесь на эту страницу и обновите ее.
Если Вы залогинены, у Вас активирован токен доступа, но Вы все равно видите эту запись — напишите нам на e-mail поддержки.
Комментарии / обсуждение (108):
Комментарии закрыты

По условию «необходимо иметь возможность выбрать товар и видеть только те документы…».
По-моему, возможность отбора списка документов по наличию определенного товара должна быть реализована как опция, а не как единственно возможное поведение формы. То есть, если номенклатура в реквизите товар не выбрана , тогда в списке должен отображается весь перечень накладных — это ожидаемое поведение списка. Я сделал так:
В начале всё так же — Произвольный запрос, Основная таблица- Документ.РасходнаяНакладная.
Далее в обработке события изменения поля «Товар» меняю текст запроса.
Доброго дня, Михаил!
Как было анонсировано ранее, с 1 февраля поддержка по курсу подготовки к Аттестации 1С:Специалист по платформе 8.2 прекращена с 1 февраля 2017 г — http://курсы-по-1с.рф/news/2017-01-30-end-of-support-devatt/
Здравствуйте!
Вопрос по отбору документов РасходнаяНакладная по выбранному товару
Все-таки непонятно, решение с критерием отбора предпочтительно всегда, или же его следует использовать только в случае отбора по реквизитам нескольких документов?
Не будет ли в частном случае из данной задачи (1 документ) решение с критерием отбора менее эффективным в случае отсутствия отбора (товар не выбран), т.к. в запросе всегда присутствует соединение двух таблиц (даже если в этом и нет необходимости)?
:
ИЗ
Документ.РасходнаяНакладная КАК КО
ЛЕВОЕ СОЕДИНЕНИЕ КритерийОтбора.ПоНоменклатуре(&Номенклатура) КАК Док
ПО Док.Ссылка = КО.Ссылка
ГДЕ
(Док.Ссылка = КО.Ссылка
ИЛИ &Номенклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))
Без критерия отбора у нас нет индекса по реквизитам табличной части.
Здравствуйте!
Проведение расходной накладной, запрос:
Запрос.Текст = «ВЫБРАТЬ
| -ВзаиморасчетыОстатки.СуммаОстаток КАК Аванс
|ИЗ
| РегистрНакопления.Взаиморасчеты.Остатки(
| &МоментВремени,
| (Контрагент, Проект) В
| (ВЫБРАТЬ
| &Контрагент,
| &Аванс)) КАК ВзаиморасчетыОстатки
|ГДЕ
| ВзаиморасчетыОстатки.СуммаОстаток < 0";
Подскажите, ведь это условие
| (Контрагент, Проект) В
| (ВЫБРАТЬ
| &Контрагент,
| &Аванс)
можно было написать проще:
Контрагент = &Контрагент И Проект = &Аванс
Зачем используем такую конструкцию? Она имеет какие-то преимущества перед простым условием?
Тут стоит понять цель условия: найти сочетания в условии или наложить два условия последовательно.
Поясните, пожалуйста, я не вижу разницы: ведь в данном случае в таблице в условии (в операторе «В») будет всегда единственная строка, т.к. она формируется из параметров запроса, поэтому условие «В (ВЫБРАТЬ &Контрагент, &Аванс)» в данном случае даст тот же результат, что и (Контрагент = &Контрагент И Проект = &Аванс). Разве не так? А в таком случае какой смысл формировать подзапрос, если можно просто задать условие?
В данном случае разницы никакой.
Здравствуйте!
Хотелось бы, чтобы вы прокомментировали следующий момент:
Модуль документа РасходнаяНакладная, Обработка проведения:
Движения.Взаиморасчеты.Записывать = Истина;
Движение = Движения.Взаиморасчеты.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Контрагент = Контрагент;
Движение.Проект = Проект;
Движение.Сумма = Сумма;
Движения.Записать();
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить(«РегистрНакопления.Взаиморасчеты»);
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
ЭлементБлокировки.УстановитьЗначение(«Контрагент», Контрагент);
ЭлементБлокировки.УстановитьЗначение(«Проект», Справочники.Проекты.Аванс);
Блокировка.Заблокировать();
Запрос = Новый Запрос;
Запрос.Текст = «ВЫБРАТЬ
| -ВзаиморасчетыОстатки.СуммаОстаток КАК Аванс
|ИЗ
| РегистрНакопления.Взаиморасчеты.Остатки(
| &МоментВремени,
| (Контрагент, Проект) В
| (ВЫБРАТЬ
| &Контрагент,
| &Аванс)) КАК ВзаиморасчетыОстатки
|ГДЕ
| ВзаиморасчетыОстатки.СуммаОстаток < 0";
Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
Запрос.УстановитьПараметр("Контрагент", Контрагент);
Запрос.УстановитьПараметр("Аванс", Справочники.Проекты.Аванс);
Вопрос такой: мы сначала сделали приход по регистру, и только потом установили блокировку. То есть возможна ситуация, когда другой процесс считает данные, записанные до блокировки, на их основе сделает анализ, а мы их потом изменим. Может быть, корректнее устанавливать блокировку в самом начале, до записи в регистр?
Вопрос несколько шире рамок данной задачи — т.е. как правильнее поступать в таких ситуациях в реальных проектах?
Другой процесс не сможет ничего прочитать с новыми данными, транзакция еще не завершена. А, после установки блокировки, и прочитать со старыми.
Насколько помню, в MS SQL SERVER видимость данных в транзакции прямая, т.е. данные, изменяемые в транзакции становятся видны всем до её завершения. Или я ошибаюсь?
1. Я имел в виду транзакции платформы, а не sql сервера.
2. Про MS SQL ничего сказать не могу.
3. Данные в транзакции проведения документа невиднны никому, кроме сеанса в котором она совершается.
Добрый день, Павел!
Не понимаю одной вещи: насколько я знаю , при запросе к виртуальной таблице регистра остатков, и получении только ресурса остатка, если остаток равен 0 (я не применял выражение isnull), в запросе не должно быть записей, т.е. РезультатЗапроса.Пустой() = Истина. Но при просмотре результата запись есть, где остаток = 0, и соответственно РезультатЗапроса.Пустой() = Ложь
Почему так происходит?
Возможно прменили условие, которое неявно привело к левому соединению, и как следствие появилась строка с нулем.
Добрый день, Павел!
Объясните, пожалуйста, почему нужно создавать Последовательности в этой задаче? И как определить из текста задачи необходимость создания последовательностей, если это явно не указано? Благодарю.
Последовательности нужно создавать почти во всех задачах, так как при непоследовательном вводе документов поплывет и себестоимость и остатки.
Можно ли на экзамене и в жизни для корректировки регистров накопления использовать документ сделанный по принципу бух операции ?
А зачем? Я ни одной задачи не знаю где это требуется.
Здравствуйте Павел .При решении задачи 1.31 возник вопрос в условии»Раз в месяц формируется регламентный документ» ,то есть я так понял процесс проведения нужно контролировать.Это можно реализовать без запроса?
Зачем?
Можно, а, зачем?
Здравствуйте Павел. На вашем форуме в разделе «Результаты сдачи экзаменов на спеца по Платформе 8.2» на 163 странице(последней странице в разделе) форумчанин выложил такой комментарий после успешной сдачи на 4.
«Правильная установка момента времени в качестве параметра запроса при проведении документа. Если документ по вашему решению может проводиться оперативно, то установку параметра для запроса оптимальнее делать так:
Запрос.УстановитьПараметр(«МоментВремени», ?(РежимПроведения=РежимПроведенияДокумента.Оперативный,
Неопределено, МоментВремени()));»
____
Дак вот. Оказалось, что такое решение не приветствуется. остатки надо брать ОДНОЗНАЧНО на момент времени. Смысл в том, что если кто-то ввел документ будущей датой, то остатки при оперативном проведении рассчитаются неверно. Ошибка не считается критичной, но это ошибка.»
Можете как то прокомментировать это, и ответить на вопрос, какое теперь правильное значение надо добавлять в параметр «МоментВремени» .Заранее благодарю за ответ.
На мой субъективный взгляд, точку расчета итогов нужно устанавливать всегда.
А Ваш комментарий «если кто-то ввел документ будущей датой, то остатки при оперативном проведении рассчитаются неверно.» может ввести в заблуждение, так как провести оперативно документ будущей датой невозможно.
Добрый День!!
Вопрос по задаче Проекты.
В расходной накладной мы сначала пишем движения (Контрагент,Проект)
Потом читаем остатки по авансам (Контрагент,Проект=Аванс) и конечно ставим блокировку
а почему БлокироватьДляИзменения=Истина мы упустили ведь для регистра включен режим разделения итогов
Получается, что в таблице итогов может быть 2 строки по Контрагент,Проект=Аванс
в результате можем получить не правильный остаток. (из-за разделителя)
С Уважением!!!
Алексей
Блокировки не демонстрируются в задачах. Считается, что 1, 2 раза вполне хватит. Блокировки нужны, но они элементарны.
Добрый День!!!
Павел что-то я вас не пойму. Который раз я получаю уклончивый ответ. Наверное тема связанная с блокировками это тайна. :-)))
Вы в видео по этой задаче решили блокировки показать. Я не нашел у вас БлокироватьДляИзменения=Истина
поэтому и уточнил. (это ошибка или просто упущение, мы же учимся на этих алгоритмах решать задачи)
1.Наверное я просто не понял назначения мастер группы.
2.Если все так элементарно то проще подсказать.
3.Как вы думаете если бы у меня не было вопросов я бы купил этот курс ?
4.Я прекрасно понимаю, что курс для подготовленных так я и не спрашиваю что это такое, я спрашиваю почему нет.
Извиняюсь за резкий тон
можете не отвечать (пойду штудировать видео уроки)
С Уважением!!!
Алексей
Здравствуйте, Алексей.
Я не стараюсь уклончиво отвечать, это не целесообразно, и никому не надо.
Блокировки рассматриваются в нескольких видео, и мне кажется, довольно подробно, для задач сертификации. Повторять одно и то же в разных видео, мне показалось лишним.
Блокировки нужны в каждой задаче, в обусловленном проведении, перед чтением данных из регистра.
Вот тут http://курсы-по-1с.рф/articles/статьи-по-платформе-контроль-остатка/ есть подробная статья на эту тему.
Будут вопросы — пишите. Извините, если мои ответы показались отпиской, такой цели я не преследовал.
И снова здравствуйте.
Задача 1.47
В ней необходимо реализовать возврат проданного товара документом Приходная на основании док Расходная.
Вопрос 1.
Из условия:
…
Себестоимость принятого
товара считается как средняя списанная себестоимость этого товара из документа
«Расходная накладная», по которой происходит возврат.
…
Я так понимаю, что самый простой способ увидеть себестоимость по регистратору это просто обратиться к реальной таблице. Это нормально при данном условии обращаться к реальной таблице?
Вопрос 2
Необходимо построить отчет который называется «Закупки» за период, я так понимаю нужны только закупки без возвратов. Мое решение добавить реквизит в регистр ОстаткиНоменклатуры «ЭтоЗакупка»(булево), и делать отбор с его использованием. Нормальное решение?
Может вопросы и не значительные, но хочется ясности.
Здравствуйте. Я не решал все задачи из сборника, так что интерпретировать текст задач которые я не решал я не буду.
1. Обращаться к реальной таблице в сертификационных задачах — это плохо.
2. Не нормально.
Добрый день.
Вопрос 1.
По вопросу документа который делает доп перемещение(Расходная) хочется понять какую ему дату присваивать -1 сек от Расходной? те документ вводим «задним числом»? Или Как?
Вопрос 2
Видел на Вашем форуме что добавляют в регистр Продажи ресурс Себестоимость и тогда отчет «Продажи с себестоимостью» строится без соединения с рн Себестоимость, но если нет других документов кроме Расходной то по мне это избыточность. С другой стороны если есть док Перемещение то он «оттягивает» на себя часть часть себестоимости. Выходит что для отчета Продажи с себестоимостью надо либо в запросе проверять тип документа либо добавлять доп ресурс Себестоимость. Как оно правильней?
Вопрос 3. Организационный
Читал что раньше на экзамене были заранее подготовленные билеты(одни и те же) части заданий из сборника там не было, а сейчас билет создается динамически и попасться может любой вопрос.
Может меня ввели в заблуждение? В Вашем форуме тема об этом есть, но большая. Как дела то обстоят сейчас?
Приветствую.
1. Исходя из текста задачи, я не думаю, что нужно управлять временем расходной. Когда введут, тогда и введут. Последовательности потом разрулят правильное погашение авансов.
2. Не всякое списание товара есть продажа. Продажа, со всеми данными, должна хранится в отдельном регистре.
3. 1С декларирует, что билеты компануются случайным образом, но по факту, на сегодня, есть ограниченное количество фиксированных билетов.
День добрый. Читал что Вы писали по поводу ответов на все задачи, просто условие совсем не понятно. Хотя бы пару слов что к чему.
Задача 1.11.
Организация занимается продажей экзотических товаров. Принята
следующая схема работы: в момент оформления заказа на товар (документ «Заказ
покупателя») происходит его (товара) резервирование, причем реально этого
товара в это время может и не быть. Непосредственно отгрузка товара по заказу
со склада и снятие резерва оформляется документом «Расходная накладная».
Следует учесть, что отгрузка товаров по одному заказу может производиться с
разных складов, но в документе «Расходная накладная» склад может быть только
один.
Необходимо предоставить пользователю возможность указать в заказе
количество резервируемого товара. При этом следует контролировать количество
резерва, чтобы оно не превышало количество заказанного товара.
В момент проведения «Расходной накладной» производится проверка
наличия свободного товара (товар на всех складах минус резерв по всем
остальным заказам). В том случае, если свободного товара достаточно для
отгрузки, и на выбранном складе есть необходимое количество, то документ
проводится, в противном случае выдается сообщение о недостаче свободного
товара или товара на складе, и документ не проводится.
Отгрузка может происходить только на основании заказа, накладная, не
относящаяся ни к одному заказу, не может быть введена. Предполагается, что
заказ будет отгружен полностью.
Себестоимость товара рассчитывается как средняя по складу.
Например:
Если на складе есть 10 штук авторских ручек и выписан заказ на 7 ручек,
то по этому заказу можно отгрузить товар, поскольку есть свободное количество
и на складе товара хватает.
Если те же 10 ручек находятся на разных складах – 8 и 2, то тогда с
первого склада товар отгрузить можно, а со второго нет.
Если 10 ручек находятся на одном складе, но заказов выписано 2, на 7 и 8
штук. В этом случае свободного товара недостаточно и отгрузить его нельзя.
Судя по коментам в инете не я один не понял сути задачи до конца.
Как я понял что надо сделать.
1. документы
1.1 ЗаказПокупателя.
тч -> Номенклатура
количество
1.2 Засходная накладная. реквизиты
-> Склад
тч -> Номенклатура
количество
ЗаказПокупателя(10 ручек находятся на одном складе, но заказов выписано 2, на 7 и 8 те заказ в таблице)
1.3 ПриходнаяНакладная
-> Склад.
тч -> Номенклатура
количество.
2. Регистры
2.1 ОстаткиТоваров.
Номенклатура
Склад
—
Количество
Стоимость
2.2 Резерв.
Номенклатура
ЗаказПокупателя
—
Количество
3. Реализация
————————————————————————————
3.1 Резервируем столько сколько хотим, увеличивая рн Резерв.
3.2 Реализуем не больше остаток(склад) — резерв по заказам. Расчитываем себестоимость. Уменьшаем рн Резерв и рн ОстаткиТоваров.
Вопрос 1
в момент оформления заказа на товар (документ «Заказ
покупателя») происходит его (товара) резервирование, причем реально этого
товара в это время может и не быть.
…
Необходимо предоставить пользователю возможность указать в заказе
количество резервируемого товара. При этом следует контролировать количество
резерва, чтобы оно не превышало количество заказанного товара.
…
Разве заказ и резерв не одно и тоже?
Если «причем реально этого товара в это время может и не быть.» то резервируем сколько хотим?
Вопрос 2
Не понятно нужен ли резерв по складу или резерв делается по всем товарам на складах.
если по всем то будет так: на Складе 1 5шт, на Складе 2 10шт.
Зарезервировано Заказ1 3шт, Зарезервировано Заказ2 10шт, Заказ3 3шт.
со склада 2 сразу могу списать Заказ1 и Заказ3, а со склада 1 только Заказ1 или Заказ3
Может Вы отвечали на подобные вопросы, можно как то искать по сайту?
Это лучше уточнить у экзаменатора, текст задачи мутный, на сертификации не встречается.
На мой взгляд резерв — это резерв, а заказ — это заказ.
Добрый день.
Хочу узнать Ваше мнение по задачи 1.8 тк подобного в блоке оперативного учета не было.
Компания занимается оптовой торговлей. Поступление товаров отражается
документом «Приходная накладная», продажа — «Расходная накладная». Закупка
товара происходит только в отдел закупок, а непосредственно продажа
происходит в торговых точках.
Перемещение товара происходит по трансфертной цене и также
отражается документом «Расходная накладная», при этом цена продажи не
указывается. Товар может перемещаться только из отдела закупок в торговую
точку. Трансфертная цена определяется как себестоимость перемещаемого
товара, увеличенная на процент наценки, задаваемый для каждой торговой точки.
При продаже товара необходимо в первую очередь контролировать хватает
ли товара в данной торговой точке. Если нет – необходимо программно создать
документ по перемещению недостающего товара из отдела закупок. В том случае,
когда и в отделе закупок товара не хватает, документ для перемещения не
создается, а продажа не производится (документ не проводится).
Себестоимость товаров рассчитывается как средняя по отделу.
Не понятно имено с доп документом.
1.На какуюж дату делать доп перемещение, и какая дата должна быть у текущего документа после этого?(в инете предлагают -1 сек от даты текущего)
2. Как снимать блокировку, ведь я должен заблокировать данные?
3. Где и как проверять нехватку товара на главном складе. Оперативным методом не проверить тк док уже должен быть записан. Хотя если делать это в ОбработкаПроведения(а это транзакция) то по идеи при откате и доп документ тоже не запишится, с другой стороны это уже вложенная транзакция.
Что я сделал.
1. два варианта работы Расходной. 1й это просто перемещение на другой склад(с этим ок). 2й это продажа: заполняю регистр(с себестоимостью) и одновременно формирую таблицу с нехваткой.
2. если есть нехватка то проверяю запросом остаток по отделу закупок(-1 сек от даты текущего) и если могу сделать перемещение то создаю документ, иначе Отказ.
Я не решал эту задачу.
Мое мнение, количественный учет ведется отдельно. При проведении расходной определяется хватает ли товара, если нет, то создается документ перемещения, в котором так же ведется учет количества. Так как транзакции вложенные, то отмена транзакции при проведении перемещения автоматом откатит транзакцию расходной.
После количества начинается свистопляска с расчетом себестоимости.
Вопрос 1
В задаче 1.3 сказано
В документе «Расходная накладная», а табличной части для каждого
товара пользователь указывает партию, которую необходимо списать. В том
случае, если товара по указанной партии не хватает, документ не проводится и
выводится соответствующее сообщение о нехватке.
Я понимаю так, что может быть несколько строк с одной номенклатурой но разными партиями.
В 1.4
В первую
очередь должен списываться товар из указанной в табличной части партии. В
случае если товара по выбранной партии не хватает (или нет), то товар
списывается в соответствии с текущей учетной политикой.
Тут не очень понятно. Если в тч у товара партий больше 1й то просто запросом это не получить(простым запросом точно). те надо что бы в тч была только одна партия одной номенклатуры?
Спрашиваю потому, что неопределенное условие может просто усложнить задачу.
Вопрос 2
Тоже теоретически вопрос.
1.4
На следующий год метод списания может смениться.
1.5
Учетная политика может
меняться каждый день, ее изменение фиксируется соответствующим документом.
Метод списания правильно хранить в документе или просто получать на дату?
Здравствуйте.
Я не прорешивал все задачи, их 200.
1. Эти задачи на сертификации не встречаются, и да, либо будет очень сложный запрос, либо будет запрос в цикле, что плохо.
2. Достаточно хранить в РС и использовать последовательность.
Добрый день!
Можете посоветовать, что почитать о построении объектов учета и тп, те остатков товаров, взаиморасчетам и пр. Ковырять типовые конфы проблемно из-за их «универсальности».
Вопросы:
1. Почему не создать два регистра Авансы и Взаиморасчеты, по количеству записей будет тоже самое, но будет наглядней?
2. Создали Вы последовательность, дальше что, ее надо как то использовать(я про экзамен). Требуется ли создавать на экзамене последовательности?
3. Я делал взаиморасчеты получая остаток по Авансу и по Проектам а потом «разбрасывал» куда надо деньги, а Вы делали частично через новый метод «контроля остатка»(с начало записали, потом прочитали). Без разницы, что использовать или как?
4. Про Аванс последним. Проверяю является ли измерение авансом и если да то ставлю 1, иначе 0, сортирую. Для отчета «Ведомость по взаиморасчетам» он в конце, а как быть с «Состоянием взаиморасчетов», это кросс таблица, не понятно куда это поле сортировки вставить?
Приветствую!
1. Показатель то один — «Взаиморасчеты», в плюсе — хорошо, в минусе — отлично.
2. Нужно. Автоматизировать восстановление последовательностей не нужно.
3. Если в задаче можно использовать методику оперативного проведения — ее нужно использовать, иначе это будет расценено как ошибка.
4. В СКД, в свойствах поля, есть «Выражение упорядочивания», там можно указать условие сортировки, при выводе данных указать сортировку по этому полю.
Добрый день!
Вопрос по задаче 1.47 (на фото 1)
1.Правильно-ли будет организовать структуру регистров как на фото2?
2.При проведении Приходной по возврату кусок кода на фото2 верен или надо использовать запрос по физической таблице с отбором по регистратору?
3. Во втором отчете следует ли учитывать возвраты или он строится просто по таблице остатков, а также по тексту задания себестоимость в разрезе складов не ведется, а как отразить её в этом отчете не совсем понятно…?
Спасибо.
Здравствуйте.
Дабы не создавать прецедент, замечу, что я не разбирал все задачи из сборника, и собственно не собираюсь это делать. Предлагаю взаимодействие решить следующим образом: Без фото и кусков кода, сформулируйте вопрос предельно понятно, я на него отвечу.
Материалов курса должно, на наш взгляд, хватить на ответы по большинству вопросов. В поддержке курса закладывается время на ответы именно по материалам курса, а не по всему сборнику.
Теперь по вопросам:
1. Не знаю.
2. Обращение к физической таблице в экзаменационных задачах не нужно.
3. Не знаю, задачу не разбирал.
ОК.
Решение и обсуждение этой задачи и многих других нашел.
Спасибо добрым людям! :)
Добрый день!
По задаче 1.44
1. Будет ли правильным вынести показатели из второго отчета (Отгрузки товаров) такие как: ОтгруженоФактически, ПотериВПределахНорм и ПотериСверхНорм в ресурсы оборотного регистра Отгрузки?
2. Должен ли документ РасходнаяНакладная делать движения по Взаиморасчетам для построения первого отчета или всё же движения по взаиморасчетам делает АктПриёмаПередачи т.к. в нем уже имеются достоверные сведения по фактической задолженности, но в этом случае при развороте по регистратору вместо РасходнойНакладной будет выводится АктПриемаПередачи (на фото)?
Здравствуйте. Я эту задачу не решал. Мысли по тексту:
1. Мне кажется это правильным.
2. Там нет разворота по регистратору, выводятся остатки с оборотами, документ движения — это партия в разрезе которой накапливаются и списываются долги (это разрез остатка )
Добрый день! Задача из сборника 1.43
Вопрос про взаиморасчеты.
Кусок текста: «Оплата от покупателя отражается документом «Приход денег». На каждый платеж заводится документ, т.е. плательщик и сумма платежа являются реквизитами шапки. Платеж может быть как авансом, так и по факту поставки, причем в момент поступления денежных средств эта информация недоступной и все средства учитываются общей суммой.
При проведении документа «Расходная накладная» необходимо проверять наличие оплат от контрагента. Если на момент проведения сумма предшествующих оплат превышает сумму предыдущих отгрузок, то сумма превышения зачитывается как аванс. Сумма аванса определяется как минимальная между суммой накладной и суммой оставшихся оплат».
Вопрос №1: в данном случае идут простые движения расход/приход документов Приход денег/Расходная накладная по взаиморасчетам по измерению Контрагент на сумму документов или надо всё-таки как-то выделять аванс?
И орг. вопрос №2: на сайте можно вставлять файл с фото или только перепечатывать задачу, что очень не удобно?
1. Там в задаче явно указаны авансы и в тексте и в отчете.
2. Обратитесь к саппорту.
Отчет можно построить по таблице ВзаиморасчетыОстаткиИОбороты:
ВЫБРАТЬ
Взаиморасчеты.Контрагент,
ВЫБОР
КОГДА Взаиморасчеты.СуммаКонечныйОстаток < 0
ТОГДА Взаиморасчеты.СуммаРасход + Взаиморасчеты.СуммаКонечныйОстаток
ИНАЧЕ Взаиморасчеты.СуммаРасход
КОНЕЦ КАК СуммаОплат,
Взаиморасчеты.СуммаНачальныйОстаток, //добавлен для корректного получения остатков
ВЫБОР
КОГДА Взаиморасчеты.СуммаКонечныйОстаток < 0
ТОГДА -Взаиморасчеты.СуммаКонечныйОстаток
ИНАЧЕ 0
КОНЕЦ КАК Аванс
ИЗ
РегистрНакопления.Взаиморасчеты.ОстаткиИОбороты КАК Взаиморасчеты
или надо добавить ресурс Аванс и строить отчет по таблице остатков?
Что в данном случае более производительней???
Спасибо.
Отчет по оплатам строится за период, это обороты. Обороты надо разделить на обороты по погашению долга и авансы.
По поводу последовательности с измерением Контрагент, пример обработки можно где-нибудь увидеть?
Код ниже верен?
&НаСервереБезКонтекста
Процедура ВосстановитьПоследовательностьНаСервере()
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПоследовательностьВзаиморасчетыГраницы.Регистратор.Контрагент КАК Контрагент
|ИЗ
| Последовательность.Последовательность1.Границы КАК ПоследовательностьВзаиморасчетыГраницы
| «;
РезультатЗапроса = Запрос.Выполнить();
ВыборкаКонтрагент = РезультатЗапроса.Выбрать();
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить(«Контрагент»);
Пока ВыборкаКонтрагент.Следующий() Цикл
СтрокаТЗ = ТЗ.Добавить();
СтрокаТЗ.Контрагент = ВыборкаКонтрагент.Контрагент;
КонецЦикла;
Последовательность = Последовательности.Последовательность1;
Последовательность.Восстановить( ‘00010101’,ТЗ);
КонецПроцедуры
Последовательности.Последовательность1.Восстановить();
Все.
Здравствуйте, Алексей!
К комментарию Вы можете добавить файлы следующих форматов: изображение (JPG, PNG, GIF) и другие файлы (txt, zip, rar, doc, docx, xls, xlsx, ppt, pptx).
1. Зачем нужна последовательность, если об этом нет ни слова в задаче? Если подходить к вопросу по принципу реальной задачи, тогда надо выключать автоматическое перемещение границы последовательности и реализовывать механизм самостоятельно, иначе ни о какой параллельности не может быть и речи.
Я периодически теряю логическую связь между разными разборами задач. Где-то вы убеждаете, что не надо усложнять и делать того, о чем не просят. Потом приводите пример такой штуки. Подобная реализация, конечно, не займет много времени, но может сыграть злую шутку в момент «а надо ли это делать?».
2. 2 регистра или 1. Цитата из списка распространенных ошибок на экзамене: «Наличие отрицательных значений ресурсов регистра допустимо, только если об этом явно сказано в задании или следует из логики учетной схемы, не противоречащей ситуации, возникающей в реальной практике ведения учета».
У нас аванс болтается с минусом. Да, это не противоречиво в данной ситуации, но также и не разрешено явно.
В одной из предыдущих задач взаиморасчеты были поделены на 2 регистра, хотя можно было хранить в одном, играясь со знаком. Т.е. опять некое отсутствие единой схемы решения схожих проблем. Соответственно, допускается 2 варианта? Как будет правильнее относительно экзамена?
3. Зачем в данной задаче оперативное проведение? Что оно нам дает, если мы все равно записываем дважды набор?
1. Есть общие требования к экзамену. Там сказано, что любое решение должно корректно работать при вводе документов задним числом. Я в решениях стараюсь показать разные варианты решений. В реальности — рекомендую сначала сделать основу, а потом плюшки.
2. 1 регистр = 1 показатель. Потому аванс в том же регистре. Отрицательное значение — это тоже значение. Считать, что в регистре не может быть отрицательных сумм равно тому, что в регистре не может быть суммы меньше чем 42.
3. Оно дает нам возможность продемонстрировать владение приемом оперативного проведения.
1. Значит последовательность должна быть во всех задачах (или почти во всех), при этом мы считаем, что проблема параллельности при автоматическом переносе границы нас не волнует. Так?
2. Вывод был сделан исключительно из списка распространенных ошибок. Могут ли за решением подобной задачи через 2 регистра снизить балл? Или такое все же допустимо, например, если целью стояло разнести логику на две ветки: получение остатков авансов не затрагивает непосредственно взаиморасчеты.
3. В таком случае имеет смысл плодить дополнительный регистр, если по логике оперативное проведение невозможно, только ради того, чтоб продемонстрировать понимание данной методики?
Могут ли снизить балл за по факту ненужный регистр, созданный только ради демонстрации?
1. Не помешает. Если время остается. Как правило на это не смотрят, если нет четкого условия.
2. Еще раз — 1 показатель = 1 регистр. У нас 1 показатель: сколько нам должен клиент. Плюс = Должен, Минус = Мы ему должны.
3. Сейчас не могу посмотреть свое решение, но по логике там отдельный регистр не нужен, оперативная методика укладывается в схему с одним регистром.
Здравствуйте, Павел. При решении этой задачи в обработке проведения для документа «Расходная накладная» вы использовали след. алгоритм: 1) Сначала записывали увеличение долга по проекту, потом проверяли а нет ли авансов по этому контрагенту и если они есть: 2) зачитывали аванс, 3) Корректировали корректировали 1 движение, причем добавляя новую запись с противоположным знаком. Но по сути получается, что 1 то этап мы можем пропустить, т.о. вместо 3 записей в регистр Взаиморасчетов (если конечно у нас аванс есть) попадут всего 2. Т.о. решение будет оптимальней, или я что-то не учел?
Также в документе «Поступление денег» в обработке проведения конкретно для условия, где у нас проект не пустой, отсутствует условие, что аванс будет полностью зачтен. Поясню на примере: Незачтенный аванс у клиента 1000 руб, приходит документ «Поступление денег» на сумму 500 руб. Как там отработает алгоритм: 1) Произойдет запись по нужному нам проекту. 2) Мы будет искать аванс и найдем что незачтенный аванс у нас 1000 руб и зачтем по нему 500 руб. 3) Перезапишем ресурс «Сумма» для записи выполнявшейся на 1 этапе и в результате сумма эта будет равно 0! Т.е. получается здесь будет добавлена опять же лишняя запись это же будет характерно и для документа расходная накладная когда у нас выполняться будет решение с 3 этапами про которые я написал выше.
Не могу сравнить эффективность решений. При анализе учитывайте, что время — это тоже важный фактор на сертификации.
Павел, добрый день! Подскажите, будет ли правильным решение размещения данных по авансам после всех проектов при помощи настройки отчета (Настройки — Сортировка) по свойству «предопределенный» справочника Проекты
Можно и так.
И всё-таки, имеет ли право на существование решение с двумя регистрами Взаиморасчеты и Авансы? Именно так решил задачу перед просмотром Вашего варианта. Возможно, сработал шаблон бухучета, где авансы и взаиморасчеты ведутся на разных субсчетах (по сути, на разных регистрах). Решение ложится очень просто. Отчеты строятся объединением двух запросов. Сортировка проектов по вычисляемому полю 0 или 1, если аванс. Могут ли снизить оценку за неправильное проектирование регистров?
Мне кажется, что такое решение — это неправильно.
Павел, подскажите, в документе «приход денег» в условии, когда проект не указан, зачем при оперативном проведении был записан пустой набор движений? он даже еще не был сформирован
В документе «расходнаяНакладная» почему используется просто моментВремени() и не используется граница.Включая?
Разъясните, пожалуйста, эти моменты
Все тут: http://1c.chistov.pro/2013/07/blog-post_25.html
А что подразумевается под обработкой дублей строк в документах в требованиях к сдаче? Не давать пользователю в документе вводить дубли или же достаточно сгруппировать ТЧ при формировании движений и получить движения без дублей?
Необходимо корректно учитывать то, что пользователь может ввести несколько одинаковых строк в документе. Как правило группировка спасает.
Насчет сортировки — добавить у справочника «Проекты» булевский реквизит «Является авансом», установить для аванса и потом убрать доступность реквизита на форме. Все новые элементы будут создаваться со снятым признаком. Далее в отчете сортировать элементы сначала по этому признаку по убыванию, потом по алфавиту по возрастанию. В результате будет что-то типа этого:
Проект 1 (Является авансом = Ложь)
Проект 2 (Является авансом = Ложь)
Аванс (Является авансом = Истина)
Пустое значение (спр Проекты) тоже можно использовать как признак аванса и не мусорить в базе лишней колонкой.
1) Есть ли разница между условиями в параметрах виртуальной таблицы остатков регистра накопления:
1.(Контрагент, Проект) В (ВЫБРАТЬ (&Контрагент, &Проект))
2.(Контрагент = &Контрагент) И (Проект = Проект&)
Одно и тоже? Или какое-то из них оптимальнее?
2) Напомню как мы делали в задаче (я тоже так делал):
Есть РН Взаиморасчеты. В нем — задолженность контрагентов перед нами в разрезе Контрагента и Проекта.
Приход — увеличивается долг контрагента, Расход — долг контрагента гасится (то есть остаток по проектам всегда будет больше нуля или 0).
С авансом тоже самое (так как это предопределенный элемент справочника Проекты).
Приход — аванс гасится, уменьшается, Расход — аванс увеличивается (то есть остаток по авансу всегда будет меньше нуля или 0).
Заметил, что у нас возникли из-за этого некоторые сложности:
1. Когда получали остатки по авансам, нужно было переворачивать знак (мелочь конечно).
2. Но вот второй отчет мы не совсем правильно сформировали, Вы должно быть не обратили внимания (не соответствует приведенному в задании):
2.1 По авансам также надо перевернуть знак, как в первом отчете (это опять таки мелочь).
2.2 По авансу меняется смысл колонок в отчете «Оплата» и «Отгрузка».
Поясню:
В отчете должны быть колонки «Нач. остаток», «Отгрузка», «Оплата», «Конечный остаток».
Для обычного проекта это соответствует следующим полям виртуальной таблицы:
«Нач. остаток», «Приход» (это увеличение долга), «Расход» (погашение долга), «Конечный остаток».
Но для аванса по другому:
«минус Нач. остаток», «Расход» (это увеличение суммы аванса), «Приход» (уменьшение суммы аванса), «минус Конечный остаток».
(для 1 и 4 колонки надо менять знак, 2 и 3 колонка меняются местами).
В общем там получается надо делать через объединение таблиц оборотов и остатков с разной последовательностью колонок, а не просто использовать одну
таблицу.
Когда сам решал, мозг чуть не сломал, чтоб все это соотнести (напомню, сам делал также как Вы, вашего решения еще тогда не видел) и времени очень
много на это потратил.
Получается проще бы было для реализации нам по авансам делать наоборот? (тогда бы было намного проще реализовать)
Но тогда бы терялся в какой-то степени смысл регистра накопления (что отрицательный остаток — контрагент переплатил нам, а положительный — у него есть
долг), может к такой реализации придраться преподаватель?
Насчет «не обратили внимания» я поторопился, Вы в самом конце говорите, о том, что нужно немного подкорректировать отчет, но вопрос по поводу того, как все таки лучше реализовывать остается… :-)
1. Условие «В» — это одно условие, при установке условия с «И» мы в запрос передаем 2 условия. Первый вариант быстрее.
2. Регистр у нас хранит показатель долга контрагента и знак там как раз показывает кому кто должен. Я думаю что концепция моего решения правильная. Ну а придраться могут ко всему, как правило докапываются если есть принципиальные ошибки.
Павел, добрый вечер!
Итак, раздел по оперативному учеты рассмотрен))) Спасибо Вам! :-)
Как считаете, что лучше сейчас: дальше изучать курс (сначала как Вы советовали решать задачи самому, потом смотреть решение) или же сейчас начать решать все задачи по оперативному учету, которые встречаются на экзамене (знаю, что не все из сборника)?
Приветствую.
Возьмите пару задач из первого раздела и попробуйте их решить. Если не вызовет трудностей, двигайтесь дальше.
в отчете Ведомость по взаиморасчетам за период, там где пустые строчки — имеется ввиду группировка по контрагентам?
Да, таблица немного поползла при форматировании.
Добрый день, Павел.
Не понятно почему для авансов нужно обязательно использовать предопределенное значение спр. Проекты? Почему для этих целей нельзя использовать пустую ссылку этого же справочника? По сути же результат будет одинаковый, что обращение к предопределенному элементу —
Справочник.Проекты.Аванс, что к пустой ссылке Справочник.Проекты.ПустаяСсылка. При использовании пустой ссылки есть только некоторое усложнение в отчетах — там нужно использовать конструкцию «ВЫБОР» чтобы преобразовать пустую ссылку в строку «Аванс».
Спасибо, Николай.
Можно и пустую. Но не красиво :)
А зачем здесь создавать последовательности? Ведь не сказано, что документы могут вводить задним числом, и что надо это учесть(
Еще вопросик возник) Сказано, что если в приходе денег указан проект, то надо проверить сумму отгрузки и т.д. Если нет задолженности по данному проекту, то о надо проводить документ всё равно и всю сумму зачислять как Аванс, или делать отказ от проведения?
Если долга нет, то все зачислять как аванс.
Это принципиально?
Ну мало ли)))
Последовательности хорошо создавать во всех задачах.
Какой-то интерфейс надо накручивать для работы с последовательностями? Или считается, что пользователь способен добраться до встроенный формы через все функции — стандартные — проведение документов — восстановление последовательностей?
Интерфейс не нужен
Павел, а блокировки в этой задаче нужны или нет? С одной стороны, при одновременном вводе документов, было бы неплохо гарантировать правильное состояние взаиморасчетов. С другой, если есть последовательность, и предполагается ее использование, то состояние взаиморасчетов будет выправляться при ее восстановлении. Как смотрят на экзамене на пренебрежение блокировками в подобных задачах?
Блокировки нужны!
«Аванс» можно сделать пустой ссылкой. Это как в задачах с ЛИФО, ФИФО и ПоСредней (если ПоСредней, то партию можно пустой ссылкой делать). Тогда при сортировке по ссылке пустая всегда будет внизу, либо вверху (в зависимости от типа сортировки). Но вот как регистр реагирует на пустую ссылку (в плане расчета итогов)?
Регистр никак не реагирует на пустую ссылку, для системы пустая ссылка или не пустая — одно и то же.
можете мне помочь, я неуверен что мое решение этой задачи правильное
проведени документа «Приход денег»
//=======================
Движения.Проекты.Записывать = Истина;
Движения.Проекты.Очистить();
Движения.Проекты.Записать();
Движения.Авансы.Записывать = Истина;
Движения.Авансы.Очистить();
Движения.Авансы.Записать();
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить(«РегистрНакопления.Проекты»);
ЭлементБлокировки.УстановитьЗначение(«Контрагенты», Контрагент);
Если ЗначениеЗаполнено(Проект) Тогда
ЭлементБлокировки.УстановитьЗначение(«Проекты», Проект);
КонецЕсли;
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
Блокировка.Заблокировать();
Запрос = Новый Запрос(«ВЫБРАТЬ
| ПроектыОстатки.Контрагенты,
| ПроектыОстатки.Проекты,
| ПроектыОстатки.СуммаОстаток
|ИЗ
| РегистрНакопления.Проекты.Остатки(
| &МоментВремени,
| Контрагенты = &Контрагенты
| И Проекты = &Проекты) КАК ПроектыОстатки
|ГДЕ
| ПроектыОстатки.СуммаОстаток < 0
|
|УПОРЯДОЧИТЬ ПО
| ПроектыОстатки.Проекты.ДатаОплаты
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| АвансыОстатки.Контрагенты,
| АвансыОстатки.СуммаОстаток
|ИЗ
| РегистрНакопления.Авансы.Остатки(&МоментВремени, Контрагенты = &Контрагенты) КАК АвансыОстатки
|ГДЕ
| АвансыОстатки.СуммаОстаток > 0»);
Если Не ЗначениеЗаполнено(Проект) Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, «И Проекты = &Проекты», «»);
Иначе
Запрос.УстановитьПараметр(«Проекты», Проект);
КонецЕсли;
Запрос.УстановитьПараметр(«Контрагенты», Контрагент);
Если Режим = РежимПроведенияДокумента.Оперативный Тогда
Запрос.УстановитьПараметр(«МоментВремени», МоментВремени());
Иначе
Запрос.УстановитьПараметр(«МоментВремени», ‘00010101’);
КонецЕсли;
ПакетЗапросов = Запрос.ВыполнитьПакет();
Проекты = ПакетЗапросов[0];
СуммаДляСписания = Сумма;
ВыборкаПроекты = Проекты.Выбрать();
Пока ВыборкаПроекты.Следующий() и СуммаДляСписания <> 0 Цикл
СуммаДляРегистра = Мин(-ВыборкаПроекты.СуммаОстаток, СуммаДляСписания);
// регистр Проекты Приход
Движение = Движения.Проекты.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Контрагенты = Контрагент;
Движение.Проекты = ВыборкаПроекты.Проекты;
Движение.Сумма = СуммаДляРегистра;
СуммаДляСписания = СуммаДляСписания — СуммаДляРегистра;
КонецЦикла;
Если СуммаДляСписания > 0 Тогда
// регистр Авансы Приход
Движение = Движения.Авансы.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Контрагенты = Контрагент;
Движение.Сумма = СуммаДляСписания;
КонецЕсли;
//=============
Проведение документа «Расходная накладная»
Движения.Проекты.Записывать = Истина;
Движения.Авансы.Записывать = Истина;
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить(«РегистрНакопления.Авансы»);
ЭлементБлокировки.УстановитьЗначение(«Контрагенты», Контрагент);
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
Блокировка.Заблокировать();
Запрос = Новый Запрос(«ВЫБРАТЬ
| АвансыОстатки.Контрагенты,
| АвансыОстатки.СуммаОстаток
|ИЗ
| РегистрНакопления.Авансы.Остатки(&МоментВремени, Контрагенты = &Контрагенты) КАК АвансыОстатки
|ГДЕ
| АвансыОстатки.СуммаОстаток > 0»);
Запрос.УстановитьПараметр(«Контрагенты», Контрагент);
Если РежимПроведения = РежимПроведенияДокумента.Оперативный Тогда
Запрос.УстановитьПараметр(«МоментВремени», МоментВремени());
Иначе
Запрос.УстановитьПараметр(«МоментВремени», ‘00010101’);
КонецЕсли;
Результат = Запрос.Выполнить();
СуммаДляСписания = Сумма;
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() и СуммаДляСписания <> 0 Цикл
СуммаДляРегистра = Мин(Выборка.СуммаОстаток, СуммаДляСписания);
// регистр Авансы Приход
Движение = Движения.Авансы.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Контрагенты = Контрагент;
Движение.Сумма = СуммаДляРегистра;
СуммаДляСписания = СуммаДляСписания — СуммаДляРегистра;
КонецЦикла;
Если СуммаДляСписания > 0 Тогда
Если ЗначениеЗаполнено(Проект) Тогда
// регистр Проекты Приход
Движение = Движения.Проекты.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Контрагенты = Контрагент;
Движение.Проекты = Проект;
Движение.Сумма = СуммаДляСписания;
Иначе
Движение = Движения.Авансы.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Контрагенты = Контрагент;
Движение.Сумма = СуммаДляСписания;
КонецЕсли;
КонецЕсли;
Сформулируйте вопрос, я с удовольствием отвечу.
В решении задействован отдельный регистр для авансов. Насколько это оправдано? На что больше похож аванс — на отдельный показатель, которому полагается свой регистр, или это разрез суммы взаиморасчетов? И почему?
Показатель в задаче один — сумма взаиморасчетов. А разрезов у него два — контрагент, проект.
Аванс не является отдельным показателем, а приравнивается к отдельному проекту, что наглядно видно из отчетов.
Есть несколько вопросов.
Для решения задачи создаю два регистра остатков в первом измерение контрагент и проекты, ресурс сумма. Второй регистр измерение Контрагент и ресурс сумма (используется для учета авансов).
Вопрос правильно ли это ???????
Если предыдущий способ решение приемлем, как во втором отчете на СКД сделать чтобы ресурс второго регистра выводился под проектами (соединением двух источников у меня не получилось)
Объясните, зачем авансы записывать в отдельный регистр?
А как тогда обеспечить вывод регистра в ноль, если использовать один регистр с измерениями контрагент, проект и аванс вывод в ноль не получиться (если я правильно понял разбор первой учебной задачи по оперативному учету)
Для себя начертите схему, в центре показатели (сколько их и какие?) по краям регистраторы изменений показателей (документы) и стрелками укажите связь регистраторов с показателями. Если есть показатели остатков с одним вхождением регистратора (+ или -) то показатели спроектированы неверно.
Если вынести авансы в отдельный регистр, кода в обработках проведения будет раза в 1.5-2 меньше и код будет проще.
Чуть-чуть усложнятся отчеты. Нужно будет объединить два набора данных.
Регистры проектируют не для того чтобы код меньше стал.
«Аванс» — предопределенный элемент справочника «Проекты» с наименьшим кодом. При сортировке проектов по коду в порядке убывания «Аванс» будет последним. Если не надо показывать пользователю проект «Аванс» в форме выбора, это решается настройкой отбора списка.
Код может изменить пользователь.
Сам будет виноват. В типовых многое рассчитано на то, что пользователь не будет хулиганить. Кроме того, завтра может понадобиться переместить аванс с первого места на последнее.
Отличная аргументация для апелляционного письма!
Т.е. на экзамене за такое будут сняты баллы?
Я думаю, что на это будут обращать внимание в последнюю очередь.
Тогда можно добавить проверочку перед записью:
Процедура ПередЗаписью(Отказ)
Если Предопределенный и Не Число(Код) = 0 Тогда
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
За что Вы так не любите пользователей? Все бы Вам запрещать! :)
Сортировать предлагаю сначала по стандартному реквизиту справочника «Предопределенный», а уже потом по другим реквизитам.
+1
А если потом понадобятся другие предопределенные элементы?
Скорее всего, они должны будут отображаться рядом. Если нет, тогда нужно вводить дополнительное поле для сортировки.