Страница 1 из 4

Работа с регистрами

Добавлено: Чт сен 20, 2018 11:31 pm
admin
1. Копировать в регистр
Расширение копирует данные формы и ее подчиненные данные в другую форму, называемую регистром. Это позволяет решать некоторые задачи, в которых имеется три уровня подчиненности данных: Операция->Изделие->Комплектующее, Меню->Блюдо->Продукты, Операция->Услуги->Работы, материалы и т. д. Возможности запросов ограничены, они могут извлекать данные только из двух уровней подчиненности: формы и таблицы. Но если в таблице есть объекты, которые имеют какой-то состав (например, изделие состоит из комплектующих), то запрос не может получить этот состав. Для этого приходилось связывать формы запросами и использовать свойство объекта "Заполнить таблицу". Вместо этого можно просто копировать нужные для анализа данные в отдельную форму и использовать простые запросы для получения результатов. При этом интерфейс программы заметно упростится, т. к. будет избавлен от лишних элементов.

Для того, чтобы легче было разобраться с настройками действия сделал такой сводный рисунок на примере демо-базы.
REGISTERDEMO.png
REGISTERDEMO.png (94.08 КБ) 7381 просмотр

2. Записать в регистр остатков
Реализация хранения итогов в форме, называемой регистром остатков. С помощью этого действия вы сможете, к примеру, вычислять остатки товаров на текущий момент. Это альтернатива вычислению остатков с помощью запроса. Запросу приходится каждый раз просматривать таблицы, чтобы вычислить остатки. Если данных много, это может занимать некоторое время. В регистре остатки уже рассчитаны и их получение происходит практически мгновенно. Расчет остатков происходит при сохранении и удалении записей. Действие ищет в регистре соответствующую запись и меняет в ней числовое поле: увеличивает или уменьшает значение в зависимости от выбранной операции. Если запись не найдена, то она добавляется. Действие может предупреждать об отрицательных остатках. Предупреждение отображается в окне вывода.

1.1 - добавлено действие "Записать в регистр остатков".
1.0 - первая версия.

Registers.zip
(6.96 КБ) 113 скачиваний

Re: Работа с регистрами

Добавлено: Пн окт 15, 2018 10:05 am
Vofka18
Добрый день, очень не хватало подобного функционала, наконец добрался, чтоб позаниматься своей БД и внедрить данное расширение, но есть пару вопросов, подскажите.
Решил использовать данное расширение, для очень ответственной задачи в моей БД, это учет остатков по партиям(по моему, это самое правильное решение). Создать два регистра по приходам и расходам, и остатки вычислять уже из регистров а не из документов прихода\расхода.
Так вот собственно вопросы:
1) По назначению ли я буду использовать данное расширение? Будут ли какие подводные камни, чтоб по максимуму смог их предусмотреть. (в плане, может кто уже реализовал подобное, были ли какие проблемы)
2) В вычисляемых полях регистров, можно ли прописать какую нить функцию для запрета проведения по условию? Тоесть если у меня не достаточно остатков, чтобы программа выдала сообщение и не провела документ? Если нет такой возможности, подскажите где прописать подобное условие, чтобы не сломать логику всего расширения.
Заранее благодарен!

Re: Работа с регистрами

Добавлено: Пн окт 15, 2018 11:01 am
Гocть
Vofka18 писал(а):остатки вычислять уже из регистров а не из документов прихода\расхода
Vofka18 писал(а):По назначению ли я буду использовать данное расширение?

Скорее всего нет, т.к. этот регистр больше напоминает "регистр сведений", а вам для учета приход/расход нужен "регистр накопления" (остатков). Это уже другой вид регистра с иной логикой.

Вот к примеру я dxdb_icon добавил 2 отдельных меню (нужно посчитать сколько ушло яиц куриных):
Изображение
По регистру мы видим то что внесли, но подсчет данных будет почти равносилен прямому пересчету документов. Нам же нужна готовая цифра 6 в "сколько всего яиц мы потратили".

Vofka18 писал(а):2) В вычисляемых полях регистров, можно ли прописать какую нить функцию для запрета проведения по условию?

Если это "регистр накопления", то без проблем можно его оперативно опросить перед проведением в "проверке значения".

Re: Работа с регистрами

Добавлено: Пн окт 15, 2018 11:32 am
Vofka18
Гocть писал(а):а вам для учета приход/расход нужен "регистр накопления" (остатков). Это уже другой вид регистра с иной логикой.

А случайно нет ли у вас никакой наработки в данном направлении? Изначально думал, что все эти регистры, примочки 1С-ки, и они не пригодятся при разработке своей базы. Плюс отсутствие опыта в построении архитектуры БД. А сейчас когда база уже работает, постоянно вылазят всякие проблемы и приходится аккуратненько менять все, не потеряв данных(ну в плане чтоб остатки остались правильными...), и постепенно вникая во все эти вопросы, понимаю что "проведение" это не просто галочка в документе :D, и данные по проводкам следует хранить отдельно...
А до конца не понимаю что именно нужно сделать... тут по сути вопрос не по Dataexpress, а по архитектуре БД :(

Re: Работа с регистрами

Добавлено: Пн окт 15, 2018 12:03 pm
Гocть
Готовой наработки нет, есть только общее представление о процессах учета. Даже отдельно взятые разработчики типовых конфиг 1С иногда не имеют полного представления о той архитектуре, которую они создают, ну а чтобы такое нечто похожее реализовать в DataExpress нужно много времени, больше опыта и мозги не одного умника.
Регистры придумали внедрять в 1С, но наверное они не открыли этим америку а просто внедрили как способ оптимизации работы с бд и расширили под частые задачи и законодательство РФ (регистр бухгалтерии, например) и других стран потребителей.

Re: Работа с регистрами

Добавлено: Пн окт 15, 2018 12:12 pm
Vofka18
Гocть писал(а):Готовой наработки нет, есть только общее представление о процессах учета. Даже отдельно взятые разработчики типовых конфиг 1С иногда не имеют полного представления о той архитектуре, которую они создают, ну а чтобы такое нечто похожее реализовать в DataExpress нужно много времени, больше опыта и мозги не одного умника.
Регистры придумали внедрять в 1С, но наверное они не открыли этим америку а просто внедрили как способ оптимизации работы с бд и расширили под частые задачи и законодательство РФ (регистр бухгалтерии, например) и других стран потребителей.

Спасибо за ответ. А не подскажите где можно почитать именно о алгоритме поведения регистра накопления? А то везде натыкаюсь только на пример реализации в 1с , а что он из себя представляет "в нутри", так сказать, не могу нигде найти...

Re: Работа с регистрами

Добавлено: Пн окт 15, 2018 12:20 pm
Гocть
Vofka18 писал(а):А то везде натыкаюсь только на пример реализации в 1с

Ну значит DataExpress вторая после 1С, где такая фича требуется :lol: .
Для понимания общих принципов работы могу лишь подтолкнуть к прочтению документации на официальном сайте 1с, а попробовать что-то можно в "версии для обучения программированию" (качается там же).

Re: Работа с регистрами

Добавлено: Пн окт 15, 2018 7:06 pm
cordek
Как вариант реализовать отдельный регистр проведения, и отдельный по выводу остатков. Пересчет остатков реализовать в скрипте, который будет выполнятся по мере проведения в регистре.

Re: Работа с регистрами

Добавлено: Пн окт 15, 2018 7:40 pm
Гocть
cordek писал(а):отдельный по выводу остатков

Проводим документ, он разносится в регистр сведений, который в свою очередь вызывает процедуру пересчета товара в регистре остатков и в случае расхождений запрещает проведение документа и откатывает обе операции в обратном порядке? :shock:
Или я неправильно понял.

Re: Работа с регистрами

Добавлено: Вт мар 05, 2019 11:05 am
Иван
admin писал(а):Расширение копирует данные формы и ее подчиненные данные в другую форму, называемую регистром. Это позволяет решать некоторые задачи, в которых имеется три уровня подчиненности данных: Операция->Изделие->Комплектующее, Меню->Блюдо->Продукты, Операция->Услуги->Работы, материалы и т. д. Возможности запросов ограничены, они могут извлекать данные только из двух уровней подчиненности: формы и таблицы. Но если в таблице есть объекты, которые имеют какой-то состав (например, изделие состоит из комплектующих), то запрос не может получить этот состав. Для этого приходилось связывать формы запросами и использовать свойство объекта "Заполнить таблицу". Вместо этого можно просто копировать нужные для анализа данные в отдельную форму и использовать простые запросы для получения результатов. При этом интерфейс программы заметно упростится, т. к. будет избавлен от лишних элементов.

Для того, чтобы легче было разобраться с настройками действия сделал такой сводный рисунок на примере демо-базы.
REGISTERDEMO.png


Шикарное расширение, использую его для просчета рецептур. Недавно был реализован To Do List с отправкой заданий в телеграмм посредством cmd, и хотелось допилить возможность вытягивать историю изменения формы. Это в первую очередь нужно для реализации передачи заданий дальше, то есть менеджер получивший задание просто корректирует задачу (не создает новую), и перенаправляет ее в работу, если есть такая необходимость (например если поступил вопрос из сайта, но по сути он должен быть направлен бухгалтеру). Если есть история формы по id можно вытянуть статусы и ответственных, время изменения и т.д. (наглядно видно что откуда и куда). Теоретически реализация расширения "Регистр" без привязки к форме по объекту возможна?