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

Автор: | 17.02.2019

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

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

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

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

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

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

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

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

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

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

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

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

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

Поделиться:
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

Добавить комментарий