Имя: Пароль:
1C
1С v8
Выгрузка прайса 1с8.2
,
0 Relander
 
13.02.12
20:45
Всем привет.

Я создаю новую конфу, подскажите, как настроить автоматическую выгрузку прайса товаров в текстовый файл (используя регламентное задание), на 1с8.2? Там вроде отдельно отчет нужно создавать и сохранить как внешнюю обработку.
1 Amra
 
13.02.12
20:46
Не рановато за суперпупермега поделку взялся?
2 Maniac
 
13.02.12
20:51
(0) пиши модуль.
3 Relander
 
13.02.12
21:21
Взялся сделать это через обработку (в управляемом режиме). В форме создал кнопку и прописал параметры:

&НаСервере
Процедура ВыполнитьПриНажатии(Команда)
Текст = Новый ТекстовыйДокумент;
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
              | ЦеныСрезПоследних.Номенклатура.Наименование,
              | ЦеныСрезПоследних.Цена
              |ИЗ
              | РегистрСведений.Цены.СрезПоследних КАК ЦеныСрезПоследних";
   
   
Запрос.УстановитьПараметр("НаДату", ТекущаяДата());
Запрос.УстановитьПараметр("ТипЦен", Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000003"));
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл

 Текст.ДобавитьСтроку(Выборка.Номенклатура + Символы.Таб + Выборка.Цена);
КонецЦикла;

Текст.Записать("G:\1.txt");

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

Но никаких действий в пользовательской части не происходит, ни какой ошибки не выдает.

Подскажите в чем может быть причина?
4 Amra
 
13.02.12
22:36
Точно рано ты за свою конфу засел. Даже не знаю с чего начать "помогать"
5 Maniac
 
13.02.12
22:43
УТ11? ща как раз занимаюсь подобным. в купе до автоматической рассылки по почте клиентам.
Плюс вполне возможно формирование на каждого клиента своего прайса исходя из соглашений. гемморойная работенка...
6 Maniac
 
13.02.12
22:45
(3) сделай для проверки ТЗ в которую выгружай запрос и проверяй что у тебя.
7 Maniac
 
13.02.12
22:46
Текст.ДобавитьСтроку(Выборка.Номенклатура + Символы.Таб + Выборка.Цена);

где у тебя в запросе есть Выборка.Номенклатура
в упор не вижу. Наименование да. и то без указания псевдонима.
8 Maniac
 
13.02.12
22:48
Выводи еще код, артикул, группу, категорию и прочее. а то из за таких чудо прайсов потом клиенты волосы рвут часами херачась над тем чтобы прайс загрузить.
9 Relander
 
13.02.12
23:04
Да с УТ11
)) В (обычном режиме) выгружается только цена, с наименованием задолбался биться)
10 Maniac
 
13.02.12
23:12
так ты тормозишь и все. код не читаешь свой в котором ошибки.
11 Maniac
 
13.02.12
23:12
82 такая штука что иошибки не будет выдавать...
12 Relander
 
13.02.12
23:18
Так все выгружает, только каряво

Процедура КнопкаВыполнитьНажатие(Кнопка)
   Текст = Новый ТекстовыйДокумент;
   
   Запрос = Новый Запрос;
   Запрос.Текст = "ВЫБРАТЬ
                  |    ЦеныСрезПоследних.Номенклатура,
                  |    ЦеныСрезПоследних.Номенклатура.Наименование,
                  |    ЦеныСрезПоследних.Цена
                  |ИЗ
                  |    РегистрСведений.Цены.СрезПоследних КАК ЦеныСрезПоследних";
   
   
   Запрос.УстановитьПараметр("НаДату", ТекущаяДата());
   Запрос.УстановитьПараметр("ТипЦен", РегистрыСведений.Цены);
   
   Результат = Запрос.Выполнить();
   Выборка = Результат.Выбрать();
   
   Пока Выборка.Следующий() Цикл
       
       Текст.ДобавитьСтроку(Выборка.Номенклатура.Наименование + Символы.Таб + Выборка.Цена);
       
   КонецЦикла;                            
   
   
   Текст.Записать("G:\1.txt");
   

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



Получается :
Хлеб    20
Булка    13
Бисквит            12
Овсяное            80
С орехами    120
Конфеты            150
Торты    350
13 Ayvengo
 
13.02.12
23:19
(3) | ЦеныСрезПоследних.Номенклатура.Наименование,
сделай так | ЦеныСрезПоследних.Номенклатура.Наименование КАК Номенклатура,
и будет тебе счастье :)
14 Ayvengo
 
13.02.12
23:20
>> Текст.ДобавитьСтроку(Выборка.Номенклатура.Наименование + Символы.Таб + Выборка.Цена);
Так не стоит делать :) можно просто сделать
Текст.ДобавитьСтроку(Выборка.Наименование + Символы.Таб + Выборка.Цена);
15 Ayvengo
 
13.02.12
23:21
Запрос.УстановитьПараметр("НаДату", ТекущаяДата());
   Запрос.УстановитьПараметр("ТипЦен", РегистрыСведений.Цены);
И еще у тебя эти параметры не работают в запросе :)
16 Relander
 
13.02.12
23:45
Пусть даже с ошибками, но выгружает, а в управляемом режиме у меня ничего не работает
&НаСервере
Процедура ПриОткрытии(Отказ)
   Текст = Новый ТекстовыйДокумент;
   
   Запрос = Новый Запрос;
   Запрос.Текст = "ВЫБРАТЬ
                  |    ЦеныСрезПоследних.Номенклатура,
                  |    ЦеныСрезПоследних.Номенклатура.Наименование,
                  |    ЦеныСрезПоследних.Цена
                  |ИЗ
                  |    РегистрСведений.Цены.СрезПоследних КАК ЦеныСрезПоследних";
   
   
   Запрос.УстановитьПараметр("НаДату", ТекущаяДата());
   Запрос.УстановитьПараметр("ТипЦен", РегистрыСведений.Цены);
   
   Результат = Запрос.Выполнить();
   Выборка = Результат.Выбрать();
   
   Пока Выборка.Следующий() Цикл
       
       Текст.ДобавитьСтроку(Выборка.Номенклатура.Наименование + Символы.Таб + Выборка.Цена);
       
   КонецЦикла;
   
   
   Текст.Записать("G:\1.txt");

КонецПроцедуры
17 Ayvengo
 
13.02.12
23:51
&НаСервере
Процедура ПриОткрытии(Отказ)
   Текст  = Новый ТекстовыйДокумент;
   Запрос = Новый Запрос;
   Запрос.Текст = "ВЫБРАТЬ
                  |    ЦеныСрезПоследних.Номенклатура КАК Номенклатура,
                  |    ЦеныСрезПоследних.Цена КАК Цена
                  |ИЗ
                  |    РегистрСведений.Цены.СрезПоследних(&НаДату,&ТипЦен) КАК ЦеныСрезПоследних";
   Запрос.УстановитьПараметр("НаДату", ТекущаяДата());
   Запрос.УстановитьПараметр("ТипЦен", Справочники.ТипыЦенНоменклатуры.НайтиПоКоду(УКАЖИ СВОЙ КОД));
   Результат = Запрос.Выполнить();
   Выборка = Результат.Выбрать();
   Пока Выборка.Следующий() Цикл
       Текст.ДобавитьСтроку("" + Выборка.Номенклатура + Символы.Таб + Выборка.Цена);
   КонецЦикла;
   Текст.Записать("G:\1.txt");
КонецПроцедуры

Так должно работать без ошибок, правда не помню правильно ли запятые поставил в СрезПоследних(&НаДату,&ТипЦен)
18 Relander
 
14.02.12
00:00
(УКАЖИ СВОЙ КОД) наверно звучит глупо, но где этот код взять?
19 Ayvengo
 
14.02.12
00:01
(18) открываешь справочник "Типы цен номенклатуры" и там есть колонка "Код" от туда и берешь, к примеру "000000003" (в кавычках, не забываем) :)
20 Relander
 
14.02.12
00:12
мда звучало глупо), все же в управляемом приложении у меня не хочет работать (вообще ничего не выдает), причем ни при ПриОткрытии(Отказ), ни через кнопку созданную мной  Процедура ВыполнитьПриНажатии(Команда)
21 Ayvengo
 
14.02.12
00:23
&НаКлиенте
Процедура ВыполнитьПриНажатии(Команда)
   ЗаписатьНаДиск();
КонецПроцедуры


&НаСервере
Процедура ЗаписатьНаДиск()
   Текст  = Новый ТекстовыйДокумент;
   Запрос = Новый Запрос;
   Запрос.Текст = "ВЫБРАТЬ
                  |    ЦеныСрезПоследних.Номенклатура КАК Номенклатура,
                  |    ЦеныСрезПоследних.Цена КАК Цена
                  |ИЗ
                  |    РегистрСведений.Цены.СрезПоследних(&НаДату,&ТипЦен) КАК ЦеныСрезПоследних";
   Запрос.УстановитьПараметр("НаДату", ТекущаяДата());
   Запрос.УстановитьПараметр("ТипЦен", Справочники.ТипыЦенНоменклатуры.НайтиПоКоду(УКАЖИ СВОЙ КОД));
   Результат = Запрос.Выполнить();
   Выборка = Результат.Выбрать();
   Пока Выборка.Следующий() Цикл
       Текст.ДобавитьСтроку("" + Выборка.Номенклатура + Символы.Таб + Выборка.Цена);
   КонецЦикла;
   Текст.Записать("G:\1.txt");
КонецПроцедуры

---
Первое - процедура ПриОткрытии выполняется НаКлиенте.
Второе - кнопка нажимается НаКлиенте
Третье - запрос выполняется НаСервере

Тебе нужно понять что где можно делать в управляемом приложении :)
22 Relander
 
14.02.12
10:27
Разобрался, спасибо. Пробую установить связь с регламентым заданием и обработкой, через общий модуль (в управляемом режиме)

&;НаКлиенте
Процедура ВыполнитьПриНажатии(Команда)
   ЗаписатьНаДиск();
ОбщийМодуль.ВыполнитьНажатие();
КонецПроцедуры



ОбщийМодуль
Процедура ВыполнитьНажатие()  Экспорт
Обработки.Прайс.ПолучитьФорму(Форма.КомандыФормы.Выполнить);
КонецПроцедуры

но выходит ошибка:

{ОбщийМодуль.ОбщийМодуль.Модуль(3,31)}: Переменная не определена (Форма)
Обработки.Прайс.ПолучитьФорму(<<?>>Форма.КомандыФормы.Выполнить); (Проверка: Сервер)
23 Ayvengo
 
14.02.12
10:33
(22) не разобрался :P
регламентные задания выполняются на сервере, соответственно форме там не место ;) В регламентном задании выполняй только

&НаСервере
Процедура ЗаписатьНаДиск()
   Текст  = Новый ТекстовыйДокумент;
   Запрос = Новый Запрос;
   Запрос.Текст = "ВЫБРАТЬ
                  |    ЦеныСрезПоследних.Номенклатура КАК Номенклатура,
                  |    ЦеныСрезПоследних.Цена КАК Цена
                  |ИЗ
                  |    РегистрСведений.Цены.СрезПоследних(&НаДату,&ТипЦен) КАК ЦеныСрезПоследних";
   Запрос.УстановитьПараметр("НаДату", ТекущаяДата());
   Запрос.УстановитьПараметр("ТипЦен", Справочники.ТипыЦенНоменклатуры.НайтиПоКоду(УКАЖИ СВОЙ КОД));
   Результат = Запрос.Выполнить();
   Выборка = Результат.Выбрать();
   Пока Выборка.Следующий() Цикл
       Текст.ДобавитьСтроку("" + Выборка.Номенклатура + Символы.Таб + Выборка.Цена);
   КонецЦикла;
   Текст.Записать("G:\1.txt");
КонецПроцедуры

Советую добавить общим модуль, модуль должен иметь флажок - вызов сервера. И еще, у тебя режим файловый или серверный?
24 Relander
 
14.02.12
10:41
файловый
25 Relander
 
14.02.12
10:53
В Радченко показан пример только через общий модуль, флажок - вызов сервера в общем модуле я поставил, а вот "В регламентном задании выполняй только"   это как?
26 Ayvengo
 
14.02.12
11:03
(24) в файловом варианте тебе придется всегда держать запущенный клиент 1Ски, чтобы задания выполнялись.
(25) Добавляешь регламентное задание и указываешь там имя метода (удобно лупой добавлять, 3 точки мне не удобно) он тебе сразу откроет модуль, который ты выбрал и создаст там процедуру с названием твоего регламентного задания, вот туда и можешь засунуть текст из процедуры либо ссылку на эту процедуру
27 Relander
 
14.02.12
13:36
Отлично, работает только все равно каряво
Процедура ЗаписатьНаДиск()
   
   Сообщение = Новый СообщениеПользователю;
   Сообщение.Текст = "Запуск регламентного задания Выгрузка прайс - листа  " + ТекущаяДата();
   Сообщение.Сообщить();
   
   Текст  = Новый ТекстовыйДокумент;
   Запрос = Новый Запрос;
   Запрос.Текст = "ВЫБРАТЬ
   |    ЦеныСрезПоследних.Номенклатура,
   |    ЦеныСрезПоследних.Номенклатура.Наименование,
   |    ЦеныСрезПоследних.Цена
   |ИЗ
   |    РегистрСведений.Цены.СрезПоследних КАК ЦеныСрезПоследних";
   
   Запрос.УстановитьПараметр("НаДату", ТекущаяДата());
   Запрос.УстановитьПараметр("Цены", Справочники.Номенклатура.НайтиПоКоду("000000003"));
   Результат = Запрос.Выполнить();
   Выборка = Результат.Выбрать();
   Пока Выборка.Следующий() Цикл
       Текст.ДобавитьСтроку(" " +  Выборка.Номенклатура + Символы.Таб + Выборка.Цена);
   КонецЦикла;        
   Текст.Записать("G:\1.txt");
КонецПроцедуры



цены не друг под другом
28 Ayvengo
 
14.02.12
13:38
поменяй
       Текст.ДобавитьСтроку(" " +  Выборка.Номенклатура + Символы.Таб + Выборка.Цена);
на
       Текст.ДобавитьСтроку(" " +  Выборка.Номенклатура + Символы.Таб + Выборка.Цена +  Символы.ПС);
29 Ayvengo
 
14.02.12
13:39
Хотя, что-то фигня какая-то, добавить строку должен вставлять символ ПС автоматом
30 Ayvengo
 
14.02.12
13:49
Аль ты хочешь таблицу типа Excel? :)
31 Relander
 
14.02.12
17:07
Да нет в txt

Текст.ДобавитьСтроку(" " +  Выборка.Номенклатура + Символы.Таб + Выборка.Цена +  Символы.ПС);

цифры прилепляются к Наименованию и увеличивается интервал
32 Ayvengo
 
14.02.12
17:26
(31) >> цифры прилепляются к Наименованию и увеличивается интервал
не понятно
33 155153144627
 
14.02.12
17:29
Так вычисляй длину наименования добавляй пробелов до определенной длины, например 15 и потом добавляй цену.

Или вычисляй длину наименования и в зависимости от длины добавляй количестов Табов, если длина наименования меньше 8 то два Таба, если больше 8 то один. При условии что наименование не длинее 16. Если больше, то с тремя табами.
34 Relander
 
14.02.12
18:39
Добавление пробелов результата не дает, все цифры перемещаются одновременно

Получается :
Хлеб    20
Булка    13
Бисквит            12
Овсяное            80
С орехами    120
Конфеты            150
Торты    350
35 Relander
 
14.02.12
18:41
(32) имел ввиду что расстояние между наименованиями увеличивается
36 Ayvengo
 
14.02.12
18:56
(35) само собой :) а не проще в таблицу выводить?
37 n koretsky
 
14.02.12
20:04
(36) а зачем?
38 Ayvengo
 
14.02.12
20:33
(37) что бы красиво было, не?