|
Обмен между 1с 7 и 1с 8 Инициатор обмена 1с 8 Протокол ОЛЕ | ☑ | ||
---|---|---|---|---|
0
ugorchina
20.04.18
✎
16:27
|
Всем привет!
посмотрите кому не лень я сделал обмен но не знаю насколько он верный можно ли как то прорастить данный обмен или ускорить? ну или может кому пригодится ) //Процедура используется для ночало обмена между 1с 7 и 1с 8 Процедура НачатьОбменИзмененнымиОбъектамиНажатие() Экспорт Попытка ОбъектV77 = Новый COMОбъект("v77.Application"); Исключение Возврат; КонецПопытки; СтрокаПодключения = "/D"""+СокрЛП("D:\1С\BASE 1C\7\BumST\")+""" /N"""+СокрЛП("Администратор")+""" /P"""+СокрЛП("")+""""; РезультатПодключения = ОбъектV77.Initialize(ОбъектV77.RMTrade,СтрокаПодключения,"NO_SPLASH_SHOW"); Если РезультатПодключения Тогда Иначе ОбщегоНазначения.СообщитьОбОшибке("Базу данных открыть не удалось!" + Символы.ПС + "- Проверьте параметры подключения." + Символы.ПС + "- Проверьте открывается ли база 1С 7.7 (возможно требуется восстановление индексных файлов, либо она уже открыта монопольно)."); ОбъектV77 = Неопределено; Возврат; КонецЕсли; Если ОбъектV77 <> Неопределено Тогда//если неудалось подключится тогда не будем ничего делать! //Зафиксируем признак обмена в сторонней программе ИзмененныеОбъектыОЛЕ = ОбъектV77.CreateObject("Справочник.ИзмененныеОбъекты"); ИзмененныеОбъектыОЛЕ.ВыбратьЭлементы(); Пока ИзмененныеОбъектыОЛЕ.ПолучитьЭлемент() = 1 Цикл ИзмененныеОбъектыОЛЕ.НачатОбмен = 1; ИзмененныеОбъектыОЛЕ.Записать(); КонецЦикла; //Служебные таблицы ОписаниеТипКоличественногоЧисла = Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(19,4)); ОписаниеТипЦеновогоЧисла = Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(15,2)); ОписаниеТипСтрок = Новый ОписаниеТипов("Строка",Новый КвалификаторыСтроки(30)); ТЗОстаткиТоваров = Новый ТаблицаЗначений; ТЗОстаткиТоваров.Колонки.Добавить("Артикул"); ТЗОстаткиТоваров.Колонки.Добавить("Направление"); ТЗОстаткиТоваров.Колонки.Добавить("Остаток", ОписаниеТипКоличественногоЧисла); ТЗЦеныТоваров = Новый ТаблицаЗначений; ТЗЦеныТоваров.Колонки.Добавить("Артикул",ОписаниеТипСтрок); ТЗЦеныТоваров.Колонки.Добавить("Цена", ОписаниеТипЦеновогоЧисла); ИзмененныеОбъекты = ОбъектV77.CreateObject("Справочник.ИзмененныеОбъекты"); ИзмененныеОбъекты.ВыбратьЭлементы(); Пока ИзмененныеОбъекты.ПолучитьЭлемент() = 1 Цикл Если ИзмененныеОбъекты.НачатОбмен = 1 Тогда Если СокрЛП(ИзмененныеОбъекты.ТипОбъекта) = "Справочник" Тогда Если СокрЛП(ИзмененныеОбъекты.ВидОбъекта) = "Номенклатура" Тогда ЕстьИзменения = ОбработатьСправочникВременныхТоваров(ИзмененныеОбъекты.ОбъектЗначение,ОбъектV77); КонецЕсли; ИначеЕсли СокрЛП(ИзмененныеОбъекты.ТипОбъекта) = "Документ" Тогда Если СокрЛП(ИзмененныеОбъекты.ВидОбъекта) = "Счет" Тогда //ДобавитьОбработчик изменяющий статус у заказов ну либ оменяющий что либо в документе Иначе//все остальные документы ЕстьИзменения = ОбработатьСправочникВременныхТоваров(ИзмененныеОбъекты.ОбъектЗначение,ОбъектV77); КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; //Удалим Данные из ИзмененныхОбъектов ИзмененныеОбъектыОЛЕ.ВыбратьЭлементы(); Пока ИзмененныеОбъектыОЛЕ.ПолучитьЭлемент() = 1 Цикл Если ИзмененныеОбъектыОЛЕ.НачатОбмен = 1 Тогда ИзмененныеОбъектыОЛЕ.Удалить(1); КонецЕсли; КонецЦикла; ОбъектV77 = Неопределено; Если ЕстьИзменения = Истина Тогда //1. этап необходимо перебрать справочник Временные товары все с флагом НОВЫЙ // и заполнить новыми элементами основной справочник Номенклатура //Затем установить Флаг Новый в значение Ложь ВременныеТоварыНовые = ЗапросВременныхНовых(); Пока ВременныеТоварыНовые.Следующий() Цикл ВременныеТоварыНовыеВыборкаОбъект = ВременныеТоварыНовые.Ссылка.ПолучитьОбъект(); Номенклатура = Справочники.Номенклатура; НайденнаяСсылка = Номенклатура.НайтиПоРеквизиту("Артикул",СокрЛП(ВременныеТоварыНовыеВыборкаОбъект.Артикул)); Если НайденнаяСсылка = Номенклатура.ПустаяСсылка() Тогда //создать новый элемент НО необходимо сюда передает еще данные такие как ед изм и т д КонецЕсли; ВременныеТоварыНовыеВыборкаОбъект.ЭтоНовыйОбъект = Ложь; ВременныеТоварыНовыеВыборкаОбъект.Записать(); КонецЦикла; //2. этап Необходимо перебрать справочник Временные товары все с флагом ИЗМЕНЕННЫЙ // затем путем пазиционирования на конкретном элементе собрать все одинаковые объеткы по мате АРТИКУЛ // затем заполнить временные табилцы этими данными и установить пометку ИЗМЕНЕННЫЙ НА значение Ложь ВременныеТоварыИзмененные = ЗапросВременныхИзмененных(); Пока ВременныеТоварыИзмененные.Следующий() Цикл ВременныеТоварыИзмененныеВыборкаОбъект = ВременныеТоварыИзмененные.Ссылка.ПолучитьОбъект(); Если ВременныеТоварыИзмененныеВыборкаОбъект.СтарыйОстаток <> ВременныеТоварыИзмененныеВыборкаОбъект.Остаток Тогда СтрОстатки = ТЗОстаткиТоваров.Добавить(); СтрОстатки.Артикул = СокрЛП(ВременныеТоварыИзмененныеВыборкаОбъект.Артикул); СтрОстатки.Направление = СокрЛП(ВременныеТоварыИзмененныеВыборкаОбъект.НаправлениеДвиженияОстатков); СтрОстатки.Остаток = ВременныеТоварыИзмененныеВыборкаОбъект.РазницаВОстатках; КонецЕсли; Если ВременныеТоварыИзмененныеВыборкаОбъект.ЦенаЗакупки > 0 Тогда Если ВременныеТоварыИзмененныеВыборкаОбъект.СтараяЦенаЗакупки <> ВременныеТоварыИзмененныеВыборкаОбъект.ЦенаЗакупки Тогда ЗВТПОАВыборкаДетальныеЗаписи = ЗапроситьВсеТоварыПООдинаковымАртикулам(СокрЛП(ВременныеТоварыИзмененныеВыборкаОбъект.Артикул)); Пока ЗВТПОАВыборкаДетальныеЗаписи.Следующий() Цикл СтрЦены = ТЗЦеныТоваров.Добавить(); СтрЦены.Артикул = СокрЛП(ЗВТПОАВыборкаДетальныеЗаписи.Артикул); СтрЦены.Цена = ЗВТПОАВыборкаДетальныеЗаписи.ЦенаЗакупки; КонецЦикла; КонецЕсли; КонецЕсли; ВременныеТоварыИзмененныеВыборкаОбъект.Измененный = Ложь; ВременныеТоварыИзмененныеВыборкаОбъект.Записать(); КонецЦикла; Если ТЗОстаткиТоваров.Количество() > 0 Тогда ТЗОстаткиТоваров.Свернуть("Артикул,Направление","Остаток"); УстановитьНовыйОстаток(ТЗОстаткиТоваров); КонецЕсли; Если ТЗЦеныТоваров.Количество() > 0 Тогда УстановитьНовуюЦену(ТЗЦеныТоваров); КонецЕсли; КонецЕсли; КонецЕсли; КонецПроцедуры Функция ПолучитьИД(Объект) БезКавычекФигурных = СтрЗаменить(Объект,"{",""); БезКавычекФигурных = СтрЗаменить(БезКавычекФигурных,"}",""); БезПробелов = СокрЛП(БезКавычекФигурных); КоличествоЗнаков = СтрНайти(БезПробелов,",",НаправлениеПоиска.СКонца)+3; Возврат СокрЛП(Сред(Лев(БезПробелов,СтрДлина(БезПробелов)-1),КоличествоЗнаков,СтрДлина(БезПробелов))); КОнецФункции Функция НайтиРодителя(Код,Данные) Спр = Справочники.ВремнныеТоварыИзСтороннейПрограммы.НайтиПоКоду(СокрЛП(Код)); Если Спр.Пустая() = Ложь Тогда Если СОкрЛП(Спр.Наименование) = СокрЛП(Данные.Наименование) Тогда Возврат Спр; Иначе Спр = Справочники.ВремнныеТоварыИзСтороннейПрограммы.НайтиПоНаименованию(СокрЛП(Данные.Наименование)); Если Спр.Пустая() = Ложь Тогда Если СОкрЛП(Спр.Код) = СокрЛП(Данные.Код) Тогда Возврат Спр; Иначе НовГр = Справочники.ВремнныеТоварыИзСтороннейПрограммы.СоздатьГруппу(); НовГр.Код = Данные.Код; НовГр.Наименование = Данные.Наименование; НовГр.Записать(); Возврат НовГр; КонецЕсли; КонецЕсли; КонецЕсли; Иначе НовГр = Справочники.ВремнныеТоварыИзСтороннейПрограммы.СоздатьГруппу(); НовГр.Код = Данные.Код; НовГр.Наименование = Данные.Наименование; НовГр.Записать(); Возврат НовГр; КонецЕсли; КонецФункции //Используется для создания Новой номенклатуры и или изменения имеющиеся //Либо для обмновления цены или остатка товаров Функция ОбработатьСправочникВременныхТоваров(НоменклатураОЛЕ,ОбъектV77) ЕстьИзменения =Ложь; Объект = ОбъектV77.ЗначениеВстрокуВнутр(НоменклатураОЛЕ.ТекущийЭлемент()); ИдентификаторОбъекта = ПолучитьИД(СокрЛП(Объект)); //Поищем Такую Запись Товары = Справочники.ВремнныеТоварыИзСтороннейПрограммы; НайденнаяСсылка = Товары.НайтиПоРеквизиту("УИД",ИдентификаторОбъекта); Если НайденнаяСсылка = Товары.ПустаяСсылка() Тогда //Сообщить("Товары """ + ИдентификаторОбъекта + """ еще нет.");//убрать это так для проверки Если НоменклатураОЛЕ.ЭтоГруппа() = 1 Тогда Нов = Справочники.ВремнныеТоварыИзСтороннейПрограммы.СоздатьГруппу(); Нов.Код = НоменклатураОЛЕ.Код; Нов.Наименование = НоменклатураОЛЕ.Наименование; Нов.УИД = ИдентификаторОбъекта; Нов.ЭтоНовыйОбъект = Истина; Если НоменклатураОЛЕ.Родитель.Наименование <> "" Тогда Нов.Родитель = НайтиРодителя(НоменклатураОЛЕ.Родитель.Код,НоменклатураОЛЕ.Родитель); КонецЕсли; Нов.Записать(); Иначе Нов = Справочники.ВремнныеТоварыИзСтороннейПрограммы.СоздатьЭлемент(); Нов.Код = НоменклатураОЛЕ.Код; Нов.Наименование = НоменклатураОЛЕ.Наименование; Нов.УИД = ИдентификаторОбъекта; Нов.Артикул = НоменклатураОЛЕ.Артикул; Нов.ЭтоНовыйОбъект = Истина; Нов.Измененный = Истина; ПроцентНДС = Неопределено; Если СокрЛП(НоменклатураОЛЕ.СтавкаНДС.Получить(текущаяДата()).Наименование) = "БезНДС" Тогда Нов.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС; ИначеЕсли СокрЛП(НоменклатураОЛЕ.СтавкаНДС.Получить(текущаяДата()).Наименование) = "Без налога (НДС)" Тогда Нов.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС; ИначеЕсли СокрЛП(НоменклатураОЛЕ.СтавкаНДС.Получить(текущаяДата()).Наименование) = "0%" Тогда Нов.СтавкаНДС = Перечисления.СтавкиНДС.НДС0; ИначеЕсли СокрЛП(НоменклатураОЛЕ.СтавкаНДС.Получить(текущаяДата()).Наименование) = "10%" Тогда Нов.СтавкаНДС = Перечисления.СтавкиНДС.НДС10; ПроцентНДС = 10; ИначеЕсли СокрЛП(НоменклатураОЛЕ.СтавкаНДС.Получить(текущаяДата()).Наименование) = "18%" Тогда Нов.СтавкаНДС = Перечисления.СтавкиНДС.НДС18; ПроцентНДС = 18; ИначеЕсли СокрЛП(НоменклатураОЛЕ.СтавкаНДС.Получить(текущаяДата()).Наименование) = "20%" Тогда Нов.СтавкаНДС = Перечисления.СтавкиНДС.НДС20; ПроцентНДС = 20; ИначеЕсли СокрЛП(НоменклатураОЛЕ.СтавкаНДС.Получить(текущаяДата()).Наименование) = "24%" Тогда Нов.СтавкаНДС = Перечисления.СтавкиНДС.НДС24; ПроцентНДС = 24; ИначеЕсли СокрЛП(НоменклатураОЛЕ.СтавкаНДС.Получить(текущаяДата()).Наименование) = "25%" Тогда Нов.СтавкаНДС = Перечисления.СтавкиНДС.НДС25; ПроцентНДС = 25; КонецЕсли; Если НоменклатураОЛЕ.Родитель.Наименование <> "" Тогда Нов.Родитель = НайтиРодителя(НоменклатураОЛЕ.Родитель.Код,НоменклатураОЛЕ.Родитель); КонецЕсли; Субк1 = ОбъектV77.EvalExpr("ВидыСубконто.Номенклатура"); Субк2 = ОбъектV77.EvalExpr("ВидыСубконто.МестаХранения"); Субк3 = ОбъектV77.EvalExpr("ВидыСубконто.Партии"); БИ = ОбъектV77.CreateObject("БухгалтерскиеИтоги"); БИ.ИспользоватьСубконто(Субк1,НоменклатураОЛЕ.ТекущийЭлемент(),1,0); БИ.ИспользоватьСубконто(Субк2,Неопределено,1,0); БИ.ИспользоватьСубконто(Субк3,Неопределено,1,0); БИ.ВыполнитьЗапрос(ТекущаяДата(),ТекущаяДата(),"41.1",Неопределено,Неопределено,1,Неопределено,Неопределено); БИ.ВыбратьСубконто(1); Пока БИ.ПолучитьСубконто(1) = 1 Цикл ЕстьИзменения =Истина; Нов.СтарыйОстаток = Нов.Остаток; Нов.Остаток = БИ.СКД("К"); Нов.НаправлениеДвиженияОстатков = "Приход"; Нов.РазницаВОстатках = БИ.СКД("К"); БИ.ВыбратьСубконто(2); Пока БИ.ПолучитьСубконто(2) = 1 Цикл БИ.ВыбратьСубконто(3); Пока БИ.ПолучитьСубконто(3) = 1 Цикл ЕстьИзменения =Истина; Нов.СтараяЦенаЗакупки = Нов.ЦенаЗакупки; Нов.ЦенаЗакупки = БИ.Субконто(3).Цена; Если ПроцентНДС <> Неопределено Тогда Нов.ЦенаЗакупкиСНДС = (БИ.Субконто(3).Цена*ПроцентНДС/100)+БИ.Субконто(3).Цена; Иначе Нов.ЦенаЗакупкиСНДС = БИ.Субконто(3).Цена; КонецЕсли; КонецЦикла; КонецЦикла; КонецЦикла; Нов.Записать(); КонецЕсли; Иначе //такая запись есть запишем изменения Нов = НайденнаяСсылка.ПолучитьОбъект(); Если НоменклатураОЛЕ.ЭтоГруппа() = 1 Тогда Если СокрЛП(Нов.Код) <> СокрЛП(НоменклатураОЛЕ.Код) Тогда Нов.Код = НоменклатураОЛЕ.Код; КонецЕсли; Если СокрЛП(Нов.Наименование) <> СокрЛП(НоменклатураОЛЕ.Наименование) Тогда Нов.Наименование = НоменклатураОЛЕ.Наименование; КонецЕсли; Если СокрЛП(НоменклатураОЛЕ.Родитель.Наименование) <> "" Тогда Нов.Родитель = НайтиРодителя(НоменклатураОЛЕ.Родитель.Код,НоменклатураОЛЕ.Родитель); КонецЕсли; Нов.Записать(); Иначе Если СокрЛП(Нов.Код) <> СокрЛП(НоменклатураОЛЕ.Код) Тогда Нов.Код = НоменклатураОЛЕ.Код; КонецЕсли; Если СокрЛП(Нов.Наименование) <> СокрЛП(НоменклатураОЛЕ.Наименование) Тогда Нов.Наименование = НоменклатураОЛЕ.Наименование; КонецЕсли; Если СокрЛП(Нов.Артикул) <> СокрЛП(НоменклатураОЛЕ.Артикул) Тогда Нов.Артикул = НоменклатураОЛЕ.Артикул; КонецЕсли; ПроцентНДС = Неопределено; Если СокрЛП(НоменклатураОЛЕ.СтавкаНДС.Получить(текущаяДата()).Наименование) = "БезНДС" Тогда Нов.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС; Нов.ЭтоНовыйОбъект = Ложь; Нов.Измененный = Истина; ИначеЕсли СокрЛП(НоменклатураОЛЕ.СтавкаНДС.Получить(текущаяДата()).Наименование) = "Без налога (НДС)" Тогда Нов.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС; Нов.ЭтоНовыйОбъект = Ложь; Нов.Измененный = Истина; ИначеЕсли СокрЛП(НоменклатураОЛЕ.СтавкаНДС.Получить(текущаяДата()).Наименование) = "0%" Тогда Нов.СтавкаНДС = Перечисления.СтавкиНДС.НДС0; Нов.ЭтоНовыйОбъект = Ложь; Нов.Измененный = Истина; ИначеЕсли СокрЛП(НоменклатураОЛЕ.СтавкаНДС.Получить(текущаяДата()).Наименование) = "10%" Тогда Нов.СтавкаНДС = Перечисления.СтавкиНДС.НДС10; ПроцентНДС = 10; Нов.ЭтоНовыйОбъект = Ложь; Нов.Измененный = Истина; ИначеЕсли СокрЛП(НоменклатураОЛЕ.СтавкаНДС.Получить(текущаяДата()).Наименование) = "18%" Тогда Нов.СтавкаНДС = Перечисления.СтавкиНДС.НДС18; ПроцентНДС = 18; Нов.ЭтоНовыйОбъект = Ложь; Нов.Измененный = Истина; ИначеЕсли СокрЛП(НоменклатураОЛЕ.СтавкаНДС.Получить(текущаяДата()).Наименование) = "20%" Тогда Нов.СтавкаНДС = Перечисления.СтавкиНДС.НДС20; ПроцентНДС = 20; Нов.ЭтоНовыйОбъект = Ложь; Нов.Измененный = Истина; ИначеЕсли СокрЛП(НоменклатураОЛЕ.СтавкаНДС.Получить(текущаяДата()).Наименование) = "24%" Тогда Нов.СтавкаНДС = Перечисления.СтавкиНДС.НДС24; ПроцентНДС = 24; Нов.ЭтоНовыйОбъект = Ложь; Нов.Измененный = Истина; ИначеЕсли СокрЛП(НоменклатураОЛЕ.СтавкаНДС.Получить(текущаяДата()).Наименование) = "25%" Тогда Нов.СтавкаНДС = Перечисления.СтавкиНДС.НДС25; ПроцентНДС = 25; Нов.ЭтоНовыйОбъект = Ложь; Нов.Измененный = Истина; КонецЕсли; Направление = ""; Было = 0; Если СокрЛП(НоменклатураОЛЕ.Родитель.Наименование) <> "" Тогда Нов.Родитель = НайтиРодителя(НоменклатураОЛЕ.Родитель.Код,НоменклатураОЛЕ.Родитель); КонецЕсли; Субк1 = ОбъектV77.EvalExpr("ВидыСубконто.Номенклатура"); Субк2 = ОбъектV77.EvalExpr("ВидыСубконто.МестаХранения"); Субк3 = ОбъектV77.EvalExpr("ВидыСубконто.Партии"); БИ = ОбъектV77.CreateObject("БухгалтерскиеИтоги"); БИ.ИспользоватьСубконто(Субк1,НоменклатураОЛЕ.ТекущийЭлемент(),1,0); БИ.ИспользоватьСубконто(Субк2,Неопределено,1,0); БИ.ИспользоватьСубконто(Субк3,Неопределено,1,0); БИ.ВыполнитьЗапрос(ТекущаяДата(),ТекущаяДата(),"41.1",Неопределено,Неопределено,1,Неопределено,Неопределено); БИ.ВыбратьСубконто(1); Пока БИ.ПолучитьСубконто(1) = 1 Цикл Если Нов.Остаток <> БИ.СКД("К") Тогда Было = Нов.Остаток; Если Нов.Остаток > БИ.СКД("К") Тогда Направление = "Расход"; ИначеЕсли Нов.Остаток < БИ.СКД("К") Тогда Направление = "Приход"; КонецЕсли; Если Направление <> "" Тогда ЕстьИзменения =Истина; Нов.СтарыйОстаток = Нов.Остаток; Нов.Остаток = БИ.СКД("К"); Нов.НаправлениеДвиженияОстатков = Направление; Если БИ.СКД("К")-Было<0 тогда Нов.РазницаВОстатках = (БИ.СКД("К")-Было)*-1; Иначе Нов.РазницаВОстатках = БИ.СКД("К")-Было; КонецЕсли; Нов.ЭтоНовыйОбъект = Ложь; Нов.Измененный = Истина; КонецЕсли; КонецЕсли; БИ.ВыбратьСубконто(2); Пока БИ.ПолучитьСубконто(2) = 1 Цикл БИ.ВыбратьСубконто(3); Пока БИ.ПолучитьСубконто(3) = 1 Цикл Если Нов.ЦенаЗакупки <> БИ.Субконто(3).Цена Тогда ЕстьИзменения =Истина; Нов.СтараяЦенаЗакупки = Нов.ЦенаЗакупки; Нов.ЦенаЗакупки = БИ.Субконто(3).Цена; Нов.ЭтоНовыйОбъект = Ложь; Нов.Измененный = Истина; КонецЕсли; Если ПроцентНДС <> Неопределено Тогда ЕстьИзменения =Истина; Нов.ЦенаЗакупкиСНДС = (БИ.Субконто(3).Цена*ПроцентНДС/100)+БИ.Субконто(3).Цена; Нов.ЭтоНовыйОбъект = Ложь; Нов.Измененный = Истина; Иначе ЕстьИзменения =Истина; Нов.ЦенаЗакупкиСНДС = БИ.Субконто(3).Цена; Нов.ЭтоНовыйОбъект = Ложь; Нов.Измененный = Истина; КонецЕсли; КонецЦикла; КонецЦикла; КонецЦикла; Нов.Записать(); КонецЕсли; КонецЕсли; Возврат ЕстьИзменения; КонецФункции Процедура УстановитьНовуюЦену(ТЗЦеныТоваров) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ТЗЦеныТоваров.Артикул КАК Артикул, | ТЗЦеныТоваров.Цена КАК Цена |ПОМЕСТИТЬ ТЗ |ИЗ | &ТЗЦеныТоваров КАК ТЗЦеныТоваров; | |ВЫБРАТЬ | ТЗ.Артикул КАК Артикул, | МАКСИМУМ(ТЗ.Цена) КАК Цена |ИЗ | ТЗ |СГРУППИРОВАТЬ ПО | ТЗ.Артикул"; Запрос.УстановитьПараметр("ТЗЦеныТоваров",ТЗЦеныТоваров); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); ДокОст = Документы.КорректировкаЗаписейРегистров.СоздатьДокумент(); ДокОст.Дата = ТекущаяДата(); ДокОст.Комментарий = "Установка Цен сформирован при обмене с 1с 7" ; ДокОст.Ответственный = ПараметрыСеанса.ТекущийПользователь; НовСтр = ДокОст.ТаблицаРегистровСведений.Добавить(); НовСтр.Имя = "ЦеныНоменклатуры"; НовСтр.Представление = "Цены номенклатуры"; ДокОст.Записать(); НовыеДанные = ДокОст.Ссылка; НаборЗаписей = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Регистратор.Установить(НовыеДанные); Записывать = Ложь; Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Записывать = Истина; НоменклНовЦена = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул",СокрЛП(ВыборкаДетальныеЗаписи.Артикул)).Ссылка; Если НоменклНовЦена <> Справочники.Номенклатура.ПустаяСсылка() Тогда НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Период = НовыеДанные.Дата; НоваяЗапись.Активность = Истина; НоваяЗапись.ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000001").Ссылка; НоваяЗапись.Номенклатура = НоменклНовЦена; Новаязапись.Валюта = Справочники.Валюты.НайтиПоКоду("974").Ссылка; НоваяЗапись.Цена = ВыборкаДетальныеЗаписи.Цена; Новаязапись.ЕдиницаИзмерения = НоменклНовЦена.ЕдиницаХраненияОстатков.Ссылка; КонецЕсли; КонецЦикла; Если Записывать = Истина Тогда НаборЗаписей.Записать(); КонецЕсли; КонецПроцедуры //установимНовые Процедура УстановитьНовыйОстаток(Остатки) ДокОст = Документы.КорректировкаЗаписейРегистров.СоздатьДокумент(); ДокОст.Дата = ТекущаяДата();//Запишем документ в следующий день, за днем свертки ДокОст.Комментарий = "Корректировка остатков Сформирован при обмене с 1с 7" ; ДокОст.Ответственный = ПараметрыСеанса.ТекущийПользователь; НовСтр = ДокОст.ТаблицаРегистровНакопления.Добавить(); НовСтр.Имя = "ТоварыНаСкладах"; НовСтр.Представление = "Товары на складах"; НовСтр = ДокОст.ТаблицаРегистровНакопления.Добавить(); НовСтр.Имя = "ТоварыОрганизаций"; НовСтр.Представление = "Товары организаций"; ДокОст.Записать(); НовыеДанные = ДокОст.Ссылка; НаборЗаписей = РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Регистратор.Установить(НовыеДанные); Дас = Ложь; остат = 0; Для Каждого Стр Из Остатки Цикл Если Стр.Остаток<0 тогда остат = Стр.Остаток*-1; Иначе остат = Стр.Остаток; КонецЕсли; Дас = Истина; НоменклНовОстаток = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул",СокрЛП(Стр.Артикул)).Ссылка; Если НоменклНовОстаток <> Справочники.Номенклатура.ПустаяСсылка() Тогда НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Период = НовыеДанные.Дата; НоваяЗапись.Активность = Истина; Если СокрЛП(Стр.Направление) = "Приход" Тогда НоваяЗапись.ВидДвижения = ВидДвиженияНакопления.Приход; ИначеЕсли СокрЛП(Стр.Направление) = "Расход" Тогда НоваяЗапись.ВидДвижения = ВидДвиженияНакопления.Расход; КонецЕсли; НоваяЗапись.Количество = остат; НоваяЗапись.Склад = Справочники.Склады.НайтиПоНаименованию("Основной").Ссылка; Новаязапись.Качество = Справочники.Качество.НайтиПоНаименованию("Новый").Ссылка; НоваяЗапись.Номенклатура = НоменклНовОстаток; НоваяЗапись.Регистратор = НовыеДанные; КонецЕсли; КонецЦикла; Если Дас = Истина Тогда НаборЗаписей.Записать(); КонецЕсли; НаборЗаписей = РегистрыНакопления.ТоварыОрганизаций.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Регистратор.Установить(НовыеДанные); Записывать = Ложь; остат = 0; Для Каждого Стр Из Остатки Цикл Если Стр.Остаток < 0 тогда остат = Стр.Остаток*-1; Иначе остат = Стр.Остаток; КонецЕсли; Записывать = Истина; НоменклНовОстаток = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул",СокрЛП(Стр.Артикул)).Ссылка; Если НоменклНовОстаток <> Справочники.Номенклатура.ПустаяСсылка() Тогда НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Период = НовыеДанные.Дата; НоваяЗапись.Активность = Истина; Если СокрЛП(Стр.Направление) = "Приход" Тогда НоваяЗапись.ВидДвижения = ВидДвиженияНакопления.Приход; ИначеЕсли СокрЛП(Стр.Направление) = "Расход" Тогда НоваяЗапись.ВидДвижения = ВидДвиженияНакопления.Расход; КонецЕсли; НоваяЗапись.Количество = остат; НоваяЗапись.Организация = Справочники.Организации.НайтиПоКоду("000000001").Ссылка; Новаязапись.Качество = Справочники.Качество.НайтиПоНаименованию("Новый").Ссылка; НоваяЗапись.Номенклатура = НоменклНовОстаток; НоваяЗапись.Регистратор = НовыеДанные; КонецЕсли; КонецЦикла; Если Записывать = Истина Тогда НаборЗаписей.Записать(); КонецЕсли; КонецПроцедуры Функция ЗапросВременныхНовых() //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА // Данный фрагмент построен конструктором. // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!! Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ВремнныеТоварыИзСтороннейПрограммы.Ссылка КАК Ссылка, | ВремнныеТоварыИзСтороннейПрограммы.ВерсияДанных КАК ВерсияДанных, | ВремнныеТоварыИзСтороннейПрограммы.ПометкаУдаления КАК ПометкаУдаления, | ВремнныеТоварыИзСтороннейПрограммы.Родитель КАК Родитель, | ВремнныеТоварыИзСтороннейПрограммы.ЭтоГруппа КАК ЭтоГруппа, | ВремнныеТоварыИзСтороннейПрограммы.Код КАК Код, | ВремнныеТоварыИзСтороннейПрограммы.Наименование КАК Наименование, | ВремнныеТоварыИзСтороннейПрограммы.Артикул КАК Артикул, | ВремнныеТоварыИзСтороннейПрограммы.УИД КАК УИД, | ВремнныеТоварыИзСтороннейПрограммы.Остаток КАК Остаток, | ВремнныеТоварыИзСтороннейПрограммы.ЦенаЗакупки КАК ЦенаЗакупки, | ВремнныеТоварыИзСтороннейПрограммы.СтавкаНДС КАК СтавкаНДС, | ВремнныеТоварыИзСтороннейПрограммы.ЦенаЗакупкиСНДС КАК ЦенаЗакупкиСНДС, | ВремнныеТоварыИзСтороннейПрограммы.Измененный КАК Измененный, | ВремнныеТоварыИзСтороннейПрограммы.ЭтоНовыйОбъект КАК ЭтоНовыйОбъект, | ВремнныеТоварыИзСтороннейПрограммы.НаправлениеДвиженияОстатков КАК НаправлениеДвиженияОстатков, | ВремнныеТоварыИзСтороннейПрограммы.РазницаВОстатках КАК РазницаВОстатках, | ВремнныеТоварыИзСтороннейПрограммы.Предопределенный КАК Предопределенный, | ВремнныеТоварыИзСтороннейПрограммы.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных |ИЗ | Справочник.ВремнныеТоварыИзСтороннейПрограммы КАК ВремнныеТоварыИзСтороннейПрограммы |ГДЕ | ВремнныеТоварыИзСтороннейПрограммы.ЭтоНовыйОбъект = &Истина"; Запрос.УстановитьПараметр("Истина", Истина); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Возврат ВыборкаДетальныеЗаписи; //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА КонецФункции Функция ЗапросВременныхИзмененных() //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА // Данный фрагмент построен конструктором. // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!! Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ВремнныеТоварыИзСтороннейПрограммы.Ссылка КАК Ссылка, | ВремнныеТоварыИзСтороннейПрограммы.ВерсияДанных КАК ВерсияДанных, | ВремнныеТоварыИзСтороннейПрограммы.ПометкаУдаления КАК ПометкаУдаления, | ВремнныеТоварыИзСтороннейПрограммы.Родитель КАК Родитель, | ВремнныеТоварыИзСтороннейПрограммы.ЭтоГруппа КАК ЭтоГруппа, | ВремнныеТоварыИзСтороннейПрограммы.Код КАК Код, | ВремнныеТоварыИзСтороннейПрограммы.Наименование КАК Наименование, | ВремнныеТоварыИзСтороннейПрограммы.Артикул КАК Артикул, | ВремнныеТоварыИзСтороннейПрограммы.УИД КАК УИД, | ВремнныеТоварыИзСтороннейПрограммы.Остаток КАК Остаток, | ВремнныеТоварыИзСтороннейПрограммы.ЦенаЗакупки КАК ЦенаЗакупки, | ВремнныеТоварыИзСтороннейПрограммы.СтавкаНДС КАК СтавкаНДС, | ВремнныеТоварыИзСтороннейПрограммы.ЦенаЗакупкиСНДС КАК ЦенаЗакупкиСНДС, | ВремнныеТоварыИзСтороннейПрограммы.Измененный КАК Измененный, | ВремнныеТоварыИзСтороннейПрограммы.ЭтоНовыйОбъект КАК ЭтоНовыйОбъект, | ВремнныеТоварыИзСтороннейПрограммы.НаправлениеДвиженияОстатков КАК НаправлениеДвиженияОстатков, | ВремнныеТоварыИзСтороннейПрограммы.РазницаВОстатках КАК РазницаВОстатках, | ВремнныеТоварыИзСтороннейПрограммы.Предопределенный КАК Предопределенный, | ВремнныеТоварыИзСтороннейПрограммы.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных |ИЗ | Справочник.ВремнныеТоварыИзСтороннейПрограммы КАК ВремнныеТоварыИзСтороннейПрограммы |ГДЕ | ВремнныеТоварыИзСтороннейПрограммы.Измененный = &Истина"; Запрос.УстановитьПараметр("Истина", Истина); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Возврат ВыборкаДетальныеЗаписи; //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА КонецФункции Функция ЗапроситьВсеТоварыПООдинаковымАртикулам(Артикул) //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА // Данный фрагмент построен конструктором. // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!! Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ВремнныеТоварыИзСтороннейПрограммы.Ссылка КАК Ссылка, | ВремнныеТоварыИзСтороннейПрограммы.ВерсияДанных КАК ВерсияДанных, | ВремнныеТоварыИзСтороннейПрограммы.ПометкаУдаления КАК ПометкаУдаления, | ВремнныеТоварыИзСтороннейПрограммы.Родитель КАК Родитель, | ВремнныеТоварыИзСтороннейПрограммы.ЭтоГруппа КАК ЭтоГруппа, | ВремнныеТоварыИзСтороннейПрограммы.Код КАК Код, | ВремнныеТоварыИзСтороннейПрограммы.Наименование КАК Наименование, | ВремнныеТоварыИзСтороннейПрограммы.Артикул КАК Артикул, | ВремнныеТоварыИзСтороннейПрограммы.УИД КАК УИД, | ВремнныеТоварыИзСтороннейПрограммы.СтарыйОстаток КАК СтарыйОстаток, | ВремнныеТоварыИзСтороннейПрограммы.Остаток КАК Остаток, | ВремнныеТоварыИзСтороннейПрограммы.СтараяЦенаЗакупки КАК СтараяЦенаЗакупки, | ВремнныеТоварыИзСтороннейПрограммы.ЦенаЗакупки КАК ЦенаЗакупки, | ВремнныеТоварыИзСтороннейПрограммы.СтавкаНДС КАК СтавкаНДС, | ВремнныеТоварыИзСтороннейПрограммы.ЦенаЗакупкиСНДС КАК ЦенаЗакупкиСНДС, | ВремнныеТоварыИзСтороннейПрограммы.Измененный КАК Измененный, | ВремнныеТоварыИзСтороннейПрограммы.ЭтоНовыйОбъект КАК ЭтоНовыйОбъект, | ВремнныеТоварыИзСтороннейПрограммы.НаправлениеДвиженияОстатков КАК НаправлениеДвиженияОстатков, | ВремнныеТоварыИзСтороннейПрограммы.РазницаВОстатках КАК РазницаВОстатках, | ВремнныеТоварыИзСтороннейПрограммы.Предопределенный КАК Предопределенный, | ВремнныеТоварыИзСтороннейПрограммы.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных |ИЗ | Справочник.ВремнныеТоварыИзСтороннейПрограммы КАК ВремнныеТоварыИзСтороннейПрограммы |ГДЕ | ВремнныеТоварыИзСтороннейПрограммы.Артикул = &Артикул"; Запрос.УстановитьПараметр("Артикул", Артикул); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Возврат ВыборкаДетальныеЗаписи; //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА КонецФункции |
|||
1
ugorchina
20.04.18
✎
16:38
|
+(0) простите
можно ли как то упростить данный обмен или ускорить? |
|||
2
hhhh
20.04.18
✎
16:45
|
(1) ну, тут 200 строчек всего. а в типовом обмене 20000. Поэтму тут вряд ли чего упростишь.
|
|||
3
ugorchina
20.04.18
✎
17:00
|
(2) а по существу? Все ли верно? В принципе обмен работает все переносится но он занимает около 6 секунд это нормально? Либо можно ускорить как то? Может есть предложения по оптимизации запросов?
|
|||
4
X Leshiy
20.04.18
✎
17:03
|
(3) Замер производительности сделай.
Подозреваю, 5.9 из 6 секунд это подключение к 77. |
|||
5
ugorchina
20.04.18
✎
17:12
|
(4) в запрашиваемому справочнике в семёрке 200 элементов! Подключение производится менее секунды
|
|||
6
X Leshiy
20.04.18
✎
17:17
|
(5) Скрин замера.
COMОбъект("v77.Application") это примерно как запустить базу. Меньше секунды, сказки) |
|||
7
X Leshiy
20.04.18
✎
17:18
|
(6) + Если скорость чего-то не устраивает, первым делом замер производительности и втыкать в него.
Бывают чУдные открытия))) |
|||
8
HawkEye
20.04.18
✎
17:26
|
(0) зачем ты сначала в цикле все элементам проставляешь флаг:
ИзмененныеОбъектыОЛЕ = ОбъектV77.CreateObject("Справочник.ИзмененныеОбъекты"); ИзмененныеОбъектыОЛЕ.ВыбратьЭлементы(); Пока ИзмененныеОбъектыОЛЕ.ПолучитьЭлемент() = 1 Цикл ИзмененныеОбъектыОЛЕ.НачатОбмен = 1; ИзмененныеОбъектыОЛЕ.Записать(); КонецЦикла; потом запускаешь снова цикл с условием: ИзмененныеОбъекты = ОбъектV77.CreateObject("Справочник.ИзмененныеОбъекты"); ИзмененныеОбъекты.ВыбратьЭлементы(); Пока ИзмененныеОбъекты.ПолучитьЭлемент() = 1 Цикл Если ИзмененныеОбъекты.НачатОбмен = 1 Тогда ?? |
|||
9
ugorchina
20.04.18
✎
17:50
|
(8) Если в семёрке не установлен этот флаг то изменения не дублируются
|
|||
10
ugorchina
20.04.18
✎
17:52
|
(8) хотя Вы правы! Можно и установить флаг и запросить данные одновременно спасибо за подсказку
|
|||
11
ugorchina
20.04.18
✎
17:56
|
(8) нет сам уже путаюсь в том что я сделал в запрашиваемому справочнике нет элементов дулей но они могут быть только когда мы установили флаг если при обмене мы затратам много времени то в какой либо момент юзер может проводить документ и тут в данный спроси могут писаться новые данные потому я сперва пробегают по данному спр и помечаются его что бы семёрка знала что он уже участвует в обмене а затем я выбираю только помеченные объекты ну потом удаляю их
|
|||
12
ugorchina
20.04.18
✎
21:28
|
Со всем остальным кодом все ок?
|
|||
13
ugorchina
21.04.18
✎
02:20
|
+(4) произвел замер производительности Да Вы правы подключение заняло 4,5 секунды все остальные занимают меньше секунды ( подключение к 7-ке составляет 99,88%
|
|||
14
Chameleon1980
21.04.18
✎
04:10
|
где у вас идет запись в справочник измененные объекты?
там складывайте куда-нить и оттуда забирайте 8кой. я к тому, что, может, не нужно вам ком-соединение. |
|||
15
ugorchina
21.04.18
✎
21:55
|
(14) а чем ОЛЕ плох 5 секундами на подключение? Как Вы считаете что будет если подключится к 7-ке и не отключаться?
|
|||
16
Chameleon1980
21.04.18
✎
21:58
|
(15) да ничем. Кто из нас скорость просит?
|
|||
17
Chameleon1980
21.04.18
✎
22:00
|
да ниче не будет, ИМХО.
Так и будет висеть коннект пока ченить не произойдет или не оборвешь сам. А произойти может что угодно |
|||
18
ugorchina
21.04.18
✎
22:32
|
А что может произойти то?
|
|||
19
Chameleon1980
21.04.18
✎
22:45
|
еще раз - хоть что
|
|||
20
Chameleon1980
21.04.18
✎
22:45
|
(18) руки в руки и пробовать
|
|||
21
ugorchina
21.04.18
✎
23:39
|
(20) спасибо буду пробовать
|
|||
22
kalashns
22.04.18
✎
15:17
|
Возьму на заметку. Хороший пример.
|
|||
23
ugorchina
22.04.18
✎
19:18
|
(22) Вы серьезно?
|
|||
24
ugorchina
22.04.18
✎
19:20
|
(23) я к тому что с 1с я работаю не больше трёх недель :-)
|
|||
25
ugorchina
22.04.18
✎
19:22
|
(22) но спасибо мне приятно что моя работа камуто пригодится ( ну не совсем моя весь этот код собран из примеров которые я насобирал в нетерпением + из советов которые мне довели на этом форуме
|
|||
26
ugorchina
23.04.18
✎
05:56
|
(20) и все таки Вы предлагаете сдать клиенту продукт который будет заведомо для тестирования? )))
Вами было заявлено что будут глюки и т д но рассказать о том что может быть Вы не пишите ( если бы у меня было бы время на етсты я бы тестировал (хотя так и сделаю но у себя а не у клиента) если я верно понимаю то при активном соединении с 7-кой затраты по времени снизятся так как соединяться уже не нужно будет с базой но что будет если в 7-ку кто то захочет войти монопольно? пустит ли она юзера когда по ОЛЕ активное соединение висит? потом этот код лежит в общем модуле и выполняется он по регламентному заданию можно ли как то установить активное подключение вроде нет же? |
|||
27
ugorchina
23.04.18
✎
05:58
|
что касаемо (0) спасибо за ответы но что касаемо подключения это понятно что оно будет занимать какое то время и я уже от этого не избавлюсь я просил в (0) посмотреть на код вероятно там что либо может криво написано или что то можно упростить или ускорить посредством оптимизации
|
|||
28
ugorchina
23.04.18
✎
06:36
|
Можно ли использовать такого рода функцию
МассивСоединений = ПолучитьСоединенияИнформационнойБазы(); ЕстьКтотоКромеМеня = Ложь; Для каждого Соединение Из МассивСоединений Цикл Если Соединение.Пользователь <> ТекущийПользователь() Тогда ЕстьКтотоКромеМеня = Истина; продолжить; КонецЕсли; КонецЦикла; если ЕстьКтотоКромеМеня = Ложь Тогда Выполняем регламентные операции от этого юзера КонецЕсли; чем это будет чревато? есть ли какие то подводные камни (этот вариант я хочу использовать для того что бы не было важно от кого вошли в систему что бы регламентные операции запускались от одного юзера но от того кто первый вошел в всистему |
|||
29
ugorchina
23.04.18
✎
06:50
|
и еще как из модуля который отрабатывает от регламентного задания выдать сообщени е пользователю?
Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Начат обмен с 1с 7"; Сообщение.Сообщить(); как здесь назначить пользователя? или пользователей? я о тех кто активен |
|||
30
ugorchina
23.04.18
✎
09:43
|
(29) уже решил спасибо (28) ответьте если не лень )
|
|||
31
ugorchina
10.05.18
✎
10:20
|
Итак доделал я наконец обмен
код положил в обработку Вот код //Процедура используется для ночало обмена между 1с 7 и 1с 8 Процедура НачатьОбменИзмененнымиОбъектамиНажатие() Экспорт ЕстьОшибки = Ложь; УзелыОбмена = ПолучитьУзлыОбена(); Пока УзелыОбмена.Следующий() Цикл Комментарий = ""; Комментарий = Комментарий+ " "+"<h1>"+"Дата и время"+"</h1>"+"<h1>"+ТекущаяДата()+"</h1>"+"<br>"; Комментарий = Комментарий+"<Br>"+ "Подключение к сторонней программе"; ОбъектV77 = Новый COMОбъект("v77.Application"); СтрокаПодключения = "/D"""+СокрЛП(УзелыОбмена.КаталогСтороннейПрограммы)+""" /N"""+СокрЛП(УзелыОбмена.ОбменИмяПользователя)+""" /P"""+СокрЛП(УзелыОбмена.ОбменПароль)+""""; РезультатПодключения = ОбъектV77.Initialize(ОбъектV77.RMTrade,СтрокаПодключения,"NO_SPLASH_SHOW"); Комментарий = Комментарий+ " "+"<h1>"+"Дата и время"+"</h1>"+"<h1>"+ТекущаяДата()+"</h1>"+"<br>"; Комментарий = Комментарий+"<Br>"+ "Окончание попытки Подключения к сторонней программе"; Если РезультатПодключения Тогда //Загрузим в стороннюю программу НОВЫЕ заказы Комментарий = Комментарий+ " "+"<h1>"+"Дата и время"+"</h1>"+"<h1>"+ТекущаяДата()+"</h1>"+"<br>"; Комментарий = Комментарий+"<Br>"+ "Удачное Подключения к сторонней программе"; НовыеЗаказыЕсть = Ложь; МассивЗаказов = ПолучитьНовыеЗаказы(); Пока МассивЗаказов.Следующий() Цикл НовыеЗаказыЕсть = Истина; ДатаЗаказа = МассивЗаказов.Дата; НомерЗаказа = МассивЗаказов.Номер; Контрагент = МассивЗаказов.Контрагент; Договор = МассивЗаказов.ДоговорКонтрагента; КонтрагентОЛЕ = Неопределено; ДоговорОЛЕ = Неопределено; НайтиИлиСоздатьКонтрагента(Контрагент,Договор,ОбъектV77,КонтрагентОЛЕ,ДоговорОЛЕ); //НашлиТакойСчет = Ложь; //СчетОбъектыОЛЕ = ОбъектV77.CreateObject("Документ.Счет"); //СчетОбъектыОЛЕ.ВыбратьДокументы(ДатаЗаказа,ДатаЗаказа); //Пока СчетОбъектыОЛЕ.ВыбратьДокументы() = 1 Цикл // Если СокрЛП(НомерЗаказа) = СчетОбъектыОЛЕ.НомерДок Тогда // НашлиТакойСчет = Истина; // Продолжить; // КонецЕсли; //КонецЦикла; //Если НашлиТакойСчет = Ложь Тогда СчетНовыйОЛЕ = ОбъектV77.CreateObject("Документ.Счет"); СчетНовыйОЛЕ.Новый(); //Заполнить шапку документа СчетНовыйОЛЕ.ДатаДок = ДатаЗаказа; //СчетНовыйОЛЕ.НомерДок = НомерЗаказа; //номер в сторонней может быть числовой Если КонтрагентОЛЕ <> Неопределено Тогда СчетНовыйОЛЕ.Контрагент = КонтрагентОЛЕ; КонецЕсли; Если ДоговорОЛЕ <> Неопределено Тогда СчетНовыйОЛЕ.Договор = ДоговорОЛЕ; КонецЕсли; //СчетНовыйОЛЕ.Плательщик = ПолучитьПлательщикаПоОЛЕ(); //СчетНовыйОЛЕ.РасчетныйСчет = ПолучитьРасчетныйСчетПоОЛЕ(КонтрагентОЛЕ); //СчетНовыйОЛЕ.ЦельПриобретения = ПолучитьЦельПриобретенияПоОЛЕ(); //СчетНовыйОЛЕ.ТипЦен = ПолучитьТипЦенПоОЛЕ(); //СчетНовыйОЛЕ.МестоХранения = ПолучитьМестоХранениеПоОЛЕ(); Комментарий = Комментарий+ " "+"<h1>"+"Дата и время"+"</h1>"+"<h1>"+ТекущаяДата()+"</h1>"+"<br>"; СчетНовыйОЛЕ.Комментарий = "Документ загружен с сайта № заказа = "+НомерЗаказа;//запишем номер заказа в комментарий //Далее работаем с табличной Частью Для Каждого ТекущаяСтрока Из МассивЗаказов.Ссылка.Товары Цикл НайденыйТоварВСтроку = ПолучитьТоварПоОЛЕ(СокрЛП(ТекущаяСтрока.Номенклатура.Артикул),ОбъектV77); //СписокДанных = НайтиПартию(НайденыйТоварВСтроку,ОбъектV77,"Партию"); //Партия = НайтиПартию(НайденыйТоварВСтроку,ОбъектV77,"Партию"); //Остаток = НайтиПартию(НайденыйТоварВСтроку,ОбъектV77,"Остаток"); //Остаток = СписокДанных.Получить(0); //Если СокрЛП(Остаток) = "<Пустое значение>" Тогда // Остаток = 0; //КонецЕсли; //Склад = СписокДанных.Получить(1); //Партия = СписокДанных.Получить(2); Если НайденыйТоварВСтроку <> Неопределено Тогда СчетНовыйОЛЕ.НоваяСтрока(); СчетНовыйОЛЕ.Товар = НайденыйТоварВСтроку; //Если СокрЛП(Партия) <> "<Пустое значение>" Тогда //СчетНовыйОЛЕ.Партия = Партия; //КонецЕсли; СчетНовыйОЛЕ.Количество = ТекущаяСтрока.Количество; СчетНовыйОЛЕ.Цена = ТекущаяСтрока.Цена; СчетНовыйОЛЕ.Сумма = ТекущаяСтрока.Сумма; СчетНовыйОЛЕ.Всего = ТекущаяСтрока.Сумма+ТекущаяСтрока.СуммаНДС; //Если Остаток <> 0 Тогда //СчетНовыйОЛЕ.Остатки = Остаток; //КонецЕсли; СчетНовыйОЛЕ.НДС = НайденыйТоварВСтроку.СтавкаНДС.Получить(текущаяДата()).ТекущийЭлемент(); КонецЕсли; КонецЦикла; //Если СокрЛП(Склад) <> "<Пустое значение>" Тогда //СчетНовыйОЛЕ.МестоХранения = Склад; //КонецЕсли; //********************************* СчетНовыйОЛЕ.Записать(); ПоменятьКоммент = МассивЗаказов.Ссылка.ПолучитьОбъект(); ПоменятьКоммент.ВыгруженВСП = Истина; ПоменятьКоммент.Записать(); //КонецЕсли; Комментарий = Комментарий+ " "+"<h1>"+"Дата и время"+"</h1>"+"<h1>"+ТекущаяДата()+"</h1>"+"<br>"; Комментарий = Комментарий+"<Br>"+ "Передача заказов в стороннюю программу - Заказ № "+НомерЗаказа; КонецЦикла; Если НовыеЗаказыЕсть = Ложь Тогда Комментарий = Комментарий+ " "+"<h1>"+"Дата и время"+"</h1>"+"<h1>"+ТекущаяДата()+"</h1>"+"<br>"; Комментарий = Комментарий+"<Br>"+ "Новых заказов нет в стороннюю программу заказы выгружены небыли"; КонецЕсли; //******************************************* //Зафиксируем признак обмена в сторонней программе ИзмененныеОбъектыОЛЕ = ОбъектV77.CreateObject("Справочник.ИзмененныеОбъекты"); ИзмененныеОбъектыОЛЕ.ВыбратьЭлементы(); Сч1 = 0; Пока ИзмененныеОбъектыОЛЕ.ПолучитьЭлемент() = 1 Цикл Сч1 = Сч1 + 1; ИзмененныеОбъектыОЛЕ.НачатОбмен = 1; ИзмененныеОбъектыОЛЕ.Записать(); КонецЦикла; Комментарий = Комментарий+ " "+"<h1>"+"Дата и время"+"</h1>"+"<h1>"+ТекущаяДата()+"</h1>"+"<br>"; Комментарий = Комментарий+"<Br>"+ "Пометка данных к обмену в сторонней программе - количество записей = "+Сч1; //Служебные таблицы ОписаниеТипКоличественногоЧисла = Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(19,4)); ОписаниеТипЦеновогоЧисла = Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(15,2)); ОписаниеТипСтрок = Новый ОписаниеТипов("Строка",Новый КвалификаторыСтроки(30)); ТЗОстаткиТоваров = Новый ТаблицаЗначений; ТЗОстаткиТоваров.Колонки.Добавить("Артикул"); ТЗОстаткиТоваров.Колонки.Добавить("Направление"); ТЗОстаткиТоваров.Колонки.Добавить("Остаток", ОписаниеТипКоличественногоЧисла); ТЗЦеныТоваров = Новый ТаблицаЗначений; ТЗЦеныТоваров.Колонки.Добавить("Артикул",ОписаниеТипСтрок); ТЗЦеныТоваров.Колонки.Добавить("Цена", ОписаниеТипЦеновогоЧисла); ЕстьИзменения = Ложь; ИзмененныеОбъекты = ОбъектV77.CreateObject("Справочник.ИзмененныеОбъекты"); ИзмененныеОбъекты.ВыбратьЭлементы(); Пока ИзмененныеОбъекты.ПолучитьЭлемент() = 1 Цикл Если ИзмененныеОбъекты.НачатОбмен = 1 Тогда Комментарий = Комментарий+ " "+"<h1>"+"Дата и время"+"</h1>"+"<h1>"+ТекущаяДата()+"</h1>"+"<br>"; Комментарий = Комментарий+"<Br>"+ "Запрашиваем данные для обмена Объект - "+СокрЛП(ИзмененныеОбъекты.ВидОбъекта)+" Значение - "+ИзмененныеОбъекты.ОбъектЗначение; Если СокрЛП(ИзмененныеОбъекты.ТипОбъекта) = "Справочник" Тогда Если СокрЛП(ИзмененныеОбъекты.ВидОбъекта) = "Номенклатура" Тогда ЕстьИзменения = ОбработатьСправочникВременныхТоваров(ИзмененныеОбъекты.ОбъектЗначение,ОбъектV77); КонецЕсли; ИначеЕсли СокрЛП(ИзмененныеОбъекты.ТипОбъекта) = "Документ" Тогда Если СокрЛП(ИзмененныеОбъекты.ВидОбъекта) = "Счет" Тогда //ДобавитьОбработчик изменяющий статус у заказов ну либ оменяющий что либо в документе //************************************************************************************ //************************************************************************************ //************************************************************************************ //************************************************************************************ Иначе//все остальные документы ЕстьИзменения = ОбработатьСправочникВременныхТоваров(ИзмененныеОбъекты.ОбъектЗначение,ОбъектV77); КонецЕсли; КонецЕсли; КонецЕсли; ЕстьИзменения = Истина; КонецЦикла; Если ЕстьИзменения = Ложь Тогда Комментарий = Комментарий+ " "+"<h1>"+"Дата и время"+"</h1>"+"<h1>"+ТекущаяДата()+"</h1>"+"<br>"; Комментарий = Комментарий+"<Br>"+ "Новых данных нет в промежуточную программу остатки и цены либо новые товары выгружены небыли"; КонецЕсли; //Удалим Данные из ИзмененныхОбъектов ИзмененныеОбъектыОЛЕ.ВыбратьЭлементы(); Сч2 = 0; Пока ИзмененныеОбъектыОЛЕ.ПолучитьЭлемент() = 1 Цикл Если ИзмененныеОбъектыОЛЕ.НачатОбмен = 1 Тогда Сч2 = Сч2+1; ИзмененныеОбъектыОЛЕ.Удалить(1); КонецЕсли; КонецЦикла; Комментарий = Комментарий+ " "+"<h1>"+"Дата и время"+"</h1>"+"<h1>"+ТекущаяДата()+"</h1>"+"<br>"; Комментарий = Комментарий+"<Br>"+ "Удаление временных данных в сторонней программе - количество - "+Сч2; ОбъектV77 = Неопределено; Комментарий = Комментарий+ " "+"<h1>"+"Дата и время"+"</h1>"+"<h1>"+ТекущаяДата()+"</h1>"+"<br>"; Комментарий = Комментарий+"<Br>"+ "Отключение от сторонней программы"; ВременныеТоварыИзмененные = ЗапросВременныхИзмененных(); Сч3 = 0; Пока ВременныеТоварыИзмененные.Следующий() Цикл Сч3 = Сч3+1; ВременныеТоварыИзмененныеВыборкаОбъект = ВременныеТоварыИзмененные.Ссылка.ПолучитьОбъект(); Если ВременныеТоварыИзмененныеВыборкаОбъект.СтарыйОстаток <> ВременныеТоварыИзмененныеВыборкаОбъект.Остаток Тогда Если ВременныеТоварыИзмененныеВыборкаОбъект.РазницаВОстатках > 0 Тогда Если ВременныеТоварыИзмененныеВыборкаОбъект.ИзмененОстаток = Истина Тогда СтрОстатки = ТЗОстаткиТоваров.Добавить(); СтрОстатки.Артикул = СокрЛП(ВременныеТоварыИзмененныеВыборкаОбъект.Артикул); СтрОстатки.Направление = СокрЛП(ВременныеТоварыИзмененныеВыборкаОбъект.НаправлениеДвиженияОстатков); СтрОстатки.Остаток = ВременныеТоварыИзмененныеВыборкаОбъект.РазницаВОстатках; КонецЕсли; КонецЕсли; КонецЕсли; Если ВременныеТоварыИзмененныеВыборкаОбъект.ЦенаЗакупки > 0 Тогда Если ВременныеТоварыИзмененныеВыборкаОбъект.ИзмененаЦена = Истина Тогда Если ВременныеТоварыИзмененныеВыборкаОбъект.СтараяЦенаЗакупки <> ВременныеТоварыИзмененныеВыборкаОбъект.ЦенаЗакупки Тогда ЗВТПОАВыборкаДетальныеЗаписи = ЗапроситьВсеТоварыПООдинаковымАртикулам(СокрЛП(ВременныеТоварыИзмененныеВыборкаОбъект.Артикул)); Пока ЗВТПОАВыборкаДетальныеЗаписи.Следующий() Цикл СтрЦены = ТЗЦеныТоваров.Добавить(); СтрЦены.Артикул = СокрЛП(ЗВТПОАВыборкаДетальныеЗаписи.Артикул); СтрЦены.Цена = ЗВТПОАВыборкаДетальныеЗаписи.ЦенаЗакупки; КонецЦикла; КонецЕсли; КонецЕсли; КонецЕсли; ВременныеТоварыИзмененныеВыборкаОбъект.Измененный = Ложь; ВременныеТоварыИзмененныеВыборкаОбъект.ИзмененОстаток = Ложь; ВременныеТоварыИзмененныеВыборкаОбъект.ИзмененаЦена = Ложь; ВременныеТоварыИзмененныеВыборкаОбъект.Записать(); КонецЦикла; Комментарий = Комментарий+ " "+"<h1>"+"Дата и время"+"</h1>"+"<h1>"+ТекущаяДата()+"</h1>"+"<br>"; Комментарий = Комментарий+"<Br>"+ "Подготовка данных временных таблиц - количество записей = "+Сч3; Если ТЗОстаткиТоваров.Количество() > 0 Тогда ТЗОстаткиТоваров.Свернуть("Артикул,Направление","Остаток"); УстановитьНовыйОстаток(ТЗОстаткиТоваров,УзелыОбмена); КонецЕсли; Комментарий = Комментарий+ " "+"<h1>"+"Дата и время"+"</h1>"+"<h1>"+ТекущаяДата()+"</h1>"+"<br>"; Комментарий = Комментарий+"<Br>"+ "Обработка остатков - количество записей в ТЗ = "+ТЗОстаткиТоваров.Количество(); Если ТЗЦеныТоваров.Количество() > 0 Тогда УстановитьНовуюЦену(ТЗЦеныТоваров,УзелыОбмена); КонецЕсли; Комментарий = Комментарий+ " "+"<h1>"+"Дата и время"+"</h1>"+"<h1>"+ТекущаяДата()+"</h1>"+"<br>"; Комментарий = Комментарий+"<Br>"+ "Обработка цен - количество записей ТЗ = "+ТЗЦеныТоваров.Количество(); Иначе ОбъектV77 = Неопределено; ЕстьОшибки = Истина; Комментарий = Комментарий+ " "+"<h1>"+"Дата и время"+"</h1>"+"<h1>"+ТекущаяДата()+"</h1>"+"<br>"; Комментарий = ""+"Неудалось подключится к базе данных"+"<Br>"+"вероятно необходимо войти монопольно "+""; Комментарий = Комментарий +"<Br>"+ " После того как Вы вошли монопольно"+"<Br>"+" необходимо Выйти из монопольного режима и войти не монопольно " +""; Комментарий = Комментарий +"<Br>"+ " Если после данных действий подключение не удалось"+"<Br>"+" обращайтесь в техническую поддержку "+"<Br>"+" Ваш адрес либо по номеру +375 25 000 00 00 " +""; //Возврат; КонецЕсли; Если ЕстьОшибки = Истина Тогда ОтправитьСообщение("Отчет О ходе выполнения кода промежуточной программы ",Комментарий); КонецЕсли; КонецЦикла; КонецПроцедуры Функция ПолучитьИД(Объект) БезКавычекФигурных = СтрЗаменить(Объект,"{",""); БезКавычекФигурных = СтрЗаменить(БезКавычекФигурных,"}",""); БезПробелов = СокрЛП(БезКавычекФигурных); КоличествоЗнаков = СтрНайти(БезПробелов,",",НаправлениеПоиска.СКонца)+3; Возврат СокрЛП(Сред(Лев(БезПробелов,СтрДлина(БезПробелов)-1),КоличествоЗнаков,СтрДлина(БезПробелов))); КОнецФункции Функция НайтиРодителя(Код,Данные) Спр = Справочники.ВремнныеТоварыИзСтороннейПрограммы.НайтиПоКоду(СокрЛП(Код)); Если Спр.Пустая() = Ложь Тогда Если СОкрЛП(Спр.Наименование) = СокрЛП(Данные.Наименование) Тогда Возврат Спр; Иначе Спр = Справочники.ВремнныеТоварыИзСтороннейПрограммы.НайтиПоНаименованию(СокрЛП(Данные.Наименование)); Если Спр.Пустая() = Ложь Тогда Если СОкрЛП(Спр.Код) = СокрЛП(Данные.Код) Тогда Возврат Спр; Иначе НовГр = Справочники.ВремнныеТоварыИзСтороннейПрограммы.СоздатьГруппу(); НовГр.Код = Данные.Код; НовГр.Наименование = Данные.Наименование; НовГр.Записать(); Возврат НовГр; КонецЕсли; КонецЕсли; КонецЕсли; Иначе НовГр = Справочники.ВремнныеТоварыИзСтороннейПрограммы.СоздатьГруппу(); НовГр.Код = Данные.Код; НовГр.Наименование = Данные.Наименование; НовГр.Записать(); Возврат НовГр; КонецЕсли; КонецФункции //Используется для создания Новой номенклатуры и или изменения имеющиеся //Либо для обмновления цены или остатка товаров Функция ОбработатьСправочникВременныхТоваров(НоменклатураОЛЕ,ОбъектV77) ЕстьИзменения =Ложь; Объект = ОбъектV77.ЗначениеВстрокуВнутр(НоменклатураОЛЕ.ТекущийЭлемент()); ИдентификаторОбъекта = ПолучитьИД(СокрЛП(Объект)); //Поищем Такую Запись Товары = Справочники.ВремнныеТоварыИзСтороннейПрограммы; НайденнаяСсылка = Товары.НайтиПоРеквизиту("УИД",ИдентификаторОбъекта); Если НайденнаяСсылка = Товары.ПустаяСсылка() Тогда //Сообщить("Товары """ + ИдентификаторОбъекта + """ еще нет.");//убрать это так для проверки Если НоменклатураОЛЕ.ЭтоГруппа() = 1 Тогда Нов = Справочники.ВремнныеТоварыИзСтороннейПрограммы.СоздатьГруппу(); Нов.Код = НоменклатураОЛЕ.Код; Нов.Наименование = НоменклатураОЛЕ.Наименование; Нов.УИД = ИдентификаторОбъекта; Нов.ЭтоНовыйОбъект = Истина; Если НоменклатураОЛЕ.Родитель.Наименование <> "" Тогда Нов.Родитель = НайтиРодителя(НоменклатураОЛЕ.Родитель.Код,НоменклатураОЛЕ.Родитель); КонецЕсли; Нов.Записать(); Иначе Нов = Справочники.ВремнныеТоварыИзСтороннейПрограммы.СоздатьЭлемент(); Нов.Код = НоменклатураОЛЕ.Код; Нов.Наименование = НоменклатураОЛЕ.Наименование; Нов.УИД = ИдентификаторОбъекта; Нов.Артикул = НоменклатураОЛЕ.Артикул; Нов.ЭтоНовыйОбъект = Истина; Нов.Измененный = Истина; ПроцентНДС = Неопределено; Если СокрЛП(НоменклатураОЛЕ.СтавкаНДС.Получить(текущаяДата()).Наименование) = "БезНДС" Тогда Нов.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС; ИначеЕсли СокрЛП(НоменклатураОЛЕ.СтавкаНДС.Получить(текущаяДата()).Наименование) = "Без налога (НДС)" Тогда Нов.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС; ИначеЕсли СокрЛП(НоменклатураОЛЕ.СтавкаНДС.Получить(текущаяДата()).Наименование) = "0%" Тогда Нов.СтавкаНДС = Перечисления.СтавкиНДС.НДС0; ИначеЕсли СокрЛП(НоменклатураОЛЕ.СтавкаНДС.Получить(текущаяДата()).Наименование) = "10%" Тогда Нов.СтавкаНДС = Перечисления.СтавкиНДС.НДС10; ПроцентНДС = 10; ИначеЕсли СокрЛП(НоменклатураОЛЕ.СтавкаНДС.Получить(текущаяДата()).Наименование) = "18%" Тогда Нов.СтавкаНДС = Перечисления.СтавкиНДС.НДС18; ПроцентНДС = 18; ИначеЕсли СокрЛП(НоменклатураОЛЕ.СтавкаНДС.Получить(текущаяДата()).Наименование) = "20%" Тогда Нов.СтавкаНДС = Перечисления.СтавкиНДС.НДС20; ПроцентНДС = 20; ИначеЕсли СокрЛП(НоменклатураОЛЕ.СтавкаНДС.Получить(текущаяДата()).Наименование) = "24%" Тогда Нов.СтавкаНДС = Перечисления.СтавкиНДС.НДС24; ПроцентНДС = 24; ИначеЕсли СокрЛП(НоменклатураОЛЕ.СтавкаНДС.Получить(текущаяДата()).Наименование) = "25%" Тогда Нов.СтавкаНДС = Перечисления.СтавкиНДС.НДС25; ПроцентНДС = 25; КонецЕсли; Если НоменклатураОЛЕ.Родитель.Наименование <> "" Тогда Нов.Родитель = НайтиРодителя(НоменклатураОЛЕ.Родитель.Код,НоменклатураОЛЕ.Родитель); КонецЕсли; Субк1 = ОбъектV77.EvalExpr("ВидыСубконто.Номенклатура"); Субк2 = ОбъектV77.EvalExpr("ВидыСубконто.МестаХранения"); Субк3 = ОбъектV77.EvalExpr("ВидыСубконто.Партии"); БИ = ОбъектV77.CreateObject("БухгалтерскиеИтоги"); БИ.ИспользоватьСубконто(Субк1,НоменклатураОЛЕ.ТекущийЭлемент(),1,0); БИ.ИспользоватьСубконто(Субк2,Неопределено,1,0); БИ.ИспользоватьСубконто(Субк3,Неопределено,1,0); БИ.ВыполнитьЗапрос(ТекущаяДата(),ТекущаяДата(),"41.1",Неопределено,Неопределено,1,Неопределено,Неопределено); БИ.ВыбратьСубконто(1); Пока БИ.ПолучитьСубконто(1) = 1 Цикл ЕстьИзменения =Истина; Нов.СтарыйОстаток = Нов.Остаток; Нов.ИзмененОстаток = Истина; Нов.Остаток = БИ.СКД("К"); Нов.НаправлениеДвиженияОстатков = "Приход"; Нов.РазницаВОстатках = БИ.СКД("К"); БИ.ВыбратьСубконто(2); Пока БИ.ПолучитьСубконто(2) = 1 Цикл БИ.ВыбратьСубконто(3); Пока БИ.ПолучитьСубконто(3) = 1 Цикл ЕстьИзменения =Истина; Нов.СтараяЦенаЗакупки = Нов.ЦенаЗакупки; Нов.ЦенаЗакупки = БИ.Субконто(3).Цена; Нов.ИзмененаЦена = Истина; Если ПроцентНДС <> Неопределено Тогда Нов.ЦенаЗакупкиСНДС = (БИ.Субконто(3).Цена*ПроцентНДС/100)+БИ.Субконто(3).Цена; Иначе Нов.ЦенаЗакупкиСНДС = БИ.Субконто(3).Цена; КонецЕсли; КонецЦикла; КонецЦикла; КонецЦикла; Нов.Записать(); КонецЕсли; Иначе //такая запись есть запишем изменения Нов = НайденнаяСсылка.ПолучитьОбъект(); Если НоменклатураОЛЕ.ЭтоГруппа() = 1 Тогда Если СокрЛП(Нов.Код) <> СокрЛП(НоменклатураОЛЕ.Код) Тогда Нов.Код = НоменклатураОЛЕ.Код; КонецЕсли; Если СокрЛП(Нов.Наименование) <> СокрЛП(НоменклатураОЛЕ.Наименование) Тогда Нов.Наименование = НоменклатураОЛЕ.Наименование; КонецЕсли; Если СокрЛП(НоменклатураОЛЕ.Родитель.Наименование) <> "" Тогда Нов.Родитель = НайтиРодителя(НоменклатураОЛЕ.Родитель.Код,НоменклатураОЛЕ.Родитель); КонецЕсли; Нов.Записать(); Иначе Если СокрЛП(Нов.Код) <> СокрЛП(НоменклатураОЛЕ.Код) Тогда Нов.Код = НоменклатураОЛЕ.Код; КонецЕсли; Если СокрЛП(Нов.Наименование) <> СокрЛП(НоменклатураОЛЕ.Наименование) Тогда Нов.Наименование = НоменклатураОЛЕ.Наименование; КонецЕсли; Если СокрЛП(Нов.Артикул) <> СокрЛП(НоменклатураОЛЕ.Артикул) Тогда Нов.Артикул = НоменклатураОЛЕ.Артикул; КонецЕсли; ПроцентНДС = Неопределено; Если СокрЛП(НоменклатураОЛЕ.СтавкаНДС.Получить(текущаяДата()).Наименование) = "БезНДС" Тогда Нов.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС; Нов.ЭтоНовыйОбъект = Ложь; Нов.Измененный = Истина; ИначеЕсли СокрЛП(НоменклатураОЛЕ.СтавкаНДС.Получить(текущаяДата()).Наименование) = "Без налога (НДС)" Тогда Нов.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС; Нов.ЭтоНовыйОбъект = Ложь; Нов.Измененный = Истина; ИначеЕсли СокрЛП(НоменклатураОЛЕ.СтавкаНДС.Получить(текущаяДата()).Наименование) = "0%" Тогда Нов.СтавкаНДС = Перечисления.СтавкиНДС.НДС0; Нов.ЭтоНовыйОбъект = Ложь; Нов.Измененный = Истина; ИначеЕсли СокрЛП(НоменклатураОЛЕ.СтавкаНДС.Получить(текущаяДата()).Наименование) = "10%" Тогда Нов.СтавкаНДС = Перечисления.СтавкиНДС.НДС10; ПроцентНДС = 10; Нов.ЭтоНовыйОбъект = Ложь; Нов.Измененный = Истина; ИначеЕсли СокрЛП(НоменклатураОЛЕ.СтавкаНДС.Получить(текущаяДата()).Наименование) = "18%" Тогда Нов.СтавкаНДС = Перечисления.СтавкиНДС.НДС18; ПроцентНДС = 18; Нов.ЭтоНовыйОбъект = Ложь; Нов.Измененный = Истина; ИначеЕсли СокрЛП(НоменклатураОЛЕ.СтавкаНДС.Получить(текущаяДата()).Наименование) = "20%" Тогда Нов.СтавкаНДС = Перечисления.СтавкиНДС.НДС20; ПроцентНДС = 20; Нов.ЭтоНовыйОбъект = Ложь; Нов.Измененный = Истина; ИначеЕсли СокрЛП(НоменклатураОЛЕ.СтавкаНДС.Получить(текущаяДата()).Наименование) = "24%" Тогда Нов.СтавкаНДС = Перечисления.СтавкиНДС.НДС24; ПроцентНДС = 24; Нов.ЭтоНовыйОбъект = Ложь; Нов.Измененный = Истина; ИначеЕсли СокрЛП(НоменклатураОЛЕ.СтавкаНДС.Получить(текущаяДата()).Наименование) = "25%" Тогда Нов.СтавкаНДС = Перечисления.СтавкиНДС.НДС25; ПроцентНДС = 25; Нов.ЭтоНовыйОбъект = Ложь; Нов.Измененный = Истина; КонецЕсли; Направление = ""; Было = 0; Если СокрЛП(НоменклатураОЛЕ.Родитель.Наименование) <> "" Тогда Нов.Родитель = НайтиРодителя(НоменклатураОЛЕ.Родитель.Код,НоменклатураОЛЕ.Родитель); КонецЕсли; Субк1 = ОбъектV77.EvalExpr("ВидыСубконто.Номенклатура"); Субк2 = ОбъектV77.EvalExpr("ВидыСубконто.МестаХранения"); Субк3 = ОбъектV77.EvalExpr("ВидыСубконто.Партии"); БИ = ОбъектV77.CreateObject("БухгалтерскиеИтоги"); БИ.ИспользоватьСубконто(Субк1,НоменклатураОЛЕ.ТекущийЭлемент(),1,0); БИ.ИспользоватьСубконто(Субк2,Неопределено,1,0); БИ.ИспользоватьСубконто(Субк3,Неопределено,1,0); БИ.ВыполнитьЗапрос(ТекущаяДата(),ТекущаяДата(),"41.1",Неопределено,Неопределено,1,Неопределено,Неопределено); БылПРоходПоЦиклам = Ложь; Нов.СтараяЦенаЗакупки = Нов.ЦенаЗакупки; НоваяЦена = 0; БИ.ВыбратьСубконто(1); Пока БИ.ПолучитьСубконто(1) = 1 Цикл Если Нов.Остаток <> БИ.СКД("К") Тогда БылПРоходПоЦиклам = Истина; Было = Нов.Остаток; Если Нов.Остаток > БИ.СКД("К") Тогда Направление = "Расход"; ИначеЕсли Нов.Остаток < БИ.СКД("К") Тогда Направление = "Приход"; КонецЕсли; Нов.ИзмененОстаток = Истина; Если Направление <> "" Тогда ЕстьИзменения =Истина; Нов.СтарыйОстаток = Нов.Остаток; Нов.Остаток = БИ.СКД("К"); Нов.НаправлениеДвиженияОстатков = Направление; Если БИ.СКД("К")-Было<0 тогда Нов.РазницаВОстатках = (БИ.СКД("К")-Было)*-1; Иначе Нов.РазницаВОстатках = БИ.СКД("К")-Было; КонецЕсли; Нов.ЭтоНовыйОбъект = Ложь; Нов.Измененный = Истина; КонецЕсли; КонецЕсли; БИ.ВыбратьСубконто(2); Пока БИ.ПолучитьСубконто(2) = 1 Цикл БИ.ВыбратьСубконто(3); Пока БИ.ПолучитьСубконто(3) = 1 Цикл Если Нов.ЦенаЗакупки <> БИ.Субконто(3).Цена Тогда ЕстьИзменения =Истина; Нов.ЦенаЗакупки = БИ.Субконто(3).Цена; Нов.ЭтоНовыйОбъект = Ложь; Нов.Измененный = Истина; Нов.ИзмененаЦена = Истина; КонецЕсли; Если ПроцентНДС <> Неопределено Тогда ЕстьИзменения =Истина; Нов.ЦенаЗакупкиСНДС = (БИ.Субконто(3).Цена*ПроцентНДС/100)+БИ.Субконто(3).Цена; Нов.ЭтоНовыйОбъект = Ложь; Нов.Измененный = Истина; Иначе ЕстьИзменения =Истина; Нов.ЦенаЗакупкиСНДС = БИ.Субконто(3).Цена; Нов.ЭтоНовыйОбъект = Ложь; Нов.Измененный = Истина; КонецЕсли; КонецЦикла; КонецЦикла; КонецЦикла; Если БылПРоходПоЦиклам = Ложь Тогда Если Нов.Остаток <> 0 Тогда Было = Нов.Остаток; Если Нов.Остаток > 0 Тогда Направление = "Расход"; ИначеЕсли Нов.Остаток < 0 Тогда Направление = "Приход"; КонецЕсли; Нов.ИзмененОстаток = Истина; Если Направление <> "" Тогда ЕстьИзменения =Истина; Нов.СтарыйОстаток = Нов.Остаток; Нов.Остаток = 0; Нов.НаправлениеДвиженияОстатков = Направление; Если 0-Было<0 тогда Нов.РазницаВОстатках = (0-Было)*-1; Иначе Нов.РазницаВОстатках = 0-Было; КонецЕсли; Нов.ЭтоНовыйОбъект = Ложь; Нов.Измененный = Истина; КонецЕсли; КонецЕсли; КонецЕсли; Нов.Записать(); КонецЕсли; КонецЕсли; Возврат ЕстьИзменения; КонецФункции Процедура УстановитьНовуюЦену(ТЗЦеныТоваров,ДопДанные) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ТЗЦеныТоваров.Артикул КАК Артикул, | ТЗЦеныТоваров.Цена КАК Цена |ПОМЕСТИТЬ ТЗ |ИЗ | &ТЗЦеныТоваров КАК ТЗЦеныТоваров; | |ВЫБРАТЬ | ТЗ.Артикул КАК Артикул, | МАКСИМУМ(ТЗ.Цена) КАК Цена |ИЗ | ТЗ |СГРУППИРОВАТЬ ПО | ТЗ.Артикул"; Запрос.УстановитьПараметр("ТЗЦеныТоваров",ТЗЦеныТоваров); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); ДокОст = Документы.КорректировкаЗаписейРегистров.СоздатьДокумент(); ДокОст.Дата = ТекущаяДата(); ДокОст.Комментарий = "Установка Цен сформирован при обмене с 1с 7" ; ДокОст.Ответственный = ПараметрыСеанса.ТекущийПользователь; НовСтр = ДокОст.ТаблицаРегистровСведений.Добавить(); НовСтр.Имя = "ЦеныНоменклатуры"; НовСтр.Представление = "Цены номенклатуры"; ДокОст.Записать(); НовыеДанные = ДокОст.Ссылка; НаборЗаписей = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Регистратор.Установить(НовыеДанные); Записывать = Ложь; Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Записывать = Истина; НоменклНовЦена = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул",СокрЛП(ВыборкаДетальныеЗаписи.Артикул)).Ссылка; Если НоменклНовЦена <> Справочники.Номенклатура.ПустаяСсылка() Тогда НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Период = НовыеДанные.Дата; НоваяЗапись.Активность = Истина; НоваяЗапись.ТипЦен = ДопДанные.ТипЦены.Ссылка; НоваяЗапись.Номенклатура = НоменклНовЦена; Новаязапись.Валюта = ДопДанные.Валюта.Ссылка; НоваяЗапись.Цена = ВыборкаДетальныеЗаписи.Цена; Новаязапись.ЕдиницаИзмерения = НоменклНовЦена.ЕдиницаХраненияОстатков.Ссылка; Новаязапись.ПроцентНДС = НоменклНовЦена.СтавкаНДС; КонецЕсли; КонецЦикла; Если Записывать = Истина Тогда НаборЗаписей.Записать(); КонецЕсли; КонецПроцедуры //установимНовые Процедура УстановитьНовыйОстаток(Остатки,ДопДанные) ДокОст = Документы.КорректировкаЗаписейРегистров.СоздатьДокумент(); ДокОст.Дата = ТекущаяДата();//Запишем документ в следующий день, за днем свертки ДокОст.Комментарий = "Корректировка остатков Сформирован при обмене с 1с 7" ; ДокОст.Ответственный = ПараметрыСеанса.ТекущийПользователь; НовСтр = ДокОст.ТаблицаРегистровНакопления.Добавить(); НовСтр.Имя = "ТоварыНаСкладах"; НовСтр.Представление = "Товары на складах"; НовСтр = ДокОст.ТаблицаРегистровНакопления.Добавить(); НовСтр.Имя = "ТоварыОрганизаций"; НовСтр.Представление = "Товары организаций"; ДокОст.Записать(); НовыеДанные = ДокОст.Ссылка; НаборЗаписей = РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Регистратор.Установить(НовыеДанные); Дас = Ложь; остат = 0; Для Каждого Стр Из Остатки Цикл Если Стр.Остаток<0 тогда остат = Стр.Остаток*-1; Иначе остат = Стр.Остаток; КонецЕсли; Дас = Истина; НоменклНовОстаток = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул",СокрЛП(Стр.Артикул)).Ссылка; Если НоменклНовОстаток <> Справочники.Номенклатура.ПустаяСсылка() Тогда НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Период = НовыеДанные.Дата; НоваяЗапись.Активность = Истина; Если СокрЛП(Стр.Направление) = "Приход" Тогда НоваяЗапись.ВидДвижения = ВидДвиженияНакопления.Приход; ИначеЕсли СокрЛП(Стр.Направление) = "Расход" Тогда НоваяЗапись.ВидДвижения = ВидДвиженияНакопления.Расход; КонецЕсли; НоваяЗапись.Количество = остат; НоваяЗапись.Склад = ДопДанные.ОсновнойСклад.Ссылка; Новаязапись.Качество = ДопДанные.Качество.Ссылка; НоваяЗапись.Номенклатура = НоменклНовОстаток; НоваяЗапись.Регистратор = НовыеДанные; КонецЕсли; КонецЦикла; Если Дас = Истина Тогда НаборЗаписей.Записать(); КонецЕсли; НаборЗаписей = РегистрыНакопления.ТоварыОрганизаций.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Регистратор.Установить(НовыеДанные); Записывать = Ложь; остат = 0; Для Каждого Стр Из Остатки Цикл Если Стр.Остаток < 0 тогда остат = Стр.Остаток*-1; Иначе остат = Стр.Остаток; КонецЕсли; Записывать = Истина; НоменклНовОстаток = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул",СокрЛП(Стр.Артикул)).Ссылка; Если НоменклНовОстаток <> Справочники.Номенклатура.ПустаяСсылка() Тогда НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Период = НовыеДанные.Дата; НоваяЗапись.Активность = Истина; Если |
|||
32
ugorchina
10.05.18
✎
10:22
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |