|
Загрузка цен из файла в документ | ☑ | ||
---|---|---|---|---|
0
Валидатор
07.11.13
✎
12:03
|
конфа 1с 8.2 КА, нужно загрузить данные из файла в документ установки цен номенклатуры, причем данные по двум видам цен - оптовая и розничная, создал в справочнике номенклатура эти виды предварительно, возникает вопрос при создании их в документе:
Процедура ОсновныеДействияФормыОсновныеДействияФормыВыполнить(Кнопка) Сообщить("Начало загрузки цен..."); КЧ = Новый КвалификаторыЧисла(12,2); КД = Новый КвалификаторыДаты(); КС = Новый КвалификаторыСтроки(30); КС2 = Новый КвалификаторыСтроки(40); Массив = Новый Массив; Массив.Добавить(Тип("Дата")); ОписаниеТиповД = Новый ОписаниеТипов(Массив, , КД); Массив.Очистить(); Массив.Добавить(Тип("Число")); ОписаниеТиповЧ = Новый ОписаниеТипов(Массив, , ,КЧ); Массив.Очистить(); Массив.Добавить(Тип("Строка")); ОписаниеТиповС = Новый ОписаниеТипов(Массив, , ,КС); Массив.Очистить(); Массив.Добавить(Тип("Строка")); ОписаниеТиповС2 = Новый ОписаниеТипов(Массив, , ,КС2); Массив.Очистить(); ТаблицаЗначений = Новый ТаблицаЗначений; ТаблицаЗначений.Колонки.Добавить("АртикулНом",ОписаниеТиповС2 , "Код номенклатуры"); ТаблицаЗначений.Колонки.Добавить("АртикулБезПрефикса",ОписаниеТиповС2 , "артикул без префикса"); ТаблицаЗначений.Колонки.Добавить("Номенклатура",ОписаниеТиповС2 , "Описание номенклатуры"); ТаблицаЗначений.Колонки.Добавить("ЦенаОпт",ОписаниеТиповС2 , "Цена оптовая"); ТаблицаЗначений.Колонки.Добавить("ЦенаРозн",ОписаниеТиповС2 , "Цена розничная"); ТаблицаЗначений.Колонки.Добавить("ЦенаРознБезСкидки",ОписаниеТиповС2 , "Цена розничная без скидки"); ТаблицаЗначений.Колонки.Добавить("Скидка",ОписаниеТиповС2 , "Скидка"); ТаблицаЗначений.Колонки.Добавить("Штрихкод",ОписаниеТиповС2 , "Штрихкод"); Текст = Новый ЧтениеТекста(ПутьКФайлу, "cp866"); Стр = Текст.ПрочитатьСтроку(); Пока Стр <> Неопределено Цикл МассивСтрок = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(Стр,"│"); НоваяТЗ = ТаблицаЗначений.Добавить(); АртикулНом = МассивСтрок[0]; НоваяТЗ.АртикулНом = СокрЛП(АртикулНом); АртикулБезПрефикса = МассивСтрок[1]; НоваяТЗ.АртикулБезПрефикса = СокрЛП(АртикулБезПрефикса); Номенклатура = МассивСтрок[2]; НоваяТЗ.Номенклатура = СокрЛП(Номенклатура); ЦенаОпт = МассивСтрок[3]; НоваяТЗ.ЦенаОпт = СокрЛП(ЦенаОпт); ЦенаРозн = МассивСтрок[4]; НоваяТЗ.ЦенаРозн = СокрЛП(ЦенаРозн); ЦенаРознБезСкидки = МассивСтрок[5]; НоваяТЗ.ЦенаРознБезСкидки = СокрЛП(ЦенаРознБезСкидки); Скидка = МассивСтрок[6]; НоваяТЗ.Скидка = СокрЛП(Скидка); Штрихкод = МассивСтрок[7]; НоваяТЗ.Штрихкод = СокрЛП(Штрихкод); Стр = Текст.ПрочитатьСтроку(); Если ТипЗнч(Стр) = Неопределено Тогда Продолжить; КонецЕсли; КонецЦикла; Документ = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент(); Документ.Комментарий = Комментарий; Документ.Дата = ТекущаяДата(); СтрокаТиповЦен = Документ.ТипыЦен.Добавить(); Розничная = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Розничная"); СтрокаТиповЦен.ТипЦен = Розничная; Для каждого Строчка из ТаблицаЗначений Цикл НоменклатураПоискПоНаименованию = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", Строчка.АртикулНом); Если НоменклатураПоискПоНаименованию = Справочники.Номенклатура.ПустаяСсылка() Тогда НоменклатураПоискПоНаименованию = СоздатьНоменклатуру(Строчка.АртикулНом, Строчка.Номенклатура, ГруппаТоваровНов,Строчка.Штрихкод); НоменклатураПоискПоНаименованию = НоменклатураПоискПоНаименованию.Ссылка; КонецЕсли; НоваяСтрока = Документ.Товары.Добавить(); НоваяСтрока.ТипЦен = Плановая; Валюты = Справочники.Валюты.НайтиПоНаименованию("руб."); НоваяСтрока.Валюта = Валюты; НоваяСтрока.ЕдиницаИзмерения = НоменклатураПоискПоНаименованию.ЕдиницаХраненияОстатков; НоваяСтрока.Номенклатура = НоменклатураПоискПоНаименованию; НоваяСтрока.ПроцентСкидкиНаценки = Строчка.Скидка; НоваяСтрока.Цена = Число(Строчка.ЦенаРозн); Попытка Документ.Записать(); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; КонецЦикла; Сообщить("Цены были загружены"); КонецПроцедуры //ОсновныеДействияФормыОсновныеДействияФормыВыполнить вот как тут загрузить сразу 2 типа цен? |
|||
1
Валидатор
07.11.13
✎
12:09
|
в одни документ сразу
|
|||
2
Валидатор
07.11.13
✎
12:18
|
все, разробрался
|
|||
3
Валидатор
07.11.13
✎
16:33
|
хотя нет, проблема еще актуальна, как загрузить в одну строку два вида цен?
|
|||
4
Михаил Козлов
07.11.13
✎
16:36
|
В ТЧ типы цен добавить 2 строки. В ТЧ Товары правильно оформить ИндексСтрокиТаблицыЦен (завести документ с 2 типами цен и несколькими товарами и потом запросом посмотреть, как этот индекс формируется).
|
|||
5
Валидатор
07.11.13
✎
17:04
|
(4) добавил, один тип цен - Розничная, другая - Оптовая, а если грузить сначала одну, а потом другуЮ и в конце сворачивать их по номелктауре?
|
|||
6
Михаил Козлов
07.11.13
✎
17:08
|
(5) Заведите документ руками и посмотрите на содержание табличных частей: ИндексСтрокиТаблицыЦен нужен для заполнения таблицы значений на форме.
|
|||
7
Валидатор
07.11.13
✎
17:11
|
(6) я не совсем понимаю что такое ИндексСтрокиТаблицыЦен
|
|||
8
Валидатор
07.11.13
✎
17:12
|
(6) создал документ руками, в типе цен выбрал Розничная и Оптовая, появилось скажем так 2 колонки больших разделенных еще http://pikucha.ru/icgK9
|
|||
9
Валидатор
07.11.13
✎
17:24
|
Документ = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
Документ.Комментарий = Комментарий; Документ.Ответственный = ПараметрыСеанса.ТекущийПользователь; Документ.Дата = ТекущаяДата(); СтрокаТиповЦен = Документ.ТипыЦен.Добавить(); Розничная = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Розничная"); Оптовая = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Оптовая"); ИндексСтрокиТаблицыЦен = 1; Для каждого Строчка из ТаблицаЗначений Цикл НоваяСтрока = Документ.Товары.Добавить(); НоваяСтрока.ТипЦен = Розничная; НоваяСтрока.ИндексСтрокиТаблицыЦен = ИндексСтрокиТаблицыЦен; Валюты = Справочники.Валюты.НайтиПоНаименованию("руб."); НоваяСтрока.Валюта = Валюты; НоваяСтрока.ЕдиницаИзмерения = НоменклатураПоискПоРеквизиту.ЕдиницаХраненияОстатков; НоваяСтрока.Номенклатура = НоменклатураПоискПоРеквизиту; НоваяСтрока.Цена = Число(Строчка.ЦенаРозн); ИндексСтрокиТаблицыЦен = ИндексСтрокиТаблицыЦен + 1; Попытка Документ.Записать(); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; КонецЦикла; СтрокаТиповЦен = Документ.ТипыЦен.Добавить(); СтрокаТиповЦен.ТипЦен = Оптовая; ИндексСтрокиТаблицыЦен = 1; Для каждого Строчка из ТаблицаЗначений Цикл НоменклатураПоискПоРеквизиту = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", Строчка.АртикулНом); Если НЕ НоменклатураПоискПоРеквизиту = Справочники.Номенклатура.ПустаяСсылка() Тогда НоваяСтрока = Документ.Товары.Добавить(); НоваяСтрока.ТипЦен = Оптовая; НоваяСтрока.ИндексСтрокиТаблицыЦен = ИндексСтрокиТаблицыЦен; Валюты = Справочники.Валюты.НайтиПоНаименованию("руб."); НоваяСтрока.Валюта = Валюты; НоваяСтрока.ЕдиницаИзмерения = НоменклатураПоискПоРеквизиту.ЕдиницаХраненияОстатков; НоваяСтрока.Номенклатура = НоменклатураПоискПоРеквизиту; НоваяСтрока.Цена = Число(Строчка.ЦенаОпт); ИндексСтрокиТаблицыЦен = ИндексСтрокиТаблицыЦен + 1; Попытка Документ.Записать(); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; Иначе Продолжить; КонецЕсли; КонецЦикла; Делаю так и не особо индекс помогает( |
|||
10
KUBIK
07.11.13
✎
17:26
|
(8) Вот кусок кода (DBF --> Розница 1.0) смотри:
Если Результат.Пустой() Тогда Док=Документы.УстановкаЦенНоменклатуры.СоздатьДокумент(); Док.Номер=НомерДок; Док.УстановитьВремя(РежимАвтоВремя.НеИспользовать); Док.Дата=ДатаДок+ДБФ.TimeH*60*60+ДБФ.TimeM*60+ДБФ.TimeS; Иначе Выборка=Результат.Выбрать(); Пока Выборка.Следующий() Цикл Док=Выборка.Ссылка.ПолучитьОбъект(); Если Док.Проведен Тогда Сообщить("Найден проведенный документ :"+Док+". Пропущен"); Успех=Ложь; Возврат Успех; Иначе Док.УстановитьВремя(РежимАвтоВремя.НеИспользовать); Док.Дата=ДатаДок+ДБФ.TimeH*60*60+ДБФ.TimeM*60+ДБФ.TimeS; НайденНепроведенным=Истина; Док.Товары.Очистить(); Док.ТипыЦен.Очистить(); КонецЕсли; КонецЦикла; КонецЕсли; Док.НеПроводитьНулевыеЗначения=Ложь; Док.Ответственный=Ответственный; ТЦ=Док.ТипыЦен.Добавить(); ТЦ.ТипЦен=ТипЦенЗакупка; ТЦ=Док.ТипыЦен.Добавить(); ТЦ.ТипЦен=ТипЦенПродажа; ТЦ=Док.ТипыЦен.Добавить(); ТЦ.ТипЦен=ТипЦенОбщепит; Док.Комментарий="#Загружен из 7.7: Установка цен №"+НомерДок77+" от "+Формат(ДатаДок,"ДЛФ=Д")+?(СокрЛП(ДБФ.KOMMENT)="",""," | "+СокрЛП(ДБФ.KOMMENT)); ДБФТ.ТекущийИндекс=ДБФТ.Индексы.iIDX; ДБФТ.Ключ.IDX=ДБФ.IDX; //ДБФТ.ТекущийИндекс=ДБФТ.Индексы.iNOMERDOC; //ДБФТ.Ключ.NOMERDOC=ДБФ.NOMERDOC; Сч=0; Если ДБФТ.НайтиПоКлючу("=") Тогда Код77=СокрЛП(ДБФТ.CODE); ТекТов=НайтиНоменклатуру(Код77); Если ДБФТ.PRICEPIT=0 И ДБФТ.PRICEZAK=0 И ДБФТ.PRICEPRO=0 Тогда Иначе Если ТекТов.Пустая() Тогда Сообщить("Товар: Код "+Код77+" не обнаружен в базе данных! Пропущено!", СтатусСообщения.Важное); Иначе НС=Док.Товары.Добавить(); НС.Номенклатура=ТекТов; НС.ЕдиницаИзмерения=ТекТов.ЕдиницаХраненияОстатков; НС.ТипЦен=ТипЦенЗакупка; НС.Цена=ДБФТ.PRICEZAK; НС.ИндексСтрокиТаблицыЦен=Сч; // НС=Док.Товары.Добавить(); НС.Номенклатура=ТекТов; НС.ЕдиницаИзмерения=ТекТов.ЕдиницаХраненияОстатков; НС.ТипЦен=ТипЦенПродажа; НС.Цена=ДБФТ.PRICEPRO; НС.ИндексСтрокиТаблицыЦен=Сч; // НС=Док.Товары.Добавить(); НС.Номенклатура=ТекТов; НС.ЕдиницаИзмерения=ТекТов.ЕдиницаХраненияОстатков; НС.ТипЦен=ТипЦенОбщепит; НС.Цена=ДБФТ.PRICEPIT; НС.ИндексСтрокиТаблицыЦен=Сч; // Сч=Сч+1; КонецЕсли; КонецЕсли; Пока ДБФТ.Следующая() Цикл Если ДБФТ.IDX=ДБФ.IDX Тогда //Если ДБФТ.NOMERDOC=ДБФ.NOMERDOC Тогда Код77=СокрЛП(ДБФТ.CODE); ТекТов=НайтиНоменклатуру(Код77); Если ДБФТ.PRICEPIT=0 И ДБФТ.PRICEZAK=0 И ДБФТ.PRICEPRO=0 Тогда Иначе Если ТекТов.Пустая() Тогда Сообщить("Товар: Код "+Код77+" не обнаружен в базе данных! Пропущено!", СтатусСообщения.Важное); Иначе НС=Док.Товары.Добавить(); НС.Номенклатура=ТекТов; НС.ЕдиницаИзмерения=ТекТов.ЕдиницаХраненияОстатков; НС.ТипЦен=ТипЦенЗакупка; НС.Цена=ДБФТ.PRICEZAK; НС.ИндексСтрокиТаблицыЦен=Сч; // НС=Док.Товары.Добавить(); НС.Номенклатура=ТекТов; НС.ЕдиницаИзмерения=ТекТов.ЕдиницаХраненияОстатков; НС.ТипЦен=ТипЦенПродажа; НС.Цена=ДБФТ.PRICEPRO; НС.ИндексСтрокиТаблицыЦен=Сч; // НС=Док.Товары.Добавить(); НС.Номенклатура=ТекТов; НС.ЕдиницаИзмерения=ТекТов.ЕдиницаХраненияОстатков; НС.ТипЦен=ТипЦенОбщепит; НС.Цена=ДБФТ.PRICEPIT; НС.ИндексСтрокиТаблицыЦен=Сч; // Сч=Сч+1; КонецЕсли; КонецЕсли; Иначе Прервать; КонецЕсли; КонецЦикла; КонецЕсли; Если Док.Товары.Количество()=0 Тогда Сообщить("Документ "+Док.Номер+" не будет записан! Не заполнена ПОЛНОСТЬЮ табличная часть документа! Выполните обновление справочника ""Номенклатура""!",СтатусСообщения.Важное); Успех=Ложь; Возврат Успех; КонецЕсли; |
|||
11
lamme
07.11.13
✎
17:37
|
(0)
кеп. идеология документа УстановкаЦенНоменуклатуры такая. в ТЧ = ТипыЦен - устанавливаешь свои типы цен, которые надо установить собственно в ТЧ = Товары - прописываешь товары ,которым устанавливаешь цену. В этой же колонке есть и реквизит = ТипЦен при этом Товары.ТипЦен - должен быть одним из ТипыЦен.ТипЦен - |
|||
12
Валидатор
07.11.13
✎
17:45
|
(11) так и делал, создавал документ, добавлял 1 тип цен , потом грузил данные по этому типу цен циклом, потом добалвлял другой тип цен и грузил по нему данные
|
|||
13
х86
07.11.13
✎
17:47
|
(0)посмотри поиском, я уже раз надцать постил процедуру заполнения установки цен
|
|||
14
Валидатор
07.11.13
✎
17:50
|
(13) нету
|
|||
15
х86
07.11.13
✎
17:52
|
||||
16
Валидатор
07.11.13
✎
17:55
|
(15) под каким ты там ником? мне кажется там все вариаты не особо рабочие)
|
|||
17
Михаил Козлов
07.11.13
✎
17:55
|
(8) Добавьте несколько товаров и посмотрите в ЗАПРОСЕ.
|
|||
18
Валидатор
07.11.13
✎
17:55
|
(15) у меня дело в том что сразу по 2 видам цен данные грузятся, по 1 то без проблем, а вот одновременно два нет
|
|||
19
Валидатор
07.11.13
✎
17:56
|
(17) происходит дублирование просто данных, а вот в какой момент не могу понять(
|
|||
20
х86
07.11.13
✎
17:57
|
(16)первое что нашёл
там есть идеи |
|||
21
Wobland
07.11.13
✎
17:59
|
(17) автору нужно узнать, что все данные хранятся в таблицах. а это уже уровнем выше
|
|||
22
Михаил Козлов
07.11.13
✎
18:00
|
(18) В ТЧ товары будет 2 строки на каждую номенклатуру. Различаются индексом.
|
|||
23
Валидатор
07.11.13
✎
18:00
|
(20) там идеи для заполнения 1 вида цен по тем идеям для двух и более видов цен будет как у меня:
Розничная Оптовая ванна 10 рог 15 стул 45 ванна 2 рог 13 стул 14 |
|||
24
Валидатор
07.11.13
✎
18:01
|
(22) то я понял, в консоли запросов у меня по 4 строки получается, поэтому и не выводится ничего, вот и непонятносьт, в какой момент в коде дублироваться может информация
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |