|   |   | 
| 
 | Загрузка цен из файла в документ | ☑ | ||
|---|---|---|---|---|
| 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 строки получается, поэтому и не выводится ничего, вот и непонятносьт, в какой момент в коде дублироваться может информация     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |