Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
29 мар 2024, 08:11

Документ реализация

Автор Xon, 25 апр 2015, 14:20

0 Пользователей и 1 гость просматривают эту тему.

Xon

Здравствуйте, Форумчане. Нужна помощь.
Стоит такая задача: сделать документ реализация, который автоматически (при создании/открытии документа) заполняет табличную часть из регистра сведений на текущую дату, либо на ту дату, которую укажет пользователь (регистр сведений  заполняется пользователем и имеет две колонки период и сама номенклатура). На форме имеется только три первые колонки (№, Точка продаж(контрагент) и Адрес) остальные колонки создаются программно (на каждую номенклатуру на дату из регистра сведений своя колонка (ручка, карандаш и т.п.), т.е. сколько пользователь забьет в регистр сведений номенклатуры столько и будет колонок(на текущую дату). В общем с созданием колонок проблем нет, но проблема в том, что нужно всю эту таблицу хранить виртуально (при записи, естественно ничего не сохраняется, кроме первых трех колонок).
Вот код:
Если ДокументОбъект.ЭтоНовый() Тогда

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СписокНоменклатурыСрезПоследних.Номенклатура,
| СписокНоменклатурыСрезПоследних.Период,
| ЦеныНоменклатурыСрезПоследних.Цена
|ИЗ
| РегистрСведений.СписокНоменклатуры.СрезПоследних(&Дата, ) КАК СписокНоменклатурыСрезПоследних
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ) КАК ЦеныНоменклатурыСрезПоследних
| ПО СписокНоменклатурыСрезПоследних.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура";

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

Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();

Пока Выборка.Следующий() Цикл
Если Дата = Выборка.Период Тогда
КолонкаТЧ    = ЭлементыФормы.Товары.Колонки.Добавить();
КолонкаТЧ.ТекстШапки = Строка("" + Выборка.Номенклатура + ", " + Выборка.Цена + "");
КолонкаТЧ.УстановитьЭлементУправления(Тип("ПолеВвода"));
КонецЕсли;
КонецЦикла;
   
КолонкаТЧ    = ЭлементыФормы.Товары.Колонки.Добавить();
КолонкаТЧ.ТекстШапки = "Периодичность закупа";
КолонкаТЧ.УстановитьЭлементУправления(Тип("ПолеВвода"));
КолонкаТЧ    = ЭлементыФормы.Товары.Колонки.Добавить();
КолонкаТЧ.ТекстШапки = "День недели закупа";
КолонкаТЧ.УстановитьЭлементУправления(Тип("ПолеВвода"));
КолонкаТЧ    = ЭлементыФормы.Товары.Колонки.Добавить("Контакты");
КолонкаТЧ.УстановитьЭлементУправления(Тип("ПолеВвода"));
КолонкаТЧ    = ЭлементыФормы.Товары.Колонки.Добавить("Сумма");
КолонкаТЧ.УстановитьЭлементУправления(Тип("ПолеВвода"));
КонецЕсли;

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

DmitriyF

Цитата: Xon от 25 апр 2015, 14:20
Здравствуйте, Форумчане. Нужна помощь.
Стоит такая задача: сделать документ реализация, который автоматически (при создании/открытии документа) заполняет табличную часть из регистра сведений на текущую дату, либо на ту дату, которую укажет пользователь (регистр сведений  заполняется пользователем и имеет две колонки период и сама номенклатура). На форме имеется только три первые колонки (№, Точка продаж(контрагент) и Адрес) остальные колонки создаются программно (на каждую номенклатуру на дату из регистра сведений своя колонка (ручка, карандаш и т.п.), т.е. сколько пользователь забьет в регистр сведений номенклатуры столько и будет колонок(на текущую дату). В общем с созданием колонок проблем нет, но проблема в том, что нужно всю эту таблицу хранить виртуально (при записи, естественно ничего не сохраняется, кроме первых трех колонок).
Вот код:
Если ДокументОбъект.ЭтоНовый() Тогда

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СписокНоменклатурыСрезПоследних.Номенклатура,
| СписокНоменклатурыСрезПоследних.Период,
| ЦеныНоменклатурыСрезПоследних.Цена
|ИЗ
| РегистрСведений.СписокНоменклатуры.СрезПоследних(&Дата, ) КАК СписокНоменклатурыСрезПоследних
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ) КАК ЦеныНоменклатурыСрезПоследних
| ПО СписокНоменклатурыСрезПоследних.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура";

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

Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();

Пока Выборка.Следующий() Цикл
Если Дата = Выборка.Период Тогда
КолонкаТЧ    = ЭлементыФормы.Товары.Колонки.Добавить();
КолонкаТЧ.ТекстШапки = Строка("" + Выборка.Номенклатура + ", " + Выборка.Цена + "");
КолонкаТЧ.УстановитьЭлементУправления(Тип("ПолеВвода"));
КонецЕсли;
КонецЦикла;
   
КолонкаТЧ    = ЭлементыФормы.Товары.Колонки.Добавить();
КолонкаТЧ.ТекстШапки = "Периодичность закупа";
КолонкаТЧ.УстановитьЭлементУправления(Тип("ПолеВвода"));
КолонкаТЧ    = ЭлементыФормы.Товары.Колонки.Добавить();
КолонкаТЧ.ТекстШапки = "День недели закупа";
КолонкаТЧ.УстановитьЭлементУправления(Тип("ПолеВвода"));
КолонкаТЧ    = ЭлементыФормы.Товары.Колонки.Добавить("Контакты");
КолонкаТЧ.УстановитьЭлементУправления(Тип("ПолеВвода"));
КолонкаТЧ    = ЭлементыФормы.Товары.Колонки.Добавить("Сумма");
КолонкаТЧ.УстановитьЭлементУправления(Тип("ПолеВвода"));
КонецЕсли;

При повторном открытии документа табличная часть должна собираться в таком же порядке в каком записывал пользователь.
1С 8.2, обычное приложение
А почему нельзя записать данные в регистр при проведении????

Xon

Вот как-то так должно выглядеть это:

temrmal

Честно говоря, читая форум последнее время удивляюсь! Последние ветки своими "идеями" написания и реализации задач просто в ступор вводят. ИЗУЧАЙТЕ ТИПОВЫЕ ПРОГРАММЫ, Прежде чем разрабатывать свои!!!

Автор, во-первых данный механизм реализован в типовых УТ 10.3, УТ 11, Розница 2.0,3.0 и тд. в документе "Установка цен". Во-вторых, задача документа - делать запись в регистр, а не наооборот!!! В-третьих, представь себе если у тебя будет 100 позиций, это что 100 колонок???

vitasw

Цитата: temrmal от 28 апр 2015, 00:49В-третьих, представь себе если у тебя будет 100 позиций, это что 100 колонок???
Не надо так эмоционально. Вообще-то в типовых есть и такие примеры, с динамическим добавлением произвольного числа колонок. Взять ту же установку цен номенклатуры в УТ 10. Там, как раз, очень даже культурненько можно добавить произвольное число колонок "Виды цен". и все прекрасно работает.

temrmal

Цитата: vitasw от 28 апр 2015, 12:54
Цитата: temrmal от 28 апр 2015, 00:49В-третьих, представь себе если у тебя будет 100 позиций, это что 100 колонок???
Не надо так эмоционально. Вообще-то в типовых есть и такие примеры, с динамическим добавлением произвольного числа колонок. Взять ту же установку цен номенклатуры в УТ 10. Там, как раз, очень даже культурненько можно добавить произвольное число колонок "Виды цен". и все прекрасно работает.


Я это выше и написал)))) Но номенклатура по колонкам - это бред. Это не отчет. Это табличная часть документа. А тем более в строках документа указан контрагент

cska-fanat-kz

Цитата: vitasw от 28 апр 2015, 12:54
Цитата: temrmal от 28 апр 2015, 00:49В-третьих, представь себе если у тебя будет 100 позиций, это что 100 колонок???
Не надо так эмоционально. Вообще-то в типовых есть и такие примеры, с динамическим добавлением произвольного числа колонок. Взять ту же установку цен номенклатуры в УТ 10. Там, как раз, очень даже культурненько можно добавить произвольное число колонок "Виды цен". и все прекрасно работает.


Виды цен - НЕ аргумент. Их обычно ограниченное количество, а номенклатуры - километр!
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

vitasw

Господа, сдается мне, вы не на том акцентируете внимание, ТС явно дал понять, он понимает, чего хочет.
Цитата: Xon от 25 апр 2015, 14:20т.е. сколько пользователь забьет в регистр сведений номенклатуры столько и будет колонок(на текущую дату)
Это из той серии, когда легче дать... чем объяснить почему нельзя. ТСу надо только объяснить заказчику, что "оно" будет ехать ОЧЕНЬ медленно.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск