Базовый курс. Решение ДЗ №6
Представляем решение шестого домашнего задания.
К сожалению, у Вас недостаточно прав для просмотра этой записи. Если Вы еще не залогинены на сайте
— залогиньтесь.
— залогиньтесь.
Если не активировали токен — посмотрите видео-инструкцию (видео N5)
Если вы залогинены, у Вас активирован токен доступа, но вы все равно видите эту запись —
напишите нам на e-mail поддержки.
А зачем вообще в запросе обработки проверки контрагентов считать количество (запрос с соединением)? Не проще воспользоваться выражением ЕСТЬ NULL? Например, так:
ВЫБРАТЬ
Контрагенты.Ссылка
ИЗ
Справочник.Контрагенты КАК Контрагенты
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КонтактныеЛицаКонтрагентов КАК КонтактныеЛицаКонтрагентов
ПО Контрагенты.Ссылка = КонтактныеЛицаКонтрагентов.Владелец
ГДЕ
КонтактныеЛицаКонтрагентов.Владелец ЕСТЬ NULL
И (НЕ Контрагенты.ЭтоГруппа)
Это один из вариантов решения.
Вопрос по обработке проверки контрагентов. В решении не учтена ситуация когда контактные лица у контрагента есть, но все помечены на удаление. В этом случае, мне кажется, надо выдавать такого контрагента в результат проверки как ошибочного. Во втором варианте запроса проблем нет, условие добавляется во вложенный запрос, а вот как учесть удаленность в первом варианте запроса (с соединением таблиц)? У меня не получилось, хотелось бы увидеть правильный текст запроса.
Практически также: используя вложенный запрос.
ВЫБРАТЬ
Контрагенты.Ссылка,
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ КонтрактныеЛицаКонтрагентов.Ссылка) КАК Ссылка1
ИЗ
Справочник.Контрагенты КАК Контрагенты
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
КонтрактныеЛицаКонтрагентов.Ссылка КАК Ссылка,
КонтрактныеЛицаКонтрагентов.Владелец КАК Владелец
ИЗ
Справочник.КонтрактныеЛицаКонтрагентов КАК КонтрактныеЛицаКонтрагентов
ГДЕ
(НЕ КонтрактныеЛицаКонтрагентов.ПометкаУдаления = &ПометкаУдаления)) КАК КонтрактныеЛицаКонтрагентов
ПО (КонтрактныеЛицаКонтрагентов.Владелец = Контрагенты.Ссылка)
ГДЕ
(НЕ Контрагенты.ЭтоГруппа)
СГРУППИРОВАТЬ ПО
Контрагенты.Ссылка
ИМЕЮЩИЕ
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ КонтрактныеЛицаКонтрагентов.Ссылка) = 0
Понятно, делаем соединение не с таблицей контактных лиц контрагентов, а с некой таблицей, полученной в результате промежуточного запроса. Я думал, что можно вообще обойтись без вложенного запроса, а так действительно получается почти то же, что и во втором варианте.
Попутно еще вопросик по псевдонимам. Вот есть псевдоним Ссылка1, определенный для функции КОЛИЧЕСТВО(РАЗЛИЧНЫЕ КонтрактныеЛицаКонтрагентов.Ссылка)
Почему в последнем условии отбора нельзя написать так “ИМЕЮЩИЕ Ссылка1 = 0” ? Я пробовал, конструктор ругается :) Этот псевдоним можно использовать только как имя поля в результате запроса, но не в самом запросе?
Псевдонимы можно использовать только при настройке итогов и в разделе Порядок.
В условиях, группировках нужно использовать поля (или функции от этих полей) самой таблицы.
в первом случае многих ко многим сделал через тч, и в принципе почему бы в реквизитах не использовать элементы КЛ, отобранные по тч контрагентов – для выбора пользователя (конечно это не супер). а во втором случае сделал как и вы через едИзмНоменклатуры.
к стати мне кажется у вас косяк будет если пользователь базовую единицу сменит с пакета на палетта…?
Согласен. Правильное поведение в этой ситуации – запретить изменять базовую единицу, если по номенклатуре были движения.
Это будет сделано в домашнем задании №8.
спасибо за решение!
интересный для меня момент по пункту 7. Автоматическое создание единицы измерения на основании базовой.
там нет проверки на то,что новый элемент это группа, а для группы нет реквизита базовая единица. и при проверке платформа не будет ругаться что нет реквизита, а правильно выдаст ЛОЖЬ на заполненность.
Немного не понял.
Речь идет о создании новой группы справочника номенклатура?
В этом случае условие
Будет всегда ложным, т.к. БазоваяЕдиница будет всегда пуста.
Возможно Вы говорите о другом механизме, приведите пример.
Да, речь идет именно о создании группы.
У себя в коде я вводил дополнительную (и ненужную как оказалось) проверку в виде Если НЕ ЭтоГРуппа() тогда
Ок.
Вопрос: как на форме правильно изменять пометки об обязательности заполнения поля (подчеркивания на форме)?
В свойствах элемента формы есть свойство АвтоОтметкаНезаполненного, им и можно добиться желаемого эффекта.
Свойством можно управлять и программно.
я для решения задачи по наследованию вида номенклатуры использовал вариант с флагом “заполнять из данных заполнения”, а в решении он не был даже упомянут ни как самый простой ни как ошибочный.
Не понял Вашего решения.
Вы для ВидаНоменклатуры проставили “Заполнять из данных заполнения”? Дополнительного программного кода не использовали?
И к чему привел такой ход?
Непойму, почему всегда всё так просто, а я лезу кудато всегда не вту степь:(.
Как я понял, что лучше избегать табличных частей?
СПАСИБО!
Не то чтобы нужно избегать табличных частей.
Просто их нужно использовать “по месту”.
Важно помнить одно: на строку табличной части нельзя будет сослаться, в отличие от записи подчиненного справочника.
Если это ограничение не является критичным для текущей задачи, то можно использовать табличную часть.