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

Создание внешней обработки

Автор Baron228, 17 сен 2019, 09:51

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

Baron228

Здравствуйте, занимаюсь созданием внешней обработки, которая позволяет: Отобрать РасходныеНакладные за указанный период, Дать пользователю отметить нужные документы(поле Флажок), выполнить для отмеченных документов пересчет процента скидки и перепровести их. Занимаюсь 1с меньше месяца и поэтому столкнулся с рядом проблем. Я создал запрос который отбирает документы по дате указанной пользователем и выгрузил его в таблицу значений, однако не знаю, как связать то, что находится в форме и в модуле. Вот код:
&НаКлиенте
Процедура Сформировать(Команда)
Запрос=Новый Запрос;
Запрос.УстановитьПараметр("ДатаНачала");
Запрос.УстановитьПараметр("ДатаОкончания");


Запрос.Текст="ВЫБРАТЬ
| ОказаниеУслуги.Ссылка КАК Ссылка КАК Наименование
|ИЗ
| Документ.ОказаниеУслуги КАК ОказаниеУслуги
|ГДЕ
| ОказаниеУслуги.Дата >= &ДатаНачала
| И ОказаниеУслуги.Дата <= &ДатаОкончания";

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

Выборка = Результат.Выбрать();

Таблица1 = Выборка.Выгрузить;

КонецПроцедуры

И скриншот самой формы. Прошу подсказать, как сделать так: 1. Чтобы дата и начала параметрами передавались в запрос для отбора документов. 2. Чтобы таблица из запроса выгружалась в форму. 3. Чтобы список документов, отобранных по дате выходил на экран, нажатием кнопки сформировать.

alexandr_ll

Цитата: Baron228 от 17 сен 2019, 09:51
Здравствуйте, занимаюсь созданием внешней обработки, которая позволяет: Отобрать РасходныеНакладные за указанный период, Дать пользователю отметить нужные документы(поле Флажок), выполнить для отмеченных документов пересчет процента скидки и перепровести их. Занимаюсь 1с меньше месяца и поэтому столкнулся с рядом проблем. Я создал запрос который отбирает документы по дате указанной пользователем и выгрузил его в таблицу значений, однако не знаю, как связать то, что находится в форме и в модуле. Вот код:
&НаКлиенте
Процедура Сформировать(Команда)
Запрос=Новый Запрос;
Запрос.УстановитьПараметр("ДатаНачала",НачалоДня(ДатаНачала));
Запрос.УстановитьПараметр("ДатаОкончания",КонецДня(ДатаОкончания));


Запрос.Текст="ВЫБРАТЬ
| ОказаниеУслуги.Ссылка КАК Ссылка КАК Наименование
|ИЗ
| Документ.ОказаниеУслуги КАК ОказаниеУслуги
|ГДЕ
| ОказаниеУслуги.Дата >= &ДатаНачала
| И ОказаниеУслуги.Дата <= &ДатаОкончания";

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

Выборка = Результат.Выбрать();

Таблица1 = Выборка.Выгрузить;

КонецПроцедуры

И скриншот самой формы. Прошу подсказать, как сделать так: 1. Чтобы дата и начала параметрами передавались в запрос для отбора документов. 2. Чтобы таблица из запроса выгружалась в форму. 3. Чтобы список документов, отобранных по дате выходил на экран, нажатием кнопки сформировать.

Процедура Сформировать(Команда)
Запрос=Новый Запрос;
Запрос.УстановитьПараметр("ДатаНачала",НачалоДня(ДатаНачала));
Запрос.УстановитьПараметр("ДатаОкончания",КонецДня(ДатаОкончания));


Запрос.Текст="ВЫБРАТЬ
| ОказаниеУслуги.Ссылка КАК Ссылка КАК Наименование
|ИЗ
| Документ.ОказаниеУслуги КАК ОказаниеУслуги
|ГДЕ
| ОказаниеУслуги.Дата >= &ДатаНачала
| И ОказаниеУслуги.Дата <= &ДатаОкончания";

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

Выборка = Результат.Выбрать();

Таблица1 = Выборка.Выгрузить;

КонецПроцедуры

KOI8-R

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

Baron228

Цитата: KOI8-R от 17 сен 2019, 10:36
Получение данных запроса - на сервере, и не забывайте очищать таблицу перед выполнением команды.
Сделал вот так:
&НаСервере
Процедура Документы
Запрос=Новый Запрос;
Запрос.УстановитьПараметр("ДатаНачала");
Запрос.УстановитьПараметр("ДатаОкончания");


Запрос.Текст="ВЫБРАТЬ
| ОказаниеУслуги.Ссылка КАК Ссылка КАК Наименование
|ИЗ
| Документ.ОказаниеУслуги КАК ОказаниеУслуги
|ГДЕ
| ОказаниеУслуги.Дата >= &ДатаНачала
| И ОказаниеУслуги.Дата <= &ДатаОкончания";

Результат = Запрос.Выполнить();
СпособОбхода = ОбходРезультатаЗапроса.Прямой;
ТабЗнач = Результат.Выгрузить(СпособОбхода);


КонецПроцедуры


Но не могу понять, как в этот запрос передать дату начала и дату окончания из формы.


KOI8-R

Цитата: Baron228 от 17 сен 2019, 10:42
Но не могу понять, как в этот запрос передать дату начала и дату окончания из формы.

Вам уже писали выше:
Запрос.УстановитьПараметр("ДатаНачала",НачалоДня(ДатаНачала));
Запрос.УстановитьПараметр("ДатаОкончания",КонецДня(ДатаОкончания));

Baron228

Цитата: KOI8-R от 17 сен 2019, 10:50
Цитата: Baron228 от 17 сен 2019, 10:42
Но не могу понять, как в этот запрос передать дату начала и дату окончания из формы.

Вам уже писали выше:
Запрос.УстановитьПараметр("ДатаНачала",НачалоДня(ДатаНачала));
Запрос.УстановитьПараметр("ДатаОкончания",КонецДня(ДатаОкончания));


Да, спасибо, увидел, пришел к такому коду:

&НаКлиенте
Процедура Сформировать(Команда)


СформироватьНаСервере();
КонецПроцедуры






&НаСервере
Процедура СформироватьНаСервере ()
Запрос=Новый Запрос;

Запрос.УстановитьПараметр("ДатаНачала",НачалоДня(ДатаНачала));
Запрос.УстановитьПараметр("ДатаОкончания",КонецДня(ДатаОкончания));



Запрос.Текст="ВЫБРАТЬ
| ОказаниеУслуги.Ссылка КАК Ссылка
|ИЗ
| Документ.ОказаниеУслуги КАК ОказаниеУслуги
|ГДЕ
| ОказаниеУслуги.Дата >= &ДатаНачала
| И ОказаниеУслуги.Дата <= &ДатаОкончания";

Результат = Запрос.Выполнить();
СпособОбхода = ОбходРезультатаЗапроса.Прямой;
ТабЗнач = Результат.Выгрузить(СпособОбхода);


КонецПроцедуры


Но теперь при попытке сформировать выдает следующую ошибку:
{ВнешняяОбработка.ВнешняяОбработкаДокумента.Форма.Форма.Форма(33)}: Ошибка при установке значения атрибута контекста (ТабЗнач)
ТабЗнач = Результат.Выгрузить(СпособОбхода);
по причине:
Нельзя изменять поле, содержащее объект данных формы
Нельзя изменять поле, содержащее объект данных формы



KOI8-R

Результат = Запрос.Выполнить();
ТаблицаДокументов = Результат.Выгрузить();
Наименования.Загрузить(ТаблицаДокументов);

Baron228

Цитата: KOI8-R от 17 сен 2019, 11:11
Результат = Запрос.Выполнить();
ТаблицаДокументов = Результат.Выгрузить();
Наименования.Загрузить(ТаблицаДокументов);


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

KOI8-R

Вы из запроса получает таблицу с колонкой "ссылка" в которой находятся ссылки на документы. Метод загрузить() загружает значения только по совпадающим "именам" колонок. Либо делайте в таблице "наименования" колонку ссылка с типом "ДокументСсылка.ОказаниеУслуги", либо из запроса выводите данные с нужным псевдонимом и типом данных.

Baron228

Цитата: KOI8-R от 17 сен 2019, 11:32
Вы из запроса получает таблицу с колонкой "ссылка" в которой находятся ссылки на документы. Метод загрузить() загружает значения только по совпадающим "именам" колонок. Либо делайте в таблице "наименования" колонку ссылка с типом "ДокументСсылка.ОказаниеУслуги", либо из запроса выводите данные с нужным псевдонимом и типом данных.
Спасибо большое, наконец-то разобрался в этом! Сейчас попробую сделать проведение выделенных флажком документов, поможете еще немного разобраться, если вопросы возникнут?)

Теги:

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

Рейтинг@Mail.ru

Поиск