Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите с регистром сведений, Заполнение реквизитов документа на основании дан  (Прочитано 11597 раз)
0 Пользователей и 1 Гость смотрят эту тему.
sergiyboy
Интересующийся

ua
Offline Offline

« : 11-09-2011 06:42 » new

Здраствуй Господа-Разработчики. Обращается к Вам делетант в этом деле. Пробую написать конфигурацию с нуля. И споткнулся на следующей проблеме.
Есть непериодический регистр сведений УсловияДоговоров со следующими даными:
Измерения:Поставщик (Справочник.Поставщики)
-Маршрут(Справочник.Маршруты)
-МаксимальноеРастояние (Число)
-МинимальноеРастояние(Число)
Ресурсы:-Цена(Число)
-Договор(Справочник.Договора Владелец Поставщики)
Также имеется документ ПутевойЛист с реквизитами Предприятия (спр), Водитель(Спр), Автомобиль(Спр)
Табличная часть ПутевыеЛисты: Дата, Номер, Маршрут (спр), К-во ездок, Растояние, Растояние одной ездки, Вес, Договор, Цена, Сума.

Необходимо чтобы при вводе даных документа Договор и Цена заполнялись из Регистра сведений. При этом нас будет устраивать когда растояние одной ездки будет в пределах между минимальным и максимальным растоянием РегистраСведений. Если это невозможно, то как вариант можно создать справочник ИнтервалыРастояний с реквизитами Мин и Макс растояния добавить его в регистр сведений и документ, но как при этом он должен заполнятся в документе,если растояние одной ездки расчитывается автоматически??? Не понял
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 12-09-2011 11:17 » 

Обычно в подобных задачах нет необходиости задавать мин и макс знаечние параметра, т.к. диапазоны чаще всего не пересекаются и полностью заполяют родиельский диапазон (уже забыл все умные слова, как это называется в математике).
Итого обычно имеем следующие данные:
0 < X <= 10 - цена 1
10 < X <= 20 - цена 2
...
Тогда нам достаточно в Измерениях регистра задать только Минимальное расстояние (с которого действует тариф) и выбирать (запросом):
первую запись
из всех, расстояние которых меньше либо равно заданному
отсортированные по уменьшению растояния
Записан
sergiyboy
Интересующийся

ua
Offline Offline

« Ответ #2 : 14-09-2011 15:52 » 

Я что-то не понял смысла?
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 14-09-2011 20:17 » 

Что именно не понятно?
Предлагаемая мною структура данных или как из нее получить нужные значения?
Записан
sergiyboy
Интересующийся

ua
Offline Offline

« Ответ #4 : 15-09-2011 16:23 » 

Например если для групы маршрутов по одному предприятию и договору есть три типа цен в зависимости от растояния каким образом будут резатся значения для установки необходимых значений ресурсов прегистров. Так как будут пересекатся значения Здесь была моя ладья...
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 16-09-2011 06:28 » 

РегистрСведений.ЦенаМаршрутов
Измерения:
Поставщик, Маршрут, Расстояние
Ресурс:
Цена

Записи:
ПоставщикМаршрутРасстояниеЦена
ПоставщикМаршрут0100
ПоставщикМаршрут5090
ПоставщикМаршрут10080
ПоставщикМаршрут20075
Расшифровка таблицы:
От 0 до 50 - тариф 100
от 50 до 100 - тариф 90
от 100 до 200 - тариф 80
свыше 200 - тариф 75

Запрос:
Код: (1C v8)
        Запрос = Новый Запрос;
        Запрос.Текст =
          "ВЫБРАТЬ
          |     РегистрЦенаМаршрутов.Поставщик,
          |     РегистрЦенаМаршрутов.Маршрут,
          |     РегистрЦенаМаршрутов.Расстояние,
          |     РегистрЦенаМаршрутов.Цена
          |ИЗ
          |     РегистрСведений.ЦенаМаршрутов КАК РегистрЦенаМаршрутов
          |             ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
          |                     МАКСИМУМ(ЦенаМаршрутов.Расстояние) КАК Расстояние,
          |                     ЦенаМаршрутов.Поставщик КАК Поставщик,
          |                     ЦенаМаршрутов.Маршрут КАК Маршрут
          |             ИЗ
          |                     РегистрСведений.ЦенаМаршрутов КАК ЦенаМаршрутов
          |             ГДЕ
          |                     ЦенаМаршрутов.Поставщик = &Поставщик
          |                     И ЦенаМаршрутов.Маршрут = &Маршрут
          |                     И ЦенаМаршрутов.Расстояние <= &Расстояние
          |            
          |             СГРУППИРОВАТЬ ПО
          |                     ЦенаМаршрутов.Поставщик,
          |                     ЦенаМаршрутов.Маршрут) КАК ЦенаМаршрутов
          |             ПО РегистрЦенаМаршрутов.Поставщик = ЦенаМаршрутов.Поставщик
          |                     И РегистрЦенаМаршрутов.Расстояние = ЦенаМаршрутов.Расстояние
          |                     И РегистрЦенаМаршрутов.Маршрут = ЦенаМаршрутов.Маршрут"
;
        Запрос.Параметры.Вставить("Поставщик", Поставщик);
        Запрос.Параметры.Вставить("Маршрут", Маршрут);
        Запрос.Параметры.Вставить("Расстояние", РасстояниеРасчета);
        Результат = Запрос.Выполнить();


Суть: во вложенном запросе находим нужное нам расстояние, для которого задан тариф. Потом внутренним соединением (inner join) выбираем ту запись, которая нам нужна
Записан
sergiyboy
Интересующийся

ua
Offline Offline

« Ответ #6 : 16-09-2011 17:20 » 

Большое спасиба за реальную помощь в решении моей проблемы.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines