Расширение «Контроль контрактов» для БП 3.0
Есть контора, которая по гос. контрактам поставляет что-то государевым учреждениям. Объёмы закупок определяются самим контрактом, и контора должны выполнить контракт в этих объёмах ,ни больше ни меньше. Меньше – штрафные санкции, больше – никто не заплатит – сам виноват. Отсюда это расширение – проверить, что количество проданной номенклатуры не превышает указанное в контракте.
Снимать с поддержки, как водится,не, хотелось, сделать расширением в режиме совместимости 8.3.10?…а почему нет?
Учет в БП 3.0 (работает на 3.0.64.42, написано уже не помню на какой версии БП 3.0 летом 2017 года)
Сложность режима совместимости 8.3.10 – нельзя в расширении добавлять объекты, которые хранят данные (новые константы, свои справочники и документы, регистры сведений и накоплений, а также реквизиты существующих). Но дополнительные реквизиты и сведения есть, потому используем их.
Следующая сложность – в дополнительных реквизитах и сведениях нельзя хранить таблицы значений – решаемо – создаём строковой дополнительное сведение максимальной длины (1024 символа, если не ошибаюсь, если ошибаюсь – то поправьте).
В общем, получается так – сведения о номенклатуре гос. Контракта будем хранить в справочнике «Договоры контрагентов»/, к которому «прицепим» два дополнительных сведения «Контролировать превышение», тип «Булево», и «Данные контракта», тип «Строка».
Таблица контракта состоит из колонок – Номенклатура, Объем, Цена и Сумма. Если с тремя последними никаких проблем, то с Номенклатурой засада – в строке ссылку не сохранишь, потому сохраним ГУИД, каждую строку таблицы пишем через перевод строки, в строке разделителем полей установим «|».
В общем модуле пишем функции по записи таблицы в строку и парсим при чтении в таблицу значений.
Форму элемента справочника «Договоры контрагентов» добавляем в расширение, добавляем реквизиты – флаг «Контролировать превышение», закладки «Основные сведения» и «Данные контракты» (видимую только при установленном флаге «Контролировать превышение»), получаем:
При сохранении элемента справочника получаем многострочный текст:
2b5e5ea3-1dcf-11e6-a31d-14dae9b19a48|10|100|1 000
2b5e5ea8-1dcf-11e6-a31d-14dae9b19a48|1 000|200|200 000
Строки которого – это строки таблицы значений, номенклатура в которых представлена ГУИД-ом.
Осталось проконтролировать проведение документов, в модуле объекта документа «Реализация товаров и услуг» расширения добавляем процедуру обработки проведения с директивой:
&После("ОбработкаПроведения")
Процедура еаю_ОбработкаПроведения(Отказ, РежимПроведения)
В ней проверяем все реализации по договору из контрагента (если для него записан флаг «Конролировать превышение»). Если пытаемя продать больше, чем указано в контракте – документ не проводится, в сообщениях видим причину отказа провыедения:
Как- то был тут разговор, по невозможности сохранения в дополнительных реквизитах таблиц значений – вот реализация. Есть, ну как без этого, подлянка, если таблица очень большая, то длины строки в доп.сведениях может не хватить. Тупик? – Нет!, если нужно, то в доп сведениях храним ссылку на текстовый файл (писать их можно в справочник «Файлы»), размер текстового файла позволит хранить в строковом виде таблицы значений очень больших размеров.
Как обычно – если нельзя, но очень хочется – то можно)))