Позиции документа (макрокоманды)
Для работы со списком позиций в документе используется коллекция Document.Positions.
Если в макросе используются макрокоманды из коллекции Positions и при этом макрос выполняется для открытого документа, то при запуске макроса автоматически добавляется выбор диапазона для операции: Вся смета, Выделенные позиции или Текущий раздел. Если макрос выполняется из вкладки Объекты, то обработаны будут все позиции документа.
// Перебор позиций в документе
for i := 0 to Document.Positions.Count - 1 do
begin
pos := Document.Positions.GetItem(i);
end; Тип позиции
Для документов: ЛС
// Возвращает тип позиции:
// smrtNone – позиция не ресурс (работа)
// smrtTzr – трудозатраты рабочих
// smrtTzm – трудозатраты машинистов
// smrtMch – эксплуатация машин
// smrtMat – материал
// smrtEquip – оборудование
// smrtTransp – перевозка
// smrtLoad – погрузка/разгрузка
Value := pos.ResourceType; Основная информация о позиции
// Номер по порядку
Value := pos.NumberAsString;
// Наименование позиции
Value := pos.Caption;
// Единица измерения (измеритель)
Value := pos.Units; Физобъём позиции
Для документов: ЛС

Для работы со значением физобъёма позиции используется коллекция Document.Positions.Quantity.
q := pos.Quantity;
// Ввод значения или формулы расчёта физобъёма
q.InputFx := Value;
// Возвращает значение расчёта физобъёма
Value := q.Value;
// Коэффициент кратности физобъёма
q.K := Value;
// Формула расчёта физобъёма
Value := q.Fx;
// Развёрнутая формула расчёта физобъёма
Value := q.ExpandedFx;
// Очистка формул расчёта физобъёма
q.ClearCalcRows; Пример использования в макросе: Удаление формул
// Копирование физобъёма в акт из сметы (в режиме Акта)
q.CopyFromSmeta; Пример использования в макросе: Изменение физобъёмов в акте
Настройка точности расчёта физобъёма для текущей или выделенных позиций доступна на панели инструментов на вкладке Физобъем.
// Точность расчета физобъема (для позиций),
// где Value – величина от 7 до -3; '6' - 0.0000001, '0' - 1, '-3' - 1000
pos.SetQuantityPrecision(Value);
Пример использования в макросе: Точность физобъёма
Стоимость позиции на единицу
Для документов: ЛС
// Взять значение цены на единицу из ячейки
Value := pos.GetStringValue(ColId, EditMode);
// где
// <ColId> – идентификатор колонки, один из:
// sdmQtTot – Количество (лучше обрабатывать через pos.Quantity)
// sdmOneBase – ВСЕГО базисная
// sdmOneOzpBase – ОЗП базисная
// sdmOneEmBase – ЭМ базисная
// sdmOneZpmBase – ЗПМ базисная
// sdmOneMatBase – МАТ базисная
// sdmOneCurr – ВСЕГО текущая
// sdmOneOzpCurr – ОЗП текущая
// sdmOneEmCurr – ЭМ текущая
// sdmOneZpmCurr – ЗПМ текущая
// sdmOneMatCurr – МАТ текущая
// <EditMode> – какие значение брать:
// True – значение, как оно введено (формула)
// False – значение, как оно отображается (результат)
// Запись значения <Value> в ячейку
pos.SetStringValue(ColId, Value);
// Удаление формул расчёта цены
// Работает для документов ЛС и КА
pos.RemovePriceFx; Для значений акта используются аналогичные имена переменных, но с префиксом SdmAct. Например, sdmActOneOzpCur. В режиме Акта не могут меняться базисные стоимости позиций.
Ресурс. Обоснование цены
Для документов: ЛС

// Обоснование базисной цены
pos.PriceObosnBase := Value;
// Обоснование текущей цены
pos.PriceObosnCurr := Value; Пример использования в макросе: Обоснование цен материалов и оборудования
Начальный уровень цен позиции
Для документов: ЛС

// Возможность задать начальный уровень цен позиции.
// где <Value> одно из:
// 0 – текущие цены,
// 1 – цены 2001 г.,
// 3 – цены 1984 г.
pos.PriceLevel := Value; Примечания
Для документов: ЛС ПИР

Ввод или изменение примечания для текущей позиции доступно в окне Дополнительная информация о позиции, поле Примечания.
// Добавление примечания к позиции
pos.SetComments(Value);
// Изменение примечания к позиции
pos.Comment := Value; Пример использования в макросе: Примечания к позициям
Комментарии
Для документов: ВОР ТК ЛС ПИР СК КА

Ввод или изменение комментариев для текущей позиции доступно в окне Дополнительная информация о позиции, раздел Комментарии, поля Ссылка на чертежи, спецификации и т. п. и Заметки, пояснения, примечания и т. п.
// Ссылка на чертежи, спецификации и т. п.
pos.UserComment1 := Value;
// Заметки, пояснения, примечания и т. п.
pos.UserComment2 := Value; Пример использования в макросе: Комментарий к позиции
Отсутствует в СНБ
Для документов: ЛС

Окно Дополнительная информация о позиции – КАЦ – Позиция отсутствует в СНБ.
// Позиция отсутствует в СНБ
pos.NotInNB := True|False; Пример использования в макросе: Материалы из конъюнктурного анализа
Не учитывать
Для документов: ЛС

// Не учитывать позицию в расчёте
pos.Inactive := True; Материал заказчика
Для документов: ЛС
Для позиций материалов и оборудования возможность проверить, установить или снять признак Материал заказчика.
// Проверка позиции-ресурса на признак 'Материал заказчика'
Value := pos.CanSetIsReturn(sretmOwnerMat);
// Установить/снять признак 'Материал заказчика'
pos.SetIsReturn(sretmOwnerMat, True|False);
Дополнительная перевозка ресурсов

Расчёт дополнительной перевозки согласно Методике 2020 выполняется для каждого ресурса. Это может быть ресурс отдельной позицией сметы или ресурс из ресурсной части позиции сметы. Окно Дополнительная информация (<F3>) на строке позиции или ресурса, раздел Ресурс – Перевозка.
// Удаляет расчёт дополнительной перевозки по позиции сметы
pos.ClearTransportation;
// Удаляет строки дополнительной перевозки по всей смете
Document.Positions.ClearTransportation;
Пример использования в макросе: Удаление допперевозки
Ресурсная часть позиции
Для документов: ЛС
Для чтения и изменения информации в ресурсной части позиции используется коллекция Document.Positions.Resources
// Перебор ресурсов в ресурсной части позиции локальной сметы
for j = 0 to pos.Resources.Count - 1 do
begin
res := pos.Resources.GetItem(j);
end; Для строк ресурсов работает та часть макрокоманд для позиций сметы, которые имеют общий смысл:
- тип строки
- основная информация
- определение стоимости ресурса на единицу
- обоснование цены материала или оборудования
- признак Материала заказчика
Примеры использования макрокоманд для ресурсных частей позиций сметы приведены в макросах раздела Ресурсы.
Вложенные позиции
Для документов: КА СК
Для чтения и изменения информации вложенных позиций используется коллекция Document.Positions.SubPositions
// Перебор ресурсов в ресурсной части позиции локальной сметы
for j = 0 to pos.SubPositions.Count - 1 do
begin
subpos := pos.SubPositions.GetItem(j);
end; Пример использования в макросе: Комментарий к позиции
Для вложенных строк работает та часть макрокоманд для позиций сметы, которые имеют общий смысл

