gifts2017

Подводные камни конфигурации 1С:Предприниматель 7.7

Опубликовал Victor Nespyatin (victuan) в раздел Управление - Теория учета

У этой конфигурации есть мерзкая особенность: если ее верно настроить в соответствии с действующим законодательством (убрать галочку в Настройках "Отражать доходы и расходы по операциям прошлого года"), то она начинает очень медленно проводиться при групповом проведении и падать с ошибкой "CODEBASE ERROR. Error #: -920. Out of Memory. Sorting".

Это предостережение для тех, кто пользует конфу 1С:Предприниматель 7.7, устанавливая константу ПризнаниеРасходовПоДоходамПрошлыхПериодов в положение "Нет" (что требует современное толкование НК и ГК).

 

Есть в гл.модуле замечательная ф-я глДвиженияПоРасходамМатериальныхРесурсов - по сути выполняет списание партий ТМЦ. В эту ф-ю передается (среди прочих) параметр СобственныйЗапрос.
Если этот параметр равен 0, то в ф-и просто берутся конечные остатки партий ТМЦ на позицию проводимого документа. Если не 0, то строится чёрный запрос от начала года до проводимого документа, который якобы вытягивает обороты партий за период с начала года. Я сказал "якобы", потому что на самом деле он обороты вытягивает неправильно. В тексте запроса применена конструкция "Условие (Запрос.Количество > 0)" (ошибочно?), которая приводит к тому что ф-и Приход/Расход в запросе (те самые обороты) возвращают результат в виде 0 либо искаженным.
Может, это было так и задумано разработчиками, но я не могу понять для чего... Это, во-первых.

 

На последствия конструкции "Условие (Запрос.Количество > 0)" мне глаза открыл многоуважаемый Ёпрст, за что я его от всей души благодарю. В основном, именно за это, а не за многочисленные тексты прямых запросов, полученных от него, которые в большинстве случаев не работали :)))

 

Во-вторых, при групповом проведении документов постоянное выполнение чёрного запроса в случае, когда СобственныйЗапрос <> 0, приводит к резкому замедлению, примерно на порядок, проведения документов [напомню, "на порядок" значит "в 10 раз"] и к лавинообразному заполнению оперативной памяти и, как следствие, к аварийному завершению программы с ошибкой "Out of memory"

 

В-третьих. Я сделал анализ, в каких случаях и для чего используется параметр СобственныйЗапрос, не равный 0, в ф-и глДвиженияПоРасходамМатериальныхРесурсов.

 

Начнем с "для чего". Чёрный запрос якобы (почему "якобы" - написано выше) вытягивает Обороты, чтобы выяснить, какая часть из конечных остатков партий оплачена поставщику в текущем году, а какая в прошлом или ранее (налоговый период для ИП - год). Т.е. конечные остатки партий в таблице (ТаблицаОстатков), возвращаемой из данной ф-и расщепляются на пару строк, признак оплаты поставщику данной доли остатка (текущий/прошлый год) кладется в колонку этой таблицы "ПериодОплатыПоставщику".
Теперь выясним "в каких случаях".
Ф-я глДвиженияПоРасходамМатериальныхРесурсов используется в модулях проведения многих документов, и только один из них - "Реализация ТМЦ" - в качестве параметра СобственныйЗапросможет (если константа ПризнаниеРасходовПоДоходамПрошлыхПериодов /синоним "Отражать доходы и расходы по операциям прошлого года"/ равна "Нет") передавать значение, не равное 0. Значит, только этот вид документа может вызвать выполнение паразитного чёрного запроса.
Проанализируем как документ "Реализация ТМЦ" использует таблицу, возвращенную ф-ией глДвиженияПоРасходамМатериальныхРесурсов. Напомню, что чёрный запрос был призван, чтобы заполнить колонку "ПериодОплатыПоставщику" в возвращаемой ф-ией таблице.
Анализ привел к выводу, что расщепление конечных остатков партий товаров в зависимости от "ПериодОплатыПоставщику" в обработке проведения документа "Реализация ТМЦ"... никак не используется.
Честно признаться, от такого вывода я оторопел.

 

Т.е. самое обидное из всей ситуации с бесполезным чёрным запросом это "во-вторых": "приводит к резкому замедлению, примерно на порядок, проведения докуметов и ...  к аварийному завершению программы с ошибкой "Out of memory""
Мои теоретические измышления я подтвердил практикой (только этим весь день и занимался) - перепровел базу за два года, отключив этот чёрный запрос, и сравнил результат проведения с прошлым результатом, когда лопатился этот запрос. Финансовый результат стал отличным на 5 копеек при 140 млн. руб. оборота за год! ((( Т.е. практика подтвердила выжеизложенную теорию. (5 коп. скорее всего возникли из-за неполной чистоты эксперимента - я попутно исправил мелкую ошибку).
 
И все-таки, я начал глубже анализировать логику проведения документа "Реализация ТМЦ", силясь понять тайный замысел разработчиков.
Единственное упоминание на необходимость разделения оплат партий ТМЦ поставщику по годам, я нашел только в виде комментария:
// Если оплата поставщику была в этом году, а аванс от покупателя поступил в прошлом году
за которым следует код, который никак не использует полученное разделение.
Анализируя этот комментарий и следующий  за ним код, я смог допустить лишь следующее:
Разработчики хотели признать в доходы оплату от покупателя, полученную в прошлом периоде (году) и одновременно признать расходы по оплате поставщику, если оплата поставщику была произведена также в прошлом периоде. Если же оплата поставщику была произведена в текущем периоде (при оплате покупателю в прошлом), то для налогового учета мы не можем признать ни доходы, ни расходы.
На самом деле такая позиция несостоятельна, мы не можем признать оплату от покупателя прошлого года, даже если партия товара была также оплачена поставщику в прошлом периоде. Видимо, и разработчики также пришли к этому выводу и не стали использовать разделение оплат поставщику в модуле проведения документа "Реализация ТМЦ". Но при этом забыли исключить паразитный чёрный запрос в гл. модуле.

 

Значит, остается эту оплошность исправить самим (и надеяться, что кто-нибудь сможет достучаться по хотлайну до ЗАО "1С", чтобы они исправили это у себя в будущих релизах 1С:Предпринимателя - прошу прощения за наивность).
Итак, все исправления делаются в обработке проведения документа "Реализация":
1) из текста

Если НеПризнаватьРасходовПоПрошлымДоходам = 0 Тогда
	СписокРегистров.ДобавитьЗначение("Расходы");
КонецЕсли;

убираем условие - получается:

// Если НеПризнаватьРасходовПоПрошлымДоходам = 0 Тогда
СписокРегистров.ДобавитьЗначение("Расходы");
// КонецЕсли;

это чтобы ф-я глДвиженияПоРасходамМатериальныхРесурсов могла обратиться к регистру партий (Расходы) и вытянуть остатки.
2) Чтобы заблокировать выполнение чёрного запроса строку

Если глДвиженияПоРасходамМатериальныхРесурсов(Контекст, ТаблицаСтоимости, ОбщРег,, НеПризнаватьРасходовПоПрошлымДоходам) = 0 Тогда

меняем на:

Если глДвиженияПоРасходамМатериальныхРесурсов(Контекст, ТаблицаСтоимости, ОбщРег) = 0 Тогда

Уточню, НеПризнаватьРасходовПоПрошлымДоходам - это СобственныйЗапрос в параметрах данной ф-и.
 
И это всё.
Теперь конфигурация будет проводиться на порядок быстрее и не валиться с ошибкой "Out of memory"! Причем требуемый функционал данной конфы сохранится в полном объеме.

См. также

Подписаться Добавить вознаграждение

Комментарии

1. microsott microsott (microsott) 28.08.10 10:18
2. German Derkachenko (SoftLeon) 28.08.10 12:25
3. Михаил Рыков (zveruganet) 28.08.10 15:47
а как заставить конфигурацию принять изменения без потери лицензии?
не заставляя "индивидуального предпринимателя" переходить на ломанную 1С?
4. Victor Nespyatin (victuan) 28.08.10 18:45
(1) Что переделать, чтобы стало читаемо?
(3) Купить вместо БАЗОВОЙ версии версию ПРОФ
5. Александр Зубцов (iov) 29.08.10 00:22
(4)
Чтобы читаемо - простой текст- черный
(3) Вынести мозг 1С и франчам... можно просто доказать что программа не работает и вернуть деньги либо потребовать исправления. Можете поискать в инете прецеденты по ПО с ошибками есть. Программа должна выполнять заявленный функционал иначе это можно уже переквалифицировать в другую статью. В общем юрист вам в помощь и вам подарят версию проф или исправят ошибку.
А может и пошлют 1С не любит покупателей которые недовольны...
6. Victor Nespyatin (victuan) 29.08.10 14:47
(5) Темносиний нормально на белом фоне смотрится, не вижу смысла переделывать.
7. Сергей Троицкий (tsd) 29.08.10 15:46
(6) на самом деле нет. Стандартные цвета были бы лучше. Кроме того, я бы еще добавил форматирование по ширине и убрал бы половину красных выделений. В контексте они читаться будут нормально, а смысла их выделять особо нет, только глаза разбегаться начинают.

ЗЫ: а почему чОрный?
8. Аркадий Кучер (Abadonna) 29.08.10 16:13
(7) На вкус и цвет...
Меня тоже синий не радует, а слово "чОрный" вообще глаз режет, хоть автор мне ответил, что это специально. Не знаю-не знаю...
9. Аркадий Кучер (Abadonna) 29.08.10 16:15
+(8) Давно заметил, что проблемы у современной молодежи с "че" и "чо" существуют ;)
Пишут "девчЕнка", когда не надо, и наоборот
10. Victor Nespyatin (victuan) 29.08.10 17:13
Ваши замечания бесценны. Всяко со стороны взгляд свежее. Буду переделывать...
11. Victor Nespyatin (victuan) 29.08.10 17:15
(9) Ну-ну, могу и обидеться, "по-русскому" у меня врожденная грамотность, в школе одни пятерки были.
12. Victor Nespyatin (victuan) 29.08.10 17:16
(+11) Смайлик забыл :D
ЗЫ. На Абадонну не могу в принципе обидеться - он умный и почти земляк.
13. Аркадий Кучер (Abadonna) 29.08.10 17:18
(11) Ну так исправь ;)
Не будешь же ты каждому комментарию отвечать
врожденная грамотность

Когда человек пишет "начальНЕГ" - тут однозначно ясно, что прикалывается.
А в данном случае не совсем ясно
14. Аркадий Кучер (Abadonna) 29.08.10 17:40
А само исследование, думаю, плюсика достойно.
15. Александр Зубцов (iov) 29.08.10 17:57
а 1С в курсе этой проблемы? Или не стали беспокоить по мелочам? :D
16. Victor Nespyatin (victuan) 29.08.10 18:05
Ничё ни понимаю, что за глючный ИС.
А на маил комменты получаю, а здесь их нет (даже после F5) - ответить не могу. Они появляются только тогда когда я какой-нить комент тут напишу - например, этот. :|
17. Victor Nespyatin (victuan) 29.08.10 18:11
(13) Исправлю завтра - как раз рабочий день будет :) А насчет "чОрный" я почему-то думал, что это норма, т.к. многие известные специалисты (типа Ёпрста и пр.) его давно в таком виде употребляют - и мне лично такое произношение по душе приглянулось, как подчеркивание низменности данного способа программирования.
(15) Думаю, что нет. Так как данный сабж сопровождает 1С:Предпринимателя аж с 2004 года - а релизов с тех пор было немало.
(16) Ну вот, как я и говорил, только после моего поста высветилиь посты ветки, которые я получил как уведомления на маил (надеюсь, за "маил" Абадонна меня не упрекнет в грамотности :oops: )
18. Victor Nespyatin (victuan) 29.08.10 18:13
(15) Да я и не могу лично побеспокоить хотлайн этой проблемой - мой Заказчик не является обладателем лицензионной конфигурации :cry: .
19. Аркадий Кучер (Abadonna) 29.08.10 18:20
(16)
А на маил комменты получаю, а здесь их нет (даже после F5)

Контекстное меню, пункт "Очистить кеш публикации (beta)" тебе в помощь.
У меня в Опере так же, пока не нажмешь.
надеюсь, за "маил" Абадонна меня не упрекнет в грамотности

Напомнил ;): в дремучие годы (еще до ПК) знавал проггера, который на полном серьезе (уж не знаю какой язык он учил) называл операторы так: рун, тхен, гото, госуб, элсе.. :D
20. Сергей Троицкий (tsd) 29.08.10 19:39
(17) "черный запрос" стали писать для явного указания, что запрос выполнен не через объект бухгалтерские итоги, а обычным запросом 1С. А "чорный", не иначе, как кто-то по неграмотности своей стал писать.

Единственный нормальный способ обновить страницу ИС указан в (19), "Очистить кеш публикации (beta)". На тех страницах где этой ссылки нет, например в профиле, большая Ж... , кеш не сбросить.
Превратил народ ИС в большую файлопомойку, вот он и не выдерживает, приходится саппорту извращаться кеширование ставя.

21. Vasily Kushnir (vasilykushnir) 30.08.10 08:47
(19) У нас одна девка уже в институте читала на английском "томато" И "потато". Ее так и прозвали Ирка-ТоматоИПотато. А "немцы" (изучавшие немеций) часто говорят, как видят "ретурн", "баскспасе" (backspace). А один бывший учитель математики, ставший проггером, такие перлы выдавал - долго потом все из-под столов вылазили. Хотя при этом программил весьма прилично. Оказалось одно другому не помеха.
22. Аркадий Кучер (Abadonna) 30.08.10 08:49
(21) "баскспасе" еще куда ни шло. Я раз даже не сразу понял, что такое "баскуп филес";)
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа