|
Имитация действий пользователя | ☑ | ||
---|---|---|---|---|
0
Gray776
27.03.14
✎
11:06
|
В общем после загрузки реализации из одной базы в другую, Не проставляются счета учета у товаров, причина: в источнике не ведется бухгалтерский учет. Там просто нет, в источнике, этих счетов. Если зайти в документ и перевыбрать договор контрагента то, встают все реквизиты на место. Вот и думаю можно ли как то программно это проделывать при загрузке.
|
|||
1
VikingKosmo
27.03.14
✎
11:09
|
Разрешаю.
|
|||
2
vde69
модератор
27.03.14
✎
11:09
|
обработчик "после загрузки"
Для каждого СтрокаТоваров из Объект.Товары Цикл // Заполняем реквизиты табличной части. СчетаУчета = БухгалтерскийУчетПереопределяемый.ПолучитьСчетаУчетаНоменклатуры(Объект.Организация, СтрокаТоваров.Номенклатура, Объект.Склад, Объект.Дата, Объект.ДеятельностьНаПатенте); СтрокаТоваров.СчетУчета = СчетаУчета.СчетУчета; Если СчетаУчета.СчетДоходов <> Неопределено Тогда СтрокаТоваров.СчетДоходов = СчетаУчета.СчетДоходов; КонецЕсли; Если СчетаУчета.СчетРасходов <> Неопределено Тогда СтрокаТоваров.СчетРасходов = СчетаУчета.СчетРасходов; КонецЕсли; Если СчетаУчета.СчетПередачи <> Неопределено Тогда СтрокаТоваров.ПереданныеСчетУчета = СчетаУчета.СчетПередачи; КонецЕсли; Если СчетаУчета.СчетУчетаНДСПродажи <> Неопределено Тогда СтрокаТоваров.СчетУчетаНДСПоРеализации = СчетаУчета.СчетУчетаНДСПродажи; КонецЕсли; СвойстваСчетаДоходов = БухгалтерскийУчетВызовСервераПовтИсп.ПолучитьСвойстваСчета(СтрокаТоваров.СчетДоходов); СтрокаТоваров.Субконто = Параметры.СубконтоТовар; Если ЗначениеЗаполнено(СтрокаТоваров.СчетДоходов) И СвойстваСчетаДоходов.КоличествоСубконто > 0 Тогда СтрокаТоваров.Субконто = СвойстваСчетаДоходов.ВидСубконто1ТипЗначения.ПривестиЗначение(СтрокаТоваров.Субконто); Если ТипЗнч(СтрокаТоваров.Субконто) = Тип("СправочникСсылка.НоменклатурныеГруппы") Тогда СтрокаТоваров.Субконто = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СтрокаТоваров.Номенклатура, "НоменклатурнаяГруппа"); КонецЕсли; Иначе СтрокаТоваров.Субконто = Неопределено; КонецЕсли; СтрокаТоваров.Субконто = Параметры.СубконтоТовар; КонецЦикла; СчетаУчета = БухгалтерскийУчетПереопределяемый.ПолучитьСчетаРасчетовСКонтрагентом(Объект.Организация, Объект.Контрагент, Объект.ДоговорКонтрагента); Объект.СчетУчетаРасчетовСКонтрагентом = СчетаУчета.СчетРасчетовПокупателя; Объект.СчетУчетаРасчетовПоАвансам = СчетаУчета.СчетАвансовПокупателя; Объект.СуммаДокумента = Объект.Товары.Итог("Сумма"); Если не ОбъектНайден Тогда Объект.Записать(РежимЗаписиДокумента.Запись); КонецЕсли; Если не Объект.ПометкаУдаления и не Объект.Проведен И ЗначениеЗаполнено(ПараметрыОбъекта["НомерСФ"]) И ЗначениеЗаполнено(ПараметрыОбъекта["ДатаСФ"]) Тогда мСФ = Новый Структура("Основание, Дата, Номер, ОснованиеПеч", Объект.Ссылка, ПараметрыОбъекта["ДатаСФ"], СокрЛП(ПараметрыОбъекта["НомерСФ"]), СокрЛП(ПараметрыОбъекта["ОснованиеПеч"])); Параметры.МассивСФ.Добавить(мСФ); КонецЕсли; |
|||
3
vde69
модератор
27.03.14
✎
11:11
|
обработчик глобальный "после загрузки данных"
мМассивСФ = Неопределено; Если Параметры.Свойство("МассивСФ", мМассивСФ) Тогда Для каждого эл из мМассивСФ Цикл СчетФактура = УчетНДСПереопределяемый.НайтиПодчиненныйСчетФактуруВыданныйНаРеализацию(эл.Основание); Если СчетФактура = Неопределено Тогда СчетФактура = Документы.СчетФактураВыданный.СоздатьДокумент(); СчетФактура.Заполнить(эл.Основание); Иначе СчетФактура = СчетФактура.ПолучитьОбъект(); КонецЕсли; Если не СчетФактура.Проведен Тогда СчетФактура.Дата = эл.Дата; СчетФактура.Номер = эл.Номер; СчетФактура.ПлатежноРасчетныеДокументы.Очистить(); Попытка мТЗ = ЗначениеИзСтрокиВнутр(эл.ОснованиеПеч); Для каждого мЭл из мТЗ Цикл НоваяСтрока = СчетФактура.ПлатежноРасчетныеДокументы.Добавить(); НоваяСтрока.ДатаДокумента = мЭл.Дата; НоваяСтрока.НомерДокумента = мЭл.Номер; КонецЦикла Исключение КонецПопытки; Попытка СчетФактура.Записать(РежимЗаписиДокумента.Запись); Исключение КонецПопытки; КонецЕсли; КонецЦикла; КонецЕсли; |
|||
4
Gray776
27.03.14
✎
11:11
|
(2) та вот я как раз и на этом остановился либо проставлять у товаров счета и все такое либо перевыбрать договор контрагента
|
|||
5
vde69
модератор
27.03.14
✎
11:12
|
у меня все работает :)
|
|||
6
Gray776
27.03.14
✎
11:14
|
(3) (2) спасибо конечно мне теперь прикрутить это просто к конвертации и все тоже по тходу заработает.
Но блин интересно насчет просто заставить перевыбрать договор контрагента... Надо посмотреть код в 1с чего там при выборе договора делается может просто функцию али процедуру какую запустить... |
|||
7
Vladuha
27.03.14
✎
11:54
|
(6) ты сам практически ответил на свой вопрос :) Посмотри, что происходит в коде при изменении договора и добавь такой код в обработчик после загрузки объекта
|
|||
8
х86
27.03.14
✎
12:11
|
емнип в типовых есть процедурина запонитьсчетаучетачегототам
|
|||
9
Gray776
27.03.14
✎
15:11
|
(7) ничего хорошего там не происходит.
&НаКлиенте Процедура ДоговорКонтрагентаПриИзменении(Элемент) Если ЗначениеЗаполнено(Объект.ДоговорКонтрагента) Тогда ДоговорКонтрагентаПриИзмененииНаСервере(); КонецЕсли; КонецПроцедуры &НаСервере Процедура ДоговорКонтрагентаПриИзмененииНаСервере() РеализацияТоваровУслугФормы.ДоговорКонтрагентаПриИзменении(ЭтаФорма); КонецПроцедуры (8) БП 3.0. // Функция выполняет общие действия при изменении договора взаиморасчетов // // Параметры: // ДокументОбъект - объект редактируемого документа, // СпособЗаполненияЦен - значение перечисления "Способы заполнения цен", определяет по какому из // регистров ("Цены номенклатуры" или "Цены номенклатуры контрагентов") будет строиться запрос; // СтараяВалютаВзаиморасчетов - ссылка на справочник валют, определяет валюту взаиморасчетов // до изменения договора; // ВалютаРегламентированногоУчета - валюта регламентированного учета // СтруктураРеквизитовДокумента - структура, задает список обрабатываемых реквизитов документа; // если реквизит надо обрабатывать, то для него есть ключ в этой структуре // ТипОперации - необязаетельный, строка вида операции ("Покупка" или "Продажа"); // если не передан, то реквизиты, зависящие от вида операции, не заполняются // ИмяТабличнойЧасти - имя табличной части // СтарыйДоговорКонтрагента - старый договор контрагента, который был до изменения // СтруктураЗначений - структура, в эту переменную возвращаются значения элементов диалога выбора валюты. // Функция ПриИзмененииЗначенияДоговора(ДокументОбъект, СтараяВалютаВзаиморасчетов, ВалютаРегламентированногоУчета, СпособЗаполненияЦен, СтруктураРеквизитовДокумента, ТипОперации = "", ИмяТабличнойЧасти, СтарыйДоговорКонтрагента = Неопределено, СтруктураЗначений = Неопределено) Экспорт Перем Договор, ТипЦенВДоговоре; ПараметрыОбработки = Новый Структура(); ПараметрыОбработки.Вставить("ЗаполнитьЦены", Ложь); ПараметрыОбработки.Вставить("ПересчитатьЦены", Ложь); ПараметрыОбработки.Вставить("ОбновитьЦенаИВалюта", Ложь); ПараметрыОбработки.Вставить("ТекстВопроса", ""); ПараметрыОбработки.Вставить("ПредыдущаяВалюта", ДокументОбъект.ВалютаДокумента); МетаданныеДокумента = ДокументОбъект.Ссылка.Метаданные(); Договор = ДокументОбъект.ДоговорКонтрагента; Если НЕ ЗначениеЗаполнено(Договор) Тогда СтруктураКурсаДокумента = РаботаСКурсамиВалют.ПолучитьКурсВалюты(ВалютаРегламентированногоУчета, ДокументОбъект.Дата); Если ОбщегоНазначенияБП.ЕстьРеквизитДокумента("КурсВзаиморасчетов", МетаданныеДокумента) Тогда ДокументОбъект.КурсВзаиморасчетов = СтруктураКурсаДокумента.Курс; КонецЕсли; Если ОбщегоНазначенияБП.ЕстьРеквизитДокумента("КратностьВзаиморасчетов", МетаданныеДокумента) Тогда ДокументОбъект.КратностьВзаиморасчетов = СтруктураКурсаДокумента.Кратность; КонецЕсли; Возврат ПараметрыОбработки; Иначе // Если СпособЗаполненияЦен = Перечисления.СпособыЗаполненияЦен.ПоЦенамНоменклатурыКонтрагентов // и договоров взаиморасчетов имеет тип не договор поставщика, то это неправильно и надо вернуть старый договор // Аналогично если СпособЗаполненияЦен = Перечисления.СпособыЗаполненияЦен.ПоЦенамНоменклатуры // и договоров взаиморасчетов имеет тип не договор покупателя ИмяРеквизитаВидДоговора = БухгалтерскийУчетКлиентСерверПереопределяемый.ПолучитьИмяРеквизитаВидДоговора(); ЗначениеВидаДоговора = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Договор, ИмяРеквизитаВидДоговора); Если (СпособЗаполненияЦен = Перечисления.СпособыЗаполненияЦен.ПоЦенамНоменклатурыКонтрагентов И НЕ БухгалтерскийУчетПереопределяемый.ЭтоВидДоговораСПоставщиком(ЗначениеВидаДоговора) И НЕ БухгалтерскийУчетПереопределяемый.ЭтоВидДоговораСКомитентом(ЗначениеВидаДоговора)) Или (СпособЗаполненияЦен = Перечисления.СпособыЗаполненияЦен.ПоЦенамНоменклатуры И НЕ БухгалтерскийУчетПереопределяемый.ЭтоВидДоговораСПокупателем(ЗначениеВидаДоговора) И НЕ БухгалтерскийУчетПереопределяемый.ЭтоВидДоговораСКомиссионером(ЗначениеВидаДоговора)) Тогда ТекстПредупреждения = "В документе можно выбирать только договоры с " + ?(СпособЗаполненияЦен = Перечисления.СпособыЗаполненияЦен.ПоЦенамНоменклатуры, "покупателями или с комиссионерами", "поставщиками или комитентами")+"!"+Символы.ПС; Если ЗначениеЗаполнено(СтарыйДоговорКонтрагента) И СтарыйДоговорКонтрагента.Владелец = ДокументОбъект.Контрагент Тогда ТекстПредупреждения = ТекстПредупреждения + "Будет восстановлен старый договор."; ДокументОбъект.ДоговорКонтрагента = СтарыйДоговорКонтрагента; Иначе ТекстПредупреждения = ТекстПредупреждения + "Договор будет очищен."; ДокументОбъект.ДоговорКонтрагента = Неопределено; КонецЕсли; ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстПредупреждения); // дальше ничего пересчитывать не надо Возврат ПараметрыОбработки; КонецЕсли; КонецЕсли; Если ОбщегоНазначенияБП.ЕстьРеквизитДокумента("Сделка", МетаданныеДокумента) И НЕ ТипЗнч(ДокументОбъект.Сделка) = Тип("ДокументСсылка.ОтчетОРозничныхПродажах") Тогда ДокументОбъект.Сделка = Неопределено; КонецЕсли; Если НЕ ЗначениеЗаполнено(ДокументОбъект.Контрагент) Тогда ДокументОбъект.Контрагент = Договор.Владелец; ИначеЕсли ЗначениеЗаполнено(Договор) И ДокументОбъект.Контрагент <> Договор.Владелец Тогда //Владелец нового договора должен совпадать с контрагентом документа. ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Выбранный договор принадлежит другому контрагенту. |Будет восстановлен старый договор."); Договор = СтарыйДоговорКонтрагента; КонецЕсли; //Владелец нового договора должен совпадать с контрагентом документа. Если ОбщегоНазначенияБП.ЕстьРеквизитДокумента("Организация", МетаданныеДокумента) И НЕ ЗначениеЗаполнено(ДокументОбъект.Организация) Тогда ДокументОбъект.Организация = Договор.Организация; КонецЕсли; // если хоть в одной табличной части есть хотя бы одна строка, надо пересчитывать НадоПересчитывать = Ложь; Для каждого ТЧОбъекта Из МетаданныеДокумента.ТабличныеЧасти Цикл Если ДокументОбъект[ТЧОбъекта.Имя].Количество() > 0 Тогда НадоПересчитывать = Истина; Прервать; КонецЕсли; КонецЦикла; Если НадоПересчитывать = Ложь Тогда Если ОбщегоНазначенияБП.ЕстьРеквизитДокумента("ВалютаДокумента", МетаданныеДокумента) Тогда ДокументОбъект.ВалютаДокумента = БухгалтерскийУчетПереопределяемый.ВалютаВзаиморасчетов(Договор); СтруктураКурсаДокумента = РаботаСКурсамиВалют.ПолучитьКурсВалюты(БухгалтерскийУчетПереопределяемый.ВалютаВзаиморасчетов(Договор), ДокументОбъект.Дата); // В некоторых документах курс и кратность документа отсутствуют. Если ОбщегоНазначенияБП.ЕстьРеквизитДокумента("КурсДокумента", МетаданныеДокумента) Тогда ДокументОбъект.КурсДокумента = СтруктураКурсаДокумента.Курс; КонецЕсли; Если ОбщегоНазначенияБП.ЕстьРеквизитДокумента("КратностьДокумента", МетаданныеДокумента) Тогда ДокументОбъект.КратностьДокумента = СтруктураКурсаДокумента.Кратность; КонецЕсли; Если ОбщегоНазначенияБП.ЕстьРеквизитДокумента("КурсВзаиморасчетов", МетаданныеДокумента) Тогда ДокументОбъект.КурсВзаиморасчетов = СтруктураКурсаДокумента.Курс; КонецЕсли; Если ОбщегоНазначенияБП.ЕстьРеквизитДокумента("КратностьВзаиморасчетов", МетаданныеДокумента) Тогда ДокументОбъект.КратностьВзаиморасчетов = СтруктураКурсаДокумента.Кратность; КонецЕсли; КонецЕсли; Если ОбщегоНазначенияБП.ЕстьРеквизитДокумента("ТипЦен", МетаданныеДокумента) Тогда Если ЗначениеЗаполнено(Договор.ТипЦен) Тогда ДокументОбъект.ТипЦен = Договор.ТипЦен; Если ОбщегоНазначенияБП.ЕстьРеквизитДокумента("СуммаВключаетНДС", МетаданныеДокумента) Тогда ДокументОбъект.СуммаВключаетНДС= Договор.ТипЦен.ЦенаВключаетНДС; КонецЕсли; КонецЕсли; КонецЕсли; Иначе // ДокументОбъект.[ИмяТабличнойЧасти].Количество() > 0 // Если заполнен и по другим параметрам, то предварительно спрашиваем НеобходимоПересчитать = Ложь; ТекстВопроса = "Договор с контрагентом предусматривает параметры взаиморасчетов, |отличные от установленных в документе:"; // Валюта документа Если ОбщегоНазначенияБП.ЕстьРеквизитДокумента("ВалютаДокумента", МетаданныеДокумента) И (ЗначениеЗаполнено(БухгалтерскийУчетПереопределяемый.ВалютаВзаиморасчетов(Договор))) Тогда НовыйВалютаДокумента = БухгалтерскийУчетПереопределяемый.ВалютаВзаиморасчетов(Договор); СтруктураКурсаДокумента = РаботаСКурсамиВалют.ПолучитьКурсВалюты(НовыйВалютаДокумента, ДокументОбъект.Дата); Если СтруктураРеквизитовДокумента.Свойство("КурсВзаиморасчетов") Тогда СтруктураРеквизитовДокумента.Вставить("КурсВзаиморасчетов", СтруктураКурсаДокумента.Курс); КонецЕсли; Если СтруктураРеквизитовДокумента.Свойство("КратностьВзаиморасчетов") Тогда СтруктураРеквизитовДокумента.Вставить("КратностьВзаиморасчетов", СтруктураКурсаДокумента.Кратность); КонецЕсли; Если ДокументОбъект.ВалютаДокумента <> НовыйВалютаДокумента Тогда НеобходимоПересчитать = Истина; ПараметрыОбработки.ЗаполнитьЦены = Истина; ТекстВопроса = ТекстВопроса + Символы.ПС + "Валюта документа: """ + ?(НЕ ЗначениеЗаполнено(ДокументОбъект.ВалютаДокумента), "Не задана",СокрЛП(ДокументОбъект.ВалютаДокумента)) + """, договора: """ + СокрЛП(НовыйВалютаДокумента) + """."; КонецЕсли; КонецЕсли; // Тип цен НадоПередаватьНовыйТипЦен = Ложь; Если ОбщегоНазначенияБП.ЕстьРеквизитДокумента("ТипЦен", МетаданныеДокумента) Тогда НовыйТипЦен = ДокументОбъект.ТипЦен; Если ЗначениеЗаполнено(Договор.ТипЦен) Тогда НовыйТипЦен = Договор.ТипЦен; КонецЕсли; Если ДокументОбъект.ТипЦен <> НовыйТипЦен Тогда НеобходимоПересчитать = Истина; НадоПередаватьНовыйТипЦен = Истина; ПараметрыОбработки.ЗаполнитьЦены = Истина; ПараметрыОбработки.ОбновитьЦенаИВалюта = Истина; ТекстВопроса = ТекстВопроса + Символы.ПС + "Тип цен документа: """ + ?(НЕ ЗначениеЗаполнено(ДокументОбъект.ТипЦен), "Не задан",СокрЛП(ДокументОбъект.ТипЦен)) + """, договора: """ + СокрЛП(НовыйТипЦен) + """."; КонецЕсли; КонецЕсли; Если НеобходимоПересчитать Тогда ПараметрыОбработки.ТекстВопроса = ТекстВопроса + Символы.ПС + "Пересчитать документ в соответствии с договором?"; Иначе // Установим курс и кратность взаиморасчетов Если ОбщегоНазначенияБП.ЕстьРеквизитДокумента("ВалютаДокумента", МетаданныеДокумента) И (ЗначениеЗаполнено(БухгалтерскийУчетПереопределяемый.ВалютаВзаиморасчетов(Договор))) Тогда СтруктураКурсаВзаиморасчетов = РаботаСКурсамиВалют.ПолучитьКурсВалюты(БухгалтерскийУчетПереопределяемый.ВалютаВзаиморасчетов(Договор), ДокументОбъект.Дата); Если ОбщегоНазначенияБП.ЕстьРеквизитДокумента("КурсВзаиморасчетов", МетаданныеДокумента) Тогда ДокументОбъект.КурсВзаиморасчетов = СтруктураКурсаВзаиморасчетов.Курс; КонецЕсли; Если ОбщегоНазначенияБП.ЕстьРеквизитДокумента("КратностьВзаиморасчетов", МетаданныеДокумента) Тогда ДокументОбъект.КратностьВзаиморасчетов = СтруктураКурсаВзаиморасчетов.Кратность; КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; // ДокументОбъект.[ИмяТЧ].Количество() = 0 // если валюта документа после выбора договора не совпадала с валютой договора или с регламентированной, // очистим договор Если ОбщегоНазначенияБП.ЕстьРеквизитДокумента("ВалютаДокумента", МетаданныеДокумента) Тогда Если ДокументОбъект.ВалютаДокумента <> ВалютаРегламентированногоУчета И ДокументОбъект.ВалютаДокумента <> ДокументОбъект.ДоговорКонтрагента.ВалютаВзаиморасчетов Тогда ТекстПредупреждения = "Валюта документа не совпадает ни с валютой договора, ни с валютой регламентированного учета!"+Символы.ПС; Если ЗначениеЗаполнено(СтарыйДоговорКонтрагента) И СтарыйДоговорКонтрагента.Владелец = ДокументОбъект.Контрагент Тогда ТекстПредупреждения = ТекстПредупреждения + "Будет восстановлен старый договор."; ДокументОбъект.ДоговорКонтрагента = СтарыйДоговорКонтрагента; Иначе ТекстПредупреждения = ТекстПредупреждения + "Договор будет очищен."; ДокументОбъект.ДоговорКонтрагента = Неопределено; КонецЕсли; ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстПредупреждения); // дальше ничего пересчитывать не надо Возврат ПараметрыОбработки; КонецЕсли; КонецЕсли; Возврат ПараметрыОбработки; КонецФункции // ПриИзмененииЗначенияДоговора() ЭТО? |
|||
10
Йохохо
27.03.14
✎
15:15
|
(9) мало написал, там еще есть)
|
|||
11
Gray776
27.03.14
✎
15:16
|
(10) криво написал не сворачивается как код :(
|
|||
12
Gray776
28.03.14
✎
11:50
|
(2) СтрокаТоваров.Субконто = Параметры.СубконтоТовар;
А вот про эту строчку можно поподробнее? Что за параметр "СубконтоТовар"? Заколебался я вчера изобретать как перевыбрать договор. Пробую прикрутить то что в (2). |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |