|
Пишу загрузку есть проблемы .. | ☑ | ||
---|---|---|---|---|
0
anisa8310
14.09.14
✎
21:36
|
Пишу загрузку, два файла-один проданные услуги, второй полученные оплаты, создаю и загружаю в документ "ОтчетОРозничныхПродажах", из первого файла загружаю в ТЧ Товары; из второго нужно в оплаты-по первому проблем не возникло-все нормально; Но как мне данные из второго массива загнать в этот же документ..второй процедурой-тогда нужно как то выцепить тот самый документ который идет загрузка..вот код: Подскажите пожалуйста, кто поопытнее, как мне лучше поступить) Заранее всех благодарю!
&НаКлиенте Процедура Загрузить(Команда) ЗагрузитьТоварыУслуги(); //ЗагрузитьОплаты(); КонецПроцедуры //Выбираем файл услуг /товаров &НаКлиенте Процедура Путь1НачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); ДиалогВыбораФайла.Фильтр = "Текстовые файлы (*.csv)|*.csv"; ДиалогВыбораФайла.Заголовок = "Выберите файл для загрузки данных"; ДиалогВыбораФайла.ПредварительныйПросмотр = Ложь; ДиалогВыбораФайла.Расширение ="csv"; ДиалогВыбораФайла.ИндексФильтра = 0; ДиалогВыбораФайла.ПолноеИмяФайла = Путь1; Если ДиалогВыбораФайла.Выбрать() Тогда Путь1 = ДиалогВыбораФайла.ПолноеИмяФайла; КонецЕсли; КонецПроцедуры //Выбираем оплаты &НаКлиенте Процедура ПутьНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); ДиалогВыбораФайла.Фильтр = "Текстовые файлы (*.csv)|*.csv"; ДиалогВыбораФайла.Заголовок = "Выберите файл для загрузки данных"; ДиалогВыбораФайла.ПредварительныйПросмотр = Ложь; ДиалогВыбораФайла.Расширение ="csv"; ДиалогВыбораФайла.ИндексФильтра = 0; ДиалогВыбораФайла.ПолноеИмяФайла = Путь; Если ДиалогВыбораФайла.Выбрать() Тогда Путь = ДиалогВыбораФайла.ПолноеИмяФайла; КонецЕсли; КонецПроцедуры Процедура ЗагрузитьТоварыУслуги() //Запросом поверяем загружался ли услуги/товары ранее Запрос = Новый Запрос; Запрос.Текст= " ВЫБРАТЬ | ОтчетОРозничныхПродажах.Ссылка, | ОтчетОРозничныхПродажах.Склад, | ОтчетОРозничныхПродажах.Товары.( | Транзакция | ) |ИЗ | Документ.ОтчетОРозничныхПродажах КАК ОтчетОРозничныхПродажах" ; РезультатРеализация=Запрос.Выполнить(); /////////////Открытие xls-документа товаров и услуг /////////////////////////////////////////////////////////////////////// Док = ПолучитьCOMОбъект(Путь1); счСтроки = 1; /////////////////////////Перебор строк услуг Пока Док.Sheets(1).Cells(счСтроки,1).Value <>Неопределено Цикл Стр=Док.Sheets(1).Cells(счСтроки,1).Value; //////////////Формирование массива услуги Массив = Новый Массив(42); Для Сч=1 По 42 Цикл Позиция = Найти(Стр, ","); Массив.Вставить(сч,Сред(Стр, 1, Позиция-1)); стр = Сред(Стр, Позиция + 1); КонецЦикла; Если СтрЗаменить(Массив[5],Символ(34),"")<>"890" и СтрЗаменить (Массив[11], Символ(34),"")<>"0" тогда /////////Поиск документа по транзакции ВыборкаРеализация = РезультатРеализация.Выбрать(); ДокументПрисутствует = Ложь; Пока ВыборкаРеализация.Следующий() Цикл ВыборкаУслуги=ВыборкаРеализация.товары.выбрать(); Пока ВыборкаУслуги.следующий() Цикл Если ВыборкаУслуги.Транзакция = Массив[2] тогда ДокументПрисутствует = Истина; КонецЕсли; КонецЦикла; КонецЦикла; ////////////////Создание нового документа Если ДокументПрисутствует = Ложь тогда //Склад = СкладФорма; /////////////////////Создаем запрос для выборки документа ЗапросДок = Новый Запрос; ЗапросДок.Текст = "ВЫБРАТЬ | ОтчетОРозничныхПродажах.Ссылка |ИЗ | Документ.ОтчетОРозничныхПродажах КАК ОтчетОРозничныхПродажах |ГДЕ | ОтчетОРозничныхПродажах.Дата = &Дата | И ОтчетОРозничныхПродажах.Склад = &Склад"; ЗапросДок.УстановитьПараметр("Дата",Дата(СтрЗаменить(СтрЗаменить(Массив[30],Символ(34),""),"-","") )); ЗапросДок.УстановитьПараметр("Склад",Склад.Ссылка); РезультатДок = ЗапросДок.Выполнить().Выбрать(); //Результат1 = Запросдок.Выполнить().Выгрузить(); Если РезультатДок.Количество()=0 тогда ///////////Создаем новый документ НовыйДокумент= Документы.ОтчетОРозничныхПродажах.СоздатьДокумент(); НовыйДокумент.Организация = Организация ; НовыйДокумент.ВидОперации=Перечисления.ВидыОперацийОтчетОРозничныхПродажах.ОтчетККМОПродажах; НовыйДокумент.Дата = Дата(СтрЗаменить(СтрЗаменить(Массив[30],Символ(34),""),"-","")); НовыйДокумент.Склад =Склад; НовыйДокумент.СтатьяДвиженияДенежныхСредств=СДДС; НовыйДокумент.СчетКасса=СчетКассы; НовыйДокумент.СуммаВключаетНДС=Истина; НовыйДокумент.ВалютаДокумента=Справочники.Валюты.НайтиПоКоду("643"); НовыйДокумент.Комментарий="Документ создан автоматически "+Массив[7]; /////////Создаем строку табличной части услуги Услуги = НовыйДокумент.Товары.Добавить(); //Ищем номенклатуру с кодом если нет тогда созлаем и подставляем в документ Если Массив[5]<>"890" тогда Если Справочники.Номенклатура.НайтиПоРеквизиту("КодФиделио",Строка(Массив[5])).Пустая()=Ложь тогда Номенклатура = Справочники.Номенклатура.НайтиПоРеквизиту("КодФиделио",Строка(Массив[5])).Ссылка; иначе Номенклатура = Справочники.Номенклатура.СоздатьЭлемент(); Номенклатура.Наименование = Строка(СтрЗаменить(Массив[6],"#",Символ(34))); Номенклатура.КодФиделио = Строка(Массив[5]); Номенклатура.Комментарий="Создан автоматически при загрузки от "+ТекущаяДата(); Номенклатура.ЕдиницаИзмерения=Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду("796"); //Указать родителя номенклатуры //нужно сравнить коды разделить товары и услуги в этом месте Номенклатура.Услуга=Истина; Номенклатура.СтавкаНДС=Перечисления.СтавкиНДС.НДС18; Номенклатура.Записать(); КонецЕсли; КонецЕсли; //Номенклатура = Справочники.Номенклатура.НайтиПоРеквизиту("КодФиделио",СтрЗаменить(Массив[5],Символ(34),"")); Услуги.Номенклатура=Номенклатура.Ссылка; Услуги.Транзакция = Массив[2]; Услуги.Цена= Массив[10]; Услуги.Количество= Массив[12]; Услуги.Сумма = Массив[12]*Массив[10]; Услуги.Гость = Массив[24]; Услуги.НомерПостоянногоСчета = СтрЗаменить(Массив[33],Символ(34),""); Услуги.НомерЧека = СтрЗаменить(Массив[38],Символ(34),""); Услуги.Субконто=Номенклатура.НоменклатурнаяГруппа; //Услуги.Субконто=Номенклатура.НоменклатурнаяГруппа; Услуги.СтавкаНДС = Номенклатура.СтавкаНДС; //Услуги.СуммаНДС=Массив[10] Услуги.СуммаНДС=Число((Услуги.Сумма/1.18)-Услуги.Сумма)*(-1); Услуги.СчетДоходов = СчетДоходов; Услуги.СчетРасходов = СчетРасходов; Услуги.СчетУчетаНДСПоРеализации = СчетУчетаНДС; //Создаем строку табличной части оплаты НовыйДокумент.Записать(); Иначе ////////////////////Добавляем новую строку услуги в существующий документ РезультатДокумент = ЗапросДок.Выполнить().Выгрузить()[0]; Документ = РезультатДокумент.Ссылка.ПолучитьОбъект(); Услуги = Документ.товары.Добавить(); Если Массив[5]<>"890" тогда Если Справочники.Номенклатура.НайтиПоРеквизиту("КодФиделио",Строка(Массив[5])).Пустая()=Ложь тогда Номенклатура = Справочники.Номенклатура.НайтиПоРеквизиту("КодФиделио",Строка(Массив[5])).Ссылка; иначе Номенклатура = Справочники.Номенклатура.СоздатьЭлемент(); Номенклатура.Наименование = Строка(СтрЗаменить(Массив[6],"#",Символ(34))); Номенклатура.КодФиделио = Строка(Массив[5]); Номенклатура.Комментарий="Создан автоматически при загрузки от "+ТекущаяДата(); Номенклатура.ЕдиницаИзмерения=Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду("796"); //Указать родителя номенклатуры //нужно сравнить коды разделить товары и услуги в этом месте Номенклатура.Услуга=Истина; Номенклатура.СтавкаНДС=Перечисления.СтавкиНДС.НДС18; Номенклатура.Записать(); КонецЕсли; КонецЕсли; //Номенклатура = Справочники.Номенклатура.НайтиПоРеквизиту("КодФиделио",СтрЗаменить(Массив[5],Символ(34),"")); Услуги.Номенклатура=Номенклатура.Ссылка; Услуги.Транзакция = Массив[2]; Услуги.Цена= Массив[10]; Услуги.Количество= Массив[12]; Услуги.Сумма = Массив[12]*Массив[10]; Услуги.Гость = Массив[24]; Услуги.НомерПостоянногоСчета = СтрЗаменить(Массив[33],Символ(34),""); Услуги.НомерЧека = СтрЗаменить(Массив[38],Символ(34),""); Услуги.Субконто=Номенклатура.НоменклатурнаяГруппа; //Услуги.Субконто=Номенклатура.НоменклатурнаяГруппа; Услуги.СтавкаНДС = Номенклатура.СтавкаНДС; Услуги.СуммаНДС=Число((Услуги.Сумма/1.18)-Услуги.Сумма)*(-1); Услуги.СчетДоходов = СчетДоходов; Услуги.СчетРасходов = СчетРасходов; Услуги.СчетУчетаНДСПоРеализации = СчетУчетаНДС; Документ.Записать(); КонецЕсли; КонецЕсли; КонецЕсли; счСтроки = счСтроки + 1; КонецЦикла; Сообщить("Реализация товаров и услуг загружена "); //////////закрываем документ Док.Application.Quit(); КонецПроцедуры Процедура ЗагрузитьОплаты() /////////////////////////////////////////////////////////////////////// Док = ПолучитьCOMОбъект(Путь); счСтроки = 1; /////////////////////////Перебор строк Пока Док.Sheets(1).Cells(счСтроки,1).Value <>Неопределено Цикл Стр=Док.Sheets(1).Cells(счСтроки,1).Value; //////////////Формирование массива услуги Массив = Новый Массив(42); Для Сч=1 По 42 Цикл Позиция = Найти(Стр, ","); Массив.Вставить(сч,Сред(Стр, 1, Позиция-1)); стр = Сред(Стр, Позиция + 1); КонецЦикла; Если СтрЗаменить(Массив[5],Символ(34),"")<>"900" и СтрЗаменить(Массив[5],Символ(34),"")<>"903" и СтрЗаменить (Массив[11], Символ(34),"")<>"0" и СтрЗаменить (Массив[21], Символ(34),"")<>"COMPANY" тогда /////////////Создаем новый документ /////////Создаем строку табличной части услуги //Услуги = НовыйДокумент.Оплата.Добавить(); Если Массив[21]<>"COMPANY" тогда ВидыОплаты = Справочники.ВидыОплатОрганизаций.НайтиПоРеквизиту("КодФиделио",СтрЗаменить(Массив[5],Символ(34),"")); Услуги.ВидОплаты=ВидыОплаты.Ссылка; Услуги.Транзакция = Массив[2]; Услуги.Контрагент = Справочники.Контрагенты.НайтиПоКоду("00-000057"); Услуги.ДоговорКонтрагента=Справочники.ДоговорыКонтрагентов.НайтиПоКоду("00-000030"); Услуги.СуммаОплаты = Массив[10]; Услуги.СчетУчетаРасчетов=ПланыСчетов.Хозрасчетный.ПродажиПоПлатежнымКартам; //НовыйДокумент.Дата = Массив[7]; //НовыйДокумент.Записать(); КонецЕсли; КонецЕсли; счСтроки = счСтроки + 1; КонецЦикла; Сообщить("Оплаты загружены "); //////////закрываем документ Док.Application.Quit(); КонецПроцедуры |
|||
1
vicof
14.09.14
✎
22:08
|
В чем проблема-то?
|
|||
2
Сияющий Асинхраль
14.09.14
✎
22:15
|
Попробуй сформулировать вопрос по-другому, не выкатывая кучу строчек кода, которые все равно никто изучать не будет. Ну и уточнить неплохо бы для какой конфы делаешь, в УТ11 в отчете о розничных продажах отдельно отплат нет в принципе. В бухе кажись есть, притом только для случая эквайринга...
|
|||
3
Зеленый Кот
14.09.14
✎
23:04
|
ну почему не будет..
мне завтра загрузку из DBF писать... пригодится! Спасибо! |
|||
4
anisa8310
15.09.14
✎
09:03
|
(3) У меня есть отличная выгрузка в DBF!
|
|||
5
anisa8310
15.09.14
✎
09:04
|
(2) В одном цикле прочитать два массива-возможно ли такое?
|
|||
6
anisa8310
15.09.14
✎
09:05
|
Док = ПолучитьCOMОбъект(Путь);
счСтроки = 1; /////////////////////////Перебор строк Пока Док.Sheets(1).Cells(счСтроки,1).Value <>Неопределено Цикл Стр=Док.Sheets(1).Cells(счСтроки,1).Value; //////////////Формирование массива услуги Массив = Новый Массив(42); Для Сч=1 По 42 Цикл Позиция = Найти(Стр, ","); Массив.Вставить(сч,Сред(Стр, 1, Позиция-1)); стр = Сред(Стр, Позиция + 1); КонецЦикла; это первый массив-и второй тоже в этом цикле профитать-но как если они одинаково называются |
|||
7
Wobland
15.09.14
✎
09:07
|
(6) хто называются?
|
|||
8
el7cartel
15.09.14
✎
09:08
|
(6) переименуй! какие проблемы)))
|
|||
9
Crush
15.09.14
✎
09:08
|
(6) Одному из массивов дать другое имя?:)
|
|||
10
anisa8310
15.09.14
✎
09:14
|
Массив = Новый Массив(42);
Для Сч=1 По 42 Цикл Позиция = Найти(Стр, ","); Массив.Вставить(сч,Сред(Стр, 1, Позиция-1)); стр = Сред(Стр, Позиция + 1); КонецЦикла; А как дать массиву другое имя? разве можно это же некий объект? |
|||
11
MaxS
15.09.14
✎
09:15
|
(3) ага, особенно этот код в цикле:
Номенклатура.ЕдиницаИзмерения=Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду("796"); Разработчики 1С платформы стараются, клиент-серверные технологии затачивают, управляемые формы... А програм_мисты_ пишут такой код. SQL сервер наверное думает - "они что там? Совсем память короткая? Зачем тыщу раз в секунду спрашивать одно и то же?" |
|||
12
Wobland
15.09.14
✎
09:15
|
ВовсеНеМассив = Новый Массив(42);
|
|||
13
Crush
15.09.14
✎
09:17
|
(10) Это переменная.
ЭтаПеременнаяСодержитМассивКакЕёНеНазови = Новый Массив(42); |
|||
14
anisa8310
15.09.14
✎
09:31
|
(11) да поняла -конечно это не окончательный вариант-учту-что надо один раз на сервер сбегать и запомнить-чтоб сто раз не бегать))
|
|||
15
anisa8310
15.09.14
✎
09:31
|
пока вот так...массивы-может надо было список значений делать...с массивом мало сталкивалась..
|
|||
16
Wobland
15.09.14
✎
09:36
|
(15) может обойтись без прокладки в виде массива или СЗ?
|
|||
17
anisa8310
15.09.14
✎
09:38
|
(16) а еще как можно? -файл раскладывать список значений и в массив)
|
|||
18
Wobland
15.09.14
✎
09:39
|
(17) складывать данные из файла сразу туда, куда надо, можно
|
|||
19
anisa8310
15.09.14
✎
09:43
|
мммм...интересненько-но пока некогда
|
|||
20
Crush
15.09.14
✎
12:04
|
(19)БУ ГА га:)
Сюжет для новой серии мультфильма "Маша и медведь":) |
|||
21
Torquader
15.09.14
✎
12:07
|
(11) А разве кеш не спасёт от такого горе-программиста ?
|
|||
22
Torquader
15.09.14
✎
12:08
|
(20) Тут больше "база и песец" просматривается.
|
|||
23
МишельЛагранж
15.09.14
✎
12:16
|
(14) ничего не понял - то ли в txt выгрузка, то ли из XLS, то ли DBF...
(6) с массивами вообще какая-то чутунька... (4) "У меня есть отличная выгрузка в DBF!" сколько раз слышал - столько раз на поверку чухня какая-то оказывалось... |
|||
24
MaxS
15.09.14
✎
12:24
|
(21) спасет, возможно, но при загрузке номенклатуры сплошь и рядом встречается код поиска номенклатуры по одному реквизиту, в цикле построчной обработки файла. Здесь с кешем сложнее.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |