|
Как забить субконто значениями в обработке | ☑ | ||
---|---|---|---|---|
0
andron81_81
07.12.18
✎
11:59
|
собственно сама проблема: не выходит присвоить суб. конто
Есть документ называется операции по 002. фактически это велосипед сделанный по образцу типового "Операция (бухгалтерский и налоговый учет)" с той лишь разницей , что этот велосипед заточен под 002. форма документа представляет собой таб. поле которое ассоциировано с "Движения.Хозрасчетный". Пытаюсь из екселя набить данными таб. часть формы и провести документ. пытаюсь при помощи вот такого кода (упростил задачу - пытаюсь пробить константу в одну из суб. конто) : Процедура ОбработатьНажатие(Элемент) Эксель = Новый COMОбъект("Excel.Application"); // Открытие книги Книга = Эксель.Workbooks.Open("D:\тест.xlsx"); // Позиционирование на нужном листе Лист = Книга.Worksheets(1); НовыйДокумент = Документы.WОперацияБух002.СоздатьДокумент(); //ДокументРасчетовСКонтрагентом.СоздатьДокумент(); КоличествоСтрок = Лист.Cells(1, 1).SpecialCells(11).Row; Для НомерСтроки = 1 По КоличествоСтрок Цикл НоваяСтрокаВРегистре=НовыйДокумент.Движения.Хозрасчетный.Добавить(); НоваяСтрокаВРегистре.СчетДт= ПланыСчетов.Хозрасчетный.НайтиПоКоду("002"); НоваяСтрокаВРегистре.Период = ТекущаяДата(); Для НомерКолонки = 1 По 3 Цикл ЗначениеЯчейки = Лист.Cells(НомерСтроки, НомерКолонки).Value; НоваяСтрокаВРегистре.СубконтоДт.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию("100 загадок-100 отгадок"); КонецЦикла; КонецЦикла; НовыйДокумент.Дата=ТекущаяДата(); НовыйДокумент.Записать(РежимЗаписиДокумента.Запись ); // Закрытие книги Книга.Close(0); // Закрытие Эксель и освобождение памяти Эксель.Quit(); Эксель = 0; КонецПроцедуры строка НоваяСтрокаВРегистре.СубконтоДт.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию("100 загадок-100 отгадок"); не ведёт ни к какому действию строка хоть по мне и абсурдна вызывает ошибку НоваяСтрокаВРегистре.СубконтоДт = Справочники.Номенклатура.НайтиПоНаименованию("100 загадок-100 отгадок"); |
|||
1
shuhard
07.12.18
✎
12:03
|
(0) в общих модулях есть процедура УстановитьСубконто
прямое призвоение не работет |
|||
2
unregistered
07.12.18
✎
12:23
|
(0) Субконто - это соответствие, в качестве ключа - элементы ПВХ ВидыСубконтоХозрасчетные. Чтобы установить значение надо использовать метод Вставить.
Вставить Синтаксис: Вставить(<Ключ>, <Значение>) Параметры: <Ключ> (обязательный) Тип: Произвольный. Ключ устанавливаемого элемента. <Значение> (необязательный) Тип: Произвольный. Значение устанавливаемого элемента. Если не указан, будет установлено Неопределено. Описание: Устанавливает значение элемента соответствия по ключу. Если элемент с переданным значением ключа существует, то его значение заменяется, в противном случае добавляется новый элемент. |
|||
3
unregistered
07.12.18
✎
12:26
|
А вообще ересь несусветная.
Надеюсь, всё описанное в (0) - это просто эксперименты для самообучения. |
|||
4
andron81_81
07.12.18
✎
12:35
|
(3) да. в качестве обучения в том числе, но надо сделать. а почему ересь несусветная ? поясните , пожалуйста.
|
|||
5
Вафель
07.12.18
✎
12:38
|
СубконтоДт[ПланыВидовХарактеристик.СубконтоХозрасчетные.Номенклатура] = Номенклатура
|
|||
6
Дмитрий
07.12.18
✎
12:41
|
зачем цикл с 1 по 3? (3)
|
|||
7
Дмитрий
07.12.18
✎
12:41
|
(6) не попал, хотел у (4) спросить
|
|||
8
catena
07.12.18
✎
12:53
|
(6)В экселе три субконто, Номенклатуру в код в пихнул от бессилия уже. Это моя версия.
|
|||
9
andron81_81
07.12.18
✎
12:53
|
(5) вот это работает !
|
|||
10
andron81_81
07.12.18
✎
12:55
|
(8) нет, не совсем. для упрощения задачи , чтобы тут разъяснить. у меня сама суть не получалось в субконто пробить.
|
|||
11
andron81_81
07.12.18
✎
12:58
|
(6) цикл как бы да. не нужен на самом деле. Вы правы
|
|||
12
catena
07.12.18
✎
13:52
|
(10)Установку субконто можно подсмотреть в модуле любого бух.документа. Ну, это вдруг еще какие-то вопросы с движениями будут.
|
|||
13
andron81_81
07.12.18
✎
14:32
|
(12) да, спасибо.
вот это СубконтоДт[ПланыВидовХарактеристик.СубконтоХозрасчетные.Номенклатура] = Номенклатура реально работает. |
|||
14
unregistered
07.12.18
✎
14:37
|
(4) > почему ересь несусветная ?
Да потому что подобные задачи, когда необходимо автоматизировать некую хозяйственную операцию, которую разработчик типовой конфигурации не автоматизировал, решаются тремя способами. 1. Создать отдельный документ, который выполняет требуемые движения. Подразумевается полноценный нормальный документ, умеющий делать проведение, отмену проведения и пр. и пр., а не суррогат типа "Операция (Б и НУ)". 2. Допилить какой-нибудь из существующих документов, который отражает соответствующую операцию. Этот вариант подходит, если уже есть похожий документ, который достаточно чуть подрихтовать. 3. Использовать ручную операцию (документ Операция). В этом варианте НЕ надо рисовать свой документ. Тут есть два пути. а) Создать шаблон типовой операции б) написать обработку заполнения (твой вариант). Рисовать аналог документа Операция - и есть ересь несусветная. |
|||
15
Eiffil123
07.12.18
✎
15:32
|
(5) можно проще писать:
СубконтоДт.Номенклатура = Номенклатура |
|||
16
andron81_81
07.12.18
✎
16:17
|
(14) есть глав.бух который сказал пользоваться велосипедным документом (который разработала фирмачка некая). И попробуй ослушайся его... получишь скандал , а в конечном итоге выговор. она рулит всем!
а документ этот набивается вручную. но можно составить екселовскую табличку и влить в него. чем я и занялся. |
|||
17
andron81_81
07.12.18
✎
16:18
|
решил вопрос оформить тут же. проблема в том , что документ создаётся , но не пишется в него ничего. если я сделаю не в цикле , то запишется - да. вопрос "почему" ? кто может что подсказать ?
Процедура ОбработатьНажатие(Элемент) Эксель = Новый COMОбъект("Excel.Application"); // Открытие книги Книга = Эксель.Workbooks.Open("D:\пп.xlsx"); // Позиционирование на нужном листе Лист = Книга.Worksheets(1); НовыйДокумент = Документы.WОперацияБух002.СоздатьДокумент(); //ДокументРасчетовСКонтрагентом.СоздатьДокумент(); НовыйДокумент.Дата=ТекущаяДата(); КоличествоСтрок = Лист.Cells(1, 1).SpecialCells(11).Row; //НомерСтроки = 2; Для НомерСтроки = 2 По КоличествоСтрок Цикл НоваяСтрокаВРегистре=НовыйДокумент.Движения.Хозрасчетный.Добавить(); НоваяСтрокаВРегистре.СчетДт= ПланыСчетов.Хозрасчетный.НайтиПоКоду("002"); НоваяСтрокаВРегистре.Период = ТекущаяДата(); НовыйДокумент.Организация=Справочники.Организации.НайтиПоНаименованию(Лист.Cells(НомерСтроки, 2).Value); КодКонтрагента = Лист.Cells(НомерСтроки, 3).Value; КодНоменклатуры = Формат(Лист.Cells(НомерСтроки, 5).Value,"ЧГ=0"); НоваяСтрокаВРегистре.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты] = Справочники.Контрагенты.НайтиПоКоду(КодКонтрагента); НоваяСтрокаВРегистре.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура ] = Справочники.Номенклатура.НайтиПоКоду(КодНоменклатуры); КонецЦикла; НовыйДокумент.Записать(РежимЗаписиДокумента.Запись ); Книга.Close(0); // Закрытие Эксель и освобождение памяти Эксель.Quit(); Эксель = 0; КонецПроцедуры |
|||
18
unregistered
07.12.18
✎
16:39
|
(16) Беги оттуда.
Мало того, что бухгалтер - самодур, так еще и подрядчики, которых она нанимает на доработку - идиоты конченые. PS Я понимаю когда новичок подобную *уйню *авнокодит, но вот чтобы нанятые на стороне спецы... |
|||
19
unregistered
07.12.18
✎
16:39
|
(17) > если я сделаю не в цикле , то запишется.
Странно. Вроде как не должно. |
|||
20
unregistered
07.12.18
✎
16:50
|
НовыйДокумент = Документы.WОперацияБух002.СоздатьДокумент();
НовыйДокумент.Дата = ТекущаяДата(); НовыйДокумент.Организация = Справочники.Организации.НайтиПоНаименованию(Лист.Cells(НомерСтроки, 2).Value); НовыйДокумент.Записать(); КоличествоСтрок = Лист.Cells(1, 1).SpecialCells(11).Row; Проводки = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей(); Проводки.Отбор.Регистратор.Установить(НовыйДокумент.Ссылка); Счет002 = ПланыСчетов.Хозрасчетный.НайтиПоКоду("002"); Для НомерСтроки = 2 По КоличествоСтрок Цикл Проводка = Проводки.Добавить(); Проводка.СчетДт = Счет002; Проводка.Период = НовыйДокумент.Дата; Проводка.Организация = НовыйДОкумент.Организация; КодКонтрагента = Лист.Cells(НомерСтроки, 3).Value; КодНоменклатуры = Формат(Лист.Cells(НомерСтроки, 5).Value,"ЧГ=0"); Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты] = Справочники.Контрагенты.НайтиПоКоду(КодКонтрагента); Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура ] = Справочники.Номенклатура.НайтиПоКоду(КодНоменклатуры); КонецЦикла; Проводки.Записать(); |
|||
21
unregistered
07.12.18
✎
16:51
|
НовыйДокумент.Организация = Справочники.Организации.НайтиПоНаименованию(Лист.Cells(НомерСтроки, 2).Value);
поменять на НовыйДокумент.Организация = Справочники.Организации.НайтиПоНаименованию(Лист.Cells(2, 2).Value); |
|||
22
andron81_81
10.12.18
✎
10:11
|
(18) город небольшой особо с под.лодки не убежишь. Да и опыта надо набраться - тогда , да - побегу с радостью.
|
|||
23
НастоящееИмя
10.12.18
✎
10:25
|
Бесят, эти умники... беги оттуда..., ересь несусветная... Деньги, млять, всем нужны, кто где может и кто как может, тот так и зарабатывет.
Сидят, епт, советчики. Хорошо,хоть подсказали, а то бы какахами закидали и пост утонул. |
|||
24
Мимохожий Однако
10.12.18
✎
10:36
|
(23) Купи себе новопассит ) ...бесят его...
|
|||
25
НастоящееИмя
10.12.18
✎
10:39
|
(24) Не... ну а чё...?
|
|||
26
НастоящееИмя
10.12.18
✎
10:39
|
)
|
|||
27
Мимохожий Однако
10.12.18
✎
10:42
|
(26) Понедельник у некоторых - день тяжёлый
|
|||
28
andron81_81
10.12.18
✎
11:18
|
(20) не понимаю. Если цикл делаешь до КоличествоСтрок (а это 362), тогда документ сохраняется абсолютно пустым.
Если делаю до 3 - работает, когда делаю до 10 - работает. до 50 уже не рабатает. Чудеса бывают ? |
|||
29
unregistered
10.12.18
✎
11:24
|
(28) > Чудеса бывают?
- Нет. Чудес не бывает. Что-то делаешь не так. Выкладывай код. |
|||
30
andron81_81
10.12.18
✎
11:51
|
(29)
это рабочий вариант, так как цикл до 10 . а если вместо десятки ставлю КоличествоСтрок , то документ пустой ! Я уже стал думать, что может с данными в екселе что-то не так , но тогда хорошо бы обругать наверно... Процедура ОбработатьНажатие(Элемент) Эксель = Новый COMОбъект("Excel.Application"); Книга = Эксель.Workbooks.Open("D:\пп.xlsx"); Лист = Книга.Worksheets(1); НовыйДокумент = Документы.WОперацияБух002.СоздатьДокумент(); НовыйДокумент.Дата = ТекущаяДата(); НовыйДокумент.Организация = Справочники.Организации.НайтиПоНаименованию(Лист.Cells(2, 2).Value); НовыйДокумент.Записать(); КоличествоСтрок = Лист.Cells(1, 1).SpecialCells(11).Row; Проводки = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей(); Проводки.Отбор.Регистратор.Установить(НовыйДокумент.Ссылка); Счет002 = ПланыСчетов.Хозрасчетный.НайтиПоКоду("002"); Для НомерСтроки = 2 По 10 Цикл Проводка = Проводки.Добавить(); Проводка.СчетДт = Счет002; Проводка.Период = НовыйДокумент.Дата; Проводка.Организация = НовыйДОкумент.Организация; КодКонтрагента = Лист.Cells(НомерСтроки, 3).Value; КодНоменклатуры = Формат(Лист.Cells(НомерСтроки, 5).Value,"ЧГ=0"); ДатаПеремещения = Лист.Cells(НомерСтроки, 8).Value; НомерПеремещения = Лист.Cells(НомерСтроки, 7).Value; ПартияПеремещение=Документы.ПеремещениеТоваров.НайтиПоНомеру(НомерПеремещения,ДатаПеремещения); ДатаЗаказаПокупателя = Лист.Cells(НомерСтроки, 11).Value; НомерЗаказаПокупателя = Лист.Cells(НомерСтроки, 10).Value; ЗаказаПокупателя=Документы.ЗаказПокупателя.НайтиПоНомеру(НомерЗаказаПокупателя , ДатаЗаказаПокупателя); Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.wЗаказПокупателя] = ПартияПеремещение; Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты] = Справочники.Контрагенты.НайтиПоКоду(КодКонтрагента); Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура ] = Справочники.Номенклатура.НайтиПоКоду(КодНоменклатуры); Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.wЗаказ ] = ЗаказаПокупателя; Проводка.КоличествоДт = Лист.Cells(НомерСтроки, 13).Value; КонецЦикла; Проводки.Записать(); Книга.Close(0); Эксель.Quit(); Эксель = 0; КонецПроцедуры |
|||
31
andron81_81
10.12.18
✎
11:53
|
p.s. не тратьте время на пинки по поводу названий аналитик. это проектировал не я !
wЗаказПокупателя - это партия (документ перемещения) wЗаказ - это документ заказ покупателя |
|||
32
catena
10.12.18
✎
11:56
|
Что говорит отладчик по содержимому Проводки перед .Записать()?
|
|||
33
andron81_81
10.12.18
✎
11:59
|
(32) ща прозвоню.
|
|||
34
andron81_81
10.12.18
✎
12:06
|
||||
35
unregistered
10.12.18
✎
12:08
|
У вас там еще и 4 субконто... Жесть какая.
Ну да фиг с ним. Варианты следующие. Первый. Пытаетесь записать набор записей, содержащий что-то противоестественное (например, Организация в проводках не соответствует Организации в документе). Второй. Проводки есть, но вы их не видите в документе (условное оформление или что-то типа этого). Третий. Есть какой-то программный код, например, в подписке перед записью НабораЗаписей который молча что-то выполняет, очищая набор записей. Четвертый. В (30) приведён не весь код и что-то ещё выполняется, что приводит к результату. |
|||
36
catena
10.12.18
✎
12:11
|
(34)Встать на верхнюю строчку и нажать карандашик.
|
|||
37
andron81_81
10.12.18
✎
12:33
|
(35) там сам документ ещё что-то чудит. если "прозванивать" записать(). Видимо в событии при записи какие-то коды надобно выполнить.
Ладно... Сейчас по каким-то причинам стало работать для всех строк таблицы. сейчас ещё сформирую екселовский документ и повторю попытку. отпишусь. |
|||
38
andron81_81
10.12.18
✎
14:16
|
(35) работает .
самый последний вопрос )) как мне в переменную КодКонтрагента присвоить содержимое ячейки из екселя убрав из начений ячейки апострофы пытаюсь так , но не выходит : КодКонтрагента = СтрЗаменить(Лист.Cells(НомерСтроки, 3).Value, "'", "")); |
|||
39
andron81_81
10.12.18
✎
14:18
|
(38) то есть не апостроф, а одинарная ковычка.
|
|||
40
andron81_81
10.12.18
✎
14:37
|
(39) а , всё не надо.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |