Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: 1С для программиста

  Все выпуски  

RFpro.ru: 1С для программиста


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

Лиджи-Гаряев Владимир
Статус: Практикант
Рейтинг: 1516
∙ повысить рейтинг »
Владимир Лазурко
Статус: Профессионал
Рейтинг: 986
∙ повысить рейтинг »
Краюшкин Игорь Валерьевич
Статус: Студент
Рейтинг: 582
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Программирование / 1С для программиста

Номер выпуска:1154
Дата выхода:07.09.2010, 09:30
Администратор рассылки:Владимир Лазурко, Профессионал
Подписчиков / экспертов:296 / 110
Вопросов / ответов:1 / 1

Вопрос № 179840: Уважаемые эксперты помогите 1 с Предприятие 7.7 Зик нужно в отчете сравнить реквизиты документа(шапки, документы одного вида ) таблица например Датадок номерДак Значение1 Значение2 01.01.10 0001 ...



Вопрос № 179840:

Уважаемые эксперты помогите

1 с Предприятие 7.7 Зик
нужно в отчете сравнить реквизиты документа(шапки, документы одного вида )
таблица например
Датадок номерДак Значение1 Значение2
01.01.10 0001 112 122
01.01.10 0002 122 156
02.01.10 0003 156 160
нужно сравнить значение2 первого документа с значением1 второго документа затем значение2 второго с значением1 следующего док и т.д.

Отправлен: 02.09.2010, 09:24
Вопрос задал: Надежда, Посетитель
Всего ответов: 1
Страница вопроса »


Отвечает Владимир Лазурко, Профессионал :
Здравствуйте, Надежда.

Сделать это просто:
1. Нам понадобится переменная, которая будет хранить значение реквизита предыдущего документа.
2. Кроме того понадобится переменная, в которой будет храниться флаг - это первый документ выборки или нет.
3. Организовываем выборку документов и перебираем её в цикле.
4. Для первого документа запоминаем значение второго реквизита с конечными показаниями в промежуточную переменную.
5. Устанавливаем флаг, что первый документ из выборки обработали.
6. Получаем следующий документ
7. Сравниваем реквизит начальных показаний текущего документа со значеним вспомогательной переменной.
8. Запоминаем значение второго реквизита с конечными показаниями в промежуточную переменную.
9. Возвращаемся к пункту 6.

Вот решение:

Код:
//*******************************************
// Процедура генерации запроса Сформировать.
//
Процедура Сформировать()
Перем Запрос, ТекстЗапроса, Таб;
//Создание объекта типа Запрос
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|ДокументЗадачи179840 = Документ.ДокументЗадачи179840.ТекущийДокумент;
|Реквизит1 = Документ.ДокументЗадачи179840.Реквизит1;
|Реквизит2 = Документ.ДокументЗадачи179840.Реквизит2;
|Группировка ДокументЗадачи179840;
|"//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;

// Подготовка к заполнению выходных форм данными запроса
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица(" Сформировать");
// Заполнение полей "Заголовок"
Таб.ВывестиСекцию("Заголовок");
Состояние("Заполнение выходной таблицы...");
Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);

ПерваяЗапись=1; //Флаг того, что в выборке первая запись, её сравнивать не с чем
Реквизит2ПредыдущегоДокумента=0;
Пока Запрос.Группировка(1) = 1 Цикл

Различия = "";
Если ПерваяЗапись=1 Тогда
// Запомним 2-й реквизит первого документа
Реквизит2ПредыдущегоДокумента = Запрос.Реквизит2;
ПерваяЗапись=0;
Иначе
// Сравним 1-й ревизит текущего документа со вторым предыдущего
Если НЕ (Запрос.Реквизит1=Реквизит2ПредыдущегоДокумента) Тогда
Различия = "Разница реквизита2 с реквизитом1 предыдущего документа = "
+(Запрос.Реквизит1-Реквизит2ПредыдущегоДокумента);
//Таб.ВывестиСекцию("Различия");
КонецЕсли;
КонецЕсли;
// Заполнение полей Докумен тЗадачи179840
Реквизит2ПредыдущегоДокумента = Запрос.Реквизит2;
Таб.ВывестиСекцию("ДокументЗадачи179840");

КонецЦикла;
// Вывод заполненной формы
Таб.ТолькоПросмотр(1);
Таб.Показать("Сформировать", "");
КонецПроцедуры



Загрузить демо-базу с решением можно по ссылке: 179840.zip (15.2 кб)

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

В Вашем случае в запрос нужно еще добавит ь отбор документов по указанному госномеру автомобиля. Например, так:

В таком случае в запросе сделайте группировку еще и по госном ерам, которая должна быть до группировки по документам.
В результате будет выбран один автомобиль (госномер) и все его документы, затем следующий автомобиль и его документы. Тогда разрыва связи не будет.

Код:
|Реквизит1
= Документ.ДокументЗадачи179840.Реквизит1;
|Реквизит2 = Документ.ДокументЗадачи179840.Реквизит2;
|Госномер = Документ.ДокументЗадачи179840.Госномер;
...
|Условие(ГосНомер = ВыбГосномер);
...
|Группировка ГосНомер;
|Группировка ДокументЗадачи179840;

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

Успехов!
С уважением, Владимир.

Ответ отправил: Владимир Лазурко, Профессионал
Ответ отправлен: 04.09.2010, 07:45
Номер ответа: 262963

Оценка ответа: 3

Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 262963 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2010, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2010.6.19 от 06.09.2010

    В избранное