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

Автозаполнение документа из регистра остатков

Автор Евгений Штукерт, 14 мар 2017, 11:35

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

Norfolk

Цитата: Евгений Штукерт от 14 мар 2017, 13:25
Выдает ошибку
{Документ.РайонК.Форма.ФормаДокумента.Форма(100,36)}: Переменная не определена (Район)
   Запрос.УстановитьПараметр("Район",<<?>>Район); (Проверка: Сервер)
Передайте с клиента на сервер ваш параметр в процедуру.
&НаКлиенте
Процедура НаименованиеРайонаПриИзменении(Элемент)
   НаименованиеРайонаПриИзмененииНаСервере(Объект.Район);
   
   КонецПроцедуры


&НаСервере
Процедура НаименованиеРайонаПриИзмененииНаСервере(Район)
   //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
   // Данный фрагмент построен конструктором.
   // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

   Запрос = Новый Запрос;
   Запрос.Текст =

как-то так

Евгений Штукерт


Norfolk


Вроде ниче не напутал.
&НаКлиенте
Процедура НаименованиеРайонаПриИзменении(Элемент)

НаименованиеРайонаПриИзмененииНаСервере(Объект.Район);
   
КонецПроцедуры


&НаСервере
Процедура НаименованиеРайонаПриИзмененииНаСервере(Район)
   //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
   // Данный фрагмент построен конструктором.
   // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

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

   РезультатЗапроса = Запрос.Выполнить().Выгрузить();
     
   Для Каждого Стр из РезультатЗапроса Цикл
     
       НоваяСтрока = Объект.Биопрепараты.Добавить();
       НоваяСтрока.НаименованиеБиопрепарата=Стр.НаименованиеБиопрепарата;
       НоваяСтрока.ЕдиницыИзмерения=Стр.ЕдИзм;
       НоваяСтрока.СрокГодности=Стр.СрокГодности;
       НоваяСтрока.ОстатокНаНачалоКол=Стр.ОстатокОстаток;
       НоваяСтрока.Изготовитель=Стр.Производитель;
       КонецЦикла;
     
   КонецПроцедуры

Евгений Штукерт

Я понимаю уже достал. Но в самой теперь 1С в документе при выборе района выдало ошибку
{Документ.РайонК.Форма.ФормаДокумента.Форма(88)}: Поле объекта не обнаружено (Район)
   НаименованиеРайонаПриИзмененииНаСервере(Объект.Район);

Вот какой код если что в форме.

&НаКлиенте
Процедура НаименованиеРайонаПриИзменении(Элемент)
   НаименованиеРайонаПриИзмененииНаСервере(Объект.Район);
   

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


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

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


   //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
           

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

Norfolk

Цитата: Евгений Штукерт от 14 мар 2017, 13:53
Я понимаю уже достал. Но в самой теперь 1С в документе при выборе района выдало ошибку
{Документ.РайонК.Форма.ФормаДокумента.Форма(88)}: Поле объекта не обнаружено (Район)
   НаименованиеРайонаПриИзмененииНаСервере(Объект.Район);

Вот какой код если что в форме.

&НаКлиенте
Процедура НаименованиеРайонаПриИзменении(Элемент)
   НаименованиеРайонаПриИзмененииНаСервере(Объект.Район);
   

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


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

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


   //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
           

КонецПроцедуры
Зайдите в отладчик. Поставьте точку останова на НаименованиеРайонаПриИзмененииНаСервере(Объект.Район);
Нажмите shift+F9 и пропишите в строку расчета результата Объект.
Какие он показывает поля?
Я же вам не предоставляю полностью адаптированный код под вашу конфигурацию, мб у вас поля по другому называются. Я показал суть.

Евгений Штукерт

В реквизитах стоит реквизит: НаименованиеРайона
Может проблема в этом?

Norfolk

Цитата: Евгений Штукерт от 14 мар 2017, 13:57
В реквизитах стоит реквизит: НаименованиеРайона
Может проблема в этом?
Конечно. У вас просто напросто у объекта нет реквизита Район.
&НаКлиенте
Процедура НаименованиеРайонаПриИзменении(Элемент)
   НаименованиеРайонаПриИзмененииНаСервере(Объект.НаименованиеРайона);
   
   КонецПроцедуры

Евгений Штукерт

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

&НаКлиенте
Процедура РайонПриИзменении(Элемент)
   
    РайонПриИзмененииНаСервере(Объект.Район);
   
КонецПроцедуры


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

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

   РезультатЗапроса = Запрос.Выполнить().Выгрузить();
     
   Для Каждого Стр из РезультатЗапроса Цикл
     
       НоваяСтрока = Объект.Биопрепараты.Добавить();
       НоваяСтрока.НаименованиеБиопрепарата=Стр.НаименованиеБиопрепарата;
       НоваяСтрока.ЕдиницыИзмерения=Стр.ЕдИзм;
       НоваяСтрока.СрокГодности=Стр.СрокГодности;
       НоваяСтрока.ОстатокНаНачалоКол=Стр.ОстатокОстаток;
       НоваяСтрока.Изготовитель=Стр.Производитель;
       КонецЦикла;

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

Добавлено: 14 мар 2017, 14:37


Единственный нюанс теперь, как сделать обнуление табличного документа при повторном изменении района

Norfolk

Цитата: Евгений Штукерт от 14 мар 2017, 14:36
Спасибо большое. Вот так выглядит конечный результат.

&НаКлиенте
Процедура РайонПриИзменении(Элемент)
   
    РайонПриИзмененииНаСервере(Объект.Район);
   
КонецПроцедуры


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

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

   РезультатЗапроса = Запрос.Выполнить().Выгрузить();
     
   Для Каждого Стр из РезультатЗапроса Цикл
     
       НоваяСтрока = Объект.Биопрепараты.Добавить();
       НоваяСтрока.НаименованиеБиопрепарата=Стр.НаименованиеБиопрепарата;
       НоваяСтрока.ЕдиницыИзмерения=Стр.ЕдИзм;
       НоваяСтрока.СрокГодности=Стр.СрокГодности;
       НоваяСтрока.ОстатокНаНачалоКол=Стр.ОстатокОстаток;
       НоваяСтрока.Изготовитель=Стр.Производитель;
       КонецЦикла;

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

Добавлено: 14 мар 2017, 14:37


Единственный нюанс теперь, как сделать обнуление табличного документа при повторном изменении района
А чем этот код отличается от вашего предыдущего, когда была ошибка?
Пардон, теперь вижу.
И еще момент вам на будущее. Не пользуйтесь конструкцией ГДЕ, если у вас есть виртуальная таблица. В вашем случае вы имеете виртуальную таблицу остатков, поэтому условие лучше задавать в параметрах виртуальной таблицы, как я вам писал выше.
|ИЗ
      |   РегистрНакопления.БиопрепаратыК.Остатки  КАК БиопрепаратыКОстатки
      |ГДЕ
      |      РегистрНакопления.БиопрепаратыК.Остатки(, Район = &Район)";

Евгений Штукерт

Стало:
ГДЕ
      |   БиопрепаратыКОстатки.Район = &Район";

Было:
ГДЕ
      |      РегистрНакопления.БиопрепаратыК.Остатки(, Район = &Район)";
Добавлено: 14 мар 2017, 14:42


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

Теги:

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

Рейтинг@Mail.ru

Поиск