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
| потом планируется разворачивать документы и построчно пихать в ДБФ. Оттуда они будут загружаться в консолидированную базу. | | |
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
| Нет, не получится. В том смысле, что загрузчик в консолидированную базу уже есть, он грузит из других 7/8 именно из дбф. Мне лишь надо выдать такой-то файл с такими-то полями. | | |
11
- 25.09.2018 - 22:40
| Да, спасибо за совет. Сделаю. Но сначала нужно выдать требуемое. Потом уже подумаю об улучшениях. | | |
12
- 27.09.2018 - 07:54
| По моему, идея достаточно бредовая. Надо либо настривать синхронизацию, либо писать нормальные выгрузку и загрузку. Просто так "разворачивать" не получится, в документе ссылочные типы, их опять надо разворачивать, а там опять и опять. С DBF файлами Вас ожидает неминуемое фиаско | | |
13
- 27.09.2018 - 22:34
| Да не, всё уже работает. В ДБФ грузятся построчно док-ты (ИД), коды контров, товаров, кол-во и сумма. В Консолидированную базу всё отлично загружается, синхронизируется по кодам. За гибкость схемы не ручаюсь, конечно, но вот так, в лоб, всё работает. | | |
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
| Цитата:
Ну.. У всех свои тараканы в учёте. Не будем об этом. :) В любом случае, всем спасибо. Задача решена. | | |
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
| Это азбука ) Если время при отборе не надо, то проще всего даты сделать с составом "дата" и при выборке конечную дата брать как КонецДня(), как и написал уважаемый Чучундер | |
| Интернет-форум Краснодарского края и Краснодара |