|
Загрузка с текстового документа | ☑ | ||
---|---|---|---|---|
0
Triton_11
09.04.14
✎
08:58
|
У меня есть данные на текстовом документе
1.Конфеты;Черный;16;5 2.Булочки;Сладкий;900;25 3.Печенье;Соленый;958;12 4.Шоколад;Горький;6;14 5.Куртка;Синтипон;3;30 6.Брюки;Коричневый;24;20 7.лопата;совковая;2;2000 8.лопата;плохая;6;789 9.ведро;черный;6;785 и у меня есть внешняя обработка с табличным полем колонки табличного поля Номенклатура Характеристики Количество Цена Сумма Тип значения у колонки Номенклатура СправочникСсылкаНоменклатура Тип знаечния у у колонки Характеристики СправочникСсылкаХарктеристикиНоменклатуры данные с 1 по 6 реально существуют в справочнике номенклатура а данные с 7 по 9 не сушествуют в справочнике номенклатура мне необходимо при нажатий кнопки автоматически создать номенклатуру и характеристики которые не сушествуют в справочнике номенклатура и характеристики номенклатуры Как это можно реализовать |
|||
1
butterbean
09.04.14
✎
08:59
|
позвать программиста
|
|||
2
Cube
09.04.14
✎
08:59
|
(0) Это программировать надо...
|
|||
3
shuhard
09.04.14
✎
08:59
|
(0)[мне необходимо при нажатий кнопки ]
купи эту кнопку |
|||
4
Wobland
09.04.14
✎
09:00
|
пятый день пошёл что со знаками препинания
|
|||
5
Wobland
09.04.14
✎
09:01
|
вот у меня прям щас есть код читающий с файла и есть код создающий отсутствующую номенклатуту справишься
|
|||
6
Triton_11
09.04.14
✎
09:03
|
(4) норм
примерно покажите програмный код чтоб хоть предствление имел |
|||
7
Cube
09.04.14
✎
09:03
|
(5) Пробелы тоже с мопеда! Только хардкор!))
вотуменяпрямщасестькодчитающийсфайлаиестькодсоздающийотсутствующуюноменклатутусправишься |
|||
8
Wobland
09.04.14
✎
09:04
|
||||
9
Cube
09.04.14
✎
09:04
|
(6) Ну, если примерно, то так:
Процедура СделатьВсё() Предупреждение("Позовите специалиста"); КонецПроцедуры |
|||
10
Wobland
09.04.14
✎
09:05
|
а это чтоб не копипастил
http://i.imgur.com/ow0TbtZ.png |
|||
11
Wobland
09.04.14
✎
09:06
|
лопата;плохая;6;789
ведро;черный;6;785 а хорошо! |
|||
12
Wobland
09.04.14
✎
09:12
|
(10) кстати, хвастаюсь цветовой схемой
|
|||
13
Cube
09.04.14
✎
09:15
|
(12) Ацтой)
|
|||
14
butterbean
09.04.14
✎
09:18
|
(10)(12) после 5 секунд просмотра заболела голова
|
|||
15
aka AMIGO
09.04.14
✎
09:36
|
(14) врёшь ведь :)
|
|||
16
Triton_11
09.04.14
✎
09:39
|
Процедура КнопкаВыполнитьНажатие(Кнопка)
Товары.Очистить(); Тек = Новый ЧтениеТекста("C:\pos.rep"); стр = Тек.ПрочитатьСтроку(); Пока стр <> неопределено Цикл Д = Товары.Добавить(); Стр1 = СтрЗаменить(Стр,";",Символы.ПС); Стр = тек.ПрочитатьСтроку(); А = СтрПолучитьСтроку(Стр1,1); Б = СтрПолучитьСтроку(Стр1,2); Для каждого Р Из Товары Цикл Если Р.Номенклатура = Справочники.Номенклатура.ПустаяСсылка()И Р.Характеристики = Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка() Тогда Если А = Справочники.Номенклатура.ПустаяСсылка() И Б = Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка() Тогда Спр = Справочники.Номенклатура.СоздатьЭлемент(); Спр.Наименование = А; Спр.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Инвентарь"); Спр.БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт"); Спр.Записать(); СпрЕдИзм = Справочники.ЕдиницыИзмерения.СоздатьЭлемент(); СпрЕдИзм.Владелец = Справочники.Номенклатура.НайтиПоНаименованию(А); СпрЕдИзм.Наименование = "шт"; СпрЕдИзм.ЕдиницаПоКлассификатору = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт"); СпрЕдИзм.Коэффициент = 1; СпрЕдИзм.Записать(); Спр.ЕдиницаДляОтчетов = СпрЕдИзм.Ссылка; Спр.ЕдиницаХраненияОстатков = СпрЕдИзм.Ссылка; Спр.ВестиУчетПоХарактеристикам = Истина; Спр.Артикул = "Л1"; Спр.НаименованиеПолное = "Лопата"; Спр.Записать(); Спр1 = Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент(); Спр1.Владелец = Справочники.Номенклатура.НайтиПоНаименованию(А); Спр1.Наименование = Б; Спр1.Записать(); КонецЕсли; КонецЕсли; Д.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(СтрПолучитьСтроку(Стр1,1)); Д.Характеристики = Справочники.ХарактеристикиНоменклатуры.НайтиПоНаименованию(СтрПолучитьСтроку(Стр1,2)); Д.Количество = СтрПолучитьСтроку(Стр1,3); Д.Цена = СтрПолучитьСтроку(Стр1,4); Д.Сумма = Д.Количество * Д.Цена; КонецЦикла; КонецЦикла; КонецПроцедуры |
|||
17
Triton_11
09.04.14
✎
09:40
|
(16) код необходимо исправить чтоб правильно работал не знаю как
|
|||
18
aka AMIGO
09.04.14
✎
09:41
|
(16) >>Спр.НаименованиеПолное = "Лопата";<<
ты что-ж, каждую строку файла вносишь в код модуля? |
|||
19
Wobland
09.04.14
✎
09:46
|
я так и думал не склеил готовые куски кода
|
|||
20
Metman
09.04.14
✎
09:53
|
(17) что именно неправильно работает? Не у всех новых элементов в полное наименование "Лопата" записывается? Здесь не "Битва экстрасенсов".
|
|||
21
aka AMIGO
09.04.14
✎
10:10
|
(20) скорей всего - наоборот, все элементы - "Лопата" "Плохая"
|
|||
22
Triton_11
09.04.14
✎
10:17
|
Процедура КнопкаВыполнитьНажатие(Кнопка)
Товары.Очистить(); Тек = Новый ЧтениеТекста("C:\pos.rep"); стр = Тек.ПрочитатьСтроку(); Пока стр <> неопределено Цикл Д = Товары.Добавить(); Стр1 = СтрЗаменить(Стр,";",Символы.ПС); Стр = тек.ПрочитатьСтроку(); А = СтрПолучитьСтроку(Стр1,1); Б = СтрПолучитьСтроку(Стр1,2); Для каждого Р Из Товары Цикл Если Р.Номенклатура = неопределено И Р.Характеристики = неопределено Тогда спр = Справочники.Номенклатура.СоздатьЭлемент(); спр.Наименование = Р.Номенклатура; спр.Записать(); спр1 = Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент(); спр1.Наименование = Р.Характеристики; спр1.Записать(); Д.Номенклатура = спр.Ссылка; Д.Характеристики = спр1.Ссылка; КонецЕсли; Д.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(СтрПолучитьСтроку(Стр1,1)); Д.Характеристики = Справочники.ХарактеристикиНоменклатуры.НайтиПоНаименованию(СтрПолучитьСтроку(Стр1,2)); Д.Количество = СтрПолучитьСтроку(Стр1,3); Д.Цена = СтрПолучитьСтроку(Стр1,4); Д.Сумма = Д.Количество * Д.Цена; КонецЦикла; КонецЦикла; КонецПроцедуры |
|||
23
Metman
09.04.14
✎
10:41
|
(22) и? работает? не работает? работает, но не так?
|
|||
24
Triton_11
09.04.14
✎
10:47
|
(23) работает, но не так? т.е неправильно
|
|||
25
Triton_11
09.04.14
✎
11:11
|
как можно сделать так чтоб код работал плз помогите
|
|||
26
aka AMIGO
09.04.14
✎
11:17
|
(25) извини, но такое впечатление, что ты не знаком с понятием "алгоритмы" в программировании..
ЗЫ. алгоритм = порядок выполнения действий для решения поставленной задачи. я в свое время рисовал квадратики, прямоугольнички, ромбики и стрелочки :) Когда занимался сложными условиями, было такое дело. у тебя алгоритм довольно простой, но если не знать основ - можно пахать без успехов очень долго. 1. ты, допустим в цикле, прочел данные из файла, к этим данным можешь обратиться, увидеть их в своих переменных "А" и "Б" 2. предусматриваешь место, куда данные надо записать (РС, или что другое) готовишь структуру, пишешь туда данные из "А" или "Б" (кстати, так и не увидел, чтобы ты их куда-то пихал.. прочел - и всё.. забыл!..) 3.записываешь в рс из структуры. 4. если цикл не кончился (строки не все прочтены) переходишь к п.1 5. выход из цикла. ЗЗЫ.. мда... |
|||
27
aka AMIGO
09.04.14
✎
11:21
|
к примеру: http://informaks.narod.ru/algo_baz.htm
|
|||
28
Metman
09.04.14
✎
11:57
|
(26) + отладчик помогает пошагово пройти код и увидеть почему не работает.
|
|||
29
Triton_11
09.04.14
✎
12:08
|
он неправильно работает
мне необходимо создать номенклатуру и характеристики которые в в папке номенклатура и характеристики не сушествуют а он создает все отладчиком пробовал пошагово ниче не получается |
|||
30
aka AMIGO
09.04.14
✎
12:17
|
(29) отладчик всегда работает правильно.
он и показывает неправильный порядок выполнения задачи по шагам |
|||
31
Triton_11
09.04.14
✎
15:49
|
Процедура КнопкаВыполнитьНажатие(Кнопка)
Товары.Очистить(); Тек = Новый ЧтениеТекста("C:\pos.rep"); стр = Тек.ПрочитатьСтроку(); Пока стр <> неопределено Цикл Д = Товары.Добавить(); Стр1 = СтрЗаменить(Стр,";",Символы.ПС); Стр = тек.ПрочитатьСтроку(); А = СтрПолучитьСтроку(Стр1,1); Б = СтрПолучитьСтроку(Стр1,2); ВыбНом = Справочники.Номенклатура.Выбрать(); ВыбХар = Справочники.ХарактеристикиНоменклатуры.Выбрать(); Пока ВыбНом.Следующий() Цикл Пока ВыбХар.Следующий() Цикл Х = ВыбХар.Наименование; Н = ВыбНом.Наименование; КонецЦикла; КонецЦикла; Если А <> Н И Б <> Х Тогда спр = Справочники.Номенклатура.СоздатьЭлемент(); спр.ВестиУчетПоХарактеристикам = Истина; спр.Наименование = А; спр.БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт"); спр.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("товар"); спр.Записать(); спр1 = Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент(); спр1.Наименование = Б; спр1.Владелец = спр.Ссылка; спр1.Записать(); Д.Номенклатура = спр.Ссылка; Д.Характеристики = спр1.Ссылка; КонецЕсли; Д.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(СтрПолучитьСтроку(Стр1,1)); Д.Характеристики = Справочники.ХарактеристикиНоменклатуры.НайтиПоНаименованию(СтрПолучитьСтроку(Стр1,2)); Д.Количество = СтрПолучитьСтроку(Стр1,3); Д.Цена = СтрПолучитьСтроку(Стр1,4); Д.Сумма = Д.Количество * Д.Цена; КонецЦикла; КонецПроцедуры вот код он верен на половину вместе с не сушесвуюшими позициями номенклатуры создает сушествуюшие в чем ошибка |
|||
32
aka AMIGO
09.04.14
✎
16:27
|
(31) а зачем тебе вот этот цикл?
Пока ВыбНом.Следующий() Цикл Пока ВыбХар.Следующий() Цикл Х = ВыбХар.Наименование; Н = ВыбНом.Наименование; КонецЦикла; КонецЦикла; в результате для каждой строки прочтенного файла ты получаешь два наименования последнего элемента справочника хар и с ними сравниваешь? вроде-б надо поискать в справочнике товаров, если нет - добавлять |
|||
33
Triton_11
09.04.14
✎
16:50
|
(32) я сравниваю данные с текстового документа данными которые есть на справочнике
|
|||
34
aka AMIGO
09.04.14
✎
16:56
|
(33) ну ты посмотри, друже: опять повторю: в результате работы цикла ты получаешь ПОСледние значения, и только с ними сравниваешь, и так для каждой строки
|
|||
35
aka AMIGO
09.04.14
✎
16:58
|
+34 вот потому-то и появляются уже записанные ранее элементы.. условие
Если А <> Н И Б <> Х Тогда выполняется ВСЕГДА |
|||
36
Triton_11
09.04.14
✎
16:59
|
а как должно быть правильно Amigo подскажи блин целый день над этой задачей сижу
|
|||
37
Triton_11
09.04.14
✎
17:44
|
подскажите через че можно сравнить список в текстовом документе и список в справочнике и создать недостаюшие
|
|||
38
aka AMIGO
10.04.14
✎
11:23
|
(37)
Процедура КнопкаВыполнитьНажатие(Кнопка) ВыбНом = Справочники.Номенклатура; ВыбХар = Справочники.ХарактеристикиНоменклатуры; Текст = Новый ЧтениеТекста("C:\pos.ref", КодировкаТекста.ANSI); Стр = Текст.ПрочитатьСтроку(); Пока Стр <> Неопределено Цикл // строки читаются до символа перевода строки Стр1 = СтрЗаменить(Стр,";",Символы.ПС); А = СтрПолучитьСтроку(Стр1,1); Б = СтрПолучитьСтроку(Стр1,2); НайденнаяНоменклатура = Выбном.НайтиПоНаименованию(А, Ложь); //с отрезанием левых символов Если НайденнаяНоменклатура.Пустая() Тогда //Такого Наименования Номенклатуры не найдено //организовать запись в Номенклатуру //... //записали.. ы=0; Иначе //Есть такое значение в справочнике Номенклатура //не делать ничего, переход к следующей строке файла // если нет надобности проверять наличие Характеристики в ВыбХар //иначе - позаботиться о проверке и записи Характеристики из текущей строки // НайденнаяНоменклатура = ... : // Значение записанного элемента! убрать "//" НайденнаяХарактеристика = ВыбХар.НайтиПоНаименованию(Б, Ложь, , НайденнаяНоменклатура); Если НайденнаяХарактеристика.Пустая() Тогда //Создать новую запись в Спр Характеристик //... //... КонецЕсли; КонецЕсли; Стр = Текст.ПрочитатьСтроку(); //следующая КонецЦикла; Текст.Закрыть(); КонецПроцедуры |
|||
39
aka AMIGO
10.04.14
✎
11:25
|
+38 уважаемые форумчане, прошу покорнейше извинить за г-код, я надеюсь, ТС подправит его под себя.
или выклодывайте свои светлые варианты |
|||
40
aka AMIGO
10.04.14
✎
11:31
|
(39) +
приведенный код - если НайденнаяХарактеристика должна быть записана только для нового (несуществующего) элемента спр.Номенклатуры. если НайденнаяХарактеристика должна проверяться на наличие и для существующего элемента - тогда проверку Если НайденнаяХарактеристика.Пустая() Тогда //... КонецЕсли; надо вынести за "КонецЕсли" условия по проверке наличия наименования в спр.Номенклатуры |
|||
41
Triton_11
10.04.14
✎
14:49
|
Процедура КнопкаВыполнитьНажатие(Кнопка)
Текст = Новый ЧтениеТекста("C:\pos.rep"); Стр = Текст.ПрочитатьСтроку(); Д = Товары.Добавить(); Пока Стр <> Неопределено Цикл ВыбНом = Справочники.Номенклатура; ВыбХар = Справочники.ХарактеристикиНоменклатуры; Стр1 = СтрЗаменить(Стр,";",Символы.ПС); А = СтрПолучитьСтроку(Стр1,1); Б = СтрПолучитьСтроку(Стр1,2); НайденнаяНоменклатура = Выбном.НайтиПоНаименованию(А,Ложь); Если НайденнаяНоменклатура.Пустая() Тогда спр = Справочники.Номенклатура.СоздатьЭлемент(); спр.ВестиУчетПоХарактеристикам = Истина; спр.Наименование = А; спр.БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт"); спр.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("товар"); спр.Записать(); Стр = Текст.ПрочитатьСтроку(); КонецЕсли; НайденнаяХарактеристика = ВыбХар.НайтиПоНаименованию(Б,, , НайденнаяНоменклатура); Если НайденнаяХарактеристика.Пустая() Тогда спр1 = Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент(); спр1.Наименование = Б; спр1.Владелец = спр.Ссылка; спр1.Записать(); КонецЕсли; Д.Номенклатура = спр.Ссылка; Д.Характеристики = СтрПолучитьСтроку(Стр1,2); Д.Количество = СтрПолучитьСтроку(Стр1,3); Д.Цена = СтрПолучитьСтроку(Стр1,4); Д.Сумма = Д.Количество * Д.Цена; КонецЦикла; КонецПроцедуры код че то не работает |
|||
42
Wobland
10.04.14
✎
14:51
|
(41) рабоатет же. ипофих, что строка в ТЧ одна, ты так захотел
|
|||
43
Triton_11
10.04.14
✎
14:53
|
(42) как вернее будет?
|
|||
44
Wobland
10.04.14
✎
14:55
|
добавлять строку вТЧ несколько раз
|
|||
45
Triton_11
10.04.14
✎
14:56
|
(44) Wobland программно напиши как плз
|
|||
46
Gogger
10.04.14
✎
14:58
|
Конкретная задача решается типовыми средствами в три шага.
1. Текст (а по факту это csv) преобразуется в Excel - таблицу. 2. Стандартной обработкой "загрузка данных из табличного документа" загружаются недостающие позиции в справочник номенклатуры. 3. Той же обработкой загружается таблица в регистр (или документ). |
|||
47
Triton_11
10.04.14
✎
15:38
|
(46) надо считать с текстового документа без excel
|
|||
48
Wobland
10.04.14
✎
15:39
|
вот так я в документ грузил
Для й=15 По ПоследняяСтрока Цикл ОбработкаПрерыванияПользователя(); ЭлементыФормы.Индикатор.Значение=ЭлементыФормы.Индикатор.Значение+1; Наименование=СокрЛП(Sheet.Cells(й, 2).Value); спр=Справочники.Номенклатура.НайтиПоНаименованию(Наименование); Если Sheet.Cells(й, 3).Value=Неопределено Тогда Продолжить; КонецЕсли; Если спр.Пустая() Тогда Сообщить("Номенклатура "+Наименование+" не найдена"); Продолжить; КонецЕсли; Количество=Sheet.Cells(й, 4).Value; Количество=?(Цел(Количество)=Количество, Количество/1000, Количество); НоваяСтрока=Поступление.Товары.Добавить(); НоваяСтрока.Номенклатура=спр; НоваяСтрока.ЕдиницаИзмерения=спр.ЕдиницаХраненияОстатков; НоваяСтрока.Коэффициент=1; НоваяСтрока.Количество=Количество; НоваяСтрока.Цена=Sheet.Cells(й, 5).Value; НоваяСтрока.Сумма=НоваяСтрока.Количество*НоваяСтрока.Цена; НоваяСтрока=Спецификация.Состав.Добавить(); НоваяСтрока.Номенклатура=спр; НоваяСтрока.ЕдиницаИзмерения=спр.ЕдиницаХраненияОстатков; НоваяСтрока.Количество=Количество; КонецЦикла; |
|||
49
Triton_11
10.04.14
✎
15:44
|
(48) wobland в моем как будет выглядеть я с excel гружу но пользуюсь готовой обработкой мне надо загрузить с текстового документа
|
|||
50
Triton_11
10.04.14
✎
15:56
|
(41) в чем ошибка? как строку добавлять в ТЧ несколько раз
|
|||
51
Wobland
10.04.14
✎
15:57
|
(49) можно я не буду за тебя работать?
|
|||
52
Triton_11
10.04.14
✎
15:59
|
(51) плз подскажи как мне хотя бы сегодня эту задачу решить
буду при многом благодарен |
|||
53
Мимохожий Однако
10.04.14
✎
16:05
|
Стр1 = СтрЗаменить(Стр,";",Символы.ПС);
зачем? |
|||
54
Triton_11
10.04.14
✎
16:07
|
(53) надо с текстового документа поместить на табличное поле вот из-за чего я делю
|
|||
55
Мимохожий Однако
10.04.14
✎
16:09
|
Надо разбирать строку, а ты наоборот в кучу лепишь
|
|||
56
Triton_11
10.04.14
✎
16:11
|
(55) мне хоть так а то код (41) не работает мне надо ее исправить
|
|||
57
Мимохожий Однако
10.04.14
✎
16:11
|
В общих модулях типовой конфигурации наверняка есть функция, которая из строки с разделителями выдаёт массив. А вот разбирая массив ты уже можешь дальше двигаться.
|
|||
58
Мимохожий Однако
10.04.14
✎
16:13
|
(56) Начни сначала: опиши алгоритм, что хочешь и откуда получить. Посмотри, что наваял в соответствии с твоим планом. Исправь ошибки и запускай с отладчиком по каждому шагу алгоритма. А "хоть так а то код не работает" - это детский лепет
|
|||
59
Triton_11
10.04.14
✎
16:13
|
(57) хотя бы так без массива (44) мне необходимо добавлять строку вТЧ несколько раз как не могу додуматься
|
|||
60
Gogger
10.04.14
✎
16:14
|
(47)почему именно из текстового? текстовый файл создается для обмена какой-то сторонней системой?
в общем случае, сама постановка задачи некорректна - дополнять справочники НСИ на основании поиска по наименованию - это ярчайший пример гов№окода. Потом будете удивляться откуда в справочнике номенклатуры 5 ведер, а в справочнике характеристик 6 черных. |
|||
61
Мимохожий Однако
10.04.14
✎
16:16
|
чтобы добавить строку в ТЧ используй метод .Добавить()
|
|||
62
Triton_11
10.04.14
✎
16:16
|
(60) это простая задача взять с текстового для начала потом можно и с excel И word и access поработать мне хоть с текстового документа для начала
|
|||
63
Gogger
10.04.14
✎
16:19
|
(62) на вопрос-то можно ответить?
если пишется код автоматической обработки без участия оператора - то будет ровно так, как я описал. если участие оператора подразумевается, то проще не плодить код, а пользоваться стандартными средствами. |
|||
64
Мимохожий Однако
10.04.14
✎
16:21
|
(62)Наивный. Судя по твоим постам для тебе это не простая задача.
|
|||
65
Triton_11
10.04.14
✎
16:22
|
(63) ну будет че будет хоть так надо посмотреть че получиться
|
|||
66
Мимохожий Однако
10.04.14
✎
16:23
|
Нажми буковку Я рядом с сабжем. Там есть мильон примеров
|
|||
67
Triton_11
10.04.14
✎
16:24
|
(66) подскажи в чем проблема код почему не работает
|
|||
68
Gogger
10.04.14
✎
16:28
|
(65) то есть это просто обучающая задача?
я бы разбил задачу на несколько частей. 1. Вывести форму с ТЧ и заполнить ТЧ данными текстового документа. 2. По значениям в ТЧ найти недостающие позиции справочников и дополнить их. 3. Заменить строковые значения в ТЧ на ссылки (включая дополненные значения в справочниках. 4. Заполнить целевой регистр (или документ). |
|||
69
Triton_11
10.04.14
✎
16:32
|
(68) я ее почти решил необходимо в коде разобраться че там не работает
|
|||
70
Gogger
10.04.14
✎
16:46
|
(69) ну навскидку по коду я вижу, что условие неправильное...
есть два разных независимых справочника, и проверять наличие в них записей нужно по отдельности. потому что в твоем алгоритме если номенклатурной позиции (Ведро) нет, а характеристика (черный) есть - то новая номенклатурная позиция не создастся... |
|||
71
Gogger
10.04.14
✎
16:49
|
+ (70) не заметил второй вариант кода...
но он странный какой-то. почему не пробежаться два раза по всем строкам, получить подстроку между 1-м и вторым вхождением символа ";" (т.е. номенклатуры), а потом между 2-м и 3-м (характеристики). |
|||
72
aka AMIGO
11.04.14
✎
13:35
|
(53)
код Стр1 = СтрЗаменить(Стр,";",Символы.ПС); вполне логичен, т.к. за ним следуют две функции А = СтрПолучитьСтроку(Стр1,1); Б = СтрПолучитьСтроку(Стр1,2); для определения позиции "строки в строке" и вырезки подстроки.. для первой строки из файла А= "Конфеты" Б=" Черный" т.е. всё применено путём. ну, а через массив или сз - это из 7-рочки :) |
|||
73
Triton_11
11.04.14
✎
15:24
|
Процедура КнопкаВыполнитьНажатие(Кнопка)
Товары.Очистить(); ВыбНом = Справочники.Номенклатура; ВыбХар = Справочники.ХарактеристикиНоменклатуры; Текст = Новый ЧтениеТекста("C:\pos.rep"); Стр = Текст.ПрочитатьСтроку(); Пока Стр <> неопределено Цикл Стр = Текст.ПрочитатьСтроку(); Если стр = неопределено Тогда прервать; КонецЕсли; Стр1 = СтрЗаменить(Стр,";",Символы.ПС); Д = Товары.Добавить(); А = СтрПолучитьСтроку(Стр1,1); Б = СтрПолучитьСтроку(Стр1,2); НайденнаяНоменклатура = Выбном.НайтиПоНаименованию(А,Истина); НайденнаяХарактеристика = ВыбХар.НайтиПоНаименованию(Б,Истина); Если НайденнаяНоменклатура.Пустая() И НайденнаяХарактеристика.Пустая() ИЛИ НЕ НайденнаяНоменклатура.Пустая() И НайденнаяХарактеристика.Пустая() ИЛИ НайденнаяНоменклатура.Пустая() И НЕ НайденнаяХарактеристика.Пустая() Тогда спр = Справочники.Номенклатура.СоздатьЭлемент(); спр.ВестиУчетПоХарактеристикам = Истина; спр.Наименование = А; спр.БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт"); спр.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("товар"); спр.Записать(); спр1 = Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент(); спр1.Наименование = Б; спр1.Владелец = спр.Ссылка; спр1.Записать(); КонецЕсли; Если НайденнаяНоменклатура.Пустая() И НайденнаяХарактеристика.Пустая() ИЛИ НЕ НайденнаяНоменклатура.Пустая() И НайденнаяХарактеристика.Пустая() ИЛИ НайденнаяНоменклатура.Пустая() И НЕ НайденнаяХарактеристика.Пустая() Тогда Д.Номенклатура = Спр.Ссылка; Д.Характеристики = Спр1.Ссылка; Д.Количество = СтрПолучитьСтроку(Стр1,3); Д.Цена = СтрПолучитьСтроку(Стр1,4); Д.Сумма = Д.Количество * Д.Цена; Иначе Д.Номенклатура = НайденнаяНоменклатура.Ссылка; Д.Характеристики = НайденнаяХарактеристика.Ссылка; Д.Количество = СтрПолучитьСтроку(Стр1,3); Д.Цена = СтрПолучитьСтроку(Стр1,4); Д.Сумма = Д.Количество * Д.Цена; КонецЕсли; КонецЦикла; КонецПроцедуры Вроде получилось и выходит но он для одинаковой номенклатуры но с разными характеристиками создает заново эту же номенклатуру |
|||
74
Infsams654
11.04.14
✎
15:34
|
(73) кто-нибудь что понял:
Если НайденнаяНоменклатура.Пустая() И НайденнаяХарактеристика.Пустая() ИЛИ НЕ НайденнаяНоменклатура.Пустая() И НайденнаяХарактеристика.Пустая() ИЛИ НайденнаяНоменклатура.Пустая() И НЕ НайденнаяХарактеристика.Пустая() Тогда |
|||
75
Wobland
11.04.14
✎
15:36
|
а И б ИЛИ НЕ а И б ИЛИ а И НЕ б
морзянка какая-то |
|||
76
Triton_11
11.04.14
✎
15:37
|
(75) :))
|
|||
77
Triton_11
11.04.14
✎
15:37
|
(75) работает зато
|
|||
78
Triton_11
11.04.14
✎
15:50
|
он создает номенклатуру которая уже есть в системе
одну номенклатуру с разными характеристиками он заново создает |
|||
79
Wobland
11.04.14
✎
15:58
|
(77) поздравлять?
|
|||
80
Infsams654
11.04.14
✎
16:00
|
(77) так это выражение эквивалентно: НЕ а И НЕ б
"Если Не НайденнаяНоменклатура.Пустая() И Не НайденнаяХарактеристика.Пустая() " |
|||
81
floody
11.04.14
✎
16:02
|
ахах выкладывать код скриншотом - это вы забавно придумали
|
|||
82
Wobland
11.04.14
✎
16:03
|
(80) видал дополнительную строку в Если? копеечка. а их там две. казалось бы мелочь, но за строки плятят
|
|||
83
Infsams654
11.04.14
✎
16:09
|
(80) тогда уж надо:
Если НайденнаяНоменклатура.Пустая() Тогда .... ИначеЕсли НайденнаяХарактеристика.Пустая() Тогда и т.д |
|||
84
Gogger
11.04.14
✎
16:42
|
(78) понятно что он создает ее на каждый чих... в этих условиях (И/ИЛИ/НЕ) черт ногу сломит.
сделай последовательную проверку - нашел номенклатуру - переходи к характеристике, нашел характеристику - переходи к следующей строке. |
|||
85
Triton_11
14.04.14
✎
09:45
|
Сделал
Процедура КнопкаВыполнитьНажатие(Кнопка) Товары.Очистить(); ВыбНом = Справочники.Номенклатура; ВыбХар = Справочники.ХарактеристикиНоменклатуры; Текст = Новый ЧтениеТекста("C:\pos.rep"); Стр = Текст.ПрочитатьСтроку(); Пока Стр <> неопределено Цикл Стр = Текст.ПрочитатьСтроку(); Если стр = неопределено Тогда прервать; КонецЕсли; Стр1 = СтрЗаменить(Стр,";",Символы.ПС); Д = Товары.Добавить(); А = СтрПолучитьСтроку(Стр1,1); Б = СтрПолучитьСтроку(Стр1,2); НайденнаяНоменклатура = Выбном.НайтиПоНаименованию(А,Истина); НайденнаяХарактеристика = ВыбХар.НайтиПоНаименованию(Б,Истина,,НайденнаяНоменклатура); Если НайденнаяНоменклатура.Пустая() И НайденнаяХарактеристика.Пустая() Тогда спр = Справочники.Номенклатура.СоздатьЭлемент(); спр.ВестиУчетПоХарактеристикам = Истина; спр.Наименование = А; спр.БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт"); спр.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("товар"); спр.Записать(); спр1 = Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент(); спр1.Наименование = Б; спр1.Владелец = спр.Ссылка; спр1.Записать(); ИначеЕсли НЕ НайденнаяНоменклатура.Пустая() И НайденнаяХарактеристика.Пустая() Тогда спр1 = Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент(); спр1.Наименование = Б; спр1.Владелец = НайденнаяНоменклатура.Ссылка; спр1.Записать(); КонецЕсли; Если НайденнаяНоменклатура.Пустая() И НайденнаяХарактеристика.Пустая() Тогда Д.Номенклатура = Спр.Ссылка; Д.Характеристики = Спр1.Ссылка; Д.Количество = СтрПолучитьСтроку(Стр1,3); Д.Цена = СтрПолучитьСтроку(Стр1,4); Д.Сумма = Д.Количество * Д.Цена; ИначеЕсли НЕ НайденнаяНоменклатура.Пустая() И НайденнаяХарактеристика.Пустая() Тогда Д.Номенклатура = НайденнаяНоменклатура.Ссылка; Д.Характеристики = спр1.Ссылка; Д.Количество = СтрПолучитьСтроку(Стр1,3); Д.Цена = СтрПолучитьСтроку(Стр1,4); Д.Сумма = Д.Количество * Д.Цена; Иначе Д.Номенклатура = НайденнаяНоменклатура.Ссылка; Д.Характеристики = НайденнаяХарактеристика.Ссылка; Д.Количество = СтрПолучитьСтроку(Стр1,3); Д.Цена = СтрПолучитьСтроку(Стр1,4); Д.Сумма = Д.Количество * Д.Цена; КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
86
Wobland
14.04.14
✎
09:59
|
проверял с отсутствующей номенклатурой?
|
|||
87
Triton_11
14.04.14
✎
10:02
|
(86) ошибку выдает
|
|||
88
Wobland
14.04.14
✎
10:06
|
экий я хороший бесплатный тестировщик
|
|||
89
Triton_11
14.04.14
✎
10:08
|
(88)спасибо за совет если значения пустые он создает номенклатуру с пустым именем
|
|||
90
Wobland
14.04.14
✎
10:17
|
(89) и дальше считает номенклатуру не найденной
|
|||
91
Triton_11
14.04.14
✎
10:41
|
(90) да
|
|||
92
Gogger
14.04.14
✎
13:09
|
Зачем ты одновременно проверяешь наличие и номенклатуры и характеристики.
Создай в первом цикле вю недостающую номенклатуру (и пофиг на характеристики), во втором - все недостающие характеристики (номенклатура уже вся будет. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |