|
v7: Отчет по остаткам ТМЦ по счету 10.5 | ☑ | ||
---|---|---|---|---|
0
Duster
31.05.13
✎
21:18
|
Добрый день.
В 1С не соображаю. Поиск не помог. Задача: Получить остатки по складу. На выходе текстовый файл (сохранять программно или из таблицы на форме через стандартное меню 1С) Формат файла примерно такой: <Код запчасти><Tab><Название з.ч.><Tab><Остаток><Tab><Ед.изм> <Код запчасти><Tab><Название з.ч.><Tab><Остаток><Tab><Ед.изм> <Код запчасти><Tab><Название з.ч.><Tab><Остаток><Tab><Ед.изм> Формат файла не критичен. Разделители, конец строки(либо разделители без конца строки) любые, лишь бы можно было парсить. Могу обойтись и без единиц измерения. Помогите! Я уж измаялся весь. Работа не срочная, но сделать ее надо. Уперся в выгрузку из 1С. Очень много времени потратил на поиски - безуспешно. Спасибо. |
|||
1
Duster
31.05.13
✎
21:22
|
P.S.
Доступа к конфе у меня нет. |
|||
2
Флудер
31.05.13
✎
21:22
|
(1) "Позовите специалиста".
|
|||
3
Duster
31.05.13
✎
21:55
|
(2) Не... Самому интереснее. Вот мне немножко подскажут... )))
|
|||
4
Флудер
31.05.13
✎
22:00
|
(3) 100 баксов за совет.
|
|||
5
Duster
31.05.13
✎
22:30
|
номер ЯД сказать? ))
|
|||
6
ДенисЧ
31.05.13
✎
22:41
|
с учётом того, что "Доступа к конфе у меня нет"
10 000 евро |
|||
7
Duster
31.05.13
✎
22:45
|
(6) Ты ведь не программист?
|
|||
8
VVVP
31.05.13
✎
22:48
|
Если нет доступа к конфе, надо делать через внешнюю обработку, имхо
|
|||
9
ДенисЧ
31.05.13
✎
22:50
|
(7) нет. я получаю 10 000 евро и отдаю тысячу рублей программисту, который решит проблему
|
|||
10
angro
31.05.13
✎
22:50
|
(7) надо хоть выяснить что это бух или торговля, версию неплохо бы
|
|||
11
ДенисЧ
31.05.13
✎
22:52
|
(10) за 10000 евро пофиг :-
|
|||
12
VVVP
31.05.13
✎
22:54
|
Если это нужно изредка, то собссно, можно саму таблицу отчета в Эксель сохранить, лишнее убрать и сохранить в подходящем формате (CSV или что-то там)
|
|||
13
VVVP
31.05.13
✎
22:56
|
у нас народ так прайсы к загрузке готовил (через Эксель)
|
|||
14
VVVP
31.05.13
✎
23:03
|
т.е. порезать в Экселе шапку отчета, лишние колонки и т.д.
и потом в CSV формате сохраняешь (с разделителями) |
|||
15
Злой Бобр
01.06.13
✎
03:58
|
(0) Формат xml, который понимают практически все нормальные приложения, я так понимаю вам неподходит?.. Ну тогда если объем файла будет большим - запасайтесь вазелином и ищите вк для работы с текстом.
В (6) очень правильная стартовая сумма. |
|||
16
Злой Бобр
01.06.13
✎
04:01
|
(13) Ну тупой овце и семь верст не крюк. А необходимо было всего навсего заплатить программисту и незаниматься извратом.
У меня клиенты такого явно б непотерпели. Эх, завидую ... |
|||
17
Maximysis
01.06.13
✎
07:48
|
(1) Доступ к конфе в 7 получить не проблема))
|
|||
18
ДенисЧ
01.06.13
✎
09:48
|
Так что, моя десятьдыщьевро не проходит конкурс?
|
|||
19
Duster
01.06.13
✎
09:57
|
(12) (13) (14) Провести парсинг документа программно - не проблема. Стандартная оборотно-сальдовая ведомость не подходит т.к. слеплены вместе код запчасти и название. Код может быть разной длинны, название может начинаться с цифры - тут парсинг не возможен, увы.
(15) Можно и xml. Его я тоже смогу разобрать в программе. Для примера: размер файла txt оборотно-сальдовой ведомости в разрезе 1 субконто получается ~1.5 МБайт (8) именно внешняя обработка и нужна. Я так понимаю, это ERT файл. (17) Про доступ к конфе можно подробнее? (10) Да, чувствую свое упущение. На работе буду в понедельник - напишу. Или попробую дозвонится до кого-то, кто по сменам работает. |
|||
20
Холст
01.06.13
✎
11:30
|
(0) если сам хочешь разобраться то конкретно в чем проблема ?
в открывании конфигуратора ? в коде получения остатков ? в коде получения доп реквизитов ? в коде вывода в файл ? ответ "во всем вместе" не интересен, т.к. при этом ответе за тебя надо всю обработку написать, это могут за 50евро сделать кодеры с 1Слансера |
|||
21
Duster
01.06.13
✎
17:28
|
(20) Проблема в том, что я даже не знаю, с чего начать.
На этом форуме программисты 1С вообще появляются? Не думаю, что трудно сделать выгрузку в текстовый файл остатков по счету 10.5 |
|||
22
Duster
01.06.13
✎
17:30
|
(20) хоть какой-то кусок кода для начала, чтобы можно было зацепиться. Хотя бы запрос какой нужен?
|
|||
23
ДенисЧ
01.06.13
✎
19:20
|
Не поверишь, запрос не обязателен, хотя желателен
|
|||
24
angro
01.06.13
✎
20:37
|
(22) самое простое конструктор запустить в конфигураторе, там потыкать что-нибудь получиться.
тебе надо конструкторы-новый отчет |
|||
25
angro
01.06.13
✎
20:39
|
||||
26
angro
01.06.13
✎
20:40
|
||||
27
oleg_prg
01.06.13
✎
21:05
|
**При условии что остатки хранятся на бух.итогах тогда
1 Делай обработкой 2 Код для получения остатков такой БИ = СоздатьОбъект("БухгалтерскиеИтоги"); БИ.ИспользоватьСубконто(ВидыСубконто.МестаХранения,,1); БИ.ИспользоватьСубконто(ВидыСубконто.Материалы,,1); БИ.ИспользоватьСубконто(ВидыСубконто.Цены,Партия,1); БИ.ВыполнитьЗапрос(Дата1, Дата2, "10.5"); БИ.ВыбратьСубконто(1); Пока БИ.ПолучитьСубконто(1) = 1 Цикл БИ.ВыбратьСубконто(2); Пока БИ.ПолучитьСубконто(2) = 1 Цикл БИ.ВыбратьСубконто(3); Пока БИ.ПолучитьСубконто(3) = 1 Цикл Сообщить(СокрЛП("склад "+БИ.Субконто(1))+" код "+СокрЛП(БИ.Субконто(2))+" наименование "+СокрЛП(БИ.Субконто(2))+" ост сумма "+СокрЛП(БИ.СКД("С"))+" кол "+СокрЛП(БИ.СКД("К"))); КонецЦикла; КонецЦикла; КонецЦикла; |
|||
28
oleg_prg
01.06.13
✎
21:06
|
БИ.ИспользоватьСубконто(ВидыСубконто.МестаХранения,,1);
аналитика может отличаться т.е. посмотри как называются субконто в плане счетов |
|||
29
zak555
01.06.13
✎
21:08
|
(27) не взлетит
|
|||
30
oleg_prg
01.06.13
✎
21:16
|
(29) да я образно человеку написал код, чтобы он понимал от чего отталкиваться
вот еще пример как выгружать данные в текстовый фай Текст = СоздатьОбъект("Текст"); Текст.ДобавитьСтроку("Привет"); Текст.Записать("D:\test.txt"); ну а если эта инфа не поможет, то лучше ТС пригласить специалиста или обратиться на сайт фрилансеров 1С ) |
|||
31
oleg_prg
01.06.13
✎
21:18
|
(27) pfvtybnm БИ.ИспользоватьСубконто(ВидыСубконто.Цены,Партия,1); на БИ.ИспользоватьСубконто(ВидыСубконто.Цены,,1); при не забывая об аналитике, в данном примере аналитика может отличаться!!!
Пишу без проверки, так что ошибки в коде не исключаю |
|||
32
Злопчинский
01.06.13
✎
21:19
|
(27) не взлетит.
|
|||
33
oleg_prg
01.06.13
✎
21:28
|
Процедура Сформировать()
Текст = СоздатьОбъект("Текст"); БИ = СоздатьОбъект("БухгалтерскиеИтоги"); БИ.ИспользоватьСубконто(ВидыСубконто.МестаХранения,,1); БИ.ИспользоватьСубконто(ВидыСубконто.Материалы,,1); БИ.ИспользоватьСубконто(ВидыСубконто.Цены,,1); БИ.ВыполнитьЗапрос("01.06.2013", "01.06.2013", "10.5"); БИ.ВыбратьСубконто(1); Пока БИ.ПолучитьСубконто(1) = 1 Цикл БИ.ВыбратьСубконто(2); Пока БИ.ПолучитьСубконто(2) = 1 Цикл БИ.ВыбратьСубконто(3); Пока БИ.ПолучитьСубконто(3) = 1 Цикл Текст.ДобавитьСтроку(СокрЛП("склад "+БИ.Субконто(1))+" код "+СокрЛП(БИ.Субконто(2))+" наименование "+СокрЛП(БИ.Субконто(2))+" ост сумма "+СокрЛП(БИ.СКД("С"))+" кол "+СокрЛП(БИ.СКД("К"))); КонецЦикла; КонецЦикла; КонецЦикла; Текст.Записать("D:\test.txt"); КонецПроцедуры |
|||
34
Duster
02.06.13
✎
19:36
|
Наконец-то добрался до компьютера.
(33) Олег, спасибо Вам большое. Ваш код немного переделал - убрал получение и вывод той информации, которая мне не нужна. Еще Текст.ДобавитьСтроку(СокрЛП("склад "+БИ.Субконто(1))+" код "+СокрЛП(БИ.Субконто(2))+" наименование "+СокрЛП(БИ.Субконто(2))+... тут после " код " и после " наименование " используется одно и то же субконто, выводится наименование. А как получить код? Вот мой код: Процедура Сформировать() Текст = СоздатьОбъект("Текст"); БИ = СоздатьОбъект("БухгалтерскиеИтоги"); БИ.ИспользоватьСубконто(ВидыСубконто.Материалы,,1); БИ.ВыполнитьЗапрос("02.06.2013", "02.06.2013", "10.5"); БИ.ВыбратьСубконто(1); Пока БИ.ПолучитьСубконто(1) = 1 Цикл Текст.ДобавитьСтроку("???" + CHR(9) + СокрЛП(БИ.Субконто(1)) + Chr(9) + СокрЛП(БИ.СКД("К"))); КонецЦикла; Текст.Записать("D:\test.txt"); КонецПроцедуры И пример вывода в файл: ??? Автоматический выключатель 1.6кВт 1 ??? Болт М8х15 20 ??? Гайка М8 20 ??? Изолента 3 ??? Кабель 4мм2 3+1 жилы 20 ??? Клеммная колодка для реле 20 ??? Кронштейн 1 ??? Лампочка 24V 10 На месте вопросов должен быть код. Как сделать, тоже не знаю. Да, конфигурация на работе переписана: там код используется специфический - как у поставщика зап.частей. В типовой конфигурации не смог такого формата код ввести. Завтра уточню, может быть там другое поле. |
|||
35
Злопчинский
02.06.13
✎
19:42
|
CHR(9)
Можно писать так: "какой-тотекст"+СимволТабуляции+Какой-то текст |
|||
36
Злопчинский
02.06.13
✎
19:42
|
вместо слагаемого "???" используй
БИ.Субконто(1).Код |
|||
37
Злопчинский
02.06.13
✎
19:43
|
или если это кодпоставщика то
БИ.Субконто(1).тутИдентификаторРеквизитаТипаАртикулПоставщикаИзКарточкиТовара |
|||
38
Злопчинский
02.06.13
✎
19:53
|
на. вот может пригодится выгрузка на фтп
. //**************************************************************************************************************************** //БЛОК ВЫГРУЗКИ НА ФТП ******************************************************************************************************* //**************************************************************************************************************************** ТекстВыгрузки = СоздатьОбъект("Текст"); ТекстВыгрузки.ДобавитьСтроку("open " + "xxx.xxx.xxx.xxx"); //IP адрес фтп-сервера ТекстВыгрузки.ДобавитьСтроку("тут логин"); ТекстВыгрузки.ДобавитьСтроку("тут пароль"); ТекстВыгрузки.ДобавитьСтроку("cd office"); //в какую папочку от корня ТекстВыгрузки.ДобавитьСтроку("put " + КаталогПользователя() + (ИмяПрайса+".csv")); ТекстВыгрузки.ДобавитьСтроку("bye"); ТекстВыгрузки.Записать(КаталогПользователя() + "ftp.txt"); ТекстВыгрузки = ""; КомандаСистемы("ftp -s:" + КаталогПользователя() + "Ftp.txt>> " + (КаталогПользователя() + "report.txt")); ФС.УдалитьФайл(КаталогПользователя() + "ftp.txt"); ТекстВыгрузки = СоздатьОбъект("Текст"); ТекстВыгрузки.Открыть(КаталогПользователя() + "report.txt"); КС = ТекстВыгрузки.КоличествоСтрок()-4; //если все нормально - то в этой строке файла должно быть соотв.сообщение //проверим его Попытка строкаКомплете = ТекстВыгрузки.ПолучитьСтроку(КС); Если Найти(Нрег(строкаКомплете),"226 transfer complete") = 0 Тогда а=1; а=а/0; КонецЕсли; тПротокол = ТекущееВремя()+" файл данных успешно отправлен на сервер интернет-магазина"+РазделительСтрок+тПротокол; Форма.Обновить(); ТекстВыгрузки = ""; ФС.УдалитьФайл(КаталогПользователя() + (ИмяПрайса+".csv")); ФС.УдалитьФайл(КаталогПользователя() + "report.txt"); Исключение тПротокол = ТекущееВремя()+" ПРОИЗОШЛА ОШИБКА ВО ВРЕМЯ ЗАГРУЗКИ СФОРМИРОВАННОГО ФАЙЛА НА СЕРВЕР ИНЕТРНЕТ-МАГАЗИНА"+РазделительСтрок+тПротокол; тПротокол = ТекущееВремя()+ИмяПрайса+РазделительСтрок+тПротокол; Форма.Обновить(); ТекстВыгрузки.Показать(); ТекстВыгрузки = ""; КонецПопытки; //**************************************************************************************************************************** //БЛОК ВЫГРУЗКИ НА ФТП ******************************************************************************************************* //**************************************************************************************************************************** |
|||
39
Duster
02.06.13
✎
19:58
|
(36) Ага! Заработало.
000000012 Автоматический выключатель 1.6кВт 1 (37) Смысл уловил. Теперь на реальном объекте мне просто нужно будет правильно этот реквизит(или как это в 1С называется) задать. (38) Так... фтп - это интересно. Вижу конструкцию Попытка Исключение Конец попытки; Надо это прикрутить на попытку записи в файл. |
|||
40
Duster
02.06.13
✎
20:23
|
Процедура Сформировать()
Текст = СоздатьОбъект("Текст"); БИ = СоздатьОбъект("БухгалтерскиеИтоги"); БИ.ИспользоватьСубконто(ВидыСубконто.Материалы,,1); БИ.ВыполнитьЗапрос("02.06.2013", "02.06.2013", "10.5"); БИ.ВыбратьСубконто(1); Пока БИ.ПолучитьСубконто(1) = 1 Цикл Текст.ДобавитьСтроку(БИ.Субконто(1).Код + CHR(9) + СокрЛП(БИ.Субконто(1)) + Chr(9) + СокрЛП(БИ.СКД("К"))); КонецЦикла; Попытка Текст.Записать("D:\test.txt"); Сообщить(ТекущееВремя() +" Файл " + Chr(34) + "D:\test.txt" + Chr(34) + " успешно записан."); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; КонецПроцедуры Пока оставляю так. Завтра опробую на пациенте ))) Спасибо большое. |
|||
41
Duster
02.06.13
✎
21:30
|
Созрел вопрос: будет ли разделитель Tab (Chr(9)) уникальным? Если в наименовании запчасти введен пользователем случайно знак табуляции, возникнут проблемы. Да, его нельзя ввести непосредственно в строку "Наименование" с клавиатуры, но скопипастить получается. Кто какие разделители использует???
|
|||
42
Злопчинский
03.06.13
✎
03:22
|
Аlt+0135 ‡ можно - но его тоже можно с клавы...
. ну и уникального разделителя вообще если так подходить нет возможности обеспечить. . перед выводом строки нормализуй ее, исключая недопустимые символы. а правильнее это делать в момент записи нового/измененного элемента справочника... . во-вторых, вряд ли среди 4000 позиций будет 3000 позиций с кривым символом. ну будет 1-2 позиции. нра этих позициях - если загрузка в инет магазин написана правильно - загрузк азаткнется, ибо где-нить закосячит что-нить.. или цена нулевая или еще что... а если вдруг и не закосячит и проетит 1-2 неправильные позиции в магазин - ну и хрен с ним. возможны два варианта - если это ходовые позиции - они будуь выловдены практически сразу, если ничего никто не заметит - это нафиг никому не нужно... |
|||
43
Duster
04.06.13
✎
08:01
|
Точно! В самой выгрузке из 1С попробую обработать
|
|||
44
zak555
04.06.13
✎
08:03
|
куда файл будет загружаться ?
|
|||
45
Злопчинский
04.06.13
✎
12:15
|
(39) Надо это прикрутить на попытку записи в файл.
надо аккрутно крутить, а то потом тебе выкрутят яйца. на заметку при работе с объектом ФС - могут давать ошибки, но не порождать исключительной ситуации |
|||
46
Duster
04.06.13
✎
12:31
|
(44) Загружается уже. В базу MS ACCESS через VBA
(45) Я планировал это сделать перед добавлением строки в объект Текст через промежуточную строковую переменную Примерно так: Пока БИ.ПолучитьСубконто(1) = 1 Цикл Поле1 = БИ.Субконто(1).Код; Поле2 = СокрЛП(БИ.Субконто(1)); Поле3 = СокрЛП(БИ.СКД("К")); //Тут вырезать лишнее из каждой строковой переменной Текст.ДобавитьСтроку(Поле1 + CHR(9) + Поле2 + Chr(9) + Поле3); КонецЦикла; Покурю справку по работе со строками. |
|||
47
Duster
04.06.13
✎
12:45
|
Процедура Сформировать()
Текст = СоздатьОбъект("Текст"); БИ = СоздатьОбъект("БухгалтерскиеИтоги"); БИ.ИспользоватьСубконто(ВидыСубконто.Материалы,,1); БИ.ВыполнитьЗапрос("03.06.2013", "03.06.2013", "10.5"); БИ.ВыбратьСубконто(1); Пока БИ.ПолучитьСубконто(1) = 1 Цикл Поле1 = СтрЗаменить(БИ.Субконто(1).Код, Chr(9), " "); Поле2 = СтрЗаменить(СокрЛП(БИ.Субконто(1)), Chr(9), " "); Поле3 = СтрЗаменить(СокрЛП(БИ.СКД("К")), Chr(9), " "); //Т.к. использую разделитель Tab, то в значениях полей этого символа быть не должно. // Заменяю их на пробелы Текст.ДобавитьСтроку(Поле1 + CHR(9) + Поле2 + Chr(9) + Поле3); КонецЦикла; //Пока БИ.ПолучитьСубконто(1) = 1 Цикл // Текст.ДобавитьСтроку(БИ.Субконто(1).Код + CHR(9) + СокрЛП(БИ.Субконто(1)) + Chr(9) + СокрЛП(БИ.СКД("К"))); // КонецЦикла; Попытка Текст.Записать("E:\test.txt"); Сообщить(ТекущееВремя() +" Файл " + Chr(34) + "E:\test.txt" + Chr(34) + " успешно записан."); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; КонецПроцедуры |
|||
48
Duster
04.06.13
✎
12:54
|
Собственно, можно было без переменных Поле1, Поле2, Поле3.
|
|||
49
Duster
04.06.13
✎
12:59
|
Вот еще вопрос: как мне единицы измерения получить. Чтобы на выходе было
<Код> <Наименование> <Количество> <Ед.Измерения> |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |