Имя: Пароль:
1C
1С v8
Внешняя обработка, созданная для 8.1, не работает на 8.2 после конвертирования
0 Russkiy
 
18.10.12
10:23
Привет, ребята!

Сейчас у меня 1С Предприятие, версия 8.2.12.75, конфигурация "Управление торговым предприятием для Украины", ред. 1.1.

До этого была 1С Предприятие, версия 8.1.15.14, с той же конфигурацией. Она просто сконвертирована для новой платформы.

Моя проблема состоит в следующем. Когда я работал на прежней платформе, по моему заказу программист 1С сделал для меня внешнюю обработку, с помощью которой я создавал различные документы (Поступление товаров и услуг, Реализация товаров и услуг) с заполнением их табличной части из файла Excel, созданного по определённой форме. Кроме этого, обработка создавала карточки новой Номенклатуры, если не находила в БД ту или иную позицию. Идентификация позиций производилась по штрихкоду.

Эта обработка меня вполне устраивала до определённого момента, пока я не обнаружил один существенный недостаток в работе программы. Этот недостаток описан в моей теме, обсуждённой не так давно на этом форуме, вот ссылка на неё: v8: Неправильная работа при подборе номенклатуры в документ

Кроме проблемы, отчётливо вскрытой в вышеуказанной теме, оказалось, что эта обработка не запускается на платформе 8.2 даже после её конвертирования, выдаётся сообщение:

Ошибка исполнения внешней обработки табличной части документа.
{ОбщийМодуль.УниверсальныеМеханизмы(388)}: Ошибка при вызове метода контекста (Создать): Ошибка подключения внешних метаданных: Ошибка загрузки документа.
Внешняя обработка не может быть прочитана текущей версией программы

К сожалению, у меня нет возможности найти того программиста, который делал эту обработку.

Итак, передо мной две задачи: заставить эту обработку работать на платформе 8.2 и устранить неверное формирование данных, приводящих к проблеме, описанной мной в предыдущей теме (см. вышеуказанную ссылку).

Вполне возможно, что для этого нужны мелкие, пустяковые исправления кода обработки. Если это так, то я прошу помочь мне их внести. Для этого я готов выложить здесь весь код обработки. Кстати, если кого-нибудь из вас заинтересует такая обработка в принципе - можете воспользоваться этой в качестве заготовки, немного подправив её для устранения вышеизложенных проблем.

Жду ваших отзывов. Буду очень признателен за помощь.
1 shamannk
 
18.10.12
10:25
5000т.р.
2 Asmody
 
18.10.12
10:27
одинесники такие одинесники: вываливают ценник даже не глядя  за что
3 Морозов Александр
 
18.10.12
10:27
и кто так что подскажет, не видя кода? а?
4 Russkiy
 
18.10.12
10:29
Да, ребята, я пока смотрю, есть ли у кого-нибудь из вас хоть небольшой интерес к теме и готовность хотя бы посмотреть на этот код...
5 Asmody
 
18.10.12
10:29
для затравки: после конвертирования обработку в базе заменили?
6 shamannk
 
18.10.12
10:30
(4) Тебя нужно упрашивать показать код? Тогда 10000т.р.
7 Russkiy
 
18.10.12
10:32
Asmody, интересный вопрос... Я эту обработку только лишь сконвертировал, когда открывал в конфигураторе на новой платформе.
8 ptiz
 
18.10.12
10:35
(0) Встань отладчиком на эту строку и посмотри, что там делается.
9 ptiz
 
18.10.12
10:35
И проблема не в обработке.
10 Dimel
 
18.10.12
10:48
(0) Мне кажется, вы просто не сконвертировали внешние обработки и обработки заполнения табличных частей, которые хранятся в хранилище.
11 Asmody
 
18.10.12
11:06
(7) а в 1Ске она как открывается?
12 Russkiy
 
18.10.12
11:51
Ребята, для более полного понимания привожу инструкцию по вставке обработки в тот или иной документ, составленной мной для себя же по рекомендации разработчика:

Вставить в документ закладку для запуска процедуры заполнения табличной части данными из документа в формате Excel

Документ должен иметь такую же табличную часть, как и документ "РН" и т.п.

Для того, чтобы вставить в документ закладку для запуска процедуры заполнения табличной части данными из документа в формате Excel, следует выполнить следующие действия в 1С: Сервис - Внешние печатные формы и обработки - Внешние обработки заполнения табличных частей. Щёлкнуть дважды на строке "XLS". В открывшемся окне "Регистрация внешней обработки заполнения табличных частей: XLS" нажать кнопку добавления новой позиции.В открывшемся окне "Принадлежность печатной формы" выбрать нужный документ, в котором реализуется процедура, нажать кнопку "ОК", и когда в первом окне появится эта новая позиция, опять уже в нём нажать кнопку "ОК". В результате в экранной форме документа должна появиться вторая кнопка "Заполнить" (правая), при нажатии которой в выпадающем списке значится всего один пункт - "XLS". Щелчком по нему открывается окно выбора исходного документа в формате Excel, и далее после указания последнего (его выделения) нажатием кнопки "Открыть" запускается процедура заполнения табличной части создаваемого документа. При необходимости параллельно будет отрабатываться и процедура создания новых карточек в Справочнике "Номенклатура".
13 Russkiy
 
18.10.12
12:05
Dimel, а как получить доступ к этим внешним обработкам и обработкам заполнения табличных частей, которые хранятся в хранилище? Чтобы их сконвертировать...
14 ptiz
 
18.10.12
12:10
(13) Там есть иконки "дискетка" и "папка", если нажать F2 на нужной обработке.
15 Dimel
 
18.10.12
12:17
16 Russkiy
 
18.10.12
12:28
Любопытно... Сейчас попробую поконвертировать... :)
17 Russkiy
 
18.10.12
12:47
Ребята, а как в режиме "1С:Предприятие" запустить приложенную обработку "КонвертацияВнешнихОбработок.epf"? Чой-то я в Универсальных обработках таковой не нахожу...
18 Dimel
 
18.10.12
13:08
Это внешняя обработка, идет на ИТС. Если лень поисковиком пользоватся http://www.northsoft.ru/download.php
19 Russkiy
 
18.10.12
13:13
А, в моей конфигурации её может и не быть? Понятно, Dimel... Нет, мне, конечно, не лень, просто я ведь пока не знаю, где она содержится... Точнее - теперь знаю... :) Спасибо Вам за подсказку!
20 Russkiy
 
18.10.12
13:31
Dimel, у меня, похоже, получилось... Во всяком случае, та обработка, которая не запускалась на платформе 8.2, запустилась и отработала нормально. Вот только, как я подозреваю, она и далее будет портить мне номенклатуру, если не подправить должным образом её код... Я очень признателен Вам за Вашу ценную подсказку - благодаря ей первый этап моей проблемы пройден. Спасибо Вам!
21 echo77
 
18.10.12
13:35
херню свою которая не работает выложи
22 Russkiy
 
18.10.12
13:37
Ребята, а как же со второй частью моей проблемы - с кодом обработки? Есть ли среди вас кто-нибудь, кому интересна в принципе эта обработка и кто мог бы и себе её...

Не успел дописать - уже товарищ echo77 поинтересовался... Спасибо, echo77, ща выкладываю...
23 Russkiy
 
18.10.12
13:41
Вот, милости прошу:

Процедура Инициализировать (Объект,ТабличнаЧасть,ТабличноеПолеОбъекта) Экспорт
   
   Товары = Объект[ТабличнаЧасть];
   
   Если Товары.Количество() > 0 Тогда
       В = Вопрос("Очистить табличную часть перед загрузкой?", РежимДиалогаВопрос.ДаНет);
       Если В = КодВозвратаДиалога.Да Тогда
           Товары.Очистить();
       КонецЕсли;
   КонецЕсли;
   
   Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
   Диалог.Заголовок = "Выберите файл для загрузки";
   Диалог.ПолноеИмяФайла = "";
   Диалог.ПредварительныйПросмотр = Истина;
   Диалог.Фильтр = "Файлы XLS(*.xls)|*.xls";
   Если Диалог.Выбрать() Тогда
       ФайлОбмена = Диалог.ПолноеИмяФайла;    
   Иначе
       Возврат;
   КонецЕсли;
   
   xl         = Новый COMОбъект("Excel.Application");  
   Книга     = xl.Application.Workbooks.Open(ФайлОбмена);
   ТекЛист     = Книга.WorkSheets(1);
   
   Для ИндСтр = 2 По 30000 Цикл // строки
       ОбработкаПрерыванияПользователя();
       
       ШтрихКод = СокрЛП(ТекЛист.Cells(ИндСтр, 2).Value);
       ШтрихКод = СтрЗаменить(ШтрихКод," ","");
       Если ШтрихКод = "" Тогда
           Прервать;
       Иначе
           Запрос = Новый Запрос(
           "ВЫБРАТЬ ПЕРВЫЕ 1
           |    РегШК.Владелец КАК Владелец
           |ИЗ
           |    РегистрСведений.Штрихкоды КАК РегШК
           |ГДЕ
           |    РегШК.Штрихкод = &Штрихкод");
           Запрос.УстановитьПараметр("Штрихкод", ШтрихКод);
           РезультатЗапроса = Запрос.Выполнить();
           Если Не РезультатЗапроса.Пустой() Тогда
               РезультатЗапроса = РезультатЗапроса.Выбрать();
               РезультатЗапроса.Следующий();
               Попытка
                   Количество = Число(СокрЛП(ТекЛист.Cells(ИндСтр, 11).Value));
               Исключение
                   Количество = 0;
               КонецПопытки;
               Попытка
                   Цена = Число(СокрЛП(ТекЛист.Cells(ИндСтр, 10).Value));
               Исключение
                   Цена = 0;
               КонецПопытки;
               
               НовСтр = Товары.Добавить();
               НовСтр.Номенклатура = РезультатЗапроса.Владелец;
               НовСтр.Цена = Цена;
               НовСтр.Количество = Количество;
               Если ТипЗнч (Объект.Ссылка) <> Тип("ДокументСсылка.ОприходованиеТоваров") Тогда  
                   НовСтр.СтавкаНДС = РезультатЗапроса.Владелец.СтавкаНДС;
               КонецЕсли;
               НовСтр.ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("шт");
               НовСтр.Коэффициент = 1;
               Объект.ЗаполнитьСчетаУчетаВСтрокеТабЧасти(НовСтр, "Товары", Объект.ОтражатьВБухгалтерскомУчете, Объект.ОтражатьВНалоговомУчете);
               ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(НовСтр, Объект);
               ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(НовСтр, Объект);
           Иначе
               Сообщить("Не найден товар по штрих-коду " + ШтрихКод);
               НоваяНоменклатура = Справочники.Номенклатура.СоздатьЭлемент();
               НоваяНоменклатура.Наименование = СокрЛП(ТекЛист.Cells(ИндСтр, 3).Value);
               НоваяНоменклатура.НаименованиеПолное = СокрЛП(ТекЛист.Cells(ИндСтр, 3).Value);
               НоваяНоменклатура.ГодИздания = СокрЛП(ТекЛист.Cells(ИндСтр, 6).Value);
               НоваяНоменклатура.КолСтраниц = СокрЛП(ТекЛист.Cells(ИндСтр, 7).Value);
               НоваяНоменклатура.ДругиеАвторы = СокрЛП(ТекЛист.Cells(ИндСтр, 4).Value);
               Издательство = СокрЛП(ТекЛист.Cells(ИндСтр, 5).Value);
               Переплёт = СокрЛП(ТекЛист.Cells(ИндСтр, 9).Value);
               ФорматКниги = СокрЛП(ТекЛист.Cells(ИндСтр, 8).Value);
               НоваяНоменклатура.Комментарий = "Издательство:" + Издательство + " Формат: " + ФорматКниги + " Переплёт: " + Переплёт;
               НоваяНоменклатура.БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт");
               НоваяНоменклатура.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Товар");
               НоваяНоменклатура.СтавкаНДС = Перечисления.СтавкиНДС.НДС0;
               НоваяНоменклатура.Записать();
               //Заполняем Единицы измерения для новой номенклатуры
               НайденнаяЕдиницаОбъект = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
               НайденнаяЕдиницаОбъект.Наименование            = СокрЛП(НоваяНоменклатура.БазоваяЕдиницаИзмерения);
               НайденнаяЕдиницаОбъект.ЕдиницаПоКлассификатору = НоваяНоменклатура.БазоваяЕдиницаИзмерения;
               НайденнаяЕдиницаОбъект.Коэффициент             = 1;
               НайденнаяЕдиницаОбъект.Владелец                = НоваяНоменклатура.Ссылка;
               НайденнаяЕдиницаОбъект.Записать();
               НоваяНоменклатура.ЕдиницаХраненияОстатков = НайденнаяЕдиницаОбъект.Ссылка;
               НоваяНоменклатура.ЕдиницаИзмеренияМест = НайденнаяЕдиницаОбъект.Ссылка;
               НоваяНоменклатура.ЕдиницаДляОтчетов = НайденнаяЕдиницаОбъект.Ссылка;
               НоваяНоменклатура.Записать();
               
               ТекЗапись = РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи();
               
               ТекЗапись.Владелец         = НоваяНоменклатура.Ссылка;
               ТекЗапись.ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("шт");;
               ТекЗапись.ТипШтрихкода     = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13;
               ТекЗапись.Качество         = Справочники.Качество.Новый;
               ТекЗапись.Штрихкод         = ШтрихКод;
               Попытка
                   ТекЗапись.Записать();
               Исключение
               КонецПопытки;
               
               Попытка
                   Количество = Число(СокрЛП(ТекЛист.Cells(ИндСтр, 11).Value));
               Исключение
                   Количество = 0;
               КонецПопытки;
               Попытка
                   Цена = Число(СокрЛП(ТекЛист.Cells(ИндСтр, 10).Value));
               Исключение
                   Цена = 0;
               КонецПопытки;
               
               НовСтр = Товары.Добавить();
               НовСтр.Номенклатура = НоваяНоменклатура.Ссылка;
               НовСтр.Цена = Цена;
               НовСтр.Количество = Количество;
               Если ТипЗнч (Объект.Ссылка) <> Тип("ДокументСсылка.ОприходованиеТоваров") Тогда  
                   НовСтр.СтавкаНДС = НоваяНоменклатура.СтавкаНДС;
               КонецЕсли;
               НовСтр.ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("шт");
               НовСтр.Коэффициент = 1;
               Объект.ЗаполнитьСчетаУчетаВСтрокеТабЧасти(НовСтр, "Товары", Объект.ОтражатьВБухгалтерскомУчете, Объект.ОтражатьВНалоговомУчете);
               ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(НовСтр, Объект);
               ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(НовСтр, Объект);
                               
           КонецЕсли;
       КонецЕсли;
   КонецЦикла;
   
   Книга.Close(0);
   xl.Application.Quit();
   xl = 0;
   
   
КонецПроцедуры
24 echo77
 
18.10.12
13:44
Вы файл на файлообменник(например files.mail.ru) выложить можете?
25 Russkiy
 
18.10.12
14:01
Могу, конечно, только мне пока этого не приходилось делать... Как это делается?
26 kimarle
 
18.10.12
14:05
Лучше найдите программиста. и укажите на проблемное место в обработке, а именно часть с присвоением единиц измерения по наименованию.
27 Russkiy
 
18.10.12
14:06
Да, kimarle, похоже, так и придётся сделать...
28 Russkiy
 
18.10.12
15:08
Ещё разок:

Ребята, а как же со второй частью моей проблемы - с кодом обработки? Есть ли среди вас кто-нибудь, кому интересна в принципе эта обработка и кто мог бы и себе её приспособить? Но главное для меня - кто мог бы мне подсказать, как нужно изменить код обработки, чтобы она не портила мне номенклатуру? Если это, конечно, не сложно...
29 ukolabrother
 
18.10.12
15:14
(1)(6) не много просишь?
30 Advan
 
19.10.12
14:34
(28)Думаю за деньги сделают - бесплатно врядли кто будет ковырять чужой код.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс