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

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

  Все выпуски  

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


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

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

Лучшие эксперты данной рассылки

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

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

Номер выпуска:1159
Дата выхода:01.12.2010, 03:00
Администратор рассылки:Владимир Лазурко (Профессор)
Подписчиков / экспертов:290 / 100
Вопросов / ответов:1 / 1

Вопрос № 180922: Здравствуйте, уважаемые эксперты! Прошу Вас ответить на следующий вопрос: 1С 7.7 DBF. Как организовать проведение документа с такими данными: например датадок=01.01.09 даты в табл. части могут быть от 01.01.09 до 22.11.10. На основании даты в таб...



Вопрос № 180922:

Здравствуйте, уважаемые эксперты! Прошу Вас ответить на следующий вопрос: 1С 7.7 DBF.
Как организовать проведение документа с такими данными: например датадок=01.01.09 даты в табл. части могут быть от 01.01.09 до 22.11.10. На основании даты в табл. части нужно ежедневно выдавать отчет и в конце месяца итоговый отчет. Сейчас работает на регистре оборотов, формирование отчета занимает до 30 минут.

Отправлен: 24.11.2010, 02:43
Вопрос задал: ДАС Алекс (Посетитель)
Всего ответов: 1
Страница вопроса »


Отвечает Владимир Лазурко (Профессор) :
Здравствуйте, ДАС Алекс!

Это похоже на прогнозирование чего-либо или учет затрат будущих периодов. От этого и оттолкнёмся.
В любом случае, будущими ли это датами или прошлыми и независимо от целей, ускорить работу отчета можно, создав в конфигурации новый вид документа, который и будет отражать "движения" заданной датой. Условно назовём его "вспомогательный" а тот, который используется сейчас - "основной" или "родитель".

Вот его примерная структура:
  • В свойствах вспомогательного документа галочка "Оперативный учет" должна быть снята. Это поможет проводить документ будущей датой.
  • Дата вспомогательного документа будет отражать дату из табличной части основного документа.
  • Возможно, один из реквизитов шапки вспомогательного документа будет хранить номер строки (ссылку) в документе-родителе.
  • В реквизите шапки вспомогательного документа впишем документ-родитель, если его необхо димо отследить в отчете.
  • В табличной части основного документа добавим колонку со ссылкой на вспомогательный документ для того, чтобы в случае смены даты в табличной части, можно было быстро найти вспомогательный документ и изменить его дату
  • В шапке вспомогательного документа можно разместить и дополнительную аналитику, например, значение реквизита основного документа.
  • Во вспомогательном документе можно сделать табличную часть, в которой размещать все ссылки основных документов на эту дату. Так сложнее, зато экономятся ресурсы базы данных.


Так как в версии 7.7 нельзя проводить другие документы в обработчике проведения, то либо вспомогательные документы не проводить, что затруднит их дальнейший анализ, либо проведение основного документа вынести во внешнюю процедуру, например, в обработку или форму основного документа. Поэтому недостаток этого способа - в случае перепроведения этих документов необходимо написать обработку.

Вот листи нг процедуры проведения из формы документа "Основной":
Код:
Процедура ПроведениеДокумента()

// 1. Найдём или создадим вспомогательные документы, запишем на них ссылки в табличную часть

Записать();

ВспомогательныйДокументОбъект = СоздатьОбъект("Документ.Вспомогательный");

ВыбратьСтроки();

Пока Получитьстроку() = 1 Цикл

Состояние("Обрабатывается строка "+НомерСтроки);
// Создадим или получим ссылку на вспомогательный документ
// Подразумеваем, что ВспомогательныйДокумент не проводится
Если ПустоеЗначение(ВспомогательныйДокументСсылка) = 1 Тогда
ВспомогательныйДокументОбъект.Но вый();
Иначе //ПустоеЗначение(Вспомогательный) = 1
ВспомогательныйДокументОбъект.НайтиДокумент(ВспомогательныйДокументСсылка);
Если ВспомогательныйДокументОбъект.ПометкаУдаления() = 1 Тогда
ВспомогательныйДокументОбъект.СнятьПометкуУдаления();
КонецЕсли; //ВспомигательныйДокумент.ПометкаУдаления() = 1
Если ВспомогательныйДокументОбъект.Проведен() = 1 Тогда
ВспомогательныйДокументОбъект.СделатьнеПроведенным();
КонецЕсли; //ВспомигательныйДокумент.Проведен() = 1
КонецЕсли; //ПустоеЗначение(Вспомогательный) = 1

ВспомогательныйДокументОбъект.ДатаДок = ДатаОперации;
ВспомогательныйДокументОбъект.Аналитика = Аналитика;
ВспомогательныйДокументОбъект.ОсновнойДокумент = ТекущийДокумент();
ВспомогательныйДокументОбъект.НомерСтроки = НомерСтроки;
ВспомогательныйДокументОбъект.Записать();
ВспомогательныйДокументОбъект.Провести();

ВспомогательныйДокументСсылка = ВспомогательныйДокументОбъ ект.ТекущийДокумент();

КонецЦикла; //Получитьстроку() = 1

// 2. Проведем текущий документ
Провести();

Конец Процедуры //ПроведениеДокумента



Рассмотрим 2 варианта.
Вариант 1. Данные дополнительной табличной части хранятся во вспомогательном документе (эта тема не раз поднималась на форумах про программированию 1С 7.7, одну из реализация я и предлагаю изначально).

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

Вариант 2. Данные дополнительной табличной части хранятся как значение реквизита с типом "строка неограниченной длины". Проанализировать эти данные затруднительно, но реализуемо. Этот вариант нам не подходит.

Как связать дополнить дополнительный документ данными табличной части.
Если во вспомогательном документе хран ятся данные только одной строки и в его табличной части данные вспомогательной табличной части (с вкладки Зарплата), достаточно в шапку вспомогательного документа добавить необходимые для аналитики реквизиты табличной части. Например, будет так:

Реквизиты шапки вспомогательного документа:
- (реквизит, который в таблице отображается красным квадратиком);
- Номер операции
- Наименование операции
- Цех
- Дата (как дата документа, т.е. ДатаДок)
- ... и т.д.

Реквизиты табличной части вспомогательного документа:
- Сотрудник
- Контроллер
- Количество

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

Если во вспомогательном документе хранятся все дополнительные табличные части (с вкладки зарплата):
Вероятно, есть еще один реквизит, по которому идентифицируются данные, например, НомерОперации. Выглядит это примерно так :

Табличная часть вспомогательного документа:
Код:
№/№  Номер операции      ФИО          Контролер   Количество
1. 0145 Ефремова Русалева 9
2. 0145 Вихлянцева Русалева 4
3. 0150 Соболь Демин 13
И при смене строки во вспомогательную ТЗ на вкладке Зарплата загружаются все строки табличной части вспомогательного документа, у которых номер операции равен номеру операции текущей строки.

И в таком случае анализировать достаточно просто и удобно. Необходимые для анализа реквизиты строки табличной части основного документа помещаем в табличную часть вспомогательного. По условию задачи это дата обработки. Получится что-то вроде такой таблицы:

Код:
№/№  Номер операции      ФИО          Контролер   Количество    Цех      Дата
1. 0145 Ефремова Русалева 9 011 . .
2. 0145 Вихлянцева Русалева 4 011 . .
3. 0150 Соболь Демин 13 011 04.11.10

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

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

Ответ отправил: Владимир Лазурко (Профессор)
Ответ отправлен: 29.11.2010, 13:48
Номер ответа: 264410

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


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

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

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

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

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

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

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


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

    В избранное