К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

Как выгрузить в 8.3 данные в dbf

Гость
0 - 24.09.2018 - 21:56
Добрый вечер.
В 8ке не силён, но тут возникла простая задача выгрузить в дбф из БП 3,0 перечень расходных накладных: дата, номер, контрагент, сумма. Сочиняю внешнюю обработку, понимаю, что создание файла ДБФ, его полей и сохранение нужно делать под директивой НаКлиенте, а перебор документов - НаСервере. Но, чёрт побери, не понимаю, как, перебирая на сервере документы, заполнять НаКлиенте ДБФку? Чувствую, что, перебрав на сервере документы, нужно создать какую-то временную таблицу, запихать её в реквизит, и уже потом его на клиенте читать и заполнять. Но как конкретно это сделать? Подскажите, пожалуйста, концепцию передачи данных с сервера на клиент. Или я не так понимаю решение задачи? Что-то не разобрался я в этих УФ :(



Гость
1 - 25.09.2018 - 06:59
Все прекрасно делается на сервере
2 - 25.09.2018 - 13:58
(1) прав, + пишем временный файло во временной папке на сервере(не забудем потом стереть за собой) и в конце передаем его на клиент
Гость
3 - 25.09.2018 - 14:22
(0) Либо верни на Клиента массив записей, где запись это структура, повторяющая поля dbf.
Гость
4 - 25.09.2018 - 14:55
(0) Примерно так:

&НаСервере
Функция ВыгрузитьНаСервере()

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

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

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

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
МассивЗаписей = Новый Массив;
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Запись = Новый Структура("Номер",ВыборкаДетальныеЗаписи.Номер);
Запись.Вставить("Дата",ВыборкаДетальныеЗаписи.Дата );
Запись.Вставить("Контрагент",ВыборкаДетальныеЗапис и.Контрагент);
Запись.Вставить("СуммаДокумента",ВыборкаДетальныеЗ аписи.СуммаДокумента);
МассивЗаписей.Добавить(Запись);
КонецЦикла;
Возврат МассивЗаписей;

КонецФункции

&НаКлиенте
Процедура Выгрузить(Команда)
РасходныеНакладные = ВыгрузитьНаСервере();
Если РасходныеНакладные.Количество()=0 Тогда
Сообщить("Нет документов за выбранный период!");
Возврат;
КонецЕсли;
ДБФ = Новый XBASE;
ДБФ.Кодировка = КодировкаXBase.OEM;

ДБФ.Поля.Добавить("NUM","S",11,0);
ДБФ.Поля.Добавить("DATE","D",,);
ДБФ.Поля.Добавить("KONTR","S",200,0);
ДБФ.Поля.Добавить("SUM","N",15,2);

ИмяФайла = "\\ИмяСервера\ИмяКаталога\ИмяФайла.dbf";

ДБФ.СоздатьФайл(ИмяФайла);
ДБФ.АвтоСохранение = Истина;
Для ххх=0 По РасходныеНакладные.Количество()-1 Цикл
Запись = РасходныеНакладные[ххх];
ДБФ.Добавить();
ДБФ.NUM = Запись.Номер;
ДБФ.DATE = Запись.Дата;
ДБФ.KONTR = Запись.Контрагент;
ДБФ.SUM = Запись.СуммаДокумента;
КонецЦикла;
ДБФ.Записать();
ДБФ.ЗакрытьФайл();

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

Отредактировано US1C; 25.09.2018 в 14:57. Причина: фыа
Гость
5 - 25.09.2018 - 16:07
Спасибо за помощь, попробую.
6 - 25.09.2018 - 19:49
Зачем всё это??? в 1С такая возможность есть стандартная, только там делается эксель, а уж из экселя дбф делается на раз... Любой журнал документов такую вещь умеет делать...
Гость
7 - 25.09.2018 - 20:11
Цитата:
Сообщение от shotsdv2008 Посмотреть сообщение
Зачем всё это???
потом планируется разворачивать документы и построчно пихать в ДБФ. Оттуда они будут загружаться в консолидированную базу.
Гость
8 - 25.09.2018 - 21:31
(6) Во-первых, это уже многоходовка. Во-вторых, совсем не на раз из Excel-я dbf-ку сделать. Штатно это уже не поддерживается, придется устанавливать надстройку.
(7) А через текстовые файлы не рассматриваешь? С разделителем или xml. Реквизиты шапки и ТЧ в один dbf-файл несколько коряво получится. Я в свое время в Консолидированную базу на БП 3.0 собирал из 7-х бухгалтерий и 8-х БП 3.0 напрямую через OLE и ComConnector.
Гость
9 - 25.09.2018 - 21:55
(0) Еще как вариант. Сделай расширение для нужного документа, где после процедуры ПослеЗаписи() будет вызываться формирование файла выгрузки. Таким образом, при любом изменении документа будет заново сформирована выгрузка (для актуальности). А в консолидирующей базе будешь мониторить каталог на предмет появления нового файла и оперативно подгружать.
Гость
10 - 25.09.2018 - 22:38
Цитата:
Сообщение от US1C Посмотреть сообщение
А через текстовые файлы не рассматриваешь?
Нет, не получится. В том смысле, что загрузчик в консолидированную базу уже есть, он грузит из других 7/8 именно из дбф. Мне лишь надо выдать такой-то файл с такими-то полями.
Гость
11 - 25.09.2018 - 22:40
Цитата:
Сообщение от US1C Посмотреть сообщение
Сделай расширение для нужного документа, где после процедуры ПослеЗаписи() будет вызываться формирование файла выгрузки.
Да, спасибо за совет. Сделаю. Но сначала нужно выдать требуемое. Потом уже подумаю об улучшениях.
Гость
12 - 27.09.2018 - 07:54
По моему, идея достаточно бредовая. Надо либо настривать синхронизацию, либо писать нормальные выгрузку и загрузку. Просто так "разворачивать" не получится, в документе ссылочные типы, их опять надо разворачивать, а там опять и опять. С DBF файлами Вас ожидает неминуемое фиаско
Гость
13 - 27.09.2018 - 22:34
Цитата:
Сообщение от USSR Посмотреть сообщение
С DBF файлами Вас ожидает неминуемое фиаско
Да не, всё уже работает. В ДБФ грузятся построчно док-ты (ИД), коды контров, товаров, кол-во и сумма. В Консолидированную базу всё отлично загружается, синхронизируется по кодам. За гибкость схемы не ручаюсь, конечно, но вот так, в лоб, всё работает.
Гость
14 - 28.09.2018 - 09:22
(13) USSR имел (наверное) ввиду, что не будет выгружена вся информация ссылочных объектов, являющихся реквизитами документов. Но вам видно достаточно кода или наименования.
Гость
15 - 28.09.2018 - 09:33
(14)Я могу только предположить, что продажи выгружаются по товарам, контрагента и прочее, которые уже ЕСТЬ в консолидированной базе. Вообще как то странно из БП 3.0 продажи выгружать )
Гость
16 - 28.09.2018 - 15:11
(15) Ну да, в таком случае им достаточно ИНН контрагента выгружать или наименование товара.
Гость
17 - 29.09.2018 - 02:24
Цитата:
Сообщение от USSR Посмотреть сообщение
продажи выгружаются по товарам, контрагента и прочее, которые уже ЕСТЬ в консолидированной базе
Разумеется. Так и есть.

Цитата:
Сообщение от USSR Посмотреть сообщение
как то странно из БП 3.0 продажи выгружать
Ну.. У всех свои тараканы в учёте. Не будем об этом. :)

В любом случае, всем спасибо. Задача решена.
Гость
18 - 01.10.2018 - 22:48
Обнаружился интересный эффект..
Перебираю документы в простейшем цикле:
Выборка = Документы.РеализацияТоваровУслуг.Выбрать(НачДата, КонДата);
Пока Выборка.Следующий() Цикл
...
КЦ
Так вот, если выбрать в качестве НачДата и КонДата одинаковую дату, то цикл не делает ни одной итерации. А чтобы выгрузить документы, например, за 1.09, я должен выбрать диапазон 1.09-2.09. Это, багофича какая-то?
19 - 02.10.2018 - 01:00
18-ПереходимНа8 > в снеговике дата содержит дата+время.
и что ты хочешь получить в выборке в диапазоне
15.05.18 00:00:00 - 15.05.18 00:00:00
...?

это те не кристально ясные клюшки, это, брат, негры в черной комнате с выбитыми зубами и в черных очках...
20 - 02.10.2018 - 01:00
.. поэтому выбирай от НАЧАЛА ДНЯ до КОНЦА ДНЯ
Гость
21 - 02.10.2018 - 01:12
Цитата:
Сообщение от Чучундер Посмотреть сообщение
это те не кристально ясные клюшки, это, брат, негры в черной комнате с выбитыми зубами и в черных очках.
Вот уж воистину..
Цитата:
Сообщение от Чучундер Посмотреть сообщение
поэтому выбирай от НАЧАЛА ДНЯ до КОНЦА ДНЯ
а ведь точно, что-то такое вспоминается..
Спасибо!
Гость
22 - 02.10.2018 - 06:07
Это азбука ) Если время при отборе не надо, то проще всего даты сделать с составом "дата" и при выборке конечную дата брать как КонецДня(), как и написал уважаемый Чучундер


К списку вопросов






Copyright ©, Все права защищены