Имя: Пароль:
1C
1С v8
Загрузка прайсов с учетом колонки обозначающей наличие
0 Boudybuilder
 
18.11.12
17:15
Всем привет!
Давно уже создал обработку заполнения РегСв НоменклатураКонтрагентов.
Скачиваю прайс , выставляю соответствия и... Загружаю.
Если в прайсе была колонка по наличию со значением + или - , то я прямо в екселе фильтровал по значению "+" и пересохранял док. Сейчас же у поставщиков появились еще 2 склады. То есть таких колонок имеется уже 3 штуки!  Строка может быть такой + - + , соответственно простым фильтром в Екселе этого не отфильтровать.  Потому в обработке я добавил табличное поле  , куда добавляю строки с названием колонки из прайса указывающей на наличие , и значением заполнения которое обозначает наличие.

Делаю перебором в цыкле.

Посмотрите , и скажите , правильно ли я сделал. Хотя работает ... ;)
Запросом думал легче , но как то не знаю как в обработке обратиться к табличному полю на форме.


   Для Каждого СтрПоля ИЗ ТабПоле Цикл
       Наличие = Ложь;
       Если ТаблицаКолонокНаличия.Количество() > 0 Тогда
           Для Каждого СтрНаличия ИЗ ТаблицаКолонокНаличия Цикл
               Если СокрЛП(СтрНаличия.Значение) = СокрЛП(СтрПоля[СтрНаличия.ИмяКолонки]) Тогда
                   Наличие = Истина;
               КонецЕсли;
           КонецЦикла;
       КонецЕсли;
       
       Если Наличие Тогда
           
           Сообщить(СтрПоля.Номер);
       КонецЕсли;
   КонецЦикла;



А вот скрин обработки , чтобы понятнее было.


http://cs416520.userapi.com/v416520065/6a7/YIGK4QdMRS4.jpg
1 Boudybuilder
 
18.11.12
18:32
Получилось так. Работает нормально. И ,Вроде , быстро...




   СписокНоменклатуры.Очистить();
   НайденнаяСтрока = СоответствиеКолонок.Найти("Наименование", "ИмяКолонки");
   Если НайденнаяСтрока <> Неопределено Тогда
       кНаименование = НайденнаяСтрока.КолонкаСоответствия;
   КонецЕсли;
   НайденнаяСтрока = СоответствиеКолонок.Найти("Код", "ИмяКолонки");
   Если НайденнаяСтрока <> Неопределено Тогда
       кКод = НайденнаяСтрока.КолонкаСоответствия;
   КонецЕсли;
   НайденнаяСтрока = СоответствиеКолонок.Найти("Артикул", "ИмяКолонки");
   Если НайденнаяСтрока <> Неопределено Тогда
       кАртикул = НайденнаяСтрока.КолонкаСоответствия;
   КонецЕсли;
   НайденнаяСтрока = СоответствиеКолонок.Найти("Штрихкод", "ИмяКолонки");
   Если НайденнаяСтрока <> Неопределено Тогда
       кШтрихкод = НайденнаяСтрока.КолонкаСоответствия;
   КонецЕсли;
   
   Для Каждого СтрПоля ИЗ ТабПоле Цикл
       Наличие = Ложь;
       Если ТаблицаКолонокНаличия.Количество() > 0 Тогда
           Для Каждого СтрНаличия ИЗ ТаблицаКолонокНаличия Цикл
               Если СокрЛП(СтрНаличия.Значение) = СокрЛП(СтрПоля[СтрНаличия.ИмяКолонки]) Тогда
                   Наличие = Истина;
               КонецЕсли;
           КонецЦикла;
       КонецЕсли;
       
       Если ТаблицаКолонокНаличия.Количество() > 0 Тогда
           Если Наличие Тогда
               НовСтр = СписокНоменклатуры.Добавить();
               Если ЗначениеЗаполнено(кАртикул) Тогда
                   НовСтр.АртикулНоменклатурыКонтрагента      = СокрЛП(СтрПоля[кАртикул]);
               КонецЕсли;
               Если ЗначениеЗаполнено(кКод) Тогда
                   НовСтр.КодНоменклатурыКонтрагента          = СокрЛП(СтрЗаменить(СтрПоля[кКод],Символы.НПП,""));
               КонецЕсли;
               Если ЗначениеЗаполнено(кНаименование) Тогда
                   НовСтр.НаименованиеНоменклатурыКонтрагента = СокрЛП(СтрПоля[кНаименование]);
               КонецЕсли;
               Если ЗначениеЗаполнено(кШтрихкод) Тогда
                   НовСтр.ШтрихКодНоменклатурыКонтрагента     = СокрЛП(СтрПоля[кШтрихкод]);
               КонецЕсли;
           КонецЕсли;
       Иначе
           НовСтр = СписокНоменклатуры.Добавить();
           Если ЗначениеЗаполнено(кАртикул) Тогда
               НовСтр.АртикулНоменклатурыКонтрагента      = СокрЛП(СтрПоля[кАртикул]);
           КонецЕсли;
           Если ЗначениеЗаполнено(кКод) Тогда
               НовСтр.КодНоменклатурыКонтрагента          = СокрЛП(СтрЗаменить(СтрПоля[кКод],Символы.НПП,""));
           КонецЕсли;
           Если ЗначениеЗаполнено(кНаименование) Тогда
               НовСтр.НаименованиеНоменклатурыКонтрагента = СокрЛП(СтрПоля[кНаименование]);
           КонецЕсли;
           Если ЗначениеЗаполнено(кШтрихкод) Тогда
               НовСтр.ШтрихКодНоменклатурыКонтрагента     = СокрЛП(СтрПоля[кШтрихкод]);
           КонецЕсли;
       КонецЕсли;
   КонецЦикла;
   
   Если НЕ ЗначениеЗаполнено(ТабПоле) Тогда
       Сообщить ("Отсутствуют данные для переноса!",СтатусСообщения.Информация);
       Возврат;
   КонецЕсли;
2 Boudybuilder
 
18.11.12
18:36
Тут один вопросик.
Как мне сделать так чтобы значения строк полей наличия и соответсвия сохранялись соответсвенно реквизиту контрагент?

Тоесть чтобы я по каждому контрагетку заново не перевыставлял где у него в какой колонке что...

А при изменении контрагента все настройки по нему возвращались.