В практике внедрения отраслевой конфигурации Альфа-Авто 5ой версии, предназначенной для организации учета в табличного автосалонах и автосервисах важной является задача загрузки данных от поставщиков о планируемых поставках автомобилей.
Как правило эти данные представляют собой табличный документ, где имеется развернутая информация:
- — о сроках планируемой поставке;
- — внешнем номере заказа;
- — VIN-номере автомобиля;
- — стоимости;
- — варианте комплектации и предельной дате оплаты каждого автомобиля
На рисунке ниже привожу фрагмент такого файла:
В процессе загрузки возникает необходимость получить данные о следующих объектах:
— справочник Автомобилей;
— справочник Договоров взаиморасчетов с поставщиком;
— документы Заказ поставщику на автомобиль;
— цены автомобилей
Важно чтобы эта информация не просто загружалась, но и синхронизировалась. Так чтобы в различных документах и справочниках об одном и том же автомобиле была непротиворечивой. Имеющаяся в составе отраслевого решения обработка загрузки табличного докумета очевидно задачу такой синхронизации решить не может.
Чтобы для пользователя наглядно отобразить процесс поступления нового автомобиля от поставщика мы создаем 2 связанные между собой «цепочки» документов:
- -заказов клиентов на автомобиль, которая отражает клиентские заказы на определенный автомобиль
- -заказов поставщику на автомобили, которая отражает изменения в информации о поставке авто
Описываемая задача в первую очередь касается 2-ой «цепочки» (именно заказов поставщику на автомобили) и не редко встает совместно с организацией взаиморасчетов с поставщиками в разрезе каждого автомобиля по отдельности. В подобном случае рекомендуется также дополнить код программы автоматическим созданием договора с поставщиком. Который бы создавался по событию перед записью документа «Заказ поставщику на автомобиль».
Процедура ЗаполнениеДоговораСПоставщиком() Экспорт
//посмотрим на договор с поставщиком - может быть его надо выбрать или создать?
Если НЕ ЗначениеЗаполнено(ДоговорВзаиморасчетов) И ЗначениеЗаполнено(ВнешнийНомерЗаказа)
И ЗначениеЗаполнено(Модель) И ЗначениеЗаполнено(Контрагент)
И ЗначениеЗаполнено(Автомобиль) Тогда //сначала попробуем поискать
Запрос = Новый Запрос();
Запрос.Текст = "ВЫБРАТЬ
| ДоговорыВзаиморасчетов.Ссылка,
| ДоговорыВзаиморасчетов.Автомобиль.VIN КАК VIN
|ИЗ
| Справочник.ДоговорыВзаиморасчетов КАК ДоговорыВзаиморасчетов
|ГДЕ
| ДоговорыВзаиморасчетов.Владелец = &Владелец
| И ДоговорыВзаиморасчетов.НомерЗаказаНаАвтомобиль = &НомерЗаказаНаАвтомобиль";
Запрос.УстановитьПараметр("Владелец", Контрагент);
Запрос.УстановитьПараметр("НомерЗаказаНаАвтомобиль",ВнешнийНомерЗаказа);
Выборка = Запрос.Выполнить().Выбрать();
Если
Выборка.Следующий() тогда
Если
ЗначениеЗаполнено(Автомобиль.VIN) Тогда
КонецЕсли;
КонецЕсли;
Если
ДоговорВзаиморасчетов.Пустая() Тогда//если не нашли, то создадим договор
Если
ЗначениеЗаполнено(Автомобиль.VIN) Тогда
КонецЕсли;
//... заполнение других реквизитов справочника
КонецЕсли;
КонецЕсли;
Обрабатывая строки табличного документа обработка для каждой строки:
— с заполненными данными VIN-номера ищет элемент справочника автоомбилей, и если таковой отствутствует, то создает;
— с заполненными данными о номере заказа поставщику проверяет остатки заказов поставщику на автомобили с нужным внешним номером заказа и обновляет данные документа;
-формирет в процессе обработки таблицу соответствий VIN-номер цена автомобиля, которая после обработки табличной части предстает перед пользователем в виде документа изменение цен
Наглядно это алгоритм выглядит так:
В результате работы мы получаем не только заполенные документы заказ поставщику на автомобиль, но и один документ «Изменение цен автомобилей»