Имя: Пароль:
1C
1С v8
Документ реализация
,
0 vitalik_1292
 
25.04.15
14:29
Здравствуйте, Форумчане. Нужна помощь.
Стоит такая задача: сделать документ реализация, который автоматически (при создании/открытии документа) заполняет табличную часть из регистра сведений на текущую дату, либо на ту дату, которую укажет пользователь (регистр сведений  заполняется пользователем и имеет две колонки период и сама номенклатура). На форме имеется только три первые колонки (№, Точка продаж(контрагент) и Адрес) остальные колонки создаются программно (на каждую номенклатуру на дату из регистра сведений своя колонка (ручка, карандаш и т.п.), т.е. сколько пользователь забьет в регистр сведений номенклатуры столько и будет колонок(на текущую дату). В общем с созданием колонок проблем нет, но проблема в том, что нужно всю эту таблицу хранить виртуально (при записи, естественно ничего не сохраняется, кроме первых трех колонок).
Вот код:
[code]Если ДокументОбъект.ЭтоНовый() Тогда
        
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    СписокНоменклатурыСрезПоследних.Номенклатура,
        |    СписокНоменклатурыСрезПоследних.Период,
        |    ЦеныНоменклатурыСрезПоследних.Цена
        |ИЗ
        |    РегистрСведений.СписокНоменклатуры.СрезПоследних(&Дата, ) КАК СписокНоменклатурыСрезПоследних
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ) КАК ЦеныНоменклатурыСрезПоследних
        |        ПО СписокНоменклатурыСрезПоследних.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура";

    Запрос.УстановитьПараметр("Дата", Дата);

    Результат     = Запрос.Выполнить();
    Выборка     = Результат.Выбрать();
        
    Пока Выборка.Следующий() Цикл
        Если Дата = Выборка.Период Тогда
            КолонкаТЧ                = ЭлементыФормы.Товары.Колонки.Добавить();
            КолонкаТЧ.ТекстШапки     = Строка("" + Выборка.Номенклатура + ", " + Выборка.Цена + "");
            КолонкаТЧ.УстановитьЭлементУправления(Тип("ПолеВвода"));
        КонецЕсли;
    КонецЦикла;
        
        КолонкаТЧ                = ЭлементыФормы.Товары.Колонки.Добавить();
        КолонкаТЧ.ТекстШапки     = "Периодичность закупа";
        КолонкаТЧ.УстановитьЭлементУправления(Тип("ПолеВвода"));
        КолонкаТЧ                = ЭлементыФормы.Товары.Колонки.Добавить();
        КолонкаТЧ.ТекстШапки     = "День недели закупа";
        КолонкаТЧ.УстановитьЭлементУправления(Тип("ПолеВвода"));
        КолонкаТЧ                = ЭлементыФормы.Товары.Колонки.Добавить("Контакты");
        КолонкаТЧ.УстановитьЭлементУправления(Тип("ПолеВвода"));
        КолонкаТЧ                = ЭлементыФормы.Товары.Колонки.Добавить("Сумма");
        КолонкаТЧ.УстановитьЭлементУправления(Тип("ПолеВвода"));
    КонецЕсли;
[/code]
При повторном открытии документа табличная часть должна собираться в таком же порядке в каком записывал пользователь.
1 GROOVY
 
25.04.15
14:44
Создать реальную ТЧ не предлагать?
А то ведь смешно получится, сегодня юзер в документе одну позицию видит, а завтра открывая его уже другую...
2 GROOVY
 
25.04.15
14:44
НАфига тогда документ не ясно.
3 vitalik_1292
 
25.04.15
15:38
Создать реальную ТЧ не подходит, т.к. количество номенклатуры на каждую дату разное ( соответственно и колонок тоже).
В том то и проблема, чтобы каждый раз не была разная таблица и чтобы данные записывались в виртуальную таблицу и при открытии каждый раз с помощью неё заполнялись.
4 la luna llena
 
25.04.15
16:07
Зачем?
5 Тындр
 
25.04.15
16:49
Пипец. давайте удалять гланды через задний вход.
6 rabbidX
 
25.04.15
17:24
В чем смысл колонки под каждую номенклатуру? Как это планируется использовать?
7 vitalik_1292
 
26.04.15
13:46
Вот как должно выглядеть: http://rghost.ru/8FNnVrVGY.
8 ДенисЧ
 
26.04.15
13:48
9 la luna llena
 
26.04.15
14:34
(7) так сделай отчет, зачем тебе в один документ реализации впихивать десяток контрагентов?
10 nemox
 
27.04.15
10:32
Если нужен такой документ, то я бы сделал так:

Создаешь ТЧ в документе с колонками "Контрагент", "Номенклатура", если необходимо - то "Адрес"(если он пишется в регистр сведений, если берется из  карточки контрагента, то столбец не нужен).

Затем при заполнении получается следующий вид ТЧ документа
Контрагент  Номенклатура
Вася        Карандаш
Вася        Тетрадь
Петя        Карандаш
И т.д.

На форме размещаем табличное поле и в него уже выводим информацию из ТЧ в нужном виде, т.е. в виде столбцов с группировкой по конрагентам.
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший