LeViK писав:Добрый день. Вот есть такой кусок кода. Работает, но только после того как зайду в окно план. Это потому что я привязываюсь к DM2.TbTypeLands через переменную?
Нет. Не работает из-за того, что изначально тип угодий по КВЗУ для этого участка (или угодья) не присвоен. Когда Вы импортируете in4 или берёте старые участки, которые делались ещё до классификатора КВЗУ, то в таких угодьях ID_TypeLands ещё не присвоено. Когда Вы переходите в параметры угодья, то там программа (если тип КВЗУ не присвоен) автоматически проставляет подходящий тип (именно потому Вам кажется, что КВЗУ уже задано), но присвоится КВЗУ только тогда, когда нажмёте кнопку "Сохранить". Иначе КВЗУ так и не присвоится и алгоритм работать не будет. Либо задавайте всегда в ручную классификатор КВЗУ либо используйте такой алгоритм:
1. С левой стороны выбираете
"ADO" - "Запит ADO".
2. Для появившегося объекта, задайте имя, например
ListPlan (кстати, таким образом создаются временные таблицы, которые можно использовать для любых sql-запросов).
3. В код, в самом начале после
Begin добавте такой текст:
Код: Виділити все
//В самом начале присваиваем КВЗУ тем угодьям и ограничениям, которым оно ещё не присвоено
ListPlan.SQL.Text := 'Update Land Set ID_TypeLands = TL.ID_TypeLands From Land L ' +
'INNER JOIN TypeLand TL on TL.ID_TypeLand = L.ID_TypeLand Where L.ID_Object = ''' +
IntToStr(<DM1.QbObject."ID_Object">) + ''' and L.ID_TypeLands is Null';
ListPlan.ExecSQL;
Теперь, при запуске Вашей отчётной формы, программа проверит те угодья, которым ещё не присвоен КВЗУ и присвоит им согласно стандартным соответствиям.