Приемы при решении задач. Сертификация на Специалиста по Платформе 1С

В данном посте я буду описывать приемы которые узнаю в процессе решения задач на Специалиста по Платформе 1С.

Оперативный учет

При проектировании регистров накоплений лучше придерживаться схемы:

  1. Выписываем все ресурсы регистров накоплений
  2. Определяем для каждого ресурса в каких измерениях он должен измеряться
  3. Объединяем в регистры в зависисмости от комбинаций измерений.

Когда описывается процедура ПроведениеДокумента лучше код разделять на блоки по логическим задачам. Каждый блок можно выделять в отдельную процедуру или функцию. Например, можно разделить на три части “Подготовка”, “Формирование движений”, “Контроль остатков”. Данные части вполне могут выступать независимо. Разделение на блоки упрощает кодирование и читаемость кода.

Движения в регистре по партиям

Стандартная логика нам говорит – сформируй несколько запросов. Первый – таблица с номенклатурой и количеством к списанию. Второй – таблица с остатками по каждой выбранной в итерации цикла номенклатуре.

Гораздо более удобно сформировать один запрос одновременно к таблице ТЧ и таблице остатков. И сделать выборку с обходом по группировкам. Группировку сделать по номенклатуре и количеству из табличной части. В итоге, у нас на выходе будет один запрос и два цикла (один вложен в другой). В рамках первого мы получаем обход по записям групп. В рамках второго – обход по вложенным записям. Нет лишних запросов к БД, код компактен, читаем и логичен.

Если есть Учетная политика FIFO/LIFO – реализовать сортировку в тексте запроса лучше с помощью замены в тексте запроса строки на нужную через СтрЗаменить().

Контроль остатков

Важно понимать, что формирование движений по регистрам реализовано в транзакции. Если транзакция будет прервана (например, когда вы проставите Отказ=Истина) – все изменения произведенные в обработке проведения будут отменены.

Обычно первое, что приходит на ум: получить номенклатуру, получить ее остатки на складе, сравнить количество подлежащее списанию с остатками на складе и если мы хотим списать больше чем есть – сформировать ошибку, иначе – записать данные в регистр. В данном случае у нас будет много операций сравнения. Запись в регистры и контроль остатков будут реализованы в одном блоке.

Альтернативный вариант – разделить собой запись в регистры и проверку остатков. В первую очередь – сформировать движения, записать их в регистр. Вторым этапом – построить запрос к остаткам и если остатки отрицательные – вывести ошибку и прописать “Отказ = Истина; Возврат;”. Сформированные движения по регистру не будут записаны при отмене проведения. Код более читабельный и простой. Проверяем остатки одним запросом без лишних циклов сравнения.

Поделиться:

Читайте также: