Имя: Пароль:
1C
1С v8
Выбор периода во внешней обработке
0 SmokingDoo
 
27.10.16
23:06
Здравствуйте, помогите пожалуйста дураку третий день пытаюсь понять! Начал учиться программированию на 1С буквально неделю назад.

Создал внешнюю обработку. При нажатии на кнопку "Выполнить", из базы запрашиваются все выданные счёт-фактуры. И их дата и время документа, заменяются датой и временем документа основания (РеализацияТоваров).

Добавил на форму два поля ввода. "НачПериода" и "КонПериода" с типом дата.

В запросе добавил строку [code]|И СчетФактураВыданный.Дата МЕЖДУ НачПериода И КонПериода[/code]
Выдаёт ошибку:
[code]"Поле не найдено "НачПериода"
И СчетФактураВыданный.Дата МЕЖДУ <<?>>НачПериода И КонПериода"[/code]
Никак не могу понять разобраться в чём ошибка, уже психовать начал :-) Ибо понимаю что проблема в каких-то элементарных вещах.


[code]Процедура СФВыданная(Кнопка)
    
    Запрос = Новый запрос;
    Запрос.Текст=    "ВЫБРАТЬ
                     |    СчетФактураВыданный.Ссылка КАК Ссылка,
                     |    СчетФактураВыданный.Номер КАК Номер,
                     |    СчетФактураВыданный.Дата КАК Дата,
                     |    СчетФактураВыданный.ДокументОснование.Номер КАК ДокументОснованиеНомер,
                     |    СчетФактураВыданный.ДокументОснование.Дата КАК ДокументОснованиеДата,
                     |    СчетФактураВыданный.СуммаДокумента КАК СуммаДокумента
                     |ИЗ
                     |    Документ.СчетФактураВыданный КАК СчетФактураВыданный
                     |ГДЕ
                     |    НЕ СчетФактураВыданный.ПометкаУдаления
                     |    И СчетФактураВыданный.Дата МЕЖДУ НачПериода И КонПериода
                     |
                     |УПОРЯДОЧИТЬ ПО
                     |    Ссылка
                     |АВТОУПОРЯДОЧИВАНИЕ";

Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
    Пока Выборка.Следующий() Цикл

        Если Выборка.ДокументОснованиеДата=null Тогда    
          Сообщить("В документе под номером " + Выборка.Номер + " от " +Выборка.Дата +  " отсутствует запись основания" );    
            
    Иначе

        ДокументОбъект = Выборка.Ссылка.ПолучитьОбъект();
        ДокументОбъект.Дата = Выборка.ДокументОснованиеДата;
        ДокументОбъект.Записать();    
        //Сообщить("НомерСФ " + Выборка.Номер + " ДатаСФ " + Выборка.Дата + " Номер реализации " + Выборка.ДокументОснованиеНомер + " Дата реализации " + Выборка.ДокументОснованиеДата + " Сумма " + Выборка.СуммаДокумента);
      
          КонецЕсли;
      КонецЦикла;
КонецПроцедуры
[/code]
1 Кадош
 
27.10.16
23:08
И СчетФактураВыданный.Дата МЕЖДУ &НачПериода И &КонПериода
Запрос.УстановитьПараметр("НачПериода ",НачПериода);
2 SmokingDoo
 
27.10.16
23:08
Толстый клиент (Обычное приложение)

Простите, что-то я не разобрался как на форуме код размещать. Нужны теги [Code]? Или это делается автоматически?
3 Кадош
 
27.10.16
23:11
Вот так делается период
http://screencast.com/t/6UKS7dMhOjMs
4 SmokingDoo
 
27.10.16
23:23
Создал период на форме как показано в видео (Спасибо! буду знать где взять)

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

Выводит ошибку:
Не задано значение параметра "НачПериода"
И СчетФактураВыданный.Дата МЕЖДУ <<?>>&НачПериода И &КонПериода

Переношу их перед запросом. При сохранении обработки выдаёт:
"Переменная не определена (Запрос)
<<?>>Запрос.УстановитьПараметр("НачПериода ",НачПериода); (Проверка: Толстый клиент (обычное приложение))"

Чтож я делаю не так? Ибо если не смогу понять это, то дальше изучать конфигурирование не имеет смысла :-(
5 Кадош
 
27.10.16
23:26
давай весь код снова
6 SmokingDoo
 
27.10.16
23:26
Процедура СФВыданная(Кнопка) //
    Запрос = Новый запрос;
    Запрос.Текст=    "ВЫБРАТЬ
                     |    СчетФактураВыданный.Ссылка КАК Ссылка,
                     |    СчетФактураВыданный.Номер КАК Номер,
                     |    СчетФактураВыданный.Дата КАК Дата,
                     |    СчетФактураВыданный.ДокументОснование.Номер КАК ДокументОснованиеНомер,
                     |    СчетФактураВыданный.ДокументОснование.Дата КАК ДокументОснованиеДата,
                     |    СчетФактураВыданный.СуммаДокумента КАК СуммаДокумента
                     |ИЗ
                     |    Документ.СчетФактураВыданный КАК СчетФактураВыданный
                     |ГДЕ
                     |    НЕ СчетФактураВыданный.ПометкаУдаления
                     |    И СчетФактураВыданный.Дата МЕЖДУ &НачПериода И &КонПериода
                     |УПОРЯДОЧИТЬ ПО
                     |    Ссылка
                     |АВТОУПОРЯДОЧИВАНИЕ";
                    

                      
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл

        Если Выборка.ДокументОснованиеДата=null Тогда    
          Сообщить("В документе под номером " + Выборка.Номер + " от " +Выборка.Дата +  " отсутствует запись основания" );    
            
    Иначе

        ДокументОбъект = Выборка.Ссылка.ПолучитьОбъект();
        ДокументОбъект.Дата = Выборка.ДокументОснованиеДата;
        ДокументОбъект.Записать();    
        //Сообщить("НомерСФ " + Выборка.Номер + " ДатаСФ " + Выборка.Дата + " Номер реализации " + Выборка.ДокументОснованиеНомер + " Дата реализации " + Выборка.ДокументОснованиеДата + " Сумма " + Выборка.СуммаДокумента);
      
          КонецЕсли;
      КонецЦикла;
КонецПроцедуры
7 SmokingDoo
 
27.10.16
23:27
Простите, не пойму почему так код вставляется.
8 Кадош
 
27.10.16
23:32
(7) ты тот же (0) код скопипастил.

    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("НачПериода ",НачПериода);
    Запрос.УстановитьПараметр("КонПериода ",КонецДня(КонПериода));
    Запрос.Текст=    "ВЫБРАТЬ
    |    СчетФактураВыданный.Ссылка КАК Ссылка,
    |    СчетФактураВыданный.Номер КАК Номер,
    |    СчетФактураВыданный.Дата КАК Дата,
    |    СчетФактураВыданный.ДокументОснование.Номер КАК ДокументОснованиеНомер,
    |    СчетФактураВыданный.ДокументОснование.Дата КАК ДокументОснованиеДата,
    |    СчетФактураВыданный.СуммаДокумента КАК СуммаДокумента
    |ИЗ
    |    Документ.СчетФактураВыданный КАК СчетФактураВыданный
    |ГДЕ
    |    НЕ СчетФактураВыданный.ПометкаУдаления
    |    И СчетФактураВыданный.Дата МЕЖДУ &НачПериода И &КонПериода
    |УПОРЯДОЧИТЬ ПО
    |    Ссылка
    |АВТОУПОРЯДОЧИВАНИЕ";
9 SmokingDoo
 
27.10.16
23:36
Форум почему то код на части.

Процедура СФВыданная(Кнопка)
Запрос.УстановитьПараметр("НачПериода ",НачПериода);
Запрос.УстановитьПараметр("НачПериода ",КонПериода);
    Запрос = Новый запрос;
    Запрос.Текст=    "ВЫБРАТЬ
                     |    СчетФактураВыданный.Ссылка КАК Ссылка,
                     |    СчетФактураВыданный.Номер КАК Номер,
                     |    СчетФактураВыданный.Дата КАК Дата,
                     |    СчетФактураВыданный.ДокументОснование.Номер КАК ДокументОснованиеНомер,
                     |    СчетФактураВыданный.ДокументОснование.Дата КАК ДокументОснованиеДата,
                     |    СчетФактураВыданный.СуммаДокумента КАК СуммаДокумента
                     |ИЗ
                     |    Документ.СчетФактураВыданный КАК СчетФактураВыданный
                     |ГДЕ
                     |    НЕ СчетФактураВыданный.ПометкаУдаления
                     |    И СчетФактураВыданный.Дата МЕЖДУ &НачПериода И &КонПериода
                     |УПОРЯДОЧИТЬ ПО
                     |    Ссылка
                     |АВТОУПОРЯДОЧИВАНИЕ";                      
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
        Если Выборка.ДокументОснованиеДата=null Тогда    
          Сообщить("В документе под номером " + Выборка.Номер + " от " +Выборка.Дата +  " отсутствует запись основания" );    
        Иначе
        ДокументОбъект = Выборка.Ссылка.ПолучитьОбъект();
        ДокументОбъект.Дата = Выборка.ДокументОснованиеДата;
        ДокументОбъект.Записать();    
        КонецЕсли;
      КонецЦикла;
КонецПроцедуры
10 Кадош
 
27.10.16
23:38
(9) бери мой код из (8)
11 bootini
 
27.10.16
23:39
Пробелы надо убрать

Тут:
Запрос.УстановитьПараметр("НачПериода ",НачПериода);
Запрос.УстановитьПараметр("НачПериода ",КонПериода);

Правильно так:
Запрос.УстановитьПараметр("НачПериода",НачПериода);
Запрос.УстановитьПараметр("НачПериода",КонПериода);
12 bootini
 
27.10.16
23:48
Тут ошибка,что сначала пытаешься установать параметры, а потом определяешь переменную "Запрос"

Запрос.УстановитьПараметр("НачПериода ",НачПериода);
Запрос.УстановитьПараметр("НачПериода ",КонПериода);
    Запрос = Новый запрос;

Если хочешь вначаля тогда ставь после определения переменной

Запрос = Новый запрос;
Запрос.УстановитьПараметр("НачПериода ",НачПериода);
Запрос.УстановитьПараметр("НачПериода ",КонПериода);
13 bootini
 
27.10.16
23:48
(12) без пробелов естественно "НачПериода"
14 SmokingDoo
 
27.10.16
23:54
(10) Кадош
(11) bootini

Спасибо Вам большое добрые люди! Заработало! А самое главное понял зачем Запрос.УстановитьПараметр нужен :-)
15 Кадош
 
27.10.16
23:55
(14) хор троекратно поет "Аллилуйа"